@lblod/ember-rdfa-editor 12.15.1 → 13.0.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.
@@ -1,7 +1,5 @@
1
- import { ProsePlugin } from '#root/prosemirror-aliases.ts';
2
1
  export { toggleList } from './commands/toggle-list.ts';
3
2
  export { liftOutOfNestedLists } from './commands/lift-out-of-nested-lists.ts';
4
3
  export { orderedListWithConfig, listItemWithConfig, bulletListWithConfig, ordered_list, list_item, bullet_list, } from './nodes/list-nodes.ts';
5
4
  export type { OrderListStyle } from './nodes/list-nodes.ts';
6
5
  export { bullet_list_input_rule, ordered_list_input_rule, } from './input_rules/index.ts';
7
- export declare function listTrackingPlugin(): ProsePlugin;
@@ -0,0 +1,2 @@
1
+ import type { NodeSpecOnChanged } from '../../on-changed/plugin.ts';
2
+ export declare const onChanged: NodeSpecOnChanged;
@@ -2,11 +2,10 @@ import { findParentNode } from '@curvenote/prosemirror-utils';
2
2
  import { action } from '@ember/object';
3
3
  import { inject } from '@ember/service';
4
4
  import Component from '@glimmer/component';
5
- import 'prosemirror-model';
6
- import 'prosemirror-state';
7
- import '../../../plugins/on-changed/plugin.js';
8
5
  import { toggleList } from '../../../plugins/list/commands/toggle-list.js';
9
6
  import '../../../plugin-D1qUAML5.js';
7
+ import 'prosemirror-state';
8
+ import 'prosemirror-model';
10
9
  import 'prosemirror-transform';
11
10
  import '../../../core/say-data-factory/data-factory.js';
12
11
  import '../../../core/say-data-factory/default-graph.js';
