@maketribe/ms-app 3.2.40 → 3.2.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/cjs/components/basic/doc-editor/plugins/AutoLinkPlugin/LinkEditDialog.js +2 -2
  2. package/dist/cjs/components/basic/doc-editor/plugins/AutoLinkPlugin/LinkEditDialog.js.map +1 -1
  3. package/dist/cjs/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js +1 -27
  4. package/dist/cjs/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js.map +1 -1
  5. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js +0 -1
  6. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js.map +1 -1
  7. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js +4 -6
  8. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js.map +1 -1
  9. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js +1 -27
  10. package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js.map +1 -1
  11. package/dist/cjs/components/data-model/data-table/components/column-sort/column-sort.js +23 -5
  12. package/dist/cjs/components/data-model/data-table/components/column-sort/column-sort.js.map +1 -1
  13. package/dist/cjs/components/data-model/data-table/views/table/table.js +4 -16
  14. package/dist/cjs/components/data-model/data-table/views/table/table.js.map +1 -1
  15. package/dist/cjs/message-impl/DialogerImpl.js +1 -1
  16. package/dist/cjs/message-impl/DialogerImpl.js.map +1 -1
  17. package/dist/cjs/modules/ms/components/material-list/material-item.vue.js +34 -1
  18. package/dist/cjs/modules/ms/components/material-list/material-item.vue.js.map +1 -1
  19. package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor.js.map +1 -1
  20. package/dist/cjs/modules/ms/dataviews/ms-config/MsConfigTable.js +9 -0
  21. package/dist/cjs/modules/ms/dataviews/ms-config/MsConfigTable.js.map +1 -1
  22. package/dist/esm/components/basic/doc-editor/plugins/AutoLinkPlugin/LinkEditDialog.js +2 -2
  23. package/dist/esm/components/basic/doc-editor/plugins/AutoLinkPlugin/LinkEditDialog.js.map +1 -1
  24. package/dist/esm/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js +3 -29
  25. package/dist/esm/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js.map +1 -1
  26. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js +0 -1
  27. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js.map +1 -1
  28. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js +5 -7
  29. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js.map +1 -1
  30. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js +2 -28
  31. package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js.map +1 -1
  32. package/dist/esm/components/data-model/data-table/components/column-sort/column-sort.js +24 -6
  33. package/dist/esm/components/data-model/data-table/components/column-sort/column-sort.js.map +1 -1
  34. package/dist/esm/components/data-model/data-table/views/table/table.js +4 -16
  35. package/dist/esm/components/data-model/data-table/views/table/table.js.map +1 -1
  36. package/dist/esm/message-impl/DialogerImpl.js +1 -1
  37. package/dist/esm/message-impl/DialogerImpl.js.map +1 -1
  38. package/dist/esm/modules/ms/components/material-list/material-item.vue.js +34 -1
  39. package/dist/esm/modules/ms/components/material-list/material-item.vue.js.map +1 -1
  40. package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor.js.map +1 -1
  41. package/dist/esm/modules/ms/dataviews/ms-config/MsConfigTable.js +9 -0
  42. package/dist/esm/modules/ms/dataviews/ms-config/MsConfigTable.js.map +1 -1
  43. package/dist/types/components/basic/doc-editor/plugins/AutoLinkPlugin/LinkEditDialog.d.ts +1 -1
  44. package/package.json +3 -3
  45. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js +0 -4
  46. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js.map +0 -1
  47. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js +0 -37
  48. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js.map +0 -1
  49. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js +0 -176
  50. package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js.map +0 -1
  51. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js +0 -5
  52. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js.map +0 -1
  53. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js +0 -38
  54. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js.map +0 -1
  55. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js +0 -176
  56. package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  const vue = require("vue");
3
- require("@maketribe/dm");
3
+ const dm = require("@maketribe/dm");
4
4
  const MsMaterialTable = require("../../dataviews/ms-material/MsMaterialTable.js");
5
5
  const _hoisted_1 = { class: "mk-material-item__tools" };
6
6
  const _hoisted_2 = { class: "mk-material-item__tools-item" };
@@ -46,6 +46,23 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
46
46
  const handleDownloadClick = () => {
47
47
  emit("download", props.material);
48
48
  };
49
+ const handleCopyClick = (isAbsolute) => {
50
+ let copyText = props.material.path;
51
+ if (isAbsolute) {
52
+ copyText = location.origin + props.material.path;
53
+ }
54
+ if (navigator.clipboard === void 0) {
55
+ const input = document.createElement("input");
56
+ input.value = copyText;
57
+ document.body.appendChild(input);
58
+ input.select();
59
+ document.execCommand("Copy");
60
+ document.body.removeChild(input);
61
+ } else {
62
+ navigator.clipboard.writeText(copyText);
63
+ }
64
+ dm.Messager.success({ message: "复制成功" });
65
+ };
49
66
  return (_ctx, _cache) => {
50
67
  const _component_MKSvgIcon = vue.resolveComponent("MKSvgIcon");
51
68
  const _component_ElDropdownItem = vue.resolveComponent("ElDropdownItem");
@@ -90,6 +107,22 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
90
107
  vue.createTextVNode("删除")
91
108
  ]),
92
109
  _: 1
110
+ }),
111
+ vue.createVNode(_component_ElDropdownItem, {
112
+ onClick: _cache[0] || (_cache[0] = ($event) => handleCopyClick(true))
113
+ }, {
114
+ default: vue.withCtx(() => [
115
+ vue.createTextVNode("复制绝对路径")
116
+ ]),
117
+ _: 1
118
+ }),
119
+ vue.createVNode(_component_ElDropdownItem, {
120
+ onClick: _cache[1] || (_cache[1] = ($event) => handleCopyClick(false))
121
+ }, {
122
+ default: vue.withCtx(() => [
123
+ vue.createTextVNode("复制相对路径")
124
+ ]),
125
+ _: 1
93
126
  })
94
127
  ]),
