@formulaxjs/ckeditor5 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.global.js +25 -23
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
FORMULA_FLAG_ATTRIBUTE,
|
|
21
21
|
createFormulaMarkup,
|
|
22
22
|
ensureFormulaXModalStyles as ensureFormulaXModalStyles2,
|
|
23
|
-
|
|
23
|
+
mountFormulaXEditor as mountFormulaXEditor2
|
|
24
24
|
} from "@formulaxjs/editor";
|
|
25
25
|
|
|
26
26
|
// src/modal.ts
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
ensureFormulaXModalStyles,
|
|
29
29
|
escapeAttribute,
|
|
30
30
|
escapeHtml,
|
|
31
|
-
|
|
31
|
+
mountFormulaXEditor
|
|
32
32
|
} from "@formulaxjs/editor";
|
|
33
33
|
function openFormulaXModal(input) {
|
|
34
34
|
ensureFormulaXModalStyles(document);
|
|
@@ -59,7 +59,7 @@ function openFormulaXModal(input) {
|
|
|
59
59
|
root.remove();
|
|
60
60
|
return Promise.reject(new Error("[FormulaX] CKEditor 5 modal host not found."));
|
|
61
61
|
}
|
|
62
|
-
const mounted =
|
|
62
|
+
const mounted = mountFormulaXEditor(host, {
|
|
63
63
|
initialLatex: input.initialLatex,
|
|
64
64
|
height: input.options.editor.height,
|
|
65
65
|
autofocus: input.options.editor.autofocus,
|
|
@@ -411,7 +411,7 @@ function renderFormulaSvgMarkup(latex, options) {
|
|
|
411
411
|
host.style.pointerEvents = "none";
|
|
412
412
|
host.setAttribute("aria-hidden", "true");
|
|
413
413
|
document.body.appendChild(host);
|
|
414
|
-
const mounted =
|
|
414
|
+
const mounted = mountFormulaXEditor2(host, {
|
|
415
415
|
initialLatex: latex,
|
|
416
416
|
height: options.editor.height,
|
|
417
417
|
autofocus: false,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/plugin.ts","../src/modal.ts"],"sourcesContent":["export {\n DEFAULT_FORMULA_ATTRIBUTE,\n DEFAULT_FORMULA_CLASS,\n FORMULA_FLAG_ATTRIBUTE,\n} from '@formulaxjs/editor';\n\nexport {\n DEFAULT_BUTTON_NAME,\n DEFAULT_MODEL_NAME,\n FormulaX,\n FormulaXCommand,\n resolveOptions,\n} from './plugin';\n\nexport type {\n FormulaXCKEditor5Options,\n FormulaXPayload,\n RequiredFormulaXCKEditor5Options,\n} from './types';\n\nexport { openFormulaXModal } from './modal';\n\nexport { FormulaX as default } from './plugin';\n","import {\n ButtonView,\n Command,\n Plugin,\n Widget,\n toWidget,\n viewToModelPositionOutsideModelElement,\n} from 'ckeditor5';\nimport {\n DEFAULT_FORMULA_ATTRIBUTE,\n DEFAULT_FORMULA_CLASS,\n FORMULA_FLAG_ATTRIBUTE,\n createFormulaMarkup,\n ensureFormulaXModalStyles,\n mountFormulaXKityEditor,\n} from '@formulaxjs/editor';\nimport { openFormulaXModal } from './modal';\nimport type {\n FormulaXCKEditor5Options,\n FormulaXPayload,\n RequiredFormulaXCKEditor5Options,\n} from './types';\n\nconst DEFAULT_BUTTON_NAME = 'formulaX';\nconst DEFAULT_MODEL_NAME = 'formulaX';\n\nexport { DEFAULT_BUTTON_NAME, DEFAULT_MODEL_NAME };\n\nexport function resolveOptions(options: FormulaXCKEditor5Options = {}): RequiredFormulaXCKEditor5Options {\n return {\n name: options.name ?? DEFAULT_MODEL_NAME,\n buttonName: options.buttonName ?? DEFAULT_BUTTON_NAME,\n toolbarText: options.toolbarText ?? 'FormulaX',\n tooltip: options.tooltip ?? 'Insert or edit formula',\n cursorStyle: options.cursorStyle ?? 'pointer',\n formulaClassName: options.formulaClassName ?? DEFAULT_FORMULA_CLASS,\n formulaAttributeName: options.formulaAttributeName ?? DEFAULT_FORMULA_ATTRIBUTE,\n modal: {\n title: options.modal?.title ?? 'FormulaX Editor',\n insertText: options.modal?.insertText ?? 'Insert',\n updateText: options.modal?.updateText ?? 'Update',\n cancelText: options.modal?.cancelText ?? 'Cancel',\n closeOnBackdrop: options.modal?.closeOnBackdrop ?? true,\n },\n editor: {\n height: options.editor?.height ?? '100%',\n autofocus: options.editor?.autofocus ?? true,\n assets: options.editor?.assets ?? {},\n render: {\n fontsize: options.editor?.render?.fontsize ?? 40,\n },\n },\n };\n}\n\nexport class FormulaXCommand extends Command {\n private readonly options: RequiredFormulaXCKEditor5Options;\n\n constructor(editor: unknown, options: RequiredFormulaXCKEditor5Options) {\n super(editor as any);\n this.options = options;\n }\n\n override refresh(): void {\n this.isEnabled = true;\n }\n\n override execute(): void {\n const editor = this.editor as any;\n const selectedFormula = getSelectedFormulaModelElement(editor, this.options.name);\n const initialLatex = String(selectedFormula?.getAttribute('latex') ?? '');\n\n void openFormulaXModal({\n initialLatex,\n isUpdate: Boolean(selectedFormula),\n options: this.options,\n }).then((payload) => {\n if (!payload) return;\n applyFormulaPayload(editor, selectedFormula, payload, this.options.name);\n editor.editing.view.focus();\n });\n }\n}\n\nexport class FormulaX extends Plugin {\n static get pluginName(): string {\n return 'FormulaX';\n }\n\n static get requires(): readonly [typeof Widget] {\n return [Widget];\n }\n\n init(): void {\n const editor = this.editor as any;\n const options = resolveOptions(editor.config.get('formulaX') as FormulaXCKEditor5Options | undefined);\n\n if (hasRegisteredFormulaModelName(editor, options.name)) {\n console.error(\n `[FormulaX] CKEditor5 model name \"${options.name}\" is already registered. ` +\n 'Pass a unique \"name\" option to avoid schema collisions.',\n );\n return;\n }\n\n ensureFormulaXModalStyles(document);\n defineFormulaSchema(editor, options.name);\n defineFormulaConverters(editor, options);\n editor.editing.mapper.on(\n 'viewToModelPosition',\n viewToModelPositionOutsideModelElement(editor.model, isFormulaWidgetView),\n );\n\n const command = new FormulaXCommand(editor, options);\n editor.commands.add(options.buttonName, command);\n\n editor.ui.componentFactory.add(options.buttonName, (locale: unknown) => {\n const button = new ButtonView(locale as any);\n\n button.set({\n label: options.toolbarText,\n tooltip: options.tooltip,\n withText: true,\n });\n\n button.bind('isEnabled').to(command, 'isEnabled');\n this.listenTo(button, 'execute', () => editor.execute(options.buttonName));\n\n return button;\n });\n }\n}\n\nexport default FormulaX;\n\nfunction applyFormulaPayload(\n editor: any,\n selectedFormula: any,\n payload: FormulaXPayload,\n modelName: string,\n): void {\n editor.model.change((writer: any) => {\n if (selectedFormula) {\n if (!payload.latex.trim()) {\n writer.remove(selectedFormula);\n return;\n }\n\n writer.setAttribute('latex', payload.latex, selectedFormula);\n return;\n }\n\n if (!payload.latex.trim()) return;\n\n const formula = writer.createElement(modelName, {\n latex: payload.latex,\n });\n\n editor.model.insertObject(formula, null, null, { setSelection: 'after' });\n });\n}\n\nfunction hasRegisteredFormulaModelName(editor: any, modelName: string): boolean {\n const schema = editor?.model?.schema;\n\n if (!schema) {\n return false;\n }\n\n if (typeof schema.isRegistered === 'function') {\n return Boolean(schema.isRegistered(modelName));\n }\n\n if (typeof schema.getDefinition === 'function') {\n return Boolean(schema.getDefinition(modelName));\n }\n\n if (schema._sourceDefinitions?.has) {\n return Boolean(schema._sourceDefinitions.has(modelName));\n }\n\n return Boolean(schema._definitions?.[modelName]);\n}\n\nfunction defineFormulaSchema(editor: any, modelName: string): void {\n editor.model.schema.register(modelName, {\n allowWhere: '$text',\n isInline: true,\n isObject: true,\n allowAttributes: ['latex'],\n });\n}\n\nfunction defineFormulaConverters(editor: any, options: RequiredFormulaXCKEditor5Options): void {\n editor.conversion.for('upcast').elementToElement({\n view: {\n name: 'span',\n attributes: {\n [FORMULA_FLAG_ATTRIBUTE]: true,\n },\n },\n model: (viewElement: any, { writer }: any) => writer.createElement(options.name, {\n latex: readFormulaLatexFromView(viewElement, options),\n }),\n });\n\n editor.conversion.for('dataDowncast').elementToElement({\n model: createFormulaConverterModelDefinition(options.name),\n view: (modelElement: any, { writer }: any) => createFormulaRawElement(writer, modelElement, options),\n });\n\n editor.conversion.for('editingDowncast').elementToElement({\n model: createFormulaConverterModelDefinition(options.name),\n view: (modelElement: any, { writer }: any) => {\n const widgetElement = createFormulaWidgetElement(writer, modelElement, options, editor);\n return toWidget(widgetElement, writer, { label: 'FormulaX formula' });\n },\n });\n}\n\nfunction createFormulaConverterModelDefinition(modelName: string): {\n name: string;\n attributes: string[];\n} {\n return {\n name: modelName,\n attributes: ['latex'],\n };\n}\n\nfunction createFormulaRawElement(\n writer: any,\n modelElement: any,\n options: RequiredFormulaXCKEditor5Options,\n): any {\n const latex = String(modelElement.getAttribute('latex') ?? '');\n\n const element = writer.createContainerElement(\n 'span',\n createFormulaViewAttributes(latex, options),\n );\n\n writer.insert(\n writer.createPositionAt(element, 0),\n writer.createText(latex || '\\\\square'),\n );\n\n return element;\n}\n\nfunction createFormulaWidgetElement(\n writer: any,\n modelElement: any,\n options: RequiredFormulaXCKEditor5Options,\n editor: any,\n): any {\n const latex = String(modelElement.getAttribute('latex') ?? '');\n const widgetElement = writer.createContainerElement(\n 'span',\n createFormulaViewAttributes(latex, options),\n );\n const contentElement = writer.createRawElement(\n 'span',\n {\n class: `${options.formulaClassName}__content`,\n 'aria-hidden': 'true',\n },\n (domElement: HTMLElement) => {\n domElement.innerHTML = createFormulaFallbackMarkup(latex, options);\n void renderFormulaIntoElement(domElement, latex, options);\n bindFormulaWidgetDomEvents(domElement, editor, modelElement, options.buttonName);\n },\n );\n\n writer.insert(writer.createPositionAt(widgetElement, 0), contentElement);\n\n return widgetElement;\n}\n\nfunction createFormulaViewAttributes(\n latex: string,\n options: RequiredFormulaXCKEditor5Options,\n): Record<string, string> {\n return {\n class: options.formulaClassName,\n [FORMULA_FLAG_ATTRIBUTE]: 'true',\n [options.formulaAttributeName]: latex,\n 'data-latex': latex,\n contenteditable: 'false',\n role: 'button',\n style: `cursor: ${options.cursorStyle}`,\n tabindex: '0',\n };\n}\n\nfunction bindFormulaWidgetDomEvents(\n domElement: HTMLElement,\n editor: any,\n modelElement: any,\n commandName: string,\n): void {\n domElement.onclick = (event) => {\n event.preventDefault();\n selectFormulaModelElement(editor, modelElement);\n };\n\n domElement.ondblclick = (event) => {\n event.preventDefault();\n event.stopPropagation();\n selectFormulaModelElement(editor, modelElement);\n editor.execute(commandName);\n };\n}\n\nfunction selectFormulaModelElement(editor: any, modelElement: any): void {\n if (!modelElement?.is?.('element', 'formulaX')) {\n return;\n }\n\n editor.editing.view.focus();\n editor.model.change((writer: any) => {\n writer.setSelection(modelElement, 'on');\n });\n}\n\nfunction createFormulaFallbackMarkup(\n latex: string,\n options: RequiredFormulaXCKEditor5Options,\n): string {\n const markup = createFormulaMarkup(latex, {\n attributeName: options.formulaAttributeName,\n className: options.formulaClassName,\n });\n return extractInnerHtml(markup);\n}\n\nfunction extractInnerHtml(markup: string): string {\n const wrapper = document.createElement('span');\n wrapper.innerHTML = markup;\n return wrapper.firstElementChild?.innerHTML ?? '';\n}\n\nfunction getSelectedFormulaModelElement(editor: any, modelName: string): any | null {\n const selectedElement = editor.model.document.selection.getSelectedElement();\n return selectedElement?.is?.('element', modelName) ? selectedElement : null;\n}\n\nfunction isFormulaWidgetView(node: any): boolean {\n return Boolean(node?.is?.('element') && node.hasAttribute?.(FORMULA_FLAG_ATTRIBUTE));\n}\n\nfunction readFormulaLatexFromView(viewElement: any, options: RequiredFormulaXCKEditor5Options): string {\n return String(\n viewElement.getAttribute(options.formulaAttributeName)\n ?? viewElement.getAttribute('data-latex')\n ?? '',\n );\n}\n\nconst formulaRenderCache = new Map<string, Promise<string>>();\n\nasync function renderFormulaIntoElement(\n domElement: HTMLElement,\n latex: string,\n options: RequiredFormulaXCKEditor5Options,\n): Promise<void> {\n const trimmedLatex = latex.trim();\n const renderToken = `${trimmedLatex}::${Date.now()}::${Math.random().toString(36).slice(2, 8)}`;\n domElement.dataset.renderToken = renderToken;\n\n if (!trimmedLatex) {\n return;\n }\n\n try {\n const markup = await renderFormulaSvgMarkup(trimmedLatex, options);\n if (domElement.dataset.renderToken !== renderToken) {\n return;\n }\n\n domElement.innerHTML = markup;\n } catch (error) {\n if (domElement.dataset.renderToken !== renderToken) {\n return;\n }\n\n console.error('[FormulaX] Failed to render CKEditor5 formula widget:', error);\n }\n}\n\nfunction renderFormulaSvgMarkup(\n latex: string,\n options: RequiredFormulaXCKEditor5Options,\n): Promise<string> {\n const cached = formulaRenderCache.get(latex);\n if (cached) {\n return cached;\n }\n\n const pending = (async () => {\n const host = document.createElement('div');\n host.style.position = 'fixed';\n host.style.left = '-100000px';\n host.style.top = '0';\n host.style.width = '1px';\n host.style.height = '1px';\n host.style.opacity = '0';\n host.style.pointerEvents = 'none';\n host.setAttribute('aria-hidden', 'true');\n document.body.appendChild(host);\n\n const mounted = mountFormulaXKityEditor(host, {\n initialLatex: latex,\n height: options.editor.height,\n autofocus: false,\n assets: options.editor.assets,\n render: {\n fontsize: options.editor.render.fontsize,\n },\n });\n\n try {\n return await mounted.getRenderHtml();\n } finally {\n mounted.destroy();\n host.remove();\n }\n })();\n\n formulaRenderCache.set(latex, pending);\n pending.catch(() => {\n if (formulaRenderCache.get(latex) === pending) {\n formulaRenderCache.delete(latex);\n }\n });\n return pending;\n}\n","import {\n ensureFormulaXModalStyles,\n escapeAttribute,\n escapeHtml,\n mountFormulaXKityEditor,\n} from '@formulaxjs/editor';\nimport type { FormulaXPayload, RequiredFormulaXCKEditor5Options } from './types';\n\nexport interface OpenFormulaXModalInput {\n initialLatex: string;\n isUpdate: boolean;\n options: RequiredFormulaXCKEditor5Options;\n}\n\nexport function openFormulaXModal(input: OpenFormulaXModalInput): Promise<FormulaXPayload | null> {\n ensureFormulaXModalStyles(document);\n\n const root = document.createElement('div');\n root.className = 'fx-formula-modal-root';\n root.setAttribute('data-formulax-modal', 'true');\n\n const submitText = input.isUpdate ? input.options.modal.updateText : input.options.modal.insertText;\n\n root.innerHTML = `\n <div class=\"fx-formula-modal-backdrop\" data-action=\"backdrop\"></div>\n <div class=\"fx-formula-modal\" role=\"dialog\" aria-modal=\"true\" aria-label=\"${escapeAttribute(input.options.modal.title)}\">\n <header class=\"fx-formula-modal__header\">\n <h2 class=\"fx-formula-modal__title\">${escapeHtml(input.options.modal.title)}</h2>\n <button class=\"fx-formula-modal__close\" type=\"button\" data-action=\"close\" aria-label=\"Close\">×</button>\n </header>\n <section class=\"fx-formula-modal__body\">\n <div class=\"fx-formula-editor-host\"></div>\n </section>\n <footer class=\"fx-formula-modal__footer\">\n <button class=\"fx-formula-modal__button\" type=\"button\" data-action=\"cancel\">${escapeHtml(input.options.modal.cancelText)}</button>\n <button class=\"fx-formula-modal__button fx-formula-modal__button--primary\" type=\"button\" data-action=\"submit\">${escapeHtml(submitText)}</button>\n </footer>\n </div>\n `;\n\n document.body.appendChild(root);\n document.body.classList.add('fx-formula-modal-open');\n\n const host = root.querySelector<HTMLElement>('.fx-formula-editor-host');\n if (!host) {\n root.remove();\n return Promise.reject(new Error('[FormulaX] CKEditor 5 modal host not found.'));\n }\n\n const mounted = mountFormulaXKityEditor(host, {\n initialLatex: input.initialLatex,\n height: input.options.editor.height,\n autofocus: input.options.editor.autofocus,\n assets: input.options.editor.assets,\n render: {\n fontsize: input.options.editor.render.fontsize,\n },\n });\n let closed = false;\n\n return new Promise((resolve) => {\n const close = (payload: FormulaXPayload | null): void => {\n if (closed) return;\n closed = true;\n\n mounted.destroy();\n root.removeEventListener('click', onClick);\n document.removeEventListener('keydown', onKeydown, true);\n root.remove();\n document.body.classList.remove('fx-formula-modal-open');\n resolve(payload);\n };\n\n const submit = async (): Promise<void> => {\n try {\n const latex = await mounted.getLatex();\n close({ latex });\n } catch (error) {\n host.innerHTML = `\n <div class=\"fx-formula-editor-error\">\n Failed to read FormulaX editor content.\n <pre>${escapeHtml(error instanceof Error ? error.message : String(error))}</pre>\n </div>\n `;\n }\n };\n\n function onClick(event: MouseEvent): void {\n const action = (event.target as HTMLElement).closest<HTMLElement>('[data-action]')?.dataset.action;\n if (!action) return;\n\n if (action === 'submit') {\n void submit();\n return;\n }\n\n if (action === 'cancel' || action === 'close') {\n close(null);\n return;\n }\n\n if (action === 'backdrop' && input.options.modal.closeOnBackdrop) {\n close(null);\n }\n }\n\n function onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n close(null);\n }\n }\n\n root.addEventListener('click', onClick);\n document.addEventListener('keydown', onKeydown, true);\n\n queueMicrotask(() => {\n mounted.root.focus();\n });\n });\n}\n"],"mappings":"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","names":["DEFAULT_FORMULA_ATTRIBUTE","DEFAULT_FORMULA_CLASS","FORMULA_FLAG_ATTRIBUTE","ensureFormulaXModalStyles","mountFormulaXKityEditor","ensureFormulaXModalStyles","mountFormulaXKityEditor"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/plugin.ts","../src/modal.ts"],"sourcesContent":["export {\n DEFAULT_FORMULA_ATTRIBUTE,\n DEFAULT_FORMULA_CLASS,\n FORMULA_FLAG_ATTRIBUTE,\n} from '@formulaxjs/editor';\n\nexport {\n DEFAULT_BUTTON_NAME,\n DEFAULT_MODEL_NAME,\n FormulaX,\n FormulaXCommand,\n resolveOptions,\n} from './plugin';\n\nexport type {\n FormulaXCKEditor5Options,\n FormulaXPayload,\n RequiredFormulaXCKEditor5Options,\n} from './types';\n\nexport { openFormulaXModal } from './modal';\n\nexport { FormulaX as default } from './plugin';\n","import {\n ButtonView,\n Command,\n Plugin,\n Widget,\n toWidget,\n viewToModelPositionOutsideModelElement,\n} from 'ckeditor5';\nimport {\n DEFAULT_FORMULA_ATTRIBUTE,\n DEFAULT_FORMULA_CLASS,\n FORMULA_FLAG_ATTRIBUTE,\n createFormulaMarkup,\n ensureFormulaXModalStyles,\n mountFormulaXEditor,\n} from '@formulaxjs/editor';\nimport { openFormulaXModal } from './modal';\nimport type {\n FormulaXCKEditor5Options,\n FormulaXPayload,\n RequiredFormulaXCKEditor5Options,\n} from './types';\n\nconst DEFAULT_BUTTON_NAME = 'formulaX';\nconst DEFAULT_MODEL_NAME = 'formulaX';\n\nexport { DEFAULT_BUTTON_NAME, DEFAULT_MODEL_NAME };\n\nexport function resolveOptions(options: FormulaXCKEditor5Options = {}): RequiredFormulaXCKEditor5Options {\n return {\n name: options.name ?? DEFAULT_MODEL_NAME,\n buttonName: options.buttonName ?? DEFAULT_BUTTON_NAME,\n toolbarText: options.toolbarText ?? 'FormulaX',\n tooltip: options.tooltip ?? 'Insert or edit formula',\n cursorStyle: options.cursorStyle ?? 'pointer',\n formulaClassName: options.formulaClassName ?? DEFAULT_FORMULA_CLASS,\n formulaAttributeName: options.formulaAttributeName ?? DEFAULT_FORMULA_ATTRIBUTE,\n modal: {\n title: options.modal?.title ?? 'FormulaX Editor',\n insertText: options.modal?.insertText ?? 'Insert',\n updateText: options.modal?.updateText ?? 'Update',\n cancelText: options.modal?.cancelText ?? 'Cancel',\n closeOnBackdrop: options.modal?.closeOnBackdrop ?? true,\n },\n editor: {\n height: options.editor?.height ?? '100%',\n autofocus: options.editor?.autofocus ?? true,\n assets: options.editor?.assets ?? {},\n render: {\n fontsize: options.editor?.render?.fontsize ?? 40,\n },\n },\n };\n}\n\nexport class FormulaXCommand extends Command {\n private readonly options: RequiredFormulaXCKEditor5Options;\n\n constructor(editor: unknown, options: RequiredFormulaXCKEditor5Options) {\n super(editor as any);\n this.options = options;\n }\n\n override refresh(): void {\n this.isEnabled = true;\n }\n\n override execute(): void {\n const editor = this.editor as any;\n const selectedFormula = getSelectedFormulaModelElement(editor, this.options.name);\n const initialLatex = String(selectedFormula?.getAttribute('latex') ?? '');\n\n void openFormulaXModal({\n initialLatex,\n isUpdate: Boolean(selectedFormula),\n options: this.options,\n }).then((payload) => {\n if (!payload) return;\n applyFormulaPayload(editor, selectedFormula, payload, this.options.name);\n editor.editing.view.focus();\n });\n }\n}\n\nexport class FormulaX extends Plugin {\n static get pluginName(): string {\n return 'FormulaX';\n }\n\n static get requires(): readonly [typeof Widget] {\n return [Widget];\n }\n\n init(): void {\n const editor = this.editor as any;\n const options = resolveOptions(editor.config.get('formulaX') as FormulaXCKEditor5Options | undefined);\n\n if (hasRegisteredFormulaModelName(editor, options.name)) {\n console.error(\n `[FormulaX] CKEditor5 model name \"${options.name}\" is already registered. ` +\n 'Pass a unique \"name\" option to avoid schema collisions.',\n );\n return;\n }\n\n ensureFormulaXModalStyles(document);\n defineFormulaSchema(editor, options.name);\n defineFormulaConverters(editor, options);\n editor.editing.mapper.on(\n 'viewToModelPosition',\n viewToModelPositionOutsideModelElement(editor.model, isFormulaWidgetView),\n );\n\n const command = new FormulaXCommand(editor, options);\n editor.commands.add(options.buttonName, command);\n\n editor.ui.componentFactory.add(options.buttonName, (locale: unknown) => {\n const button = new ButtonView(locale as any);\n\n button.set({\n label: options.toolbarText,\n tooltip: options.tooltip,\n withText: true,\n });\n\n button.bind('isEnabled').to(command, 'isEnabled');\n this.listenTo(button, 'execute', () => editor.execute(options.buttonName));\n\n return button;\n });\n }\n}\n\nexport default FormulaX;\n\nfunction applyFormulaPayload(\n editor: any,\n selectedFormula: any,\n payload: FormulaXPayload,\n modelName: string,\n): void {\n editor.model.change((writer: any) => {\n if (selectedFormula) {\n if (!payload.latex.trim()) {\n writer.remove(selectedFormula);\n return;\n }\n\n writer.setAttribute('latex', payload.latex, selectedFormula);\n return;\n }\n\n if (!payload.latex.trim()) return;\n\n const formula = writer.createElement(modelName, {\n latex: payload.latex,\n });\n\n editor.model.insertObject(formula, null, null, { setSelection: 'after' });\n });\n}\n\nfunction hasRegisteredFormulaModelName(editor: any, modelName: string): boolean {\n const schema = editor?.model?.schema;\n\n if (!schema) {\n return false;\n }\n\n if (typeof schema.isRegistered === 'function') {\n return Boolean(schema.isRegistered(modelName));\n }\n\n if (typeof schema.getDefinition === 'function') {\n return Boolean(schema.getDefinition(modelName));\n }\n\n if (schema._sourceDefinitions?.has) {\n return Boolean(schema._sourceDefinitions.has(modelName));\n }\n\n return Boolean(schema._definitions?.[modelName]);\n}\n\nfunction defineFormulaSchema(editor: any, modelName: string): void {\n editor.model.schema.register(modelName, {\n allowWhere: '$text',\n isInline: true,\n isObject: true,\n allowAttributes: ['latex'],\n });\n}\n\nfunction defineFormulaConverters(editor: any, options: RequiredFormulaXCKEditor5Options): void {\n editor.conversion.for('upcast').elementToElement({\n view: {\n name: 'span',\n attributes: {\n [FORMULA_FLAG_ATTRIBUTE]: true,\n },\n },\n model: (viewElement: any, { writer }: any) => writer.createElement(options.name, {\n latex: readFormulaLatexFromView(viewElement, options),\n }),\n });\n\n editor.conversion.for('dataDowncast').elementToElement({\n model: createFormulaConverterModelDefinition(options.name),\n view: (modelElement: any, { writer }: any) => createFormulaRawElement(writer, modelElement, options),\n });\n\n editor.conversion.for('editingDowncast').elementToElement({\n model: createFormulaConverterModelDefinition(options.name),\n view: (modelElement: any, { writer }: any) => {\n const widgetElement = createFormulaWidgetElement(writer, modelElement, options, editor);\n return toWidget(widgetElement, writer, { label: 'FormulaX formula' });\n },\n });\n}\n\nfunction createFormulaConverterModelDefinition(modelName: string): {\n name: string;\n attributes: string[];\n} {\n return {\n name: modelName,\n attributes: ['latex'],\n };\n}\n\nfunction createFormulaRawElement(\n writer: any,\n modelElement: any,\n options: RequiredFormulaXCKEditor5Options,\n): any {\n const latex = String(modelElement.getAttribute('latex') ?? '');\n\n const element = writer.createContainerElement(\n 'span',\n createFormulaViewAttributes(latex, options),\n );\n\n writer.insert(\n writer.createPositionAt(element, 0),\n writer.createText(latex || '\\\\square'),\n );\n\n return element;\n}\n\nfunction createFormulaWidgetElement(\n writer: any,\n modelElement: any,\n options: RequiredFormulaXCKEditor5Options,\n editor: any,\n): any {\n const latex = String(modelElement.getAttribute('latex') ?? '');\n const widgetElement = writer.createContainerElement(\n 'span',\n createFormulaViewAttributes(latex, options),\n );\n const contentElement = writer.createRawElement(\n 'span',\n {\n class: `${options.formulaClassName}__content`,\n 'aria-hidden': 'true',\n },\n (domElement: HTMLElement) => {\n domElement.innerHTML = createFormulaFallbackMarkup(latex, options);\n void renderFormulaIntoElement(domElement, latex, options);\n bindFormulaWidgetDomEvents(domElement, editor, modelElement, options.buttonName);\n },\n );\n\n writer.insert(writer.createPositionAt(widgetElement, 0), contentElement);\n\n return widgetElement;\n}\n\nfunction createFormulaViewAttributes(\n latex: string,\n options: RequiredFormulaXCKEditor5Options,\n): Record<string, string> {\n return {\n class: options.formulaClassName,\n [FORMULA_FLAG_ATTRIBUTE]: 'true',\n [options.formulaAttributeName]: latex,\n 'data-latex': latex,\n contenteditable: 'false',\n role: 'button',\n style: `cursor: ${options.cursorStyle}`,\n tabindex: '0',\n };\n}\n\nfunction bindFormulaWidgetDomEvents(\n domElement: HTMLElement,\n editor: any,\n modelElement: any,\n commandName: string,\n): void {\n domElement.onclick = (event) => {\n event.preventDefault();\n selectFormulaModelElement(editor, modelElement);\n };\n\n domElement.ondblclick = (event) => {\n event.preventDefault();\n event.stopPropagation();\n selectFormulaModelElement(editor, modelElement);\n editor.execute(commandName);\n };\n}\n\nfunction selectFormulaModelElement(editor: any, modelElement: any): void {\n if (!modelElement?.is?.('element', 'formulaX')) {\n return;\n }\n\n editor.editing.view.focus();\n editor.model.change((writer: any) => {\n writer.setSelection(modelElement, 'on');\n });\n}\n\nfunction createFormulaFallbackMarkup(\n latex: string,\n options: RequiredFormulaXCKEditor5Options,\n): string {\n const markup = createFormulaMarkup(latex, {\n attributeName: options.formulaAttributeName,\n className: options.formulaClassName,\n });\n return extractInnerHtml(markup);\n}\n\nfunction extractInnerHtml(markup: string): string {\n const wrapper = document.createElement('span');\n wrapper.innerHTML = markup;\n return wrapper.firstElementChild?.innerHTML ?? '';\n}\n\nfunction getSelectedFormulaModelElement(editor: any, modelName: string): any | null {\n const selectedElement = editor.model.document.selection.getSelectedElement();\n return selectedElement?.is?.('element', modelName) ? selectedElement : null;\n}\n\nfunction isFormulaWidgetView(node: any): boolean {\n return Boolean(node?.is?.('element') && node.hasAttribute?.(FORMULA_FLAG_ATTRIBUTE));\n}\n\nfunction readFormulaLatexFromView(viewElement: any, options: RequiredFormulaXCKEditor5Options): string {\n return String(\n viewElement.getAttribute(options.formulaAttributeName)\n ?? viewElement.getAttribute('data-latex')\n ?? '',\n );\n}\n\nconst formulaRenderCache = new Map<string, Promise<string>>();\n\nasync function renderFormulaIntoElement(\n domElement: HTMLElement,\n latex: string,\n options: RequiredFormulaXCKEditor5Options,\n): Promise<void> {\n const trimmedLatex = latex.trim();\n const renderToken = `${trimmedLatex}::${Date.now()}::${Math.random().toString(36).slice(2, 8)}`;\n domElement.dataset.renderToken = renderToken;\n\n if (!trimmedLatex) {\n return;\n }\n\n try {\n const markup = await renderFormulaSvgMarkup(trimmedLatex, options);\n if (domElement.dataset.renderToken !== renderToken) {\n return;\n }\n\n domElement.innerHTML = markup;\n } catch (error) {\n if (domElement.dataset.renderToken !== renderToken) {\n return;\n }\n\n console.error('[FormulaX] Failed to render CKEditor5 formula widget:', error);\n }\n}\n\nfunction renderFormulaSvgMarkup(\n latex: string,\n options: RequiredFormulaXCKEditor5Options,\n): Promise<string> {\n const cached = formulaRenderCache.get(latex);\n if (cached) {\n return cached;\n }\n\n const pending = (async () => {\n const host = document.createElement('div');\n host.style.position = 'fixed';\n host.style.left = '-100000px';\n host.style.top = '0';\n host.style.width = '1px';\n host.style.height = '1px';\n host.style.opacity = '0';\n host.style.pointerEvents = 'none';\n host.setAttribute('aria-hidden', 'true');\n document.body.appendChild(host);\n\n const mounted = mountFormulaXEditor(host, {\n initialLatex: latex,\n height: options.editor.height,\n autofocus: false,\n assets: options.editor.assets,\n render: {\n fontsize: options.editor.render.fontsize,\n },\n });\n\n try {\n return await mounted.getRenderHtml();\n } finally {\n mounted.destroy();\n host.remove();\n }\n })();\n\n formulaRenderCache.set(latex, pending);\n pending.catch(() => {\n if (formulaRenderCache.get(latex) === pending) {\n formulaRenderCache.delete(latex);\n }\n });\n return pending;\n}\n","import {\n ensureFormulaXModalStyles,\n escapeAttribute,\n escapeHtml,\n mountFormulaXEditor,\n} from '@formulaxjs/editor';\nimport type { FormulaXPayload, RequiredFormulaXCKEditor5Options } from './types';\n\nexport interface OpenFormulaXModalInput {\n initialLatex: string;\n isUpdate: boolean;\n options: RequiredFormulaXCKEditor5Options;\n}\n\nexport function openFormulaXModal(input: OpenFormulaXModalInput): Promise<FormulaXPayload | null> {\n ensureFormulaXModalStyles(document);\n\n const root = document.createElement('div');\n root.className = 'fx-formula-modal-root';\n root.setAttribute('data-formulax-modal', 'true');\n\n const submitText = input.isUpdate ? input.options.modal.updateText : input.options.modal.insertText;\n\n root.innerHTML = `\n <div class=\"fx-formula-modal-backdrop\" data-action=\"backdrop\"></div>\n <div class=\"fx-formula-modal\" role=\"dialog\" aria-modal=\"true\" aria-label=\"${escapeAttribute(input.options.modal.title)}\">\n <header class=\"fx-formula-modal__header\">\n <h2 class=\"fx-formula-modal__title\">${escapeHtml(input.options.modal.title)}</h2>\n <button class=\"fx-formula-modal__close\" type=\"button\" data-action=\"close\" aria-label=\"Close\">×</button>\n </header>\n <section class=\"fx-formula-modal__body\">\n <div class=\"fx-formula-editor-host\"></div>\n </section>\n <footer class=\"fx-formula-modal__footer\">\n <button class=\"fx-formula-modal__button\" type=\"button\" data-action=\"cancel\">${escapeHtml(input.options.modal.cancelText)}</button>\n <button class=\"fx-formula-modal__button fx-formula-modal__button--primary\" type=\"button\" data-action=\"submit\">${escapeHtml(submitText)}</button>\n </footer>\n </div>\n `;\n\n document.body.appendChild(root);\n document.body.classList.add('fx-formula-modal-open');\n\n const host = root.querySelector<HTMLElement>('.fx-formula-editor-host');\n if (!host) {\n root.remove();\n return Promise.reject(new Error('[FormulaX] CKEditor 5 modal host not found.'));\n }\n\n const mounted = mountFormulaXEditor(host, {\n initialLatex: input.initialLatex,\n height: input.options.editor.height,\n autofocus: input.options.editor.autofocus,\n assets: input.options.editor.assets,\n render: {\n fontsize: input.options.editor.render.fontsize,\n },\n });\n let closed = false;\n\n return new Promise((resolve) => {\n const close = (payload: FormulaXPayload | null): void => {\n if (closed) return;\n closed = true;\n\n mounted.destroy();\n root.removeEventListener('click', onClick);\n document.removeEventListener('keydown', onKeydown, true);\n root.remove();\n document.body.classList.remove('fx-formula-modal-open');\n resolve(payload);\n };\n\n const submit = async (): Promise<void> => {\n try {\n const latex = await mounted.getLatex();\n close({ latex });\n } catch (error) {\n host.innerHTML = `\n <div class=\"fx-formula-editor-error\">\n Failed to read FormulaX editor content.\n <pre>${escapeHtml(error instanceof Error ? error.message : String(error))}</pre>\n </div>\n `;\n }\n };\n\n function onClick(event: MouseEvent): void {\n const action = (event.target as HTMLElement).closest<HTMLElement>('[data-action]')?.dataset.action;\n if (!action) return;\n\n if (action === 'submit') {\n void submit();\n return;\n }\n\n if (action === 'cancel' || action === 'close') {\n close(null);\n return;\n }\n\n if (action === 'backdrop' && input.options.modal.closeOnBackdrop) {\n close(null);\n }\n }\n\n function onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n close(null);\n }\n }\n\n root.addEventListener('click', onClick);\n document.addEventListener('keydown', onKeydown, true);\n\n queueMicrotask(() => {\n mounted.root.focus();\n });\n });\n}\n"],"mappings":"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","names":["DEFAULT_FORMULA_ATTRIBUTE","DEFAULT_FORMULA_CLASS","FORMULA_FLAG_ATTRIBUTE","ensureFormulaXModalStyles","mountFormulaXEditor","ensureFormulaXModalStyles","mountFormulaXEditor"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@formulaxjs/ckeditor5",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"access": "public"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
+
"@formulaxjs/editor": "0.2.0",
|
|
33
34
|
"@formulaxjs/core": "0.1.0",
|
|
34
|
-
"@formulaxjs/editor": "0.1.1",
|
|
35
35
|
"@formulaxjs/kity-runtime": "0.2.0"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|