@@ -1 +1 @@
1
- {"version":3,"file":"ordered.js","sources":["../../../../src/components/plugins/list/ordered.ts"],"sourcesContent":["import { findParentNode } from '@curvenote/prosemirror-utils';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport type IntlService from 'ember-intl/services/intl';\nimport { type OrderListStyle, toggleList } from '#root/plugins/list/index.ts';\nimport { autoJoin, chainCommands } from 'prosemirror-commands';\nimport { sinkListItem, wrapInList } from 'prosemirror-schema-list';\nimport { type Command } from 'prosemirror-state';\nimport SayController from '#root/core/say-controller.ts';\nimport { OrderedListIcon } from '@appuniversum/ember-appuniversum/components/icons/ordered-list';\nimport { CheckIcon } from '@appuniversum/ember-appuniversum/components/icons/check';\nimport type { ListPathEntry } from '#root/plugins/list/nodes/list-nodes.ts';\n\ntype Args = {\n controller: SayController;\n enableHierarchicalList?: boolean;\n};\nexport default class ListOrdered extends Component<Args> {\n OrderedListIcon = OrderedListIcon;\n CheckIcon = CheckIcon;\n\n @service declare intl: IntlService;\n\n get styles() {\n return [\n {\n name: 'decimal',\n description: this.intl.t(\n 'ember-rdfa-editor.ordered-list.styles.decimal',\n ),\n },\n {\n name: 'lower-alpha',\n description: this.intl.t(\n 'ember-rdfa-editor.ordered-list.styles.lower-alpha',\n ),\n },\n {\n name: 'upper-alpha',\n description: this.intl.t(\n 'ember-rdfa-editor.ordered-list.styles.upper-alpha',\n ),\n },\n {\n name: 'upper-roman',\n description: this.intl.t(\n 'ember-rdfa-editor.ordered-list.styles.upper-roman',\n ),\n },\n ];\n }\n\n get firstListParent() {\n return findParentNode(\n (node) =>\n node.type === this.schema.nodes['ordered_list'] ||\n node.type === this.schema.nodes['bullet_list'],\n )(this.selection);\n }\n get firstListItemParent() {\n return findParentNode(\n (node) => node.type === this.schema.nodes['list_item'],\n )(this.selection);\n }\n\n get isActive() {\n return (\n this.firstListParent?.node.type ===\n this.controller.schema.nodes['ordered_list']\n );\n }\n\n get controller() {\n return this.args.controller;\n }\n\n get selection() {\n return this.controller.activeEditorState.selection;\n }\n\n get schema() {\n return this.controller.schema;\n }\n get isHierarchical() {\n if (!this.args.enableHierarchicalList) {\n return false;\n }\n const listItem = this.firstListItemParent;\n if (listItem?.node.type === this.controller.schema.nodes['list_item']) {\n const path = listItem.node.attrs['listPath'] as ListPathEntry[];\n\n return path[path.length - 1].hierarchical;\n } else {\n return false;\n }\n }\n\n toggleCommand(listStyle?: OrderListStyle): Command {\n return chainCommands(\n toggleList(\n this.schema.nodes['ordered_list'],\n this.schema.nodes['list_item'],\n {\n style: listStyle,\n },\n ),\n wrapInList(this.schema.nodes['ordered_list'], {\n style: listStyle,\n }),\n sinkListItem(this.schema.nodes['list_item']),\n );\n }\n\n get canToggle() {\n return this.controller.checkCommand(this.toggleCommand());\n }\n\n @action\n toggle(style?: OrderListStyle) {\n this.controller.focus();\n this.controller.doCommand(\n autoJoin(this.toggleCommand(style), ['ordered_list', 'bullet_list']),\n );\n }\n\n @action\n setStyle(style: OrderListStyle) {\n const firstListParent = this.firstListParent;\n if (\n firstListParent?.node.type ===\n this.controller.schema.nodes['ordered_list']\n ) {\n const pos = firstListParent.pos;\n this.controller.withTransaction((tr) => {\n return tr.setNodeAttribute(pos, 'style', style);\n });\n } else {\n this.toggle(style);\n }\n }\n\n @action\n toggleHierarchical() {\n const firstListParent = this.firstListParent;\n if (\n firstListParent?.node.type ===\n this.controller.schema.nodes['ordered_list']\n ) {\n this.controller.withTransaction((tr) => {\n return tr.setNodeAttribute(\n firstListParent.pos,\n 'hierarchical',\n !this.isHierarchical,\n );\n });\n }\n }\n styleIsActive = (style: string) => {\n if (this.args.enableHierarchicalList) {\n const listItem = this.firstListItemParent;\n if (listItem?.node.type === this.controller.schema.nodes['list_item']) {\n const path = listItem.node.attrs['listPath'] as ListPathEntry[];\n\n return path[path.length - 1].style === style;\n } else {\n return false;\n }\n } else {\n const firstListParent = this.firstListParent;\n if (\n firstListParent?.node.type ===\n this.controller.schema.nodes['ordered_list']\n ) {\n return firstListParent.node.attrs['style'] === style;\n } else {\n return false;\n }\n }\n };\n}\n"],"names":["ListOrdered","Component","OrderedListIcon","CheckIcon","g","prototype","service","i","void 0","styles","name","description","intl","t","firstListParent","findParentNode","node","type","schema","nodes","selection","firstListItemParent","isActive","controller","args","activeEditorState","isHierarchical","enableHierarchicalList","listItem","path","attrs","length","hierarchical","toggleCommand","listStyle","chainCommands","toggleList","style","wrapInList","sinkListItem","canToggle","checkCommand","toggle","focus","doCommand","autoJoin","n","action","setStyle","pos","withTransaction","tr","setNodeAttribute","toggleHierarchical","styleIsActive","setComponentTemplate","TEMPLATE"],"mappings":"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"}
1
+ {"version":3,"file":"ordered.js","sources":["../../../../src/components/plugins/list/ordered.ts"],"sourcesContent":["import { findParentNode } from '@curvenote/prosemirror-utils';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport type IntlService from 'ember-intl/services/intl';\nimport { type OrderListStyle, toggleList } from '#root/plugins/list/index.ts';\nimport { autoJoin, chainCommands } from 'prosemirror-commands';\nimport { sinkListItem, wrapInList } from 'prosemirror-schema-list';\nimport { type Command } from 'prosemirror-state';\nimport SayController from '#root/core/say-controller.ts';\nimport { OrderedListIcon } from '@appuniversum/ember-appuniversum/components/icons/ordered-list';\nimport { CheckIcon } from '@appuniversum/ember-appuniversum/components/icons/check';\nimport type { ListPathEntry } from '#root/plugins/list/nodes/list-nodes.ts';\n\ntype Args = {\n controller: SayController;\n enableHierarchicalList?: boolean;\n};\nexport default class ListOrdered extends Component<Args> {\n OrderedListIcon = OrderedListIcon;\n CheckIcon = CheckIcon;\n\n @service declare intl: IntlService;\n\n get styles() {\n return [\n {\n name: 'decimal',\n description: this.intl.t(\n 'ember-rdfa-editor.ordered-list.styles.decimal',\n ),\n },\n {\n name: 'lower-alpha',\n description: this.intl.t(\n 'ember-rdfa-editor.ordered-list.styles.lower-alpha',\n ),\n },\n {\n name: 'upper-alpha',\n description: this.intl.t(\n 'ember-rdfa-editor.ordered-list.styles.upper-alpha',\n ),\n },\n {\n name: 'upper-roman',\n description: this.intl.t(\n 'ember-rdfa-editor.ordered-list.styles.upper-roman',\n ),\n },\n ];\n }\n\n get firstListParent() {\n return findParentNode(\n (node) =>\n node.type === this.schema.nodes['ordered_list'] ||\n node.type === this.schema.nodes['bullet_list'],\n )(this.selection);\n }\n get firstListItemParent() {\n return findParentNode(\n (node) => node.type === this.schema.nodes['list_item'],\n )(this.selection);\n }\n\n get isActive() {\n return (\n this.firstListParent?.node.type ===\n this.controller.schema.nodes['ordered_list']\n );\n }\n\n get controller() {\n return this.args.controller;\n }\n\n get selection() {\n return this.controller.activeEditorState.selection;\n }\n\n get schema() {\n return this.controller.schema;\n }\n get isHierarchical() {\n if (!this.args.enableHierarchicalList) {\n return false;\n }\n const listItem = this.firstListItemParent;\n if (listItem?.node.type === this.controller.schema.nodes['list_item']) {\n const path = listItem.node.attrs['listPath'] as ListPathEntry[];\n\n return path[path.length - 1].hierarchical;\n } else {\n return false;\n }\n }\n\n toggleCommand(listStyle?: OrderListStyle): Command {\n return chainCommands(\n toggleList(\n this.schema.nodes['ordered_list'],\n this.schema.nodes['list_item'],\n {\n style: listStyle,\n },\n ),\n wrapInList(this.schema.nodes['ordered_list'], {\n style: listStyle,\n }),\n sinkListItem(this.schema.nodes['list_item']),\n );\n }\n\n get canToggle() {\n return this.controller.checkCommand(this.toggleCommand());\n }\n\n @action\n toggle(style?: OrderListStyle) {\n this.controller.focus();\n this.controller.doCommand(\n autoJoin(this.toggleCommand(style), ['ordered_list', 'bullet_list']),\n );\n }\n\n @action\n setStyle(style: OrderListStyle) {\n const firstListParent = this.firstListParent;\n if (\n firstListParent?.node.type ===\n this.controller.schema.nodes['ordered_list']\n ) {\n const pos = firstListParent.pos;\n this.controller.withTransaction((tr) => {\n return tr.setNodeAttribute(pos, 'style', style);\n });\n } else {\n this.toggle(style);\n }\n }\n\n @action\n toggleHierarchical() {\n const firstListParent = this.firstListParent;\n if (\n firstListParent?.node.type ===\n this.controller.schema.nodes['ordered_list']\n ) {\n this.controller.withTransaction((tr) => {\n return tr.setNodeAttribute(\n firstListParent.pos,\n 'hierarchical',\n !this.isHierarchical,\n );\n });\n }\n }\n styleIsActive = (style: string) => {\n if (this.args.enableHierarchicalList) {\n const listItem = this.firstListItemParent;\n if (listItem?.node.type === this.controller.schema.nodes['list_item']) {\n const path = listItem.node.attrs['listPath'] as ListPathEntry[];\n\n return path[path.length - 1].style === style;\n } else {\n return false;\n }\n } else {\n const firstListParent = this.firstListParent;\n if (\n firstListParent?.node.type ===\n this.controller.schema.nodes['ordered_list']\n ) {\n return firstListParent.node.attrs['style'] === style;\n } else {\n return false;\n }\n }\n };\n}\n"],"names":["ListOrdered","Component","OrderedListIcon","CheckIcon","g","prototype","service","i","void 0","styles","name","description","intl","t","firstListParent","findParentNode","node","type","schema","nodes","selection","firstListItemParent","isActive","controller","args","activeEditorState","isHierarchical","enableHierarchicalList","listItem","path","attrs","length","hierarchical","toggleCommand","listStyle","chainCommands","toggleList","style","wrapInList","sinkListItem","canToggle","checkCommand","toggle","focus","doCommand","autoJoin","n","action","setStyle","pos","withTransaction","tr","setNodeAttribute","toggleHierarchical","styleIsActive","setComponentTemplate","TEMPLATE"],"mappings":"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"}
@@ -1,11 +1,10 @@
1
1
  import { findParentNode } from '@curvenote/prosemirror-utils';
