@maketribe/ms-app 3.2.44 → 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 (43) 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/nodes/ModuleDecoratorNode.js +1 -1
  4. package/dist/cjs/components/basic/lexical-editor/nodes/ModuleDecoratorNode.js.map +1 -1
  5. package/dist/cjs/components/basic/lexical-editor/utils/html.js +1 -19
  6. package/dist/cjs/components/basic/lexical-editor/utils/html.js.map +1 -1
  7. package/dist/cjs/components/basic/lexical-editor/utils/module.js.map +1 -1
  8. package/dist/cjs/modules/cms/cms-settings.js +5 -1
  9. package/dist/cjs/modules/cms/cms-settings.js.map +1 -1
  10. package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js +40 -324
  11. package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js.map +1 -1
  12. package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner.vue.js +362 -0
  13. package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner.vue.js.map +1 -0
  14. package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner.vue2.js +4 -0
  15. package/dist/cjs/modules/cms/pages/cms-contents/components/part-banner.vue2.js.map +1 -0
  16. package/dist/cjs/modules/cms/pages/cms-settigns/index.vue2.js +38 -15
  17. package/dist/cjs/modules/cms/pages/cms-settigns/index.vue2.js.map +1 -1
  18. package/dist/esm/components/basic/lexical-editor/assets/doc-editor.css.js +1 -1
  19. package/dist/esm/components/basic/lexical-editor/assets/doc-editor.css.js.map +1 -1
  20. package/dist/esm/components/basic/lexical-editor/nodes/ModuleDecoratorNode.js +1 -1
  21. package/dist/esm/components/basic/lexical-editor/nodes/ModuleDecoratorNode.js.map +1 -1
  22. package/dist/esm/components/basic/lexical-editor/utils/html.js +2 -20
  23. package/dist/esm/components/basic/lexical-editor/utils/html.js.map +1 -1
  24. package/dist/esm/components/basic/lexical-editor/utils/module.js.map +1 -1
  25. package/dist/esm/modules/cms/cms-settings.js +5 -1
  26. package/dist/esm/modules/cms/cms-settings.js.map +1 -1
  27. package/dist/esm/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js +41 -325
  28. package/dist/esm/modules/cms/pages/cms-contents/components/part-banner-edit.vue.js.map +1 -1
  29. package/dist/esm/modules/cms/pages/cms-contents/components/part-banner.vue.js +363 -0
  30. package/dist/esm/modules/cms/pages/cms-contents/components/part-banner.vue.js.map +1 -0
  31. package/dist/esm/modules/cms/pages/cms-contents/components/part-banner.vue2.js +5 -0
  32. package/dist/esm/modules/cms/pages/cms-contents/components/part-banner.vue2.js.map +1 -0
  33. package/dist/esm/modules/cms/pages/cms-settigns/index.vue2.js +38 -15
  34. package/dist/esm/modules/cms/pages/cms-settigns/index.vue2.js.map +1 -1
  35. package/dist/style/index.css +1 -1
  36. package/dist/style/modules/cms/index.css +1 -1
  37. package/dist/style/modules/cms/pages/cms-contents/components/mk-cms-part-banner.css +1 -1
  38. package/dist/style/modules/cms/pages/cms-contents/index.css +1 -1
  39. package/dist/style/src/modules/cms/pages/cms-contents/components/mk-cms-part-banner.scss +1 -0
  40. package/dist/types/components/basic/lexical-editor/nodes/ModuleDecoratorNode.d.ts +1 -3
  41. package/dist/types/modules/cms/cms-settings.d.ts +5 -1
  42. package/dist/types/modules/cms/pages/cms-contents/components/part-banner.vue.d.ts +32 -0
  43. 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;;"}
@@ -184,7 +184,7 @@ const getModuleData = (html, options) => {
184
184
  data[item.name] = val;
185
185
  }
186
186
  });
187
- return { data };
187
+ return data;
188
188
  };
189
189
  exports.$isModuleDecoratorNode = $isModuleDecoratorNode;