95
128
  default: vue.withCtx(() => [
@@ -1 +1 @@
1
- {"version":3,"file":"material-item.vue.js","sources":["../../../../../../src/modules/ms/components/material-list/material-item.vue"],"sourcesContent":["<template>\r\n <ElCard\r\n :class=\"['mk-material-item', isSelected ? 'is-selected' : '']\"\r\n shadow=\"never\"\r\n @click.capture=\"handleClick\"\r\n >\r\n <div class=\"mk-material-item__tools\">\r\n <div class=\"mk-material-item__tools-item\">\r\n <ElDropdown>\r\n <MKSvgIcon iconClass=\"More\" />\r\n\r\n <template #dropdown>\r\n <ElDropdownItem\r\n v-if=\"currentMaterialTypeValue === 1\"\r\n @click=\"handleCutClick\"\r\n >\r\n 裁切\r\n </ElDropdownItem>\r\n <ElDropdownItem\r\n v-if=\"currentMaterialTypeValue === 2\"\r\n @click=\"handleDownloadClick\"\r\n >\r\n 下载\r\n </ElDropdownItem>\r\n <ElDropdownItem @click=\"handleMoveClick\">移动分组</ElDropdownItem>\r\n <ElDropdownItem @click=\"handleDeleteClick\">删除</ElDropdownItem>\r\n </template>\r\n </ElDropdown>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mk-material-item__preview\">\r\n <MaterialComponent :src=\"material.path\" />\r\n </div>\r\n <div class=\"mk-material-item__title\">{{ material.desc }}</div>\r\n </ElCard>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { MsMaterial, MsMaterialTable } from \"../../dataviews/ms-material\";\r\nimport { computed, toRaw } from \"vue\";\r\n\r\nconst props = defineProps({\r\n materialTable: { type: MsMaterialTable, required: true },\r\n material: { type: Object, required: true },\r\n});\r\n\r\nconst emit = defineEmits([\"click\", \"move\", \"cut\", \"download\"]);\r\n\r\nconst isSelected = computed(() =>\r\n props.materialTable.getSelection().includes(props.material.id)\r\n);\r\n\r\nconst currentMaterialTypeValue = computed(\r\n () => props.materialTable.currentMaterialType?.value ?? null\r\n);\r\n\r\nconst MaterialComponent = computed(() => {\r\n const component =\r\n props.materialTable.resolveMaterialComponent(\r\n props.material as MsMaterial\r\n ) || props.materialTable.materialComponents.resolveComponent(\"MKFileView\")!;\r\n\r\n return toRaw(component.component);\r\n});\r\n\r\nconst handleClick = (event: MouseEvent) => {\r\n emit(\"click\", event);\r\n};\r\n\r\nconst handleDeleteClick = () => {\r\n props.materialTable.deleteRecord(props.material);\r\n};\r\n\r\nconst handleMoveClick = () => {\r\n emit(\"move\", props.material);\r\n};\r\n\r\nconst handleCutClick = () => {\r\n emit(\"cut\", props.material);\r\n};\r\n\r\nconst handleDownloadClick = () => {\r\n emit(\"download\", props.material);\r\n};\r\n</script>\r\n"],"names":["computed","toRaw"],"mappings":";;;;;;;;;;;;;;;;AA0CA,UAAM,QAAQ;AAKd,UAAM,OAAO;AAEb,UAAM,aAAaA,IAAA;AAAA,MAAS,MAC1B,MAAM,cAAc,aAAA,EAAe,SAAS,MAAM,SAAS,EAAE;AAAA,IAAA;AAG/D,UAAM,2BAA2BA,IAAA;AAAA,MAC/B,MAAA;;AAAM,4BAAM,cAAc,wBAApB,mBAAyC,UAAS;AAAA;AAAA,IAAA;AAGpD,UAAA,oBAAoBA,IAAAA,SAAS,MAAM;AACjC,YAAA,YACJ,MAAM,cAAc;AAAA,QAClB,MAAM;AAAA,MACH,KAAA,MAAM,cAAc,mBAAmB,iBAAiB,YAAY;AAEpE,aAAAC,IAAA,MAAM,UAAU,SAAS;AAAA,IAAA,CACjC;AAEK,UAAA,cAAc,CAAC,UAAsB;AACzC,WAAK,SAAS,KAAK;AAAA,IAAA;AAGrB,UAAM,oBAAoB,MAAM;AACxB,YAAA,cAAc,aAAa,MAAM,QAAQ;AAAA,IAAA;AAGjD,UAAM,kBAAkB,MAAM;AACvB,WAAA,QAAQ,MAAM,QAAQ;AAAA,IAAA;AAG7B,UAAM,iBAAiB,MAAM;AACtB,WAAA,OAAO,MAAM,QAAQ;AAAA,IAAA;AAG5B,UAAM,sBAAsB,MAAM;AAC3B,WAAA,YAAY,MAAM,QAAQ;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"material-item.vue.js","sources":["../../../../../../src/modules/ms/components/material-list/material-item.vue"],"sourcesContent":["<template>\r\n <ElCard\r\n :class=\"['mk-material-item', isSelected ? 'is-selected' : '']\"\r\n shadow=\"never\"\r\n @click.capture=\"handleClick\"\r\n >\r\n <div class=\"mk-material-item__tools\">\r\n <div class=\"mk-material-item__tools-item\">\r\n <ElDropdown>\r\n <MKSvgIcon iconClass=\"More\" />\r\n\r\n <template #dropdown>\r\n <ElDropdownItem\r\n v-if=\"currentMaterialTypeValue === 1\"\r\n @click=\"handleCutClick\"\r\n >\r\n 裁切\r\n </ElDropdownItem>\r\n <ElDropdownItem\r\n v-if=\"currentMaterialTypeValue === 2\"\r\n @click=\"handleDownloadClick\"\r\n >\r\n 下载\r\n </ElDropdownItem>\r\n <ElDropdownItem @click=\"handleMoveClick\">移动分组</ElDropdownItem>\r\n <ElDropdownItem @click=\"handleDeleteClick\">删除</ElDropdownItem>\r\n <ElDropdownItem @click=\"handleCopyClick(true)\">复制绝对路径</ElDropdownItem>\r\n <ElDropdownItem @click=\"handleCopyClick(false)\">复制相对路径</ElDropdownItem>\r\n </template>\r\n </ElDropdown>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mk-material-item__preview\">\r\n <MaterialComponent :src=\"material.path\" />\r\n </div>\r\n <div class=\"mk-material-item__title\">{{ material.desc }}</div>\r\n </ElCard>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { Messager } from \"@maketribe/dm\";\r\nimport { MsMaterial, MsMaterialTable } from \"../../dataviews/ms-material\";\r\nimport { computed, getCurrentInstance, toRaw } from \"vue\";\r\n\r\nconst props = defineProps({\r\n materialTable: { type: MsMaterialTable, required: true },\r\n material: { type: Object, required: true },\r\n});\r\n\r\nconst emit = defineEmits([\"click\", \"move\", \"cut\", \"download\"]);\r\n\r\nconst isSelected = computed(() =>\r\n props.materialTable.getSelection().includes(props.material.id)\r\n);\r\n\r\nconst currentMaterialTypeValue = computed(\r\n () => props.materialTable.currentMaterialType?.value ?? null\r\n);\r\n\r\nconst MaterialComponent = computed(() => {\r\n const component =\r\n props.materialTable.resolveMaterialComponent(\r\n props.material as MsMaterial\r\n ) || props.materialTable.materialComponents.resolveComponent(\"MKFileView\")!;\r\n\r\n return toRaw(component.component);\r\n});\r\n\r\nconst handleClick = (event: MouseEvent) => {\r\n emit(\"click\", event);\r\n};\r\n\r\nconst handleDeleteClick = () => {\r\n props.materialTable.deleteRecord(props.material);\r\n};\r\n\r\nconst handleMoveClick = () => {\r\n emit(\"move\", props.material);\r\n};\r\n\r\nconst handleCutClick = () => {\r\n emit(\"cut\", props.material);\r\n};\r\n\r\nconst handleDownloadClick = () => {\r\n emit(\"download\", props.material);\r\n};\r\n\r\nconst handleCopyClick = (isAbsolute: boolean) => {\r\n let copyText = props.material.path\r\n if(isAbsolute){\r\n copyText = location.origin + props.material.path\r\n }\r\n\r\n //兼容性判断\r\n if (navigator.clipboard === undefined) {\r\n //通过input标签进行复制\r\n const input = document.createElement(\"input\");\r\n input.value = copyText;\r\n document.body.appendChild(input);\r\n input.select();\r\n document.execCommand(\"Copy\");\r\n document.body.removeChild(input);\r\n } else {\r\n navigator.clipboard.writeText(copyText);\r\n }\r\n Messager.success({ message: \"复制成功\" });\r\n};\r\n</script>\r\n"],"names":["computed","toRaw","Messager"],"mappings":";;;;;;;;;;;;;;;;AA6CA,UAAM,QAAQ;AAKd,UAAM,OAAO;AAEb,UAAM,aAAaA,IAAA;AAAA,MAAS,MAC1B,MAAM,cAAc,aAAA,EAAe,SAAS,MAAM,SAAS,EAAE;AAAA,IAAA;AAG/D,UAAM,2BAA2BA,IAAA;AAAA,MAC/B,MAAA;;AAAM,4BAAM,cAAc,wBAApB,mBAAyC,UAAS;AAAA;AAAA,IAAA;AAGpD,UAAA,oBAAoBA,IAAAA,SAAS,MAAM;AACjC,YAAA,YACJ,MAAM,cAAc;AAAA,QAClB,MAAM;AAAA,MACH,KAAA,MAAM,cAAc,mBAAmB,iBAAiB,YAAY;AAEpE,aAAAC,IAAA,MAAM,UAAU,SAAS;AAAA,IAAA,CACjC;AAEK,UAAA,cAAc,CAAC,UAAsB;AACzC,WAAK,SAAS,KAAK;AAAA,IAAA;AAGrB,UAAM,oBAAoB,MAAM;AACxB,YAAA,cAAc,aAAa,MAAM,QAAQ;AAAA,IAAA;AAGjD,UAAM,kBAAkB,MAAM;AACvB,WAAA,QAAQ,MAAM,QAAQ;AAAA,IAAA;AAG7B,UAAM,iBAAiB,MAAM;AACtB,WAAA,OAAO,MAAM,QAAQ;AAAA,IAAA;AAG5B,UAAM,sBAAsB,MAAM;AAC3B,WAAA,YAAY,MAAM,QAAQ;AAAA,IAAA;AAG3B,UAAA,kBAAkB,CAAC,eAAwB;AACrC,UAAA,WAAW,MAAM,SAAS;AAC9B,UAAG,YAAW;AACD,mBAAA,SAAS,SAAS,MAAM,SAAS;AAAA,MAC9C;AAGE,UAAA,UAAU,cAAc,QAAW;AAE/B,cAAA,QAAQ,SAAS,cAAc,OAAO;AAC5C,cAAM,QAAQ;AACL,iBAAA,KAAK,YAAY,KAAK;AAC/B,cAAM,OAAO;AACb,iBAAS,YAAY,MAAM;AAClB,iBAAA,KAAK,YAAY,KAAK;AAAA,MAAA,OAC1B;AACK,kBAAA,UAAU,UAAU,QAAQ;AAAA,MACxC;AACAC,SAAAA,SAAS,QAAQ,EAAE,SAAS,OAAQ,CAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"rich-text-editor.js","sources":["../../../../../../src/modules/ms/components/rich-text-editor/rich-text-editor.tsx"],"sourcesContent":["import { Ref, computed, defineComponent, getCurrentInstance, onBeforeUnmount, onMounted, ref, unref, watch, withCtx } from \"vue\";\r\nimport { MKMaterialSelect } from \"../material-select\";\r\nimport TinyMCE from \"tinymce\";\r\nimport \"tinymce/themes/silver/theme.js\";\r\nimport \"tinymce/models/dom/model.min.js\";\r\nimport \"tinymce/icons/default/icons.min.js\";\r\nimport \"tinymce/plugins/link\";\r\n// import \"tinymce/plugins/table\";\r\nimport \"tinymce/plugins/fullscreen\";\r\nimport \"tinymce/plugins/code\";\r\n// import \"tinymce/plugins/image\";\r\nimport \"tinymce/plugins/quickbars\";\r\nimport \"tinymce/plugins/lists\";\r\nimport \"./langs/zh-Hans.js\";\r\n\r\nimport \"./skins/ui/ms/skin.js\";\r\nimport \"./skins/ui/ms/content.js\";\r\nimport \"./skins/content/ms/content.js\";\r\n\r\nimport contentStyle from \"./content.css?raw\";\r\n\r\nimport { richTextEditorEmits, richTextEditorProps } from \"./rich-text-editor-options\";\r\n\r\nexport default defineComponent({\r\n\tname: \"MKRichTextEditor\",\r\n\tprops: richTextEditorProps,\r\n\temits: richTextEditorEmits,\r\n\tsetup(props, { emit }) {\r\n\t\tconst richTextEditorEl: Ref<HTMLElement | null> = ref(null);\r\n\r\n\t\tconst instance = getCurrentInstance();\r\n\r\n // 这个方法暂时没用上\r\n\t\t// function escapeHtml(text: string) {\r\n\t\t// \treturn text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&#039;\");\r\n\t\t// }\r\n\r\n\t\tonMounted(async () => {\r\n\t\t\tconst tinymceInstance = await TinyMCE.init({\r\n\t\t\t\ttarget: unref(richTextEditorEl)!,\r\n\t\t\t\tpromotion: false, \r\n menubar: false,\r\n\t\t\t\tplugins:props.plugins,\r\n //\"undo redo | styles | fontfamily | fontsize forecolor | bold italic underline strikethrough | alignleft aligncenter alignright | material | outdent indent | link | table | hr | removeformat | code fullscreen\"\r\n toolbar: props.toolbar,\r\n inline: props.inline,\r\n\t\t\t\tvalid_elements: \"*[*]\", // 允许所有元素和属性\r\n\t\t\t\textended_valid_elements: \"script[src|async|defer|type|charset]\", // 允许 script 标签的特定属性\r\n\t\t\t\tcustom_elements: \"~script\", // 允许自定义标签\r\n\t\t\t\tvalid_children: \"+body[script]\", // 允许 body 包含 script 标签\r\n\t\t\t\tcleanup: false,\r\n\t\t\t\tapply_source_formatting: false,\r\n\t\t\t\tverify_html: false,\r\n\t\t\t\tfont_family_formats:\r\n\t\t\t\t\t\"微软雅黑='微软雅黑';宋体='宋体';黑体='黑体';仿宋='仿宋';楷体='楷体';隶书='隶书';幼圆='幼圆';Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings\",\r\n\t\t\t\tlanguage: \"zh-Hans\",\r\n skin_url:\"ms\",\r\n content_css:\"ms\", \r\n content_style:contentStyle,\r\n // quickbars_insert_toolbar: 'image',\r\n // quickbars_selection_toolbar: 'forecolor backcolor fontsize | bold italic underline | fontfamily',\r\n // powerpaste_word_import: 'clean',\r\n // powerpaste_html_import: 'clean',\r\n\t\t\t\tsetup: (editor) => {\r\n\t\t\t\t\t\r\n\t\t\t\t\teditor.on(\"change\", function () {\r\n\t\t\t\t\t\t// console.log(\"Content changed:\", editor.getContent());\r\n\t\t\t\t\t});\r\n\t\t\t\t\teditor.ui.registry.addButton(\"material\", {\r\n\t\t\t\t\t\ticon: \"image\",\r\n\t\t\t\t\t\tonAction: async () => {\r\n\t\t\t\t\t\t\tconst response = await MKMaterialSelect();\r\n\t\t\t\t\t\t\tif (!response.success) {\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\teditor.insertContent(`<img src=\"${response.path}\" alt=\"${response.data!.id}\">`);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t});\r\n\t\t\t\t\teditor.on(\"paste\", (event, ...args) => {\r\n\t\t\t\t\t\t// console.log(event, ...args);\r\n\t\t\t\t\t});\r\n\t\t\t\t\teditor.on(\"change input undo redo\", () => {\r\n\t\t\t\t\t\temit(\"update:model-value\", editor.getContent());\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t\twatch(\r\n\t\t\t\tcomputed(() => props.modelValue),\r\n\t\t\t\t(modelValue) => {\r\n\t\t\t\t\tfor (const instance of tinymceInstance) {\r\n\t\t\t\t\t\tif (instance.getContent() !== modelValue) {\r\n\t\t\t\t\t\t\tinstance.setContent(modelValue || \"<div></div\");\r\n\t\t\t\t\t\t}\r\n else if(!modelValue){\r\n instance.setContent(\"<div></div>\");\r\n }\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t{ immediate: true }\r\n\t\t\t);\r\n\t\t\twatch(\r\n\t\t\t\tcomputed(() => props.disabled),\r\n\t\t\t\t(disabled) => {\r\n\t\t\t\t\tfor (const instance of tinymceInstance) {\r\n\t\t\t\t\t\tinstance.mode.set(disabled ? \"readonly\" : \"design\");\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t{ immediate: true }\r\n\t\t\t);\r\n\r\n\t\t\twithCtx(() => {\r\n\t\t\t\tonBeforeUnmount(() => {\r\n\t\t\t\t\tfor (const instance of tinymceInstance) {\r\n\t\t\t\t\t\tinstance.destroy();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}, instance);\r\n\t\t});\r\n\t\treturn () => {\r\n\t\t\treturn (\r\n\t\t\t\t<div class=\"mk-rich-text-editor\">\r\n\t\t\t\t\t<div class=\"mk-rich-text-editor__wrapper\" ref={((el: HTMLElement) => (richTextEditorEl.value = el)) as any} />\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\t};\r\n\t},\r\n});\r\n"],"names":["defineComponent","name","props","richTextEditorProps","emits","richTextEditorEmits","setup","emit","richTextEditorEl","ref","instance","getCurrentInstance","onMounted","tinymceInstance","TinyMCE","init","target","unref","promotion","menubar","plugins","toolbar","inline","valid_elements","extended_valid_elements","custom_elements","valid_children","cleanup","apply_source_formatting","verify_html","font_family_formats","language","skin_url","content_css","content_style","contentStyle","editor","on","ui","registry","addButton","icon","onAction","response","MKMaterialSelect","success","insertContent","path","data","id","event","args","getContent","watch","computed","modelValue","setContent","immediate","disabled","mode","set","withCtx","onBeforeUnmount","destroy","_createVNode","el","value"],"mappings":";;;;;;;;;;;;;;;;;;AAuBA,MAAeA,qDAAgB;AAAA,EAC9BC,MAAM;AAAA,EACNC,OAAOC,sBAAmB;AAAA,EAC1BC,OAAOC,sBAAmB;AAAA,EAC1BC,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACtB,UAAMC,mBAA4CC,QAAI,IAAI;AAE1D,UAAMC,WAAWC,IAAAA;AAOjBC,QAAAA,UAAU,YAAY;AACrB,YAAMC,kBAAkB,MAAMC,QAAQC,KAAK;AAAA,QAC1CC,QAAQC,IAAK,MAACT,gBAAgB;AAAA,QAC9BU,WAAW;AAAA,QACPC,SAAS;AAAA,QACbC,SAAQlB,MAAMkB;AAAAA;AAAAA,QAEVC,SAASnB,MAAMmB;AAAAA,QACfC,QAAQpB,MAAMoB;AAAAA,QAClBC,gBAAgB;AAAA;AAAA,QAChBC,yBAAyB;AAAA;AAAA,QACzBC,iBAAiB;AAAA;AAAA,QACjBC,gBAAgB;AAAA;AAAA,QAChBC,SAAS;AAAA,QACTC,yBAAyB;AAAA,QACzBC,aAAa;AAAA,QACbC,qBACC;AAAA,QACDC,UAAU;AAAA,QACNC,UAAS;AAAA,QACTC,aAAY;AAAA,QACZC,eAAcC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,QAKlB7B,OAAQ8B,YAAW;AAElBA,iBAAOC,GAAG,UAAU,WAAY;AAAA,UAC/B,CACA;AACDD,iBAAOE,GAAGC,SAASC,UAAU,YAAY;AAAA,YACxCC,MAAM;AAAA,YACNC,UAAU,YAAY;AACrB,oBAAMC,WAAW,MAAMC,MAAAA;AACvB,kBAAI,CAACD,SAASE,SAAS;AACtB;AAAA,cACD;AACAT,qBAAOU,cAAc,aAAaH,SAASI,IAAI,UAAUJ,SAASK,KAAMC,EAAE,IAAI;AAAA,YAC/E;AAAA,UACD,CAAC;AACDb,iBAAOC,GAAG,SAAS,CAACa,UAAUC,SAAS;AAAA,UACtC,CACA;AACDf,iBAAOC,GAAG,0BAA0B,MAAM;AACzC9B,iBAAK,sBAAsB6B,OAAOgB,WAAY,CAAA;AAAA,UAC/C,CAAC;AAAA,QACF;AAAA,MACD,CAAC;AACDC,UAAAA,MACCC,IAAAA,SAAS,MAAMpD,MAAMqD,UAAU,GAC9BA,gBAAe;AACf,mBAAW7C,aAAYG,iBAAiB;AACvC,cAAIH,UAAS0C,WAAY,MAAKG,YAAY;AACzC7C,YAAAA,UAAS8C,WAAWD,cAAc,YAAY;AAAA,UAC/C,WACc,CAACA,YAAW;AAClB7C,YAAAA,UAAS8C,WAAW,aAAa;AAAA,UACnC;AAAA,QACP;AAAA,MACD,GACA;AAAA,QAAEC,WAAW;AAAA,MAAK,CACnB;AACAJ,UAAAA,MACCC,IAAAA,SAAS,MAAMpD,MAAMwD,QAAQ,GAC5BA,cAAa;AACb,mBAAWhD,aAAYG,iBAAiB;AACvCH,UAAAA,UAASiD,KAAKC,IAAIF,WAAW,aAAa,QAAQ;AAAA,QACnD;AAAA,MACD,GACA;AAAA,QAAED,WAAW;AAAA,MAAK,CACnB;AAEAI,UAAAA,QAAQ,MAAM;AACbC,YAAAA,gBAAgB,MAAM;AACrB,qBAAWpD,aAAYG,iBAAiB;AACvCH,YAAAA,UAASqD,QAAO;AAAA,UACjB;AAAA,QACD,CAAC;AAAA,MACD,GAAErD,QAAQ;AAAA,IACZ,CAAC;AACD,WAAO,MAAM;AACZ,aAAAsD,IAAAA,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAAA,IAAA,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,OAEmDC,QAAqBzD,iBAAiB0D,QAAQD;AAAAA,MAAG,GAAA,IAAA,CAAA,CAAA;AAAA;EAItG;AACD,CAAC;;"}
1
+ {"version":3,"file":"rich-text-editor.js","sources":["../../../../../../src/modules/ms/components/rich-text-editor/rich-text-editor.tsx"],"sourcesContent":["import { Ref, computed, defineComponent, getCurrentInstance, onBeforeUnmount, onMounted, ref, unref, watch, withCtx } from \"vue\";\r\nimport { MKMaterialSelect } from \"../material-select\";\r\nimport TinyMCE from \"tinymce\";\r\nimport \"tinymce/themes/silver/theme.js\";\r\nimport \"tinymce/models/dom/model.min.js\";\r\nimport \"tinymce/icons/default/icons.min.js\";\r\nimport \"tinymce/plugins/link\";\r\n// import \"tinymce/plugins/table\";\r\nimport \"tinymce/plugins/fullscreen\";\r\nimport \"tinymce/plugins/code\";\r\n// import \"tinymce/plugins/image\";\r\nimport \"tinymce/plugins/quickbars\";\r\nimport \"tinymce/plugins/lists\";\r\nimport \"./langs/zh-Hans.js\";\r\n\r\nimport \"./skins/ui/ms/skin.js\";\r\nimport \"./skins/ui/ms/content.js\";\r\nimport \"./skins/content/ms/content.js\";\r\n\r\nimport contentStyle from \"./content.css?raw\";\r\n\r\nimport { richTextEditorEmits, richTextEditorProps } from \"./rich-text-editor-options\";\r\n\r\nexport default defineComponent({\r\n\tname: \"MKRichTextEditor\",\r\n\tprops: richTextEditorProps,\r\n\temits: richTextEditorEmits,\r\n\tsetup(props, { emit }) {\r\n\t\tconst richTextEditorEl: Ref<HTMLElement | null> = ref(null);\r\n\r\n\t\tconst instance = getCurrentInstance();\r\n\r\n\t\t// 这个方法暂时没用上\r\n\t\t// function escapeHtml(text: string) {\r\n\t\t// \treturn text.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&#039;\");\r\n\t\t// }\r\n\r\n\t\tonMounted(async () => {\r\n\t\t\tconst tinymceInstance = await TinyMCE.init({\r\n\t\t\t\ttarget: unref(richTextEditorEl)!,\r\n\t\t\t\tpromotion: false,\r\n\t\t\t\tmenubar: false,\r\n\t\t\t\tplugins: props.plugins,\r\n\t\t\t\t//\"undo redo | styles | fontfamily | fontsize forecolor | bold italic underline strikethrough | alignleft aligncenter alignright | material | outdent indent | link | table | hr | removeformat | code fullscreen\"\r\n\t\t\t\ttoolbar: props.toolbar,\r\n\t\t\t\tinline: props.inline,\r\n\t\t\t\tvalid_elements: \"*[*]\", // 允许所有元素和属性\r\n\t\t\t\textended_valid_elements: \"script[src|async|defer|type|charset]\", // 允许 script 标签的特定属性\r\n\t\t\t\tcustom_elements: \"~script\", // 允许自定义标签\r\n\t\t\t\tvalid_children: \"+body[script]\", // 允许 body 包含 script 标签\r\n\t\t\t\tcleanup: false,\r\n\t\t\t\tapply_source_formatting: false,\r\n\t\t\t\tverify_html: false,\r\n\t\t\t\tfont_family_formats:\r\n\t\t\t\t\t\"微软雅黑='微软雅黑';宋体='宋体';黑体='黑体';仿宋='仿宋';楷体='楷体';隶书='隶书';幼圆='幼圆';Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings\",\r\n\t\t\t\tlanguage: \"zh-Hans\",\r\n\t\t\t\tskin_url: \"ms\",\r\n\t\t\t\tcontent_css: \"ms\",\r\n\t\t\t\tcontent_style: contentStyle,\r\n\t\t\t\t// quickbars_insert_toolbar: 'image',\r\n\t\t\t\t// quickbars_selection_toolbar: 'forecolor backcolor fontsize | bold italic underline | fontfamily',\r\n\t\t\t\t// powerpaste_word_import: 'clean',\r\n\t\t\t\t// powerpaste_html_import: 'clean',\r\n\t\t\t\tsetup: (editor) => {\r\n\r\n\t\t\t\t\teditor.on(\"change\", function () {\r\n\t\t\t\t\t\t// console.log(\"Content changed:\", editor.getContent());\r\n\t\t\t\t\t});\r\n\t\t\t\t\teditor.ui.registry.addButton(\"material\", {\r\n\t\t\t\t\t\ticon: \"image\",\r\n\t\t\t\t\t\tonAction: async () => {\r\n\t\t\t\t\t\t\tconst response = await MKMaterialSelect();\r\n\t\t\t\t\t\t\tif (!response.success) {\r\n\t\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\teditor.insertContent(`<img src=\"${response.path}\" alt=\"${response.data!.id}\">`);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t});\r\n\t\t\t\t\teditor.on(\"paste\", (event, ...args) => {\r\n\t\t\t\t\t\t// console.log(event, ...args);\r\n\t\t\t\t\t});\r\n\t\t\t\t\teditor.on(\"change input undo redo\", () => {\r\n\t\t\t\t\t\temit(\"update:model-value\", editor.getContent());\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t\twatch(\r\n\t\t\t\tcomputed(() => props.modelValue),\r\n\t\t\t\t(modelValue) => {\r\n\t\t\t\t\tfor (const instance of tinymceInstance) {\r\n\t\t\t\t\t\tif (instance.getContent() !== modelValue) {\r\n\t\t\t\t\t\t\tinstance.setContent(modelValue || \"<div></div\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (!modelValue) {\r\n\t\t\t\t\t\t\tinstance.setContent(\"<div></div>\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t{ immediate: true }\r\n\t\t\t);\r\n\t\t\twatch(\r\n\t\t\t\tcomputed(() => props.disabled),\r\n\t\t\t\t(disabled) => {\r\n\t\t\t\t\tfor (const instance of tinymceInstance) {\r\n\t\t\t\t\t\tinstance.mode.set(disabled ? \"readonly\" : \"design\");\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t{ immediate: true }\r\n\t\t\t);\r\n\r\n\t\t\twithCtx(() => {\r\n\t\t\t\tonBeforeUnmount(() => {\r\n\t\t\t\t\tfor (const instance of tinymceInstance) {\r\n\t\t\t\t\t\tinstance.destroy();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}, instance);\r\n\t\t});\r\n\t\treturn () => {\r\n\t\t\treturn (\r\n\t\t\t\t<div class=\"mk-rich-text-editor\">\r\n\t\t\t\t\t<div class=\"mk-rich-text-editor__wrapper\" ref={((el: HTMLElement) => (richTextEditorEl.value = el)) as any} />\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\t};\r\n\t},\r\n});\r\n"],"names":["defineComponent","name","props","richTextEditorProps","emits","richTextEditorEmits","setup","emit","richTextEditorEl","ref","instance","getCurrentInstance","onMounted","tinymceInstance","TinyMCE","init","target","unref","promotion","menubar","plugins","toolbar","inline","valid_elements","extended_valid_elements","custom_elements","valid_children","cleanup","apply_source_formatting","verify_html","font_family_formats","language","skin_url","content_css","content_style","contentStyle","editor","on","ui","registry","addButton","icon","onAction","response","MKMaterialSelect","success","insertContent","path","data","id","event","args","getContent","watch","computed","modelValue","setContent","immediate","disabled","mode","set","withCtx","onBeforeUnmount","destroy","_createVNode","el","value"],"mappings":";;;;;;;;;;;;;;;;;;AAuBA,MAAeA,qDAAgB;AAAA,EAC9BC,MAAM;AAAA,EACNC,OAAOC,sBAAmB;AAAA,EAC1BC,OAAOC,sBAAmB;AAAA,EAC1BC,MAAMJ,OAAO;AAAA,IAAEK;AAAAA,EAAK,GAAG;AACtB,UAAMC,mBAA4CC,QAAI,IAAI;AAE1D,UAAMC,WAAWC,IAAAA;AAOjBC,QAAAA,UAAU,YAAY;AACrB,YAAMC,kBAAkB,MAAMC,QAAQC,KAAK;AAAA,QAC1CC,QAAQC,IAAK,MAACT,gBAAgB;AAAA,QAC9BU,WAAW;AAAA,QACXC,SAAS;AAAA,QACTC,SAASlB,MAAMkB;AAAAA;AAAAA,QAEfC,SAASnB,MAAMmB;AAAAA,QACfC,QAAQpB,MAAMoB;AAAAA,QACdC,gBAAgB;AAAA;AAAA,QAChBC,yBAAyB;AAAA;AAAA,QACzBC,iBAAiB;AAAA;AAAA,QACjBC,gBAAgB;AAAA;AAAA,QAChBC,SAAS;AAAA,QACTC,yBAAyB;AAAA,QACzBC,aAAa;AAAA,QACbC,qBACC;AAAA,QACDC,UAAU;AAAA,QACVC,UAAU;AAAA,QACVC,aAAa;AAAA,QACbC,eAAeC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,QAKf7B,OAAQ8B,YAAW;AAElBA,iBAAOC,GAAG,UAAU,WAAY;AAAA,UAC/B,CACA;AACDD,iBAAOE,GAAGC,SAASC,UAAU,YAAY;AAAA,YACxCC,MAAM;AAAA,YACNC,UAAU,YAAY;AACrB,oBAAMC,WAAW,MAAMC,MAAAA;AACvB,kBAAI,CAACD,SAASE,SAAS;AACtB;AAAA,cACD;AACAT,qBAAOU,cAAc,aAAaH,SAASI,IAAI,UAAUJ,SAASK,KAAMC,EAAE,IAAI;AAAA,YAC/E;AAAA,UACD,CAAC;AACDb,iBAAOC,GAAG,SAAS,CAACa,UAAUC,SAAS;AAAA,UACtC,CACA;AACDf,iBAAOC,GAAG,0BAA0B,MAAM;AACzC9B,iBAAK,sBAAsB6B,OAAOgB,WAAY,CAAA;AAAA,UAC/C,CAAC;AAAA,QACF;AAAA,MACD,CAAC;AACDC,UAAAA,MACCC,IAAAA,SAAS,MAAMpD,MAAMqD,UAAU,GAC9BA,gBAAe;AACf,mBAAW7C,aAAYG,iBAAiB;AACvC,cAAIH,UAAS0C,WAAY,MAAKG,YAAY;AACzC7C,YAAAA,UAAS8C,WAAWD,cAAc,YAAY;AAAA,UAC/C,WACS,CAACA,YAAY;AACrB7C,YAAAA,UAAS8C,WAAW,aAAa;AAAA,UAClC;AAAA,QACD;AAAA,MACD,GACA;AAAA,QAAEC,WAAW;AAAA,MAAK,CACnB;AACAJ,UAAAA,MACCC,IAAAA,SAAS,MAAMpD,MAAMwD,QAAQ,GAC5BA,cAAa;AACb,mBAAWhD,aAAYG,iBAAiB;AACvCH,UAAAA,UAASiD,KAAKC,IAAIF,WAAW,aAAa,QAAQ;AAAA,QACnD;AAAA,MACD,GACA;AAAA,QAAED,WAAW;AAAA,MAAK,CACnB;AAEAI,UAAAA,QAAQ,MAAM;AACbC,YAAAA,gBAAgB,MAAM;AACrB,qBAAWpD,aAAYG,iBAAiB;AACvCH,YAAAA,UAASqD,QAAO;AAAA,UACjB;AAAA,QACD,CAAC;AAAA,MACD,GAAErD,QAAQ;AAAA,IACZ,CAAC;AACD,WAAO,MAAM;AACZ,aAAAsD,IAAAA,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,MAAA,GAAA,CAAAA,IAAA,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,OAEmDC,QAAqBzD,iBAAiB0D,QAAQD;AAAAA,MAAG,GAAA,IAAA,CAAA,CAAA;AAAA;EAItG;AACD,CAAC;;"}
@@ -27,6 +27,7 @@ const _MsConfigTable = class _MsConfigTable extends (_b = dm.DataTable, _a = dat
27
27
  super({
28
28
  name: _MsConfigTable[dataModel.DATA_MODEL_NAME],
29
29
  moduleName: index.MODULE_NAME,
30
+ sortFieldName: "sortNo",
30
31
  ...options
31
32
  });
32
33
  }
