@lblod/ember-rdfa-editor 13.4.0 → 13.4.1
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.
|
@@ -23,5 +23,5 @@ export default class Link extends Component<EmberNodeArgs> {
|
|
|
23
23
|
get class(): string;
|
|
24
24
|
onClick(event: PointerEvent): void;
|
|
25
25
|
get shouldShowTooltip(): boolean | undefined;
|
|
26
|
-
|
|
26
|
+
onKeyDown: (event: KeyboardEvent) => void;
|
|
27
27
|
}
|
|
@@ -99,7 +99,7 @@ class Link extends Component {
|
|
|
99
99
|
get shouldShowTooltip() {
|
|
100
100
|
return this.interactive && this.link && this.selected && !this.hideTooltip;
|
|
101
101
|
}
|
|
102
|
-
|
|
102
|
+
onKeyDown = event => {
|
|
103
103
|
if (event.key === 'Escape' || event.key === 'Enter') {
|
|
104
104
|
this.hideTooltip = true;
|
|
105
105
|
} else {
|
|
@@ -107,7 +107,7 @@ class Link extends Component {
|
|
|
107
107
|
}
|
|
108
108
|
};
|
|
109
109
|
static {
|
|
110
|
-
setComponentTemplate(precompileTemplate("\n <Velcro @placement=\"bottom-start\" @offsetOptions={{hash mainAxis=3}} @strategy=\"fixed\" as |velcro|>\n <Pill {{on \"
|
|
110
|
+
setComponentTemplate(precompileTemplate("\n <Velcro @placement=\"bottom-start\" @offsetOptions={{hash mainAxis=3}} @strategy=\"fixed\" as |velcro|>\n <Pill {{on \"keydown\" this.onKeyDown}} class={{this.class}} @skin=\"link\" @icon={{this.linkIcon}} title={{this.linkTitle}} aria-describedby=\"link-tooltip\" {{velcro.hook}} {{on \"click\" this.onClick}}>\n <EmbeddedEditor @controller={{@controller}} @node={{@node}} @view={{@view}} @getPos={{@getPos}} @onSelected={{this.selectionChangeHandler}} @selected={{@selected}} @placeholder={{t \"ember-rdfa-editor.link.placeholder.text\"}} @contentDecorations={{@contentDecorations}} @updateAttribute={{@updateAttribute}} @selectNode={{@selectNode}} {{leaveOnEnterKey @controller @getPos}} />\n </Pill>\n {{#if this.shouldShowTooltip}}\n <LinkEditor {{on \"keydown\" this.onKeyDown}} @controller={{@controller}} {{!-- @glint-expect-error --}} @link={{this.link}} @linkParser={{this.linkParser}} {{velcro.loop}} />\n {{/if}}\n </Velcro>\n ", {
|
|
111
111
|
strictMode: true,
|
|
112
112
|
scope: () => ({
|
|
113
113
|
Velcro,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sources":["../../../src/components/ember-node/link.gts"],"sourcesContent":["import leaveOnEnterKey from '#root/modifiers/leave-on-enter-key.ts';\nimport { action } from '@ember/object';\nimport Component from '@glimmer/component';\nimport type { EmberNodeArgs } from '#root/utils/ember-node.ts';\nimport { Velcro } from 'ember-velcro';\nimport { hash } from '@ember/helper';\nimport EmbeddedEditor from './embedded-editor.gts';\nimport { on } from '@ember/modifier';\nimport t from 'ember-intl/helpers/t';\nimport Pill from '#root/components/pill.gts';\nimport LinkEditor from '../plugins/link/_private/link-editor.gts';\nimport {\n defaultLinkParser,\n type LinkParser,\n} from '#root/plugins/link/parser.ts';\nimport { cached, tracked } from '@glimmer/tracking';\nimport { service } from '@ember/service';\nimport type IntlService from 'ember-intl/services/intl';\nimport { CircleXIcon } from '@appuniversum/ember-appuniversum/components/icons/circle-x';\n\nexport default class Link extends Component<EmberNodeArgs> {\n @service declare intl: IntlService;\n @tracked hideTooltip = false;\n\n get isNewLink() {\n return this.link && (this.link.node.attrs['isNew'] as boolean);\n }\n\n selectionChangeHandler = (selected: boolean) => {\n this.hideTooltip = false;\n if (!selected && this.isNewLink) {\n this.args.updateAttribute('isNew', false, true);\n }\n };\n\n get href() {\n return this.args.node.attrs['href'] as string;\n }\n\n get link() {\n const pos = this.args.getPos();\n if (!pos) {\n return;\n }\n return {\n node: this.args.node,\n pos,\n };\n }\n\n get linkParser() {\n return (\n (this.node.attrs['linkParser'] as LinkParser | null) ??\n defaultLinkParser()\n );\n }\n\n @cached\n get linkParserResult() {\n return this.linkParser(this.href);\n }\n\n get linkTitle() {\n if (this.linkParserResult.isSuccessful) {\n return this.intl.t('ember-rdfa-editor.link.ctrlClickDescription');\n } else {\n return this.linkParserResult.errors[0];\n }\n }\n\n get linkIcon() {\n if (this.linkParserResult.isSuccessful || this.isNewLink) {\n return;\n } else {\n return CircleXIcon;\n }\n }\n\n get controller() {\n return this.args.controller;\n }\n\n get node() {\n return this.args.node;\n }\n\n get selected() {\n return this.args.selected;\n }\n\n get interactive() {\n return this.node.attrs['interactive'] as boolean;\n }\n\n get class() {\n return `say-pill ${this.linkParserResult.isSuccessful || this.isNewLink ? '' : 'say-pill--error'}`;\n }\n\n @action\n onClick(event: PointerEvent) {\n this.hideTooltip = false;\n if (event.ctrlKey || event.metaKey) {\n window.open(this.href);\n }\n }\n\n get shouldShowTooltip() {\n return this.interactive && this.link && this.selected && !this.hideTooltip;\n }\n\n
|
|
1
|
+
{"version":3,"file":"link.js","sources":["../../../src/components/ember-node/link.gts"],"sourcesContent":["import leaveOnEnterKey from '#root/modifiers/leave-on-enter-key.ts';\nimport { action } from '@ember/object';\nimport Component from '@glimmer/component';\nimport type { EmberNodeArgs } from '#root/utils/ember-node.ts';\nimport { Velcro } from 'ember-velcro';\nimport { hash } from '@ember/helper';\nimport EmbeddedEditor from './embedded-editor.gts';\nimport { on } from '@ember/modifier';\nimport t from 'ember-intl/helpers/t';\nimport Pill from '#root/components/pill.gts';\nimport LinkEditor from '../plugins/link/_private/link-editor.gts';\nimport {\n defaultLinkParser,\n type LinkParser,\n} from '#root/plugins/link/parser.ts';\nimport { cached, tracked } from '@glimmer/tracking';\nimport { service } from '@ember/service';\nimport type IntlService from 'ember-intl/services/intl';\nimport { CircleXIcon } from '@appuniversum/ember-appuniversum/components/icons/circle-x';\n\nexport default class Link extends Component<EmberNodeArgs> {\n @service declare intl: IntlService;\n @tracked hideTooltip = false;\n\n get isNewLink() {\n return this.link && (this.link.node.attrs['isNew'] as boolean);\n }\n\n selectionChangeHandler = (selected: boolean) => {\n this.hideTooltip = false;\n if (!selected && this.isNewLink) {\n this.args.updateAttribute('isNew', false, true);\n }\n };\n\n get href() {\n return this.args.node.attrs['href'] as string;\n }\n\n get link() {\n const pos = this.args.getPos();\n if (!pos) {\n return;\n }\n return {\n node: this.args.node,\n pos,\n };\n }\n\n get linkParser() {\n return (\n (this.node.attrs['linkParser'] as LinkParser | null) ??\n defaultLinkParser()\n );\n }\n\n @cached\n get linkParserResult() {\n return this.linkParser(this.href);\n }\n\n get linkTitle() {\n if (this.linkParserResult.isSuccessful) {\n return this.intl.t('ember-rdfa-editor.link.ctrlClickDescription');\n } else {\n return this.linkParserResult.errors[0];\n }\n }\n\n get linkIcon() {\n if (this.linkParserResult.isSuccessful || this.isNewLink) {\n return;\n } else {\n return CircleXIcon;\n }\n }\n\n get controller() {\n return this.args.controller;\n }\n\n get node() {\n return this.args.node;\n }\n\n get selected() {\n return this.args.selected;\n }\n\n get interactive() {\n return this.node.attrs['interactive'] as boolean;\n }\n\n get class() {\n return `say-pill ${this.linkParserResult.isSuccessful || this.isNewLink ? '' : 'say-pill--error'}`;\n }\n\n @action\n onClick(event: PointerEvent) {\n this.hideTooltip = false;\n if (event.ctrlKey || event.metaKey) {\n window.open(this.href);\n }\n }\n\n get shouldShowTooltip() {\n return this.interactive && this.link && this.selected && !this.hideTooltip;\n }\n\n onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' || event.key === 'Enter') {\n this.hideTooltip = true;\n } else {\n this.hideTooltip = false;\n }\n };\n\n <template>\n <Velcro\n @placement=\"bottom-start\"\n @offsetOptions={{hash mainAxis=3}}\n @strategy=\"fixed\"\n as |velcro|\n >\n <Pill\n {{on \"keydown\" this.onKeyDown}}\n class={{this.class}}\n @skin=\"link\"\n @icon={{this.linkIcon}}\n title={{this.linkTitle}}\n aria-describedby=\"link-tooltip\"\n {{velcro.hook}}\n {{on \"click\" this.onClick}}\n >\n <EmbeddedEditor\n @controller={{@controller}}\n @node={{@node}}\n @view={{@view}}\n @getPos={{@getPos}}\n @onSelected={{this.selectionChangeHandler}}\n @selected={{@selected}}\n @placeholder={{t \"ember-rdfa-editor.link.placeholder.text\"}}\n @contentDecorations={{@contentDecorations}}\n @updateAttribute={{@updateAttribute}}\n @selectNode={{@selectNode}}\n {{leaveOnEnterKey @controller @getPos}}\n />\n </Pill>\n {{#if this.shouldShowTooltip}}\n <LinkEditor\n {{on \"keydown\" this.onKeyDown}}\n @controller={{@controller}}\n {{! @glint-expect-error }}\n @link={{this.link}}\n @linkParser={{this.linkParser}}\n {{velcro.loop}}\n />\n {{/if}}\n </Velcro>\n </template>\n}\n"],"names":["Link","Component","g","prototype","service","i","tracked","isNewLink","link","node","attrs","selectionChangeHandler","selected","hideTooltip","args","updateAttribute","href","pos","getPos","linkParser","defaultLinkParser","linkParserResult","n","cached","linkTitle","isSuccessful","intl","t","errors","linkIcon","CircleXIcon","controller","interactive","class","onClick","event","ctrlKey","metaKey","window","open","action","shouldShowTooltip","onKeyDown","key","setComponentTemplate","precompileTemplate","strictMode","scope","Velcro","hash","Pill","on","EmbeddedEditor","leaveOnEnterKey","LinkEditor"],"mappings":"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"}
|
|
@@ -174,7 +174,10 @@ const listItemWithConfig = ({
|
|
|
174
174
|
class: getClassnamesFromNode(node)
|
|
175
175
|
};
|
|
176
176
|
if (enableHierarchicalList) {
|
|
177
|
-
|
|
177
|
+
const listPath = node.attrs['listPath'];
|
|
178
|
+
if (listPath.length) {
|
|
179
|
+
attributes['data-list-marker'] = renderListMarker(node.attrs['listPath']);
|
|
180
|
+
}
|
|
178
181
|
}
|
|
179
182
|
return ['li', attributes, 0];
|
|
180
183
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-nodes.js","sources":["../../../../src/plugins/list/nodes/list-nodes.ts"],"sourcesContent":["import type { Node as PNode, ParseRule } from 'prosemirror-model';\nimport { getRdfaAttrs, getRdfaContentElement } from '#root/core/schema.ts';\nimport { optionMapOr, unwrap } from '#root/utils/_private/option.ts';\nimport type SayNodeSpec from '#root/core/say-node-spec.ts';\nimport { tagName } from '#root/utils/_private/dom-helpers.ts';\nimport getClassnamesFromNode from '#root/utils/get-classnames-from-node.ts';\nimport { onChanged } from './on-changed.ts';\n\nexport type OrderListStyle =\n | 'decimal'\n | 'upper-roman'\n | 'lower-alpha'\n | 'upper-alpha';\n\nconst getListStyleFromDomElement = (dom: HTMLElement) => {\n const { listStyleType } = dom.style;\n\n // Falling back to dataset for back-compatability\n return (listStyleType || dom.dataset['listStyle']) as\n | OrderListStyle\n | undefined;\n};\n\ntype Config = {\n enableHierarchicalList?: boolean;\n};\n\nexport const orderedListWithConfig: (options?: Config) => SayNodeSpec = ({\n enableHierarchicalList = false,\n} = {}) => {\n return {\n get attrs() {\n const baseAttrs: Record<string, { default: unknown }> = {\n order: { default: 1 },\n style: { default: null },\n };\n if (enableHierarchicalList) {\n baseAttrs['hierarchical'] = { default: null };\n }\n return baseAttrs;\n },\n content: 'list_item+',\n group: 'block list',\n classNames: ['say-ordered-list'],\n onChanged: onChanged,\n parseDOM: [\n {\n tag: 'ol',\n getAttrs(dom: string | HTMLElement) {\n if (typeof dom === 'string') {\n return false;\n }\n const start = dom.getAttribute('start');\n const baseAttrs: Record<string, unknown> = {\n order: optionMapOr(1, (val) => Number(val), start),\n style: getListStyleFromDomElement(dom),\n };\n if (enableHierarchicalList) {\n baseAttrs['hierarchical'] = dom.dataset['hierarchical']\n ? dom.dataset['hierarchical'] !== 'false'\n : null;\n }\n return baseAttrs;\n },\n consuming: false,\n },\n ],\n toDOM(node) {\n const { style, order, hierarchical, ...attrs } = node.attrs;\n const baseAttrs = {\n ...(order !== 1 && { start: order }),\n ...(style && {\n style: `list-style-type: ${style};`,\n }),\n } as Record<string, unknown>;\n if (enableHierarchicalList) {\n baseAttrs['data-hierarchical'] = hierarchical;\n }\n return [\n 'ol',\n {\n ...baseAttrs,\n ...attrs,\n class: getClassnamesFromNode(node),\n },\n 0,\n ];\n },\n };\n};\n\n/**\n * @deprecated use `orderedListWithConfig` instead\n */\nexport const ordered_list = orderedListWithConfig();\n\nexport const bulletListWithConfig: (options?: Config) => SayNodeSpec = () => {\n return {\n content: 'list_item+',\n group: 'block list',\n attrs: {\n style: { default: 'unordered' },\n hierarchical: { default: false },\n },\n classNames: ['say-bullet-list'],\n onChanged: onChanged,\n parseDOM: [\n {\n tag: 'ul',\n getAttrs(node: string | HTMLElement) {\n if (typeof node === 'string') {\n return false;\n }\n return { ...getRdfaAttrs(node, { rdfaAware: false }) };\n },\n consuming: false,\n contentElement: getRdfaContentElement,\n },\n ],\n toDOM(node: PNode) {\n return [\n 'ul',\n {\n ...node.attrs,\n class: getClassnamesFromNode(node),\n },\n 0,\n ];\n },\n };\n};\n\n/**\n * @deprecated use `bulletListWithConfig` instead\n */\nexport const bullet_list = bulletListWithConfig();\n\nexport const listItemWithConfig: (options?: Config) => SayNodeSpec = ({\n enableHierarchicalList = false,\n} = {}) => {\n return {\n // The `+` requirement is taken from the Prosemirror provided list schema nodes.\n // It's likely that we may want to drop this in the future but it may require increasing the\n // complexity of the commands to operate on lists.\n // See https://github.com/ProseMirror/prosemirror-schema-list/blob/master/src/schema-list.ts\n content: 'paragraphGroup+ block*',\n defining: true,\n attrs: enableHierarchicalList ? { listPath: { default: [] } } : undefined,\n classNames: ['say-list-item'],\n onChanged: onChanged,\n parseDOM: [\n {\n tag: 'li',\n getAttrs(node: HTMLElement | string) {\n if (typeof node === 'string') {\n return false;\n }\n if (enableHierarchicalList) {\n const mapping = getListItemMapping(this);\n const listPath = calculateListItemPath(node, mapping);\n return { ...getRdfaAttrs(node, { rdfaAware: false }), listPath };\n }\n return { ...getRdfaAttrs(node, { rdfaAware: false }) };\n },\n sayListItemMapping: enableHierarchicalList\n ? new WeakMap<Node, number[]>()\n : undefined,\n contentElement: getRdfaContentElement,\n },\n ],\n toDOM(node: PNode) {\n const attributes: { [key: string]: string } = {\n class: getClassnamesFromNode(node),\n };\n if (enableHierarchicalList) {\n attributes['data-list-marker'] = renderListMarker(\n node.attrs['listPath'] as ListPathEntry[],\n );\n }\n return ['li', attributes, 0];\n },\n };\n};\nexport interface ListPathEntry {\n pos: number;\n style: string;\n hierarchical: boolean;\n}\ntype ListItemMapping = WeakMap<Node, ListPathEntry[]>;\n/**\n * a utility to conveniently get the list mapping out of a parseRule in a typesafe way\n */\nfunction getListItemMapping(\n parseRule: ParseRule & { sayListItemMapping?: ListItemMapping },\n): ListItemMapping {\n const mapping = parseRule.sayListItemMapping;\n if (mapping) {\n return mapping;\n } else {\n throw new Error('no list item mapping found on parserule');\n }\n}\n\n/**\n * Use dynamic programming to efficiently determine the hierarchy of a given <li> node\n */\nfunction calculateListItemPath(\n node: Node,\n mapping: ListItemMapping,\n): ListPathEntry[] {\n if (tagName(node) !== 'li') {\n throw new Error('Tried to calculate the list path of a non-li node');\n }\n const cached = mapping.get(node);\n if (cached) {\n return cached;\n }\n // first, get the path of the li higher up the tree, if there is one\n let basePath: ListPathEntry[] = [];\n let parent = unwrap(node.parentNode) as HTMLElement;\n // skip contentContainer divs if rdfaAware\n if (parent.dataset['contentContainer']) {\n parent = parent.parentElement as HTMLElement;\n }\n\n let grandParent = parent.parentElement;\n // skip contentContainer divs if rdfaAware\n if (grandParent?.dataset['contentContainer']) {\n grandParent = grandParent.parentElement;\n }\n if (grandParent && tagName(grandParent) === 'li') {\n basePath = calculateListItemPath(grandParent, mapping);\n }\n\n // then we calculate our index relative to the previous li items at our level\n // we specifically skip all non-li siblings. Technically these should not exist, but\n // out-of-spec html is extremely common\n let prevSiblingLi = node.previousSibling;\n while (prevSiblingLi && tagName(prevSiblingLi) !== 'li') {\n prevSiblingLi = prevSiblingLi.previousSibling;\n }\n\n let index = 0;\n if (prevSiblingLi) {\n const prevSiblingPath = calculateListItemPath(prevSiblingLi, mapping);\n index = prevSiblingPath[prevSiblingPath.length - 1].pos + 1;\n }\n\n // then we calculate the style and hierarchy of this level\n // if we have a parent OL that has style and hierarchy, we use it (treating ULs as style=unordered and not hierarchical)\n // if not, we copy over the styles from the grandparent LI, or use a default\n\n let style = 'decimal';\n let hierarchical = false;\n if (tagName(parent) === 'ul') {\n style = 'unordered';\n } else if (tagName(parent) === 'ol') {\n style =\n getListStyleFromDomElement(parent) ??\n basePath[basePath.length - 1]?.style ??\n style;\n if (parent.dataset['hierarchical']) {\n hierarchical = parent.dataset['hierarchical'] !== 'false';\n } else {\n hierarchical =\n basePath[basePath.length - 1]?.hierarchical ?? hierarchical;\n }\n } else {\n throw new Error('li with non-list parent');\n }\n\n // the result is simply the path of our ancestor li concatenated with our index\n const resultPath: ListPathEntry[] = [\n ...basePath,\n { pos: index, hierarchical, style },\n ];\n // and we store the result so we don't fibonnacci ourselves into exponential complexity\n mapping.set(node, resultPath);\n return resultPath;\n}\n\nconst alphabet = [...'abcdefghijklmnopqrstuvwxyz'];\n\nfunction romanize(num: number) {\n const lookup = {\n M: 1000,\n CM: 900,\n D: 500,\n CD: 400,\n C: 100,\n XC: 90,\n L: 50,\n XL: 40,\n X: 10,\n IX: 9,\n V: 5,\n IV: 4,\n I: 1,\n };\n let roman = '';\n for (const [i, value] of Object.entries(lookup)) {\n while (num >= value) {\n roman += i;\n num -= value;\n }\n }\n return roman;\n}\n/**\n * Turns index into a base 26 number and maps it onto the alphabet, resulting\n * in \"aa\" for index 26, \"ab\" for 27, \"ba\" for 52, etc\n */\nfunction indexToAlpha(index: number): string {\n let cur = index;\n const result = [];\n result.push(cur % 26);\n while (cur > 25) {\n // -1 here cause we're 0-based\n cur = Math.floor(cur / 26) - 1;\n result.push(cur % 26);\n }\n result.reverse();\n return result.map((index) => alphabet[index]).join('');\n}\n/**\n * Given a path and a style, render a human-readable representation which the css rule can\n * simply render without extra processing\n */\nfunction renderListMarker(path: ListPathEntry[]): string {\n const length = path.length;\n const lastIndex = length - 1;\n const lastEntry = path[lastIndex];\n if (lastEntry.hierarchical) {\n return `${path.map(renderEntry).join('.')}. `;\n } else {\n return `${renderEntry(lastEntry)}. `;\n }\n}\nfunction renderEntry(entry: ListPathEntry) {\n const { style, pos } = entry;\n if (style === 'lower-alpha') {\n return indexToAlpha(pos);\n } else if (style === 'upper-alpha') {\n return indexToAlpha(pos).toUpperCase();\n } else if (style === 'upper-roman') {\n return romanize(pos + 1);\n } else {\n return pos + 1;\n }\n}\n/**\n * @deprecated use `listItemWithConfig` instead\n */\nexport const list_item = listItemWithConfig();\n"],"names":["getListStyleFromDomElement","dom","listStyleType","style","dataset","orderedListWithConfig","enableHierarchicalList","attrs","baseAttrs","order","default","content","group","classNames","onChanged","parseDOM","tag","getAttrs","start","getAttribute","optionMapOr","val","Number","consuming","toDOM","node","hierarchical","class","getClassnamesFromNode","ordered_list","bulletListWithConfig","getRdfaAttrs","rdfaAware","contentElement","getRdfaContentElement","bullet_list","listItemWithConfig","defining","listPath","undefined","mapping","getListItemMapping","calculateListItemPath","sayListItemMapping","WeakMap","attributes","renderListMarker","parseRule","Error","tagName","cached","get","basePath","parent","unwrap","parentNode","parentElement","grandParent","prevSiblingLi","previousSibling","index","prevSiblingPath","length","pos","resultPath","set","alphabet","romanize","num","lookup","M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I","roman","i","value","Object","entries","indexToAlpha","cur","result","push","Math","floor","reverse","map","join","path","lastIndex","lastEntry","renderEntry","entry","toUpperCase","list_item"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"list-nodes.js","sources":["../../../../src/plugins/list/nodes/list-nodes.ts"],"sourcesContent":["import type { Node as PNode, ParseRule } from 'prosemirror-model';\nimport { getRdfaAttrs, getRdfaContentElement } from '#root/core/schema.ts';\nimport { optionMapOr, unwrap } from '#root/utils/_private/option.ts';\nimport type SayNodeSpec from '#root/core/say-node-spec.ts';\nimport { tagName } from '#root/utils/_private/dom-helpers.ts';\nimport getClassnamesFromNode from '#root/utils/get-classnames-from-node.ts';\nimport { onChanged } from './on-changed.ts';\n\nexport type OrderListStyle =\n | 'decimal'\n | 'upper-roman'\n | 'lower-alpha'\n | 'upper-alpha';\n\nconst getListStyleFromDomElement = (dom: HTMLElement) => {\n const { listStyleType } = dom.style;\n\n // Falling back to dataset for back-compatability\n return (listStyleType || dom.dataset['listStyle']) as\n | OrderListStyle\n | undefined;\n};\n\ntype Config = {\n enableHierarchicalList?: boolean;\n};\n\nexport const orderedListWithConfig: (options?: Config) => SayNodeSpec = ({\n enableHierarchicalList = false,\n} = {}) => {\n return {\n get attrs() {\n const baseAttrs: Record<string, { default: unknown }> = {\n order: { default: 1 },\n style: { default: null },\n };\n if (enableHierarchicalList) {\n baseAttrs['hierarchical'] = { default: null };\n }\n return baseAttrs;\n },\n content: 'list_item+',\n group: 'block list',\n classNames: ['say-ordered-list'],\n onChanged: onChanged,\n parseDOM: [\n {\n tag: 'ol',\n getAttrs(dom: string | HTMLElement) {\n if (typeof dom === 'string') {\n return false;\n }\n const start = dom.getAttribute('start');\n const baseAttrs: Record<string, unknown> = {\n order: optionMapOr(1, (val) => Number(val), start),\n style: getListStyleFromDomElement(dom),\n };\n if (enableHierarchicalList) {\n baseAttrs['hierarchical'] = dom.dataset['hierarchical']\n ? dom.dataset['hierarchical'] !== 'false'\n : null;\n }\n return baseAttrs;\n },\n consuming: false,\n },\n ],\n toDOM(node) {\n const { style, order, hierarchical, ...attrs } = node.attrs;\n const baseAttrs = {\n ...(order !== 1 && { start: order }),\n ...(style && {\n style: `list-style-type: ${style};`,\n }),\n } as Record<string, unknown>;\n if (enableHierarchicalList) {\n baseAttrs['data-hierarchical'] = hierarchical;\n }\n return [\n 'ol',\n {\n ...baseAttrs,\n ...attrs,\n class: getClassnamesFromNode(node),\n },\n 0,\n ];\n },\n };\n};\n\n/**\n * @deprecated use `orderedListWithConfig` instead\n */\nexport const ordered_list = orderedListWithConfig();\n\nexport const bulletListWithConfig: (options?: Config) => SayNodeSpec = () => {\n return {\n content: 'list_item+',\n group: 'block list',\n attrs: {\n style: { default: 'unordered' },\n hierarchical: { default: false },\n },\n classNames: ['say-bullet-list'],\n onChanged: onChanged,\n parseDOM: [\n {\n tag: 'ul',\n getAttrs(node: string | HTMLElement) {\n if (typeof node === 'string') {\n return false;\n }\n return { ...getRdfaAttrs(node, { rdfaAware: false }) };\n },\n consuming: false,\n contentElement: getRdfaContentElement,\n },\n ],\n toDOM(node: PNode) {\n return [\n 'ul',\n {\n ...node.attrs,\n class: getClassnamesFromNode(node),\n },\n 0,\n ];\n },\n };\n};\n\n/**\n * @deprecated use `bulletListWithConfig` instead\n */\nexport const bullet_list = bulletListWithConfig();\n\nexport const listItemWithConfig: (options?: Config) => SayNodeSpec = ({\n enableHierarchicalList = false,\n} = {}) => {\n return {\n // The `+` requirement is taken from the Prosemirror provided list schema nodes.\n // It's likely that we may want to drop this in the future but it may require increasing the\n // complexity of the commands to operate on lists.\n // See https://github.com/ProseMirror/prosemirror-schema-list/blob/master/src/schema-list.ts\n content: 'paragraphGroup+ block*',\n defining: true,\n attrs: enableHierarchicalList ? { listPath: { default: [] } } : undefined,\n classNames: ['say-list-item'],\n onChanged: onChanged,\n parseDOM: [\n {\n tag: 'li',\n getAttrs(node: HTMLElement | string) {\n if (typeof node === 'string') {\n return false;\n }\n if (enableHierarchicalList) {\n const mapping = getListItemMapping(this);\n const listPath = calculateListItemPath(node, mapping);\n return { ...getRdfaAttrs(node, { rdfaAware: false }), listPath };\n }\n return { ...getRdfaAttrs(node, { rdfaAware: false }) };\n },\n sayListItemMapping: enableHierarchicalList\n ? new WeakMap<Node, number[]>()\n : undefined,\n contentElement: getRdfaContentElement,\n },\n ],\n toDOM(node: PNode) {\n const attributes: { [key: string]: string } = {\n class: getClassnamesFromNode(node),\n };\n if (enableHierarchicalList) {\n const listPath = node.attrs['listPath'] as ListPathEntry[];\n if (listPath.length) {\n attributes['data-list-marker'] = renderListMarker(\n node.attrs['listPath'] as ListPathEntry[],\n );\n }\n }\n return ['li', attributes, 0];\n },\n };\n};\nexport interface ListPathEntry {\n pos: number;\n style: string;\n hierarchical: boolean;\n}\ntype ListItemMapping = WeakMap<Node, ListPathEntry[]>;\n/**\n * a utility to conveniently get the list mapping out of a parseRule in a typesafe way\n */\nfunction getListItemMapping(\n parseRule: ParseRule & { sayListItemMapping?: ListItemMapping },\n): ListItemMapping {\n const mapping = parseRule.sayListItemMapping;\n if (mapping) {\n return mapping;\n } else {\n throw new Error('no list item mapping found on parserule');\n }\n}\n\n/**\n * Use dynamic programming to efficiently determine the hierarchy of a given <li> node\n */\nfunction calculateListItemPath(\n node: Node,\n mapping: ListItemMapping,\n): ListPathEntry[] {\n if (tagName(node) !== 'li') {\n throw new Error('Tried to calculate the list path of a non-li node');\n }\n const cached = mapping.get(node);\n if (cached) {\n return cached;\n }\n // first, get the path of the li higher up the tree, if there is one\n let basePath: ListPathEntry[] = [];\n let parent = unwrap(node.parentNode) as HTMLElement;\n // skip contentContainer divs if rdfaAware\n if (parent.dataset['contentContainer']) {\n parent = parent.parentElement as HTMLElement;\n }\n\n let grandParent = parent.parentElement;\n // skip contentContainer divs if rdfaAware\n if (grandParent?.dataset['contentContainer']) {\n grandParent = grandParent.parentElement;\n }\n if (grandParent && tagName(grandParent) === 'li') {\n basePath = calculateListItemPath(grandParent, mapping);\n }\n\n // then we calculate our index relative to the previous li items at our level\n // we specifically skip all non-li siblings. Technically these should not exist, but\n // out-of-spec html is extremely common\n let prevSiblingLi = node.previousSibling;\n while (prevSiblingLi && tagName(prevSiblingLi) !== 'li') {\n prevSiblingLi = prevSiblingLi.previousSibling;\n }\n\n let index = 0;\n if (prevSiblingLi) {\n const prevSiblingPath = calculateListItemPath(prevSiblingLi, mapping);\n index = prevSiblingPath[prevSiblingPath.length - 1].pos + 1;\n }\n\n // then we calculate the style and hierarchy of this level\n // if we have a parent OL that has style and hierarchy, we use it (treating ULs as style=unordered and not hierarchical)\n // if not, we copy over the styles from the grandparent LI, or use a default\n\n let style = 'decimal';\n let hierarchical = false;\n if (tagName(parent) === 'ul') {\n style = 'unordered';\n } else if (tagName(parent) === 'ol') {\n style =\n getListStyleFromDomElement(parent) ??\n basePath[basePath.length - 1]?.style ??\n style;\n if (parent.dataset['hierarchical']) {\n hierarchical = parent.dataset['hierarchical'] !== 'false';\n } else {\n hierarchical =\n basePath[basePath.length - 1]?.hierarchical ?? hierarchical;\n }\n } else {\n throw new Error('li with non-list parent');\n }\n\n // the result is simply the path of our ancestor li concatenated with our index\n const resultPath: ListPathEntry[] = [\n ...basePath,\n { pos: index, hierarchical, style },\n ];\n // and we store the result so we don't fibonnacci ourselves into exponential complexity\n mapping.set(node, resultPath);\n return resultPath;\n}\n\nconst alphabet = [...'abcdefghijklmnopqrstuvwxyz'];\n\nfunction romanize(num: number) {\n const lookup = {\n M: 1000,\n CM: 900,\n D: 500,\n CD: 400,\n C: 100,\n XC: 90,\n L: 50,\n XL: 40,\n X: 10,\n IX: 9,\n V: 5,\n IV: 4,\n I: 1,\n };\n let roman = '';\n for (const [i, value] of Object.entries(lookup)) {\n while (num >= value) {\n roman += i;\n num -= value;\n }\n }\n return roman;\n}\n/**\n * Turns index into a base 26 number and maps it onto the alphabet, resulting\n * in \"aa\" for index 26, \"ab\" for 27, \"ba\" for 52, etc\n */\nfunction indexToAlpha(index: number): string {\n let cur = index;\n const result = [];\n result.push(cur % 26);\n while (cur > 25) {\n // -1 here cause we're 0-based\n cur = Math.floor(cur / 26) - 1;\n result.push(cur % 26);\n }\n result.reverse();\n return result.map((index) => alphabet[index]).join('');\n}\n/**\n * Given a path and a style, render a human-readable representation which the css rule can\n * simply render without extra processing\n */\nfunction renderListMarker(path: ListPathEntry[]): string {\n const length = path.length;\n const lastIndex = length - 1;\n const lastEntry = path[lastIndex];\n if (lastEntry.hierarchical) {\n return `${path.map(renderEntry).join('.')}. `;\n } else {\n return `${renderEntry(lastEntry)}. `;\n }\n}\nfunction renderEntry(entry: ListPathEntry) {\n const { style, pos } = entry;\n if (style === 'lower-alpha') {\n return indexToAlpha(pos);\n } else if (style === 'upper-alpha') {\n return indexToAlpha(pos).toUpperCase();\n } else if (style === 'upper-roman') {\n return romanize(pos + 1);\n } else {\n return pos + 1;\n }\n}\n/**\n * @deprecated use `listItemWithConfig` instead\n */\nexport const list_item = listItemWithConfig();\n"],"names":["getListStyleFromDomElement","dom","listStyleType","style","dataset","orderedListWithConfig","enableHierarchicalList","attrs","baseAttrs","order","default","content","group","classNames","onChanged","parseDOM","tag","getAttrs","start","getAttribute","optionMapOr","val","Number","consuming","toDOM","node","hierarchical","class","getClassnamesFromNode","ordered_list","bulletListWithConfig","getRdfaAttrs","rdfaAware","contentElement","getRdfaContentElement","bullet_list","listItemWithConfig","defining","listPath","undefined","mapping","getListItemMapping","calculateListItemPath","sayListItemMapping","WeakMap","attributes","length","renderListMarker","parseRule","Error","tagName","cached","get","basePath","parent","unwrap","parentNode","parentElement","grandParent","prevSiblingLi","previousSibling","index","prevSiblingPath","pos","resultPath","set","alphabet","romanize","num","lookup","M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I","roman","i","value","Object","entries","indexToAlpha","cur","result","push","Math","floor","reverse","map","join","path","lastIndex","lastEntry","renderEntry","entry","toUpperCase","list_item"],"mappings":"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"}
|