@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.
- package/dist/cjs/components/basic/doc-editor/plugins/AutoLinkPlugin/LinkEditDialog.js +2 -2
- package/dist/cjs/components/basic/doc-editor/plugins/AutoLinkPlugin/LinkEditDialog.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js +1 -27
- package/dist/cjs/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js +0 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js +4 -6
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js.map +1 -1
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js +1 -27
- package/dist/cjs/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js.map +1 -1
- package/dist/cjs/components/data-model/data-table/components/column-sort/column-sort.js +23 -5
- package/dist/cjs/components/data-model/data-table/components/column-sort/column-sort.js.map +1 -1
- package/dist/cjs/components/data-model/data-table/views/table/table.js +4 -16
- package/dist/cjs/components/data-model/data-table/views/table/table.js.map +1 -1
- package/dist/cjs/message-impl/DialogerImpl.js +1 -1
- package/dist/cjs/message-impl/DialogerImpl.js.map +1 -1
- package/dist/cjs/modules/ms/components/material-list/material-item.vue.js +34 -1
- package/dist/cjs/modules/ms/components/material-list/material-item.vue.js.map +1 -1
- package/dist/cjs/modules/ms/components/rich-text-editor/rich-text-editor.js.map +1 -1
- package/dist/cjs/modules/ms/dataviews/ms-config/MsConfigTable.js +9 -0
- package/dist/cjs/modules/ms/dataviews/ms-config/MsConfigTable.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/AutoLinkPlugin/LinkEditDialog.js +2 -2
- package/dist/esm/components/basic/doc-editor/plugins/AutoLinkPlugin/LinkEditDialog.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js +3 -29
- package/dist/esm/components/basic/doc-editor/plugins/AutoLinkPlugin/index.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js +0 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js +5 -7
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/FontStyleTool.vue.js.map +1 -1
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js +2 -28
- package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/index.vue.js.map +1 -1
- package/dist/esm/components/data-model/data-table/components/column-sort/column-sort.js +24 -6
- package/dist/esm/components/data-model/data-table/components/column-sort/column-sort.js.map +1 -1
- package/dist/esm/components/data-model/data-table/views/table/table.js +4 -16
- package/dist/esm/components/data-model/data-table/views/table/table.js.map +1 -1
- package/dist/esm/message-impl/DialogerImpl.js +1 -1
- package/dist/esm/message-impl/DialogerImpl.js.map +1 -1
- package/dist/esm/modules/ms/components/material-list/material-item.vue.js +34 -1
- package/dist/esm/modules/ms/components/material-list/material-item.vue.js.map +1 -1
- package/dist/esm/modules/ms/components/rich-text-editor/rich-text-editor.js.map +1 -1
- package/dist/esm/modules/ms/dataviews/ms-config/MsConfigTable.js +9 -0
- package/dist/esm/modules/ms/dataviews/ms-config/MsConfigTable.js.map +1 -1
- package/dist/types/components/basic/doc-editor/plugins/AutoLinkPlugin/LinkEditDialog.d.ts +1 -1
- package/package.json +3 -3
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js +0 -4
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js.map +0 -1
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js +0 -37
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js.map +0 -1
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js +0 -176
- package/dist/cjs/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js.map +0 -1
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js +0 -5
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue.js.map +0 -1
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js +0 -38
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/index.vue2.js.map +0 -1
- package/dist/esm/components/basic/doc-editor/core/plugins/LexicalAutoLinkPlugin/shared.js +0 -176
- 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":";;;;;;;;;;;;;;;;
|
|
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
|
|
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, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\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
|
|
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
|
-
|
|
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
|
|
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,
|
|
1
|
+
import { defineComponent, openBlock, createBlock, unref } from "vue";
|
|
2
2
|
import "../../core/index.js";
|
|
3
|
-
import _sfc_main$1 from "../../core/plugins/
|
|
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(),
|
|
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":[
|
|
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(() => [
|
package/dist/esm/components/basic/doc-editor/plugins/ToolbarPlugin/ContentStyleTool.vue.js.map
CHANGED
|
@@ -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\"
|
|
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 {
|
|
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
|
|
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":";;;;;;;;;;;;;;;;;;;;;AAwBA,UAAM,SAAS;AACT,UAAA,WAAW,IAAI,MAAM;AACrB,UAAA,YAAY,IAAY,MAAM;AAC9B,UAAA,UAAU,IAAY,MAAM;AAClC,UAAM,aAAa,IAAS,oBAAoB,CAAC,CAAC;AAC5C,UAAA,SAAS,IAAI,KAAK;AAClB,UAAA,WAAW,IAAI,KAAK;AACpB,UAAA,cAAc,IAAI,KAAK;AACvB,UAAA,kBAAkB,IAAI,KAAK;AAE3B,UAAA,cAAc,IAAI,KAAK;AACvB,UAAA,gBAAgB,IAAI,KAAK;AAG/B,UAAM,YAAY,IAAyB,CAAC,QAAO,UAAS,SAAQ,SAAS,CAAC;AAC9E,UAAM,aAAa,IAAI,UAAU,MAAM,CAAC,CAAC;AACnC,UAAA,WAAW,IAAI,KAAK;AACpB,UAAA,SAAS,IAAI,KAAK;AAClB,UAAA,YAAY,IAAI,EAAE;AAExB,mBAAe,aAAa;AAE1B,YAAM,SAAa,MAAM,kBAAkB,UAAU,KAAK;AAEvD,UAAA,OAAO,QAAO;AACf,eAAO,gBAAgB,qBAAqB,YAAY,MAAM,CAAC;AAAA,MAAA,OAE7D;AACK,eAAA,gBAAgB,qBAAqB,IAAI;AAAA,MAClD;AAAA,IACF;AAGA,aAAS,gBAAgB;AAEvB,YAAM,YAAY;AAEd,UAAA,kBAAkB,SAAS,GAAG;AAE1B,cAAA,aAAa,UAAU,OAAO,QAAQ;AAExC,YAAA,UAAU,WAAW,aAAa,SAC9B,aACA,oBAAoB,YAAY,CAAC,MAAM;AACjCA,gBAAAA,UAAS,EAAE;AACVA,iBAAAA,YAAW,QAAQ,oBAAoBA,OAAM;AAAA,QAAA,CACrD;AAGP,YAAI,YAAY,MAAK;AACnB,oBAAU,WAAW;QACvB;AAEA,YAAI,aAAa,OAAO,gBAAgB,QAAQ,OAAQ,CAAA;AAG7C,mBAAA,SAAS,yCAAY,MAAM,cAAmC;AAEtE,YAAA,WAAW,SAAU,SAAQ;AAAE,qBAAW,QAAS;AAAA,QAAA,WAC9C,WAAW,SAAU,OAAM;AAAE,qBAAW,QAAS;AAAA,QAAS;AAG3D,eAAA,QAAQ,UAAU,UAAU,MAAM;AAChC,iBAAA,QAAQ,UAAU,UAAU,QAAQ;AACjC,oBAAA,QAAQ,UAAU,UAAU,WAAW;AACnC,wBAAA,QAAQ,UAAU,UAAU,eAAe;AAC/C,oBAAA,QAAQ,UAAU,UAAU,WAAW;AACrC,sBAAA,QAAQ,UAAU,UAAU,aAAa;AAGvD,YAAI,KAAK,mCAAmC,WAAW,eAAe,OAAO;AAC7E,YAAI,KAAK,mCAAmC,WAAW,aAAa,MAAM;AAE1E,YAAG,IAAG;AACH,mBAAS,QAAQ,KAAK,MAAM,WAAW,EAAE,IAAI,cAAc,IAAE;AAAA,QAChE;AAEA,kBAAU,QAAQ,mCAAmC,WAAW,SAAS,MAAM;AAC/E,gBAAQ,QAAQ,mCAAmC,WAAW,oBAAoB,MAAM;AAC7E,mBAAA,QAAQ,oBAAoB,KAAK,CAAA,SAAM,KAAK,SAAO,EAAE,KAAK,oBAAoB,CAAC;AAE1F,iBAAS,QAAQ;AAGX,cAAA,OAAO,gBAAgB,SAAS;AAChC,cAAA,SAAS,KAAK;AACpB,eAAO,QAAQ,YAAY,MAAM,KAAK,YAAY,IAAI;AACtD,YAAG,OAAO,OAAM;AACJ,oBAAA,QAAQ,YAAY,MAAM,IAAI,OAAO,OAAO,IAAK,KAAkB;QAAO,OAElF;AACF,oBAAU,QAAQ;AAAA,QACpB;AAAA,MAAA,OAEE;AAEF,iBAAS,QAAQ;AAAA,MACnB;AAAA,IACF;AAGM,UAAA,kBAAkB,CAAC,MAAW,cAAiB;AACnD,eAAS,QAAQ,KAAK;AACtB,aAAO,OAAO,MAAM;AAClB,cAAM,YAAY;AAClB,YAAI,cAAc,MAAM;AACtB,0BAAgB,WAAW;AAAA,YACzB,CAAC,aAAa,WAAW,GAAE,KAAK;AAAA,UAAA,CACjC;AAAA,QACH;AAAA,MAAA,CACD;AAAA,IAAA;AAIG,UAAA,eAAe,CAAC,UAAY;AAChC,aAAO,OAAO,MAAM;AAClB,cAAM,YAAY;AAClB,YAAI,cAAc,MAAK;AACL,0BAAA,WAAW,EAAE,MAAA,CAAO;AAAA,QACtC;AAAA,MACF,GAAE,CAAE,CAAA;AAAA,IAAA;AAIA,UAAA,aAAa,CAAC,UAAY;AAC9B,aAAO,OAAO,MAAM;AAClB,cAAM,YAAY;AAClB,YAAI,cAAc,MAAK;AACrB,0BAAgB,WAAW,EAAE,oBAAmB,MAAO,CAAA;AAAA,QACzD;AAAA,MACF,GAAE,CAAE,CAAA;AAAA,IAAA;AAKN,cAAU,MAAM;AAEd,YAAM,0BAA0B;AAAA,QAC9B,OAAO,uBAAuB,CAAC,EAAE,kBAAkB;AACrC,sBAAA,KAAK,MAAM,cAAA,CAAe;AAAA,QAAA,CACvC;AAAA,MAAA;AAGS,kBAAA,MAAM,yBAAyB;AAAA,IAAA,CAC5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent, ref, onMounted, onUnmounted, resolveComponent, openBlock, createElementBlock, createVNode, withCtx, unref,
|
|
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
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
87
|
+
"iconClass": "Bottom",
|
|
88
|
+
"onClick": handleToBottom
|
|
71
89
|
}, null)]
|
|
72
90
|
})]);
|
|
73
91
|
}
|