@@ -49,6 +50,14 @@ const _MsConfigTable = class _MsConfigTable extends (_b = dm.DataTable, _a = dat
49
50
  this.setColumns([
50
51
  new dm.TableColumn({ name: "key", label: "配置键" }),
51
52
  new dm.TableColumn({ name: "memo", label: "备注" }),
53
+ new dm.TableColumn({
54
+ name: "sortNo",
55
+ label: "排序",
56
+ componentInfo: "MKColumnSort",
57
+ componentProps: {
58
+ // drag: true
59
+ }
60
+ }),
52
61
  new dm.TableActionColumn()
53
62
  ]);
54
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MsConfigTable.js","sources":["../../../../../../src/modules/ms/dataviews/ms-config/MsConfigTable.ts"],"sourcesContent":["import { Where } from \"@maketribe/request\";\r\nimport {\r\n DataTable,\r\n DataTableOptions,\r\n TableColumn,\r\n TableActionColumn,\r\n TableHeaderItem,\r\n RefreshButton,\r\n AddButton,\r\n FilterColumn,\r\n} from \"@maketribe/dm\";\r\nimport { MsConfig } from \"./MsConfigForm\";\r\nimport { R, ResponseConfig } from \"@maketribe/request\";\r\nimport { MSAppClient } from \"../../../../core\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class MsConfigTable extends DataTable<MsConfig> {\r\n static [DATA_MODEL_NAME]: string = \"mk-sys-config\";\r\n\r\n private static _instance: MsConfigTable | null = null;\r\n\r\n static get instance(): MsConfigTable {\r\n if (!MsConfigTable._instance) {\r\n MsConfigTable._instance = new MsConfigTable();\r\n MsConfigTable._instance.init().then(() => {\r\n MsConfigTable._instance!.dataFilter.setReady();\r\n });\r\n }\r\n\r\n return MsConfigTable._instance;\r\n }\r\n\r\n constructor(options: DataTableOptions = {}) {\r\n super({\r\n name: MsConfigTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.header.rightArea = [\r\n new RefreshButton(),\r\n new AddButton(),\r\n new TableHeaderItem({\r\n componentInfo: \"MKBatchOpt\",\r\n predicate: () =>\r\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\r\n }),\r\n ];\r\n\r\n this.dataFilter.setColumns([\r\n new FilterColumn({ name: \"key\", label: \"配置键\", search: true }),\r\n ]);\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"key\", label: \"配置键\" }),\r\n new TableColumn({ name: \"memo\", label: \"备注\" }),\r\n new TableActionColumn(),\r\n ]);\r\n }\r\n\r\n formatItem(item: MsConfig): MsConfig {\r\n let value = item.value;\r\n\r\n try {\r\n value = JSON.parse(value);\r\n } catch (e) {}\r\n\r\n return { ...item, value };\r\n }\r\n\r\n static async loadConfig<T = any>(\r\n key: string\r\n ): Promise<ResponseConfig<R<MsConfig<T>>>> {\r\n const where = new Where();\r\n\r\n where.addCondition(\"key\", \"=\", key);\r\n\r\n const dataViewRequest = MsConfigTable.instance.dataViewRequest;\r\n const response = await dataViewRequest.allList({\r\n data: { condition: where },\r\n });\r\n\r\n return {\r\n ...response,\r\n data: {\r\n ...response.data,\r\n data: response.data.data?.[0] ?? null,\r\n },\r\n };\r\n }\r\n\r\n static async getConfigValue<T = any>(key: string): Promise<T | null> {\r\n const where = new Where();\r\n\r\n where.addCondition(\"key\", \"=\", key);\r\n\r\n const dataViewRequest = MsConfigTable.instance.dataViewRequest;\r\n const response = await dataViewRequest.query({\r\n data: { condition: where, pc: 1, pn: 1 },\r\n });\r\n\r\n if (response.data.code !== 200) {\r\n throw new Error(response.data.msg);\r\n }\r\n\r\n try {\r\n return JSON.parse(response.data.data[0]?.value);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n static async setConfigValue(key: string, value: any) {\r\n const dataViewRequest = MsConfigTable.instance.dataViewRequest;\r\n\r\n const where = new Where();\r\n where.addCondition(\"key\", \"=\", key);\r\n\r\n const listResponse = await dataViewRequest.query({\r\n data: { condition: where, pc: 1, pn: 1 },\r\n });\r\n\r\n if (listResponse.data.code !== 200) {\r\n throw new Error(listResponse.data.msg);\r\n }\r\n\r\n const response =\r\n listResponse.data.data.length === 0\r\n ? await dataViewRequest.add({ key, value })\r\n : await dataViewRequest.update({\r\n ...listResponse.data.data[0],\r\n value,\r\n });\r\n\r\n return response.data;\r\n }\r\n}\r\n\r\n(window as any).MsConfigTable = MsConfigTable;\r\n"],"names":["DataTable","DATA_MODEL_NAME","MODULE_NAME","RefreshButton","AddButton","TableHeaderItem","MSAppClient","FilterColumn","TableColumn","TableActionColumn","Where","_a"],"mappings":"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"}
1
+ {"version":3,"file":"MsConfigTable.js","sources":["../../../../../../src/modules/ms/dataviews/ms-config/MsConfigTable.ts"],"sourcesContent":["import { Where } from \"@maketribe/request\";\r\nimport {\r\n DataTable,\r\n DataTableOptions,\r\n TableColumn,\r\n TableActionColumn,\r\n TableHeaderItem,\r\n RefreshButton,\r\n AddButton,\r\n FilterColumn,\r\n} from \"@maketribe/dm\";\r\nimport { MsConfig } from \"./MsConfigForm\";\r\nimport { R, ResponseConfig } from \"@maketribe/request\";\r\nimport { MSAppClient } from \"../../../../core\";\r\nimport { DATA_MODEL_NAME } from \"../../../../constants\";\r\nimport { MODULE_NAME } from \"../../constants\";\r\n\r\nexport class MsConfigTable extends DataTable<MsConfig> {\r\n static [DATA_MODEL_NAME]: string = \"mk-sys-config\";\r\n\r\n private static _instance: MsConfigTable | null = null;\r\n\r\n static get instance(): MsConfigTable {\r\n if (!MsConfigTable._instance) {\r\n MsConfigTable._instance = new MsConfigTable();\r\n MsConfigTable._instance.init().then(() => {\r\n MsConfigTable._instance!.dataFilter.setReady();\r\n });\r\n }\r\n\r\n return MsConfigTable._instance;\r\n }\r\n\r\n constructor(options: DataTableOptions = {}) {\r\n super({\r\n name: MsConfigTable[DATA_MODEL_NAME],\r\n moduleName: MODULE_NAME,\r\n sortFieldName: \"sortNo\",\r\n ...options,\r\n });\r\n }\r\n\r\n protected async initialize() {\r\n await super.initialize();\r\n\r\n this.header.rightArea = [\r\n new RefreshButton(),\r\n new AddButton(),\r\n new TableHeaderItem({\r\n componentInfo: \"MKBatchOpt\",\r\n predicate: () =>\r\n MSAppClient.instance?.userSession?.userInfo?.isSuper ?? false,\r\n }),\r\n ];\r\n\r\n this.dataFilter.setColumns([\r\n new FilterColumn({ name: \"key\", label: \"配置键\", search: true }),\r\n ]);\r\n\r\n this.setColumns([\r\n new TableColumn({ name: \"key\", label: \"配置键\" }),\r\n new TableColumn({ name: \"memo\", label: \"备注\" }),\r\n new TableColumn({\r\n name: \"sortNo\",\r\n label: \"排序\",\r\n componentInfo: \"MKColumnSort\",\r\n componentProps: {\r\n // drag: true\r\n }\r\n }),\r\n new TableActionColumn(),\r\n ]);\r\n }\r\n\r\n formatItem(item: MsConfig): MsConfig {\r\n let value = item.value;\r\n\r\n try {\r\n value = JSON.parse(value);\r\n } catch (e) {}\r\n\r\n return { ...item, value };\r\n }\r\n\r\n static async loadConfig<T = any>(\r\n key: string\r\n ): Promise<ResponseConfig<R<MsConfig<T>>>> {\r\n const where = new Where();\r\n\r\n where.addCondition(\"key\", \"=\", key);\r\n\r\n const dataViewRequest = MsConfigTable.instance.dataViewRequest;\r\n const response = await dataViewRequest.allList({\r\n data: { condition: where },\r\n });\r\n\r\n return {\r\n ...response,\r\n data: {\r\n ...response.data,\r\n data: response.data.data?.[0] ?? null,\r\n },\r\n };\r\n }\r\n\r\n static async getConfigValue<T = any>(key: string): Promise<T | null> {\r\n const where = new Where();\r\n\r\n where.addCondition(\"key\", \"=\", key);\r\n\r\n const dataViewRequest = MsConfigTable.instance.dataViewRequest;\r\n const response = await dataViewRequest.query({\r\n data: { condition: where, pc: 1, pn: 1 },\r\n });\r\n\r\n if (response.data.code !== 200) {\r\n throw new Error(response.data.msg);\r\n }\r\n\r\n try {\r\n return JSON.parse(response.data.data[0]?.value);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n static async setConfigValue(key: string, value: any) {\r\n const dataViewRequest = MsConfigTable.instance.dataViewRequest;\r\n\r\n const where = new Where();\r\n where.addCondition(\"key\", \"=\", key);\r\n\r\n const listResponse = await dataViewRequest.query({\r\n data: { condition: where, pc: 1, pn: 1 },\r\n });\r\n\r\n if (listResponse.data.code !== 200) {\r\n throw new Error(listResponse.data.msg);\r\n }\r\n\r\n const response =\r\n listResponse.data.data.length === 0\r\n ? await dataViewRequest.add({ key, value })\r\n : await dataViewRequest.update({\r\n ...listResponse.data.data[0],\r\n value,\r\n });\r\n\r\n return response.data;\r\n }\r\n}\r\n\r\n(window as any).MsConfigTable = MsConfigTable;\r\n"],"names":["DataTable","DATA_MODEL_NAME","MODULE_NAME","RefreshButton","AddButton","TableHeaderItem","MSAppClient","FilterColumn","TableColumn","TableActionColumn","Where","_a"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { ref, createVNode, Fragment, createTextVNode } from "vue";
2
2
  import { Dialoger } from "@maketribe/dm";
3
3
  import { ElInput, ElButton } from "element-plus";
4
- const ShowLinkEditPanel = async (href) => {
4
+ const showLinkEditPanel = async (href) => {
5
5
  return new Promise((resolve, reject) => {
6
6
  const hrefValue = ref(href);
7
7
  const handleCancelClick = () => {
@@ -46,6 +46,6 @@ const ShowLinkEditPanel = async (href) => {
46
46
  });
47
47
  };
48
48
  export {
49
- ShowLinkEditPanel
49
+ showLinkEditPanel
50
50
  };
51
51
  //# sourceMappingURL=LinkEditDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LinkEditDialog.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/AutoLinkPlugin/LinkEditDialog.tsx"],"sourcesContent":["\r\nimport { Fragment,ref,unref } from 'vue'\r\nimport { Dialoger } from '@maketribe/dm'\r\nimport { ElButton ,ElInput } from \"element-plus\";\r\n/**\r\n * \r\n * @param href \r\n * @returns \r\n */\r\nexport const ShowLinkEditPanel = async (href:any) => {\r\n return new Promise((resolve,reject) => {\r\n\r\n const hrefValue = ref(href)\r\n\r\n // 取消编辑\r\n const handleCancelClick = () => {\r\n dialogInstance.destroy();\r\n };\r\n\r\n // 确认编辑\r\n const handleConfirmClick = () => {\r\n dialogInstance.destroy();\r\n resolve(hrefValue.value);\r\n };\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: \"设置连接\",\r\n class: \"mk-html-editor-dialog\",\r\n width: \"500px\",\r\n onClose: () => {\r\n dialogInstance.destroy();\r\n },\r\n body: () => {\r\n return <ElInput v-model={hrefValue.value} clearable={true} placeholder='http://www.xxx.com' v-slots={\r\n {\r\n prepend:()=>{\r\n return \"地址:\";\r\n }\r\n }\r\n }></ElInput>\r\n },\r\n footer: () => {\r\n return <Fragment>\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n <ElButton type=\"primary\" onClick={handleConfirmClick}>\r\n 确定\r\n </ElButton>\r\n </Fragment>\r\n },\r\n });\r\n });\r\n}\r\n"],"names":["ShowLinkEditPanel","href","Promise","resolve","reject","hrefValue","ref","handleCancelClick","dialogInstance","destroy","handleConfirmClick","value","Dialoger","customRender","title","class","width","onClose","body","_createVNode","ElInput","$event","prepend","footer","_Fragment","ElButton","default","_createTextVNode"],"mappings":";;;AASaA,MAAAA,oBAAoB,OAAQC,SAAa;AACpD,SAAO,IAAIC,QAAQ,CAACC,SAAQC,WAAW;AAErC,UAAMC,YAAYC,IAAIL,IAAI;AAG1B,UAAMM,oBAAoBA,MAAM;AAC9BC,qBAAeC,QAAO;AAAA;AAIxB,UAAMC,qBAAqBA,MAAM;AAC/BF,qBAAeC,QAAO;AACtBN,cAAQE,UAAUM,KAAK;AAAA;AAGzB,UAAMH,iBAAiBI,SAASC,aAAa;AAAA,MAC3CC,OAAO;AAAA,MACPC,OAAO;AAAA,MACPC,OAAO;AAAA,MACPC,SAASA,MAAM;AACbT,uBAAeC,QAAO;AAAA,MACvB;AAAA,MACDS,MAAMA,MAAM;AACV,eAAAC,YAAAC,SAAA;AAAA,UAAA,cAAyBf,UAAUM;AAAAA,UAAK,uBAAAU,YAAfhB,UAAUM,QAAKU;AAAAA,UAAA,aAAa;AAAA,UAAI,eAAA;AAAA,WACvD;AAAA,UACEC,SAAQA,MAAI;AACV,mBAAO;AAAA,UACT;AAAA,SACD;AAAA,MAEJ;AAAA,MACDC,QAAQA,MAAM;AACZ,eAAAJ,YAAAK,UAAAL,MAAAA,CAAAA,YAAAM,UAAA;AAAA,UAAA,WACqBlB;AAAAA,QAAiB,GAAA;AAAA,UAAAmB,SAAAA,MAAA,CAAAC,gBAAA,IAAA,CAAA;AAAA,SAAAR,GAAAA,YAAAM,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WACFf;AAAAA,QAAkB,GAAA;AAAA,UAAAgB,SAAAA,MAAA,CAAAC,gBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAIxD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;"}
1
+ {"version":3,"file":"LinkEditDialog.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/AutoLinkPlugin/LinkEditDialog.tsx"],"sourcesContent":["\r\nimport { Fragment,ref } from 'vue'\r\nimport { Dialoger } from '@maketribe/dm'\r\nimport { ElButton ,ElInput } from \"element-plus\";\r\n/**\r\n * \r\n * @param href \r\n * @returns \r\n */\r\nexport const showLinkEditPanel = async (href:any) => {\r\n return new Promise((resolve,reject) => {\r\n\r\n const hrefValue = ref(href)\r\n\r\n // 取消编辑\r\n const handleCancelClick = () => {\r\n dialogInstance.destroy();\r\n };\r\n\r\n // 确认编辑\r\n const handleConfirmClick = () => {\r\n dialogInstance.destroy();\r\n resolve(hrefValue.value);\r\n };\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: \"设置连接\",\r\n class: \"mk-html-editor-dialog\",\r\n width: \"500px\",\r\n onClose: () => {\r\n dialogInstance.destroy();\r\n },\r\n body: () => {\r\n return <ElInput v-model={hrefValue.value} clearable={true} placeholder='http://www.xxx.com' v-slots={\r\n {\r\n prepend:()=>{\r\n return \"地址:\";\r\n }\r\n }\r\n }></ElInput>\r\n },\r\n footer: () => {\r\n return <Fragment>\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n <ElButton type=\"primary\" onClick={handleConfirmClick}>\r\n 确定\r\n </ElButton>\r\n </Fragment>\r\n },\r\n });\r\n });\r\n}\r\n"],"names":["showLinkEditPanel","href","Promise","resolve","reject","hrefValue","ref","handleCancelClick","dialogInstance","destroy","handleConfirmClick","value","Dialoger","customRender","title","class","width","onClose","body","_createVNode","ElInput","$event","prepend","footer","_Fragment","ElButton","default","_createTextVNode"],"mappings":";;;AASaA,MAAAA,oBAAoB,OAAQC,SAAa;AACpD,SAAO,IAAIC,QAAQ,CAACC,SAAQC,WAAW;AAErC,UAAMC,YAAYC,IAAIL,IAAI;AAG1B,UAAMM,oBAAoBA,MAAM;AAC9BC,qBAAeC,QAAO;AAAA;AAIxB,UAAMC,qBAAqBA,MAAM;AAC/BF,qBAAeC,QAAO;AACtBN,cAAQE,UAAUM,KAAK;AAAA;AAGzB,UAAMH,iBAAiBI,SAASC,aAAa;AAAA,MAC3CC,OAAO;AAAA,MACPC,OAAO;AAAA,MACPC,OAAO;AAAA,MACPC,SAASA,MAAM;AACbT,uBAAeC,QAAO;AAAA,MACvB;AAAA,MACDS,MAAMA,MAAM;AACV,eAAAC,YAAAC,SAAA;AAAA,UAAA,cAAyBf,UAAUM;AAAAA,UAAK,uBAAAU,YAAfhB,UAAUM,QAAKU;AAAAA,UAAA,aAAa;AAAA,UAAI,eAAA;AAAA,WACvD;AAAA,UACEC,SAAQA,MAAI;AACV,mBAAO;AAAA,UACT;AAAA,SACD;AAAA,MAEJ;AAAA,MACDC,QAAQA,MAAM;AACZ,eAAAJ,YAAAK,UAAAL,MAAAA,CAAAA,YAAAM,UAAA;AAAA,UAAA,WACqBlB;AAAAA,QAAiB,GAAA;AAAA,UAAAmB,SAAAA,MAAA,CAAAC,gBAAA,IAAA,CAAA;AAAA,SAAAR,GAAAA,YAAAM,UAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WACFf;AAAAA,QAAkB,GAAA;AAAA,UAAAgB,SAAAA,MAAA,CAAAC,gBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAIxD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;"}
@@ -1,37 +1,11 @@
1
- import { defineComponent, openBlock, createElementBlock, Fragment, createVNode, unref } from "vue";
1
+ import { defineComponent, openBlock, createBlock, unref } from "vue";
2
2
  import "../../core/index.js";
3
- import _sfc_main$1 from "../../core/plugins/LexicalAutoLinkPlugin/index.vue2.js";
4
- import _sfc_main$2 from "../../core/plugins/LexicalLinkPlugin.vue2.js";
3
+ import _sfc_main$1 from "../../core/plugins/LexicalLinkPlugin.vue2.js";
5
4
  const _sfc_main = /* @__PURE__ */ defineComponent({
6
5
  __name: "index",
7
6
  setup(__props) {
8
- const URL_MATCHER = /((https?:\/\/(www\.)?)|(www\.))[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/;
9
- const EMAIL_MATCHER = /(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/;
10
- const MATCHERS = [
11
- (text) => {
12
- const match = URL_MATCHER.exec(text);
13
- return match && {
14
- index: match.index,
15
- length: match[0].length,
16
- text: match[0],
17
- url: match[0]
18
- };
19
- },
20
- (text) => {
21
- const match = EMAIL_MATCHER.exec(text);
22
- return match && {
23
- index: match.index,
24
- length: match[0].length,
25
- text: match[0],
26
- url: `mailto:${match[0]}`
27
- };
28
- }
29
- ];
30
7
  return (_ctx, _cache) => {
31
- return openBlock(), createElementBlock(Fragment, null, [
32
- createVNode(unref(_sfc_main$1), { matchers: MATCHERS }),
33
- createVNode(unref(_sfc_main$2))
34
- ], 64);
8
+ return openBlock(), createBlock(unref(_sfc_main$1));
35
9
  };
36
10
  }
37
11
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { LexicalAutoLinkPlugin,LexicalLinkPlugin } from '../../core'\r\n\r\n\r\nconst URL_MATCHER = /((https?:\\/\\/(www\\.)?)|(www\\.))[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/\r\n\r\nconst EMAIL_MATCHER = /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/\r\n\r\nconst MATCHERS = [\r\n (text: string) => {\r\n const match = URL_MATCHER.exec(text)\r\n return (\r\n match && {\r\n index: match.index,\r\n length: match[0].length,\r\n text: match[0],\r\n url: match[0],\r\n }\r\n )\r\n },\r\n (text: string) => {\r\n const match = EMAIL_MATCHER.exec(text)\r\n return (\r\n match && {\r\n index: match.index,\r\n length: match[0].length,\r\n text: match[0],\r\n url: `mailto:${match[0]}`,\r\n }\r\n )\r\n },\r\n]\r\n</script>\r\n\r\n<template>\r\n <LexicalAutoLinkPlugin :matchers=\"MATCHERS\" />\r\n <LexicalLinkPlugin />\r\n</template>\r\n"],"names":[],"mappings":";;;;;;;AAIA,UAAM,cAAc;AAEpB,UAAM,gBAAgB;AAEtB,UAAM,WAAW;AAAA,MACf,CAAC,SAAiB;AACV,cAAA,QAAQ,YAAY,KAAK,IAAI;AACnC,eACE,SAAS;AAAA,UACP,OAAO,MAAM;AAAA,UACb,QAAQ,MAAM,CAAC,EAAE;AAAA,UACjB,MAAM,MAAM,CAAC;AAAA,UACb,KAAK,MAAM,CAAC;AAAA,QAAA;AAAA,MAGlB;AAAA,MACA,CAAC,SAAiB;AACV,cAAA,QAAQ,cAAc,KAAK,IAAI;AACrC,eACE,SAAS;AAAA,UACP,OAAO,MAAM;AAAA,UACb,QAAQ,MAAM,CAAC,EAAE;AAAA,UACjB,MAAM,MAAM,CAAC;AAAA,UACb,KAAK,UAAU,MAAM,CAAC,CAAC;AAAA,QAAA;AAAA,MAG7B;AAAA,IAAA;;;;;;;;;"}
1
+ {"version":3,"file":"index.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
@@ -88,7 +88,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
88
88
  const _component_el_dropdown = resolveComponent("el-dropdown");
89
89
  return openBlock(), createBlock(_component_el_dropdown, {
90
90
  "max-height": "300px",
91
- trigger: "click",
92
91
  disabled: disabled.value
93
92
  }, {
94
93
  dropdown: withCtx(() => [
@@ -1 +1 @@
1
- {"version":3,"file":"ContentStyleTool.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport {\r\n $createParagraphNode,\r\n $getSelection,\r\n $isRangeSelection,\r\n $isRootOrShadowRoot\r\n} from 'lexical'\r\nimport { $patchStyleText,$setBlocksType } from '@lexical/selection'\r\nimport type { HeadingTagType } from '@lexical/rich-text'\r\nimport { $createHeadingNode,$isHeadingNode } from '@lexical/rich-text'\r\nimport { \r\n INSERT_CHECK_LIST_COMMAND, INSERT_ORDERED_LIST_COMMAND, INSERT_UNORDERED_LIST_COMMAND, \r\n} from '@lexical/list'\r\nimport { $findMatchingParent } from '@lexical/utils'\r\nimport { useLexicalComposer } from '../../core/composables'\r\nimport { onMounted, onUnmounted, ref } from 'vue'\r\n\r\nconst editor = useLexicalComposer()\r\n\r\n// 内容类型\r\nconst CONTENT_TYPE_DEFINES = [\r\n {value:\"paragraph\",label:\"正文\"},\r\n {value:\"bullet\",label:\"无序列表\"},\r\n {value:\"number\",label:\"有序列表\"},\r\n {value:\"h1\",label:\"标题 1\"},\r\n {value:\"h2\",label:\"标题 2\"},\r\n {value:\"h3\",label:\"标题 3\"}\r\n];\r\n\r\nconst disabled = ref(false)\r\n\r\nconst contentType = ref<any>(CONTENT_TYPE_DEFINES[0]);\r\n\r\n\r\n\r\n// 更新状态栏\r\nfunction updateToolbar() {\r\n\r\n const selection = $getSelection()\r\n\r\n if ($isRangeSelection(selection)) {\r\n\r\n const anchorNode = selection.anchor.getNode()\r\n\r\n let element\r\n = anchorNode.getKey() === 'root'\r\n ? anchorNode\r\n : $findMatchingParent(anchorNode, (e) => {\r\n const parent = e.getParent()\r\n return parent !== null && $isRootOrShadowRoot(parent)\r\n })\r\n\r\n if (element === null){ element = anchorNode.getTopLevelElementOrThrow() }\r\n \r\n const elementKey = element.getKey()\r\n const elementDOM = editor.getElementByKey(elementKey)\r\n\r\n if (elementDOM !== null) {\r\n const type = $isHeadingNode(element) ? element.getTag() : element.getType();\r\n contentType.value = CONTENT_TYPE_DEFINES.find(item=>item.value == type) || CONTENT_TYPE_DEFINES[0]\r\n }\r\n disabled.value = false;\r\n }\r\n else{\r\n\r\n disabled.value = true;\r\n }\r\n}\r\n\r\n// 设置内容类型\r\nconst setContentType = (type:any)=>{\r\n\r\n contentType.value = type;\r\n \r\n editor.update(() => {\r\n\r\n const selection = $getSelection()\r\n \r\n if ($isRangeSelection(selection)){\r\n\r\n // 清空字体大小\r\n $patchStyleText(selection, { [\"font-size\"]:\"\" })\r\n \r\n if(type.value == \"paragraph\"){\r\n $setBlocksType(selection, () => $createParagraphNode())\r\n }\r\n else if(type.value == \"bullet\"){\r\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined)\r\n }\r\n else if(type.value == \"bullet\"){\r\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined)\r\n }\r\n else if(type.value == \"check-list\"){\r\n editor.dispatchCommand(INSERT_CHECK_LIST_COMMAND, undefined)\r\n }\r\n else{\r\n $setBlocksType(selection, () => {\r\n return $createHeadingNode(type.value as HeadingTagType)\r\n })\r\n }\r\n }\r\n })\r\n}\r\n\r\n// 挂载的时候\r\nonMounted(() => {\r\n\r\nconst unregisterMergeListener = editor.registerUpdateListener(({ editorState }) => {\r\n editorState.read(() => updateToolbar())\r\n})\r\n\r\n\r\nonUnmounted(() => unregisterMergeListener());\r\n})\r\n\r\n</script>\r\n\r\n<template>\r\n <el-dropdown max-height=\"300px\" trigger=\"click\" :disabled=\"disabled\">\r\n <el-button text :disabled=\"disabled\">\r\n {{contentType.label}} <MKSvgIcon iconClass=\"ArrowDownBold\" style=\"margin-left: 8px;\" /> \r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item :class=\"{active:contentType.label == item.label}\" v-for=\"item in CONTENT_TYPE_DEFINES\" :value=\"item.value\" @click=\"setContentType(item)\">\r\n <template v-if=\"item.value.indexOf('h')!=0 \">\r\n <div class=\"mk-doc-editor-toolbar-content-style-item text\">{{item.label}}</div>\r\n </template>\r\n <template v-else>\r\n <div class=\"mk-doc-editor-toolbar-content-style-item\" v-html=\"`<${item.value}>${item.label}</${item.value}>`\"></div>\r\n </template>\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n</template>\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiBA,UAAM,SAAS;AAGf,UAAM,uBAAuB;AAAA,MAC3B,EAAC,OAAM,aAAY,OAAM,KAAI;AAAA,MAC7B,EAAC,OAAM,UAAS,OAAM,OAAM;AAAA,MAC5B,EAAC,OAAM,UAAS,OAAM,OAAM;AAAA,MAC5B,EAAC,OAAM,MAAK,OAAM,OAAM;AAAA,MACxB,EAAC,OAAM,MAAK,OAAM,OAAM;AAAA,MACxB,EAAC,OAAM,MAAK,OAAM,OAAM;AAAA,IAAA;AAGpB,UAAA,WAAW,IAAI,KAAK;AAE1B,UAAM,cAAc,IAAS,qBAAqB,CAAC,CAAC;AAKpD,aAAS,gBAAgB;AAEvB,YAAM,YAAY;AAEd,UAAA,kBAAkB,SAAS,GAAG;AAE1B,cAAA,aAAa,UAAU,OAAO,QAAQ;AAExC,YAAA,UACE,WAAW,aAAa,SACtB,aACA,oBAAoB,YAAY,CAAC,MAAM;AACjC,gBAAA,SAAS,EAAE;AACV,iBAAA,WAAW,QAAQ,oBAAoB,MAAM;AAAA,QAAA,CACrD;AAEP,YAAI,YAAY,MAAK;AAAE,oBAAU,WAAW;QAA4B;AAElE,cAAA,aAAa,QAAQ;AACrB,cAAA,aAAa,OAAO,gBAAgB,UAAU;AAEpD,YAAI,eAAe,MAAM;AACjB,gBAAA,OAAO,eAAe,OAAO,IAAI,QAAQ,OAAO,IAAI,QAAQ;AACtD,sBAAA,QAAQ,qBAAqB,KAAK,CAAA,SAAM,KAAK,SAAS,IAAI,KAAK,qBAAqB,CAAC;AAAA,QACnG;AACA,iBAAS,QAAQ;AAAA,MAAA,OAEf;AAEF,iBAAS,QAAQ;AAAA,MACnB;AAAA,IACF;AAGM,UAAA,iBAAiB,CAAC,SAAW;AAEjC,kBAAY,QAAQ;AAEpB,aAAO,OAAO,MAAM;AAEhB,cAAM,YAAY;AAEd,YAAA,kBAAkB,SAAS,GAAE;AAG/B,0BAAgB,WAAW,EAAE,CAAC,WAAW,GAAE,GAAI,CAAA;AAE5C,cAAA,KAAK,SAAS,aAAY;AACZ,2BAAA,WAAW,MAAM,qBAAA,CAAsB;AAAA,UAAA,WAEhD,KAAK,SAAS,UAAS;AACtB,mBAAA,gBAAgB,+BAA+B,MAAS;AAAA,UAAA,WAEzD,KAAK,SAAS,UAAS;AACtB,mBAAA,gBAAgB,6BAA6B,MAAS;AAAA,UAAA,WAEvD,KAAK,SAAS,cAAa;AAC1B,mBAAA,gBAAgB,2BAA2B,MAAS;AAAA,UAAA,OAEzD;AACF,2BAAe,WAAW,MAAM;AACvB,qBAAA,mBAAmB,KAAK,KAAwB;AAAA,YAAA,CACxD;AAAA,UACH;AAAA,QACF;AAAA,MAAA,CACH;AAAA,IAAA;AAIH,cAAU,MAAM;AAEhB,YAAM,0BAA0B,OAAO,uBAAuB,CAAC,EAAE,kBAAkB;AACrE,oBAAA,KAAK,MAAM,cAAA,CAAe;AAAA,MAAA,CACvC;AAGW,kBAAA,MAAM,yBAAyB;AAAA,IAAA,CAC1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ContentStyleTool.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport {\r\n $createParagraphNode,\r\n $getSelection,\r\n $isRangeSelection,\r\n $isRootOrShadowRoot\r\n} from 'lexical'\r\nimport { $patchStyleText,$setBlocksType } from '@lexical/selection'\r\nimport type { HeadingTagType } from '@lexical/rich-text'\r\nimport { $createHeadingNode,$isHeadingNode } from '@lexical/rich-text'\r\nimport { \r\n INSERT_CHECK_LIST_COMMAND, INSERT_ORDERED_LIST_COMMAND, INSERT_UNORDERED_LIST_COMMAND, \r\n} from '@lexical/list'\r\nimport { $findMatchingParent } from '@lexical/utils'\r\nimport { useLexicalComposer } from '../../core/composables'\r\nimport { onMounted, onUnmounted, ref } from 'vue'\r\n\r\nconst editor = useLexicalComposer()\r\n\r\n// 内容类型\r\nconst CONTENT_TYPE_DEFINES = [\r\n {value:\"paragraph\",label:\"正文\"},\r\n {value:\"bullet\",label:\"无序列表\"},\r\n {value:\"number\",label:\"有序列表\"},\r\n {value:\"h1\",label:\"标题 1\"},\r\n {value:\"h2\",label:\"标题 2\"},\r\n {value:\"h3\",label:\"标题 3\"}\r\n];\r\n\r\nconst disabled = ref(false)\r\n\r\nconst contentType = ref<any>(CONTENT_TYPE_DEFINES[0]);\r\n\r\n\r\n\r\n// 更新状态栏\r\nfunction updateToolbar() {\r\n\r\n const selection = $getSelection()\r\n\r\n if ($isRangeSelection(selection)) {\r\n\r\n const anchorNode = selection.anchor.getNode()\r\n\r\n let element\r\n = anchorNode.getKey() === 'root'\r\n ? anchorNode\r\n : $findMatchingParent(anchorNode, (e) => {\r\n const parent = e.getParent()\r\n return parent !== null && $isRootOrShadowRoot(parent)\r\n })\r\n\r\n if (element === null){ element = anchorNode.getTopLevelElementOrThrow() }\r\n \r\n const elementKey = element.getKey()\r\n const elementDOM = editor.getElementByKey(elementKey)\r\n\r\n if (elementDOM !== null) {\r\n const type = $isHeadingNode(element) ? element.getTag() : element.getType();\r\n contentType.value = CONTENT_TYPE_DEFINES.find(item=>item.value == type) || CONTENT_TYPE_DEFINES[0]\r\n }\r\n disabled.value = false;\r\n }\r\n else{\r\n\r\n disabled.value = true;\r\n }\r\n}\r\n\r\n// 设置内容类型\r\nconst setContentType = (type:any)=>{\r\n\r\n contentType.value = type;\r\n \r\n editor.update(() => {\r\n\r\n const selection = $getSelection()\r\n \r\n if ($isRangeSelection(selection)){\r\n\r\n // 清空字体大小\r\n $patchStyleText(selection, { [\"font-size\"]:\"\" })\r\n \r\n if(type.value == \"paragraph\"){\r\n $setBlocksType(selection, () => $createParagraphNode())\r\n }\r\n else if(type.value == \"bullet\"){\r\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined)\r\n }\r\n else if(type.value == \"bullet\"){\r\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined)\r\n }\r\n else if(type.value == \"check-list\"){\r\n editor.dispatchCommand(INSERT_CHECK_LIST_COMMAND, undefined)\r\n }\r\n else{\r\n $setBlocksType(selection, () => {\r\n return $createHeadingNode(type.value as HeadingTagType)\r\n })\r\n }\r\n }\r\n })\r\n}\r\n\r\n// 挂载的时候\r\nonMounted(() => {\r\n\r\nconst unregisterMergeListener = editor.registerUpdateListener(({ editorState }) => {\r\n editorState.read(() => updateToolbar())\r\n})\r\n\r\n\r\nonUnmounted(() => unregisterMergeListener());\r\n})\r\n\r\n</script>\r\n\r\n<template>\r\n <el-dropdown max-height=\"300px\" :disabled=\"disabled\">\r\n <el-button text :disabled=\"disabled\">\r\n {{contentType.label}} <MKSvgIcon iconClass=\"ArrowDownBold\" style=\"margin-left: 8px;\" /> \r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item :class=\"{active:contentType.label == item.label}\" v-for=\"item in CONTENT_TYPE_DEFINES\" :value=\"item.value\" @click=\"setContentType(item)\">\r\n <template v-if=\"item.value.indexOf('h')!=0 \">\r\n <div class=\"mk-doc-editor-toolbar-content-style-item text\">{{item.label}}</div>\r\n </template>\r\n <template v-else>\r\n <div class=\"mk-doc-editor-toolbar-content-style-item\" v-html=\"`<${item.value}>${item.label}</${item.value}>`\"></div>\r\n </template>\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n</template>\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiBA,UAAM,SAAS;AAGf,UAAM,uBAAuB;AAAA,MAC3B,EAAC,OAAM,aAAY,OAAM,KAAI;AAAA,MAC7B,EAAC,OAAM,UAAS,OAAM,OAAM;AAAA,MAC5B,EAAC,OAAM,UAAS,OAAM,OAAM;AAAA,MAC5B,EAAC,OAAM,MAAK,OAAM,OAAM;AAAA,MACxB,EAAC,OAAM,MAAK,OAAM,OAAM;AAAA,MACxB,EAAC,OAAM,MAAK,OAAM,OAAM;AAAA,IAAA;AAGpB,UAAA,WAAW,IAAI,KAAK;AAE1B,UAAM,cAAc,IAAS,qBAAqB,CAAC,CAAC;AAKpD,aAAS,gBAAgB;AAEvB,YAAM,YAAY;AAEd,UAAA,kBAAkB,SAAS,GAAG;AAE1B,cAAA,aAAa,UAAU,OAAO,QAAQ;AAExC,YAAA,UACE,WAAW,aAAa,SACtB,aACA,oBAAoB,YAAY,CAAC,MAAM;AACjC,gBAAA,SAAS,EAAE;AACV,iBAAA,WAAW,QAAQ,oBAAoB,MAAM;AAAA,QAAA,CACrD;AAEP,YAAI,YAAY,MAAK;AAAE,oBAAU,WAAW;QAA4B;AAElE,cAAA,aAAa,QAAQ;AACrB,cAAA,aAAa,OAAO,gBAAgB,UAAU;AAEpD,YAAI,eAAe,MAAM;AACjB,gBAAA,OAAO,eAAe,OAAO,IAAI,QAAQ,OAAO,IAAI,QAAQ;AACtD,sBAAA,QAAQ,qBAAqB,KAAK,CAAA,SAAM,KAAK,SAAS,IAAI,KAAK,qBAAqB,CAAC;AAAA,QACnG;AACA,iBAAS,QAAQ;AAAA,MAAA,OAEf;AAEF,iBAAS,QAAQ;AAAA,MACnB;AAAA,IACF;AAGM,UAAA,iBAAiB,CAAC,SAAW;AAEjC,kBAAY,QAAQ;AAEpB,aAAO,OAAO,MAAM;AAEhB,cAAM,YAAY;AAEd,YAAA,kBAAkB,SAAS,GAAE;AAG/B,0BAAgB,WAAW,EAAE,CAAC,WAAW,GAAE,GAAI,CAAA;AAE5C,cAAA,KAAK,SAAS,aAAY;AACZ,2BAAA,WAAW,MAAM,qBAAA,CAAsB;AAAA,UAAA,WAEhD,KAAK,SAAS,UAAS;AACtB,mBAAA,gBAAgB,+BAA+B,MAAS;AAAA,UAAA,WAEzD,KAAK,SAAS,UAAS;AACtB,mBAAA,gBAAgB,6BAA6B,MAAS;AAAA,UAAA,WAEvD,KAAK,SAAS,cAAa;AAC1B,mBAAA,gBAAgB,2BAA2B,MAAS;AAAA,UAAA,OAEzD;AACF,2BAAe,WAAW,MAAM;AACvB,qBAAA,mBAAmB,KAAK,KAAwB;AAAA,YAAA,CACxD;AAAA,UACH;AAAA,QACF;AAAA,MAAA,CACH;AAAA,IAAA;AAIH,cAAU,MAAM;AAEhB,YAAM,0BAA0B,OAAO,uBAAuB,CAAC,EAAE,kBAAkB;AACrE,oBAAA,KAAK,MAAM,cAAA,CAAe;AAAA,MAAA,CACvC;AAGW,kBAAA,MAAM,yBAAyB;AAAA,IAAA,CAC1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -15,7 +15,7 @@ import "@lexical/dragon";
15
15
  import "@lexical/plain-text";
16
16
  import "@lexical/rich-text";
17
17
  import { FONT_FAMILY_OPTIONS, FONT_SIZE_OPTIONS, ROOT_FONT_SIZE } from "./FontStyleDefines.js";
18
- import { ShowLinkEditPanel } from "../AutoLinkPlugin/LinkEditDialog.js";
18
+ import { showLinkEditPanel } from "../AutoLinkPlugin/LinkEditDialog.js";
19
19
  const _sfc_main = /* @__PURE__ */ defineComponent({
20
20
  __name: "FontStyleTool",
21
21
  setup(__props) {
@@ -36,7 +36,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
36
36
  const isLink = ref(false);
37
37
  const linkValue = ref("");
38
38
  async function insertLink() {
39
- const result = await ShowLinkEditPanel(linkValue.value);
39
+ const result = await showLinkEditPanel(linkValue.value);
40
40
  if (result.trim()) {
41
41
  editor.dispatchCommand(TOGGLE_LINK_COMMAND, sanitizeUrl(result));
42
42
  } else {
@@ -135,7 +135,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
135
135
  return openBlock(), createElementBlock(Fragment, null, [
136
136
  createVNode(_component_el_dropdown, {
137
137
  "max-height": "300px",
138
- trigger: "click",
139
138
  disabled: disabled.value
140
139
  }, {
141
140
  dropdown: withCtx(() => [
@@ -181,7 +180,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
181
180
  createVNode(_component_el_divider, { direction: "vertical" }),
182
181
  createVNode(_component_el_dropdown, {
183
182
  "max-height": "300px",
184
- trigger: "click",
185
183
  disabled: disabled.value
186
184
  }, {
187
185
  dropdown: withCtx(() => [
@@ -246,12 +244,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
246
244
  createVNode(_component_el_color_picker, {
247
245
  modelValue: bgColor.value,
248
246
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => bgColor.value = $event),
249
- disabled: disabled.value
247
+ disabled: disabled.value,
248
+ onChange: setBgColor
250
249
  }, null, 8, ["modelValue", "disabled"]),
251
250
  createVNode(_component_MKSvgIcon, {
252
251
  class: "view",
253
- iconClass: "doc-background-color",
254
- onChange: setBgColor
252
+ iconClass: "doc-background-color"
255
253
  })
256
254
  ]),
257
255
  _: 1
@@ -1 +1 @@
1
- {"version":3,"file":"FontStyleTool.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport {\r\n $getSelection,\r\n $isRangeSelection,\r\n $isRootOrShadowRoot,\r\n $isParagraphNode,\r\n FORMAT_TEXT_COMMAND,\r\n FORMAT_ELEMENT_COMMAND,\r\n type ElementFormatType,\r\n} from 'lexical'\r\nimport {\r\n $getSelectionStyleValueForProperty,\r\n $patchStyleText,\r\n} from '@lexical/selection'\r\n\r\nimport { $isLinkNode, TOGGLE_LINK_COMMAND,LinkNode } from '@lexical/link'\r\nimport { sanitizeUrl } from '../../utils/url'\r\nimport { getSelectedNode } from '../../utils/getSelectedNode'\r\nimport { $findMatchingParent,mergeRegister } from '@lexical/utils'\r\nimport { useLexicalComposer } from '../../core/composables'\r\nimport { onMounted, onUnmounted, ref,watch } from 'vue'\r\nimport { FONT_SIZE_OPTIONS,ROOT_FONT_SIZE,FONT_FAMILY_OPTIONS } from \"./FontStyleDefines\"\r\nimport { ShowLinkEditPanel } from \"../AutoLinkPlugin/LinkEditDialog\";\r\n\r\nconst editor = useLexicalComposer()\r\nconst fontSize = ref('14px')\r\nconst fontColor = ref<string>('#000')\r\nconst bgColor = ref<string>('#fff')\r\nconst fontFamily = ref<any>(FONT_FAMILY_OPTIONS[0])\r\nconst isBold = ref(false)\r\nconst isItalic = ref(false)\r\nconst isUnderline = ref(false)\r\nconst isStrikethrough = ref(false)\r\n\r\nconst isSubscript = ref(false)\r\nconst isSuperscript = ref(false)\r\n\r\n// 对齐方式\r\nconst alignList = ref<ElementFormatType[]>([\"left\",\"center\",\"right\",\"justify\"])\r\nconst alignValue = ref(alignList.value[0])\r\nconst disabled = ref(false)\r\nconst isLink = ref(false)\r\nconst linkValue = ref(\"\");\r\n\r\nasync function insertLink() {\r\n\r\n const result:any = await ShowLinkEditPanel(linkValue.value);\r\n\r\n if(result.trim()){\r\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, sanitizeUrl(result))\r\n }\r\n else{\r\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\r\n }\r\n}\r\n\r\n// 更新状态栏\r\nfunction updateToolbar() {\r\n\r\n const selection = $getSelection()\r\n\r\n if ($isRangeSelection(selection)) {\r\n\r\n const anchorNode = selection.anchor.getNode()\r\n\r\n let element = anchorNode.getKey() === 'root'\r\n ? anchorNode\r\n : $findMatchingParent(anchorNode, (e) => {\r\n const parent = e.getParent()\r\n return parent !== null && $isRootOrShadowRoot(parent)\r\n });\r\n\r\n\r\n if (element === null){\r\n element = anchorNode.getTopLevelElementOrThrow()\r\n }\r\n\r\n let elementDOM = editor.getElementByKey(element.getKey());\r\n\r\n // 文本对齐\r\n alignValue.value = (elementDOM?.style.textAlign as ElementFormatType) || \"left\";\r\n\r\n if(alignValue.value == \"start\"){ alignValue.value = \"left\"; }\r\n else if(alignValue.value == \"end\"){ alignValue.value = \"right\"; }\r\n\r\n // Update text format\r\n isBold.value = selection.hasFormat('bold')\r\n isItalic.value = selection.hasFormat('italic')\r\n isUnderline.value = selection.hasFormat('underline')\r\n isStrikethrough.value = selection.hasFormat('strikethrough')\r\n isSubscript.value = selection.hasFormat('subscript')\r\n isSuperscript.value = selection.hasFormat('superscript')\r\n\r\n // Handle buttons\r\n var ff = $getSelectionStyleValueForProperty(selection, 'font-family', 'Arial');\r\n let fs = $getSelectionStyleValueForProperty(selection, 'font-size', '1rem');\r\n \r\n if(fs){\r\n fontSize.value = Math.round(parseFloat(fs) * ROOT_FONT_SIZE)+\"px\"\r\n }\r\n \r\n fontColor.value = $getSelectionStyleValueForProperty(selection, 'color', '#000')\r\n bgColor.value = $getSelectionStyleValueForProperty(selection, 'background-color', '#fff')\r\n fontFamily.value = FONT_FAMILY_OPTIONS.find(item=>item.value==ff) || FONT_FAMILY_OPTIONS[0];\r\n\r\n disabled.value = false;\r\n\r\n // Update links\r\n const node = getSelectedNode(selection)\r\n const parent = node.getParent()\r\n isLink.value = $isLinkNode(parent) || $isLinkNode(node)\r\n if(isLink.value){\r\n linkValue.value = $isLinkNode(parent) ? parent.getURL() : (node as LinkNode).getURL()\r\n }\r\n else{\r\n linkValue.value = \"\";\r\n }\r\n }\r\n else{\r\n\r\n disabled.value = true;\r\n }\r\n}\r\n\r\n// 文字样式\r\nconst fontStyleHandle = (data : any,styleName?:any)=>{\r\n fontSize.value = data.label;\r\n editor.update(() => {\r\n const selection = $getSelection()\r\n if (selection !== null) {\r\n $patchStyleText(selection, {\r\n [styleName || \"font-size\"]:data.value\r\n })\r\n }\r\n })\r\n}\r\n\r\n// 字体颜色\r\nconst setFontColor = (color:any)=>{\r\n editor.update(() => {\r\n const selection = $getSelection()\r\n if (selection !== null){\r\n $patchStyleText(selection, { color })\r\n }\r\n },{})\r\n}\r\n\r\n// bg颜色\r\nconst setBgColor = (color:any)=>{\r\n editor.update(() => {\r\n const selection = $getSelection()\r\n if (selection !== null){\r\n $patchStyleText(selection, { 'background-color':color })\r\n }\r\n },{})\r\n}\r\n\r\n\r\n// 挂载的时候\r\nonMounted(() => {\r\n\r\n const unregisterMergeListener = mergeRegister(\r\n editor.registerUpdateListener(({ editorState }) => {\r\n editorState.read(() => updateToolbar())\r\n })\r\n )\r\n\r\n onUnmounted(() => unregisterMergeListener());\r\n})\r\n\r\n</script>\r\n\r\n<template>\r\n <!-- 字体 -->\r\n <el-dropdown max-height=\"300px\" trigger=\"click\" :disabled=\"disabled\">\r\n <el-button text :style=\"{fontFamily:fontFamily.value}\" :disabled=\"disabled\">\r\n {{fontFamily.label}} <MKSvgIcon iconClass=\"ArrowDownBold\" style=\"margin-left: 8px;\" /> \r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item :class=\"{active:fontFamily.label == item.label}\" :disabled=\"disabled\" v-for=\"item in FONT_FAMILY_OPTIONS\" :value=\"item.value\" @click=\"fontStyleHandle(item,'font-family')\">\r\n <span :style=\"{fontFamily:item.value}\">\r\n {{item.label}}\r\n </span>\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <el-divider direction=\"vertical\" /> \r\n <!-- 字体大小 -->\r\n <el-dropdown max-height=\"300px\" trigger=\"click\" :disabled=\"disabled\">\r\n <el-button text :disabled=\"disabled\">\r\n {{fontSize}} <MKSvgIcon iconClass=\"ArrowDownBold\" style=\"margin-left: 8px;\" /> \r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item :class=\"{active:fontSize==item.label}\" :disabled=\"disabled\" v-for=\"item in FONT_SIZE_OPTIONS\" :value=\"item.value\" @click=\"fontStyleHandle(item)\">{{item.label}}</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <el-divider direction=\"vertical\" /> \r\n <!-- 字体颜色 -->\r\n <el-button text class=\"mk-doc-editor-toolbar__fontcolor\" :disabled=\"disabled\" >\r\n <el-color-picker v-model=\"fontColor\" :disabled=\"disabled\" @change=\"setFontColor\" />\r\n </el-button>\r\n <!-- 背景颜色 -->\r\n <el-button text class=\"mk-doc-editor-toolbar__bgcolor\" :disabled=\"disabled\" >\r\n <el-color-picker v-model=\"bgColor\" :disabled=\"disabled\" />\r\n <MKSvgIcon class=\"view\" iconClass=\"doc-background-color\" @change=\"setBgColor\" /> \r\n </el-button>\r\n\r\n <el-divider direction=\"vertical\" />\r\n <el-button-group>\r\n <el-button :disabled=\"disabled\" text :class=\"`${isBold ? 'active' : ''}`\" @click=\"editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold')\">\r\n <MKSvgIcon iconClass=\"doc-bold\" /> \r\n </el-button>\r\n <el-button :disabled=\"disabled\" text :class=\"`${isItalic ? 'active' : ''}`\" @click=\"editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'italic')\">\r\n <MKSvgIcon iconClass=\"doc-italic\" /> \r\n </el-button>\r\n <el-button :disabled=\"disabled\" text :class=\"`${isUnderline ? 'active' : ''}`\" @click=\"editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'underline')\">\r\n <MKSvgIcon iconClass=\"doc-underline\" /> \r\n </el-button>\r\n <el-button :disabled=\"disabled\" text :class=\"`${isStrikethrough ? 'active' : ''}`\" @click=\"editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'strikethrough')\">\r\n <MKSvgIcon iconClass=\"doc-strikethrough\" /> \r\n </el-button>\r\n <el-button :disabled=\"disabled\" text :class=\"`${isSubscript ? 'active' : ''}`\" @click=\"editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'subscript')\">\r\n <MKSvgIcon iconClass=\"doc-sub\" /> \r\n </el-button>\r\n <el-button :disabled=\"disabled\" text :class=\"`${isSuperscript ? 'active' : ''}`\" @click=\"editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'superscript')\">\r\n <MKSvgIcon iconClass=\"doc-sup\" /> \r\n </el-button>\r\n </el-button-group>\r\n <el-divider direction=\"vertical\" />\r\n <el-dropdown max-height=\"300px\" trigger=\"click\" :disabled=\"disabled\">\r\n <el-button text :style=\"{fontFamily:fontFamily.value}\" :disabled=\"disabled\">\r\n <MKSvgIcon :iconClass=\"`doc-align-${alignValue}`\" style=\"font-size: 18px;\" /> \r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item :disabled=\"disabled\" :class=\"{active:alignValue == item}\" v-for=\"item in alignList\" :value=\"item\" @click=\"editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, item)\">\r\n <MKSvgIcon :iconClass=\"`doc-align-${item}`\" style=\"font-size: 18px;\" /> \r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <el-divider direction=\"vertical\" />\r\n <!-- 链接 -->\r\n <el-button-group>\r\n <el-button text :disabled=\"disabled\" :class=\"`${isLink ? 'active' : ''}`\" @click=\"insertLink\">\r\n <MKSvgIcon iconClass=\"doc-link\" /> \r\n </el-button>\r\n </el-button-group>\r\n</template>\r\n"],"names":["parent"],"mappings":"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"}
1
+ {"version":3,"file":"FontStyleTool.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport {\r\n $getSelection,\r\n $isRangeSelection,\r\n $isRootOrShadowRoot,\r\n $isParagraphNode,\r\n FORMAT_TEXT_COMMAND,\r\n FORMAT_ELEMENT_COMMAND,\r\n type ElementFormatType,\r\n} from 'lexical'\r\nimport {\r\n $getSelectionStyleValueForProperty,\r\n $patchStyleText,\r\n} from '@lexical/selection'\r\n\r\nimport { $isLinkNode, TOGGLE_LINK_COMMAND,LinkNode } from '@lexical/link'\r\nimport { sanitizeUrl } from '../../utils/url'\r\nimport { getSelectedNode } from '../../utils/getSelectedNode'\r\nimport { $findMatchingParent,mergeRegister } from '@lexical/utils'\r\nimport { useLexicalComposer } from '../../core/composables'\r\nimport { onMounted, onUnmounted, ref,watch } from 'vue'\r\nimport { FONT_SIZE_OPTIONS,ROOT_FONT_SIZE,FONT_FAMILY_OPTIONS } from \"./FontStyleDefines\"\r\nimport { showLinkEditPanel } from \"../AutoLinkPlugin/LinkEditDialog\";\r\n\r\nconst editor = useLexicalComposer()\r\nconst fontSize = ref('14px')\r\nconst fontColor = ref<string>('#000')\r\nconst bgColor = ref<string>('#fff')\r\nconst fontFamily = ref<any>(FONT_FAMILY_OPTIONS[0])\r\nconst isBold = ref(false)\r\nconst isItalic = ref(false)\r\nconst isUnderline = ref(false)\r\nconst isStrikethrough = ref(false)\r\n\r\nconst isSubscript = ref(false)\r\nconst isSuperscript = ref(false)\r\n\r\n// 对齐方式\r\nconst alignList = ref<ElementFormatType[]>([\"left\",\"center\",\"right\",\"justify\"])\r\nconst alignValue = ref(alignList.value[0])\r\nconst disabled = ref(false)\r\nconst isLink = ref(false)\r\nconst linkValue = ref(\"\");\r\n\r\nasync function insertLink() {\r\n\r\n const result:any = await showLinkEditPanel(linkValue.value);\r\n\r\n if(result.trim()){\r\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, sanitizeUrl(result))\r\n }\r\n else{\r\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null)\r\n }\r\n}\r\n\r\n// 更新状态栏\r\nfunction updateToolbar() {\r\n\r\n const selection = $getSelection()\r\n\r\n if ($isRangeSelection(selection)) {\r\n\r\n const anchorNode = selection.anchor.getNode()\r\n\r\n let element = anchorNode.getKey() === 'root'\r\n ? anchorNode\r\n : $findMatchingParent(anchorNode, (e) => {\r\n const parent = e.getParent()\r\n return parent !== null && $isRootOrShadowRoot(parent)\r\n });\r\n\r\n\r\n if (element === null){\r\n element = anchorNode.getTopLevelElementOrThrow()\r\n }\r\n\r\n let elementDOM = editor.getElementByKey(element.getKey());\r\n\r\n // 文本对齐\r\n alignValue.value = (elementDOM?.style.textAlign as ElementFormatType) || \"left\";\r\n\r\n if(alignValue.value == \"start\"){ alignValue.value = \"left\"; }\r\n else if(alignValue.value == \"end\"){ alignValue.value = \"right\"; }\r\n\r\n // Update text format\r\n isBold.value = selection.hasFormat('bold')\r\n isItalic.value = selection.hasFormat('italic')\r\n isUnderline.value = selection.hasFormat('underline')\r\n isStrikethrough.value = selection.hasFormat('strikethrough')\r\n isSubscript.value = selection.hasFormat('subscript')\r\n isSuperscript.value = selection.hasFormat('superscript')\r\n\r\n // Handle buttons\r\n var ff = $getSelectionStyleValueForProperty(selection, 'font-family', 'Arial');\r\n let fs = $getSelectionStyleValueForProperty(selection, 'font-size', '1rem');\r\n \r\n if(fs){\r\n fontSize.value = Math.round(parseFloat(fs) * ROOT_FONT_SIZE)+\"px\"\r\n }\r\n \r\n fontColor.value = $getSelectionStyleValueForProperty(selection, 'color', '#000')\r\n bgColor.value = $getSelectionStyleValueForProperty(selection, 'background-color', '#fff')\r\n fontFamily.value = FONT_FAMILY_OPTIONS.find(item=>item.value==ff) || FONT_FAMILY_OPTIONS[0];\r\n\r\n disabled.value = false;\r\n\r\n // Update links\r\n const node = getSelectedNode(selection)\r\n const parent = node.getParent()\r\n isLink.value = $isLinkNode(parent) || $isLinkNode(node)\r\n if(isLink.value){\r\n linkValue.value = $isLinkNode(parent) ? parent.getURL() : (node as LinkNode).getURL()\r\n }\r\n else{\r\n linkValue.value = \"\";\r\n }\r\n }\r\n else{\r\n\r\n disabled.value = true;\r\n }\r\n}\r\n\r\n// 文字样式\r\nconst fontStyleHandle = (data : any,styleName?:any)=>{\r\n fontSize.value = data.label;\r\n editor.update(() => {\r\n const selection = $getSelection()\r\n if (selection !== null) {\r\n $patchStyleText(selection, {\r\n [styleName || \"font-size\"]:data.value\r\n })\r\n }\r\n })\r\n}\r\n\r\n// 字体颜色\r\nconst setFontColor = (color:any)=>{\r\n editor.update(() => {\r\n const selection = $getSelection()\r\n if (selection !== null){\r\n $patchStyleText(selection, { color })\r\n }\r\n },{})\r\n}\r\n\r\n// bg颜色\r\nconst setBgColor = (color:any)=>{\r\n editor.update(() => {\r\n const selection = $getSelection()\r\n if (selection !== null){\r\n $patchStyleText(selection, { 'background-color':color })\r\n }\r\n },{})\r\n}\r\n\r\n\r\n// 挂载的时候\r\nonMounted(() => {\r\n\r\n const unregisterMergeListener = mergeRegister(\r\n editor.registerUpdateListener(({ editorState }) => {\r\n editorState.read(() => updateToolbar())\r\n })\r\n )\r\n\r\n onUnmounted(() => unregisterMergeListener());\r\n})\r\n\r\n</script>\r\n\r\n<template>\r\n <!-- 字体 -->\r\n <el-dropdown max-height=\"300px\" :disabled=\"disabled\">\r\n <el-button text :style=\"{fontFamily:fontFamily.value}\" :disabled=\"disabled\">\r\n {{fontFamily.label}} <MKSvgIcon iconClass=\"ArrowDownBold\" style=\"margin-left: 8px;\" /> \r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item :class=\"{active:fontFamily.label == item.label}\" :disabled=\"disabled\" v-for=\"item in FONT_FAMILY_OPTIONS\" :value=\"item.value\" @click=\"fontStyleHandle(item,'font-family')\">\r\n <span :style=\"{fontFamily:item.value}\">\r\n {{item.label}}\r\n </span>\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <el-divider direction=\"vertical\" /> \r\n <!-- 字体大小 -->\r\n <el-dropdown max-height=\"300px\" :disabled=\"disabled\">\r\n <el-button text :disabled=\"disabled\">\r\n {{fontSize}} <MKSvgIcon iconClass=\"ArrowDownBold\" style=\"margin-left: 8px;\" /> \r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item :class=\"{active:fontSize==item.label}\" :disabled=\"disabled\" v-for=\"item in FONT_SIZE_OPTIONS\" :value=\"item.value\" @click=\"fontStyleHandle(item)\">{{item.label}}</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <el-divider direction=\"vertical\" /> \r\n <!-- 字体颜色 -->\r\n <el-button text class=\"mk-doc-editor-toolbar__fontcolor\" :disabled=\"disabled\" >\r\n <el-color-picker v-model=\"fontColor\" :disabled=\"disabled\" @change=\"setFontColor\" />\r\n </el-button>\r\n <!-- 背景颜色 -->\r\n <el-button text class=\"mk-doc-editor-toolbar__bgcolor\" :disabled=\"disabled\" >\r\n <el-color-picker v-model=\"bgColor\" :disabled=\"disabled\" @change=\"setBgColor\" />\r\n <MKSvgIcon class=\"view\" iconClass=\"doc-background-color\" /> \r\n </el-button>\r\n\r\n <el-divider direction=\"vertical\" />\r\n <el-button-group>\r\n <el-button :disabled=\"disabled\" text :class=\"`${isBold ? 'active' : ''}`\" @click=\"editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'bold')\">\r\n <MKSvgIcon iconClass=\"doc-bold\" /> \r\n </el-button>\r\n <el-button :disabled=\"disabled\" text :class=\"`${isItalic ? 'active' : ''}`\" @click=\"editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'italic')\">\r\n <MKSvgIcon iconClass=\"doc-italic\" /> \r\n </el-button>\r\n <el-button :disabled=\"disabled\" text :class=\"`${isUnderline ? 'active' : ''}`\" @click=\"editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'underline')\">\r\n <MKSvgIcon iconClass=\"doc-underline\" /> \r\n </el-button>\r\n <el-button :disabled=\"disabled\" text :class=\"`${isStrikethrough ? 'active' : ''}`\" @click=\"editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'strikethrough')\">\r\n <MKSvgIcon iconClass=\"doc-strikethrough\" /> \r\n </el-button>\r\n <el-button :disabled=\"disabled\" text :class=\"`${isSubscript ? 'active' : ''}`\" @click=\"editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'subscript')\">\r\n <MKSvgIcon iconClass=\"doc-sub\" /> \r\n </el-button>\r\n <el-button :disabled=\"disabled\" text :class=\"`${isSuperscript ? 'active' : ''}`\" @click=\"editor.dispatchCommand(FORMAT_TEXT_COMMAND, 'superscript')\">\r\n <MKSvgIcon iconClass=\"doc-sup\" /> \r\n </el-button>\r\n </el-button-group>\r\n <el-divider direction=\"vertical\" />\r\n <el-dropdown max-height=\"300px\" trigger=\"click\" :disabled=\"disabled\">\r\n <el-button text :style=\"{fontFamily:fontFamily.value}\" :disabled=\"disabled\">\r\n <MKSvgIcon :iconClass=\"`doc-align-${alignValue}`\" style=\"font-size: 18px;\" /> \r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item :disabled=\"disabled\" :class=\"{active:alignValue == item}\" v-for=\"item in alignList\" :value=\"item\" @click=\"editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, item)\">\r\n <MKSvgIcon :iconClass=\"`doc-align-${item}`\" style=\"font-size: 18px;\" /> \r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <el-divider direction=\"vertical\" />\r\n <!-- 链接 -->\r\n <el-button-group>\r\n <el-button text :disabled=\"disabled\" :class=\"`${isLink ? 'active' : ''}`\" @click=\"insertLink\">\r\n <MKSvgIcon iconClass=\"doc-link\" /> \r\n </el-button>\r\n </el-button-group>\r\n</template>\r\n"],"names":["parent"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { defineComponent, ref, onMounted, onUnmounted, resolveComponent, openBlock, createElementBlock, createVNode, withCtx, unref, normalizeClass, Fragment, renderList, createBlock, createTextVNode, toDisplayString } from "vue";
1
+ import { defineComponent, ref, onMounted, onUnmounted, resolveComponent, openBlock, createElementBlock, createVNode, withCtx, unref, Fragment, renderList, createBlock, createTextVNode, toDisplayString } from "vue";
2
2
  import { CAN_UNDO_COMMAND, CAN_REDO_COMMAND, $getSelection, $isNodeSelection, $isRangeSelection, UNDO_COMMAND, REDO_COMMAND } from "lexical";
3
3
  import { mergeRegister, $findMatchingParent } from "@lexical/utils";
4
4
  import "@lexical/text";
@@ -10,10 +10,10 @@ import "@lexical/list";
10
10
  import "@lexical/dragon";
11
11
  import "@lexical/plain-text";
12
12
  import "@lexical/rich-text";
13
- import { ToolbarExtendPlugins, DEVICE_VIEW_MODE } from "../../core/index.js";
14
13
  import _sfc_main$3 from "./PreviewToolbar.vue.js";
15
14
  import _sfc_main$2 from "./FontStyleTool.vue.js";
16
15
  import _sfc_main$1 from "./ContentStyleTool.vue.js";
16
+ import { ToolbarExtendPlugins } from "../../core/index.js";
17
17
  import { $isTextGridNode } from "../GridPlugin/TextGridNode.js";
18
18
  import "../GridPlugin/LayoutGridNode.js";
19
19
  import { $isImageTextGridNode } from "../GridPlugin/ImageTextGridNode.js";
@@ -126,32 +126,6 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
126
126
  createVNode(_component_el_divider, { direction: "vertical" }),
127
127
  createVNode(_sfc_main$2),
128
128
  createVNode(_component_el_divider, { direction: "vertical" }),
129
- createVNode(_component_el_button_group, null, {
130
- default: withCtx(() => [
131
- createVNode(_component_el_button, {
132
- text: "",
133
- class: normalizeClass(`${unref(DEVICE_VIEW_MODE) == "pc" ? "active" : ""}`),
134
- onClick: _cache[2] || (_cache[2] = ($event) => DEVICE_VIEW_MODE.value = "pc")
135
- }, {
136
- default: withCtx(() => [
137
- createVNode(_component_MKSvgIcon, { iconClass: "Platform" })
138
- ]),
139
- _: 1
140
- }, 8, ["class"]),
141
- createVNode(_component_el_button, {
142
- text: "",
143
- class: normalizeClass(`${unref(DEVICE_VIEW_MODE) == "mobile" ? "active" : ""}`),
144
- onClick: _cache[3] || (_cache[3] = ($event) => DEVICE_VIEW_MODE.value = "mobile")
145
- }, {
146
- default: withCtx(() => [
147
- createVNode(_component_MKSvgIcon, { iconClass: "Iphone" })
148
- ]),
149
- _: 1
150
- }, 8, ["class"])
151
- ]),
152
- _: 1
153
- }),
154
- createVNode(_component_el_divider, { direction: "vertical" }),
155
129
  createVNode(_component_el_dropdown, { disabled: toolbarDisabled.value }, {
156
130
  dropdown: withCtx(() => [
157
131
  createVNode(_component_el_dropdown_menu, null, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport type { CommandListenerPriority } from 'lexical'\r\nimport {\r\n$getSelection,\r\n$isNodeSelection,\r\n $isRangeSelection,\r\n CAN_REDO_COMMAND,\r\n CAN_UNDO_COMMAND,\r\n REDO_COMMAND,\r\n UNDO_COMMAND,\r\n} from 'lexical'\r\nimport { $findMatchingParent,mergeRegister } from '@lexical/utils'\r\nimport { useLexicalComposer } from '../../core/composables'\r\nimport { onMounted, onUnmounted, ref } from 'vue'\r\nimport { DEVICE_VIEW_MODE } from \"../../core\"\r\nimport PreviewToolbar from \"./PreviewToolbar.vue\"\r\nimport FontStyleToolbar from \"./FontStyleTool.vue\"\r\nimport ContentStyleToolbar from \"./ContentStyleTool.vue\"\r\nimport { ToolbarExtendPlugins } from \"../../core\"\r\nimport { $isTextGridNode,$isImageTextGridNode,$isModuleGridNode } from \"../GridPlugin\"\r\nimport { $isModuleBlockNode } from \"../ModulePlugin\"\r\n// 参数\r\ndefineProps({\r\n js:{ type:String,default:`` },\r\n css:{ type:String,default:`` }\r\n})\r\n\r\nconst LowPriority: CommandListenerPriority = 1\r\n\r\nconst toolbarRef = ref<HTMLDivElement | null>(null)\r\nconst toolbarDisabled = ref(false)\r\nconst editor = useLexicalComposer()\r\n\r\nconst canUndo = ref(false)\r\nconst canRedo = ref(false)\r\n\r\nonMounted(() => {\r\n \r\n const unregisterMergeListener = mergeRegister(\r\n editor.registerCommand(\r\n CAN_UNDO_COMMAND,\r\n (payload: boolean) => {\r\n canUndo.value = payload\r\n return false\r\n },\r\n LowPriority,\r\n ),\r\n editor.registerCommand(\r\n CAN_REDO_COMMAND,\r\n (payload: boolean) => {\r\n canRedo.value = payload\r\n return false\r\n },\r\n LowPriority,\r\n ),\r\n editor.registerUpdateListener(({ editorState }) => {\r\n editorState.read(() => {\r\n\r\n const selection = $getSelection()\r\n const node = $isNodeSelection(selection) ? selection?.getNodes()[0] : null;\r\n\r\n if(node){\r\n if ($isModuleBlockNode(node) || $isTextGridNode(node) || $isImageTextGridNode(node) || $isModuleGridNode(node) ) {\r\n toolbarDisabled.value = true;\r\n }\r\n else{\r\n toolbarDisabled.value = false;\r\n }\r\n }\r\n else if ($isRangeSelection(selection)) {\r\n\r\n const anchorNode = selection.anchor.getNode()\r\n\r\n let element = anchorNode.getKey() === 'root'\r\n ? anchorNode\r\n : $findMatchingParent(anchorNode, (e) => {\r\n const parent = e.getParent()\r\n return parent !== null && $isTextGridNode(parent)\r\n });\r\n\r\n // 文本节点内 也不允许插入奇怪的东西\r\n if(element != null && $isTextGridNode(element.getParent())){\r\n toolbarDisabled.value = true;\r\n }\r\n else{\r\n toolbarDisabled.value = false;\r\n }\r\n }\r\n else{\r\n toolbarDisabled.value = false;\r\n }\r\n })\r\n })\r\n )\r\n\r\n onUnmounted(() => {\r\n ToolbarExtendPlugins.length = 0;\r\n unregisterMergeListener()\r\n })\r\n})\r\n\r\n\r\n</script>\r\n\r\n<template>\r\n <div ref=\"toolbarRef\" class=\"mk-doc-editor-toolbar\">\r\n <el-button-group>\r\n <el-button text :disabled=\"!canUndo\" @click=\"editor.dispatchCommand(UNDO_COMMAND, undefined)\">\r\n <MKSvgIcon iconClass=\"RefreshLeft\" /> \r\n </el-button>\r\n <el-button text :disabled=\"!canRedo\" @click=\"editor.dispatchCommand(REDO_COMMAND, undefined)\">\r\n <MKSvgIcon iconClass=\"RefreshRight\" /> \r\n </el-button>\r\n </el-button-group>\r\n <el-divider direction=\"vertical\" />\r\n <!-- 内容 -->\r\n <ContentStyleToolbar />\r\n <el-divider direction=\"vertical\" /> \r\n <!-- 文字样式 -->\r\n <FontStyleToolbar /> \r\n <el-divider direction=\"vertical\" />\r\n \r\n <el-button-group>\r\n <el-button text :class=\"`${DEVICE_VIEW_MODE=='pc' ? 'active' : ''}`\" @click=\"DEVICE_VIEW_MODE='pc'\">\r\n <MKSvgIcon iconClass=\"Platform\" /> \r\n </el-button>\r\n <el-button text :class=\"`${DEVICE_VIEW_MODE=='mobile' ? 'active' : ''}`\" @click=\"DEVICE_VIEW_MODE='mobile'\">\r\n <MKSvgIcon iconClass=\"Iphone\" /> \r\n </el-button>\r\n </el-button-group>\r\n <el-divider direction=\"vertical\" />\r\n <el-dropdown :disabled=\"toolbarDisabled\">\r\n <el-button text :disabled=\"toolbarDisabled\">\r\n <MKSvgIcon iconClass=\"Plus\" style=\"margin-right: 5px;\" /> 插入\r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item v-for=\"item in ToolbarExtendPlugins\" :key=\"item\" @click=\"item.action()\">\r\n <MKSvgIcon :iconClass=\"item.icon\" /> \r\n {{item.text}}\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <el-divider direction=\"vertical\" />\r\n <el-button-group>\r\n <PreviewToolbar :js=\"js\" :css=\"css\" />\r\n </el-button-group>\r\n </div>\r\n</template>\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAM,cAAuC;;;;;;;;AAEvC,UAAA,aAAa,IAA2B,IAAI;AAC5C,UAAA,kBAAkB,IAAI,KAAK;AACjC,UAAM,SAAS;AAET,UAAA,UAAU,IAAI,KAAK;AACnB,UAAA,UAAU,IAAI,KAAK;AAEzB,cAAU,MAAM;AAEd,YAAM,0BAA0B;AAAA,QAC9B,OAAO;AAAA,UACL;AAAA,UACA,CAAC,YAAqB;AACpB,oBAAQ,QAAQ;AACT,mBAAA;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACL;AAAA,UACA,CAAC,YAAqB;AACpB,oBAAQ,QAAQ;AACT,mBAAA;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAO,uBAAuB,CAAC,EAAE,kBAAkB;AACjD,sBAAY,KAAK,MAAM;AAErB,kBAAM,YAAY;AACZ,kBAAA,OAAO,iBAAiB,SAAS,IAAI,uCAAW,WAAW,KAAK;AAEtE,gBAAG,MAAK;AACF,kBAAA,mBAAmB,IAAI,KAAK,gBAAgB,IAAI,KAAK,qBAAqB,IAAI,KAAK,kBAAkB,IAAI,GAAI;AAC/G,gCAAgB,QAAQ;AAAA,cAAA,OAEtB;AACF,gCAAgB,QAAQ;AAAA,cAC1B;AAAA,YAAA,WAEO,kBAAkB,SAAS,GAAG;AAE/B,oBAAA,aAAa,UAAU,OAAO,QAAQ;AAExC,kBAAA,UAAU,WAAW,aAAa,SAClC,aACA,oBAAoB,YAAY,CAAC,MAAM;AACjC,sBAAA,SAAS,EAAE;AACV,uBAAA,WAAW,QAAQ,gBAAgB,MAAM;AAAA,cAAA,CACjD;AAGH,kBAAG,WAAW,QAAQ,gBAAgB,QAAQ,UAAW,CAAA,GAAE;AACzD,gCAAgB,QAAQ;AAAA,cAAA,OAEtB;AACF,gCAAgB,QAAQ;AAAA,cAC1B;AAAA,YAAA,OAEE;AACF,8BAAgB,QAAQ;AAAA,YAC1B;AAAA,UAAA,CACD;AAAA,QAAA,CACF;AAAA,MAAA;AAGH,kBAAY,MAAM;AAChB,6BAAqB,SAAS;AACN;MAAA,CACzB;AAAA,IAAA,CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.vue.js","sources":["../../../../../../../src/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport type { CommandListenerPriority } from 'lexical'\r\nimport {\r\n$getSelection,\r\n$isNodeSelection,\r\n $isRangeSelection,\r\n CAN_REDO_COMMAND,\r\n CAN_UNDO_COMMAND,\r\n REDO_COMMAND,\r\n UNDO_COMMAND,\r\n} from 'lexical'\r\nimport { $findMatchingParent,mergeRegister } from '@lexical/utils'\r\nimport { useLexicalComposer } from '../../core/composables'\r\nimport { onMounted, onUnmounted, ref } from 'vue'\r\nimport { DEVICE_VIEW_MODE } from \"../../core\"\r\nimport PreviewToolbar from \"./PreviewToolbar.vue\"\r\nimport FontStyleToolbar from \"./FontStyleTool.vue\"\r\nimport ContentStyleToolbar from \"./ContentStyleTool.vue\"\r\nimport { ToolbarExtendPlugins } from \"../../core\"\r\nimport { $isTextGridNode,$isImageTextGridNode,$isModuleGridNode } from \"../GridPlugin\"\r\nimport { $isModuleBlockNode } from \"../ModulePlugin\"\r\n// 参数\r\ndefineProps({\r\n js:{ type:String,default:`` },\r\n css:{ type:String,default:`` }\r\n})\r\n\r\nconst LowPriority: CommandListenerPriority = 1\r\n\r\nconst toolbarRef = ref<HTMLDivElement | null>(null)\r\nconst toolbarDisabled = ref(false)\r\nconst editor = useLexicalComposer()\r\n\r\nconst canUndo = ref(false)\r\nconst canRedo = ref(false)\r\n\r\nonMounted(() => {\r\n \r\n const unregisterMergeListener = mergeRegister(\r\n editor.registerCommand(\r\n CAN_UNDO_COMMAND,\r\n (payload: boolean) => {\r\n canUndo.value = payload\r\n return false\r\n },\r\n LowPriority,\r\n ),\r\n editor.registerCommand(\r\n CAN_REDO_COMMAND,\r\n (payload: boolean) => {\r\n canRedo.value = payload\r\n return false\r\n },\r\n LowPriority,\r\n ),\r\n editor.registerUpdateListener(({ editorState }) => {\r\n editorState.read(() => {\r\n\r\n const selection = $getSelection()\r\n const node = $isNodeSelection(selection) ? selection?.getNodes()[0] : null;\r\n\r\n if(node){\r\n if ($isModuleBlockNode(node) || $isTextGridNode(node) || $isImageTextGridNode(node) || $isModuleGridNode(node) ) {\r\n toolbarDisabled.value = true;\r\n }\r\n else{\r\n toolbarDisabled.value = false;\r\n }\r\n }\r\n else if ($isRangeSelection(selection)) {\r\n\r\n const anchorNode = selection.anchor.getNode()\r\n\r\n let element = anchorNode.getKey() === 'root'\r\n ? anchorNode\r\n : $findMatchingParent(anchorNode, (e) => {\r\n const parent = e.getParent()\r\n return parent !== null && $isTextGridNode(parent)\r\n });\r\n\r\n // 文本节点内 也不允许插入奇怪的东西\r\n if(element != null && $isTextGridNode(element.getParent())){\r\n toolbarDisabled.value = true;\r\n }\r\n else{\r\n toolbarDisabled.value = false;\r\n }\r\n }\r\n else{\r\n toolbarDisabled.value = false;\r\n }\r\n })\r\n })\r\n )\r\n\r\n onUnmounted(() => {\r\n ToolbarExtendPlugins.length = 0;\r\n unregisterMergeListener()\r\n })\r\n})\r\n\r\n\r\n</script>\r\n\r\n<template>\r\n <div ref=\"toolbarRef\" class=\"mk-doc-editor-toolbar\">\r\n <el-button-group>\r\n <el-button text :disabled=\"!canUndo\" @click=\"editor.dispatchCommand(UNDO_COMMAND, undefined)\">\r\n <MKSvgIcon iconClass=\"RefreshLeft\" /> \r\n </el-button>\r\n <el-button text :disabled=\"!canRedo\" @click=\"editor.dispatchCommand(REDO_COMMAND, undefined)\">\r\n <MKSvgIcon iconClass=\"RefreshRight\" /> \r\n </el-button>\r\n </el-button-group>\r\n <el-divider direction=\"vertical\" />\r\n <!-- 内容 -->\r\n <ContentStyleToolbar />\r\n <el-divider direction=\"vertical\" /> \r\n <!-- 文字样式 -->\r\n <FontStyleToolbar /> \r\n <!-- <el-divider direction=\"vertical\" />\r\n \r\n <el-button-group>\r\n <el-button text :class=\"`${DEVICE_VIEW_MODE=='pc' ? 'active' : ''}`\" @click=\"DEVICE_VIEW_MODE='pc'\">\r\n <MKSvgIcon iconClass=\"Platform\" /> \r\n </el-button>\r\n <el-button text :class=\"`${DEVICE_VIEW_MODE=='mobile' ? 'active' : ''}`\" @click=\"DEVICE_VIEW_MODE='mobile'\">\r\n <MKSvgIcon iconClass=\"Iphone\" /> \r\n </el-button>\r\n </el-button-group> -->\r\n <el-divider direction=\"vertical\" />\r\n <el-dropdown :disabled=\"toolbarDisabled\">\r\n <el-button text :disabled=\"toolbarDisabled\">\r\n <MKSvgIcon iconClass=\"Plus\" style=\"margin-right: 5px;\" /> 插入\r\n </el-button>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item v-for=\"item in ToolbarExtendPlugins\" :key=\"item\" @click=\"item.action()\">\r\n <MKSvgIcon :iconClass=\"item.icon\" /> \r\n {{item.text}}\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <el-divider direction=\"vertical\" />\r\n <el-button-group>\r\n <PreviewToolbar :js=\"js\" :css=\"css\" />\r\n </el-button-group>\r\n </div>\r\n</template>\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAM,cAAuC;;;;;;;;AAEvC,UAAA,aAAa,IAA2B,IAAI;AAC5C,UAAA,kBAAkB,IAAI,KAAK;AACjC,UAAM,SAAS;AAET,UAAA,UAAU,IAAI,KAAK;AACnB,UAAA,UAAU,IAAI,KAAK;AAEzB,cAAU,MAAM;AAEd,YAAM,0BAA0B;AAAA,QAC9B,OAAO;AAAA,UACL;AAAA,UACA,CAAC,YAAqB;AACpB,oBAAQ,QAAQ;AACT,mBAAA;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAO;AAAA,UACL;AAAA,UACA,CAAC,YAAqB;AACpB,oBAAQ,QAAQ;AACT,mBAAA;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACA,OAAO,uBAAuB,CAAC,EAAE,kBAAkB;AACjD,sBAAY,KAAK,MAAM;AAErB,kBAAM,YAAY;AACZ,kBAAA,OAAO,iBAAiB,SAAS,IAAI,uCAAW,WAAW,KAAK;AAEtE,gBAAG,MAAK;AACF,kBAAA,mBAAmB,IAAI,KAAK,gBAAgB,IAAI,KAAK,qBAAqB,IAAI,KAAK,kBAAkB,IAAI,GAAI;AAC/G,gCAAgB,QAAQ;AAAA,cAAA,OAEtB;AACF,gCAAgB,QAAQ;AAAA,cAC1B;AAAA,YAAA,WAEO,kBAAkB,SAAS,GAAG;AAE/B,oBAAA,aAAa,UAAU,OAAO,QAAQ;AAExC,kBAAA,UAAU,WAAW,aAAa,SAClC,aACA,oBAAoB,YAAY,CAAC,MAAM;AACjC,sBAAA,SAAS,EAAE;AACV,uBAAA,WAAW,QAAQ,gBAAgB,MAAM;AAAA,cAAA,CACjD;AAGH,kBAAG,WAAW,QAAQ,gBAAgB,QAAQ,UAAW,CAAA,GAAE;AACzD,gCAAgB,QAAQ;AAAA,cAAA,OAEtB;AACF,gCAAgB,QAAQ;AAAA,cAC1B;AAAA,YAAA,OAEE;AACF,8BAAgB,QAAQ;AAAA,YAC1B;AAAA,UAAA,CACD;AAAA,QAAA,CACF;AAAA,MAAA;AAGH,kBAAY,MAAM;AAChB,6BAAqB,SAAS;AACN;MAAA,CACzB;AAAA,IAAA,CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { defineComponent, createVNode } from "vue";
1
+ import { defineComponent, inject, createVNode } from "vue";
2
2
  import { columnSortProps } from "./column-sort-options.js";
3
3
  import { ElTooltip } from "element-plus";
4
4
  import { MKSvgIcon } from "../../../../basic/svg-icon/index.js";
@@ -26,17 +26,31 @@ import "../../../../basic/doc-editor/index.js";
26
26
  import "../../../../basic/copy-container/index.js";
27
27
  import "../../../../basic/image-cropper/index.js";
28
28
  import "../../../../basic/visual-page-editor/index.js";
29
+ import { DATA_TABLE_CONTEXT_KEY } from "../../token.js";
29
30
  const ColumnSort = /* @__PURE__ */ defineComponent({
30
31
  name: "MKColumnSort",
31
32
  props: columnSortProps,
32
33
  setup(props) {
34
+ const dataTableContext = inject(DATA_TABLE_CONTEXT_KEY);
35
+ const handleMoveUp = () => {
36
+ dataTableContext.dataTable.moveUp(props.row);
37
+ };
38
+ const handleMoveDown = () => {
39
+ dataTableContext.dataTable.moveDown(props.row);
40
+ };
41
+ const handleToTop = () => {
42
+ dataTableContext.dataTable.toTop(props.row);
43
+ };
44
+ const handleToBottom = () => {
45
+ dataTableContext.dataTable.toBottom(props.row);
46
+ };
33
47
  return () => {
34
48
  let children = null;
35
49
  if (props.drag) {
36
50
  children = createVNode("span", {
37
51
  "class": "mk-column-sort__drag"
38
52
  }, [createVNode(MKSvgIcon, {
39
- "iconClass": "sort"
53
+ "iconClass": "Rank"
40
54
  }, null)]);
41
55
  } else {
42
56
  children = createVNode("span", {
@@ -46,28 +60,32 @@ const ColumnSort = /* @__PURE__ */ defineComponent({
46
60
  "placement": "top"
47
61
  }, {
48
62
  default: () => [createVNode(MKSvgIcon, {
49
- "iconClass": "top"
63
+ "iconClass": "Top",
64
+ "onClick": handleToTop
50
65
  }, null)]
51
66
  }), createVNode(ElTooltip, {
52
67
  "content": "上移",
53
68
  "placement": "top"
54
69
  }, {
55
70
  default: () => [createVNode(MKSvgIcon, {
56
- "iconClass": "up"
71
+ "iconClass": "ArrowUpBold",
72
+ "onClick": handleMoveUp
57
73
  }, null)]
58
74
  }), createVNode(ElTooltip, {
59
75
  "content": "下移",
60
76
  "placement": "top"
61
77
  }, {
62
78
  default: () => [createVNode(MKSvgIcon, {
63
- "iconClass": "down"
79
+ "iconClass": "ArrowDownBold",
80
+ "onClick": handleMoveDown
64
81
  }, null)]
65
82
  }), createVNode(ElTooltip, {
66
83
  "content": "置底",
67
84
  "placement": "top"
68
85
  }, {
69
86
  default: () => [createVNode(MKSvgIcon, {
70
- "iconClass": "bottom"
87
+ "iconClass": "Bottom",
88
+ "onClick": handleToBottom
71
89
  }, null)]
72
90
  })]);
73
91
  }