@maketribe/ms-app 3.2.45 → 3.2.46

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 (38) hide show
  1. package/dist/cjs/components/basic/lexical-editor/assets/doc-editor.css.js +1 -1
  2. package/dist/cjs/components/basic/lexical-editor/assets/doc-editor.css.js.map +1 -1
  3. package/dist/cjs/components/basic/lexical-editor/utils/html.js +1 -19
  4. package/dist/cjs/components/basic/lexical-editor/utils/html.js.map +1 -1
  5. package/dist/cjs/components/basic/lexical-editor/utils/module.js.map +1 -1
  6. package/dist/cjs/modules/cms/cms-settings.js +5 -1
  7. package/dist/cjs/modules/cms/cms-settings.js.map +1 -1
  8. package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js +40 -324
  9. package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js.map +1 -1
  10. package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner.vue.js +362 -0
  11. package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner.vue.js.map +1 -0
  12. package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner.vue2.js +4 -0
  13. package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner.vue2.js.map +1 -0
  14. package/dist/cjs/modules/cms/pages/cms-settigns/index.vue2.js +38 -15
  15. package/dist/cjs/modules/cms/pages/cms-settigns/index.vue2.js.map +1 -1
  16. package/dist/esm/components/basic/lexical-editor/assets/doc-editor.css.js +1 -1
  17. package/dist/esm/components/basic/lexical-editor/assets/doc-editor.css.js.map +1 -1
  18. package/dist/esm/components/basic/lexical-editor/utils/html.js +2 -20
  19. package/dist/esm/components/basic/lexical-editor/utils/html.js.map +1 -1
  20. package/dist/esm/components/basic/lexical-editor/utils/module.js.map +1 -1
  21. package/dist/esm/modules/cms/cms-settings.js +5 -1
  22. package/dist/esm/modules/cms/cms-settings.js.map +1 -1
  23. package/dist/esm/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js +41 -325
  24. package/dist/esm/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js.map +1 -1
  25. package/dist/esm/modules/cms/pages/cms-contents/components/part-banner.vue.js +363 -0
  26. package/dist/esm/modules/cms/pages/cms-contents/components/part-banner.vue.js.map +1 -0
  27. package/dist/esm/modules/cms/pages/cms-contents/components/part-banner.vue2.js +5 -0
  28. package/dist/esm/modules/cms/pages/cms-contents/components/part-banner.vue2.js.map +1 -0
  29. package/dist/esm/modules/cms/pages/cms-settigns/index.vue2.js +38 -15
  30. package/dist/esm/modules/cms/pages/cms-settigns/index.vue2.js.map +1 -1
  31. package/dist/style/index.css +1 -1
  32. package/dist/style/modules/cms/index.css +1 -1
  33. package/dist/style/modules/cms/pages/cms-contents/components/mk-cms-part-banner.css +1 -1
  34. package/dist/style/modules/cms/pages/cms-contents/index.css +1 -1
  35. package/dist/style/src/modules/cms/pages/cms-contents/components/mk-cms-part-banner.scss +1 -0
  36. package/dist/types/modules/cms/cms-settings.d.ts +5 -1
  37. package/dist/types/modules/cms/pages/cms-contents/components/part-banner.vue.d.ts +32 -0
  38. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
- const DocEditorCss = ' \r\n.mk-doc__embedBlock {\r\n position: relative;\r\n z-index: 1;\r\n padding: 1px;\r\n cursor: pointer;\r\n}\r\n\r\n.mk-doc__embedBlock >*{ pointer-events: none; }\r\n\r\n/* 清除浮动 */\r\n.mk-doc-editor-stage::after{\r\n content: "";\r\n display: block;\r\n clear: both;\r\n width: 0;\r\n height: 0;\r\n font-size: 0;\r\n}\r\n/* 缩进 */\r\n.mk-doc-editor-stage * {\r\n --lexical-indent-base-value:2em\r\n}\r\n/* 光标样式 */\r\n.mk-doc-editor-stage *:has(>span):not(a) > span:last-child::after,\r\n.mk-doc__empty-mark::before,\r\n.mk-doc__br-brfore-mark::after{ \r\n content: "↩︎";\r\n color: #ccc;\r\n margin-left: 4px;\r\n cursor: text;\r\n user-select: none;\r\n pointer-events: none;\r\n position: absolute;\r\n font-size: 12px;\r\n height: 0;\r\n width: 1px; \r\n vertical-align: middle;\r\n}\r\n\r\n/* placeholder 模式 */\r\n.mk-doc-editor-stage.placeholder *::after,\r\n.mk-doc-editor-stage.placeholder *::before{ display: none;}\r\n\r\n/* 选中样式 */\r\n.mk-doc__node-selection {\r\n outline: 2px solid rgb(60, 132, 244);\r\n}\r\n/* hover 的标识线条 */\r\n.mk-doc-editor-stage div:not([data-lexical-decorator]>*):hover,\r\n.mk-doc-editor-stage section:not([data-lexical-decorator]>*):hover,\r\n.mk-doc-editor-stage main:not([data-lexical-decorator]>*):hover,\r\n.mk-doc-editor-stage header:not([data-lexical-decorator]):hover,\r\n.mk-doc-editor-stage p:not([data-lexical-decorator]>*):hover{\r\n outline: 1px solid #d7e6ff;\r\n}\r\n.mk-doc__image-text-warp p:hover,\r\n.mk-doc__image-text-warp section:hover,\r\n.mk-doc__image-text-warp div:hover,\r\n[data-lexical-decorator]:hover {\r\n outline: none !important;\r\n}\r\n.mk-doc-editor-stage [data-lexical-decorator]{\r\n user-select: none;\r\n white-space: initial;\r\n word-break: initial;\r\n cursor: pointer;\r\n}\r\n.mk-doc-editor-stage p>img ~ span[data-lexical-text]{\r\n display: inline-block;\r\n}\r\n.mk-doc-editor-stage [data-lexical-decorator]>* {\r\n pointer-events: none;\r\n}\r\n';
2
+ const DocEditorCss = ' \r\n.mk-doc__embedBlock {\r\n position: relative;\r\n z-index: 1;\r\n padding: 1px;\r\n cursor: pointer;\r\n}\r\n\r\n.mk-doc__embedBlock >*{ pointer-events: none; }\r\n\r\n/* 清除浮动 */\r\n.mk-doc-editor-stage::after{\r\n content: "";\r\n display: block;\r\n clear: both;\r\n width: 0;\r\n height: 0;\r\n font-size: 0;\r\n}\r\n/* 缩进 */\r\n.mk-doc-editor-stage * {\r\n --lexical-indent-base-value:2em\r\n}\r\n/* 光标样式 */\r\n.mk-doc-editor-stage *:has(>span):not(a) > span:last-child::after,\r\n.mk-doc__empty-mark::before,\r\n.mk-doc__br-brfore-mark::after{ \r\n content: "↩︎";\r\n color: #ccc;\r\n margin-left: 4px;\r\n cursor: text;\r\n user-select: none;\r\n pointer-events: none;\r\n position: absolute;\r\n font-size: 12px;\r\n height: 0;\r\n width: 1px; \r\n vertical-align: middle;\r\n}\r\n\r\n/* placeholder 模式 */\r\n.mk-doc-editor-stage.placeholder *::after,\r\n.mk-doc-editor-stage.placeholder *::before{ display: none;}\r\n\r\n/* 选中样式 */\r\n.mk-doc__node-selection {\r\n outline: 2px solid rgb(60, 132, 244);\r\n}\r\n/* hover 的标识线条 */\r\n.mk-doc-editor-stage div:not([data-lexical-decorator]>*):hover,\r\n.mk-doc-editor-stage section:not([data-lexical-decorator]>*):hover,\r\n.mk-doc-editor-stage main:not([data-lexical-decorator]>*):hover,\r\n.mk-doc-editor-stage header:not([data-lexical-decorator]):hover,\r\n.mk-doc-editor-stage p:not([data-lexical-decorator]>*):hover{\r\n outline: 1px solid #d7e6ff;\r\n}\r\n.mk-doc__image-text-warp p:hover,\r\n.mk-doc__image-text-warp section:hover,\r\n.mk-doc__image-text-warp div:hover,\r\n[data-lexical-decorator]:hover {\r\n outline: none !important;\r\n}\r\n.mk-doc-editor-stage [data-lexical-decorator]{\r\n user-select: none;\r\n white-space: initial;\r\n word-break: initial;\r\n cursor: pointer;\r\n}\r\n.mk-doc-editor-stage [data-lexical-decorator]>* {\r\n pointer-events: none;\r\n}\r\n';
3
3
  module.exports = DocEditorCss;
4
4
  //# sourceMappingURL=doc-editor.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doc-editor.css.js","sources":["../../../../../../src/components/basic/lexical-editor/assets/doc-editor.css?raw"],"sourcesContent":["export default \" \\r\\n.mk-doc__embedBlock {\\r\\n position: relative;\\r\\n z-index: 1;\\r\\n padding: 1px;\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n.mk-doc__embedBlock >*{ pointer-events: none; }\\r\\n\\r\\n/* 清除浮动 */\\r\\n.mk-doc-editor-stage::after{\\r\\n content: \\\"\\\";\\r\\n display: block;\\r\\n clear: both;\\r\\n width: 0;\\r\\n height: 0;\\r\\n font-size: 0;\\r\\n}\\r\\n/* 缩进 */\\r\\n.mk-doc-editor-stage * {\\r\\n --lexical-indent-base-value:2em\\r\\n}\\r\\n/* 光标样式 */\\r\\n.mk-doc-editor-stage *:has(>span):not(a) > span:last-child::after,\\r\\n.mk-doc__empty-mark::before,\\r\\n.mk-doc__br-brfore-mark::after{ \\r\\n content: \\\"↩︎\\\";\\r\\n color: #ccc;\\r\\n margin-left: 4px;\\r\\n cursor: text;\\r\\n user-select: none;\\r\\n pointer-events: none;\\r\\n position: absolute;\\r\\n font-size: 12px;\\r\\n height: 0;\\r\\n width: 1px; \\r\\n vertical-align: middle;\\r\\n}\\r\\n\\r\\n/* placeholder 模式 */\\r\\n.mk-doc-editor-stage.placeholder *::after,\\r\\n.mk-doc-editor-stage.placeholder *::before{ display: none;}\\r\\n\\r\\n/* 选中样式 */\\r\\n.mk-doc__node-selection {\\r\\n outline: 2px solid rgb(60, 132, 244);\\r\\n}\\r\\n/* hover 的标识线条 */\\r\\n.mk-doc-editor-stage div:not([data-lexical-decorator]>*):hover,\\r\\n.mk-doc-editor-stage section:not([data-lexical-decorator]>*):hover,\\r\\n.mk-doc-editor-stage main:not([data-lexical-decorator]>*):hover,\\r\\n.mk-doc-editor-stage header:not([data-lexical-decorator]):hover,\\r\\n.mk-doc-editor-stage p:not([data-lexical-decorator]>*):hover{\\r\\n outline: 1px solid #d7e6ff;\\r\\n}\\r\\n.mk-doc__image-text-warp p:hover,\\r\\n.mk-doc__image-text-warp section:hover,\\r\\n.mk-doc__image-text-warp div:hover,\\r\\n[data-lexical-decorator]:hover {\\r\\n outline: none !important;\\r\\n}\\r\\n.mk-doc-editor-stage [data-lexical-decorator]{\\r\\n user-select: none;\\r\\n white-space: initial;\\r\\n word-break: initial;\\r\\n cursor: pointer;\\r\\n}\\r\\n.mk-doc-editor-stage p>img ~ span[data-lexical-text]{\\r\\n display: inline-block;\\r\\n}\\r\\n.mk-doc-editor-stage [data-lexical-decorator]>* {\\r\\n pointer-events: none;\\r\\n}\\r\\n\""],"names":[],"mappings":";AAAA,MAAe,eAAA;;"}
