Home Reference Source

cables_dev/cables_ui/src/ui/commands/cmd_op.js

  1. import { Op } from "cables";
  2. import ManageOp from "../components/tabs/tab_manage_op.js";
  3. import { notify } from "../elements/notification.js";
  4. import { gui } from "../gui.js";
  5. import { platform } from "../platform.js";
  6. export { CmdOps };
  7. class CmdOps
  8. {
  9. /** @type {import("./commands.js").CommandObject[]} */
  10. static get commands()
  11. {
  12. return [{
  13. "cmd": "Code a new op",
  14. "category": "op",
  15. "icon": "op",
  16. "func": CmdOps.codeNewOp
  17. },
  18. {
  19. "cmd": "Downgrade selected op",
  20. "func": CmdOps.downGradeOp,
  21. "category": "op",
  22. "icon": "op"
  23. },
  24. {
  25. "cmd": "Upgrade selected ops",
  26. "func": CmdOps.upGradeOps,
  27. "category": "op",
  28. "icon": "op"
  29. },
  30. {
  31. "cmd": "Clone selected op",
  32. "func": CmdOps.cloneSelectedOp,
  33. "category": "op",
  34. "icon": "op"
  35. },
  36. {
  37. "cmd": "Clone selected ops to patch ops",
  38. "func": CmdOps.cloneSelectedOps,
  39. "category": "op",
  40. "icon": "op"
  41. },
  42. {
  43. "cmd": "Create new version of op",
  44. "func": CmdOps.createVersionSelectedOp,
  45. "category": "op",
  46. "icon": "op"
  47. },
  48. {
  49. "cmd": "Manage selected op",
  50. "func": CmdOps.manageOp,
  51. "category": "op",
  52. "icon": "op"
  53. },
  54. {
  55. "cmd": "Edit op",
  56. "category": "op",
  57. "func": CmdOps.editOp,
  58. "icon": "edit"
  59. },
  60. {
  61. "cmd": "Rename op",
  62. "func": CmdOps.renameOp,
  63. "category": "op",
  64. "icon": "op"
  65. },
  66. {
  67. "cmd": "Copy op names to clipboard",
  68. "func": CmdOps.copyNameClipboard,
  69. "category": "op",
  70. "icon": "op"
  71. },
  72. {
  73. "cmd": "Reload changed ops",
  74. "func": CmdOps.reloadChangedOps,
  75. "category": "op",
  76. "icon": "op"
  77. }
  78. ];
  79. }
  80. static codeNewOp()
  81. {
  82. gui.serverOps.createDialog();
  83. }
  84. static downGradeOp()
  85. {
  86. const selops = gui.patchView.getSelectedOps();
  87. for (let i = 0; i < selops.length; i++)
  88. {
  89. gui.patchView.downGradeOp(selops[i].id, selops[i].objName);
  90. }
  91. }
  92. static copyNameClipboard()
  93. {
  94. let str = "";
  95. const selops = gui.patchView.getSelectedOps();
  96. for (let i = 0; i < selops.length; i++)
  97. str += selops[i].objName.endl();
  98. navigator.clipboard.writeText(str);
  99. notify("copied " + selops.length + " op names to clipboard ", null, { "force": true });
  100. }
  101. static upGradeOps()
  102. {
  103. const selops = gui.patchView.getSelectedOps();
  104. for (let i = 0; i < selops.length; i++)
  105. {
  106. const opdoc = gui.opDocs.getOpDocById(selops[i].opId);
  107. if (opdoc && opdoc.oldVersion && opdoc.newestVersion && opdoc.newestVersion.name)
  108. gui.patchView.replaceOp(selops[i].id, opdoc.newestVersion.name);
  109. }
  110. }
  111. static reloadChangedOps()
  112. {
  113. for (let i in gui.serverOps.opIdsChangedOnServer)
  114. {
  115. gui.serverOps.execute(i, () =>
  116. {
  117. delete gui.serverOps.opIdsChangedOnServer[i];
  118. gui.opParams.refresh();
  119. });
  120. }
  121. gui.restriction.hide();
  122. }
  123. static cloneSelectedOp()
  124. {
  125. const ops = gui.patchView.getSelectedOps();
  126. if (ops.length > 0) gui.serverOps.cloneDialog(ops[0].objName, ops[0]);
  127. }
  128. static manageCurrentSubpatchOp()
  129. {
  130. const oldSubPatchId = gui.patchView.getCurrentSubPatch();
  131. const subOuter = gui.patchView.getSubPatchOuterOp(oldSubPatchId);
  132. new ManageOp(gui.mainTabs, subOuter.opId);
  133. }
  134. /**
  135. * @param {string} [opid]
  136. */
  137. static manageOp(opid)
  138. {
  139. if (!opid)
  140. {
  141. const ops = gui.patchView.getSelectedOps();
  142. if (ops.length > 0) opid = ops[0].opId;
  143. }
  144. new ManageOp(gui.mainTabs, opid);
  145. }
  146. /**
  147. * @param {Op[]} ops
  148. */
  149. static cloneSelectedOps(ops)
  150. {
  151. if (!ops)
  152. {
  153. ops = gui.patchView.getSelectedOps();
  154. for (let i = 0; i < ops.length; i++)
  155. {
  156. const op = ops[i];
  157. const opname = op.objName;
  158. let sanitizedOpName = opname.replaceAll(".", "_");
  159. let newOpname = platform.getPatchOpsNamespace() + sanitizedOpName;
  160. newOpname = newOpname.replaceAll(".Ops_", ".");
  161. const newOpnameNoVer = newOpname.replaceAll("_v", "V");
  162. let count = 0;
  163. newOpname = newOpnameNoVer;
  164. while (gui.opDocs.getOpDocByName(newOpname))
  165. {
  166. newOpname = newOpnameNoVer + count;
  167. count++;
  168. }
  169. op.renameopto = newOpname;
  170. console.log("new renameto name:", newOpname);
  171. }
  172. if (ops.length == 0) return;
  173. }
  174. // loadingModal = loadingModal || gui.startModalLoading("Cloning ops...");
  175. if (ops.length == 0)
  176. {
  177. gui.endModalLoading();
  178. return;
  179. }
  180. const op = ops.pop();
  181. const opname = op.objName;
  182. const newOpname = op.renameopto;
  183. if (gui.opDocs.getOpDocByName(newOpname))
  184. {
  185. // that opname was already renamed in list
  186. gui.patchView.replaceOp(op.id, newOpname);
  187. CmdOps.cloneSelectedOps(ops);
  188. }
  189. else
  190. {
  191. gui.serverOps.clone(op.opId, newOpname, () =>
  192. {
  193. gui.serverOps.loadOpDependencies(opname, function ()
  194. {
  195. gui.patchView.replaceOp(op.id, newOpname);
  196. notify("created op " + newOpname, null, { "force": true });
  197. CmdOps.cloneSelectedOps(ops);
  198. });
  199. }, { "openEditor": false });
  200. }
  201. }
  202. static renameOp(opName = null)
  203. {
  204. if (!opName)
  205. {
  206. const ops = gui.patchView.getSelectedOps();
  207. if (!ops.length) return;
  208. const op = gui.patchView.getSelectedOps()[0];
  209. opName = op.objName;
  210. }
  211. if (platform.frontendOptions.opRenameInEditor)
  212. {
  213. gui.serverOps.renameDialog(opName);
  214. }
  215. else
  216. {
  217. gui.serverOps.renameDialogIframe(opName);
  218. }
  219. }
  220. static createVersionSelectedOp()
  221. {
  222. const ops = gui.patchView.getSelectedOps();
  223. if (ops.length == 0) return;
  224. const opname = ops[0].objName;
  225. let newOpname = "";
  226. if (opname.includes("_v"))
  227. {
  228. const parts = opname.split("_v");
  229. newOpname = parts[0] + "_v" + (parseFloat(parts[1]) + 1);
  230. }
  231. else newOpname = opname + "_v2";
  232. gui.serverOps.clone(ops[0].opId, newOpname, () =>
  233. {
  234. gui.serverOps.loadOpDependencies(opname, function ()
  235. {
  236. gui.patchView.replaceOp(ops[0].id, newOpname);
  237. notify("created op " + newOpname, null, { "force": true });
  238. });
  239. });
  240. }
  241. static editOp(userInteraction = true)
  242. {
  243. const selops = gui.patchView.getSelectedOps();
  244. if (selops && selops.length > 0)
  245. {
  246. for (let i = 0; i < selops.length; i++) gui.serverOps.edit(selops[i].objName, false, null, userInteraction);
  247. }
  248. }
  249. }