提交 2f38b3c8 authored 作者: 王鹏飞's avatar 王鹏飞

refactor(admin): host inline editor dialogs

上级 a24389d3
import { Modal } from 'antd'
import LinkDialog from './LinkDialog'
export default function LinkFeatureDialog({ open, onClose, payload, runtime }) {
return <Modal open={open} footer={null} centered destroyOnHidden title="链接" classNames={{ header: 'editor-header-customer', body: 'editor-body-customer', wrapper: 'editor-wrapper-customer' }} maskClosable={false} onCancel={onClose}>
<LinkDialog editor={runtime.editor} chapterId={runtime.chapterId} bookId={runtime.bookId} gData={runtime.gData} linkInfo={payload} selectionSize={payload.selectionSize || 18} setLinkInfo={() => {}} setLinkVisible={visible => !visible && onClose()} />
</Modal>
}
import { defineEditorFeature } from '../../core/define-editor-feature' import { defineEditorFeature } from '../../core/define-editor-feature'
import menu from './menu' import menu from './menu'
import nodeModule from './node' import nodeModule from './node'
import { openEditorDialog } from '../../core/editor-dialog'
import { getSelectionFontSize } from '../../core/selection'
import LinkFeatureDialog from './FeatureDialog'
export default defineEditorFeature({ export default defineEditorFeature({
id: 'link', id: 'link',
menus: [{ order: 120, config: menu }], menus: [{ order: 120, config: menu }],
nodeModules: [{ order: 110, types: ['chapterLink'], module: nodeModule }], nodeModules: [{ order: 110, types: ['chapterLink'], module: nodeModule }],
events: [{ name: 'CustomerLinkClick', handler: ({ runtime }) => { runtime.captureSelectionFontSize(); runtime.openLink() } }], dialogs: [{ id: 'link.insert', component: LinkFeatureDialog }, { id: 'link.edit', component: LinkFeatureDialog }],
events: [{ name: 'CustomerLinkClick', handler: ({ editor }) => openEditorDialog(editor, 'link.insert', { selectionSize: getSelectionFontSize(editor) }) }],
}) })
...@@ -3,6 +3,7 @@ import icon_tooltip_editor from "@/assets/images/editor/icon_tooltip_editor.png" ...@@ -3,6 +3,7 @@ import icon_tooltip_editor from "@/assets/images/editor/icon_tooltip_editor.png"
import { h } from "snabbdom"; import { h } from "snabbdom";
import iconLink from "@/assets/images/editor/icon_link_editor.png"; import iconLink from "@/assets/images/editor/icon_link_editor.png";
import "../../utils/iconfont"; import "../../utils/iconfont";
import { openEditorDialog } from '../../core/editor-dialog'
const withChapterLinkNode = (editor) => { const withChapterLinkNode = (editor) => {
const { isInline, isVoid, normalizeNode } = editor; const { isInline, isVoid, normalizeNode } = editor;
...@@ -90,7 +91,7 @@ const renderChapterLink = (elem, children, editor) => { ...@@ -90,7 +91,7 @@ const renderChapterLink = (elem, children, editor) => {
ev.stopPropagation(); ev.stopPropagation();
ev.preventDefault(); ev.preventDefault();
editor.emit("wangeditor-customer:legacy-dialog", { key: "linkNum", payload: { openEditorDialog(editor, 'link.edit', {
title, title,
linktype, linktype,
random: random, random: random,
...@@ -99,7 +100,7 @@ const renderChapterLink = (elem, children, editor) => { ...@@ -99,7 +100,7 @@ const renderChapterLink = (elem, children, editor) => {
chapters, chapters,
theme, theme,
fontsize, fontsize,
} }); })
} /* 其他... */, } /* 其他... */,
}, },
}, },
......
import { Modal } from 'antd'
import TooltipDialog from './TooltipDialog'
export default function TooltipFeatureDialog({ open, onClose, payload, runtime }) {
return <Modal open={open} footer={null} centered destroyOnHidden title="气泡" classNames={{ header: 'editor-header-customer', body: 'editor-body-customer', wrapper: 'editor-wrapper-customer' }} maskClosable={false} onCancel={onClose}>
<TooltipDialog editor={runtime.editor} chapterId={runtime.chapterId} bookId={runtime.bookId} tooltipInfo={payload} selectionSize={payload.selectionSize || 18} setTooltipInfo={() => {}} setTooltipVisible={visible => !visible && onClose()} />
</Modal>
}
import { defineEditorFeature } from '../../core/define-editor-feature' import { defineEditorFeature } from '../../core/define-editor-feature'
import menu from './menu' import menu from './menu'
import nodeModule from './node' import nodeModule from './node'
import { openEditorDialog } from '../../core/editor-dialog'
import { getSelectionFontSize } from '../../core/selection'
import TooltipFeatureDialog from './FeatureDialog'
export default defineEditorFeature({ export default defineEditorFeature({
id: 'tooltip', id: 'tooltip',
menus: [{ order: 70, config: menu }], menus: [{ order: 70, config: menu }],
nodeModules: [{ order: 100, types: ['chapterTooltip'], module: nodeModule }], nodeModules: [{ order: 100, types: ['chapterTooltip'], module: nodeModule }],
events: [{ name: 'TooltipMenuClick', handler: ({ runtime }) => { runtime.captureSelectionFontSize(); runtime.openTooltip() } }], dialogs: [{ id: 'tooltip.insert', component: TooltipFeatureDialog }, { id: 'tooltip.edit', component: TooltipFeatureDialog }],
events: [{ name: 'TooltipMenuClick', handler: ({ editor }) => openEditorDialog(editor, 'tooltip.insert', { selectionSize: getSelectionFontSize(editor) }) }],
}) })
...@@ -3,6 +3,7 @@ import icon_tooltip_editor from "@/assets/images/editor/icon_tooltip_editor.png" ...@@ -3,6 +3,7 @@ import icon_tooltip_editor from "@/assets/images/editor/icon_tooltip_editor.png"
import { h } from "snabbdom"; import { h } from "snabbdom";
import "../../utils/iconfont"; import "../../utils/iconfont";
import { escapeHtml } from "../../utils/html"; import { escapeHtml } from "../../utils/html";
import { openEditorDialog } from '../../core/editor-dialog'
const withChapterTooltipNode = (editor) => { const withChapterTooltipNode = (editor) => {
const { isInline, isVoid, normalizeNode } = editor; const { isInline, isVoid, normalizeNode } = editor;
...@@ -118,7 +119,7 @@ const renderChapterTooltip = (elem, children, editor) => { ...@@ -118,7 +119,7 @@ const renderChapterTooltip = (elem, children, editor) => {
ev.stopPropagation(); ev.stopPropagation();
ev.preventDefault(); ev.preventDefault();
editor.emit("wangeditor-customer:legacy-dialog", { key: "tooltipNum", payload: { openEditorDialog(editor, 'tooltip.edit', {
title, title,
tooltipType, tooltipType,
random: random, random: random,
...@@ -127,7 +128,7 @@ const renderChapterTooltip = (elem, children, editor) => { ...@@ -127,7 +128,7 @@ const renderChapterTooltip = (elem, children, editor) => {
content, content,
i: Math.random(), i: Math.random(),
fontsize, fontsize,
} }); })
} /* 其他... */, } /* 其他... */,
}, },
}, },
......
...@@ -24,8 +24,6 @@ dayjs.extend(relativeTime); ...@@ -24,8 +24,6 @@ dayjs.extend(relativeTime);
import PracticeModal from "../features/practice/PracticeInsertDialog"; import PracticeModal from "../features/practice/PracticeInsertDialog";
import TooltipModal from "../features/tooltip/TooltipDialog";
import LinkModal from "../features/link/LinkDialog";
import ExpandModal from "../features/expand-read/ExpandReadDialog"; import ExpandModal from "../features/expand-read/ExpandReadDialog";
import PracticeSettingModal from "../features/practice/PracticeSettingsDialog"; import PracticeSettingModal from "../features/practice/PracticeSettingsDialog";
...@@ -71,10 +69,6 @@ const WangEditorCustomer = (props, ref) => { ...@@ -71,10 +69,6 @@ const WangEditorCustomer = (props, ref) => {
const [practiceOpenVisible, setPracticeOpenVisible] = useState(false); // 练习 const [practiceOpenVisible, setPracticeOpenVisible] = useState(false); // 练习
const [practiceVisible, setPracticeVisible] = useState(false); // 练习答题设置 const [practiceVisible, setPracticeVisible] = useState(false); // 练习答题设置
const [tooltipVisible, setTooltipVisible] = useState(false); // 气泡框
const [tooltipInfo, setTooltipInfo] = useState({}); // 气泡框
const [linkVisible, setLinkVisible] = useState(false); // 气泡框
const [linkInfo, setLinkInfo] = useState({}); // 气泡框
const [expandVisible, setExpandVisible] = useState(false); // 扩展阅读 const [expandVisible, setExpandVisible] = useState(false); // 扩展阅读
const [expandInfo, setExpandInfo] = useState({}); // 扩展阅读内容 const [expandInfo, setExpandInfo] = useState({}); // 扩展阅读内容
...@@ -88,12 +82,6 @@ const WangEditorCustomer = (props, ref) => { ...@@ -88,12 +82,6 @@ const WangEditorCustomer = (props, ref) => {
const { practiceNum, title, theme } = payload; const { practiceNum, title, theme } = payload;
dispatch(setPracticeRandom({ practiceNum, practiceTitle: title, practiceTheme: theme })); dispatch(setPracticeRandom({ practiceNum, practiceTitle: title, practiceTheme: theme }));
setPracticeVisible(true); setPracticeVisible(true);
} else if (key === "tooltipNum") {
setTooltipInfo(payload);
setTooltipVisible(true);
} else if (key === "linkNum") {
setLinkInfo(payload);
setLinkVisible(true);
} else if (key === "chapterExpand") { } else if (key === "chapterExpand") {
setExpandInfo(payload); setExpandInfo(payload);
setExpandVisible(true); setExpandVisible(true);
...@@ -222,7 +210,6 @@ const WangEditorCustomer = (props, ref) => { ...@@ -222,7 +210,6 @@ const WangEditorCustomer = (props, ref) => {
], ],
}; };
const tooltipRef = useRef();
const practiceRef = useRef(); const practiceRef = useRef();
const practiceSettingRef = useRef(); const practiceSettingRef = useRef();
const previewRef = useRef(); const previewRef = useRef();
...@@ -311,8 +298,6 @@ const WangEditorCustomer = (props, ref) => { ...@@ -311,8 +298,6 @@ const WangEditorCustomer = (props, ref) => {
const featureRuntime = { const featureRuntime = {
openPractice: () => setPracticeOpenVisible(true), openPractice: () => setPracticeOpenVisible(true),
openTooltip: () => setTooltipVisible(true),
openLink: () => setLinkVisible(true),
openExpandRead: () => setExpandVisible(true), openExpandRead: () => setExpandVisible(true),
captureSelectionFontSize: () => { captureSelectionFontSize: () => {
if (editor?.selection) listenNodeStyle(editor.selection.anchor.path) if (editor?.selection) listenNodeStyle(editor.selection.anchor.path)
...@@ -425,58 +410,6 @@ const WangEditorCustomer = (props, ref) => { ...@@ -425,58 +410,6 @@ const WangEditorCustomer = (props, ref) => {
/> />
</Modal> </Modal>
<Modal
open={tooltipVisible}
footer={null}
centered
destroyOnHidden
title="气泡"
classNames={{
header: "editor-header-customer",
body: "editor-body-customer",
wrapper: "editor-wrapper-customer",
}}
maskClosable={false}
onCancel={() => setTooltipVisible(false)}
>
<TooltipModal
ref={tooltipRef}
editor={editor}
chapterId={chapterId}
bookId={bookId}
tooltipInfo={tooltipInfo}
setTooltipInfo={setTooltipInfo}
setTooltipVisible={setTooltipVisible}
selectionSize={selectionSize}
/>
</Modal>
<Modal
open={linkVisible}
footer={null}
centered
destroyOnHidden
title="链接"
classNames={{
header: "editor-header-customer",
body: "editor-body-customer",
wrapper: "editor-wrapper-customer",
}}
maskClosable={false}
onCancel={() => setLinkVisible(false)}
>
<LinkModal
ref={tooltipRef}
editor={editor}
chapterId={chapterId}
bookId={bookId}
gData={gData}
linkInfo={linkInfo}
setLinkInfo={setLinkInfo}
setLinkVisible={setLinkVisible}
selectionSize={selectionSize}
/>
</Modal>
{/* 扩展 */} {/* 扩展 */}
<Modal <Modal
open={expandVisible} open={expandVisible}
......
Markdown 格式
0% 或
您添加了 0 人 到此讨论。请谨慎行事。
请先完成此评论的编辑!
请 注册 或者 后发表评论