1
+ {"version":3,"file":"doc-editor.css.js","sources":["../../../../../../src/components/basic/lexical-editor/assets/doc-editor.css?raw"],"sourcesContent":["export default \" \\r\\n.mk-doc__embedBlock {\\r\\n position: relative;\\r\\n z-index: 1;\\r\\n padding: 1px;\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n.mk-doc__embedBlock >*{ pointer-events: none; }\\r\\n\\r\\n/* 清除浮动 */\\r\\n.mk-doc-editor-stage::after{\\r\\n content: \\\"\\\";\\r\\n display: block;\\r\\n clear: both;\\r\\n width: 0;\\r\\n height: 0;\\r\\n font-size: 0;\\r\\n}\\r\\n/* 缩进 */\\r\\n.mk-doc-editor-stage * {\\r\\n --lexical-indent-base-value:2em\\r\\n}\\r\\n/* 光标样式 */\\r\\n.mk-doc-editor-stage *:has(>span):not(a) > span:last-child::after,\\r\\n.mk-doc__empty-mark::before,\\r\\n.mk-doc__br-brfore-mark::after{ \\r\\n content: \\\"↩︎\\\";\\r\\n color: #ccc;\\r\\n margin-left: 4px;\\r\\n cursor: text;\\r\\n user-select: none;\\r\\n pointer-events: none;\\r\\n position: absolute;\\r\\n font-size: 12px;\\r\\n height: 0;\\r\\n width: 1px; \\r\\n vertical-align: middle;\\r\\n}\\r\\n\\r\\n/* placeholder 模式 */\\r\\n.mk-doc-editor-stage.placeholder *::after,\\r\\n.mk-doc-editor-stage.placeholder *::before{ display: none;}\\r\\n\\r\\n/* 选中样式 */\\r\\n.mk-doc__node-selection {\\r\\n outline: 2px solid rgb(60, 132, 244);\\r\\n}\\r\\n/* hover 的标识线条 */\\r\\n.mk-doc-editor-stage div:not([data-lexical-decorator]>*):hover,\\r\\n.mk-doc-editor-stage section:not([data-lexical-decorator]>*):hover,\\r\\n.mk-doc-editor-stage main:not([data-lexical-decorator]>*):hover,\\r\\n.mk-doc-editor-stage header:not([data-lexical-decorator]):hover,\\r\\n.mk-doc-editor-stage p:not([data-lexical-decorator]>*):hover{\\r\\n outline: 1px solid #d7e6ff;\\r\\n}\\r\\n.mk-doc__image-text-warp p:hover,\\r\\n.mk-doc__image-text-warp section:hover,\\r\\n.mk-doc__image-text-warp div:hover,\\r\\n[data-lexical-decorator]:hover {\\r\\n outline: none !important;\\r\\n}\\r\\n.mk-doc-editor-stage [data-lexical-decorator]{\\r\\n user-select: none;\\r\\n white-space: initial;\\r\\n word-break: initial;\\r\\n cursor: pointer;\\r\\n}\\r\\n.mk-doc-editor-stage [data-lexical-decorator]>* {\\r\\n pointer-events: none;\\r\\n}\\r\\n\""],"names":[],"mappings":";AAAA,MAAe,eAAA;;"}
@@ -220,26 +220,8 @@ const generateHtmlFromNodes = function $generateHtmlFromNodes(editor, selection2
220
220
  const topLevelNode = topLevelChildren[i];
221
221
  appendNodesToHTML(editor, topLevelNode, container, selection2);
222
222
  }
223
- return prettifyHTMLElement(container, 0).innerHTML.trim();
224
- };
225
- const prettifyHTMLElement = function(node, level) {
226
- const indentBefore = Array.from({ length: level++ + 1 }).join(" ");
227
- const indentAfter = Array.from({ length: level - 1 }).join(" ");
228
- let textNode;
229
- for (let i = 0; i < node.children.length; i++) {
230
- textNode = document.createTextNode(`
231
- ${indentBefore}`);
232
- node.insertBefore(textNode, node.children[i]);
233
- prettifyHTMLElement(node.children[i], level);
234
- if (node.lastElementChild === node.children[i]) {
235
- textNode = document.createTextNode(`
236
- ${indentAfter}`);
237
- node.appendChild(textNode);
238
- }
239
- }
240
- return node;
223
+ return container.innerHTML.trim();
241
224
  };
242
225
  exports.generateHtmlFromNodes = generateHtmlFromNodes;
243
226
  exports.generateNodesFromHtml = generateNodesFromHtml;