2
2
  import { action } from '@ember/object';
3
3
  import Component from '@glimmer/component';
4
- import 'prosemirror-model';
5
- import 'prosemirror-state';
6
- import '../../../plugins/on-changed/plugin.js';
7
4
  import { toggleList } from '../../../plugins/list/commands/toggle-list.js';
8
5
  import '../../../plugin-D1qUAML5.js';
6
+ import 'prosemirror-state';
7
+ import 'prosemirror-model';
9
8
  import 'prosemirror-transform';
10
9
  import '../../../core/say-data-factory/data-factory.js';
11
10
  import '../../../core/say-data-factory/default-graph.js';
@@ -1 +1 @@
1
- {"version":3,"file":"unordered.js","sources":["../../../../src/components/plugins/list/unordered.ts"],"sourcesContent":["import { findParentNode } from '@curvenote/prosemirror-utils';\nimport { action } from '@ember/object';\nimport Component from '@glimmer/component';\nimport { toggleList } from '#root/plugins/list/index.ts';\nimport { autoJoin, chainCommands } from 'prosemirror-commands';\nimport { wrapInList } from 'prosemirror-schema-list';\nimport type { Command } from 'prosemirror-state';\nimport SayController from '#root/core/say-controller.ts';\nimport { ListBulletsIcon } from '@appuniversum/ember-appuniversum/components/icons/list-bullets';\n\ntype Args = {\n controller: SayController;\n};\n\nexport default class ListUnordered extends Component<Args> {\n UnorderedListIcon = ListBulletsIcon;\n\n get firstListParent() {\n return findParentNode(\n (node) =>\n node.type === this.schema.nodes['ordered_list'] ||\n node.type === this.schema.nodes['bullet_list'],\n )(this.selection);\n }\n\n get isActive() {\n return (\n this.firstListParent?.node.type ===\n this.controller.schema.nodes['bullet_list']\n );\n }\n\n get controller() {\n return this.args.controller;\n }\n\n get selection() {\n return this.controller.activeEditorState.selection;\n }\n\n get schema() {\n return this.controller.schema;\n }\n\n get toggleCommand(): Command {\n return chainCommands(\n toggleList(\n this.schema.nodes['bullet_list'],\n this.schema.nodes['list_item'],\n ),\n wrapInList(this.schema.nodes['bullet_list']),\n );\n }\n\n get canToggle() {\n return this.controller.checkCommand(this.toggleCommand);\n }\n\n @action\n toggle() {\n if (this.controller) {\n this.controller.focus();\n this.controller.doCommand(\n autoJoin(this.toggleCommand, ['ordered_list', 'bullet_list']),\n );\n }\n }\n}\n"],"names":["ListUnordered","Component","UnorderedListIcon","ListBulletsIcon","firstListParent","findParentNode","node","type","schema","nodes","selection","isActive","controller","args","activeEditorState","toggleCommand","chainCommands","toggleList","wrapInList","canToggle","checkCommand","toggle","focus","doCommand","autoJoin","n","prototype","action","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAce,MAAMA,aAAa,SAASC,SAAS,CAAO;AACzDC,EAAAA,iBAAiB,GAAGC,eAAe;EAEnC,IAAIC,eAAeA,GAAG;AACpB,IAAA,OAAOC,cAAc,CAClBC,IAAI,IACHA,IAAI,CAACC,IAAI,KAAK,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,cAAc,CAAC,IAC/CH,IAAI,CAACC,IAAI,KAAK,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,aAAa,CACjD,CAAC,CAAC,IAAI,CAACC,SAAS,CAAC;AACnB,EAAA;EAEA,IAAIC,QAAQA,GAAG;AACb,IAAA,OACE,IAAI,CAACP,eAAe,EAAEE,IAAI,CAACC,IAAI,KAC/B,IAAI,CAACK,UAAU,CAACJ,MAAM,CAACC,KAAK,CAAC,aAAa,CAAC;AAE/C,EAAA;EAEA,IAAIG,UAAUA,GAAG;AACf,IAAA,OAAO,IAAI,CAACC,IAAI,CAACD,UAAU;AAC7B,EAAA;EAEA,IAAIF,SAASA,GAAG;AACd,IAAA,OAAO,IAAI,CAACE,UAAU,CAACE,iBAAiB,CAACJ,SAAS;AACpD,EAAA;EAEA,IAAIF,MAAMA,GAAG;AACX,IAAA,OAAO,IAAI,CAACI,UAAU,CAACJ,MAAM;AAC/B,EAAA;EAEA,IAAIO,aAAaA,GAAY;AAC3B,IAAA,OAAOC,aAAa,CAClBC,UAAU,CACR,IAAI,CAACT,MAAM,CAACC,KAAK,CAAC,aAAa,CAAC,EAChC,IAAI,CAACD,MAAM,CAACC,KAAK,CAAC,WAAW,CAC/B,CAAC,EACDS,UAAU,CAAC,IAAI,CAACV,MAAM,CAACC,KAAK,CAAC,aAAa,CAAC,CAC7C,CAAC;AACH,EAAA;EAEA,IAAIU,SAASA,GAAG;IACd,OAAO,IAAI,CAACP,UAAU,CAACQ,YAAY,CAAC,IAAI,CAACL,aAAa,CAAC;AACzD,EAAA;AAGAM,EAAAA,MAAMA,GAAG;IACP,IAAI,IAAI,CAACT,UAAU,EAAE;AACnB,MAAA,IAAI,CAACA,UAAU,CAACU,KAAK,EAAE;AACvB,MAAA,IAAI,CAACV,UAAU,CAACW,SAAS,CACvBC,QAAQ,CAAC,IAAI,CAACT,aAAa,EAAE,CAAC,cAAc,EAAE,aAAa,CAAC,CAC9D,CAAC;AACH,IAAA;AACF,EAAA;AAAC,EAAA;IAAAU,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,QAAA,EAAA,CARAC,MAAM,CAAA,CAAA;AAAA;AAST;AAACC,oBAAA,CAAAC,QAAA,EArDoB7B,aAAa,CAAA;;;;"}
1
+ {"version":3,"file":"unordered.js","sources":["../../../../src/components/plugins/list/unordered.ts"],"sourcesContent":["import { findParentNode } from '@curvenote/prosemirror-utils';\nimport { action } from '@ember/object';\nimport Component from '@glimmer/component';\nimport { toggleList } from '#root/plugins/list/index.ts';\nimport { autoJoin, chainCommands } from 'prosemirror-commands';\nimport { wrapInList } from 'prosemirror-schema-list';\nimport type { Command } from 'prosemirror-state';\nimport SayController from '#root/core/say-controller.ts';\nimport { ListBulletsIcon } from '@appuniversum/ember-appuniversum/components/icons/list-bullets';\n\ntype Args = {\n controller: SayController;\n};\n\nexport default class ListUnordered extends Component<Args> {\n UnorderedListIcon = ListBulletsIcon;\n\n get firstListParent() {\n return findParentNode(\n (node) =>\n node.type === this.schema.nodes['ordered_list'] ||\n node.type === this.schema.nodes['bullet_list'],\n )(this.selection);\n }\n\n get isActive() {\n return (\n this.firstListParent?.node.type ===\n this.controller.schema.nodes['bullet_list']\n );\n }\n\n get controller() {\n return this.args.controller;\n }\n\n get selection() {\n return this.controller.activeEditorState.selection;\n }\n\n get schema() {\n return this.controller.schema;\n }\n\n get toggleCommand(): Command {\n return chainCommands(\n toggleList(\n this.schema.nodes['bullet_list'],\n this.schema.nodes['list_item'],\n ),\n wrapInList(this.schema.nodes['bullet_list']),\n );\n }\n\n get canToggle() {\n return this.controller.checkCommand(this.toggleCommand);\n }\n\n @action\n toggle() {\n if (this.controller) {\n this.controller.focus();\n this.controller.doCommand(\n autoJoin(this.toggleCommand, ['ordered_list', 'bullet_list']),\n );\n }\n }\n}\n"],"names":["ListUnordered","Component","UnorderedListIcon","ListBulletsIcon","firstListParent","findParentNode","node","type","schema","nodes","selection","isActive","controller","args","activeEditorState","toggleCommand","chainCommands","toggleList","wrapInList","canToggle","checkCommand","toggle","focus","doCommand","autoJoin","n","prototype","action","setComponentTemplate","TEMPLATE"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAce,MAAMA,aAAa,SAASC,SAAS,CAAO;AACzDC,EAAAA,iBAAiB,GAAGC,eAAe;EAEnC,IAAIC,eAAeA,GAAG;AACpB,IAAA,OAAOC,cAAc,CAClBC,IAAI,IACHA,IAAI,CAACC,IAAI,KAAK,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,cAAc,CAAC,IAC/CH,IAAI,CAACC,IAAI,KAAK,IAAI,CAACC,MAAM,CAACC,KAAK,CAAC,aAAa,CACjD,CAAC,CAAC,IAAI,CAACC,SAAS,CAAC;AACnB,EAAA;EAEA,IAAIC,QAAQA,GAAG;AACb,IAAA,OACE,IAAI,CAACP,eAAe,EAAEE,IAAI,CAACC,IAAI,KAC/B,IAAI,CAACK,UAAU,CAACJ,MAAM,CAACC,KAAK,CAAC,aAAa,CAAC;AAE/C,EAAA;EAEA,IAAIG,UAAUA,GAAG;AACf,IAAA,OAAO,IAAI,CAACC,IAAI,CAACD,UAAU;AAC7B,EAAA;EAEA,IAAIF,SAASA,GAAG;AACd,IAAA,OAAO,IAAI,CAACE,UAAU,CAACE,iBAAiB,CAACJ,SAAS;AACpD,EAAA;EAEA,IAAIF,MAAMA,GAAG;AACX,IAAA,OAAO,IAAI,CAACI,UAAU,CAACJ,MAAM;AAC/B,EAAA;EAEA,IAAIO,aAAaA,GAAY;AAC3B,IAAA,OAAOC,aAAa,CAClBC,UAAU,CACR,IAAI,CAACT,MAAM,CAACC,KAAK,CAAC,aAAa,CAAC,EAChC,IAAI,CAACD,MAAM,CAACC,KAAK,CAAC,WAAW,CAC/B,CAAC,EACDS,UAAU,CAAC,IAAI,CAACV,MAAM,CAACC,KAAK,CAAC,aAAa,CAAC,CAC7C,CAAC;AACH,EAAA;EAEA,IAAIU,SAASA,GAAG;IACd,OAAO,IAAI,CAACP,UAAU,CAACQ,YAAY,CAAC,IAAI,CAACL,aAAa,CAAC;AACzD,EAAA;AAGAM,EAAAA,MAAMA,GAAG;IACP,IAAI,IAAI,CAACT,UAAU,EAAE;AACnB,MAAA,IAAI,CAACA,UAAU,CAACU,KAAK,EAAE;AACvB,MAAA,IAAI,CAACV,UAAU,CAACW,SAAS,CACvBC,QAAQ,CAAC,IAAI,CAACT,aAAa,EAAE,CAAC,cAAc,EAAE,aAAa,CAAC,CAC9D,CAAC;AACH,IAAA;AACF,EAAA;AAAC,EAAA;IAAAU,CAAA,CAAA,IAAA,CAAAC,SAAA,EAAA,QAAA,EAAA,CARAC,MAAM,CAAA,CAAA;AAAA;AAST;AAACC,oBAAA,CAAAC,QAAA,EArDoB7B,aAAa,CAAA;;;;"}
@@ -1,74 +1,5 @@
1
- import 'prosemirror-model';
2
- import { Plugin, Selection } from 'prosemirror-state';
3
- import { changedDescendants } from '../../utils/_private/changed-descendants.js';
4
- import { IS_ON_CHANGED } from '../on-changed/plugin.js';
5
1
  export { toggleList } from './commands/toggle-list.js';
6
2
  export { liftOutOfNestedLists } from './commands/lift-out-of-nested-lists.js';
7
3
  export { bulletListWithConfig, bullet_list, listItemWithConfig, list_item, orderedListWithConfig, ordered_list } from './nodes/list-nodes.js';
8
4
  export { bullet_list_input_rule, ordered_list_input_rule } from './input_rules/index.js';
9
-
10
- function listTrackingPlugin() {
11
- return new Plugin({
12
- appendTransaction(transactions, oldState, newState) {
13
- if (transactions.some(tr => tr.docChanged)) {
14
- const changedLists = [];
15
- changedDescendants(oldState.doc, newState.doc, 0, (node, pos) => {
16
- if (node.type.spec.group?.includes('list') && (changedLists.length === 0 || pos > changedLists[changedLists.length - 1].pos + changedLists[changedLists.length - 1].node.nodeSize)) {
17
- changedLists.push({
18
- node,
19
- pos
20
- });
21
- return false;
22
- }
23
- return true;
24
- });
25
- if (changedLists.length) {
26
- const tr = newState.tr;
27
- const oldSelection = tr.selection;
28
- for (const {
29
- node,
30
- pos
31
- } of changedLists) {
32
- calculateListTree(node, pos, tr);
33
- }
34
- // A bit of a hack: we want to make sure to preserve the old selection, this allows us to easily copy it
35
- const newSelection = Selection.fromJSON(tr.doc, oldSelection.toJSON());
36
- tr.setSelection(newSelection);
37
- return tr;
38
- }
39
- }
40
- }
41
- });
42
- }
43
- function calculateListTree(node, offset, tr) {
44
- const path = [];
45
- updateListItems(node, path, offset, tr, node.attrs['style'] ?? 'unordered', node.attrs['hierarchical'] ?? false);
46
- }
47
- function updateListItems(node, path, docPosOffset, tr, style, hierarchical) {
48
- if (node.isLeaf) {
49
- return;
50
- }
51
- let counter = 0;
52
- node.content.forEach((child, offset) => {
53
- if (child.type.name === 'list_item') {
54
- const newPath = [...path, {
55
- pos: counter,
56
- hierarchical,
57
- style
58
- }];
59
- tr.setNodeAttribute(docPosOffset + offset + 1, 'listPath', newPath);
60
- // We set the meta of the on changed plugin so it gets ignored there and doesn't enter an infinite loop
61
- // TODO: migrate this whole plugin to an onChangged attribute
62
- tr.setMeta(IS_ON_CHANGED, true);
63
- updateListItems(child, newPath, docPosOffset + offset + 1, tr, style, hierarchical);
64
- counter++;
65
- } else if (child.type.name === 'ordered_list' || child.type.name === 'bullet_list') {
66
- updateListItems(child, path, docPosOffset + offset + 1, tr, child.attrs['style'] ?? style, child.attrs['hierarchical'] ?? hierarchical);
67
- } else {
68
- updateListItems(child, path, docPosOffset + offset + 1, tr, style, hierarchical);
69
- }
70
- });
71
- }
72
-
73
- export { listTrackingPlugin };
74
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/plugins/list/index.ts"],"sourcesContent":["import { PNode, ProsePlugin } from '#root/prosemirror-aliases.ts';\nimport { EditorState, Transaction, Selection } from 'prosemirror-state';\nimport { changedDescendants } from '#root/utils/_private/changed-descendants.ts';\nimport type { ListPathEntry } from './nodes/list-nodes.ts';\nimport { IS_ON_CHANGED } from '../on-changed/plugin.ts';\n\nexport { toggleList } from './commands/toggle-list.ts';\nexport { liftOutOfNestedLists } from './commands/lift-out-of-nested-lists.ts';\nexport {\n orderedListWithConfig,\n listItemWithConfig,\n bulletListWithConfig,\n ordered_list,\n list_item,\n bullet_list,\n} from './nodes/list-nodes.ts';\nexport type { OrderListStyle } from './nodes/list-nodes.ts';\nexport {\n bullet_list_input_rule,\n ordered_list_input_rule,\n} from './input_rules/index.ts';\n\nexport function listTrackingPlugin(): ProsePlugin {\n return new ProsePlugin({\n appendTransaction(\n transactions: readonly Transaction[],\n oldState: EditorState,\n newState: EditorState,\n ) {\n if (transactions.some((tr) => tr.docChanged)) {\n const changedLists: { node: PNode; pos: number }[] = [];\n changedDescendants(\n oldState.doc,\n newState.doc,\n 0,\n (node: PNode, pos: number) => {\n if (\n node.type.spec.group?.includes('list') &&\n (changedLists.length === 0 ||\n pos >\n changedLists[changedLists.length - 1].pos +\n changedLists[changedLists.length - 1].node.nodeSize)\n ) {\n changedLists.push({ node, pos });\n return false;\n }\n return true;\n },\n );\n if (changedLists.length) {\n const tr = newState.tr;\n const oldSelection = tr.selection;\n for (const { node, pos } of changedLists) {\n calculateListTree(node, pos, tr);\n }\n // A bit of a hack: we want to make sure to preserve the old selection, this allows us to easily copy it\n const newSelection = Selection.fromJSON(\n tr.doc,\n oldSelection.toJSON(),\n );\n tr.setSelection(newSelection);\n return tr;\n }\n }\n },\n });\n}\n\nfunction calculateListTree(node: PNode, offset: number, tr: Transaction) {\n const path: ListPathEntry[] = [];\n updateListItems(\n node,\n path,\n offset,\n tr,\n (node.attrs['style'] as string) ?? 'unordered',\n (node.attrs['hierarchical'] as boolean) ?? false,\n );\n}\nfunction updateListItems(\n node: PNode,\n path: ListPathEntry[],\n docPosOffset: number,\n tr: Transaction,\n style: string,\n hierarchical: boolean,\n) {\n if (node.isLeaf) {\n return;\n }\n let counter = 0;\n node.content.forEach((child: PNode, offset: number) => {\n if (child.type.name === 'list_item') {\n const newPath = [...path, { pos: counter, hierarchical, style }];\n tr.setNodeAttribute(docPosOffset + offset + 1, 'listPath', newPath);\n // We set the meta of the on changed plugin so it gets ignored there and doesn't enter an infinite loop\n // TODO: migrate this whole plugin to an onChangged attribute\n tr.setMeta(IS_ON_CHANGED, true);\n updateListItems(\n child,\n newPath,\n docPosOffset + offset + 1,\n tr,\n style,\n hierarchical,\n );\n counter++;\n } else if (\n child.type.name === 'ordered_list' ||\n child.type.name === 'bullet_list'\n ) {\n updateListItems(\n child,\n path,\n docPosOffset + offset + 1,\n tr,\n (child.attrs['style'] as string) ?? style,\n (child.attrs['hierarchical'] as boolean) ?? hierarchical,\n );\n } else {\n updateListItems(\n child,\n path,\n docPosOffset + offset + 1,\n tr,\n style,\n hierarchical,\n );\n }\n });\n}\n"],"names":["listTrackingPlugin","ProsePlugin","appendTransaction","transactions","oldState","newState","some","tr","docChanged","changedLists","changedDescendants","doc","node","pos","type","spec","group","includes","length","nodeSize","push","oldSelection","selection","calculateListTree","newSelection","Selection","fromJSON","toJSON","setSelection","offset","path","updateListItems","attrs","docPosOffset","style","hierarchical","isLeaf","counter","content","forEach","child","name","newPath","setNodeAttribute","setMeta","IS_ON_CHANGED"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -2,6 +2,7 @@ import { getRdfaContentElement, getRdfaAttrs } from '../../../core/schema.js';
2
2
  import { optionMapOr, unwrap } from '../../../utils/_private/option.js';
3
3
  import { tagName } from '../../../utils/_private/dom-helpers.js';
4
4
  import getClassnamesFromNode from '../../../utils/get-classnames-from-node.js';
5
+ import { onChanged } from './on-changed.js';
5
6
 
6
7
  const getListStyleFromDomElement = dom => {
7
8
  const {
@@ -34,6 +35,7 @@ const orderedListWithConfig = ({
34
35
  content: 'list_item+',
35
36
  group: 'block list',
36
37
  classNames: ['say-ordered-list'],
38
+ onChanged: onChanged,
37
39
  parseDOM: [{
38
40
  tag: 'ol',
39
41
  getAttrs(dom) {
@@ -96,6 +98,7 @@ const bulletListWithConfig = () => {
96
98
  }
97
99
  },
98
100
  classNames: ['say-bullet-list'],
101
+ onChanged: onChanged,
99
102
  parseDOM: [{
100
103
  tag: 'ul',
101
104
  getAttrs(node) {
@@ -140,6 +143,7 @@ const listItemWithConfig = ({
140
143
  }
141
144
  } : undefined,
142
145
  classNames: ['say-list-item'],
146
+ onChanged: onChanged,
143
147
  parseDOM: [{
144
148
  tag: 'li',
145
149
  getAttrs(node) {
@@ -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';\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 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 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 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","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 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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"}
@@ -0,0 +1,82 @@
1
+ import 'prosemirror-model';
2
+ import { Selection } from 'prosemirror-state';
3
+ import { changedDescendants } from '../../../utils/_private/changed-descendants.js';
4
+
5
+ const onChanged = {
6
+ doOnce: true,
7
+ monadGenerator: (_transactions, oldState, newState) => {
8
+ const changedLists = [];
9
+ changedDescendants(oldState.doc, newState.doc, 0, (node, pos) => {
10
+ if (node.type.spec.group?.includes('list') && (changedLists.length === 0 || pos > changedLists[changedLists.length - 1].pos + changedLists[changedLists.length - 1].node.nodeSize)) {
11
+ changedLists.push({
12
+ node,
13
+ pos
14
+ });
15
+ return false;
16
+ }
17
+ return true;
18
+ });
19
+ if (changedLists.length) {
20
+ return [state => {
21
+ const tr = state.tr;
22
+ const oldSelection = tr.selection;
23
+ for (const {
24
+ node,
25
+ pos
26
+ } of changedLists) {
27
+ calculateListTree(node, pos, tr);
28
+ }
29
+ // A bit of a hack: we want to make sure to preserve the old selection, this allows us to easily copy it
30
+ const newSelection = Selection.fromJSON(tr.doc, oldSelection.toJSON());
31
+ tr.setSelection(newSelection);
32
+ return {
33
+ transaction: tr,
34
+ result: true,
35
+ initialState: newState
36
+ };
37
+ }];
38
+ } else {
39
+ return [];
40
+ }
41
+ }
42
+ };
43
+ function calculateListTree(node, offset, tr) {
44
+ const path = [];
45
+ updateListItems(node, path, offset, tr, node.attrs['style'] ?? 'unordered', node.attrs['hierarchical'] ?? false);
46
+ }
47
+ function updateListItems(node, path, docPosOffset, tr, style, hierarchical) {
48
+ if (node.isLeaf) {
49
+ return;
50
+ }
51
+ let counter = 0;
52
+ node.content.forEach((child, offset) => {
53
+ if (child.type.name === 'list_item') {
54
+ const newPath = [...path, {
55
+ pos: counter,
56
+ hierarchical,
57
+ style
58
+ }];
59
+ if (!areEqualPaths(newPath, child.attrs['listPath'])) {
60
+ tr.setNodeAttribute(docPosOffset + offset + 1, 'listPath', newPath);
61
+ }
62
+ updateListItems(child, newPath, docPosOffset + offset + 1, tr, style, hierarchical);
63
+ counter++;
64
+ } else if (child.type.name === 'ordered_list' || child.type.name === 'bullet_list') {
65
+ updateListItems(child, path, docPosOffset + offset + 1, tr, child.attrs['style'] ?? style, child.attrs['hierarchical'] ?? hierarchical);
66
+ } else {
67
+ updateListItems(child, path, docPosOffset + offset + 1, tr, style, hierarchical);
68
+ }
69
+ });
70
+ }
71
+ function areEqualPaths(path1, path2) {
72
+ if (path1.length !== path2.length) return false;
73
+ for (let i = 0; i < path1.length; i++) {
74
+ const entry1 = path1[i];
75
+ const entry2 = path2[i];
76
+ if (entry1.pos !== entry2.pos || entry1.hierarchical !== entry2.hierarchical || entry1.style !== entry2.style) return false;
77
+ }
78
+ return true;
79
+ }
80
+
81
+ export { onChanged };
82
+ //# sourceMappingURL=on-changed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-changed.js","sources":["../../../../src/plugins/list/nodes/on-changed.ts"],"sourcesContent":["import { PNode } from '#root/prosemirror-aliases.ts';\nimport { Transaction, Selection } from 'prosemirror-state';\nimport { changedDescendants } from '#root/utils/_private/changed-descendants.ts';\nimport type { ListPathEntry } from '../nodes/list-nodes.ts';\nimport type { NodeSpecOnChanged } from '../../on-changed/plugin.ts';\n\nexport const onChanged: NodeSpecOnChanged = {\n doOnce: true,\n monadGenerator: (_transactions, oldState, newState) => {\n const changedLists: { node: PNode; pos: number }[] = [];\n changedDescendants(\n oldState.doc,\n newState.doc,\n 0,\n (node: PNode, pos: number) => {\n if (\n node.type.spec.group?.includes('list') &&\n (changedLists.length === 0 ||\n pos >\n changedLists[changedLists.length - 1].pos +\n changedLists[changedLists.length - 1].node.nodeSize)\n ) {\n changedLists.push({ node, pos });\n return false;\n }\n return true;\n },\n );\n if (changedLists.length) {\n return [\n (state) => {\n const tr = state.tr;\n const oldSelection = tr.selection;\n for (const { node, pos } of changedLists) {\n calculateListTree(node, pos, tr);\n }\n // A bit of a hack: we want to make sure to preserve the old selection, this allows us to easily copy it\n const newSelection = Selection.fromJSON(\n tr.doc,\n oldSelection.toJSON(),\n );\n tr.setSelection(newSelection);\n return { transaction: tr, result: true, initialState: newState };\n },\n ];\n } else {\n return [];\n }\n },\n};\n\nfunction calculateListTree(node: PNode, offset: number, tr: Transaction) {\n const path: ListPathEntry[] = [];\n updateListItems(\n node,\n path,\n offset,\n tr,\n (node.attrs['style'] as string) ?? 'unordered',\n (node.attrs['hierarchical'] as boolean) ?? false,\n );\n}\nfunction updateListItems(\n node: PNode,\n path: ListPathEntry[],\n docPosOffset: number,\n tr: Transaction,\n style: string,\n hierarchical: boolean,\n) {\n if (node.isLeaf) {\n return;\n }\n let counter = 0;\n node.content.forEach((child: PNode, offset: number) => {\n if (child.type.name === 'list_item') {\n const newPath = [...path, { pos: counter, hierarchical, style }];\n if (!areEqualPaths(newPath, child.attrs['listPath'] as ListPathEntry[])) {\n tr.setNodeAttribute(docPosOffset + offset + 1, 'listPath', newPath);\n }\n updateListItems(\n child,\n newPath,\n docPosOffset + offset + 1,\n tr,\n style,\n hierarchical,\n );\n counter++;\n } else if (\n child.type.name === 'ordered_list' ||\n child.type.name === 'bullet_list'\n ) {\n updateListItems(\n child,\n path,\n docPosOffset + offset + 1,\n tr,\n (child.attrs['style'] as string) ?? style,\n (child.attrs['hierarchical'] as boolean) ?? hierarchical,\n );\n } else {\n updateListItems(\n child,\n path,\n docPosOffset + offset + 1,\n tr,\n style,\n hierarchical,\n );\n }\n });\n}\n\nfunction areEqualPaths(path1: ListPathEntry[], path2: ListPathEntry[]) {\n if (path1.length !== path2.length) return false;\n for (let i = 0; i < path1.length; i++) {\n const entry1 = path1[i];\n const entry2 = path2[i];\n if (\n entry1.pos !== entry2.pos ||\n entry1.hierarchical !== entry2.hierarchical ||\n entry1.style !== entry2.style\n )\n return false;\n }\n return true;\n}\n"],"names":["onChanged","doOnce","monadGenerator","_transactions","oldState","newState","changedLists","changedDescendants","doc","node","pos","type","spec","group","includes","length","nodeSize","push","state","tr","oldSelection","selection","calculateListTree","newSelection","Selection","fromJSON","toJSON","setSelection","transaction","result","initialState","offset","path","updateListItems","attrs","docPosOffset","style","hierarchical","isLeaf","counter","content","forEach","child","name","newPath","areEqualPaths","setNodeAttribute","path1","path2","i","entry1","entry2"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lblod/ember-rdfa-editor",
3
- "version": "12.15.1",
3
+ "version": "13.0.0",
4
4
  "description": "Ember addon wrapping an RDFa editor with a public API",
5
5
  "keywords": [
6
6
  "ember-addon"