190
190
  exports.AttrMarkName = AttrMarkName;
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleDecoratorNode.js","sources":["../../../../../../src/components/basic/lexical-editor/nodes/ModuleDecoratorNode.ts"],"sourcesContent":["\r\nimport {\r\n type DOMConversionMap,\r\n type DOMExportOutput,\r\n type EditorConfig,\r\n type LexicalNode,\r\n type NodeKey,\r\n type Spread,\r\n type LexicalEditor,\r\n type DOMConversion,\r\n type LexicalCommand,\r\n createCommand\r\n} from 'lexical'\r\nimport { Component } from 'vue';\r\nimport { HtmlElementDecoratorNode,SerializedHtmlElementDecoratorNode } from \"./HtmlElementDecoratorNode\"\r\nimport { ModuleDecoratorWarpNode } from './ModuleDecoratorWarpNode';\r\n\r\n\r\n/**\r\n * 属性类型\r\n */\r\nexport type ModulePropType = { name:string,data:object };\r\n\r\n/**\r\n * 插入模块模版块指令\r\n */\r\nexport const INSERT_MODULE_COMMAND: LexicalCommand<ModulePropType> = createCommand('INSERT_MODULE_COMMAND')\r\n\r\n/**\r\n * 节点序列化 \r\n */\r\nexport type SerializedModuleDecoratorNode = Spread<{ moduleName:string,moduleHtml:any }, SerializedHtmlElementDecoratorNode>\r\n\r\n\r\n// 属性标识\r\nexport const AttrMarkName = \"module-name\";\r\n\r\n/**\r\n * 模块\r\n * 会导致\r\n */\r\nexport class ModuleDecoratorNode extends HtmlElementDecoratorNode {\r\n\r\n __moduleName: string\r\n __moduleHtml: string\r\n\r\n\r\n static getType(): string { return \"module\"; }\r\n\r\n static clone(node: ModuleDecoratorNode): ModuleDecoratorNode {\r\n return new ModuleDecoratorNode(node.__moduleName,node.__moduleHtml,node.__class,node.__style,node.__key);\r\n }\r\n\r\n static importJSON(serializedNode: SerializedModuleDecoratorNode): ModuleDecoratorNode {\r\n return new ModuleDecoratorNode(serializedNode.moduleName,serializedNode.moduleHtml,serializedNode.class, serializedNode.style)\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n div: $covertModuleDecoratorNode,\r\n section: $covertModuleDecoratorNode,\r\n main : $covertModuleDecoratorNode ,\r\n header : $covertModuleDecoratorNode \r\n }\r\n }\r\n\r\n /**\r\n * \r\n * @param name \r\n * @param data \r\n * @param className \r\n * @param style \r\n * @param key \r\n */\r\n constructor(name:string,html:string,className?: string , style?: string, key?: NodeKey) {\r\n super(\"div\",className,style,key)\r\n this.__moduleName = name;\r\n this.__moduleHtml = html;\r\n }\r\n\r\n /**\r\n * 导出JSON\r\n * @returns \r\n */\r\n exportJSON(): SerializedModuleDecoratorNode {\r\n return {\r\n ...super.exportJSON(),\r\n type: this.getType(),\r\n moduleName:this.__moduleName,\r\n moduleHtml:this.__moduleHtml,\r\n version: 1\r\n }\r\n }\r\n\r\n /**\r\n * 创建渲染DOM\r\n * @param config \r\n * @returns \r\n */\r\n createDOM(config: EditorConfig): HTMLElement {\r\n\r\n const warpEl = super.createDOM(config)\r\n\r\n warpEl.innerHTML = this.__moduleHtml;\r\n\r\n if(warpEl.children.length > 1){\r\n throw new Error(\"定义模块模版的时候请用一个容器将模版内容包裹起来,不能有多个并列的元素!\");\r\n }\r\n\r\n const element = warpEl.children[0] as HTMLElement;\r\n\r\n // 模块名称标识\r\n element.setAttribute(AttrMarkName,this.__moduleName)\r\n element.setAttribute(\"node-key\",this.__key);\r\n\r\n return element;\r\n }\r\n\r\n /**\r\n * 隔离渲染函数\r\n * @param editor \r\n * @param config \r\n * @returns \r\n */\r\n decorate(editor: LexicalEditor, config: EditorConfig): Component | null {\r\n return null;\r\n }\r\n \r\n /**\r\n * 更新DOM\r\n * @param _prevNode \r\n * @param _dom \r\n * @param _config \r\n * @returns \r\n */\r\n updateDOM(prevNode: LexicalNode, dom: HTMLElement, config: EditorConfig): boolean {\r\n dom.innerHTML = this.__moduleHtml;\r\n return false;\r\n }\r\n\r\n /**\r\n * 设置 html\r\n * @param html \r\n * @returns \r\n */\r\n setHtml(html:string) {\r\n const self = this.getWritable();\r\n self.__moduleHtml = html || \"\";\r\n return this;\r\n }\r\n // /**\r\n // * 创建父亲\r\n // * */\r\n // createParentElementNode() {\r\n // return new ModuleDecoratorWarpNode();\r\n // }\r\n // /**\r\n // * 必须有父亲\r\n // * @returns \r\n // */\r\n // isParentRequired() { return true; }\r\n}\r\n\r\n/**\r\n * 转换隔离节点DOM\r\n * @param node \r\n * @returns \r\n */\r\nconst $covertModuleDecoratorNode = (domNode: HTMLElement): DOMConversion<HTMLElement> | null => {\r\n\r\n try{\r\n \r\n const moduleName = domNode.getAttribute(AttrMarkName);\r\n const moduleHtml = domNode.outerHTML;\r\n\r\n return moduleName ? {\r\n conversion: () => {\r\n return {\r\n node: new ModuleDecoratorNode(moduleName,moduleHtml,domNode.getAttribute(\"class\") || \"\", domNode.getAttribute(\"style\") || \"\")\r\n };\r\n },\r\n priority: 3\r\n } : null;\r\n }\r\n catch(e){\r\n console.log(e)\r\n return null;\r\n }\r\n \r\n}\r\n\r\n\r\n/**\r\n * 判断是否是模块节点\r\n * @param node \r\n * @returns \r\n */\r\nexport function $isModuleDecoratorNode(\r\n node: ModuleDecoratorNode | LexicalNode | null | undefined,\r\n): node is ModuleDecoratorNode {\r\n return node instanceof ModuleDecoratorNode\r\n}\r\n\r\n\r\n// 元素属性列表\r\nconst ElAttrList = [\"src\",\"alt\",\"poster\",\"href\",\"_target\"];\r\n\r\n/**\r\n * 创建 模块 html\r\n * @param template \r\n * @param data \r\n */\r\nexport const createModuleHtml = (template:string,data:any)=>{\r\n\r\n const parser = new DOMParser();\r\n const element = parser.parseFromString(template,\"text/html\")\r\n const list = [element.body];\r\n\r\n Object.keys(data).forEach(key=>{\r\n\r\n for(let i=0;i<list.length;i++){\r\n\r\n const el = list[i];\r\n const val = data[key] as any;\r\n \r\n // 忽略文本节点\r\n if(el.nodeType != 3){\r\n // 属性解析\r\n if(ElAttrList.filter(attr=>el.hasAttribute(`data-${key}-${attr}`)).\r\n some(attr=> el.setAttribute(attr,val))){ break; }\r\n // 文本解析\r\n else if(el.hasAttribute(`data-${key}`)){\r\n el.textContent = val;\r\n break;\r\n }\r\n else if(el.hasAttribute(`data-${key}-html`)){\r\n el.innerHTML = val;\r\n break;\r\n } \r\n }\r\n\r\n // 广域递归\r\n if(el.childNodes.length){\r\n el.childNodes.forEach((sub:any)=>list.push(sub))\r\n }\r\n }\r\n })\r\n\r\n return element.body.innerHTML.replaceAll(/[\\r|\\n|\\r\\n]+/g,\"\")\r\n}\r\n\r\n/**\r\n * 获取模块数据 \r\n * @param template \r\n * @param data \r\n */\r\nexport const getModuleData = (html:string,options:Array<any>)=>{\r\n\r\n\r\n const parser = new DOMParser();\r\n const element = parser.parseFromString(html,\"text/html\")\r\n const list = [element.body];\r\n const data:any = {};\r\n\r\n options.forEach(item=>{\r\n\r\n for(let i=0;i<list.length;i++){\r\n\r\n const el = list[i];\r\n const val = \"\";\r\n\r\n // 忽略文本节点\r\n if(el.nodeType != 3){\r\n // 属性解析\r\n if(ElAttrList.filter(attr=>el.hasAttribute(`data-${item.name}-${attr}`)).\r\n some(attr=> data[item.name] = el.getAttribute(attr))){ break; }\r\n // 文本解析\r\n else if(el.hasAttribute(`data-${item.name}`)){\r\n data[item.name] = el.textContent;\r\n break;\r\n }\r\n // html 解析\r\n else if(el.hasAttribute(`data-${item.name}-html`)){\r\n data[item.name] = el.innerHTML;\r\n break;\r\n } \r\n }\r\n\r\n // 广域递归\r\n if(el.childNodes.length){\r\n el.childNodes.forEach((sub:any)=>list.push(sub))\r\n }\r\n\r\n data[item.name] = val;\r\n }\r\n })\r\n\r\n return { data }\r\n}\r\n"],"names":["createCommand","HtmlElementDecoratorNode"],"mappings":"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"}
1
+ {"version":3,"file":"ModuleDecoratorNode.js","sources":["../../../../../../src/components/basic/lexical-editor/nodes/ModuleDecoratorNode.ts"],"sourcesContent":["\r\nimport {\r\n type DOMConversionMap,\r\n type DOMExportOutput,\r\n type EditorConfig,\r\n type LexicalNode,\r\n type NodeKey,\r\n type Spread,\r\n type LexicalEditor,\r\n type DOMConversion,\r\n type LexicalCommand,\r\n createCommand\r\n} from 'lexical'\r\nimport { Component } from 'vue';\r\nimport { HtmlElementDecoratorNode,SerializedHtmlElementDecoratorNode } from \"./HtmlElementDecoratorNode\"\r\nimport { ModuleDecoratorWarpNode } from './ModuleDecoratorWarpNode';\r\n\r\n\r\n/**\r\n * 属性类型\r\n */\r\nexport type ModulePropType = { name:string,data:object };\r\n\r\n/**\r\n * 插入模块模版块指令\r\n */\r\nexport const INSERT_MODULE_COMMAND: LexicalCommand<ModulePropType> = createCommand('INSERT_MODULE_COMMAND')\r\n\r\n/**\r\n * 节点序列化 \r\n */\r\nexport type SerializedModuleDecoratorNode = Spread<{ moduleName:string,moduleHtml:any }, SerializedHtmlElementDecoratorNode>\r\n\r\n\r\n// 属性标识\r\nexport const AttrMarkName = \"module-name\";\r\n\r\n/**\r\n * 模块\r\n * 会导致\r\n */\r\nexport class ModuleDecoratorNode extends HtmlElementDecoratorNode {\r\n\r\n __moduleName: string\r\n __moduleHtml: string\r\n\r\n\r\n static getType(): string { return \"module\"; }\r\n\r\n static clone(node: ModuleDecoratorNode): ModuleDecoratorNode {\r\n return new ModuleDecoratorNode(node.__moduleName,node.__moduleHtml,node.__class,node.__style,node.__key);\r\n }\r\n\r\n static importJSON(serializedNode: SerializedModuleDecoratorNode): ModuleDecoratorNode {\r\n return new ModuleDecoratorNode(serializedNode.moduleName,serializedNode.moduleHtml,serializedNode.class, serializedNode.style)\r\n }\r\n\r\n static importDOM(): DOMConversionMap | null {\r\n return {\r\n div: $covertModuleDecoratorNode,\r\n section: $covertModuleDecoratorNode,\r\n main : $covertModuleDecoratorNode ,\r\n header : $covertModuleDecoratorNode \r\n }\r\n }\r\n\r\n /**\r\n * \r\n * @param name \r\n * @param data \r\n * @param className \r\n * @param style \r\n * @param key \r\n */\r\n constructor(name:string,html:string,className?: string , style?: string, key?: NodeKey) {\r\n super(\"div\",className,style,key)\r\n this.__moduleName = name;\r\n this.__moduleHtml = html;\r\n }\r\n\r\n /**\r\n * 导出JSON\r\n * @returns \r\n */\r\n exportJSON(): SerializedModuleDecoratorNode {\r\n return {\r\n ...super.exportJSON(),\r\n type: this.getType(),\r\n moduleName:this.__moduleName,\r\n moduleHtml:this.__moduleHtml,\r\n version: 1\r\n }\r\n }\r\n\r\n /**\r\n * 创建渲染DOM\r\n * @param config \r\n * @returns \r\n */\r\n createDOM(config: EditorConfig): HTMLElement {\r\n\r\n const warpEl = super.createDOM(config)\r\n\r\n warpEl.innerHTML = this.__moduleHtml;\r\n\r\n if(warpEl.children.length > 1){\r\n throw new Error(\"定义模块模版的时候请用一个容器将模版内容包裹起来,不能有多个并列的元素!\");\r\n }\r\n\r\n const element = warpEl.children[0] as HTMLElement;\r\n\r\n // 模块名称标识\r\n element.setAttribute(AttrMarkName,this.__moduleName)\r\n element.setAttribute(\"node-key\",this.__key);\r\n\r\n return element;\r\n }\r\n\r\n /**\r\n * 隔离渲染函数\r\n * @param editor \r\n * @param config \r\n * @returns \r\n */\r\n decorate(editor: LexicalEditor, config: EditorConfig): Component | null {\r\n return null;\r\n }\r\n \r\n /**\r\n * 更新DOM\r\n * @param _prevNode \r\n * @param _dom \r\n * @param _config \r\n * @returns \r\n */\r\n updateDOM(prevNode: LexicalNode, dom: HTMLElement, config: EditorConfig): boolean {\r\n dom.innerHTML = this.__moduleHtml;\r\n return false;\r\n }\r\n\r\n /**\r\n * 设置 html\r\n * @param html \r\n * @returns \r\n */\r\n setHtml(html:string) {\r\n const self = this.getWritable();\r\n self.__moduleHtml = html || \"\";\r\n return this;\r\n }\r\n // /**\r\n // * 创建父亲\r\n // * */\r\n // createParentElementNode() {\r\n // return new ModuleDecoratorWarpNode();\r\n // }\r\n // /**\r\n // * 必须有父亲\r\n // * @returns \r\n // */\r\n // isParentRequired() { return true; }\r\n}\r\n\r\n/**\r\n * 转换隔离节点DOM\r\n * @param node \r\n * @returns \r\n */\r\nconst $covertModuleDecoratorNode = (domNode: HTMLElement): DOMConversion<HTMLElement> | null => {\r\n\r\n try{\r\n \r\n const moduleName = domNode.getAttribute(AttrMarkName);\r\n const moduleHtml = domNode.outerHTML;\r\n\r\n return moduleName ? {\r\n conversion: () => {\r\n return {\r\n node: new ModuleDecoratorNode(moduleName,moduleHtml,domNode.getAttribute(\"class\") || \"\", domNode.getAttribute(\"style\") || \"\")\r\n };\r\n },\r\n priority: 3\r\n } : null;\r\n }\r\n catch(e){\r\n console.log(e)\r\n return null;\r\n }\r\n \r\n}\r\n\r\n\r\n/**\r\n * 判断是否是模块节点\r\n * @param node \r\n * @returns \r\n */\r\nexport function $isModuleDecoratorNode(\r\n node: ModuleDecoratorNode | LexicalNode | null | undefined,\r\n): node is ModuleDecoratorNode {\r\n return node instanceof ModuleDecoratorNode\r\n}\r\n\r\n\r\n// 元素属性列表\r\nconst ElAttrList = [\"src\",\"alt\",\"poster\",\"href\",\"_target\"];\r\n\r\n/**\r\n * 创建 模块 html\r\n * @param template \r\n * @param data \r\n */\r\nexport const createModuleHtml = (template:string,data:any)=>{\r\n\r\n const parser = new DOMParser();\r\n const element = parser.parseFromString(template,\"text/html\")\r\n const list = [element.body];\r\n\r\n Object.keys(data).forEach(key=>{\r\n\r\n for(let i=0;i<list.length;i++){\r\n\r\n const el = list[i];\r\n const val = data[key] as any;\r\n \r\n // 忽略文本节点\r\n if(el.nodeType != 3){\r\n // 属性解析\r\n if(ElAttrList.filter(attr=>el.hasAttribute(`data-${key}-${attr}`)).\r\n some(attr=> el.setAttribute(attr,val))){ break; }\r\n // 文本解析\r\n else if(el.hasAttribute(`data-${key}`)){\r\n el.textContent = val;\r\n break;\r\n }\r\n else if(el.hasAttribute(`data-${key}-html`)){\r\n el.innerHTML = val;\r\n break;\r\n } \r\n }\r\n\r\n // 广域递归\r\n if(el.childNodes.length){\r\n el.childNodes.forEach((sub:any)=>list.push(sub))\r\n }\r\n }\r\n })\r\n\r\n return element.body.innerHTML.replaceAll(/[\\r|\\n|\\r\\n]+/g,\"\")\r\n}\r\n\r\n/**\r\n * 获取模块数据 \r\n * @param template \r\n * @param data \r\n */\r\nexport const getModuleData = (html:string,options:Array<any>)=>{\r\n\r\n\r\n const parser = new DOMParser();\r\n const element = parser.parseFromString(html,\"text/html\")\r\n const list = [element.body];\r\n const data:any = {};\r\n\r\n options.forEach(item=>{\r\n\r\n for(let i=0;i<list.length;i++){\r\n\r\n const el = list[i];\r\n const val = \"\";\r\n\r\n // 忽略文本节点\r\n if(el.nodeType != 3){\r\n // 属性解析\r\n if(ElAttrList.filter(attr=>el.hasAttribute(`data-${item.name}-${attr}`)).\r\n some(attr=> data[item.name] = el.getAttribute(attr))){ break; }\r\n // 文本解析\r\n else if(el.hasAttribute(`data-${item.name}`)){\r\n data[item.name] = el.textContent;\r\n break;\r\n }\r\n // html 解析\r\n else if(el.hasAttribute(`data-${item.name}-html`)){\r\n data[item.name] = el.innerHTML;\r\n break;\r\n } \r\n }\r\n\r\n // 广域递归\r\n if(el.childNodes.length){\r\n el.childNodes.forEach((sub:any)=>list.push(sub))\r\n }\r\n\r\n data[item.name] = val;\r\n }\r\n })\r\n\r\n return data\r\n}\r\n"],"names":["createCommand","HtmlElementDecoratorNode"],"mappings":"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"}
@@ -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":";;;;;;;;;;;;;;;;;;;AAyBA,MAAM,YAAY,IAAI;AAMtB,MAAM,uBAAuB,SAAS,sBAAsB,oBAAgD;AAE1G,aAAW,QAAQ,oBAAoB;AAEjC,QAAA,KAAK,eAAe,aAAaA,oCAA4B;AAC1D,WAAA,YAAYC,8BAAsB;AAAA,IACzC;AAAA,EACF;AAEA,aAAW,QAAQ,oBAAoB;AAGlC,QAAAC,QAAAA,eAAe,IAAI,GAAE;AAEhB,YAAA,WAAW,KAAK;AAEtB,iBAAW,SAAS,UAAU;AAE5B,aAAK,aAAa,KAAK;AAAA,MAEzB;AAEA,WAAK,OAAO;AAAA,IACd;AAAA,EACF;AACF;AAGA,MAAM,wBAAwB,SAAS,SAAqB,QAAsB;AAE1E,QAAA,EAAG,SAAa,IAAA;AAEtB,QAAM,oBAAoB,OAAO,iBAAiB,IAAI,SAAS,aAAa;AAE5E,MAAI,oBAAoB;AAExB,MAAI,sBAAsB,QAAW;AAEnC,eAAW,oBAAoB,mBAAmB;AAE1C,YAAA,gBAAgB,iBAAiB,OAAO;AAG1C,UAAA,kBAAkB,SAAS,sBAAsB,SAAS,kBAAkB,YAAY,MAAM,cAAc,YAAY,KAAK;AAE3G,4BAAA;AAAA,MACtB;AAAA,IACF;AAAA,EAEF;AAEO,SAAA,sBAAsB,OAAO,kBAAkB,aAAa;AACrE;AASA,MAAM,wBAAwB,SAAU,SAAuB,OAAqB,iBAA0B;AAEtG,QAAA,YAAY,QAAQ,MAAM;AAChC,QAAM,MAAM,CAAA;AACZ,MAAI,oBAAoB,CAAA;AAExB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAE/B,UAAA,OAAO,MAAM,CAAC;AAEhB,QAAAC,QAAAA,oBAAoB,IAAI,GAAG;AAE7B,UAAI,aAAa,CAAC,KAAK,aAAa;AAClC,aAAK,UAAU,SAA8B;AAAA,MAC/C;AAEA,UAAI,KAAK,IAAI;AAAA,IAAA,OAEV;AAEH,wBAAkB,KAAK,IAAI;AAE3B,UAAI,MAAM,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,KAAKA,QAAAA,oBAAoB,MAAM,IAAI,CAAC,CAAC,GAAG;AACvF,cAAM,UAAU;AAChB,gBAAQ,UAAU,SAAS;AACnB,gBAAA,OAAO,GAAG,iBAAiB;AACnC,YAAI,KAAK,OAAO;AAChB,4BAAoB,CAAA;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AACO,SAAA;AACT;AAEA,MAAM,iCAAiC,SAAU,MAAkB;AAEjE,MAAI,KAAK,eAAe,QAAQ,KAAK,mBAAmB,MAAM;AACrD,WAAA;AAAA,EACT;AAEA,SAAOC,QAAAA,gBAAgB,KAAK,WAAW,KAAKA,QAAAA,gBAAgB,KAAK,eAAe;AAClF;AAaA,MAAM,yBAAyB,SAAU,MAAkB,QAAsB,oBAAkC,6BAAqC,cAAc,oBAAI,IAAI,GAAG,mBAAgC;AAG/M,MAAI,eAA6B,CAAA;AAEjC,MAAI,qBAAqB;AAMnB,QAAA,oBAAoB,sBAAsB,MAAM,MAAM;AAE5D,QAAM,kBAAkB,oBAAoB,kBAAkB,IAAI,IAAI;AAEtE,MAAI,gBAAgB;AAEpB,MAAI,oBAAoB,MAAM;AAE1B,oBAAgB,gBAAgB;AAEhC,UAAM,iBAAiB,gBAAgB;AAElB,yBAAA,MAAM,QAAQ,cAAc,IAAI,eAAe,eAAe,SAAS,CAAC,IAAI;AAEjG,QAAI,uBAAuB,MAAM;AAE7B,iBAAW,CAAA,EAAG,gBAAgB,KAAK,aAAa;AAEvB,6BAAA,iBAAiB,oBAAoB,iBAAiB;AAE3E,YAAI,CAAC,oBAAoB;AAAE;AAAA,QAAO;AAAA,MACtC;AAEA,UAAI,oBAAoB;AACP,qBAAA,KAAK,GAAI,MAAM,QAAQ,cAAc,IAAI,iBAAiB,CAAC,kBAAkB,CAAE;AAAA,MAChG;AAAA,IACJ;AAEI,QAAA,gBAAgB,YAAY,MAAM;AAClC,kBAAY,IAAI,KAAK,UAAU,gBAAgB,QAAQ;AAAA,IAC3D;AAAA,EACJ;AAKM,QAAA,WAAWC,MAAAA,eAAe,IAAI,KAAK,KAAK,aAAaC,oBAAAA,YAAY,IAAI,CAAA,IAAK,KAAK;AAErF,MAAI,oBAAoB,CAAA;AAElB,QAAA,yCACF,sBAAsB,SAElBC,QAAAA,oBAAoB,kBAAkB,IAAI,QACvC,sBAAsB,QAAQJ,QAAAA,oBAAoB,kBAAkB,KAAK;AAGpF,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,sBAAkB,KAAK,GAAG,uBAAuB,SAAS,CAAC,GAAkB,QAAQ,oBAAoB,wCAAwC,IAAI,IAAI,WAAW,GAAG,kBAAkB,CAAC;AAAA,EAC5L;AAEA,MAAI,iBAAiB,MAAM;AACzB,wBAAoB,cAAc,iBAAiB;AAAA,EACrD;AAEI,MAAAE,MAAAA,eAAe,IAAI,GAAG;AAExB,QAAI,CAAC,wCAAwC;AACvB,0BAAA,sBAAsB,MAAM,mBAAmBG,QAAoB,oBAAA;AAAA,IAAA,OAEpF;AAEiB,0BAAA,sBAAsB,MAAM,mBAAmB,MAAM;AAEjE,cAAA,iBAAiB,IAAIR,QAAAA;AAE3B,2BAAmB,KAAK,cAAc;AAE/B,eAAA;AAAA,MAAA,CACR;AAAA,IACH;AAAA,EACF;AAEA,MAAI,sBAAsB,MAAM;AAE1B,QAAA,kBAAkB,SAAS,GAAG;AAGjB,qBAAA,aAAa,OAAO,iBAAiB;AAAA,IAAA,OAEjD;AACH,UAAIK,MAAe,eAAA,IAAI,KAAK,+BAA+B,IAAI,GAAG;AAEjD,uBAAA,aAAa,OAAOJ,QAAAA,qBAAsB,CAAA;AAAA,MAC3D;AAAA,IACF;AAAA,EAAA,WAEOC,QAAAA,eAAe,kBAAkB,GAAG;AAG1B,uBAAA,OAAO,GAAG,iBAAiB;AAAA,EAC9C;AACO,SAAA;AACT;AAGO,MAAM,wBAAwB,SAAS,sBAAsB,QAAsB,MAAa;AAEjG,MAAA;AACF,UAAM,MAAO,UAAU,gBAAgB,MAAK,WAAW;AAEjD,UAAA,WAAW,IAAI,KAAK;AAE1B,QAAI,eAA6B,CAAA;AAEjC,UAAM,qBAAmC,CAAA;AAEzC,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AAElC,UAAA,UAAU,SAAS,CAAC;AAGrB,UAAA,CAACG,MAAAA,eAAe,OAAO,KAAK,QAAQ,aAAa,QAAQ,QAAQ,aAAa,QAAO;AAEhF,cAAA,IAAI,SAAS,cAAc,GAAG;AAEpC,YAAG,mBAAmB,MAAK;AAEzB,YAAE,cAAc,QAAQ;AAAA,QAAA,OAGtB;AACF,YAAE,YAAY,QAAQ;AAAA,QACxB;AAEU,kBAAA;AAAA,MAEZ;AAEA,YAAM,cAAc,uBAAuB,SAAS,QAAQ,oBAAmB,KAAK;AAEpF,UAAI,gBAAgB,MAAM;AACP,uBAAA,aAAa,OAAO,WAAW;AAAA,MAClD;AAAA,IACJ;AACA,yBAAqB,kBAAkB;AAChC,WAAA;AAAA,WACA,OAAO;AACR,UAAA;AAAA,EACR;AACF;AAUA,MAAM,oBAAoB,SAAU,QAAsB,aAAyB,eAA4CI,cAA4D,MAAM;AAE/L,MAAI,gBAAgBA,gBAAc,OAAO,YAAY,WAAWA,WAAS,IAAI;AAE7E,QAAM,gBAAgBP,QAAAA,eAAe,WAAW,KAAK,YAAY,gBAAgB,MAAM;AAEvF,MAAI,SAAS;AAEb,MAAIO,gBAAc,MAAM;AAEhB,QAAA,QAAQC,6BAAqB,WAAW;AAEpC,YAAAC,QAAAA,YAAY,KAAK,KAAKF,gBAAc,OAAOG,UAAAA,8BAA8BH,aAAW,KAAK,IAAI;AAE5F,aAAA;AAAA,EACb;AAEA,QAAM,WAAWP,QAAAA,eAAe,MAAM,IAAI,OAAO,gBAAgB;AACjE,QAAM,iBAAiB,OAAO,OAAO,IAAI,OAAO,SAAS;AAErD,MAAA;AAGA,MAAA,kBAAkB,eAAe,cAAc,QAAW;AAC7C,mBAAA,eAAe,UAAU,QAAQ,MAAM;AAAA,EAAA,OAEnD;AACY,mBAAA,OAAO,UAAU,MAAM;AAAA,EACxC;AAEM,QAAA,EAAE,SAAU,MAAU,IAAA;AAE5B,MAAI,CAAC,SAAS;AACL,WAAA;AAAA,EACT;AAEM,QAAA,WAAW,SAAS;AAE1B,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AAElC,UAAA,YAAY,SAAS,CAAC;AAC5B,UAAM,qBAAqB,kBAAkB,QAAQ,WAAW,UAAUO,WAAS;AAE/E,QAAA,CAAC,iBAAiBP,uBAAe,WAAW,KAAK,sBAAsB,YAAY,iBAAiB,WAAWO,aAAW,MAAM,GAAG;AACrH,sBAAA;AAAA,IAClB;AAAA,EACF;AAEI,MAAA,iBAAiB,CAAC,eAAe;AAE/B,QAAAI,QAAAA,cAAc,OAAO,GAAG;AAAE,cAAQ,OAAO,QAAQ;AAAA,IAAG;AAExD,kBAAc,OAAO,OAAO;AAE5B,QAAI,OAAO;AAET,YAAM,aAAa,MAAM,KAAK,QAAQ,OAAO;AAE7C,UAAI,YAAY;AAAE,gBAAQ,YAAY,UAAU;AAAA,MAAG;AAAA,IACrD;AAAA,EAAA,OAGG;AACH,kBAAc,OAAO,QAAQ;AAAA,EAC/B;AAEO,SAAA;AACT;AAQO,MAAM,wBAAwB,SAAS,uBAAuB,QAAsBJ,YAA0B;AAGnH,MAAI,OAAO,aAAa,eAAe,OAAO,WAAW,aAAa;AAC9D,UAAA,IAAI,MAAM,gJAAgJ;AAAA,EAClK;AAEM,QAAA,YAAY,SAAS,cAAc,KAAK;AAC9C,QAAM,OAAOK,QAAAA;AACP,QAAA,mBAAmB,KAAK;AAE9B,WAAS,IAAI,GAAG,IAAI,iBAAiB,QAAQ,KAAK;AAE1C,UAAA,eAAe,iBAAiB,CAAC;AAErB,sBAAA,QAAQ,cAAc,WAAWL,UAAS;AAAA,EAE9D;AAEA,SAAO,oBAAoB,WAAU,CAAC,EAAE,UAAU,KAAK;AACzD;AAQa,MAAA,sBAAsB,SAAU,MAAe,OAAe;AACnE,QAAA,eAAe,MAAM,KAAK,EAAE,QAAQ,UAAU,EAAG,CAAA,EAAE,KAAK,IAAI;AAC5D,QAAA,cAAc,MAAM,KAAK,EAAE,QAAQ,QAAQ,GAAG,EAAE,KAAK,IAAI;AAC3D,MAAA;AAEJ,WAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,eAAW,SAAS,eAAe;AAAA,EAAK,YAAY,EAAE;AACtD,SAAK,aAAa,UAAU,KAAK,SAAS,CAAC,CAAC;AAC5C,wBAAoB,KAAK,SAAS,CAAC,GAAG,KAAK;AAC3C,QAAI,KAAK,qBAAqB,KAAK,SAAS,CAAC,GAAG;AAC9C,iBAAW,SAAS,eAAe;AAAA,EAAK,WAAW,EAAE;AACrD,WAAK,YAAY,QAAQ;AAAA,IAC3B;AAAA,EACF;AACO,SAAA;AACT;;;;"}
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;;;"}