244
- exports.prettifyHTMLElement = prettifyHTMLElement;
245
227
  //# sourceMappingURL=html.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sources":["../../../../../../src/components/basic/lexical-editor/utils/html.ts"],"sourcesContent":["import { \r\n ArtificialNode__DO_NOT_USE,\r\n $createLineBreakNode,\r\n LexicalEditor, \r\n LexicalNode,\r\n ElementNode,\r\n $isRootOrShadowRoot,\r\n $isBlockElementNode,\r\n ElementFormatType,\r\n $createParagraphNode,\r\n isInlineDomNode,\r\n $isElementNode,\r\n $getRoot,\r\n BaseSelection,\r\n $cloneWithProperties,\r\n $isTextNode,\r\n NodeSelection,\r\n RangeSelection,\r\n isHTMLElement\r\n} from \"lexical\";\r\n\r\nimport { isBlockDomNode } from \"@lexical/utils\"\r\nimport { $sliceSelectedTextNodeContent } from \"@lexical/selection\";\r\nimport { AttrMarkName } from \"../nodes\"\r\n\r\nconst domParser = new DOMParser()\r\n\r\n/**\r\n* 展开不确定的节点\r\n* @param allArtificialNodes \r\n*/\r\nconst unwrapArtificalNodes = function $unwrapArtificalNodes(allArtificialNodes:ElementNode[]|LexicalNode[]) {\r\n\r\n for (const node of allArtificialNodes) {\r\n\r\n if (node.getNextSibling() instanceof ArtificialNode__DO_NOT_USE) {\r\n node.insertAfter($createLineBreakNode());\r\n }\r\n }\r\n // Replace artificial node with it's children\r\n for (const node of allArtificialNodes) {\r\n\r\n // 元素的话\r\n if($isElementNode(node)){\r\n\r\n const children = node.getChildren();\r\n\r\n for (const child of children) {\r\n \r\n node.insertBefore(child);\r\n \r\n }\r\n \r\n node.remove();\r\n }\r\n }\r\n}\r\n\r\n// 获取节点转换器 就是 importDOM 定义的东西\r\nconst getConversionFunction = function(domNode:HTMLElement, editor:LexicalEditor) {\r\n\r\n const { nodeName } = domNode;\r\n\r\n const cachedConversions = editor._htmlConversions.get(nodeName.toLowerCase());\r\n\r\n let currentConversion = null;\r\n\r\n if (cachedConversions !== undefined) {\r\n\r\n for (const cachedConversion of cachedConversions) {\r\n\r\n const domConversion = cachedConversion(domNode);\r\n\r\n // 一直找到优先级最高的节点转换器\r\n if (domConversion !== null && (currentConversion === null || (currentConversion.priority || 0) < (domConversion.priority || 0))) {\r\n \r\n currentConversion = domConversion;\r\n }\r\n }\r\n\r\n }\r\n\r\n return currentConversion !== null ? currentConversion.conversion : null;\r\n}\r\n\r\n/**\r\n* 给内联节点包一个块节点\r\n* @param domNode \r\n* @param nodes \r\n* @param createWrapperFn \r\n* @returns \r\n*/\r\nconst wrapContinuousInlines = function (domNode : HTMLElement, nodes:LexicalNode[], createWrapperFn:Function) {\r\n\r\n const textAlign = domNode.style.textAlign;\r\n const out = [];\r\n let continuousInlines = [];\r\n // wrap contiguous inline child nodes in para\r\n for (let i = 0; i < nodes.length; i++) {\r\n\r\n const node = nodes[i];\r\n\r\n if ($isBlockElementNode(node)) {\r\n\r\n if (textAlign && !node.getFormat()) {\r\n node.setFormat(textAlign as ElementFormatType);\r\n }\r\n\r\n out.push(node);\r\n } \r\n else {\r\n\r\n continuousInlines.push(node);\r\n\r\n if (i === nodes.length - 1 || i < nodes.length - 1 && $isBlockElementNode(nodes[i + 1])) {\r\n const wrapper = createWrapperFn();\r\n wrapper.setFormat(textAlign);\r\n wrapper.append(...continuousInlines);\r\n out.push(wrapper);\r\n continuousInlines = [];\r\n }\r\n }\r\n }\r\n return out;\r\n}\r\n\r\nconst isDomNodeBetweenTwoInlineNodes = function (node:HTMLElement) {\r\n\r\n if (node.nextSibling == null || node.previousSibling == null) {\r\n return false;\r\n }\r\n\r\n return isInlineDomNode(node.nextSibling) && isInlineDomNode(node.previousSibling);\r\n}\r\n\r\n\r\n/**\r\n* 根据元素节点创建 LexicalNode\r\n* @param node \r\n* @param editor \r\n* @param allArtificialNodes \r\n* @param hasBlockAncestorLexicalNode \r\n* @param forChildMap \r\n* @param parentLexicalNode \r\n* @returns \r\n*/\r\nconst createNodesFromElement = function (node:HTMLElement, editor:LexicalEditor, allArtificialNodes:ElementNode[], hasBlockAncestorLexicalNode:boolean, forChildMap = new Map(), parentLexicalNode?:LexicalNode) {\r\n\r\n\r\n let lexicalNodes:LexicalNode[] = [];\r\n\r\n let currentLexicalNode = null;\r\n \r\n \r\n // if(node.getAttribute(\"module-name\")){\r\n // console.log(node,mname)\r\n // }\r\n const transformFunction = getConversionFunction(node, editor);\r\n\r\n const transformOutput = transformFunction ? transformFunction(node) : null;\r\n \r\n let postTransform = null;\r\n\r\n if (transformOutput !== null) {\r\n\r\n postTransform = transformOutput.after;\r\n\r\n const transformNodes = transformOutput.node;\r\n\r\n currentLexicalNode = Array.isArray(transformNodes) ? transformNodes[transformNodes.length - 1] : transformNodes;\r\n\r\n if (currentLexicalNode !== null) {\r\n\r\n for (const [, forChildFunction] of forChildMap) {\r\n\r\n currentLexicalNode = forChildFunction(currentLexicalNode, parentLexicalNode);\r\n\r\n if (!currentLexicalNode) { break; }\r\n }\r\n\r\n if (currentLexicalNode) {\r\n lexicalNodes.push(...(Array.isArray(transformNodes) ? transformNodes : [currentLexicalNode]));\r\n }\r\n }\r\n\r\n if (transformOutput.forChild != null) {\r\n forChildMap.set(node.nodeName, transformOutput.forChild);\r\n }\r\n }\r\n\r\n // If the DOM node doesn't have a transformer, we don't know what\r\n // to do with it but we still need to process any childNodes.\r\n // 找到模块就不继续往下找了\r\n const children = isBlockDomNode(node) && node.hasAttribute(AttrMarkName) ? [] : node.childNodes;\r\n\r\n let childLexicalNodes = [];\r\n\r\n const hasBlockAncestorLexicalNodeForChildren = \r\n currentLexicalNode != null && \r\n (\r\n $isRootOrShadowRoot(currentLexicalNode) ? false \r\n : (currentLexicalNode != null && $isBlockElementNode(currentLexicalNode) || hasBlockAncestorLexicalNode)\r\n );\r\n \r\n for (let i = 0; i < children.length; i++) {\r\n childLexicalNodes.push(...createNodesFromElement(children[i] as HTMLElement, editor, allArtificialNodes, hasBlockAncestorLexicalNodeForChildren, new Map(forChildMap), currentLexicalNode));\r\n }\r\n\r\n if (postTransform != null) {\r\n childLexicalNodes = postTransform(childLexicalNodes);\r\n }\r\n\r\n if (isBlockDomNode(node)) {\r\n \r\n if (!hasBlockAncestorLexicalNodeForChildren) {\r\n childLexicalNodes = wrapContinuousInlines(node, childLexicalNodes, $createParagraphNode);\r\n } \r\n else {\r\n\r\n childLexicalNodes = wrapContinuousInlines(node, childLexicalNodes, () => {\r\n\r\n const artificialNode = new ArtificialNode__DO_NOT_USE();\r\n\r\n allArtificialNodes.push(artificialNode);\r\n\r\n return artificialNode;\r\n });\r\n }\r\n }\r\n\r\n if (currentLexicalNode == null) {\r\n\r\n if (childLexicalNodes.length > 0) {\r\n // If it hasn't been converted to a LexicalNode, we hoist its children\r\n // up to the same level as it.\r\n lexicalNodes = lexicalNodes.concat(childLexicalNodes);\r\n } \r\n else {\r\n if (isBlockDomNode(node) && isDomNodeBetweenTwoInlineNodes(node)) {\r\n // Empty block dom node that hasnt been converted, we replace it with a linebreak if its between inline nodes\r\n lexicalNodes = lexicalNodes.concat($createLineBreakNode());\r\n }\r\n }\r\n } \r\n else if ($isElementNode(currentLexicalNode)) {\r\n // If the current node is a ElementNode after conversion,\r\n // we can append all the children to it.\r\n currentLexicalNode.append(...childLexicalNodes);\r\n }\r\n return lexicalNodes;\r\n}\r\n\r\n\r\nexport const generateNodesFromHtml = function $generateNodesFromDOM(editor:LexicalEditor, html:string) {\r\n\r\n try {\r\n const doc = domParser.parseFromString(html,\"text/html\")\r\n\r\n const elements = doc.body.childNodes;\r\n \r\n let lexicalNodes:LexicalNode[] = [];\r\n \r\n const allArtificialNodes:ElementNode[] = [];\r\n \r\n for (let i = 0; i < elements.length; i++) {\r\n \r\n let element = elements[i] as HTMLElement; \r\n \r\n // 解决根不是块级元素的问题 忽略 换行符\r\n if(!isBlockDomNode(element) && element.nodeValue != \"\\n\" && element.nodeValue != \"\\r\\n\"){\r\n \r\n const p = document.createElement(\"p\")\r\n \r\n if(element instanceof Text){\r\n // .replace(/[\\n|\\r\\n]+/g,\"<br />\")\r\n p.textContent = element.data;\r\n \r\n }\r\n else{\r\n p.innerHTML = element.outerHTML ;\r\n }\r\n \r\n element = p;\r\n \r\n }\r\n \r\n const lexicalNode = createNodesFromElement(element, editor, allArtificialNodes,false);\r\n \r\n if (lexicalNode !== null) {\r\n lexicalNodes = lexicalNodes.concat(lexicalNode);\r\n }\r\n } \r\n unwrapArtificalNodes(allArtificialNodes);\r\n return lexicalNodes;\r\n } catch (error) {\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * \r\n * @param editor \r\n * @param currentNode \r\n * @param parentElement \r\n * @param selection \r\n * @returns \r\n */\r\nconst appendNodesToHTML = function (editor:LexicalEditor, currentNode:LexicalNode, parentElement:HTMLElement|DocumentFragment, selection:BaseSelection|NodeSelection|RangeSelection|null = null) {\r\n\r\n let shouldInclude = selection !== null ? currentNode.isSelected(selection) : true;\r\n\r\n const shouldExclude = $isElementNode(currentNode) && currentNode.excludeFromCopy('html');\r\n\r\n let target = currentNode;\r\n\r\n if (selection !== null) {\r\n\r\n let clone = $cloneWithProperties(currentNode);\r\n\r\n clone = $isTextNode(clone) && selection !== null ? $sliceSelectedTextNodeContent(selection, clone) : clone;\r\n\r\n target = clone;\r\n }\r\n\r\n const children = $isElementNode(target) ? target.getChildren() : [];\r\n const registeredNode = editor._nodes.get(target.getType());\r\n\r\n let exportOutput;\r\n\r\n // Use HTMLConfig overrides, if available.\r\n if (registeredNode && registeredNode.exportDOM !== undefined) {\r\n exportOutput = registeredNode.exportDOM(editor, target);\r\n } \r\n else {\r\n exportOutput = target.exportDOM(editor);\r\n }\r\n\r\n const { element, after } = exportOutput;\r\n\r\n if (!element) {\r\n return false;\r\n }\r\n\r\n const fragment = document.createDocumentFragment();\r\n\r\n for (let i = 0; i < children.length; i++) {\r\n\r\n const childNode = children[i];\r\n const shouldIncludeChild = appendNodesToHTML(editor, childNode, fragment, selection);\r\n\r\n if (!shouldInclude && $isElementNode(currentNode) && shouldIncludeChild && currentNode.extractWithChild(childNode, selection, 'html')) {\r\n shouldInclude = true;\r\n }\r\n }\r\n\r\n if (shouldInclude && !shouldExclude) {\r\n\r\n if (isHTMLElement(element)) { element.append(fragment); }\r\n\r\n parentElement.append(element);\r\n\r\n if (after) {\r\n\r\n const newElement = after.call(target, element);\r\n\r\n if (newElement) { element.replaceWith(newElement); }\r\n }\r\n\r\n } \r\n else {\r\n parentElement.append(fragment);\r\n }\r\n\r\n return shouldInclude;\r\n}\r\n\r\n/**\r\n * \r\n * @param editor \r\n * @param selection \r\n * @returns \r\n */\r\nexport const generateHtmlFromNodes = function $generateHtmlFromNodes(editor:LexicalEditor, selection?:BaseSelection) {\r\n\r\n // && typeof global.window === 'undefined'\r\n if (typeof document === 'undefined' || typeof window === 'undefined') {\r\n throw new Error('To use $generateHtmlFromNodes in headless mode please initialize a headless browser implementation such as JSDom before calling this function.');\r\n }\r\n\r\n const container = document.createElement('div');\r\n const root = $getRoot();\r\n const topLevelChildren = root.getChildren();\r\n\r\n for (let i = 0; i < topLevelChildren.length; i++) {\r\n\r\n const topLevelNode = topLevelChildren[i];\r\n\r\n appendNodesToHTML(editor, topLevelNode, container, selection);\r\n\r\n }\r\n\r\n return prettifyHTMLElement(container,0).innerHTML.trim();\r\n}\r\n\r\n/**\r\n * 美化html element\r\n * @param node \r\n * @param level \r\n * @returns \r\n */\r\nexport const prettifyHTMLElement = function (node: Element, level: number) {\r\n const indentBefore = Array.from({ length: level++ + 1 }).join(' ')\r\n const indentAfter = Array.from({ length: level - 1 }).join(' ')\r\n let textNode\r\n\r\n for (let i = 0; i < node.children.length; i++) {\r\n textNode = document.createTextNode(`\\n${indentBefore}`)\r\n node.insertBefore(textNode, node.children[i])\r\n prettifyHTMLElement(node.children[i], level)\r\n if (node.lastElementChild === node.children[i]) {\r\n textNode = document.createTextNode(`\\n${indentAfter}`)\r\n node.appendChild(textNode)\r\n }\r\n }\r\n return node\r\n}\r\n\r\n\r\n/**\r\n * 美化 html\r\n * @param str \r\n * @returns \r\n */\r\nexport const prettifyHTML = function (str: string) {\r\n const div = document.createElement('div')\r\n div.innerHTML = str.trim()\r\n return prettifyHTMLElement(div, 0).innerHTML.trim()\r\n}\r\n\r\n"],"names":["ArtificialNode__DO_NOT_USE","$createLineBreakNode","$isElementNode","$isBlockElementNode","isInlineDomNode","isBlockDomNode","AttrMarkName","$isRootOrShadowRoot","$createParagraphNode","selection","$cloneWithProperties","$isTextNode","$sliceSelectedTextNodeContent","isHTMLElement","$getRoot"],"mappings":"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"}
