@lblod/ember-rdfa-editor 13.1.1 → 13.2.0
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/README.md +12 -9
- package/declarations/components/_private/common/configurable-rdfa-display.d.ts +4 -4
- package/declarations/components/editor.d.ts +2 -0
- package/declarations/components/toolbar/button.d.ts +1 -1
- package/declarations/core/say-controller.d.ts +11 -4
- package/declarations/core/say-data-factory/blank-node.d.ts +1 -1
- package/declarations/core/say-data-factory/default-graph.d.ts +1 -1
- package/declarations/core/say-data-factory/literal.d.ts +1 -1
- package/declarations/core/say-data-factory/named-node.d.ts +1 -1
- package/declarations/core/say-data-factory/prosemirror-terms/content-literal.d.ts +1 -1
- package/declarations/core/say-data-factory/prosemirror-terms/literal-node.d.ts +1 -1
- package/declarations/core/say-data-factory/prosemirror-terms/resource-node.d.ts +1 -1
- package/declarations/core/say-data-factory/quad.d.ts +1 -1
- package/declarations/core/say-data-factory/variable.d.ts +1 -1
- package/declarations/core/say-editor.d.ts +1 -0
- package/declarations/core/say-view.d.ts +7 -1
- package/declarations/utils/_private/rdfa-parser/util.d.ts +1 -1
- package/dist/commands/_private/rdfa-commands/remove-backlink.js +1 -1
- package/dist/commands/_private/rdfa-commands/select-node-by-rdfa-id.js +1 -1
- package/dist/commands/_private/rdfa-commands/select-node-by-subject.js +1 -1
- package/dist/commands/_private/rdfa-commands/wrap-inline-resource.js +1 -1
- package/dist/commands/_private/rdfa-commands/wrap-literal.js +1 -1
- package/dist/commands/_private/rdfa-commands/wrap-resource.js +1 -1
- package/dist/commands/rdfa-commands/add-property.js +1 -1
- package/dist/commands/rdfa-commands/remove-property.js +1 -1
- package/dist/components/_private/attribute-editor/index.js +1 -1
- package/dist/components/_private/attribute-editor/index.js.map +1 -1
- package/dist/components/_private/common/configurable-rdfa-display.js +1 -1
- package/dist/components/_private/common/configurable-rdfa-display.js.map +1 -1
- package/dist/components/_private/common/property-details.js +1 -1
- package/dist/components/_private/node-controls/wrapping-utils.js +2 -2
- package/dist/components/_private/node-controls/wrapping-utils.js.map +1 -1
- package/dist/components/_private/rdfa-visualiser/rdfa-explorer.js +1 -1
- package/dist/components/_private/rdfa-visualiser/resource-info.js +1 -1
- package/dist/components/_private/rdfa-visualiser/visualiser-card.js +1 -1
- package/dist/components/collapsible.js +1 -1
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/editor.js +7 -1
- package/dist/components/editor.js.map +1 -1
- package/dist/components/ember-node/embedded-editor.js +4 -1
- package/dist/components/ember-node/embedded-editor.js.map +1 -1
- package/dist/components/plugins/history/redo.js +1 -1
- package/dist/components/plugins/history/undo.js +1 -1
- package/dist/components/plugins/list/ordered.js +1 -1
- package/dist/components/plugins/list/unordered.js +1 -1
- package/dist/components/toolbar/mark.js +1 -1
- package/dist/core/keymap.js +2 -2
- package/dist/core/rdfa-types.js +1 -1
- package/dist/core/say-controller.js +41 -5
- package/dist/core/say-controller.js.map +1 -1
- package/dist/core/say-data-factory/blank-node.js +2 -2
- package/dist/core/say-data-factory/blank-node.js.map +1 -1
- package/dist/core/say-data-factory/default-graph.js +2 -2
- package/dist/core/say-data-factory/default-graph.js.map +1 -1
- package/dist/core/say-data-factory/literal.js +2 -2
- package/dist/core/say-data-factory/literal.js.map +1 -1
- package/dist/core/say-data-factory/named-node.js +2 -2
- package/dist/core/say-data-factory/named-node.js.map +1 -1
- package/dist/core/say-data-factory/prosemirror-terms/content-literal.js +2 -2
- package/dist/core/say-data-factory/prosemirror-terms/content-literal.js.map +1 -1
- package/dist/core/say-data-factory/prosemirror-terms/literal-node.js +2 -2
- package/dist/core/say-data-factory/prosemirror-terms/literal-node.js.map +1 -1
- package/dist/core/say-data-factory/prosemirror-terms/resource-node.js +2 -2
- package/dist/core/say-data-factory/prosemirror-terms/resource-node.js.map +1 -1
- package/dist/core/say-data-factory/quad.js +2 -2
- package/dist/core/say-data-factory/quad.js.map +1 -1
- package/dist/core/say-data-factory/variable.js +2 -2
- package/dist/core/say-data-factory/variable.js.map +1 -1
- package/dist/core/say-editor.js +4 -2
- package/dist/core/say-editor.js.map +1 -1
- package/dist/core/say-view.js +2 -1
- package/dist/core/say-view.js.map +1 -1
- package/dist/index-CxRqg5Kr.js +671 -0
- package/dist/index-CxRqg5Kr.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/{main-dUbkrxFL.js → main-DFf-0En3.js} +7988 -8105
- package/dist/main-DFf-0En3.js.map +1 -0
- package/dist/nodes/invisible-rdfa.js +1 -1
- package/dist/plugins/history/index.js +1 -1
- package/dist/plugins/list/commands/lift-out-of-nested-lists.js +1 -1
- package/dist/plugins/rdfa-info/index.js +1 -1
- package/dist/plugins/rdfa-info/types.js +1 -1
- package/dist/plugins/remove-properties-of-deleted-nodes/index.js +1 -1
- package/dist/utils/_private/datastore/graphy-dataset.js +1 -1
- package/dist/utils/_private/ember-node.js +0 -2
- package/dist/utils/_private/ember-node.js.map +1 -1
- package/dist/utils/_private/rdfa-parser/util.js +1 -8
- package/dist/utils/_private/rdfa-parser/util.js.map +1 -1
- package/package.json +8 -7
- package/declarations/components/toolbar.d.ts +0 -1
- package/dist/main-dUbkrxFL.js.map +0 -1
|
@@ -3,7 +3,7 @@ import 'prosemirror-model';
|
|
|
3
3
|
import 'uuid';
|
|
4
4
|
import 'relative-to-absolute-iri';
|
|
5
5
|
import 'rdf-data-factory';
|
|
6
|
-
import '../main-
|
|
6
|
+
import '../main-DFf-0En3.js';
|
|
7
7
|
import '../core/say-data-factory/data-factory.js';
|
|
8
8
|
import '../core/say-data-factory/default-graph.js';
|
|
9
9
|
import '../utils/_private/constants.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { c as closeHistory, g as getHistoryStateId, h as history, i as isHistoryTransaction, m as matchesTaggedHistory, r as redo, a as redoDepth, b as redoNoScroll, u as undo, d as undoDepth, e as undoNoScroll } from '../../index-CxRqg5Kr.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -5,7 +5,7 @@ import 'uuid';
|
|
|
5
5
|
import '../../../utils/_private/constants.js';
|
|
6
6
|
import 'relative-to-absolute-iri';
|
|
7
7
|
import 'rdf-data-factory';
|
|
8
|
-
import '../../../main-
|
|
8
|
+
import '../../../main-DFf-0En3.js';
|
|
9
9
|
import '../../../core/say-data-factory/data-factory.js';
|
|
10
10
|
import '../../../core/say-data-factory/default-graph.js';
|
|
11
11
|
import '../../../config/rdfa.js';
|
|
@@ -3,7 +3,7 @@ import 'uuid';
|
|
|
3
3
|
import '../../utils/_private/constants.js';
|
|
4
4
|
import 'relative-to-absolute-iri';
|
|
5
5
|
import 'rdf-data-factory';
|
|
6
|
-
import '../../main-
|
|
6
|
+
import '../../main-DFf-0En3.js';
|
|
7
7
|
import '../../core/say-data-factory/data-factory.js';
|
|
8
8
|
import '../../core/say-data-factory/default-graph.js';
|
|
9
9
|
import '../../config/rdfa.js';
|
|
@@ -2,7 +2,7 @@ import 'uuid';
|
|
|
2
2
|
import '../../utils/_private/constants.js';
|
|
3
3
|
import 'relative-to-absolute-iri';
|
|
4
4
|
import 'rdf-data-factory';
|
|
5
|
-
import '../../main-
|
|
5
|
+
import '../../main-DFf-0En3.js';
|
|
6
6
|
import '../../core/say-data-factory/data-factory.js';
|
|
7
7
|
import '../../core/say-data-factory/default-graph.js';
|
|
8
8
|
import '../../config/rdfa.js';
|
|
@@ -5,7 +5,7 @@ import 'uuid';
|
|
|
5
5
|
import '../../utils/_private/constants.js';
|
|
6
6
|
import 'relative-to-absolute-iri';
|
|
7
7
|
import 'rdf-data-factory';
|
|
8
|
-
import '../../main-
|
|
8
|
+
import '../../main-DFf-0En3.js';
|
|
9
9
|
import '../../core/say-data-factory/data-factory.js';
|
|
10
10
|
import '../../core/say-data-factory/default-graph.js';
|
|
11
11
|
import '../../config/rdfa.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ember-node.js","sources":["../../../src/utils/_private/ember-node.ts"],"sourcesContent":["/**\n * Contains code from https://github.com/ueberdosis/tiptap/blob/d61a621186470ce286e2cecf8206837a1eec7338/packages/core/src/NodeView.ts#L195\n *\n * MIT License\n * Copyright (c) 2023, Tiptap GmbH\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n\n */\n\nimport { hbs, type TemplateFactory } from 'ember-cli-htmlbars';\nimport type {\n AttributeSpec,\n DOMOutputSpec,\n TagParseRule,\n Node as PNode,\n Attrs,\n} from 'prosemirror-model';\nimport {\n Decoration,\n type DecorationSource,\n type NodeView,\n} from 'prosemirror-view';\nimport { v4 as uuidv4 } from 'uuid';\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport type Owner from '@ember/owner';\nimport type { ComponentLike } from '@glint/template';\nimport SayController from '#root/core/say-controller.ts';\nimport type SayNodeSpec from '#root/core/say-node-spec.ts';\nimport type { NodeSerializer } from '#root/core/say-serializer.ts';\nimport type SayView from '#root/core/say-view.ts';\nimport { NodeSelection } from 'prosemirror-state';\n\nexport interface EmberInlineComponent extends Component, EmberNodeArgs {\n appendTo(selector: string | Element): this;\n}\n\nexport interface EmberNodeArgs {\n getPos: () => number | undefined;\n node: PNode;\n /**\n * Util method to help with keeping state in `attrs` of the node.\n * Instead of a tracked property, you'll often use the following logic to keep state inside the node:\n * `get someText() { return this.args.node.attrs.someText; }`\n * `set someText(value) { return this.args.updateAttribute('someText', value); }`\n */\n updateAttribute: (\n attr: string,\n value: unknown,\n ignoreHistory?: boolean,\n ) => void;\n /**\n * Util method which selects the node within the editor\n */\n selectNode: () => void;\n controller: SayController;\n view: SayView;\n selected: boolean;\n contentDecorations?: DecorationSource;\n}\n\nfunction emberComponent(\n owner: Owner,\n name: string,\n inline: boolean,\n template: TemplateFactory,\n props: EmberNodeArgs & {\n atom: boolean;\n component: ComponentLike<{ Args: EmberNodeArgs }>;\n contentDOM?: HTMLElement;\n },\n): { node: HTMLElement; component: EmberInlineComponent } {\n // const instance = window.__APPLICATION;\n const componentName = `${name}-${uuidv4()}`;\n owner.register(\n `component:${componentName}`,\n // eslint-disable-next-line ember/no-classic-classes\n Component.extend({\n layout: template,\n tagName: '',\n ...props,\n }),\n );\n const component = owner.lookup(\n `component:${componentName}`,\n ) as EmberInlineComponent;\n const node = document.createElement(inline ? 'span' : 'div');\n node.classList.add('ember-node');\n component.appendTo(node);\n return { node, component };\n}\n\n/**\n * An EmberNode is a node with a custom Node View defined by an ember template.\n * First define your EmberNodeConfig, which should contain the information for:\n *\n * Afterwards use `createEmberNodeSpec(config)` and `createEmberNodeView(config)` to insert them in the schema.\n *\n * Special notes for EmberNode components:\n * - Prosemirror nodes are immutable by design. Any change to a node will create a new node that is loaded in.\n * - A rerender is avoided as much as possible here\n * - An ember component might still rerender because of other reasons (-> not yet known which reasons and if they exist)\n * - This means EmberNode components might lose their state at any time. *Don't save state in components properties*. @tracked properties will most likely not work as wanted.\n * - Keep state in `attrs` of the node.\n * Instead of a tracked property, you'll often use the following logic to keep state inside the node:\n * `get someText() { return this.args.node.attrs.someText; }`\n * `set someText(value) { return this.args.updateAttribute('someText', value); }`\n *\n * - when defining an ember-node using these utility functions, nested contenteditable attributes should be prevented.\n * Ember nodes which can contain editable content should never be `contenteditable: false` as a whole,\n * but only the parts which are `contenteditable: false` should be marked as so.\n * E.g.: It's preferred to write:\n *\n * ```\n * <div>\n * <header contenteditable=\"false\">\n * <p>header</p>\n * </header>\n * <content>\n * {{yield}}\n * </content>\n * </div>\n * ```\n * instead of\n * ```\n * <div contenteditable=\"false\">\n * <header>\n * <p>header</p>\n * </header>\n * <content contenteditable=\"true\">\n * {{yield}}\n * </content>\n * </div>\n * ```\n */\nclass EmberNodeView implements NodeView {\n node: PNode;\n dom: Element;\n contentDOM?: HTMLElement;\n emberComponent: EmberInlineComponent;\n template: TemplateFactory;\n config: EmberNodeConfig;\n\n constructor(\n controller: SayController,\n emberNodeConfig: EmberNodeConfig,\n pNode: PNode,\n view: SayView,\n getPos: () => number | undefined,\n ) {\n // when a node gets updated, `update()` is called.\n // We set the new node here and pass it to the component to render it.\n this.config = emberNodeConfig;\n const { name, component: componentClass, atom, inline } = emberNodeConfig;\n\n // @ts-expect-error not typesafe yet\n this.template = hbs`<this.component\n @getPos={{this.getPos}}\n @node={{this.node}}\n @updateAttribute={{this.updateAttribute}}\n @controller={{this.controller}}\n @view={{this.view}}\n @selected={{this.selected}}\n @contentDecorations={{this.contentDecorations}}\n @selectNode={{this.selectNode}}\n >\n {{#unless this.atom}}\n {{! @glint-expect-error: not typesafe yet }}\n <EmberNode::Slot @contentDOM={{this.contentDOM}}/>\n {{/unless}}\n </this.component>`;\n this.node = pNode;\n this.contentDOM = !atom\n ? document.createElement(inline ? 'span' : 'div', {})\n : undefined;\n // Note `this.contentDOM` needs an attribute to prevent chromium-based browsers from deleting it when it is empty/only has empty children.\n if (this.contentDOM) {\n this.contentDOM.dataset['emberNodeContent'] = 'true';\n }\n const { node, component } = emberComponent(\n controller.owner,\n name,\n inline,\n this.template,\n {\n getPos,\n node: pNode,\n updateAttribute: (attr, value, ignoreHistory) => {\n const pos = getPos();\n if (pos !== undefined) {\n const transaction = view.state.tr;\n if (ignoreHistory) {\n transaction.setMeta('addToHistory', false);\n }\n transaction.setNodeAttribute(pos, attr, value);\n view.dispatch(transaction);\n }\n },\n selectNode: () => {\n const pos = getPos();\n if (pos !== undefined) {\n const tr = controller.activeEditorState.tr;\n tr.setSelection(\n NodeSelection.create(controller.activeEditorState.doc, pos),\n );\n controller.activeEditorView.dispatch(tr);\n }\n },\n controller,\n contentDOM: this.contentDOM,\n component: componentClass,\n atom,\n view,\n selected: false,\n },\n );\n this.dom = node;\n if (this.config.domClassNames) {\n this.dom.classList.add(...this.config.domClassNames);\n }\n if (this.config.contentDomClassNames && this.contentDOM) {\n this.contentDOM.classList.add(...this.config.contentDomClassNames);\n }\n\n this.emberComponent = component;\n }\n\n update(\n node: PNode,\n _decorations: readonly Decoration[],\n innerDecorations: DecorationSource,\n ) {\n if (node.type !== this.node.type) return false;\n this.node = node;\n this.emberComponent.set('node', node);\n this.emberComponent.set('contentDecorations', innerDecorations);\n return true;\n }\n\n selectNode() {\n this.dom.classList.add('ProseMirror-selectednode');\n this.emberComponent.set('selected', true);\n }\n\n deselectNode() {\n this.dom.classList.remove('ProseMirror-selectednode');\n this.emberComponent.set('selected', false);\n }\n\n destroy() {\n this.emberComponent.destroy();\n }\n\n /**\n * Based on https://github.com/ueberdosis/tiptap/blob/d61a621186470ce286e2cecf8206837a1eec7338/packages/core/src/NodeView.ts#LL99C6-L99C6\n */\n stopEvent(event: Event) {\n if (!this.dom) {\n return false;\n }\n\n if (this.config.stopEvent) {\n const configStop = this.config.stopEvent(event);\n if (configStop !== null) {\n return configStop;\n }\n }\n\n // A dragstart event can come from non-content DOM and be valid, so don't stop it\n // Stopping the event results in the rendered HTML being used for the drag event, rather than\n // the serialized HTML, so breaks drag-drop for many EmberNodes\n if (\n ['dragstart', 'dragend', 'drop', 'dragover', 'dragenter'].includes(\n event.type,\n )\n ) {\n return false;\n }\n\n const target = event.target as HTMLElement;\n const isInElement =\n this.dom.contains(target) && !this.contentDOM?.contains(target);\n\n return isInElement;\n }\n\n /**\n * Taken from https://github.com/ueberdosis/tiptap/blob/d61a621186470ce286e2cecf8206837a1eec7338/packages/core/src/NodeView.ts#L195\n */\n ignoreMutation(\n mutation: MutationRecord | { type: 'selection'; target: Element },\n ) {\n if (!this.dom || !this.contentDOM) {\n return true;\n }\n if (this.config.ignoreMutation) {\n return this.config.ignoreMutation(mutation);\n }\n\n // a leaf/atom node is like a black box for ProseMirror\n // and should be fully handled by the node view\n if (this.node.isLeaf || this.node.isAtom) {\n return true;\n }\n\n // ProseMirror should handle any selections\n if (mutation.type === 'selection') {\n return false;\n }\n\n // we will allow mutation contentDOM with attributes\n // so we can for example adding classes within our node view\n if (this.contentDOM === mutation.target && mutation.type === 'attributes') {\n return true;\n }\n\n // ProseMirror should handle any changes within contentDOM\n if (this.contentDOM.contains(mutation.target)) {\n return false;\n }\n\n return true;\n }\n}\n\ninterface AtomConfig {\n /** Is an atom if is not a leaf node */\n atom: true;\n /**\n * ProseMissor content expression\n * @see {@link https://prosemirror.net/docs/guide/#schema.content_expressions|ProseMirror schema guide}\n */\n content?: string;\n}\ninterface NonAtomConfig {\n /** Is an atom if is not a leaf node */\n atom: false;\n /**\n * ProseMissor content expression\n * @see {@link https://prosemirror.net/docs/guide/#schema.content_expressions|ProseMirror schema guide}\n */\n content: string;\n}\n\n// Maybe this should be split so that a different one exists for each of the 2 functions which takes\n// it as an argument\nexport type EmberNodeConfig = {\n name: string;\n /** ember component to render as a Node View */\n component: ComponentLike<{ Args: EmberNodeArgs }>;\n inline: boolean;\n /** ProseMirror 'group' property for the created node */\n group: string;\n draggable?: boolean;\n /** @see {@link https://prosemirror.net/docs/ref/#model.NodeSpec.defining} */\n defining?: boolean;\n /**\n * @deprecated\n */\n recreateUri?: boolean;\n /**\n * @deprecated\n */\n uriAttributes?: [string];\n /** Generate a new URI when pasting the node? */\n recreateUriFunction?: (attrs: Attrs) => Attrs;\n /** A map of attributes to assign to this node */\n attrs?: {\n [name: string]: AttributeSpec & {\n editable?: boolean;\n serialize?: (node: PNode) => string;\n parse?: (element: HTMLElement) => unknown;\n };\n };\n /** @see {@link https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM} */\n parseDOM?: readonly TagParseRule[];\n /** @see {@link https://prosemirror.net/docs/ref/#model.NodeSpec.toDOM} */\n toDOM?: (node: PNode) => DOMOutputSpec;\n /**\n * Allows creating a serialized version based on the node itself\n * @see {@link SayNodeSpec}\n */\n serialize?: NodeSerializer;\n /**\n * Prevents the editor view from handling events which are inside the ember-node but not inside it's editable content.\n * By default this will stop events which occur inside the ember-node but not inside it's content.\n * Returning a boolean will stop or not stop an event, returning null will hand over to the default logic.\n * Only override the default logic if you know what you are doing.\n * @param event The event to check\n */\n stopEvent?: (event: Event) => boolean | null;\n domClassNames?: string[];\n contentDomClassNames?: string[];\n /**\n * Determines whether a DOM mutation should be ignored by prosemirror.\n * Use this to avoid rerendering a component for every change.\n * DOM mutations occuring inside the ember-node which are not inside it's editable content are ignored.\n * Selections are always handled by prosemirror.\n * Already has a default implementation. Only override if you know what you are doing.\n * @param mutation\n * @returns whether to ignore the mutation\n */\n ignoreMutation?: (\n mutation: MutationRecord | { type: 'selection'; target: Element },\n ) => boolean;\n /** Do we need to workaround cursor problems on Firefox */\n needsFFKludge?: boolean;\n /** Do we need to workaround cursor problems on Chrome */\n needsChromeCursorFix?: boolean;\n} & (AtomConfig | NonAtomConfig) & {\n /** This is so we can use custom node config specs */\n [key: string]: unknown;\n };\n\n/**\n * Generate the {@link SayNodeSpec} for the {@link EmberNodeView} with the passed config\n */\nexport function createEmberNodeSpec(config: EmberNodeConfig): SayNodeSpec {\n const {\n name,\n inline,\n group,\n content,\n atom,\n draggable,\n defining,\n recreateUri,\n uriAttributes,\n recreateUriFunction,\n attrs,\n parseDOM,\n toDOM,\n serialize,\n ...passthrough\n } = config;\n return {\n inline,\n atom,\n group,\n content,\n recreateUri,\n uriAttributes,\n recreateUriFunction,\n attrs,\n draggable,\n defining,\n parseDOM: parseDOM ?? [\n {\n tag: inline ? 'span' : 'div',\n getAttrs(node: string | HTMLElement) {\n if (typeof node === 'string') {\n return false;\n }\n if (node.dataset['emberNode'] === name) {\n const result: Record<string, unknown> = {};\n if (attrs) {\n for (const [attributeName, attributeSpec] of Object.entries(\n attrs,\n )) {\n if (attributeSpec.parse) {\n result[attributeName] = attributeSpec.parse(node);\n }\n }\n }\n\n return result;\n }\n return false;\n },\n },\n ],\n toDOM:\n toDOM ??\n ((node: PNode) => {\n const serializedAttributes: Record<string, string> = {\n 'data-ember-node': name,\n };\n if (attrs) {\n for (const [attributeName, attributeSpec] of Object.entries(attrs)) {\n if (attributeSpec.serialize) {\n serializedAttributes[attributeName] =\n attributeSpec.serialize(node);\n }\n }\n }\n return [\n inline ? 'span' : 'div',\n serializedAttributes,\n ...(atom\n ? []\n : [[inline ? 'span' : 'div', { 'data-slot': 'true' }, 0]]),\n ];\n }),\n serialize,\n ...passthrough,\n };\n}\n\nexport type SayNodeViewConstructor = (\n node: PNode,\n view: SayView,\n getPos: () => number | undefined,\n) => NodeView;\n/**\n * Creates a constructor for EmberNodeViews according to the passed config\n * @see {@link EmberNodeView}\n */\nexport function createEmberNodeView(config: EmberNodeConfig) {\n return function (controller: SayController): SayNodeViewConstructor {\n return function (node, view: SayView, getPos) {\n return new EmberNodeView(controller, config, node, view, getPos);\n };\n };\n}\n"],"names":["emberComponent","owner","name","inline","template","props","componentName","uuidv4","register","Component","extend","layout","tagName","component","lookup","node","document","createElement","classList","add","appendTo","EmberNodeView","dom","contentDOM","config","constructor","controller","emberNodeConfig","pNode","view","getPos","componentClass","atom","hbs","undefined","dataset","updateAttribute","attr","value","ignoreHistory","pos","transaction","state","tr","setMeta","setNodeAttribute","dispatch","selectNode","activeEditorState","setSelection","NodeSelection","create","doc","activeEditorView","selected","domClassNames","contentDomClassNames","update","_decorations","innerDecorations","type","set","deselectNode","remove","destroy","stopEvent","event","configStop","includes","target","isInElement","contains","ignoreMutation","mutation","isLeaf","isAtom","createEmberNodeSpec","group","content","draggable","defining","recreateUri","uriAttributes","recreateUriFunction","attrs","parseDOM","toDOM","serialize","passthrough","tag","getAttrs","result","attributeName","attributeSpec","Object","entries","parse","serializedAttributes","createEmberNodeView"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA0DA,SAASA,cAAcA,CACrBC,KAAY,EACZC,IAAY,EACZC,MAAe,EACfC,QAAyB,EACzBC,KAIC,EACuD;AACxD;EACA,MAAMC,aAAa,GAAG,CAAA,EAAGJ,IAAI,IAAIK,EAAM,EAAE,CAAA,CAAE;AAC3CN,EAAAA,KAAK,CAACO,QAAQ,CACZ,CAAA,UAAA,EAAaF,aAAa,CAAA,CAAE;AAC5B;EACAG,SAAS,CAACC,MAAM,CAAC;AACfC,IAAAA,MAAM,EAAEP,QAAQ;AAChBQ,IAAAA,OAAO,EAAE,EAAE;IACX,GAAGP;AACL,GAAC,CACH,CAAC;EACD,MAAMQ,SAAS,GAAGZ,KAAK,CAACa,MAAM,CAC5B,CAAA,UAAA,EAAaR,aAAa,CAAA,CAC5B,CAAyB;EACzB,MAAMS,IAAI,GAAGC,QAAQ,CAACC,aAAa,CAACd,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAC5DY,EAAAA,IAAI,CAACG,SAAS,CAACC,GAAG,CAAC,YAAY,CAAC;AAChCN,EAAAA,SAAS,CAACO,QAAQ,CAACL,IAAI,CAAC;EACxB,OAAO;IAAEA,IAAI;AAAEF,IAAAA;GAAW;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMQ,aAAa,CAAqB;EACtCN,IAAI;EACJO,GAAG;EACHC,UAAU;EACVvB,cAAc;EACdI,QAAQ;EACRoB,MAAM;EAENC,WAAWA,CACTC,UAAyB,EACzBC,eAAgC,EAChCC,KAAY,EACZC,IAAa,EACbC,MAAgC,EAChC;AACA;AACA;IACA,IAAI,CAACN,MAAM,GAAGG,eAAe;IAC7B,MAAM;MAAEzB,IAAI;AAAEW,MAAAA,SAAS,EAAEkB,cAAc;MAAEC,IAAI;AAAE7B,MAAAA;AAAO,KAAC,GAAGwB,eAAe;;AAEzE;IACA,IAAI,CAACvB,QAAQ,GAAG6B,GAAG,CAAA;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAA,CAA0C;IACtC,IAAI,CAAClB,IAAI,GAAGa,KAAK;IACjB,IAAI,CAACL,UAAU,GAAG,CAACS,IAAI,GACnBhB,QAAQ,CAACC,aAAa,CAACd,MAAM,GAAG,MAAM,GAAG,KAAK,EAAE,EAAE,CAAC,GACnD+B,SAAS;AACb;IACA,IAAI,IAAI,CAACX,UAAU,EAAE;MACnB,IAAI,CAACA,UAAU,CAACY,OAAO,CAAC,kBAAkB,CAAC,GAAG,MAAM;AACtD,IAAA;IACA,MAAM;MAAEpB,IAAI;AAAEF,MAAAA;AAAU,KAAC,GAAGb,cAAc,CACxC0B,UAAU,CAACzB,KAAK,EAChBC,IAAI,EACJC,MAAM,EACN,IAAI,CAACC,QAAQ,EACb;MACE0B,MAAM;AACNf,MAAAA,IAAI,EAAEa,KAAK;AACXQ,MAAAA,eAAe,EAAEA,CAACC,IAAI,EAAEC,KAAK,EAAEC,aAAa,KAAK;AAC/C,QAAA,MAAMC,GAAG,GAAGV,MAAM,EAAE;QACpB,IAAIU,GAAG,KAAKN,SAAS,EAAE;AACrB,UAAA,MAAMO,WAAW,GAAGZ,IAAI,CAACa,KAAK,CAACC,EAAE;AACjC,UAAA,IAAIJ,aAAa,EAAE;AACjBE,YAAAA,WAAW,CAACG,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC;AAC5C,UAAA;UACAH,WAAW,CAACI,gBAAgB,CAACL,GAAG,EAAEH,IAAI,EAAEC,KAAK,CAAC;AAC9CT,UAAAA,IAAI,CAACiB,QAAQ,CAACL,WAAW,CAAC;AAC5B,QAAA;MACF,CAAC;MACDM,UAAU,EAAEA,MAAM;AAChB,QAAA,MAAMP,GAAG,GAAGV,MAAM,EAAE;QACpB,IAAIU,GAAG,KAAKN,SAAS,EAAE;AACrB,UAAA,MAAMS,EAAE,GAAGjB,UAAU,CAACsB,iBAAiB,CAACL,EAAE;AAC1CA,UAAAA,EAAE,CAACM,YAAY,CACbC,aAAa,CAACC,MAAM,CAACzB,UAAU,CAACsB,iBAAiB,CAACI,GAAG,EAAEZ,GAAG,CAC5D,CAAC;AACDd,UAAAA,UAAU,CAAC2B,gBAAgB,CAACP,QAAQ,CAACH,EAAE,CAAC;AAC1C,QAAA;MACF,CAAC;MACDjB,UAAU;MACVH,UAAU,EAAE,IAAI,CAACA,UAAU;AAC3BV,MAAAA,SAAS,EAAEkB,cAAc;MACzBC,IAAI;MACJH,IAAI;AACJyB,MAAAA,QAAQ,EAAE;AACZ,KACF,CAAC;IACD,IAAI,CAAChC,GAAG,GAAGP,IAAI;AACf,IAAA,IAAI,IAAI,CAACS,MAAM,CAAC+B,aAAa,EAAE;AAC7B,MAAA,IAAI,CAACjC,GAAG,CAACJ,SAAS,CAACC,GAAG,CAAC,GAAG,IAAI,CAACK,MAAM,CAAC+B,aAAa,CAAC;AACtD,IAAA;IACA,IAAI,IAAI,CAAC/B,MAAM,CAACgC,oBAAoB,IAAI,IAAI,CAACjC,UAAU,EAAE;AACvD,MAAA,IAAI,CAACA,UAAU,CAACL,SAAS,CAACC,GAAG,CAAC,GAAG,IAAI,CAACK,MAAM,CAACgC,oBAAoB,CAAC;AACpE,IAAA;IAEA,IAAI,CAACxD,cAAc,GAAGa,SAAS;AACjC,EAAA;AAEA4C,EAAAA,MAAMA,CACJ1C,IAAW,EACX2C,YAAmC,EACnCC,gBAAkC,EAClC;IACA,IAAI5C,IAAI,CAAC6C,IAAI,KAAK,IAAI,CAAC7C,IAAI,CAAC6C,IAAI,EAAE,OAAO,KAAK;IAC9C,IAAI,CAAC7C,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACf,cAAc,CAAC6D,GAAG,CAAC,MAAM,EAAE9C,IAAI,CAAC;IACrC,IAAI,CAACf,cAAc,CAAC6D,GAAG,CAAC,oBAAoB,EAAEF,gBAAgB,CAAC;AAC/D,IAAA,OAAO,IAAI;AACb,EAAA;AAEAZ,EAAAA,UAAUA,GAAG;IACX,IAAI,CAACzB,GAAG,CAACJ,SAAS,CAACC,GAAG,CAAC,0BAA0B,CAAC;IAClD,IAAI,CAACnB,cAAc,CAAC6D,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;AAC3C,EAAA;AAEAC,EAAAA,YAAYA,GAAG;IACb,IAAI,CAACxC,GAAG,CAACJ,SAAS,CAAC6C,MAAM,CAAC,0BAA0B,CAAC;IACrD,IAAI,CAAC/D,cAAc,CAAC6D,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;AAC5C,EAAA;AAEAG,EAAAA,OAAOA,GAAG;AACR,IAAA,IAAI,CAAChE,cAAc,CAACgE,OAAO,EAAE;AAC/B,EAAA;;AAEA;AACF;AACA;EACEC,SAASA,CAACC,KAAY,EAAE;AACtB,IAAA,IAAI,CAAC,IAAI,CAAC5C,GAAG,EAAE;AACb,MAAA,OAAO,KAAK;AACd,IAAA;AAEA,IAAA,IAAI,IAAI,CAACE,MAAM,CAACyC,SAAS,EAAE;MACzB,MAAME,UAAU,GAAG,IAAI,CAAC3C,MAAM,CAACyC,SAAS,CAACC,KAAK,CAAC;MAC/C,IAAIC,UAAU,KAAK,IAAI,EAAE;AACvB,QAAA,OAAOA,UAAU;AACnB,MAAA;AACF,IAAA;;AAEA;AACA;AACA;AACA,IAAA,IACE,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAACC,QAAQ,CAChEF,KAAK,CAACN,IACR,CAAC,EACD;AACA,MAAA,OAAO,KAAK;AACd,IAAA;AAEA,IAAA,MAAMS,MAAM,GAAGH,KAAK,CAACG,MAAqB;AAC1C,IAAA,MAAMC,WAAW,GACf,IAAI,CAAChD,GAAG,CAACiD,QAAQ,CAACF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC9C,UAAU,EAAEgD,QAAQ,CAACF,MAAM,CAAC;AAEjE,IAAA,OAAOC,WAAW;AACpB,EAAA;;AAEA;AACF;AACA;EACEE,cAAcA,CACZC,QAAiE,EACjE;IACA,IAAI,CAAC,IAAI,CAACnD,GAAG,IAAI,CAAC,IAAI,CAACC,UAAU,EAAE;AACjC,MAAA,OAAO,IAAI;AACb,IAAA;AACA,IAAA,IAAI,IAAI,CAACC,MAAM,CAACgD,cAAc,EAAE;AAC9B,MAAA,OAAO,IAAI,CAAChD,MAAM,CAACgD,cAAc,CAACC,QAAQ,CAAC;AAC7C,IAAA;;AAEA;AACA;IACA,IAAI,IAAI,CAAC1D,IAAI,CAAC2D,MAAM,IAAI,IAAI,CAAC3D,IAAI,CAAC4D,MAAM,EAAE;AACxC,MAAA,OAAO,IAAI;AACb,IAAA;;AAEA;AACA,IAAA,IAAIF,QAAQ,CAACb,IAAI,KAAK,WAAW,EAAE;AACjC,MAAA,OAAO,KAAK;AACd,IAAA;;AAEA;AACA;AACA,IAAA,IAAI,IAAI,CAACrC,UAAU,KAAKkD,QAAQ,CAACJ,MAAM,IAAII,QAAQ,CAACb,IAAI,KAAK,YAAY,EAAE;AACzE,MAAA,OAAO,IAAI;AACb,IAAA;;AAEA;IACA,IAAI,IAAI,CAACrC,UAAU,CAACgD,QAAQ,CAACE,QAAQ,CAACJ,MAAM,CAAC,EAAE;AAC7C,MAAA,OAAO,KAAK;AACd,IAAA;AAEA,IAAA,OAAO,IAAI;AACb,EAAA;AACF;;AAqBA;AACA;;AAqEA;AACA;AACA;AACO,SAASO,mBAAmBA,CAACpD,MAAuB,EAAe;EACxE,MAAM;IACJtB,IAAI;IACJC,MAAM;IACN0E,KAAK;IACLC,OAAO;IACP9C,IAAI;IACJ+C,SAAS;IACTC,QAAQ;IACRC,WAAW;IACXC,aAAa;IACbC,mBAAmB;IACnBC,KAAK;IACLC,QAAQ;IACRC,KAAK;IACLC,SAAS;IACT,GAAGC;AACL,GAAC,GAAGhE,MAAM;EACV,OAAO;IACLrB,MAAM;IACN6B,IAAI;IACJ6C,KAAK;IACLC,OAAO;IACPG,WAAW;IACXC,aAAa;IACbC,mBAAmB;IACnBC,KAAK;IACLL,SAAS;IACTC,QAAQ;IACRK,QAAQ,EAAEA,QAAQ,IAAI,CACpB;AACEI,MAAAA,GAAG,EAAEtF,MAAM,GAAG,MAAM,GAAG,KAAK;MAC5BuF,QAAQA,CAAC3E,IAA0B,EAAE;AACnC,QAAA,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;AAC5B,UAAA,OAAO,KAAK;AACd,QAAA;QACA,IAAIA,IAAI,CAACoB,OAAO,CAAC,WAAW,CAAC,KAAKjC,IAAI,EAAE;UACtC,MAAMyF,MAA+B,GAAG,EAAE;AAC1C,UAAA,IAAIP,KAAK,EAAE;AACT,YAAA,KAAK,MAAM,CAACQ,aAAa,EAAEC,aAAa,CAAC,IAAIC,MAAM,CAACC,OAAO,CACzDX,KACF,CAAC,EAAE;cACD,IAAIS,aAAa,CAACG,KAAK,EAAE;gBACvBL,MAAM,CAACC,aAAa,CAAC,GAAGC,aAAa,CAACG,KAAK,CAACjF,IAAI,CAAC;AACnD,cAAA;AACF,YAAA;AACF,UAAA;AAEA,UAAA,OAAO4E,MAAM;AACf,QAAA;AACA,QAAA,OAAO,KAAK;AACd,MAAA;AACF,KAAC,CACF;AACDL,IAAAA,KAAK,EACHA,KAAK,KACHvE,IAAW,IAAK;AAChB,MAAA,MAAMkF,oBAA4C,GAAG;AACnD,QAAA,iBAAiB,EAAE/F;OACpB;AACD,MAAA,IAAIkF,KAAK,EAAE;AACT,QAAA,KAAK,MAAM,CAACQ,aAAa,EAAEC,aAAa,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACX,KAAK,CAAC,EAAE;UAClE,IAAIS,aAAa,CAACN,SAAS,EAAE;YAC3BU,oBAAoB,CAACL,aAAa,CAAC,GACjCC,aAAa,CAACN,SAAS,CAACxE,IAAI,CAAC;AACjC,UAAA;AACF,QAAA;AACF,MAAA;MACA,OAAO,CACLZ,MAAM,GAAG,MAAM,GAAG,KAAK,EACvB8F,oBAAoB,EACpB,IAAIjE,IAAI,GACJ,EAAE,GACF,CAAC,CAAC7B,MAAM,GAAG,MAAM,GAAG,KAAK,EAAE;AAAE,QAAA,WAAW,EAAE;AAAO,OAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAC7D;AACH,IAAA,CAAC,CAAC;IACJoF,SAAS;IACT,GAAGC;GACJ;AACH;AAOA;AACA;AACA;AACA;AACO,SAASU,mBAAmBA,CAAC1E,MAAuB,EAAE;EAC3D,OAAO,UAAUE,UAAyB,EAA0B;AAClE,IAAA,OAAO,UAAUX,IAAI,EAAEc,IAAa,EAAEC,MAAM,EAAE;AAC5C,MAAA,OAAO,IAAIT,aAAa,CAACK,UAAU,EAAEF,MAAM,EAAET,IAAI,EAAEc,IAAI,EAAEC,MAAM,CAAC;IAClE,CAAC;EACH,CAAC;AACH;;;;"}
|
|
1
|
+
{"version":3,"file":"ember-node.js","sources":["../../../src/utils/_private/ember-node.ts"],"sourcesContent":["/**\n * Contains code from https://github.com/ueberdosis/tiptap/blob/d61a621186470ce286e2cecf8206837a1eec7338/packages/core/src/NodeView.ts#L195\n *\n * MIT License\n * Copyright (c) 2023, Tiptap GmbH\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n/**\n\n */\n\nimport { hbs, type TemplateFactory } from 'ember-cli-htmlbars';\nimport type {\n AttributeSpec,\n DOMOutputSpec,\n TagParseRule,\n Node as PNode,\n Attrs,\n} from 'prosemirror-model';\nimport {\n Decoration,\n type DecorationSource,\n type NodeView,\n} from 'prosemirror-view';\nimport { v4 as uuidv4 } from 'uuid';\n// eslint-disable-next-line ember/no-classic-components\nimport Component from '@ember/component';\nimport type Owner from '@ember/owner';\nimport type { ComponentLike } from '@glint/template';\nimport SayController from '#root/core/say-controller.ts';\nimport type SayNodeSpec from '#root/core/say-node-spec.ts';\nimport type { NodeSerializer } from '#root/core/say-serializer.ts';\nimport type SayView from '#root/core/say-view.ts';\nimport { NodeSelection } from 'prosemirror-state';\n\nexport interface EmberInlineComponent extends Component, EmberNodeArgs {\n appendTo(selector: string | Element): this;\n}\n\nexport interface EmberNodeArgs {\n getPos: () => number | undefined;\n node: PNode;\n /**\n * Util method to help with keeping state in `attrs` of the node.\n * Instead of a tracked property, you'll often use the following logic to keep state inside the node:\n * `get someText() { return this.args.node.attrs.someText; }`\n * `set someText(value) { return this.args.updateAttribute('someText', value); }`\n */\n updateAttribute: (\n attr: string,\n value: unknown,\n ignoreHistory?: boolean,\n ) => void;\n /**\n * Util method which selects the node within the editor\n */\n selectNode: () => void;\n controller: SayController;\n view: SayView;\n selected: boolean;\n contentDecorations?: DecorationSource;\n}\n\nfunction emberComponent(\n owner: Owner,\n name: string,\n inline: boolean,\n template: TemplateFactory,\n props: EmberNodeArgs & {\n atom: boolean;\n component: ComponentLike<{ Args: EmberNodeArgs }>;\n contentDOM?: HTMLElement;\n },\n): { node: HTMLElement; component: EmberInlineComponent } {\n // const instance = window.__APPLICATION;\n const componentName = `${name}-${uuidv4()}`;\n owner.register(\n `component:${componentName}`,\n // eslint-disable-next-line ember/no-classic-classes\n Component.extend({\n layout: template,\n tagName: '',\n ...props,\n }),\n );\n const component = owner.lookup(\n `component:${componentName}`,\n ) as EmberInlineComponent;\n const node = document.createElement(inline ? 'span' : 'div');\n node.classList.add('ember-node');\n component.appendTo(node);\n return { node, component };\n}\n\n/**\n * An EmberNode is a node with a custom Node View defined by an ember template.\n * First define your EmberNodeConfig, which should contain the information for:\n *\n * Afterwards use `createEmberNodeSpec(config)` and `createEmberNodeView(config)` to insert them in the schema.\n *\n * Special notes for EmberNode components:\n * - Prosemirror nodes are immutable by design. Any change to a node will create a new node that is loaded in.\n * - A rerender is avoided as much as possible here\n * - An ember component might still rerender because of other reasons (-> not yet known which reasons and if they exist)\n * - This means EmberNode components might lose their state at any time. *Don't save state in components properties*. @tracked properties will most likely not work as wanted.\n * - Keep state in `attrs` of the node.\n * Instead of a tracked property, you'll often use the following logic to keep state inside the node:\n * `get someText() { return this.args.node.attrs.someText; }`\n * `set someText(value) { return this.args.updateAttribute('someText', value); }`\n *\n * - when defining an ember-node using these utility functions, nested contenteditable attributes should be prevented.\n * Ember nodes which can contain editable content should never be `contenteditable: false` as a whole,\n * but only the parts which are `contenteditable: false` should be marked as so.\n * E.g.: It's preferred to write:\n *\n * ```\n * <div>\n * <header contenteditable=\"false\">\n * <p>header</p>\n * </header>\n * <content>\n * {{yield}}\n * </content>\n * </div>\n * ```\n * instead of\n * ```\n * <div contenteditable=\"false\">\n * <header>\n * <p>header</p>\n * </header>\n * <content contenteditable=\"true\">\n * {{yield}}\n * </content>\n * </div>\n * ```\n */\nclass EmberNodeView implements NodeView {\n node: PNode;\n dom: Element;\n contentDOM?: HTMLElement;\n emberComponent: EmberInlineComponent;\n template: TemplateFactory;\n config: EmberNodeConfig;\n\n constructor(\n controller: SayController,\n emberNodeConfig: EmberNodeConfig,\n pNode: PNode,\n view: SayView,\n getPos: () => number | undefined,\n ) {\n // when a node gets updated, `update()` is called.\n // We set the new node here and pass it to the component to render it.\n this.config = emberNodeConfig;\n const { name, component: componentClass, atom, inline } = emberNodeConfig;\n\n this.template = hbs`<this.component\n @getPos={{this.getPos}}\n @node={{this.node}}\n @updateAttribute={{this.updateAttribute}}\n @controller={{this.controller}}\n @view={{this.view}}\n @selected={{this.selected}}\n @contentDecorations={{this.contentDecorations}}\n @selectNode={{this.selectNode}}\n >\n {{#unless this.atom}}\n {{! @glint-expect-error: not typesafe yet }}\n <EmberNode::Slot @contentDOM={{this.contentDOM}}/>\n {{/unless}}\n </this.component>`;\n this.node = pNode;\n this.contentDOM = !atom\n ? document.createElement(inline ? 'span' : 'div', {})\n : undefined;\n // Note `this.contentDOM` needs an attribute to prevent chromium-based browsers from deleting it when it is empty/only has empty children.\n if (this.contentDOM) {\n this.contentDOM.dataset['emberNodeContent'] = 'true';\n }\n const { node, component } = emberComponent(\n controller.owner,\n name,\n inline,\n this.template,\n {\n getPos,\n node: pNode,\n updateAttribute: (attr, value, ignoreHistory) => {\n const pos = getPos();\n if (pos !== undefined) {\n const transaction = view.state.tr;\n if (ignoreHistory) {\n transaction.setMeta('addToHistory', false);\n }\n transaction.setNodeAttribute(pos, attr, value);\n view.dispatch(transaction);\n }\n },\n selectNode: () => {\n const pos = getPos();\n if (pos !== undefined) {\n const tr = controller.activeEditorState.tr;\n tr.setSelection(\n NodeSelection.create(controller.activeEditorState.doc, pos),\n );\n controller.activeEditorView.dispatch(tr);\n }\n },\n controller,\n contentDOM: this.contentDOM,\n component: componentClass,\n atom,\n view,\n selected: false,\n },\n );\n this.dom = node;\n if (this.config.domClassNames) {\n this.dom.classList.add(...this.config.domClassNames);\n }\n if (this.config.contentDomClassNames && this.contentDOM) {\n this.contentDOM.classList.add(...this.config.contentDomClassNames);\n }\n\n this.emberComponent = component;\n }\n\n update(\n node: PNode,\n _decorations: readonly Decoration[],\n innerDecorations: DecorationSource,\n ) {\n if (node.type !== this.node.type) return false;\n this.node = node;\n this.emberComponent.set('node', node);\n this.emberComponent.set('contentDecorations', innerDecorations);\n return true;\n }\n\n selectNode() {\n this.dom.classList.add('ProseMirror-selectednode');\n this.emberComponent.set('selected', true);\n }\n\n deselectNode() {\n this.dom.classList.remove('ProseMirror-selectednode');\n this.emberComponent.set('selected', false);\n }\n\n destroy() {\n this.emberComponent.destroy();\n }\n\n /**\n * Based on https://github.com/ueberdosis/tiptap/blob/d61a621186470ce286e2cecf8206837a1eec7338/packages/core/src/NodeView.ts#LL99C6-L99C6\n */\n stopEvent(event: Event) {\n if (!this.dom) {\n return false;\n }\n\n if (this.config.stopEvent) {\n const configStop = this.config.stopEvent(event);\n if (configStop !== null) {\n return configStop;\n }\n }\n\n // A dragstart event can come from non-content DOM and be valid, so don't stop it\n // Stopping the event results in the rendered HTML being used for the drag event, rather than\n // the serialized HTML, so breaks drag-drop for many EmberNodes\n if (\n ['dragstart', 'dragend', 'drop', 'dragover', 'dragenter'].includes(\n event.type,\n )\n ) {\n return false;\n }\n\n const target = event.target as HTMLElement;\n const isInElement =\n this.dom.contains(target) && !this.contentDOM?.contains(target);\n\n return isInElement;\n }\n\n /**\n * Taken from https://github.com/ueberdosis/tiptap/blob/d61a621186470ce286e2cecf8206837a1eec7338/packages/core/src/NodeView.ts#L195\n */\n ignoreMutation(\n mutation: MutationRecord | { type: 'selection'; target: Element },\n ) {\n if (!this.dom || !this.contentDOM) {\n return true;\n }\n if (this.config.ignoreMutation) {\n return this.config.ignoreMutation(mutation);\n }\n\n // a leaf/atom node is like a black box for ProseMirror\n // and should be fully handled by the node view\n if (this.node.isLeaf || this.node.isAtom) {\n return true;\n }\n\n // ProseMirror should handle any selections\n if (mutation.type === 'selection') {\n return false;\n }\n\n // we will allow mutation contentDOM with attributes\n // so we can for example adding classes within our node view\n if (this.contentDOM === mutation.target && mutation.type === 'attributes') {\n return true;\n }\n\n // ProseMirror should handle any changes within contentDOM\n if (this.contentDOM.contains(mutation.target)) {\n return false;\n }\n\n return true;\n }\n}\n\ninterface AtomConfig {\n /** Is an atom if is not a leaf node */\n atom: true;\n /**\n * ProseMissor content expression\n * @see {@link https://prosemirror.net/docs/guide/#schema.content_expressions|ProseMirror schema guide}\n */\n content?: string;\n}\ninterface NonAtomConfig {\n /** Is an atom if is not a leaf node */\n atom: false;\n /**\n * ProseMissor content expression\n * @see {@link https://prosemirror.net/docs/guide/#schema.content_expressions|ProseMirror schema guide}\n */\n content: string;\n}\n\n// Maybe this should be split so that a different one exists for each of the 2 functions which takes\n// it as an argument\nexport type EmberNodeConfig = {\n name: string;\n /** ember component to render as a Node View */\n component: ComponentLike<{ Args: EmberNodeArgs }>;\n inline: boolean;\n /** ProseMirror 'group' property for the created node */\n group: string;\n draggable?: boolean;\n /** @see {@link https://prosemirror.net/docs/ref/#model.NodeSpec.defining} */\n defining?: boolean;\n /**\n * @deprecated\n */\n recreateUri?: boolean;\n /**\n * @deprecated\n */\n uriAttributes?: [string];\n /** Generate a new URI when pasting the node? */\n recreateUriFunction?: (attrs: Attrs) => Attrs;\n /** A map of attributes to assign to this node */\n attrs?: {\n [name: string]: AttributeSpec & {\n editable?: boolean;\n serialize?: (node: PNode) => string;\n parse?: (element: HTMLElement) => unknown;\n };\n };\n /** @see {@link https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM} */\n parseDOM?: readonly TagParseRule[];\n /** @see {@link https://prosemirror.net/docs/ref/#model.NodeSpec.toDOM} */\n toDOM?: (node: PNode) => DOMOutputSpec;\n /**\n * Allows creating a serialized version based on the node itself\n * @see {@link SayNodeSpec}\n */\n serialize?: NodeSerializer;\n /**\n * Prevents the editor view from handling events which are inside the ember-node but not inside it's editable content.\n * By default this will stop events which occur inside the ember-node but not inside it's content.\n * Returning a boolean will stop or not stop an event, returning null will hand over to the default logic.\n * Only override the default logic if you know what you are doing.\n * @param event The event to check\n */\n stopEvent?: (event: Event) => boolean | null;\n domClassNames?: string[];\n contentDomClassNames?: string[];\n /**\n * Determines whether a DOM mutation should be ignored by prosemirror.\n * Use this to avoid rerendering a component for every change.\n * DOM mutations occuring inside the ember-node which are not inside it's editable content are ignored.\n * Selections are always handled by prosemirror.\n * Already has a default implementation. Only override if you know what you are doing.\n * @param mutation\n * @returns whether to ignore the mutation\n */\n ignoreMutation?: (\n mutation: MutationRecord | { type: 'selection'; target: Element },\n ) => boolean;\n /** Do we need to workaround cursor problems on Firefox */\n needsFFKludge?: boolean;\n /** Do we need to workaround cursor problems on Chrome */\n needsChromeCursorFix?: boolean;\n} & (AtomConfig | NonAtomConfig) & {\n /** This is so we can use custom node config specs */\n [key: string]: unknown;\n };\n\n/**\n * Generate the {@link SayNodeSpec} for the {@link EmberNodeView} with the passed config\n */\nexport function createEmberNodeSpec(config: EmberNodeConfig): SayNodeSpec {\n const {\n name,\n inline,\n group,\n content,\n atom,\n draggable,\n defining,\n recreateUri,\n uriAttributes,\n recreateUriFunction,\n attrs,\n parseDOM,\n toDOM,\n serialize,\n ...passthrough\n } = config;\n return {\n inline,\n atom,\n group,\n content,\n recreateUri,\n uriAttributes,\n recreateUriFunction,\n attrs,\n draggable,\n defining,\n parseDOM: parseDOM ?? [\n {\n tag: inline ? 'span' : 'div',\n getAttrs(node: string | HTMLElement) {\n if (typeof node === 'string') {\n return false;\n }\n if (node.dataset['emberNode'] === name) {\n const result: Record<string, unknown> = {};\n if (attrs) {\n for (const [attributeName, attributeSpec] of Object.entries(\n attrs,\n )) {\n if (attributeSpec.parse) {\n result[attributeName] = attributeSpec.parse(node);\n }\n }\n }\n\n return result;\n }\n return false;\n },\n },\n ],\n toDOM:\n toDOM ??\n ((node: PNode) => {\n const serializedAttributes: Record<string, string> = {\n 'data-ember-node': name,\n };\n if (attrs) {\n for (const [attributeName, attributeSpec] of Object.entries(attrs)) {\n if (attributeSpec.serialize) {\n serializedAttributes[attributeName] =\n attributeSpec.serialize(node);\n }\n }\n }\n return [\n inline ? 'span' : 'div',\n serializedAttributes,\n ...(atom\n ? []\n : [[inline ? 'span' : 'div', { 'data-slot': 'true' }, 0]]),\n ];\n }),\n serialize,\n ...passthrough,\n };\n}\n\nexport type SayNodeViewConstructor = (\n node: PNode,\n view: SayView,\n getPos: () => number | undefined,\n) => NodeView;\n/**\n * Creates a constructor for EmberNodeViews according to the passed config\n * @see {@link EmberNodeView}\n */\nexport function createEmberNodeView(config: EmberNodeConfig) {\n return function (controller: SayController): SayNodeViewConstructor {\n return function (node, view: SayView, getPos) {\n return new EmberNodeView(controller, config, node, view, getPos);\n };\n };\n}\n"],"names":["emberComponent","owner","name","inline","template","props","componentName","uuidv4","register","Component","extend","layout","tagName","component","lookup","node","document","createElement","classList","add","appendTo","EmberNodeView","dom","contentDOM","config","constructor","controller","emberNodeConfig","pNode","view","getPos","componentClass","atom","hbs","undefined","dataset","updateAttribute","attr","value","ignoreHistory","pos","transaction","state","tr","setMeta","setNodeAttribute","dispatch","selectNode","activeEditorState","setSelection","NodeSelection","create","doc","activeEditorView","selected","domClassNames","contentDomClassNames","update","_decorations","innerDecorations","type","set","deselectNode","remove","destroy","stopEvent","event","configStop","includes","target","isInElement","contains","ignoreMutation","mutation","isLeaf","isAtom","createEmberNodeSpec","group","content","draggable","defining","recreateUri","uriAttributes","recreateUriFunction","attrs","parseDOM","toDOM","serialize","passthrough","tag","getAttrs","result","attributeName","attributeSpec","Object","entries","parse","serializedAttributes","createEmberNodeView"],"mappings":"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"}
|
|
@@ -10,14 +10,7 @@ import { DataFactory } from 'rdf-data-factory';
|
|
|
10
10
|
|
|
11
11
|
class ModelDataFactory extends DataFactory {
|
|
12
12
|
quad(subject, predicate, object, graph) {
|
|
13
|
-
|
|
14
|
-
return {
|
|
15
|
-
...quad,
|
|
16
|
-
subject,
|
|
17
|
-
predicate,
|
|
18
|
-
object,
|
|
19
|
-
graph
|
|
20
|
-
};
|
|
13
|
+
return super.quad(subject, predicate, object, graph);
|
|
21
14
|
}
|
|
22
15
|
namedNode(iri, node) {
|
|
23
16
|
const namedNode = super.namedNode(iri);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sources":["../../../../src/utils/_private/rdfa-parser/util.ts"],"sourcesContent":["/**\n * Modified from https://github.com/rubensworks/rdfa-streaming-parser.js\n *\n * Copyright © 2019 Ruben Taelman\n */\n\nimport type { Quad_Graph, Literal, BlankNode, NamedNode } from '@rdfjs/types';\nimport { resolve } from 'relative-to-absolute-iri';\nimport type { IActiveTag } from './active-tag.ts';\nimport { RDFA_CONTENTTYPES, type RdfaProfile } from './rdfa-profile.ts';\nimport { DataFactory } from 'rdf-data-factory';\nimport type {\n ModelBlankNode,\n ModelLiteral,\n ModelNamedNode,\n ModelQuad,\n ModelQuadObject,\n ModelQuadPredicate,\n ModelQuadSubject,\n ModelTerm,\n} from '#root/utils/_private/rdfa-parser/rdfa-parser.ts';\n\nexport class ModelDataFactory<N> extends DataFactory {\n quad(\n subject: ModelQuadSubject<N>,\n predicate: ModelQuadPredicate<N>,\n object: ModelQuadObject<N>,\n graph: Quad_Graph,\n ): ModelQuad<N> {\n const quad = super.quad(subject, predicate, object, graph);\n return { ...quad, subject, predicate, object, graph };\n }\n\n namedNode<N, I extends string = string>(\n iri: I,\n node?: N,\n ): ModelNamedNode<N, I> {\n const namedNode: ModelNamedNode<N, I> = super.namedNode<I>(iri);\n namedNode.node = node;\n return namedNode;\n }\n\n blankNode(value?: string, node?: N): ModelBlankNode<N> {\n const blankNode: ModelBlankNode<N> = super.blankNode(value);\n blankNode.node = node;\n return blankNode;\n }\n\n literal(\n value: string,\n languageOrDataType?: string | ModelNamedNode<N>,\n node?: N,\n ): ModelLiteral<N> {\n const literal: ModelLiteral<N> = super.literal(value, languageOrDataType);\n literal.node = node;\n return literal;\n }\n}\n\n/**\n * A collection of utility functions.\n */\nexport class Util<N> {\n public static readonly RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';\n public static readonly XSD = 'http://www.w3.org/2001/XMLSchema#';\n public static readonly RDFA = 'http://www.w3.org/ns/rdfa#';\n\n private static readonly PREFIX_REGEX: RegExp =\n /\\s*([^:\\s]*)*:\\s*([^\\s]*)*\\s*/g;\n private static readonly TIME_REGEXES: { regex: RegExp; type: string }[] = [\n {\n regex:\n /^-?P([0-9]+Y)?([0-9]+M)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9])?S)?)?$/,\n type: 'duration',\n },\n {\n regex:\n /^[0-9]+-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]((Z?)|([+-][0-9][0-9]:[0-9][0-9]))$/,\n type: 'dateTime',\n },\n { regex: /^[0-9]+-[0-9][0-9]-[0-9][0-9]Z?$/, type: 'date' },\n {\n regex:\n /^[0-9][0-9]:[0-9][0-9]:[0-9][0-9]((Z?)|([+-][0-9][0-9]:[0-9][0-9]))$/,\n type: 'time',\n },\n { regex: /^[0-9]+-[0-9][0-9]$/, type: 'gYearMonth' },\n { regex: /^[0-9]+$/, type: 'gYear' },\n ];\n private static readonly IRI_REGEX: RegExp =\n /^([A-Za-z][A-Za-z0-9+-.]*|_):[^ \"<>{}|\\\\[\\]`]*$/;\n\n public readonly dataFactory: ModelDataFactory<N>;\n public baseIRI: ModelNamedNode<N>;\n public blankNodeFactory: ((node?: N) => ModelBlankNode<N>) | null = null;\n private readonly baseIRIDocument: ModelNamedNode<N>;\n\n constructor(\n rootModelNode: N,\n dataFactory?: ModelDataFactory<N>,\n baseIRI?: string,\n ) {\n this.dataFactory = dataFactory || new ModelDataFactory<N>();\n this.baseIRI = this.dataFactory.namedNode(baseIRI || '', rootModelNode);\n this.baseIRIDocument = this.baseIRI;\n }\n\n /**\n * Retrieve the prefixes of the current tag's attributes.\n * @param {{[p: string]: string}} attributes A tag's attributes.\n * @param {{[p: string]: string}} parentPrefixes The prefixes from the parent tag.\n * @param {boolean} xmlnsPrefixMappings If prefixes should be extracted from xmlnsPrefixMappings.\n * @param globallySeenPrefixes Optionally keep track of all encountered prefixes\n * @return {{[p: string]: string}} The new prefixes.\n */\n public static parsePrefixes(\n attributes: { [s: string]: string },\n parentPrefixes: { [prefix: string]: string },\n xmlnsPrefixMappings = false,\n globallySeenPrefixes?: Map<string, string>,\n ): { [prefix: string]: string } {\n const additionalPrefixes: { [prefix: string]: string } = {};\n if (xmlnsPrefixMappings) {\n for (const attribute in attributes) {\n if (attribute.startsWith('xmlns')) {\n additionalPrefixes[attribute.substring(6)] = attributes[attribute];\n }\n }\n }\n\n if (attributes['prefix'] || Object.keys(additionalPrefixes).length > 0) {\n const prefixes: { [prefix: string]: string } = {\n ...parentPrefixes,\n ...additionalPrefixes,\n };\n\n if (attributes['prefix']) {\n let prefixMatch = Util.PREFIX_REGEX.exec(attributes['prefix']);\n while (prefixMatch) {\n prefixes[prefixMatch[1]] = prefixMatch[2];\n if (globallySeenPrefixes) {\n const key = prefixMatch[1];\n const uri = prefixMatch[2];\n const previousUri = globallySeenPrefixes.get(key);\n if (previousUri && uri !== previousUri) {\n console.warn(`Prefix ${key} is defined multiple times with a different uri.\n Previous uri was ${previousUri}, now found ${uri}.\n Will use latest value in concise-term-mapping logic`);\n }\n globallySeenPrefixes.set(key, uri);\n }\n prefixMatch = Util.PREFIX_REGEX.exec(attributes['prefix']);\n }\n }\n\n return prefixes;\n } else {\n return parentPrefixes;\n }\n }\n\n /**\n * Expand the given term value based on the given prefixes.\n * @param {string} term A term value.\n * @param {{[p: string]: string}[]} prefixes The available prefixes.\n * @return {string} An expanded URL, or the term as-is.\n */\n public static expandPrefixedTerm<N>(\n term: string,\n activeTag: IActiveTag<N>,\n ): string {\n // Check if the term is prefixed\n const colonIndex: number = term.indexOf(':');\n let prefix: string | null = null;\n let local = '';\n if (colonIndex >= 0) {\n prefix = term.substring(0, colonIndex);\n local = term.substring(colonIndex + 1);\n }\n\n // Expand default namespace\n if (prefix === '') {\n return 'http://www.w3.org/1999/xhtml/vocab#' + local;\n }\n\n // Try to expand the prefix\n if (prefix) {\n const prefixElement = activeTag.prefixesAll[prefix];\n if (prefixElement) {\n return prefixElement + local;\n }\n }\n\n // Try to expand the term\n if (term) {\n const expandedTerm = activeTag.prefixesAll[term.toLocaleLowerCase()];\n if (expandedTerm) {\n return expandedTerm;\n }\n }\n\n return term;\n }\n\n /**\n * Check if the given IRI is valid.\n * @param {string} iri A potential IRI.\n * @return {boolean} If the given IRI is valid.\n */\n public static isValidIri(iri: string): boolean {\n return Util.IRI_REGEX.test(iri);\n }\n\n /**\n * Determine the RDFa profile from the given content type.\n * Defaults to the default RDFa profile (all features enabled) for unknown content types.\n * @param {string} contentType A content type.\n * @returns {RdfaProfile} An RDFa profile.\n */\n public static contentTypeToProfile(contentType: string): RdfaProfile {\n return RDFA_CONTENTTYPES[contentType] || '';\n }\n\n /**\n * Get the base IRI.\n * @param {string} baseIriValue A base IRI value.\n * @param node\n * @return A base IRI named node.\n */\n public getBaseIRI(baseIriValue: string, node?: N): ModelNamedNode<N> {\n let href: string = baseIriValue;\n const fragmentIndex = href.indexOf('#');\n if (fragmentIndex >= 0) {\n href = href.substring(0, fragmentIndex);\n }\n return this.dataFactory.namedNode(resolve(href, this.baseIRI.value), node);\n }\n\n /**\n * If the term is a boolean, return the baseIRI, otherwise return the term as-is.\n * @param {Term | boolean} term A term or boolean, where the boolean indicates the baseIRI.\n * @param {IActiveTag} activeTag An active tag.\n * @returns {Term} A term.\n */\n public getResourceOrBaseIri(\n term: ModelTerm<N> | boolean,\n activeTag: IActiveTag<N>,\n ): ModelNamedNode<N> {\n return term === true\n ? this.getBaseIriTerm(activeTag)\n : (term as ModelNamedNode<N>);\n }\n\n /**\n * Get the active base IRI as an RDF term.\n * @param {IActiveTag} activeTag The active tag.\n * @return {NamedNode} The base IRI term.\n */\n public getBaseIriTerm(activeTag: IActiveTag<N>): ModelNamedNode<N> {\n return activeTag.localBaseIRI || this.baseIRI;\n }\n\n /**\n * Create vocab terms for the given terms attribute.\n * @param {string} terms An attribute value.\n * @param {IActiveTag} activeTag The current active tag.\n * @param {boolean} allowTerms If terms are allowed (strings without ':')\n * @param {boolean} allowBlankNode If blank nodes are allowed.\n * @return {Term[]} The IRI terms.\n */\n public createVocabIris<B extends boolean>(\n terms: string,\n activeTag: IActiveTag<N>,\n allowTerms: boolean,\n allowBlankNode: B,\n ): B extends true ? (BlankNode | NamedNode)[] : NamedNode[];\n public createVocabIris(\n terms: string,\n activeTag: IActiveTag<N>,\n allowTerms: boolean,\n allowBlankNode: boolean,\n ): (NamedNode | BlankNode)[] {\n return terms\n .split(/\\s+/)\n .filter((term) => term && (allowTerms || term.indexOf(':') >= 0))\n .map((property) =>\n this.createIri(property, activeTag, true, true, allowBlankNode),\n )\n .filter((term) => term != null);\n }\n\n /**\n * Create a new literal node.\n * @param {string} literal The literal value.\n * @param {IActiveTag} activeTag The current active tag.\n * @return {Literal} A new literal node.\n */\n public createLiteral(literal: string, activeTag: IActiveTag<N>): Literal {\n if (activeTag.interpretObjectAsTime && !activeTag.datatype) {\n for (const entry of Util.TIME_REGEXES) {\n if (entry.regex.exec(literal)) {\n activeTag.datatype = this.dataFactory.namedNode(\n Util.XSD + entry.type,\n activeTag.node,\n );\n break;\n }\n }\n }\n return this.dataFactory.literal(\n literal,\n activeTag.datatype || activeTag.language,\n activeTag.node,\n );\n }\n\n /**\n * Create a blank node.\n * @returns {BlankNode} A new blank node.\n */\n public createBlankNode(node?: N): ModelBlankNode<N> {\n if (this.blankNodeFactory) {\n return this.blankNodeFactory(node);\n }\n return this.dataFactory.blankNode(undefined, node);\n }\n\n /**\n * Create a named node for the given term.\n * This will take care of prefix detection.\n * @param {string} term A term string (CURIE or IRI, aka safe-CURIE in RDFa spec).\n * @param {IActiveTag} activeTag The current active tag.\n * @param {boolean} vocab If creating an IRI in vocab-mode (based on vocab IRI),\n * or in base-mode (based on base IRI).\n * @param {boolean} allowSafeCurie If safe CURIEs are allowed\n * (invalid CURIEs between square brackets will return null)\n * Otherwise, only IRIs are allowed.\n * @param {boolean} allowBlankNode If blank nodes are allowed. Otherwise null will be returned.\n * @return {Term} An RDF term or null.\n */\n public createIri<B extends boolean>(\n term: string,\n activeTag: IActiveTag<N>,\n vocab: boolean,\n allowSafeCurie: boolean,\n allowBlankNode: B,\n ): B extends true ? ModelNamedNode<N> | ModelBlankNode<N> : ModelNamedNode<N>;\n public createIri<B extends boolean>(\n term: string,\n activeTag: IActiveTag<N>,\n vocab: boolean,\n allowSafeCurie: boolean,\n allowBlankNode: B,\n ): ModelNamedNode<N> | ModelBlankNode<N> | null {\n term = term || '';\n\n if (!allowSafeCurie) {\n if (!vocab) {\n term = resolve(term, this.getBaseIriTerm(activeTag).value);\n }\n if (!Util.isValidIri(term)) {\n return null;\n }\n return this.dataFactory.namedNode(term, activeTag.node);\n }\n\n // Handle strict CURIEs\n if (term.length > 0 && term[0] === '[' && term[term.length - 1] === ']') {\n term = term.substring(1, term.length - 1);\n\n // Strict CURIEs MUST have a prefix separator\n if (term.indexOf(':') < 0) {\n return null;\n }\n }\n\n // Handle blank nodes\n if (term.startsWith('_:')) {\n return allowBlankNode\n ? this.dataFactory.blankNode(\n term.substring(2) || 'b_identity',\n activeTag.node,\n )\n : null;\n }\n\n // Handle vocab IRIs\n if (vocab) {\n if (activeTag.vocab && term.indexOf(':') < 0) {\n return this.dataFactory.namedNode(\n activeTag.vocab + term,\n activeTag.node,\n );\n }\n }\n\n // Handle prefixed IRIs\n let iri: string = Util.expandPrefixedTerm(term, activeTag);\n // Resolve against baseIRI if in base-mode, or if the term was a prefixed relative IRI\n if (!vocab) {\n iri = resolve(iri, this.getBaseIriTerm(activeTag).value);\n } else if (term !== iri) {\n iri = resolve(iri, this.baseIRIDocument.value);\n }\n if (!Util.isValidIri(iri)) {\n return null;\n }\n return this.dataFactory.namedNode(iri, activeTag.node);\n }\n}\n"],"names":["ModelDataFactory","DataFactory","quad","subject","predicate","object","graph","namedNode","iri","node","blankNode","value","literal","languageOrDataType","Util","RDF","XSD","RDFA","PREFIX_REGEX","TIME_REGEXES","regex","type","IRI_REGEX","dataFactory","baseIRI","blankNodeFactory","baseIRIDocument","constructor","rootModelNode","parsePrefixes","attributes","parentPrefixes","xmlnsPrefixMappings","globallySeenPrefixes","additionalPrefixes","attribute","startsWith","substring","Object","keys","length","prefixes","prefixMatch","exec","key","uri","previousUri","get","console","warn","set","expandPrefixedTerm","term","activeTag","colonIndex","indexOf","prefix","local","prefixElement","prefixesAll","expandedTerm","toLocaleLowerCase","isValidIri","test","contentTypeToProfile","contentType","RDFA_CONTENTTYPES","getBaseIRI","baseIriValue","href","fragmentIndex","resolve","getResourceOrBaseIri","getBaseIriTerm","localBaseIRI","createVocabIris","terms","allowTerms","allowBlankNode","split","filter","map","property","createIri","createLiteral","interpretObjectAsTime","datatype","entry","language","createBlankNode","undefined","vocab","allowSafeCurie"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"util.js","sources":["../../../../src/utils/_private/rdfa-parser/util.ts"],"sourcesContent":["/**\n * Modified from https://github.com/rubensworks/rdfa-streaming-parser.js\n *\n * Copyright © 2019 Ruben Taelman\n */\n\nimport type { Quad_Graph, Literal, BlankNode, NamedNode } from '@rdfjs/types';\nimport { resolve } from 'relative-to-absolute-iri';\nimport type { IActiveTag } from './active-tag.ts';\nimport { RDFA_CONTENTTYPES, type RdfaProfile } from './rdfa-profile.ts';\nimport { DataFactory } from 'rdf-data-factory';\nimport type {\n ModelBlankNode,\n ModelLiteral,\n ModelNamedNode,\n ModelQuad,\n ModelQuadObject,\n ModelQuadPredicate,\n ModelQuadSubject,\n ModelTerm,\n} from '#root/utils/_private/rdfa-parser/rdfa-parser.ts';\n\nexport class ModelDataFactory<N> extends DataFactory<ModelQuad<N>> {\n quad(\n subject: ModelQuadSubject<N>,\n predicate: ModelQuadPredicate<N>,\n object: ModelQuadObject<N>,\n graph: Quad_Graph,\n ): ModelQuad<N> {\n return super.quad(subject, predicate, object, graph);\n }\n\n namedNode<N, I extends string = string>(\n iri: I,\n node?: N,\n ): ModelNamedNode<N, I> {\n const namedNode: ModelNamedNode<N, I> = super.namedNode<I>(iri);\n namedNode.node = node;\n return namedNode;\n }\n\n blankNode(value?: string, node?: N): ModelBlankNode<N> {\n const blankNode: ModelBlankNode<N> = super.blankNode(value);\n blankNode.node = node;\n return blankNode;\n }\n\n literal(\n value: string,\n languageOrDataType?: string | ModelNamedNode<N>,\n node?: N,\n ): ModelLiteral<N> {\n const literal: ModelLiteral<N> = super.literal(value, languageOrDataType);\n literal.node = node;\n return literal;\n }\n}\n\n/**\n * A collection of utility functions.\n */\nexport class Util<N> {\n public static readonly RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';\n public static readonly XSD = 'http://www.w3.org/2001/XMLSchema#';\n public static readonly RDFA = 'http://www.w3.org/ns/rdfa#';\n\n private static readonly PREFIX_REGEX: RegExp =\n /\\s*([^:\\s]*)*:\\s*([^\\s]*)*\\s*/g;\n private static readonly TIME_REGEXES: { regex: RegExp; type: string }[] = [\n {\n regex:\n /^-?P([0-9]+Y)?([0-9]+M)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9])?S)?)?$/,\n type: 'duration',\n },\n {\n regex:\n /^[0-9]+-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]((Z?)|([+-][0-9][0-9]:[0-9][0-9]))$/,\n type: 'dateTime',\n },\n { regex: /^[0-9]+-[0-9][0-9]-[0-9][0-9]Z?$/, type: 'date' },\n {\n regex:\n /^[0-9][0-9]:[0-9][0-9]:[0-9][0-9]((Z?)|([+-][0-9][0-9]:[0-9][0-9]))$/,\n type: 'time',\n },\n { regex: /^[0-9]+-[0-9][0-9]$/, type: 'gYearMonth' },\n { regex: /^[0-9]+$/, type: 'gYear' },\n ];\n private static readonly IRI_REGEX: RegExp =\n /^([A-Za-z][A-Za-z0-9+-.]*|_):[^ \"<>{}|\\\\[\\]`]*$/;\n\n public readonly dataFactory: ModelDataFactory<N>;\n public baseIRI: ModelNamedNode<N>;\n public blankNodeFactory: ((node?: N) => ModelBlankNode<N>) | null = null;\n private readonly baseIRIDocument: ModelNamedNode<N>;\n\n constructor(\n rootModelNode: N,\n dataFactory?: ModelDataFactory<N>,\n baseIRI?: string,\n ) {\n this.dataFactory = dataFactory || new ModelDataFactory<N>();\n this.baseIRI = this.dataFactory.namedNode(baseIRI || '', rootModelNode);\n this.baseIRIDocument = this.baseIRI;\n }\n\n /**\n * Retrieve the prefixes of the current tag's attributes.\n * @param {{[p: string]: string}} attributes A tag's attributes.\n * @param {{[p: string]: string}} parentPrefixes The prefixes from the parent tag.\n * @param {boolean} xmlnsPrefixMappings If prefixes should be extracted from xmlnsPrefixMappings.\n * @param globallySeenPrefixes Optionally keep track of all encountered prefixes\n * @return {{[p: string]: string}} The new prefixes.\n */\n public static parsePrefixes(\n attributes: { [s: string]: string },\n parentPrefixes: { [prefix: string]: string },\n xmlnsPrefixMappings = false,\n globallySeenPrefixes?: Map<string, string>,\n ): { [prefix: string]: string } {\n const additionalPrefixes: { [prefix: string]: string } = {};\n if (xmlnsPrefixMappings) {\n for (const attribute in attributes) {\n if (attribute.startsWith('xmlns')) {\n additionalPrefixes[attribute.substring(6)] = attributes[attribute];\n }\n }\n }\n\n if (attributes['prefix'] || Object.keys(additionalPrefixes).length > 0) {\n const prefixes: { [prefix: string]: string } = {\n ...parentPrefixes,\n ...additionalPrefixes,\n };\n\n if (attributes['prefix']) {\n let prefixMatch = Util.PREFIX_REGEX.exec(attributes['prefix']);\n while (prefixMatch) {\n prefixes[prefixMatch[1]] = prefixMatch[2];\n if (globallySeenPrefixes) {\n const key = prefixMatch[1];\n const uri = prefixMatch[2];\n const previousUri = globallySeenPrefixes.get(key);\n if (previousUri && uri !== previousUri) {\n console.warn(`Prefix ${key} is defined multiple times with a different uri.\n Previous uri was ${previousUri}, now found ${uri}.\n Will use latest value in concise-term-mapping logic`);\n }\n globallySeenPrefixes.set(key, uri);\n }\n prefixMatch = Util.PREFIX_REGEX.exec(attributes['prefix']);\n }\n }\n\n return prefixes;\n } else {\n return parentPrefixes;\n }\n }\n\n /**\n * Expand the given term value based on the given prefixes.\n * @param {string} term A term value.\n * @param {{[p: string]: string}[]} prefixes The available prefixes.\n * @return {string} An expanded URL, or the term as-is.\n */\n public static expandPrefixedTerm<N>(\n term: string,\n activeTag: IActiveTag<N>,\n ): string {\n // Check if the term is prefixed\n const colonIndex: number = term.indexOf(':');\n let prefix: string | null = null;\n let local = '';\n if (colonIndex >= 0) {\n prefix = term.substring(0, colonIndex);\n local = term.substring(colonIndex + 1);\n }\n\n // Expand default namespace\n if (prefix === '') {\n return 'http://www.w3.org/1999/xhtml/vocab#' + local;\n }\n\n // Try to expand the prefix\n if (prefix) {\n const prefixElement = activeTag.prefixesAll[prefix];\n if (prefixElement) {\n return prefixElement + local;\n }\n }\n\n // Try to expand the term\n if (term) {\n const expandedTerm = activeTag.prefixesAll[term.toLocaleLowerCase()];\n if (expandedTerm) {\n return expandedTerm;\n }\n }\n\n return term;\n }\n\n /**\n * Check if the given IRI is valid.\n * @param {string} iri A potential IRI.\n * @return {boolean} If the given IRI is valid.\n */\n public static isValidIri(iri: string): boolean {\n return Util.IRI_REGEX.test(iri);\n }\n\n /**\n * Determine the RDFa profile from the given content type.\n * Defaults to the default RDFa profile (all features enabled) for unknown content types.\n * @param {string} contentType A content type.\n * @returns {RdfaProfile} An RDFa profile.\n */\n public static contentTypeToProfile(contentType: string): RdfaProfile {\n return RDFA_CONTENTTYPES[contentType] || '';\n }\n\n /**\n * Get the base IRI.\n * @param {string} baseIriValue A base IRI value.\n * @param node\n * @return A base IRI named node.\n */\n public getBaseIRI(baseIriValue: string, node?: N): ModelNamedNode<N> {\n let href: string = baseIriValue;\n const fragmentIndex = href.indexOf('#');\n if (fragmentIndex >= 0) {\n href = href.substring(0, fragmentIndex);\n }\n return this.dataFactory.namedNode(resolve(href, this.baseIRI.value), node);\n }\n\n /**\n * If the term is a boolean, return the baseIRI, otherwise return the term as-is.\n * @param {Term | boolean} term A term or boolean, where the boolean indicates the baseIRI.\n * @param {IActiveTag} activeTag An active tag.\n * @returns {Term} A term.\n */\n public getResourceOrBaseIri(\n term: ModelTerm<N> | boolean,\n activeTag: IActiveTag<N>,\n ): ModelNamedNode<N> {\n return term === true\n ? this.getBaseIriTerm(activeTag)\n : (term as ModelNamedNode<N>);\n }\n\n /**\n * Get the active base IRI as an RDF term.\n * @param {IActiveTag} activeTag The active tag.\n * @return {NamedNode} The base IRI term.\n */\n public getBaseIriTerm(activeTag: IActiveTag<N>): ModelNamedNode<N> {\n return activeTag.localBaseIRI || this.baseIRI;\n }\n\n /**\n * Create vocab terms for the given terms attribute.\n * @param {string} terms An attribute value.\n * @param {IActiveTag} activeTag The current active tag.\n * @param {boolean} allowTerms If terms are allowed (strings without ':')\n * @param {boolean} allowBlankNode If blank nodes are allowed.\n * @return {Term[]} The IRI terms.\n */\n public createVocabIris<B extends boolean>(\n terms: string,\n activeTag: IActiveTag<N>,\n allowTerms: boolean,\n allowBlankNode: B,\n ): B extends true ? (BlankNode | NamedNode)[] : NamedNode[];\n public createVocabIris(\n terms: string,\n activeTag: IActiveTag<N>,\n allowTerms: boolean,\n allowBlankNode: boolean,\n ): (NamedNode | BlankNode)[] {\n return terms\n .split(/\\s+/)\n .filter((term) => term && (allowTerms || term.indexOf(':') >= 0))\n .map((property) =>\n this.createIri(property, activeTag, true, true, allowBlankNode),\n )\n .filter((term) => term != null);\n }\n\n /**\n * Create a new literal node.\n * @param {string} literal The literal value.\n * @param {IActiveTag} activeTag The current active tag.\n * @return {Literal} A new literal node.\n */\n public createLiteral(literal: string, activeTag: IActiveTag<N>): Literal {\n if (activeTag.interpretObjectAsTime && !activeTag.datatype) {\n for (const entry of Util.TIME_REGEXES) {\n if (entry.regex.exec(literal)) {\n activeTag.datatype = this.dataFactory.namedNode(\n Util.XSD + entry.type,\n activeTag.node,\n );\n break;\n }\n }\n }\n return this.dataFactory.literal(\n literal,\n activeTag.datatype || activeTag.language,\n activeTag.node,\n );\n }\n\n /**\n * Create a blank node.\n * @returns {BlankNode} A new blank node.\n */\n public createBlankNode(node?: N): ModelBlankNode<N> {\n if (this.blankNodeFactory) {\n return this.blankNodeFactory(node);\n }\n return this.dataFactory.blankNode(undefined, node);\n }\n\n /**\n * Create a named node for the given term.\n * This will take care of prefix detection.\n * @param {string} term A term string (CURIE or IRI, aka safe-CURIE in RDFa spec).\n * @param {IActiveTag} activeTag The current active tag.\n * @param {boolean} vocab If creating an IRI in vocab-mode (based on vocab IRI),\n * or in base-mode (based on base IRI).\n * @param {boolean} allowSafeCurie If safe CURIEs are allowed\n * (invalid CURIEs between square brackets will return null)\n * Otherwise, only IRIs are allowed.\n * @param {boolean} allowBlankNode If blank nodes are allowed. Otherwise null will be returned.\n * @return {Term} An RDF term or null.\n */\n public createIri<B extends boolean>(\n term: string,\n activeTag: IActiveTag<N>,\n vocab: boolean,\n allowSafeCurie: boolean,\n allowBlankNode: B,\n ): B extends true ? ModelNamedNode<N> | ModelBlankNode<N> : ModelNamedNode<N>;\n public createIri<B extends boolean>(\n term: string,\n activeTag: IActiveTag<N>,\n vocab: boolean,\n allowSafeCurie: boolean,\n allowBlankNode: B,\n ): ModelNamedNode<N> | ModelBlankNode<N> | null {\n term = term || '';\n\n if (!allowSafeCurie) {\n if (!vocab) {\n term = resolve(term, this.getBaseIriTerm(activeTag).value);\n }\n if (!Util.isValidIri(term)) {\n return null;\n }\n return this.dataFactory.namedNode(term, activeTag.node);\n }\n\n // Handle strict CURIEs\n if (term.length > 0 && term[0] === '[' && term[term.length - 1] === ']') {\n term = term.substring(1, term.length - 1);\n\n // Strict CURIEs MUST have a prefix separator\n if (term.indexOf(':') < 0) {\n return null;\n }\n }\n\n // Handle blank nodes\n if (term.startsWith('_:')) {\n return allowBlankNode\n ? this.dataFactory.blankNode(\n term.substring(2) || 'b_identity',\n activeTag.node,\n )\n : null;\n }\n\n // Handle vocab IRIs\n if (vocab) {\n if (activeTag.vocab && term.indexOf(':') < 0) {\n return this.dataFactory.namedNode(\n activeTag.vocab + term,\n activeTag.node,\n );\n }\n }\n\n // Handle prefixed IRIs\n let iri: string = Util.expandPrefixedTerm(term, activeTag);\n // Resolve against baseIRI if in base-mode, or if the term was a prefixed relative IRI\n if (!vocab) {\n iri = resolve(iri, this.getBaseIriTerm(activeTag).value);\n } else if (term !== iri) {\n iri = resolve(iri, this.baseIRIDocument.value);\n }\n if (!Util.isValidIri(iri)) {\n return null;\n }\n return this.dataFactory.namedNode(iri, activeTag.node);\n }\n}\n"],"names":["ModelDataFactory","DataFactory","quad","subject","predicate","object","graph","namedNode","iri","node","blankNode","value","literal","languageOrDataType","Util","RDF","XSD","RDFA","PREFIX_REGEX","TIME_REGEXES","regex","type","IRI_REGEX","dataFactory","baseIRI","blankNodeFactory","baseIRIDocument","constructor","rootModelNode","parsePrefixes","attributes","parentPrefixes","xmlnsPrefixMappings","globallySeenPrefixes","additionalPrefixes","attribute","startsWith","substring","Object","keys","length","prefixes","prefixMatch","exec","key","uri","previousUri","get","console","warn","set","expandPrefixedTerm","term","activeTag","colonIndex","indexOf","prefix","local","prefixElement","prefixesAll","expandedTerm","toLocaleLowerCase","isValidIri","test","contentTypeToProfile","contentType","RDFA_CONTENTTYPES","getBaseIRI","baseIriValue","href","fragmentIndex","resolve","getResourceOrBaseIri","getBaseIriTerm","localBaseIRI","createVocabIris","terms","allowTerms","allowBlankNode","split","filter","map","property","createIri","createLiteral","interpretObjectAsTime","datatype","entry","language","createBlankNode","undefined","vocab","allowSafeCurie"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lblod/ember-rdfa-editor",
|
|
3
|
-
"version": "13.
|
|
3
|
+
"version": "13.2.0",
|
|
4
4
|
"description": "Ember addon wrapping an RDFa editor with a public API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ember-addon"
|
|
@@ -215,6 +215,7 @@
|
|
|
215
215
|
"@embroider/addon-shim": "^1.10.2",
|
|
216
216
|
"@embroider/macros": "^1.19.6",
|
|
217
217
|
"@floating-ui/dom": "^1.7.4",
|
|
218
|
+
"@glint/tsserver-plugin": "2.1.0",
|
|
218
219
|
"@graphy/memory.dataset.fast": "4.3.3",
|
|
219
220
|
"@lblod/marawa": "0.8.0-beta.6",
|
|
220
221
|
"@rdfjs/types": "^1.1.2",
|
|
@@ -244,7 +245,6 @@
|
|
|
244
245
|
"process": "0.11.10",
|
|
245
246
|
"prosemirror-commands": "^1.7.1",
|
|
246
247
|
"prosemirror-dropcursor": "^1.8.2",
|
|
247
|
-
"prosemirror-history": "1.4.1",
|
|
248
248
|
"prosemirror-inputrules": "^1.5.1",
|
|
249
249
|
"prosemirror-keymap": "^1.2.3",
|
|
250
250
|
"prosemirror-model": "^1.25.4",
|
|
@@ -262,6 +262,7 @@
|
|
|
262
262
|
"yup": "^1.7.1"
|
|
263
263
|
},
|
|
264
264
|
"devDependencies": {
|
|
265
|
+
"prosemirror-history": "./vendored-deps/prosemirror-history-1.5.0.tgz",
|
|
265
266
|
"@appuniversum/ember-appuniversum": "^3.15.1",
|
|
266
267
|
"@babel/core": "^7.28.6",
|
|
267
268
|
"@babel/eslint-parser": "^7.28.6",
|
|
@@ -271,10 +272,8 @@
|
|
|
271
272
|
"@eslint/js": "^9.36.0",
|
|
272
273
|
"@glimmer/component": "^1.1.2",
|
|
273
274
|
"@glimmer/tracking": "^1.1.2",
|
|
274
|
-
"@glint/
|
|
275
|
-
"@glint/
|
|
276
|
-
"@glint/environment-ember-template-imports": "^1.5.2",
|
|
277
|
-
"@glint/template": "^1.5.2",
|
|
275
|
+
"@glint/ember-tsc": "^1.0.8",
|
|
276
|
+
"@glint/template": "^1.7.3",
|
|
278
277
|
"@rollup/plugin-babel": "^6.0.4",
|
|
279
278
|
"@rollup/plugin-commonjs": "^28.0.9",
|
|
280
279
|
"@rollup/plugin-inject": "^5.0.5",
|
|
@@ -301,6 +300,7 @@
|
|
|
301
300
|
"eslint-plugin-ember": "^12.7.5",
|
|
302
301
|
"eslint-plugin-import": "^2.32.0",
|
|
303
302
|
"eslint-plugin-n": "^17.23.2",
|
|
303
|
+
"execa": "^9.6.1",
|
|
304
304
|
"globals": "^15.15.0",
|
|
305
305
|
"postcss": "^8.5.6",
|
|
306
306
|
"prettier": "^3.8.0",
|
|
@@ -314,6 +314,7 @@
|
|
|
314
314
|
"tracked-built-ins": "^4.1.0",
|
|
315
315
|
"typescript": "^5.9.3",
|
|
316
316
|
"typescript-eslint": "^7.18.0",
|
|
317
|
+
"walk-sync": "^4.0.1",
|
|
317
318
|
"webpack": "^5.101.3"
|
|
318
319
|
},
|
|
319
320
|
"peerDependencies": {
|
|
@@ -441,7 +442,7 @@
|
|
|
441
442
|
"lint:hbs:fix": "ember-template-lint . --fix --no-error-on-unmatched-pattern",
|
|
442
443
|
"lint:js": "eslint . --cache",
|
|
443
444
|
"lint:js:fix": "eslint . --fix",
|
|
444
|
-
"lint:types": "
|
|
445
|
+
"lint:types": "ember-tsc --noEmit",
|
|
445
446
|
"start": "rollup --config --watch",
|
|
446
447
|
"test": "echo 'A v2 addon does not have tests, run tests in test-app'"
|
|
447
448
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|