1
+ {"version":3,"file":"html.js","sources":["../../../../../../src/components/basic/lexical-editor/utils/html.ts"],"sourcesContent":["import { \r\n ArtificialNode__DO_NOT_USE,\r\n $createLineBreakNode,\r\n LexicalEditor, \r\n LexicalNode,\r\n ElementNode,\r\n $isRootOrShadowRoot,\r\n $isBlockElementNode,\r\n ElementFormatType,\r\n $createParagraphNode,\r\n isInlineDomNode,\r\n $isElementNode,\r\n $getRoot,\r\n BaseSelection,\r\n $cloneWithProperties,\r\n $isTextNode,\r\n NodeSelection,\r\n RangeSelection,\r\n isHTMLElement\r\n} from \"lexical\";\r\n\r\nimport { isBlockDomNode } from \"@lexical/utils\"\r\nimport { $sliceSelectedTextNodeContent } from \"@lexical/selection\";\r\nimport { AttrMarkName } from \"../nodes\"\r\n\r\nconst domParser = new DOMParser()\r\n\r\n/**\r\n* 展开不确定的节点\r\n* @param allArtificialNodes \r\n*/\r\nconst unwrapArtificalNodes = function $unwrapArtificalNodes(allArtificialNodes:ElementNode[]|LexicalNode[]) {\r\n\r\n for (const node of allArtificialNodes) {\r\n\r\n if (node.getNextSibling() instanceof ArtificialNode__DO_NOT_USE) {\r\n node.insertAfter($createLineBreakNode());\r\n }\r\n }\r\n // Replace artificial node with it's children\r\n for (const node of allArtificialNodes) {\r\n\r\n // 元素的话\r\n if($isElementNode(node)){\r\n\r\n const children = node.getChildren();\r\n\r\n for (const child of children) {\r\n \r\n node.insertBefore(child);\r\n \r\n }\r\n \r\n node.remove();\r\n }\r\n }\r\n}\r\n\r\n// 获取节点转换器 就是 importDOM 定义的东西\r\nconst getConversionFunction = function(domNode:HTMLElement, editor:LexicalEditor) {\r\n\r\n const { nodeName } = domNode;\r\n\r\n const cachedConversions = editor._htmlConversions.get(nodeName.toLowerCase());\r\n\r\n let currentConversion = null;\r\n\r\n if (cachedConversions !== undefined) {\r\n\r\n for (const cachedConversion of cachedConversions) {\r\n\r\n const domConversion = cachedConversion(domNode);\r\n\r\n // 一直找到优先级最高的节点转换器\r\n if (domConversion !== null && (currentConversion === null || (currentConversion.priority || 0) < (domConversion.priority || 0))) {\r\n \r\n currentConversion = domConversion;\r\n }\r\n }\r\n\r\n }\r\n\r\n return currentConversion !== null ? currentConversion.conversion : null;\r\n}\r\n\r\n/**\r\n* 给内联节点包一个块节点\r\n* @param domNode \r\n* @param nodes \r\n* @param createWrapperFn \r\n* @returns \r\n*/\r\nconst wrapContinuousInlines = function (domNode : HTMLElement, nodes:LexicalNode[], createWrapperFn:Function) {\r\n\r\n const textAlign = domNode.style.textAlign;\r\n const out = [];\r\n let continuousInlines = [];\r\n // wrap contiguous inline child nodes in para\r\n for (let i = 0; i < nodes.length; i++) {\r\n\r\n const node = nodes[i];\r\n\r\n if ($isBlockElementNode(node)) {\r\n\r\n if (textAlign && !node.getFormat()) {\r\n node.setFormat(textAlign as ElementFormatType);\r\n }\r\n\r\n out.push(node);\r\n } \r\n else {\r\n\r\n continuousInlines.push(node);\r\n\r\n if (i === nodes.length - 1 || i < nodes.length - 1 && $isBlockElementNode(nodes[i + 1])) {\r\n const wrapper = createWrapperFn();\r\n wrapper.setFormat(textAlign);\r\n wrapper.append(...continuousInlines);\r\n out.push(wrapper);\r\n continuousInlines = [];\r\n }\r\n }\r\n }\r\n return out;\r\n}\r\n\r\nconst isDomNodeBetweenTwoInlineNodes = function (node:HTMLElement) {\r\n\r\n if (node.nextSibling == null || node.previousSibling == null) {\r\n return false;\r\n }\r\n\r\n return isInlineDomNode(node.nextSibling) && isInlineDomNode(node.previousSibling);\r\n}\r\n\r\n\r\n/**\r\n* 根据元素节点创建 LexicalNode\r\n* @param node \r\n* @param editor \r\n* @param allArtificialNodes \r\n* @param hasBlockAncestorLexicalNode \r\n* @param forChildMap \r\n* @param parentLexicalNode \r\n* @returns \r\n*/\r\nconst createNodesFromElement = function (node:HTMLElement, editor:LexicalEditor, allArtificialNodes:ElementNode[], hasBlockAncestorLexicalNode:boolean, forChildMap = new Map(), parentLexicalNode?:LexicalNode) {\r\n\r\n\r\n let lexicalNodes:LexicalNode[] = [];\r\n\r\n let currentLexicalNode = null;\r\n \r\n \r\n // if(node.getAttribute(\"module-name\")){\r\n // console.log(node,mname)\r\n // }\r\n const transformFunction = getConversionFunction(node, editor);\r\n\r\n const transformOutput = transformFunction ? transformFunction(node) : null;\r\n \r\n let postTransform = null;\r\n\r\n if (transformOutput !== null) {\r\n\r\n postTransform = transformOutput.after;\r\n\r\n const transformNodes = transformOutput.node;\r\n\r\n currentLexicalNode = Array.isArray(transformNodes) ? transformNodes[transformNodes.length - 1] : transformNodes;\r\n\r\n if (currentLexicalNode !== null) {\r\n\r\n for (const [, forChildFunction] of forChildMap) {\r\n\r\n currentLexicalNode = forChildFunction(currentLexicalNode, parentLexicalNode);\r\n\r\n if (!currentLexicalNode) { break; }\r\n }\r\n\r\n if (currentLexicalNode) {\r\n lexicalNodes.push(...(Array.isArray(transformNodes) ? transformNodes : [currentLexicalNode]));\r\n }\r\n }\r\n\r\n if (transformOutput.forChild != null) {\r\n forChildMap.set(node.nodeName, transformOutput.forChild);\r\n }\r\n }\r\n\r\n // If the DOM node doesn't have a transformer, we don't know what\r\n // to do with it but we still need to process any childNodes.\r\n // 找到模块就不继续往下找了\r\n const children = isBlockDomNode(node) && node.hasAttribute(AttrMarkName) ? [] : node.childNodes;\r\n\r\n let childLexicalNodes = [];\r\n\r\n const hasBlockAncestorLexicalNodeForChildren = \r\n currentLexicalNode != null && \r\n (\r\n $isRootOrShadowRoot(currentLexicalNode) ? false \r\n : (currentLexicalNode != null && $isBlockElementNode(currentLexicalNode) || hasBlockAncestorLexicalNode)\r\n );\r\n \r\n for (let i = 0; i < children.length; i++) {\r\n childLexicalNodes.push(...createNodesFromElement(children[i] as HTMLElement, editor, allArtificialNodes, hasBlockAncestorLexicalNodeForChildren, new Map(forChildMap), currentLexicalNode));\r\n }\r\n\r\n if (postTransform != null) {\r\n childLexicalNodes = postTransform(childLexicalNodes);\r\n }\r\n\r\n if (isBlockDomNode(node)) {\r\n \r\n if (!hasBlockAncestorLexicalNodeForChildren) {\r\n childLexicalNodes = wrapContinuousInlines(node, childLexicalNodes, $createParagraphNode);\r\n } \r\n else {\r\n\r\n childLexicalNodes = wrapContinuousInlines(node, childLexicalNodes, () => {\r\n\r\n const artificialNode = new ArtificialNode__DO_NOT_USE();\r\n\r\n allArtificialNodes.push(artificialNode);\r\n\r\n return artificialNode;\r\n });\r\n }\r\n }\r\n\r\n if (currentLexicalNode == null) {\r\n\r\n if (childLexicalNodes.length > 0) {\r\n // If it hasn't been converted to a LexicalNode, we hoist its children\r\n // up to the same level as it.\r\n lexicalNodes = lexicalNodes.concat(childLexicalNodes);\r\n } \r\n else {\r\n if (isBlockDomNode(node) && isDomNodeBetweenTwoInlineNodes(node)) {\r\n // Empty block dom node that hasnt been converted, we replace it with a linebreak if its between inline nodes\r\n lexicalNodes = lexicalNodes.concat($createLineBreakNode());\r\n }\r\n }\r\n } \r\n else if ($isElementNode(currentLexicalNode)) {\r\n // If the current node is a ElementNode after conversion,\r\n // we can append all the children to it.\r\n currentLexicalNode.append(...childLexicalNodes);\r\n }\r\n return lexicalNodes;\r\n}\r\n\r\n\r\nexport const generateNodesFromHtml = function $generateNodesFromDOM(editor:LexicalEditor, html:string) {\r\n\r\n try {\r\n const doc = domParser.parseFromString(html,\"text/html\")\r\n\r\n const elements = doc.body.childNodes;\r\n \r\n let lexicalNodes:LexicalNode[] = [];\r\n \r\n const allArtificialNodes:ElementNode[] = [];\r\n \r\n for (let i = 0; i < elements.length; i++) {\r\n \r\n let element = elements[i] as HTMLElement; \r\n \r\n // 解决根不是块级元素的问题 忽略 换行符\r\n if(!isBlockDomNode(element) && element.nodeValue != \"\\n\" && element.nodeValue != \"\\r\\n\"){\r\n \r\n const p = document.createElement(\"p\")\r\n \r\n if(element instanceof Text){\r\n // .replace(/[\\n|\\r\\n]+/g,\"<br />\")\r\n p.textContent = element.data;\r\n \r\n }\r\n else{\r\n p.innerHTML = element.outerHTML ;\r\n }\r\n \r\n element = p;\r\n \r\n }\r\n \r\n const lexicalNode = createNodesFromElement(element, editor, allArtificialNodes,false);\r\n \r\n if (lexicalNode !== null) {\r\n lexicalNodes = lexicalNodes.concat(lexicalNode);\r\n }\r\n } \r\n unwrapArtificalNodes(allArtificialNodes);\r\n return lexicalNodes;\r\n } catch (error) {\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * \r\n * @param editor \r\n * @param currentNode \r\n * @param parentElement \r\n * @param selection \r\n * @returns \r\n */\r\nconst appendNodesToHTML = function (editor:LexicalEditor, currentNode:LexicalNode, parentElement:HTMLElement|DocumentFragment, selection:BaseSelection|NodeSelection|RangeSelection|null = null) {\r\n\r\n let shouldInclude = selection !== null ? currentNode.isSelected(selection) : true;\r\n\r\n const shouldExclude = $isElementNode(currentNode) && currentNode.excludeFromCopy('html');\r\n\r\n let target = currentNode;\r\n\r\n if (selection !== null) {\r\n\r\n let clone = $cloneWithProperties(currentNode);\r\n\r\n clone = $isTextNode(clone) && selection !== null ? $sliceSelectedTextNodeContent(selection, clone) : clone;\r\n\r\n target = clone;\r\n }\r\n\r\n const children = $isElementNode(target) ? target.getChildren() : [];\r\n const registeredNode = editor._nodes.get(target.getType());\r\n\r\n let exportOutput;\r\n\r\n // Use HTMLConfig overrides, if available.\r\n if (registeredNode && registeredNode.exportDOM !== undefined) {\r\n exportOutput = registeredNode.exportDOM(editor, target);\r\n } \r\n else {\r\n exportOutput = target.exportDOM(editor);\r\n }\r\n\r\n const { element, after } = exportOutput;\r\n\r\n if (!element) {\r\n return false;\r\n }\r\n\r\n const fragment = document.createDocumentFragment();\r\n\r\n for (let i = 0; i < children.length; i++) {\r\n\r\n const childNode = children[i];\r\n const shouldIncludeChild = appendNodesToHTML(editor, childNode, fragment, selection);\r\n\r\n if (!shouldInclude && $isElementNode(currentNode) && shouldIncludeChild && currentNode.extractWithChild(childNode, selection, 'html')) {\r\n shouldInclude = true;\r\n }\r\n }\r\n\r\n if (shouldInclude && !shouldExclude) {\r\n\r\n if (isHTMLElement(element)) { element.append(fragment); }\r\n\r\n parentElement.append(element);\r\n\r\n if (after) {\r\n\r\n const newElement = after.call(target, element);\r\n\r\n if (newElement) { element.replaceWith(newElement); }\r\n }\r\n\r\n } \r\n else {\r\n parentElement.append(fragment);\r\n }\r\n\r\n return shouldInclude;\r\n}\r\n\r\n/**\r\n * \r\n * @param editor \r\n * @param selection \r\n * @returns \r\n */\r\nexport const generateHtmlFromNodes = function $generateHtmlFromNodes(editor:LexicalEditor, selection?:BaseSelection) {\r\n\r\n // && typeof global.window === 'undefined'\r\n if (typeof document === 'undefined' || typeof window === 'undefined') {\r\n throw new Error('To use $generateHtmlFromNodes in headless mode please initialize a headless browser implementation such as JSDom before calling this function.');\r\n }\r\n\r\n const container = document.createElement('div');\r\n const root = $getRoot();\r\n const topLevelChildren = root.getChildren();\r\n\r\n for (let i = 0; i < topLevelChildren.length; i++) {\r\n\r\n const topLevelNode = topLevelChildren[i];\r\n\r\n appendNodesToHTML(editor, topLevelNode, container, selection);\r\n\r\n }\r\n\r\n return container.innerHTML.trim();\r\n}\r\n\r\n/**\r\n * 美化html element\r\n * @param node \r\n * @param level \r\n * @returns \r\n */\r\nexport const prettifyHTMLElement = function (node: Element, level: number) {\r\n const indentBefore = Array.from({ length: level++ + 1 }).join(' ')\r\n const indentAfter = Array.from({ length: level - 1 }).join(' ')\r\n let textNode\r\n\r\n for (let i = 0; i < node.children.length; i++) {\r\n textNode = document.createTextNode(`\\n${indentBefore}`)\r\n node.insertBefore(textNode, node.children[i])\r\n prettifyHTMLElement(node.children[i], level)\r\n if (node.lastElementChild === node.children[i]) {\r\n textNode = document.createTextNode(`\\n${indentAfter}`)\r\n node.appendChild(textNode)\r\n }\r\n }\r\n return node\r\n}\r\n\r\n\r\n/**\r\n * 美化 html\r\n * @param str \r\n * @returns \r\n */\r\nexport const prettifyHTML = function (str: string) {\r\n const div = document.createElement('div')\r\n div.innerHTML = str.trim()\r\n return prettifyHTMLElement(div, 0).innerHTML.trim()\r\n}\r\n\r\n"],"names":["ArtificialNode__DO_NOT_USE","$createLineBreakNode","$isElementNode","$isBlockElementNode","isInlineDomNode","isBlockDomNode","AttrMarkName","$isRootOrShadowRoot","$createParagraphNode","selection","$cloneWithProperties","$isTextNode","$sliceSelectedTextNodeContent","isHTMLElement","$getRoot"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sources":["../../../../../../src/components/basic/lexical-editor/utils/module.tsx"],"sourcesContent":["\r\nimport { Fragment,ref } from 'vue'\r\nimport { Dialoger } from '@maketribe/dm'\r\nimport { ElButton,ElInput } from \"element-plus\";\r\nimport { Search } from \"@element-plus/icons-vue\";\r\nimport { useLexicalEditorContext } from \"../composables\"\r\n\r\n/**\r\n * 显示模块选择\r\n * @returns \r\n */\r\nexport const showModuleSelectDialog = async (namespace:string) => {\r\n\r\n const { modules } = useLexicalEditorContext(namespace);\r\n\r\n return new Promise(resolve => {\r\n \r\n const selectOption = ref<any|null>(null);\r\n const searchInputValue = ref(\"\");\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({...selectOption.value as any});\r\n };\r\n\r\n // 点击块\r\n const clickHandle = (item:any)=>{\r\n selectOption.value = item;\r\n }\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: \"模版选择\",\r\n class: \"mk-doc-editor__module-template_dialog\",\r\n width: \"700px\",\r\n onClose: () => {\r\n dialogInstance.destroy();\r\n },\r\n body: () => {\r\n\r\n // 循环体\r\n const templateListComponent = modules.filter(item=>{\r\n if(searchInputValue.value){\r\n return item.name.indexOf(searchInputValue.value) >= 0 || item.title.indexOf(searchInputValue.value) >= 0\r\n }\r\n else{\r\n return true;\r\n }\r\n }).map(item=>{\r\n\r\n return <div \r\n class={`mk-doc-editor__module-template_dialog_list-item ${(item.cover ? 'cover':'')} ${(selectOption.value?.name == item.name ? 'active':'')}`} \r\n onClick={()=>clickHandle(item)}>\r\n {item.cover ? <img src={item.cover} /> :null}\r\n <div class=\"mk-doc-editor__module-template_dialog_list-item_title\">{item.title}</div>\r\n </div>\r\n })\r\n\r\n return <div class=\"mk-doc-editor__module-template_dialog_warp\">\r\n <ElInput v-model={searchInputValue.value} prefix-icon={Search} clearable={true} />\r\n <div class=\"mk-doc-editor__module-template_dialog_list-body\">\r\n {templateListComponent}\r\n </div>\r\n </div>\r\n },\r\n footer: () => {\r\n return <Fragment>\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n <ElButton type=\"primary\" onClick={handleConfirmClick} disabled={!selectOption.value}>\r\n 确定\r\n </ElButton>\r\n </Fragment>\r\n },\r\n });\r\n });\r\n}\r\n"],"names":["showModuleSelectDialog","namespace","modules","useLexicalEditorContext","Promise","resolve","selectOption","ref","searchInputValue","handleCancelClick","dialogInstance","destroy","handleConfirmClick","value","clickHandle","item","Dialoger","customRender","title","class","width","onClose","body","templateListComponent","filter","name","indexOf","map","_createVNode","cover","onClick","ElInput","$event","Search","footer","_Fragment","ElButton","default","_createTextVNode"],"mappings":";;;;;;;;;;;;;;;;;AAWaA,MAAAA,yBAAyB,OAAOC,cAAqB;AAEhE,QAAM;AAAA,IAAEC;AAAAA,EAAQ,IAAIC,cAAAA,wBAAwBF,SAAS;AAErD,SAAO,IAAIG,QAAQC,aAAW;AAE5B,UAAMC,eAAeC,QAAc,IAAI;AACvC,UAAMC,mBAAmBD,QAAI,EAAE;AAG/B,UAAME,oBAAoBA,MAAM;AAC9BC,qBAAeC,QAAO;AAAA;AAIxB,UAAMC,qBAAqBA,MAAM;AAC/BF,qBAAeC,QAAO;AACtBN,cAAQ;AAAA,QAAC,GAAGC,aAAaO;AAAAA,MAAY,CAAC;AAAA;AAIxC,UAAMC,cAAeC,UAAW;AAC9BT,mBAAaO,QAAQE;AAAAA;AAGvB,UAAML,iBAAiBM,GAAQ,SAACC,aAAa;AAAA,MAC3CC,OAAO;AAAA,MACPC,OAAO;AAAA,MACPC,OAAO;AAAA,MACPC,SAASA,MAAM;AACbX,uBAAeC,QAAO;AAAA,MACvB;AAAA,MACDW,MAAMA,MAAM;AAGV,cAAMC,wBAAwBrB,QAAQsB,OAAOT,UAAM;AACjD,cAAGP,iBAAiBK,OAAM;AACxB,mBAAOE,KAAKU,KAAKC,QAAQlB,iBAAiBK,KAAK,KAAK,KAAKE,KAAKG,MAAMQ,QAAQlB,iBAAiBK,KAAK,KAAK;AAAA,UACzG,OACI;AACF,mBAAO;AAAA,UACT;AAAA,QACF,CAAC,EAAEc,IAAIZ,UAAM;;AAEX,iBAAAa,IAAAA,YAAA,OAAA;AAAA,YAAA,SACO,mDAAoDb,KAAKc,QAAQ,UAAQ,EAAE,MAAMvB,kBAAaO,UAAbP,mBAAoBmB,SAAQV,KAAKU,OAAO,WAAS,EAAE;AAAA,YAAG,WACrIK,MAAIhB,YAAYC,IAAI;AAAA,UAAC,GAAA,CAC3BA,KAAKc,QAAKD,IAAAA,YAAA,OAAA;AAAA,YAAA,OAAcb,KAAKc;AAAAA,UAAY,GAAA,IAAA,IAAA,MAAID,IAAAA,YAAA,OAAA;AAAA,YAAA,SAAA;AAAA,UACsBb,GAAAA,CAAAA,KAAKG,KAAK,CAAA,CAAA,CAAA;AAAA,QAElF,CAAC;AAED,eAAAU,IAAAA,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAAAA,CAAAA,IAAA,YAAAG,qBAAA;AAAA,UAAA,cACoBvB,iBAAiBK;AAAAA,UAAK,uBAAAmB,YAAtBxB,iBAAiBK,QAAKmB;AAAAA,UAAA,eAAeC,QAAM;AAAA,UAAA,aAAa;AAAA,QAAI,GAAA,IAAA,GAAAL,IAAA,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,QAAA,GAAA,CAE3EL,qBAAqB,CAAA,CAAA,CAAA;AAAA,MAG3B;AAAA,MACDW,QAAQA,MAAM;AACZ,eAAAN,IAAA,YAAAO,IAAA,UAAAP,MAAAA,CAAAA,IAAAA,YAAAQ,YAAAA,UAAA;AAAA,UAAA,WACqB3B;AAAAA,QAAiB,GAAA;AAAA,UAAA4B,SAAAA,MAAA,CAAAC,oBAAA,IAAA,CAAA;AAAA,SAAAV,GAAAA,IAAA,YAAAQ,sBAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WACFxB;AAAAA,UAAkB,YAAY,CAACN,aAAaO;AAAAA,QAAK,GAAA;AAAA,UAAAwB,SAAAA,MAAA,CAAAC,oBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAIvF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;"}
1
+ {"version":3,"file":"module.js","sources":["../../../../../../src/components/basic/lexical-editor/utils/module.tsx"],"sourcesContent":["\r\nimport { Fragment,ref } from 'vue'\r\nimport { Dialoger } from '@maketribe/dm'\r\nimport { ElButton,ElInput } from \"element-plus\";\r\nimport { Search } from \"@element-plus/icons-vue\";\r\nimport { useLexicalEditorContext } from \"../composables\"\r\n\r\n/**\r\n * 显示模块选择 \r\n * @returns \r\n */\r\nexport const showModuleSelectDialog = async (namespace:string) => {\r\n\r\n const { modules } = useLexicalEditorContext(namespace);\r\n\r\n return new Promise(resolve => {\r\n \r\n const selectOption = ref<any|null>(null);\r\n const searchInputValue = ref(\"\");\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({...selectOption.value as any});\r\n };\r\n\r\n // 点击块\r\n const clickHandle = (item:any)=>{\r\n selectOption.value = item;\r\n }\r\n\r\n const dialogInstance = Dialoger.customRender({\r\n title: \"模版选择\",\r\n class: \"mk-doc-editor__module-template_dialog\",\r\n width: \"700px\",\r\n onClose: () => {\r\n dialogInstance.destroy();\r\n },\r\n body: () => {\r\n\r\n // 循环体\r\n const templateListComponent = modules.filter(item=>{\r\n if(searchInputValue.value){\r\n return item.name.indexOf(searchInputValue.value) >= 0 || item.title.indexOf(searchInputValue.value) >= 0\r\n }\r\n else{\r\n return true;\r\n }\r\n }).map(item=>{\r\n\r\n return <div \r\n class={`mk-doc-editor__module-template_dialog_list-item ${(item.cover ? 'cover':'')} ${(selectOption.value?.name == item.name ? 'active':'')}`} \r\n onClick={()=>clickHandle(item)}>\r\n {item.cover ? <img src={item.cover} /> :null}\r\n <div class=\"mk-doc-editor__module-template_dialog_list-item_title\">{item.title}</div>\r\n </div>\r\n })\r\n\r\n return <div class=\"mk-doc-editor__module-template_dialog_warp\">\r\n <ElInput v-model={searchInputValue.value} prefix-icon={Search} clearable={true} />\r\n <div class=\"mk-doc-editor__module-template_dialog_list-body\">\r\n {templateListComponent}\r\n </div>\r\n </div>\r\n },\r\n footer: () => {\r\n return <Fragment>\r\n <ElButton onClick={handleCancelClick}>取消</ElButton>\r\n <ElButton type=\"primary\" onClick={handleConfirmClick} disabled={!selectOption.value}>\r\n 确定\r\n </ElButton>\r\n </Fragment>\r\n },\r\n });\r\n });\r\n}\r\n"],"names":["showModuleSelectDialog","namespace","modules","useLexicalEditorContext","Promise","resolve","selectOption","ref","searchInputValue","handleCancelClick","dialogInstance","destroy","handleConfirmClick","value","clickHandle","item","Dialoger","customRender","title","class","width","onClose","body","templateListComponent","filter","name","indexOf","map","_createVNode","cover","onClick","ElInput","$event","Search","footer","_Fragment","ElButton","default","_createTextVNode"],"mappings":";;;;;;;;;;;;;;;;;AAWaA,MAAAA,yBAAyB,OAAOC,cAAqB;AAEhE,QAAM;AAAA,IAAEC;AAAAA,EAAQ,IAAIC,cAAAA,wBAAwBF,SAAS;AAErD,SAAO,IAAIG,QAAQC,aAAW;AAE5B,UAAMC,eAAeC,QAAc,IAAI;AACvC,UAAMC,mBAAmBD,QAAI,EAAE;AAG/B,UAAME,oBAAoBA,MAAM;AAC9BC,qBAAeC,QAAO;AAAA;AAIxB,UAAMC,qBAAqBA,MAAM;AAC/BF,qBAAeC,QAAO;AACtBN,cAAQ;AAAA,QAAC,GAAGC,aAAaO;AAAAA,MAAY,CAAC;AAAA;AAIxC,UAAMC,cAAeC,UAAW;AAC9BT,mBAAaO,QAAQE;AAAAA;AAGvB,UAAML,iBAAiBM,GAAQ,SAACC,aAAa;AAAA,MAC3CC,OAAO;AAAA,MACPC,OAAO;AAAA,MACPC,OAAO;AAAA,MACPC,SAASA,MAAM;AACbX,uBAAeC,QAAO;AAAA,MACvB;AAAA,MACDW,MAAMA,MAAM;AAGV,cAAMC,wBAAwBrB,QAAQsB,OAAOT,UAAM;AACjD,cAAGP,iBAAiBK,OAAM;AACxB,mBAAOE,KAAKU,KAAKC,QAAQlB,iBAAiBK,KAAK,KAAK,KAAKE,KAAKG,MAAMQ,QAAQlB,iBAAiBK,KAAK,KAAK;AAAA,UACzG,OACI;AACF,mBAAO;AAAA,UACT;AAAA,QACF,CAAC,EAAEc,IAAIZ,UAAM;;AAEX,iBAAAa,IAAAA,YAAA,OAAA;AAAA,YAAA,SACO,mDAAoDb,KAAKc,QAAQ,UAAQ,EAAE,MAAMvB,kBAAaO,UAAbP,mBAAoBmB,SAAQV,KAAKU,OAAO,WAAS,EAAE;AAAA,YAAG,WACrIK,MAAIhB,YAAYC,IAAI;AAAA,UAAC,GAAA,CAC3BA,KAAKc,QAAKD,IAAAA,YAAA,OAAA;AAAA,YAAA,OAAcb,KAAKc;AAAAA,UAAY,GAAA,IAAA,IAAA,MAAID,IAAAA,YAAA,OAAA;AAAA,YAAA,SAAA;AAAA,UACsBb,GAAAA,CAAAA,KAAKG,KAAK,CAAA,CAAA,CAAA;AAAA,QAElF,CAAC;AAED,eAAAU,IAAAA,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,WAAAA,CAAAA,IAAA,YAAAG,qBAAA;AAAA,UAAA,cACoBvB,iBAAiBK;AAAAA,UAAK,uBAAAmB,YAAtBxB,iBAAiBK,QAAKmB;AAAAA,UAAA,eAAeC,QAAM;AAAA,UAAA,aAAa;AAAA,QAAI,GAAA,IAAA,GAAAL,IAAA,YAAA,OAAA;AAAA,UAAA,SAAA;AAAA,QAAA,GAAA,CAE3EL,qBAAqB,CAAA,CAAA,CAAA;AAAA,MAG3B;AAAA,MACDW,QAAQA,MAAM;AACZ,eAAAN,IAAA,YAAAO,IAAA,UAAAP,MAAAA,CAAAA,IAAAA,YAAAQ,YAAAA,UAAA;AAAA,UAAA,WACqB3B;AAAAA,QAAiB,GAAA;AAAA,UAAA4B,SAAAA,MAAA,CAAAC,oBAAA,IAAA,CAAA;AAAA,SAAAV,GAAAA,IAAA,YAAAQ,sBAAA;AAAA,UAAA,QAAA;AAAA,UAAA,WACFxB;AAAAA,UAAkB,YAAY,CAACN,aAAaO;AAAAA,QAAK,GAAA;AAAA,UAAAwB,SAAAA,MAAA,CAAAC,oBAAA,IAAA,CAAA;AAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAIvF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;;"}
@@ -6,10 +6,12 @@ const CmsSettings = vue.reactive({
6
6
  publish: {
7
7
  mode: "dynamic"
8
8
  },
9
- docModules: [],
9
+ devices: ["pc"],
10
10
  part: {
11
11
  openBanner: true,
12
12
  bannerImageSize: "1440*560",
13
+ docModules: [],
14
+ docTemplates: [],
13
15
  doc: {
14
16
  js: "",
15
17
  css: ""
@@ -20,6 +22,8 @@ const CmsSettings = vue.reactive({
20
22
  js: "",
21
23
  css: ""
22
24
  },
25
+ docModules: [],
26
+ docTemplates: [],
23
27
  useTop: true,
24
28
  useNew: true,
25
29
  useHotRecommend: false,
@@ -1 +1 @@
1
- {"version":3,"file":"cms-settings.js","sources":["../../../../src/modules/cms/cms-settings.ts"],"sourcesContent":["import { reactive } from \"vue\"\r\nimport { MsConfigTable } from \"../ms/dataviews/ms-config/MsConfigTable\"\r\nimport { registerLexicalEditorModule,unRegisterLexicalEditorModule } from \"../../components/basic/lexical-editor\"\r\n\r\n/**\r\n * 发布配置\r\n */\r\ntype PublishSettings = {\r\n // 发布模式 静态发布和动态发布\r\n mode:'static' | 'dynamic'\r\n}\r\n\r\n/**\r\n * cms 文档编辑设置\r\n */\r\ntype CmsDocSettings = {\r\n css:string,\r\n js:string\r\n}\r\n\r\n/**\r\n * 栏目配置\r\n */\r\ntype PartSettings = {\r\n doc:CmsDocSettings\r\n openBanner:boolean,\r\n bannerImageSize:string\r\n}\r\n\r\n/**\r\n * 内容设置\r\n */\r\ntype ContentSettings = {\r\n /**\r\n * 内容文档设置\r\n */\r\n doc:CmsDocSettings,\r\n /**\r\n * 开启文档置顶功能\r\n */\r\n useTop:boolean,\r\n /**\r\n * 开启最新文档功能\r\n */\r\n useNew:boolean,\r\n /**\r\n * 开启热点推荐功能\r\n */\r\n useHotRecommend:boolean,\r\n /**\r\n * 开启栏目推荐功能\r\n */\r\n usePartRecommend:boolean,\r\n /**\r\n * 开启内容标签\r\n */\r\n useTags:boolean,\r\n /**\r\n * 开启媒体库\r\n */\r\n useAtlas:boolean,\r\n /**\r\n * 封面图的尺寸 默认 300 * 300\r\n */\r\n coverImageSize:string,\r\n /**\r\n * banner图的尺寸 默认 1440 * 560\r\n */\r\n bannerImageSize:string\r\n}\r\n\r\n/**\r\n * cms 系统设置\r\n */\r\nexport type CmsSettingsType = {\r\n // 发布配置\r\n publish:PublishSettings,\r\n // 文档模块\r\n docModules:Array<any>,\r\n part:PartSettings,\r\n content:ContentSettings\r\n}\r\n\r\n/**\r\n * cms 配置\r\n */\r\nconst CmsSettings = reactive<CmsSettingsType>({\r\n publish:{\r\n mode:\"dynamic\"\r\n },\r\n docModules:[],\r\n part:{\r\n openBanner:true,\r\n bannerImageSize:\"1440*560\",\r\n doc:{\r\n js:\"\",\r\n css:\"\"\r\n }\r\n },\r\n content:{\r\n doc:{\r\n js:\"\",\r\n css:\"\"\r\n },\r\n useTop:true,\r\n useNew:true,\r\n useHotRecommend:false,\r\n usePartRecommend:false,\r\n useTags:false,\r\n useAtlas:false,\r\n coverImageSize:\"300*300\",\r\n bannerImageSize:\"1440*560\"\r\n }\r\n})\r\n\r\n/**\r\n * \r\n */\r\nexport const CmsSettingsKEY = \"cms:content:man:settings\";\r\n\r\n/**\r\n * 使用cms配置\r\n * @param load \r\n */\r\nexport const useCmsSettings = function(load:boolean|undefined = false):CmsSettingsType{\r\n\r\n if(load){\r\n \r\n MsConfigTable.getConfigValue<CmsSettingsType>(CmsSettingsKEY).then(data=>{\r\n if(data){ \r\n // 卸载掉老旧模块\r\n // CmsSettings.docModules.forEach(item=> unRegisterDocModule(item.name) );\r\n Object.assign(CmsSettings,data);\r\n // 加载新内容安装新模块\r\n // CmsSettings.docModules.forEach(item=>registerLexicalEditorModule(item,\"\"));\r\n }\r\n });\r\n\r\n }\r\n\r\n return CmsSettings;\r\n}\r\n"],"names":["reactive","MsConfigTable"],"mappings":";;;;AAsFA,MAAM,cAAcA,IAAAA,SAA0B;AAAA,EAC5C,SAAQ;AAAA,IACN,MAAK;AAAA,EACP;AAAA,EACA,YAAW,CAAC;AAAA,EACZ,MAAK;AAAA,IACH,YAAW;AAAA,IACX,iBAAgB;AAAA,IAChB,KAAI;AAAA,MACF,IAAG;AAAA,MACH,KAAI;AAAA,IACN;AAAA,EACF;AAAA,EACA,SAAQ;AAAA,IACN,KAAI;AAAA,MACF,IAAG;AAAA,MACH,KAAI;AAAA,IACN;AAAA,IACA,QAAO;AAAA,IACP,QAAO;AAAA,IACP,iBAAgB;AAAA,IAChB,kBAAiB;AAAA,IACjB,SAAQ;AAAA,IACR,UAAS;AAAA,IACT,gBAAe;AAAA,IACf,iBAAgB;AAAA,EAClB;AACF,CAAC;AAKM,MAAM,iBAAiB;AAMjB,MAAA,iBAAkB,SAAS,OAAyB,OAAsB;AAErF,MAAG,MAAK;AAENC,kBAAAA,cAAc,eAAgC,cAAc,EAAE,KAAK,CAAM,SAAA;AACvE,UAAG,MAAK;AAGC,eAAA,OAAO,aAAY,IAAI;AAAA,MAGhC;AAAA,IAAA,CACD;AAAA,EAEH;AAEO,SAAA;AACT;;;"}
1
+ {"version":3,"file":"cms-settings.js","sources":["../../../../src/modules/cms/cms-settings.ts"],"sourcesContent":["import { reactive } from \"vue\"\r\nimport { MsConfigTable } from \"../ms/dataviews/ms-config/MsConfigTable\"\r\nimport { registerLexicalEditorModule,unRegisterLexicalEditorModule } from \"../../components/basic/lexical-editor\"\r\n\r\n/**\r\n * 发布配置\r\n */\r\ntype PublishSettings = {\r\n // 发布模式 静态发布和动态发布\r\n mode:'static' | 'dynamic'\r\n}\r\n\r\n/**\r\n * cms 文档编辑设置\r\n */\r\ntype CmsDocSettings = {\r\n css:string,\r\n js:string\r\n}\r\n\r\n/**\r\n * 栏目配置\r\n */\r\ntype PartSettings = {\r\n doc:CmsDocSettings\r\n openBanner:boolean,\r\n bannerImageSize:string,\r\n // 文档模块\r\n docModules:Array<any>,\r\n // 文档模版\r\n docTemplates:Array<any>\r\n}\r\n\r\n/**\r\n * 内容设置\r\n */\r\ntype ContentSettings = {\r\n /**\r\n * 内容文档设置\r\n */\r\n doc:CmsDocSettings,\r\n /**\r\n * 开启文档置顶功能\r\n */\r\n useTop:boolean,\r\n /**\r\n * 开启最新文档功能\r\n */\r\n useNew:boolean,\r\n /**\r\n * 开启热点推荐功能\r\n */\r\n useHotRecommend:boolean,\r\n /**\r\n * 开启栏目推荐功能\r\n */\r\n usePartRecommend:boolean,\r\n /**\r\n * 开启内容标签\r\n */\r\n useTags:boolean,\r\n /**\r\n * 开启媒体库\r\n */\r\n useAtlas:boolean,\r\n /**\r\n * 封面图的尺寸 默认 300 * 300\r\n */\r\n coverImageSize:string,\r\n /**\r\n * banner图的尺寸 默认 1440 * 560\r\n */\r\n bannerImageSize:string,\r\n // 文档模块\r\n docModules:Array<any>,\r\n // 文档模版\r\n docTemplates:Array<any>\r\n}\r\n\r\n/**\r\n * cms 系统设置\r\n */\r\nexport type CmsSettingsType = {\r\n // 发布配置\r\n publish:PublishSettings,\r\n devices:Array<'pc' | 'mobile'>,\r\n part:PartSettings,\r\n content:ContentSettings\r\n}\r\n\r\n/**\r\n * cms 配置\r\n */\r\nconst CmsSettings = reactive<CmsSettingsType>({\r\n publish:{\r\n mode:\"dynamic\"\r\n },\r\n devices:[\"pc\"],\r\n part:{\r\n openBanner:true,\r\n bannerImageSize:\"1440*560\",\r\n docModules:[],\r\n docTemplates:[],\r\n doc:{\r\n js:\"\",\r\n css:\"\"\r\n }\r\n },\r\n content:{\r\n doc:{\r\n js:\"\",\r\n css:\"\"\r\n },\r\n docModules:[],\r\n docTemplates:[],\r\n useTop:true,\r\n useNew:true,\r\n useHotRecommend:false,\r\n usePartRecommend:false,\r\n useTags:false,\r\n useAtlas:false,\r\n coverImageSize:\"300*300\",\r\n bannerImageSize:\"1440*560\"\r\n }\r\n})\r\n\r\n/**\r\n * \r\n */\r\nexport const CmsSettingsKEY = \"cms:content:man:settings\";\r\n\r\n/**\r\n * 使用cms配置\r\n * @param load \r\n */\r\nexport const useCmsSettings = function(load:boolean|undefined = false):CmsSettingsType{\r\n\r\n if(load){\r\n \r\n MsConfigTable.getConfigValue<CmsSettingsType>(CmsSettingsKEY).then(data=>{\r\n if(data){ \r\n // 卸载掉老旧模块\r\n // CmsSettings.docModules.forEach(item=> unRegisterDocModule(item.name) );\r\n Object.assign(CmsSettings,data);\r\n // 加载新内容安装新模块\r\n // CmsSettings.docModules.forEach(item=>registerLexicalEditorModule(item,\"\"));\r\n }\r\n });\r\n\r\n }\r\n\r\n return CmsSettings;\r\n}\r\n"],"names":["reactive","MsConfigTable"],"mappings":";;;;AA6FA,MAAM,cAAcA,IAAAA,SAA0B;AAAA,EAC5C,SAAQ;AAAA,IACN,MAAK;AAAA,EACP;AAAA,EACA,SAAQ,CAAC,IAAI;AAAA,EACb,MAAK;AAAA,IACH,YAAW;AAAA,IACX,iBAAgB;AAAA,IAChB,YAAW,CAAC;AAAA,IACZ,cAAa,CAAC;AAAA,IACd,KAAI;AAAA,MACF,IAAG;AAAA,MACH,KAAI;AAAA,IACN;AAAA,EACF;AAAA,EACA,SAAQ;AAAA,IACN,KAAI;AAAA,MACF,IAAG;AAAA,MACH,KAAI;AAAA,IACN;AAAA,IACA,YAAW,CAAC;AAAA,IACZ,cAAa,CAAC;AAAA,IACd,QAAO;AAAA,IACP,QAAO;AAAA,IACP,iBAAgB;AAAA,IAChB,kBAAiB;AAAA,IACjB,SAAQ;AAAA,IACR,UAAS;AAAA,IACT,gBAAe;AAAA,IACf,iBAAgB;AAAA,EAClB;AACF,CAAC;AAKM,MAAM,iBAAiB;AAMjB,MAAA,iBAAkB,SAAS,OAAyB,OAAsB;AAErF,MAAG,MAAK;AAENC,kBAAAA,cAAc,eAAgC,cAAc,EAAE,KAAK,CAAM,SAAA;AACvE,UAAG,MAAK;AAGC,eAAA,OAAO,aAAY,IAAI;AAAA,MAGhC;AAAA,IAAA,CACD;AAAA,EAEH;AAEO,SAAA;AACT;;;"}
@@ -1,349 +1,65 @@
1
1
  "use strict";
2
2
  const vue = require("vue");
3
3
  const cmsSettings = require("../../../cms-settings.js");
4
- const request = require("@maketribe/request");
5
- const dm = require("@maketribe/dm");
6
- const CmsAdContentsForm = require("../../../dataviews/cms-ad-contents/CmsAdContentsForm.js");
7
- const CmsAdDefinesForm = require("../../../dataviews/cms-ad-defines/CmsAdDefinesForm.js");
8
- require("element-plus");
9
- require("@maketribe/utils");
10
- require("../../../../../core/DataModelDefines.js");
11
- require("vue-router");
12
- require("@maketribe/locale");
13
- require("../../../../ms/dataviews/ms-config/MsConfigTable.js");
14
- require("lodash-es");
15
- require("../../../../../components/basic/svg-icon/index.js");
16
- require("../../../../../components/data-model/data-form/index.js");
17
- require("../../../../../components/data-model/data-table/index.js");
18
- require("../../../../../components/data-model/data-table-pagination/index.js");
19
- require("../../../../../components/abstract/abstract-select/abstract-select.js");
20
- require("../../../../../components/abstract/abstract-select/abstract-select-options.js");
21
- require("../../../../../components/basic/button/button-options.js");
22
- require("../../../../../components/basic/config-provider/index.js");
23
- require("../../../../../components/basic/data-table-select/index.js");
24
- require("../../../../../components/basic/data-select/index.js");
25
- require("../../../../../components/basic/pagination/index.js");
26
- require("../../../../../components/basic/system-provider/index.js");
27
- require("../../../../../components/basic/code-editor/index.js");
28
- require("../../../../../components/basic/json-editor/index.js");
29
- require("../../../../../components/basic/page-container/index.js");
30
- require("../../../../../components/basic/date-picker/index.js");
31
- require("../../../../../components/basic/icon-select/index.js");
32
- require("../../../../../components/basic/upload-file/upload-file.js");
33
- require("../../../../../components/basic/upload-file/context/web-file-upload-context.js");
34
- require("../../../../../components/basic/upload-file/context/web-file-upload-context-options.js");
35
- require("../../../../../components/basic/upload-file/ui/upload-image/index.js");
36
- require("../../../../../components/basic/upload-file/ui/upload-file/index.js");
37
- require("../../../../../components/basic/upload-file/ui/upload-video/index.js");
38
- require("../../../../../components/basic/upload-file/upload-file-options.js");
39
- require("../../../../../components/basic/doc-editor/index.js");
40
- require("../../../../../components/basic/copy-container/index.js");
41
- require("../../../../../components/basic/image-cropper/index.js");
42
- require("../../../../../components/basic/visual-page-editor/index.js");
43
- require("../../../../../components/basic/lexical-editor/assets/iconfont.js");
44
- require("@lexical/overflow");
45
- require("@lexical/text");
46
- require("@lexical/utils");
47
- require("lexical");
48
- require("@lexical/selection");
49
- require("@lexical/link");
50
- require("@lexical/rich-text");
51
- require("../../../../../components/basic/lexical-editor/utils/html.js");
52
- require("../../../../../components/basic/lexical-editor/utils/image.js");
53
- const elIcons = require("@element-plus/icons-vue");
54
- require("../../../../../components/basic/lexical-editor/composables/useElementBlockSelection.js");
55
- require("@lexical/history");
56
- ;/* empty css */
57
- require("../../../../../components/basic/lexical-editor/nodes/ModuleDecoratorNode.js");
58
- require("../../../../../components/basic/lexical-editor/nodes/ImageNode.js");
59
- require("../../../../../components/basic/lexical-editor/nodes/ImageTextWarpNode.js");
60
- require("../../../../../components/basic/lexical-editor/nodes/Template.js");
61
- ;/* empty css */
62
- ;/* empty css */
63
- ;/* empty css */
64
- require("../../../../../components/basic/lexical-editor/plugins/RichTextEditorPlugin.js");
65
- require("../../../../../components/basic/lexical-editor/plugins/HashtagPlugin.js");
66
- require("../../../../../components/basic/lexical-editor/plugins/ListPlugin.js");
67
- require("../../../../../components/basic/lexical-editor/plugins/CheckListPlugin.js");
68
- require("../../../../../components/basic/lexical-editor/plugins/TablePlugin.js");
69
- ;/* empty css */
70
- require("@lexical/dragon");
71
- require("@lexical/plain-text");
72
- require("../../../../../components/basic/lexical-editor/stage/DecoratedTeleports.js");
73
- ;/* empty css */
74
- require("../../../../../components/business/verify-dialog/verify-dialog-option.js");
75
- require("../../../../../components/business/resource-list/index.js");
76
- require("../../../../../components/business/resource-manager/index.js");
77
- require("../../../../ms/dataviews/department/DepartmentForm.js");
78
- require("../../../../ms/dataviews/department/DepartmentTable.js");
79
- require("../../../../ms/dataviews/department/DepartmentTree.js");
80
- require("../../../../ms/dataviews/log/operate-log/OperateLogTable.js");
81
- require("../../../../ms/dataviews/log/login-log/LoginLogTable.js");
82
- require("../../../../ms/dataviews/log/request-log/RequestLogTable.js");
83
- require("../../../../ms/dataviews/log/local-log/LocalLogTree.js");
84
- require("../../../../ms/components/material-list/index.js");
85
- require("../../../../ms/components/markdown-editor/index.js");
86
- require("../../../../ms/components/rich-text-editor/index.js");
87
- require("../../../../ms/material-upload-context/material-upload-context-options.js");
88
- require("../../../../ms/material-upload-context/material-upload-context.js");
89
- require("@codemirror/lang-html");
90
- const _hoisted_1 = { class: "mk-cms-part-banner__list_item" };
91
- const _hoisted_2 = { class: "mk-cms-part-banner__list_content" };
92
- const _hoisted_3 = /* @__PURE__ */ vue.createElementVNode("div", {
93
- slot: "placeholder",
94
- class: "image-slot"
95
- }, [
96
- /* @__PURE__ */ vue.createTextVNode(" 加载中"),
97
- /* @__PURE__ */ vue.createElementVNode("span", { class: "dot" }, "...")
98
- ], -1);
99
- const _hoisted_4 = ["src"];
100
- const _hoisted_5 = { class: "mk-cms-part-banner__list_bottom" };
101
- const _hoisted_6 = { class: "mk-cms-part-banner__list_title" };
102
- const _hoisted_7 = { class: "mk-cms-part-banner__list_action-mask" };
4
+ const partBanner_vue_vue_type_script_setup_true_lang = require("./part-banner.vue.js");
103
5
  const _sfc_main = /* @__PURE__ */ vue.defineComponent({
104
6
  __name: "part-banner-edit",
105
7
  props: { partId: { type: String }, title: { type: String } },
106
8
  setup(__props) {
107
- const adRequest = new request.DataViewRequest({ name: "ad-define", moduleName: "cms" });
108
9
  const cmsSettings$1 = cmsSettings.useCmsSettings();
109
- const props = __props;
110
- const partAdBanner = vue.ref(null);
111
- const loading = vue.ref(true);
112
- const warpRef = vue.ref();
113
- const adContentForm = vue.reactive(new CmsAdContentsForm.CmsAdContentsForm({ cutSise: cmsSettings$1.part.bannerImageSize }));
114
- const adDefineForm = vue.reactive(new CmsAdDefinesForm.CmsAdDefinesForm());
115
- const partAdBannerHeight = vue.computed(() => {
116
- let proportion = 0;
117
- const widthAndHeight = cmsSettings$1.part.bannerImageSize.split("*");
118
- let settingHeight = 0;
119
- let settingWidth = 0;
120
- if (!!partAdBanner.value.width && !!partAdBanner.value.height) {
121
- proportion = partAdBanner.value.width / partAdBanner.value.height;
122
- } else {
123
- settingWidth = widthAndHeight[0];
124
- settingHeight = widthAndHeight[1];
125
- proportion = settingWidth / settingHeight;
126
- }
127
- if (Number.isNaN(proportion)) {
128
- return "240px";
129
- } else {
130
- return partAdBanner.value.height ? warpRef.value.offsetWidth / proportion + "px" : warpRef.value.offsetWidth / proportion + "px";
131
- }
132
- });
133
- adContentForm.beforeSubmitEvent.on(async ({ data }) => {
134
- if (partAdBanner.value) {
135
- data.adDefineId = partAdBanner.value.id;
136
- } else {
137
- try {
138
- const widthAndHeight = cmsSettings$1.part.bannerImageSize.split("*");
139
- const result = await adRequest.add({ key: `part_${props.partId}`, desc: `${props.title}的Banner`, width: widthAndHeight[0], height: widthAndHeight[1] });
140
- if (result.data.code == 200) {
141
- partAdBanner.value = { id: result.data.data };
142
- data.adDefineId = result.data.data;
143
- }
144
- } catch (error) {
145
- dm.Messager.error({ message: "添加失败!" });
146
- }
147
- }
148
- });
149
- adDefineForm.formatSubmitData = (data) => {
150
- if (partAdBanner.value) {
151
- data.id = partAdBanner.value.id;
152
- } else {
153
- data.key = `part_${props.partId}`;
154
- data.desc = `${props.title}的Banner`;
155
- }
156
- return data;
157
- };
158
- adContentForm.submittedEvent.on(() => {
159
- loadPartAdDefineData(props.partId);
160
- });
161
- adDefineForm.submittedEvent.on(() => {
162
- loadPartAdDefineData(props.partId);
163
- });
164
- const loadPartAdDefineData = async (partId) => {
165
- var _a, _b;
166
- try {
167
- loading.value = true;
168
- const where = new request.Where();
169
- where.addCondition("key", "=", `part_${partId}`);
170
- partAdBanner.value = (await adRequest.query({
171
- data: {
172
- pn: 1,
173
- pc: 1e6,
174
- condition: where
175
- }
176
- })).data.data[0];
177
- if (((_a = partAdBanner.value) == null ? void 0 : _a.width) && ((_b = partAdBanner.value) == null ? void 0 : _b.width)) {
178
- adContentForm.changeCutSise(`${partAdBanner.value.width}*${partAdBanner.value.height}`);
179
- }
180
- } catch (e) {
181
- console.error(e);
182
- } finally {
183
- loading.value = false;
184
- }
185
- };
186
- const showAdContentHandle = async (id) => {
187
- await dm.Dialoger.dataFormDialog({
188
- dataForm: adContentForm,
189
- recId: id
190
- });
191
- };
192
- const showAdDefineHandle = async () => {
193
- var _a;
194
- await dm.Dialoger.dataFormDialog({
195
- title: "设置素材显示尺寸",
196
- dataForm: adDefineForm,
197
- recId: (_a = partAdBanner.value) == null ? void 0 : _a.id
198
- });
199
- adDefineForm.getColumn("contents").visible = false;
200
- adDefineForm.getColumn("key").visible = false;
201
- adDefineForm.getColumn("desc").visible = false;
202
- };
203
- vue.onMounted(() => {
204
- vue.watch(() => props.partId, (id) => {
205
- loadPartAdDefineData(id);
206
- }, { immediate: true });
207
- });
10
+ console.log(cmsSettings$1.devices);
11
+ const warpElRef = vue.ref();
12
+ const activePartAdType = vue.ref(cmsSettings$1.devices[0]);
208
13
  return (_ctx, _cache) => {
209
- var _a;
210
- const _component_el_image = vue.resolveComponent("el-image");
211
- const _component_el_button = vue.resolveComponent("el-button");
212
- const _component_el_carousel_item = vue.resolveComponent("el-carousel-item");
213
- const _component_el_carousel = vue.resolveComponent("el-carousel");
214
- const _component_el_text = vue.resolveComponent("el-text");
215
- const _component_el_empty = vue.resolveComponent("el-empty");
216
- const _directive_loading = vue.resolveDirective("loading");
217
- return vue.unref(cmsSettings$1).part.openBanner ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", {
14
+ const _component_el_tab_pane = vue.resolveComponent("el-tab-pane");
15
+ const _component_el_tabs = vue.resolveComponent("el-tabs");
16
+ return vue.unref(cmsSettings$1).part.openBanner ? (vue.openBlock(), vue.createElementBlock("div", {
218
17
  key: 0,
219
18
  class: "mk-cms-part-banner__warp",
220
- ref_key: "warpRef",
221
- ref: warpRef,
222
- style: { "{height": "partAdBannerHeight}" }
19
+ ref_key: "warpElRef",
20
+ ref: warpElRef
223
21
  }, [
224
- partAdBanner.value && ((_a = partAdBanner.value.contents) == null ? void 0 : _a.length) ? (vue.openBlock(), vue.createBlock(_component_el_carousel, {
225
- key: 0,
226
- autoplay: false,
227
- height: partAdBannerHeight.value,
228
- arrow: "always",
229
- ref: "carouselRef"
22
+ vue.createVNode(_component_el_tabs, {
23
+ modelValue: activePartAdType.value,
24
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => activePartAdType.value = $event)
230
25
  }, {
231
26
  default: vue.withCtx(() => [
232
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(partAdBanner.value.contents, (item) => {
233
- return vue.openBlock(), vue.createBlock(_component_el_carousel_item, {
234
- key: item.id
235
- }, {
236
- default: vue.withCtx(() => [
237
- vue.createElementVNode("div", _hoisted_1, [
238
- vue.createElementVNode("div", _hoisted_2, [
239
- item.type == 1 ? (vue.openBlock(), vue.createBlock(_component_el_image, {
240
- key: 0,
241
- class: "mk-cms-part-banner__list_content_img",
242
- src: item.path,
243
- fit: "cover",
244
- tyle: "width: 100%;height: 100%;"
245
- }, {
246
- default: vue.withCtx(() => [
247
- _hoisted_3
248
- ]),
249
- _: 2
250
- }, 1032, ["src"])) : vue.createCommentVNode("", true),
251
- item.type == 2 ? (vue.openBlock(), vue.createElementBlock("video", {
252
- key: 1,
253
- class: "video",
254
- src: item.path,
255
- style: { "width": "100%", "height": "100%" },
256
- controls: ""
257
- }, null, 8, _hoisted_4)) : vue.createCommentVNode("", true)
258
- ]),
259
- vue.createElementVNode("div", _hoisted_5, [
260
- vue.createElementVNode("div", _hoisted_6, vue.toDisplayString(item.title), 1),
261
- vue.createElementVNode("div", null, vue.toDisplayString(item.desc), 1)
262
- ]),
263
- vue.createElementVNode("div", _hoisted_7, [
264
- vue.createVNode(_component_el_button, {
265
- type: "primary",
266
- style: { "margin-left": "10px" },
267
- icon: vue.unref(elIcons.EditPen),
268
- onClick: ($event) => showAdContentHandle(item.id)
269
- }, {
270
- default: vue.withCtx(() => [
271
- vue.createTextVNode(" 编辑当前轮播素材 ")
272
- ]),
273
- _: 2
274
- }, 1032, ["icon", "onClick"]),
275
- vue.createVNode(_component_el_button, {
276
- type: "primary",
277
- style: { "margin-left": "10px" },
278
- icon: vue.unref(elIcons.Plus),
279
- onClick: _cache[0] || (_cache[0] = ($event) => showAdContentHandle(null))
280
- }, {
281
- default: vue.withCtx(() => [
282
- vue.createTextVNode(" 添加新轮播素材 ")
283
- ]),
284
- _: 1
285
- }, 8, ["icon"]),
286
- vue.createVNode(_component_el_button, {
287
- type: "primary",
288
- style: { "margin-left": "10px" },
289
- icon: vue.unref(elIcons.EditPen),
290
- onClick: _cache[1] || (_cache[1] = ($event) => showAdDefineHandle())
291
- }, {
292
- default: vue.withCtx(() => [
293
- vue.createTextVNode(" 设置素材显示尺寸 ")
294
- ]),
295
- _: 1
296
- }, 8, ["icon"])
297
- ])
298
- ])
299
- ]),
300
- _: 2
301
- }, 1024);
302
- }), 128))
303
- ]),
304
- _: 1
305
- }, 8, ["height"])) : (vue.openBlock(), vue.createBlock(_component_el_empty, {
306
- key: 1,
307
- "image-size": 80,
308
- style: { "height": "240px" }
309
- }, {
310
- description: vue.withCtx(() => [
311
- vue.createVNode(_component_el_text, null, {
312
- default: vue.withCtx(() => [
313
- vue.createTextVNode("暂无轮播素材数据")
314
- ]),
315
- _: 1
316
- }),
317
- vue.createVNode(_component_el_button, {
318
- type: "primary",
319
- text: "",
320
- style: { "margin-left": "10px" },
321
- icon: vue.unref(elIcons.Plus),
322
- onClick: _cache[2] || (_cache[2] = ($event) => showAdDefineHandle())
27
+ vue.unref(cmsSettings$1).devices.includes("pc") ? (vue.openBlock(), vue.createBlock(_component_el_tab_pane, {
28
+ key: 0,
29
+ label: "PC端",
30
+ name: "pc"
323
31
  }, {
324
- default: vue.withCtx(() => [
325
- vue.createTextVNode(" 设置素材显示尺寸 ")
326
- ]),
32
+ default: vue.withCtx(() => {
33
+ var _a;
34
+ return [
35
+ vue.createVNode(partBanner_vue_vue_type_script_setup_true_lang, {
36
+ adkey: `part_${__props.partId}`,
37
+ title: `${__props.title}PC端`,
38
+ viewWidth: (_a = warpElRef.value) == null ? void 0 : _a.offsetWidth
39
+ }, null, 8, ["adkey", "title", "viewWidth"])
40
+ ];
41
+ }),
327
42
  _: 1
328
- }, 8, ["icon"]),
329
- vue.createVNode(_component_el_button, {
330
- type: "primary",
331
- text: "",
332
- style: { "margin-left": "10px" },
333
- icon: vue.unref(elIcons.Plus),
334
- onClick: _cache[3] || (_cache[3] = ($event) => showAdContentHandle(null))
43
+ })) : vue.createCommentVNode("", true),
44
+ vue.unref(cmsSettings$1).devices.includes("mobile") ? (vue.openBlock(), vue.createBlock(_component_el_tab_pane, {
45
+ key: 1,
46
+ label: "移动端",
47
+ name: "mobile"
335
48
  }, {
336
49
  default: vue.withCtx(() => [
337
- vue.createTextVNode(" 添加 ")
50
+ vue.createVNode(partBanner_vue_vue_type_script_setup_true_lang, {
51
+ adkey: `part_${__props.partId}_mobile`,
52
+ title: `${__props.title}移动端`,
53
+ viewWidth: 750,
54
+ style: { "max-width": "750px", "margin": "auto" }
55
+ }, null, 8, ["adkey", "title"])
338
56
  ]),
339
57
  _: 1
340
- }, 8, ["icon"])
58
+ })) : vue.createCommentVNode("", true)
341
59
  ]),
342
60
  _: 1
343
- }))
344
- ])), [
345
- [_directive_loading, loading.value]
346
- ]) : vue.createCommentVNode("", true);
61
+ }, 8, ["modelValue"])
62
+ ], 512)) : vue.createCommentVNode("", true);
347
63
  };
348
64
  }
349
65
  });