roosterjs-content-model-dom 9.1.0 → 9.3.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.
Files changed (88) hide show
  1. package/lib/constants/ChangeSource.d.ts +4 -0
  2. package/lib/constants/ChangeSource.js +4 -0
  3. package/lib/constants/ChangeSource.js.map +1 -1
  4. package/lib/domToModel/domToContentModel.js +4 -0
  5. package/lib/domToModel/domToContentModel.js.map +1 -1
  6. package/lib/domUtils/entityUtils.d.ts +15 -1
  7. package/lib/domUtils/entityUtils.js +30 -5
  8. package/lib/domUtils/entityUtils.js.map +1 -1
  9. package/lib/index.d.ts +3 -1
  10. package/lib/index.js +9 -3
  11. package/lib/index.js.map +1 -1
  12. package/lib/modelApi/list/getAutoListStyleType.d.ts +15 -0
  13. package/lib/modelApi/list/getAutoListStyleType.js +64 -0
  14. package/lib/modelApi/list/getAutoListStyleType.js.map +1 -0
  15. package/lib/modelApi/list/getOrderedListNumberStr.d.ts +7 -0
  16. package/lib/modelApi/list/getOrderedListNumberStr.js +85 -0
  17. package/lib/modelApi/list/getOrderedListNumberStr.js.map +1 -0
  18. package/lib/modelApi/metadata/updateListMetadata.d.ts +2 -2
  19. package/lib/modelApi/metadata/updateListMetadata.js.map +1 -1
  20. package/lib/modelApi/selection/collectSelections.d.ts +3 -3
  21. package/lib/modelApi/selection/collectSelections.js +11 -9
  22. package/lib/modelApi/selection/collectSelections.js.map +1 -1
  23. package/lib/modelToDom/contentModelToDom.js +3 -0
  24. package/lib/modelToDom/contentModelToDom.js.map +1 -1
  25. package/lib/modelToDom/optimizers/removeUnnecessarySpan.js +7 -1
  26. package/lib/modelToDom/optimizers/removeUnnecessarySpan.js.map +1 -1
  27. package/lib/modelToText/contentModelToText.d.ts +3 -2
  28. package/lib/modelToText/contentModelToText.js +66 -47
  29. package/lib/modelToText/contentModelToText.js.map +1 -1
  30. package/lib-amd/constants/ChangeSource.d.ts +4 -0
  31. package/lib-amd/constants/ChangeSource.js +4 -0
  32. package/lib-amd/constants/ChangeSource.js.map +1 -1
  33. package/lib-amd/domToModel/domToContentModel.js +4 -0
  34. package/lib-amd/domToModel/domToContentModel.js.map +1 -1
  35. package/lib-amd/domUtils/entityUtils.d.ts +15 -1
  36. package/lib-amd/domUtils/entityUtils.js +30 -5
  37. package/lib-amd/domUtils/entityUtils.js.map +1 -1
  38. package/lib-amd/index.d.ts +3 -1
  39. package/lib-amd/index.js +6 -2
  40. package/lib-amd/index.js.map +1 -1
  41. package/lib-amd/modelApi/list/getAutoListStyleType.d.ts +15 -0
  42. package/lib-amd/modelApi/list/getAutoListStyleType.js +64 -0
  43. package/lib-amd/modelApi/list/getAutoListStyleType.js.map +1 -0
  44. package/lib-amd/modelApi/list/getOrderedListNumberStr.d.ts +7 -0
  45. package/lib-amd/modelApi/list/getOrderedListNumberStr.js +84 -0
  46. package/lib-amd/modelApi/list/getOrderedListNumberStr.js.map +1 -0
  47. package/lib-amd/modelApi/metadata/updateListMetadata.d.ts +2 -2
  48. package/lib-amd/modelApi/metadata/updateListMetadata.js.map +1 -1
  49. package/lib-amd/modelApi/selection/collectSelections.d.ts +3 -3
  50. package/lib-amd/modelApi/selection/collectSelections.js +11 -9
  51. package/lib-amd/modelApi/selection/collectSelections.js.map +1 -1
  52. package/lib-amd/modelToDom/contentModelToDom.js +3 -0
  53. package/lib-amd/modelToDom/contentModelToDom.js.map +1 -1
  54. package/lib-amd/modelToDom/optimizers/removeUnnecessarySpan.js +7 -1
  55. package/lib-amd/modelToDom/optimizers/removeUnnecessarySpan.js.map +1 -1
  56. package/lib-amd/modelToText/contentModelToText.d.ts +3 -2
  57. package/lib-amd/modelToText/contentModelToText.js +66 -47
  58. package/lib-amd/modelToText/contentModelToText.js.map +1 -1
  59. package/lib-mjs/constants/ChangeSource.d.ts +4 -0
  60. package/lib-mjs/constants/ChangeSource.js +4 -0
  61. package/lib-mjs/constants/ChangeSource.js.map +1 -1
  62. package/lib-mjs/domToModel/domToContentModel.js +4 -0
  63. package/lib-mjs/domToModel/domToContentModel.js.map +1 -1
  64. package/lib-mjs/domUtils/entityUtils.d.ts +15 -1
  65. package/lib-mjs/domUtils/entityUtils.js +27 -4
  66. package/lib-mjs/domUtils/entityUtils.js.map +1 -1
  67. package/lib-mjs/index.d.ts +3 -1
  68. package/lib-mjs/index.js +3 -1
  69. package/lib-mjs/index.js.map +1 -1
  70. package/lib-mjs/modelApi/list/getAutoListStyleType.d.ts +15 -0
  71. package/lib-mjs/modelApi/list/getAutoListStyleType.js +60 -0
  72. package/lib-mjs/modelApi/list/getAutoListStyleType.js.map +1 -0
  73. package/lib-mjs/modelApi/list/getOrderedListNumberStr.d.ts +7 -0
  74. package/lib-mjs/modelApi/list/getOrderedListNumberStr.js +81 -0
  75. package/lib-mjs/modelApi/list/getOrderedListNumberStr.js.map +1 -0
  76. package/lib-mjs/modelApi/metadata/updateListMetadata.d.ts +2 -2
  77. package/lib-mjs/modelApi/metadata/updateListMetadata.js.map +1 -1
  78. package/lib-mjs/modelApi/selection/collectSelections.d.ts +3 -3
  79. package/lib-mjs/modelApi/selection/collectSelections.js +11 -9
  80. package/lib-mjs/modelApi/selection/collectSelections.js.map +1 -1
  81. package/lib-mjs/modelToDom/contentModelToDom.js +3 -0
  82. package/lib-mjs/modelToDom/contentModelToDom.js.map +1 -1
  83. package/lib-mjs/modelToDom/optimizers/removeUnnecessarySpan.js +7 -1
  84. package/lib-mjs/modelToDom/optimizers/removeUnnecessarySpan.js.map +1 -1
  85. package/lib-mjs/modelToText/contentModelToText.d.ts +3 -2
  86. package/lib-mjs/modelToText/contentModelToText.js +66 -47
  87. package/lib-mjs/modelToText/contentModelToText.js.map +1 -1
  88. package/package.json +2 -2
@@ -56,4 +56,8 @@ export declare const ChangeSource: {
56
56
  * Data of this event will be the key code number
57
57
  */
58
58
  Keyboard: string;
59
+ /**
60
+ * Content changed by auto format
61
+ */
62
+ AutoFormat: string;
59
63
  };
@@ -59,5 +59,9 @@ exports.ChangeSource = {
59
59
  * Data of this event will be the key code number
60
60
  */
61
61
  Keyboard: 'Keyboard',
62
+ /**
63
+ * Content changed by auto format
64
+ */
65
+ AutoFormat: 'AutoFormat',
62
66
  };
63
67
  //# sourceMappingURL=ChangeSource.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChangeSource.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/constants/ChangeSource.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,YAAY,GAAG;IACxB;;OAEG;IACH,QAAQ,EAAE,UAAU;IACpB;;OAEG;IACH,UAAU,EAAE,YAAY;IACxB;;OAEG;IACH,MAAM,EAAE,QAAQ;IAChB;;OAEG;IACH,WAAW,EAAE,aAAa;IAC1B;;OAEG;IACH,KAAK,EAAE,OAAO;IACd;;OAEG;IACH,UAAU,EAAE,YAAY;IACxB;;OAEG;IACH,GAAG,EAAE,KAAK;IACV;;OAEG;IACH,IAAI,EAAE,MAAM;IACZ;;OAEG;IACH,YAAY,EAAE,cAAc;IAC5B;;OAEG;IACH,gBAAgB,EAAE,kBAAkB;IACpC;;OAEG;IACH,iBAAiB,EAAE,mBAAmB;IACtC;;OAEG;IACH,SAAS,EAAE,WAAW;IACtB;;;OAGG;IACH,QAAQ,EAAE,UAAU;CACvB,CAAC","sourcesContent":["/**\n * Possible change sources. Here are the predefined sources.\n * It can also be other string if the change source can't fall into these sources.\n */\nexport const ChangeSource = {\n /**\n * Content changed by auto link\n */\n AutoLink: 'AutoLink',\n /**\n * Content changed by create link\n */\n CreateLink: 'CreateLink',\n /**\n * Content changed by format\n */\n Format: 'Format',\n /**\n * Content changed by image resize\n */\n ImageResize: 'ImageResize',\n /**\n * Content changed by paste\n */\n Paste: 'Paste',\n /**\n * Content changed by setContent API\n */\n SetContent: 'SetContent',\n /**\n * Content changed by cut operation\n */\n Cut: 'Cut',\n /**\n * Content changed by drag & drop operation\n */\n Drop: 'Drop',\n /**\n * Insert a new entity into editor\n */\n InsertEntity: 'InsertEntity',\n /**\n * Editor is switched to dark mode, content color is changed\n */\n SwitchToDarkMode: 'SwitchToDarkMode',\n /**\n * Editor is switched to light mode, content color is changed\n */\n SwitchToLightMode: 'SwitchToLightMode',\n /**\n * List chain reorganized numbers of lists\n */\n ListChain: 'ListChain',\n /**\n * Keyboard event, used by Content Model.\n * Data of this event will be the key code number\n */\n Keyboard: 'Keyboard',\n};\n"]}
1
+ {"version":3,"file":"ChangeSource.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/constants/ChangeSource.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,YAAY,GAAG;IACxB;;OAEG;IACH,QAAQ,EAAE,UAAU;IACpB;;OAEG;IACH,UAAU,EAAE,YAAY;IACxB;;OAEG;IACH,MAAM,EAAE,QAAQ;IAChB;;OAEG;IACH,WAAW,EAAE,aAAa;IAC1B;;OAEG;IACH,KAAK,EAAE,OAAO;IACd;;OAEG;IACH,UAAU,EAAE,YAAY;IACxB;;OAEG;IACH,GAAG,EAAE,KAAK;IACV;;OAEG;IACH,IAAI,EAAE,MAAM;IACZ;;OAEG;IACH,YAAY,EAAE,cAAc;IAC5B;;OAEG;IACH,gBAAgB,EAAE,kBAAkB;IACpC;;OAEG;IACH,iBAAiB,EAAE,mBAAmB;IACtC;;OAEG;IACH,SAAS,EAAE,WAAW;IACtB;;;OAGG;IACH,QAAQ,EAAE,UAAU;IAEpB;;OAEG;IACH,UAAU,EAAE,YAAY;CAC3B,CAAC","sourcesContent":["/**\n * Possible change sources. Here are the predefined sources.\n * It can also be other string if the change source can't fall into these sources.\n */\nexport const ChangeSource = {\n /**\n * Content changed by auto link\n */\n AutoLink: 'AutoLink',\n /**\n * Content changed by create link\n */\n CreateLink: 'CreateLink',\n /**\n * Content changed by format\n */\n Format: 'Format',\n /**\n * Content changed by image resize\n */\n ImageResize: 'ImageResize',\n /**\n * Content changed by paste\n */\n Paste: 'Paste',\n /**\n * Content changed by setContent API\n */\n SetContent: 'SetContent',\n /**\n * Content changed by cut operation\n */\n Cut: 'Cut',\n /**\n * Content changed by drag & drop operation\n */\n Drop: 'Drop',\n /**\n * Insert a new entity into editor\n */\n InsertEntity: 'InsertEntity',\n /**\n * Editor is switched to dark mode, content color is changed\n */\n SwitchToDarkMode: 'SwitchToDarkMode',\n /**\n * Editor is switched to light mode, content color is changed\n */\n SwitchToLightMode: 'SwitchToLightMode',\n /**\n * List chain reorganized numbers of lists\n */\n ListChain: 'ListChain',\n /**\n * Keyboard event, used by Content Model.\n * Data of this event will be the key code number\n */\n Keyboard: 'Keyboard',\n\n /**\n * Content changed by auto format\n */\n AutoFormat: 'AutoFormat',\n};\n"]}
@@ -10,7 +10,11 @@ var normalizeContentModel_1 = require("../modelApi/common/normalizeContentModel"
10
10
  * @returns A ContentModelDocument object that contains all the models created from the give root element
11
11
  */
12
12
  function domToContentModel(root, context) {
13
+ var _a;
13
14
  var model = (0, createContentModelDocument_1.createContentModelDocument)(context.defaultFormat);
15
+ if (((_a = context.selection) === null || _a === void 0 ? void 0 : _a.type) == 'range' && context.selection.isReverted) {
16
+ model.hasRevertedRangeSelection = true;
17
+ }
14
18
  context.elementProcessors.child(model, root, context);
15
19
  (0, normalizeContentModel_1.normalizeContentModel)(model);
16
20
  return model;
@@ -1 +1 @@
1
- {"version":3,"file":"domToContentModel.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/domToModel/domToContentModel.ts"],"names":[],"mappings":";;;AAAA,8FAA6F;AAC7F,kFAAiF;AAGjF;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC7B,IAAoC,EACpC,OAA0B;IAE1B,IAAM,KAAK,GAAG,IAAA,uDAA0B,EAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEhE,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAEtD,IAAA,6CAAqB,EAAC,KAAK,CAAC,CAAC;IAE7B,OAAO,KAAK,CAAC;AACjB,CAAC;AAXD,8CAWC","sourcesContent":["import { createContentModelDocument } from '../modelApi/creators/createContentModelDocument';\nimport { normalizeContentModel } from '../modelApi/common/normalizeContentModel';\nimport type { ContentModelDocument, DomToModelContext } from 'roosterjs-content-model-types';\n\n/**\n * Create Content Model from DOM tree in this editor\n * @param root Root element of DOM tree to create Content Model from\n * @param context Context object for DOM to Content Model conversion\n * @returns A ContentModelDocument object that contains all the models created from the give root element\n */\nexport function domToContentModel(\n root: HTMLElement | DocumentFragment,\n context: DomToModelContext\n): ContentModelDocument {\n const model = createContentModelDocument(context.defaultFormat);\n\n context.elementProcessors.child(model, root, context);\n\n normalizeContentModel(model);\n\n return model;\n}\n"]}
1
+ {"version":3,"file":"domToContentModel.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/domToModel/domToContentModel.ts"],"names":[],"mappings":";;;AAAA,8FAA6F;AAC7F,kFAAiF;AAGjF;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC7B,IAAoC,EACpC,OAA0B;;IAE1B,IAAM,KAAK,GAAG,IAAA,uDAA0B,EAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEhE,IAAI,CAAA,MAAA,OAAO,CAAC,SAAS,0CAAE,IAAI,KAAI,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE;QACpE,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAAC;KAC1C;IAED,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAEtD,IAAA,6CAAqB,EAAC,KAAK,CAAC,CAAC;IAE7B,OAAO,KAAK,CAAC;AACjB,CAAC;AAfD,8CAeC","sourcesContent":["import { createContentModelDocument } from '../modelApi/creators/createContentModelDocument';\nimport { normalizeContentModel } from '../modelApi/common/normalizeContentModel';\nimport type { ContentModelDocument, DomToModelContext } from 'roosterjs-content-model-types';\n\n/**\n * Create Content Model from DOM tree in this editor\n * @param root Root element of DOM tree to create Content Model from\n * @param context Context object for DOM to Content Model conversion\n * @returns A ContentModelDocument object that contains all the models created from the give root element\n */\nexport function domToContentModel(\n root: HTMLElement | DocumentFragment,\n context: DomToModelContext\n): ContentModelDocument {\n const model = createContentModelDocument(context.defaultFormat);\n\n if (context.selection?.type == 'range' && context.selection.isReverted) {\n model.hasRevertedRangeSelection = true;\n }\n\n context.elementProcessors.child(model, root, context);\n\n normalizeContentModel(model);\n\n return model;\n}\n"]}
@@ -9,6 +9,13 @@ export declare function isEntityElement(node: Node): boolean;
9
9
  * @param domHelper The DOM helper to use
10
10
  */
11
11
  export declare function findClosestEntityWrapper(startNode: Node, domHelper: DOMHelper): HTMLElement | null;
12
+ /**
13
+ * Find the closest block entity wrapper element from a given DOM node
14
+ * @param node The node to start looking for entity container
15
+ * @param domHelper The DOM helper
16
+ * @returns
17
+ */
18
+ export declare function findClosestBlockEntityContainer(node: Node, domHelper: DOMHelper): HTMLElement | null;
12
19
  /**
13
20
  * Get all entity wrapper elements under the given root element
14
21
  * @param root The root element to query from
@@ -30,9 +37,16 @@ export declare function generateEntityClassNames(format: ContentModelEntityForma
30
37
  /**
31
38
  * Checks whether the node provided is a Entity delimiter
32
39
  * @param node the node to check
40
+ * @param isBefore True to match delimiter before entity only, false to match delimiter after entity, or undefined means match both
33
41
  * @return true if it is a delimiter
34
42
  */
35
- export declare function isEntityDelimiter(element: HTMLElement): boolean;
43
+ export declare function isEntityDelimiter(element: HTMLElement, isBefore?: boolean): boolean;
44
+ /**
45
+ * Check if the given element is a container element of block entity
46
+ * @param element The element to check
47
+ * @returns True if the element is a block entity container, otherwise false
48
+ */
49
+ export declare function isBlockEntityContainer(element: HTMLElement): boolean;
36
50
  /**
37
51
  * Adds delimiters to the element provided. If the delimiters already exists, will not be added
38
52
  * @param element the node to add the delimiters
@@ -1,18 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addDelimiters = exports.isEntityDelimiter = exports.generateEntityClassNames = exports.parseEntityFormat = exports.getAllEntityWrappers = exports.findClosestEntityWrapper = exports.isEntityElement = void 0;
3
+ exports.addDelimiters = exports.isBlockEntityContainer = exports.isEntityDelimiter = exports.generateEntityClassNames = exports.parseEntityFormat = exports.getAllEntityWrappers = exports.findClosestBlockEntityContainer = exports.findClosestEntityWrapper = exports.isEntityElement = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var applyFormat_1 = require("../modelToDom/utils/applyFormat");
6
6
  var isElementOfType_1 = require("./isElementOfType");
7
7
  var isNodeOfType_1 = require("./isNodeOfType");
8
8
  var toArray_1 = require("./toArray");
9
9
  var ENTITY_INFO_NAME = '_Entity';
10
+ var ENTITY_INFO_SELECTOR = '.' + ENTITY_INFO_NAME;
10
11
  var ENTITY_TYPE_PREFIX = '_EType_';
11
12
  var ENTITY_ID_PREFIX = '_EId_';
12
13
  var ENTITY_READONLY_PREFIX = '_EReadonly_';
13
14
  var ZERO_WIDTH_SPACE = '\u200B';
14
15
  var DELIMITER_BEFORE = 'entityDelimiterBefore';
15
16
  var DELIMITER_AFTER = 'entityDelimiterAfter';
17
+ var BLOCK_ENTITY_CONTAINER = '_E_EBlockEntityContainer';
18
+ var BLOCK_ENTITY_CONTAINER_SELECTOR = '.' + BLOCK_ENTITY_CONTAINER;
16
19
  /**
17
20
  * Check if the given DOM Node is an entity wrapper element
18
21
  */
@@ -26,9 +29,19 @@ exports.isEntityElement = isEntityElement;
26
29
  * @param domHelper The DOM helper to use
27
30
  */
28
31
  function findClosestEntityWrapper(startNode, domHelper) {
29
- return domHelper.findClosestElementAncestor(startNode, "." + ENTITY_INFO_NAME);
32
+ return domHelper.findClosestElementAncestor(startNode, ENTITY_INFO_SELECTOR);
30
33
  }
31
34
  exports.findClosestEntityWrapper = findClosestEntityWrapper;
35
+ /**
36
+ * Find the closest block entity wrapper element from a given DOM node
37
+ * @param node The node to start looking for entity container
38
+ * @param domHelper The DOM helper
39
+ * @returns
40
+ */
41
+ function findClosestBlockEntityContainer(node, domHelper) {
42
+ return domHelper.findClosestElementAncestor(node, BLOCK_ENTITY_CONTAINER_SELECTOR);
43
+ }
44
+ exports.findClosestBlockEntityContainer = findClosestBlockEntityContainer;
32
45
  /**
33
46
  * Get all entity wrapper elements under the given root element
34
47
  * @param root The root element to query from
@@ -90,15 +103,27 @@ exports.generateEntityClassNames = generateEntityClassNames;
90
103
  /**
91
104
  * Checks whether the node provided is a Entity delimiter
92
105
  * @param node the node to check
106
+ * @param isBefore True to match delimiter before entity only, false to match delimiter after entity, or undefined means match both
93
107
  * @return true if it is a delimiter
94
108
  */
95
- function isEntityDelimiter(element) {
109
+ function isEntityDelimiter(element, isBefore) {
110
+ var matchBefore = isBefore === undefined || isBefore;
111
+ var matchAfter = isBefore === undefined || !isBefore;
96
112
  return ((0, isElementOfType_1.isElementOfType)(element, 'span') &&
97
- (element.classList.contains(DELIMITER_AFTER) ||
98
- element.classList.contains(DELIMITER_BEFORE)) &&
113
+ ((matchAfter && element.classList.contains(DELIMITER_AFTER)) ||
114
+ (matchBefore && element.classList.contains(DELIMITER_BEFORE))) &&
99
115
  element.textContent === ZERO_WIDTH_SPACE);
100
116
  }
101
117
  exports.isEntityDelimiter = isEntityDelimiter;
118
+ /**
119
+ * Check if the given element is a container element of block entity
120
+ * @param element The element to check
121
+ * @returns True if the element is a block entity container, otherwise false
122
+ */
123
+ function isBlockEntityContainer(element) {
124
+ return (0, isElementOfType_1.isElementOfType)(element, 'div') && element.classList.contains(BLOCK_ENTITY_CONTAINER);
125
+ }
126
+ exports.isBlockEntityContainer = isBlockEntityContainer;
102
127
  /**
103
128
  * Adds delimiters to the element provided. If the delimiters already exists, will not be added
104
129
  * @param element the node to add the delimiters
@@ -1 +1 @@
1
- {"version":3,"file":"entityUtils.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/domUtils/entityUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyFormat } from '../modelToDom/utils/applyFormat';\nimport { isElementOfType } from './isElementOfType';\nimport { isNodeOfType } from './isNodeOfType';\nimport { toArray } from './toArray';\nimport type {\n ContentModelEntityFormat,\n ContentModelSegmentFormat,\n DOMHelper,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\nconst ENTITY_INFO_NAME = '_Entity';\nconst ENTITY_TYPE_PREFIX = '_EType_';\nconst ENTITY_ID_PREFIX = '_EId_';\nconst ENTITY_READONLY_PREFIX = '_EReadonly_';\nconst ZERO_WIDTH_SPACE = '\\u200B';\nconst DELIMITER_BEFORE = 'entityDelimiterBefore';\nconst DELIMITER_AFTER = 'entityDelimiterAfter';\n\n/**\n * Check if the given DOM Node is an entity wrapper element\n */\nexport function isEntityElement(node: Node): boolean {\n return isNodeOfType(node, 'ELEMENT_NODE') && node.classList.contains(ENTITY_INFO_NAME);\n}\n\n/**\n * Find the closest entity wrapper element from a given DOM node\n * @param node The node to start looking for entity wrapper\n * @param domHelper The DOM helper to use\n */\nexport function findClosestEntityWrapper(\n startNode: Node,\n domHelper: DOMHelper\n): HTMLElement | null {\n return domHelper.findClosestElementAncestor(startNode, `.${ENTITY_INFO_NAME}`);\n}\n\n/**\n * Get all entity wrapper elements under the given root element\n * @param root The root element to query from\n * @returns An array of entity wrapper elements\n */\nexport function getAllEntityWrappers(root: HTMLElement): HTMLElement[] {\n return toArray(root.querySelectorAll('.' + ENTITY_INFO_NAME)) as HTMLElement[];\n}\n\n/**\n * Parse entity format from entity wrapper element\n * @param wrapper The wrapper element to parse entity format from\n * @returns Entity format\n */\nexport function parseEntityFormat(wrapper: HTMLElement): ContentModelEntityFormat {\n let isEntity = false;\n const format: ContentModelEntityFormat = {};\n\n wrapper.classList.forEach(name => {\n isEntity = parseEntityClassName(name, format) || isEntity;\n });\n\n if (!isEntity) {\n format.isFakeEntity = true;\n format.isReadonly = !wrapper.isContentEditable;\n }\n\n return format;\n}\n\n/**\n * Parse entity class names from entity wrapper element\n * @param className Class names of entity\n * @param format The output entity format object\n */\nfunction parseEntityClassName(\n className: string,\n format: ContentModelEntityFormat\n): boolean | undefined {\n if (className == ENTITY_INFO_NAME) {\n return true;\n } else if (className.indexOf(ENTITY_TYPE_PREFIX) == 0) {\n format.entityType = className.substring(ENTITY_TYPE_PREFIX.length);\n } else if (className.indexOf(ENTITY_ID_PREFIX) == 0) {\n format.id = className.substring(ENTITY_ID_PREFIX.length);\n } else if (className.indexOf(ENTITY_READONLY_PREFIX) == 0) {\n format.isReadonly = className.substring(ENTITY_READONLY_PREFIX.length) == '1';\n }\n}\n\n/**\n * Generate Entity class names for an entity wrapper\n * @param format The source entity format object\n * @returns A combined CSS class name string for entity wrapper\n */\nexport function generateEntityClassNames(format: ContentModelEntityFormat): string {\n return format.isFakeEntity\n ? ''\n : `${ENTITY_INFO_NAME} ${ENTITY_TYPE_PREFIX}${format.entityType ?? ''} ${\n format.id ? `${ENTITY_ID_PREFIX}${format.id} ` : ''\n }${ENTITY_READONLY_PREFIX}${format.isReadonly ? '1' : '0'}`;\n}\n\n/**\n * Checks whether the node provided is a Entity delimiter\n * @param node the node to check\n * @return true if it is a delimiter\n */\nexport function isEntityDelimiter(element: HTMLElement): boolean {\n return (\n isElementOfType(element, 'span') &&\n (element.classList.contains(DELIMITER_AFTER) ||\n element.classList.contains(DELIMITER_BEFORE)) &&\n element.textContent === ZERO_WIDTH_SPACE\n );\n}\n\n/**\n * Adds delimiters to the element provided. If the delimiters already exists, will not be added\n * @param element the node to add the delimiters\n * @param format format to set to the delimiters, so when typing inside of one the format is not lost\n * @param context Model to Dom context to use.\n */\nexport function addDelimiters(\n doc: Document,\n element: HTMLElement,\n format?: ContentModelSegmentFormat | null,\n context?: ModelToDomContext\n): HTMLElement[] {\n let [delimiterAfter, delimiterBefore] = getDelimiters(element);\n\n if (!delimiterAfter) {\n delimiterAfter = insertDelimiter(doc, element, true /*isAfter*/);\n if (context && format) {\n applyFormat(delimiterAfter, context.formatAppliers.segment, format, context);\n }\n }\n\n if (!delimiterBefore) {\n delimiterBefore = insertDelimiter(doc, element, false /*isAfter*/);\n if (context && format) {\n applyFormat(delimiterBefore, context.formatAppliers.segment, format, context);\n }\n }\n\n return [delimiterAfter, delimiterBefore];\n}\n\nfunction getDelimiters(entityWrapper: HTMLElement): (HTMLElement | undefined)[] {\n const result: (HTMLElement | undefined)[] = [];\n const { nextElementSibling, previousElementSibling } = entityWrapper;\n result.push(\n isDelimiter(nextElementSibling, DELIMITER_AFTER),\n isDelimiter(previousElementSibling, DELIMITER_BEFORE)\n );\n\n return result;\n}\n\nfunction isDelimiter(el: Element | null, className: string): HTMLElement | undefined {\n return el?.classList.contains(className) && el.textContent == ZERO_WIDTH_SPACE\n ? (el as HTMLElement)\n : undefined;\n}\n\nfunction insertDelimiter(doc: Document, element: Element, isAfter: boolean) {\n const span = doc.createElement('span');\n\n span.className = isAfter ? DELIMITER_AFTER : DELIMITER_BEFORE;\n span.appendChild(doc.createTextNode(ZERO_WIDTH_SPACE));\n element.parentNode?.insertBefore(span, isAfter ? element.nextSibling : element);\n\n return span;\n}\n"]}
1
+ {"version":3,"file":"entityUtils.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/domUtils/entityUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyFormat } from '../modelToDom/utils/applyFormat';\nimport { isElementOfType } from './isElementOfType';\nimport { isNodeOfType } from './isNodeOfType';\nimport { toArray } from './toArray';\nimport type {\n ContentModelEntityFormat,\n ContentModelSegmentFormat,\n DOMHelper,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\nconst ENTITY_INFO_NAME = '_Entity';\nconst ENTITY_INFO_SELECTOR = '.' + ENTITY_INFO_NAME;\nconst ENTITY_TYPE_PREFIX = '_EType_';\nconst ENTITY_ID_PREFIX = '_EId_';\nconst ENTITY_READONLY_PREFIX = '_EReadonly_';\nconst ZERO_WIDTH_SPACE = '\\u200B';\nconst DELIMITER_BEFORE = 'entityDelimiterBefore';\nconst DELIMITER_AFTER = 'entityDelimiterAfter';\nconst BLOCK_ENTITY_CONTAINER = '_E_EBlockEntityContainer';\nconst BLOCK_ENTITY_CONTAINER_SELECTOR = '.' + BLOCK_ENTITY_CONTAINER;\n\n/**\n * Check if the given DOM Node is an entity wrapper element\n */\nexport function isEntityElement(node: Node): boolean {\n return isNodeOfType(node, 'ELEMENT_NODE') && node.classList.contains(ENTITY_INFO_NAME);\n}\n\n/**\n * Find the closest entity wrapper element from a given DOM node\n * @param node The node to start looking for entity wrapper\n * @param domHelper The DOM helper to use\n */\nexport function findClosestEntityWrapper(\n startNode: Node,\n domHelper: DOMHelper\n): HTMLElement | null {\n return domHelper.findClosestElementAncestor(startNode, ENTITY_INFO_SELECTOR);\n}\n\n/**\n * Find the closest block entity wrapper element from a given DOM node\n * @param node The node to start looking for entity container\n * @param domHelper The DOM helper\n * @returns\n */\nexport function findClosestBlockEntityContainer(\n node: Node,\n domHelper: DOMHelper\n): HTMLElement | null {\n return domHelper.findClosestElementAncestor(node, BLOCK_ENTITY_CONTAINER_SELECTOR);\n}\n\n/**\n * Get all entity wrapper elements under the given root element\n * @param root The root element to query from\n * @returns An array of entity wrapper elements\n */\nexport function getAllEntityWrappers(root: HTMLElement): HTMLElement[] {\n return toArray(root.querySelectorAll('.' + ENTITY_INFO_NAME)) as HTMLElement[];\n}\n\n/**\n * Parse entity format from entity wrapper element\n * @param wrapper The wrapper element to parse entity format from\n * @returns Entity format\n */\nexport function parseEntityFormat(wrapper: HTMLElement): ContentModelEntityFormat {\n let isEntity = false;\n const format: ContentModelEntityFormat = {};\n\n wrapper.classList.forEach(name => {\n isEntity = parseEntityClassName(name, format) || isEntity;\n });\n\n if (!isEntity) {\n format.isFakeEntity = true;\n format.isReadonly = !wrapper.isContentEditable;\n }\n\n return format;\n}\n\n/**\n * Parse entity class names from entity wrapper element\n * @param className Class names of entity\n * @param format The output entity format object\n */\nfunction parseEntityClassName(\n className: string,\n format: ContentModelEntityFormat\n): boolean | undefined {\n if (className == ENTITY_INFO_NAME) {\n return true;\n } else if (className.indexOf(ENTITY_TYPE_PREFIX) == 0) {\n format.entityType = className.substring(ENTITY_TYPE_PREFIX.length);\n } else if (className.indexOf(ENTITY_ID_PREFIX) == 0) {\n format.id = className.substring(ENTITY_ID_PREFIX.length);\n } else if (className.indexOf(ENTITY_READONLY_PREFIX) == 0) {\n format.isReadonly = className.substring(ENTITY_READONLY_PREFIX.length) == '1';\n }\n}\n\n/**\n * Generate Entity class names for an entity wrapper\n * @param format The source entity format object\n * @returns A combined CSS class name string for entity wrapper\n */\nexport function generateEntityClassNames(format: ContentModelEntityFormat): string {\n return format.isFakeEntity\n ? ''\n : `${ENTITY_INFO_NAME} ${ENTITY_TYPE_PREFIX}${format.entityType ?? ''} ${\n format.id ? `${ENTITY_ID_PREFIX}${format.id} ` : ''\n }${ENTITY_READONLY_PREFIX}${format.isReadonly ? '1' : '0'}`;\n}\n\n/**\n * Checks whether the node provided is a Entity delimiter\n * @param node the node to check\n * @param isBefore True to match delimiter before entity only, false to match delimiter after entity, or undefined means match both\n * @return true if it is a delimiter\n */\nexport function isEntityDelimiter(element: HTMLElement, isBefore?: boolean): boolean {\n const matchBefore = isBefore === undefined || isBefore;\n const matchAfter = isBefore === undefined || !isBefore;\n\n return (\n isElementOfType(element, 'span') &&\n ((matchAfter && element.classList.contains(DELIMITER_AFTER)) ||\n (matchBefore && element.classList.contains(DELIMITER_BEFORE))) &&\n element.textContent === ZERO_WIDTH_SPACE\n );\n}\n\n/**\n * Check if the given element is a container element of block entity\n * @param element The element to check\n * @returns True if the element is a block entity container, otherwise false\n */\nexport function isBlockEntityContainer(element: HTMLElement): boolean {\n return isElementOfType(element, 'div') && element.classList.contains(BLOCK_ENTITY_CONTAINER);\n}\n\n/**\n * Adds delimiters to the element provided. If the delimiters already exists, will not be added\n * @param element the node to add the delimiters\n * @param format format to set to the delimiters, so when typing inside of one the format is not lost\n * @param context Model to Dom context to use.\n */\nexport function addDelimiters(\n doc: Document,\n element: HTMLElement,\n format?: ContentModelSegmentFormat | null,\n context?: ModelToDomContext\n): HTMLElement[] {\n let [delimiterAfter, delimiterBefore] = getDelimiters(element);\n\n if (!delimiterAfter) {\n delimiterAfter = insertDelimiter(doc, element, true /*isAfter*/);\n if (context && format) {\n applyFormat(delimiterAfter, context.formatAppliers.segment, format, context);\n }\n }\n\n if (!delimiterBefore) {\n delimiterBefore = insertDelimiter(doc, element, false /*isAfter*/);\n if (context && format) {\n applyFormat(delimiterBefore, context.formatAppliers.segment, format, context);\n }\n }\n\n return [delimiterAfter, delimiterBefore];\n}\n\nfunction getDelimiters(entityWrapper: HTMLElement): (HTMLElement | undefined)[] {\n const result: (HTMLElement | undefined)[] = [];\n const { nextElementSibling, previousElementSibling } = entityWrapper;\n result.push(\n isDelimiter(nextElementSibling, DELIMITER_AFTER),\n isDelimiter(previousElementSibling, DELIMITER_BEFORE)\n );\n\n return result;\n}\n\nfunction isDelimiter(el: Element | null, className: string): HTMLElement | undefined {\n return el?.classList.contains(className) && el.textContent == ZERO_WIDTH_SPACE\n ? (el as HTMLElement)\n : undefined;\n}\n\nfunction insertDelimiter(doc: Document, element: Element, isAfter: boolean) {\n const span = doc.createElement('span');\n\n span.className = isAfter ? DELIMITER_AFTER : DELIMITER_BEFORE;\n span.appendChild(doc.createTextNode(ZERO_WIDTH_SPACE));\n element.parentNode?.insertBefore(span, isAfter ? element.nextSibling : element);\n\n return span;\n}\n"]}
package/lib/index.d.ts CHANGED
@@ -16,7 +16,7 @@ export { getObjectKeys } from './domUtils/getObjectKeys';
16
16
  export { toArray } from './domUtils/toArray';
17
17
  export { moveChildNodes, wrapAllChildNodes } from './domUtils/moveChildNodes';
18
18
  export { wrap } from './domUtils/wrap';
19
- export { isEntityElement, findClosestEntityWrapper, getAllEntityWrappers, parseEntityFormat, generateEntityClassNames, addDelimiters, isEntityDelimiter, } from './domUtils/entityUtils';
19
+ export { isEntityElement, findClosestEntityWrapper, getAllEntityWrappers, parseEntityFormat, generateEntityClassNames, addDelimiters, isEntityDelimiter, isBlockEntityContainer, findClosestBlockEntityContainer, } from './domUtils/entityUtils';
20
20
  export { reuseCachedElement } from './domUtils/reuseCachedElement';
21
21
  export { isWhiteSpacePreserved } from './domUtils/isWhiteSpacePreserved';
22
22
  export { normalizeRect } from './domUtils/normalizeRect';
@@ -49,6 +49,8 @@ export { addSegment } from './modelApi/common/addSegment';
49
49
  export { isEmpty } from './modelApi/common/isEmpty';
50
50
  export { normalizeSingleSegment } from './modelApi/common/normalizeSegment';
51
51
  export { setParagraphNotImplicit } from './modelApi/block/setParagraphNotImplicit';
52
+ export { getOrderedListNumberStr } from './modelApi/list/getOrderedListNumberStr';
53
+ export { getAutoListStyleType } from './modelApi/list/getAutoListStyleType';
52
54
  export { parseValueWithUnit } from './formatHandlers/utils/parseValueWithUnit';
53
55
  export { BorderKeys } from './formatHandlers/common/borderFormatHandler';
54
56
  export { DeprecatedColors, getColor, setColor, parseColor } from './formatHandlers/utils/color';
package/lib/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addBlock = exports.createEmptyModel = exports.createListLevel = exports.createDivider = exports.createEntity = exports.createGeneralBlock = exports.createGeneralSegment = exports.createParagraphDecorator = exports.createContentModelDocument = exports.createImage = exports.createText = exports.createTableCell = exports.createTable = exports.createSelectionMarker = exports.createParagraph = exports.createFormatContainer = exports.createListItem = exports.createBr = exports.normalizeRect = exports.isWhiteSpacePreserved = exports.reuseCachedElement = exports.isEntityDelimiter = exports.addDelimiters = exports.generateEntityClassNames = exports.parseEntityFormat = exports.getAllEntityWrappers = exports.findClosestEntityWrapper = exports.isEntityElement = exports.wrap = exports.wrapAllChildNodes = exports.moveChildNodes = exports.toArray = exports.getObjectKeys = exports.isElementOfType = exports.isNodeOfType = exports.hasMetadata = exports.updateMetadata = exports.buildSelectionMarker = exports.isBlockElement = exports.areSameFormats = exports.parseFormat = exports.getRegularSelectionOffsets = exports.tableProcessor = exports.entityProcessor = exports.processChildNode = exports.handleRegularSelection = exports.childProcessor = exports.contentModelToText = exports.contentModelToDom = exports.domToContentModel = void 0;
4
- exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.getClosestAncestorBlockGroupIndex = exports.isBlockGroupOfType = exports.cacheGetEventData = exports.extractClipboardItems = exports.transformColor = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.setParagraphNotImplicit = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addCode = void 0;
5
- exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.updateListMetadata = exports.updateTableMetadata = exports.updateTableCellMetadata = exports.updateImageMetadata = exports.getSegmentTextFormat = exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = void 0;
3
+ exports.createListLevel = exports.createDivider = exports.createEntity = exports.createGeneralBlock = exports.createGeneralSegment = exports.createParagraphDecorator = exports.createContentModelDocument = exports.createImage = exports.createText = exports.createTableCell = exports.createTable = exports.createSelectionMarker = exports.createParagraph = exports.createFormatContainer = exports.createListItem = exports.createBr = exports.normalizeRect = exports.isWhiteSpacePreserved = exports.reuseCachedElement = exports.findClosestBlockEntityContainer = exports.isBlockEntityContainer = exports.isEntityDelimiter = exports.addDelimiters = exports.generateEntityClassNames = exports.parseEntityFormat = exports.getAllEntityWrappers = exports.findClosestEntityWrapper = exports.isEntityElement = exports.wrap = exports.wrapAllChildNodes = exports.moveChildNodes = exports.toArray = exports.getObjectKeys = exports.isElementOfType = exports.isNodeOfType = exports.hasMetadata = exports.updateMetadata = exports.buildSelectionMarker = exports.isBlockElement = exports.areSameFormats = exports.parseFormat = exports.getRegularSelectionOffsets = exports.tableProcessor = exports.entityProcessor = exports.processChildNode = exports.handleRegularSelection = exports.childProcessor = exports.contentModelToText = exports.contentModelToDom = exports.domToContentModel = void 0;
4
+ exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.getClosestAncestorBlockGroupIndex = exports.isBlockGroupOfType = exports.cacheGetEventData = exports.extractClipboardItems = exports.transformColor = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.getAutoListStyleType = exports.getOrderedListNumberStr = exports.setParagraphNotImplicit = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addCode = exports.addBlock = exports.createEmptyModel = void 0;
5
+ exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.updateListMetadata = exports.updateTableMetadata = exports.updateTableCellMetadata = exports.updateImageMetadata = exports.getSegmentTextFormat = exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = void 0;
6
6
  var domToContentModel_1 = require("./domToModel/domToContentModel");
7
7
  Object.defineProperty(exports, "domToContentModel", { enumerable: true, get: function () { return domToContentModel_1.domToContentModel; } });
8
8
  var contentModelToDom_1 = require("./modelToDom/contentModelToDom");
@@ -51,6 +51,8 @@ Object.defineProperty(exports, "parseEntityFormat", { enumerable: true, get: fun
51
51
  Object.defineProperty(exports, "generateEntityClassNames", { enumerable: true, get: function () { return entityUtils_1.generateEntityClassNames; } });
52
52
  Object.defineProperty(exports, "addDelimiters", { enumerable: true, get: function () { return entityUtils_1.addDelimiters; } });
53
53
  Object.defineProperty(exports, "isEntityDelimiter", { enumerable: true, get: function () { return entityUtils_1.isEntityDelimiter; } });
54
+ Object.defineProperty(exports, "isBlockEntityContainer", { enumerable: true, get: function () { return entityUtils_1.isBlockEntityContainer; } });
55
+ Object.defineProperty(exports, "findClosestBlockEntityContainer", { enumerable: true, get: function () { return entityUtils_1.findClosestBlockEntityContainer; } });
54
56
  var reuseCachedElement_1 = require("./domUtils/reuseCachedElement");
55
57
  Object.defineProperty(exports, "reuseCachedElement", { enumerable: true, get: function () { return reuseCachedElement_1.reuseCachedElement; } });
56
58
  var isWhiteSpacePreserved_1 = require("./domUtils/isWhiteSpacePreserved");
@@ -115,6 +117,10 @@ var normalizeSegment_1 = require("./modelApi/common/normalizeSegment");
115
117
  Object.defineProperty(exports, "normalizeSingleSegment", { enumerable: true, get: function () { return normalizeSegment_1.normalizeSingleSegment; } });
116
118
  var setParagraphNotImplicit_1 = require("./modelApi/block/setParagraphNotImplicit");
117
119
  Object.defineProperty(exports, "setParagraphNotImplicit", { enumerable: true, get: function () { return setParagraphNotImplicit_1.setParagraphNotImplicit; } });
120
+ var getOrderedListNumberStr_1 = require("./modelApi/list/getOrderedListNumberStr");
121
+ Object.defineProperty(exports, "getOrderedListNumberStr", { enumerable: true, get: function () { return getOrderedListNumberStr_1.getOrderedListNumberStr; } });
122
+ var getAutoListStyleType_1 = require("./modelApi/list/getAutoListStyleType");
123
+ Object.defineProperty(exports, "getAutoListStyleType", { enumerable: true, get: function () { return getAutoListStyleType_1.getAutoListStyleType; } });
118
124
  var parseValueWithUnit_1 = require("./formatHandlers/utils/parseValueWithUnit");
119
125
  Object.defineProperty(exports, "parseValueWithUnit", { enumerable: true, get: function () { return parseValueWithUnit_1.parseValueWithUnit; } });
120
126
  var borderFormatHandler_1 = require("./formatHandlers/common/borderFormatHandler");
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/roosterjs-content-model-dom/lib/index.ts"],"names":[],"mappings":"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","sourcesContent":["export { domToContentModel } from './domToModel/domToContentModel';\nexport { contentModelToDom } from './modelToDom/contentModelToDom';\nexport { contentModelToText } from './modelToText/contentModelToText';\n\nexport {\n childProcessor,\n handleRegularSelection,\n processChildNode,\n} from './domToModel/processors/childProcessor';\nexport { entityProcessor } from './domToModel/processors/entityProcessor';\nexport { tableProcessor } from './domToModel/processors/tableProcessor';\nexport { getRegularSelectionOffsets } from './domToModel/utils/getRegularSelectionOffsets';\nexport { parseFormat } from './domToModel/utils/parseFormat';\nexport { areSameFormats } from './domToModel/utils/areSameFormats';\nexport { isBlockElement } from './domToModel/utils/isBlockElement';\nexport { buildSelectionMarker } from './domToModel/utils/buildSelectionMarker';\n\nexport { updateMetadata, hasMetadata } from './modelApi/metadata/updateMetadata';\nexport { isNodeOfType } from './domUtils/isNodeOfType';\nexport { isElementOfType } from './domUtils/isElementOfType';\nexport { getObjectKeys } from './domUtils/getObjectKeys';\nexport { toArray } from './domUtils/toArray';\nexport { moveChildNodes, wrapAllChildNodes } from './domUtils/moveChildNodes';\nexport { wrap } from './domUtils/wrap';\nexport {\n isEntityElement,\n findClosestEntityWrapper,\n getAllEntityWrappers,\n parseEntityFormat,\n generateEntityClassNames,\n addDelimiters,\n isEntityDelimiter,\n} from './domUtils/entityUtils';\nexport { reuseCachedElement } from './domUtils/reuseCachedElement';\nexport { isWhiteSpacePreserved } from './domUtils/isWhiteSpacePreserved';\nexport { normalizeRect } from './domUtils/normalizeRect';\n\nexport { createBr } from './modelApi/creators/createBr';\nexport { createListItem } from './modelApi/creators/createListItem';\nexport { createFormatContainer } from './modelApi/creators/createFormatContainer';\nexport { createParagraph } from './modelApi/creators/createParagraph';\nexport { createSelectionMarker } from './modelApi/creators/createSelectionMarker';\nexport { createTable } from './modelApi/creators/createTable';\nexport { createTableCell } from './modelApi/creators/createTableCell';\nexport { createText } from './modelApi/creators/createText';\nexport { createImage } from './modelApi/creators/createImage';\nexport { createContentModelDocument } from './modelApi/creators/createContentModelDocument';\nexport { createParagraphDecorator } from './modelApi/creators/createParagraphDecorator';\nexport { createGeneralSegment } from './modelApi/creators/createGeneralSegment';\nexport { createGeneralBlock } from './modelApi/creators/createGeneralBlock';\nexport { createEntity } from './modelApi/creators/createEntity';\nexport { createDivider } from './modelApi/creators/createDivider';\nexport { createListLevel } from './modelApi/creators/createListLevel';\nexport { createEmptyModel } from './modelApi/creators/createEmptyModel';\n\nexport { addBlock } from './modelApi/common/addBlock';\nexport { addCode } from './modelApi/common/addDecorators';\nexport { addLink } from './modelApi/common/addDecorators';\nexport { addTextSegment } from './modelApi/common/addTextSegment';\nexport { normalizeParagraph } from './modelApi/common/normalizeParagraph';\n\nexport { normalizeContentModel } from './modelApi/common/normalizeContentModel';\nexport { isGeneralSegment } from './modelApi/typeCheck/isGeneralSegment';\nexport { unwrapBlock } from './modelApi/common/unwrapBlock';\nexport { addSegment } from './modelApi/common/addSegment';\nexport { isEmpty } from './modelApi/common/isEmpty';\nexport { normalizeSingleSegment } from './modelApi/common/normalizeSegment';\n\nexport { setParagraphNotImplicit } from './modelApi/block/setParagraphNotImplicit';\n\nexport { parseValueWithUnit } from './formatHandlers/utils/parseValueWithUnit';\nexport { BorderKeys } from './formatHandlers/common/borderFormatHandler';\nexport { DeprecatedColors, getColor, setColor, parseColor } from './formatHandlers/utils/color';\n\nexport {\n createDomToModelContext,\n createDomToModelContextWithConfig,\n createDomToModelConfig,\n} from './domToModel/context/createDomToModelContext';\nexport {\n createModelToDomContext,\n createModelToDomContextWithConfig,\n createModelToDomConfig,\n} from './modelToDom/context/createModelToDomContext';\n\nexport { isBold } from './domUtils/style/isBold';\nexport { getSelectionRootNode } from './domUtils/selection/getSelectionRootNode';\nexport { isCharacterValue, isModifierKey, isCursorMovingKey } from './domUtils/event/eventUtils';\nexport { combineBorderValue, extractBorderValues } from './domUtils/style/borderValues';\nexport { isPunctuation, isSpace, normalizeText } from './domUtils/stringUtil';\nexport { parseTableCells } from './domUtils/table/parseTableCells';\nexport { readFile } from './domUtils/readFile';\nexport { transformColor } from './domUtils/style/transformColor';\nexport { extractClipboardItems } from './domUtils/event/extractClipboardItems';\nexport { cacheGetEventData } from './domUtils/event/cacheGetEventData';\n\nexport { isBlockGroupOfType } from './modelApi/typeCheck/isBlockGroupOfType';\n\nexport { getClosestAncestorBlockGroupIndex } from './modelApi/editing/getClosestAncestorBlockGroupIndex';\n\nexport { iterateSelections } from './modelApi/selection/iterateSelections';\nexport {\n getFirstSelectedListItem,\n getFirstSelectedTable,\n getOperationalBlocks,\n getSelectedParagraphs,\n getSelectedSegments,\n getSelectedSegmentsAndParagraphs,\n} from './modelApi/selection/collectSelections';\nexport { getSelectedCells } from './modelApi/selection/getSelectedCells';\nexport { hasSelectionInBlock } from './modelApi/selection/hasSelectionInBlock';\nexport { hasSelectionInSegment } from './modelApi/selection/hasSelectionInSegment';\nexport { hasSelectionInBlockGroup } from './modelApi/selection/hasSelectionInBlockGroup';\nexport { setSelection } from './modelApi/selection/setSelection';\n\nexport { cloneModel } from './modelApi/editing/cloneModel';\nexport { mergeModel } from './modelApi/editing/mergeModel';\nexport { deleteSelection } from './modelApi/editing/deleteSelection';\nexport { deleteSegment } from './modelApi/editing/deleteSegment';\nexport { deleteBlock } from './modelApi/editing/deleteBlock';\nexport { applyTableFormat } from './modelApi/editing/applyTableFormat';\nexport { normalizeTable, MIN_ALLOWED_TABLE_CELL_WIDTH } from './modelApi/editing/normalizeTable';\nexport { setTableCellBackgroundColor } from './modelApi/editing/setTableCellBackgroundColor';\nexport { retrieveModelFormatState } from './modelApi/editing/retrieveModelFormatState';\nexport { getListStyleTypeFromString } from './modelApi/editing/getListStyleTypeFromString';\nexport { getSegmentTextFormat } from './modelApi/editing/getSegmentTextFormat';\n\nexport { updateImageMetadata } from './modelApi/metadata/updateImageMetadata';\nexport { updateTableCellMetadata } from './modelApi/metadata/updateTableCellMetadata';\nexport { updateTableMetadata } from './modelApi/metadata/updateTableMetadata';\nexport { updateListMetadata, ListMetadataDefinition } from './modelApi/metadata/updateListMetadata';\n\nexport { ChangeSource } from './constants/ChangeSource';\nexport { BulletListType } from './constants/BulletListType';\nexport { NumberingListType } from './constants/NumberingListType';\nexport { TableBorderFormat } from './constants/TableBorderFormat';\nexport { OrderedListStyleMap } from './constants/OrderedListStyleMap';\nexport { UnorderedListStyleMap } from './constants/UnorderedListStyleMap';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/roosterjs-content-model-dom/lib/index.ts"],"names":[],"mappings":"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","sourcesContent":["export { domToContentModel } from './domToModel/domToContentModel';\nexport { contentModelToDom } from './modelToDom/contentModelToDom';\nexport { contentModelToText } from './modelToText/contentModelToText';\n\nexport {\n childProcessor,\n handleRegularSelection,\n processChildNode,\n} from './domToModel/processors/childProcessor';\nexport { entityProcessor } from './domToModel/processors/entityProcessor';\nexport { tableProcessor } from './domToModel/processors/tableProcessor';\nexport { getRegularSelectionOffsets } from './domToModel/utils/getRegularSelectionOffsets';\nexport { parseFormat } from './domToModel/utils/parseFormat';\nexport { areSameFormats } from './domToModel/utils/areSameFormats';\nexport { isBlockElement } from './domToModel/utils/isBlockElement';\nexport { buildSelectionMarker } from './domToModel/utils/buildSelectionMarker';\n\nexport { updateMetadata, hasMetadata } from './modelApi/metadata/updateMetadata';\nexport { isNodeOfType } from './domUtils/isNodeOfType';\nexport { isElementOfType } from './domUtils/isElementOfType';\nexport { getObjectKeys } from './domUtils/getObjectKeys';\nexport { toArray } from './domUtils/toArray';\nexport { moveChildNodes, wrapAllChildNodes } from './domUtils/moveChildNodes';\nexport { wrap } from './domUtils/wrap';\nexport {\n isEntityElement,\n findClosestEntityWrapper,\n getAllEntityWrappers,\n parseEntityFormat,\n generateEntityClassNames,\n addDelimiters,\n isEntityDelimiter,\n isBlockEntityContainer,\n findClosestBlockEntityContainer,\n} from './domUtils/entityUtils';\nexport { reuseCachedElement } from './domUtils/reuseCachedElement';\nexport { isWhiteSpacePreserved } from './domUtils/isWhiteSpacePreserved';\nexport { normalizeRect } from './domUtils/normalizeRect';\n\nexport { createBr } from './modelApi/creators/createBr';\nexport { createListItem } from './modelApi/creators/createListItem';\nexport { createFormatContainer } from './modelApi/creators/createFormatContainer';\nexport { createParagraph } from './modelApi/creators/createParagraph';\nexport { createSelectionMarker } from './modelApi/creators/createSelectionMarker';\nexport { createTable } from './modelApi/creators/createTable';\nexport { createTableCell } from './modelApi/creators/createTableCell';\nexport { createText } from './modelApi/creators/createText';\nexport { createImage } from './modelApi/creators/createImage';\nexport { createContentModelDocument } from './modelApi/creators/createContentModelDocument';\nexport { createParagraphDecorator } from './modelApi/creators/createParagraphDecorator';\nexport { createGeneralSegment } from './modelApi/creators/createGeneralSegment';\nexport { createGeneralBlock } from './modelApi/creators/createGeneralBlock';\nexport { createEntity } from './modelApi/creators/createEntity';\nexport { createDivider } from './modelApi/creators/createDivider';\nexport { createListLevel } from './modelApi/creators/createListLevel';\nexport { createEmptyModel } from './modelApi/creators/createEmptyModel';\n\nexport { addBlock } from './modelApi/common/addBlock';\nexport { addCode } from './modelApi/common/addDecorators';\nexport { addLink } from './modelApi/common/addDecorators';\nexport { addTextSegment } from './modelApi/common/addTextSegment';\nexport { normalizeParagraph } from './modelApi/common/normalizeParagraph';\n\nexport { normalizeContentModel } from './modelApi/common/normalizeContentModel';\nexport { isGeneralSegment } from './modelApi/typeCheck/isGeneralSegment';\nexport { unwrapBlock } from './modelApi/common/unwrapBlock';\nexport { addSegment } from './modelApi/common/addSegment';\nexport { isEmpty } from './modelApi/common/isEmpty';\nexport { normalizeSingleSegment } from './modelApi/common/normalizeSegment';\n\nexport { setParagraphNotImplicit } from './modelApi/block/setParagraphNotImplicit';\nexport { getOrderedListNumberStr } from './modelApi/list/getOrderedListNumberStr';\nexport { getAutoListStyleType } from './modelApi/list/getAutoListStyleType';\n\nexport { parseValueWithUnit } from './formatHandlers/utils/parseValueWithUnit';\nexport { BorderKeys } from './formatHandlers/common/borderFormatHandler';\nexport { DeprecatedColors, getColor, setColor, parseColor } from './formatHandlers/utils/color';\n\nexport {\n createDomToModelContext,\n createDomToModelContextWithConfig,\n createDomToModelConfig,\n} from './domToModel/context/createDomToModelContext';\nexport {\n createModelToDomContext,\n createModelToDomContextWithConfig,\n createModelToDomConfig,\n} from './modelToDom/context/createModelToDomContext';\n\nexport { isBold } from './domUtils/style/isBold';\nexport { getSelectionRootNode } from './domUtils/selection/getSelectionRootNode';\nexport { isCharacterValue, isModifierKey, isCursorMovingKey } from './domUtils/event/eventUtils';\nexport { combineBorderValue, extractBorderValues } from './domUtils/style/borderValues';\nexport { isPunctuation, isSpace, normalizeText } from './domUtils/stringUtil';\nexport { parseTableCells } from './domUtils/table/parseTableCells';\nexport { readFile } from './domUtils/readFile';\nexport { transformColor } from './domUtils/style/transformColor';\nexport { extractClipboardItems } from './domUtils/event/extractClipboardItems';\nexport { cacheGetEventData } from './domUtils/event/cacheGetEventData';\n\nexport { isBlockGroupOfType } from './modelApi/typeCheck/isBlockGroupOfType';\n\nexport { getClosestAncestorBlockGroupIndex } from './modelApi/editing/getClosestAncestorBlockGroupIndex';\n\nexport { iterateSelections } from './modelApi/selection/iterateSelections';\nexport {\n getFirstSelectedListItem,\n getFirstSelectedTable,\n getOperationalBlocks,\n getSelectedParagraphs,\n getSelectedSegments,\n getSelectedSegmentsAndParagraphs,\n} from './modelApi/selection/collectSelections';\nexport { getSelectedCells } from './modelApi/selection/getSelectedCells';\nexport { hasSelectionInBlock } from './modelApi/selection/hasSelectionInBlock';\nexport { hasSelectionInSegment } from './modelApi/selection/hasSelectionInSegment';\nexport { hasSelectionInBlockGroup } from './modelApi/selection/hasSelectionInBlockGroup';\nexport { setSelection } from './modelApi/selection/setSelection';\n\nexport { cloneModel } from './modelApi/editing/cloneModel';\nexport { mergeModel } from './modelApi/editing/mergeModel';\nexport { deleteSelection } from './modelApi/editing/deleteSelection';\nexport { deleteSegment } from './modelApi/editing/deleteSegment';\nexport { deleteBlock } from './modelApi/editing/deleteBlock';\nexport { applyTableFormat } from './modelApi/editing/applyTableFormat';\nexport { normalizeTable, MIN_ALLOWED_TABLE_CELL_WIDTH } from './modelApi/editing/normalizeTable';\nexport { setTableCellBackgroundColor } from './modelApi/editing/setTableCellBackgroundColor';\nexport { retrieveModelFormatState } from './modelApi/editing/retrieveModelFormatState';\nexport { getListStyleTypeFromString } from './modelApi/editing/getListStyleTypeFromString';\nexport { getSegmentTextFormat } from './modelApi/editing/getSegmentTextFormat';\n\nexport { updateImageMetadata } from './modelApi/metadata/updateImageMetadata';\nexport { updateTableCellMetadata } from './modelApi/metadata/updateTableCellMetadata';\nexport { updateTableMetadata } from './modelApi/metadata/updateTableMetadata';\nexport { updateListMetadata, ListMetadataDefinition } from './modelApi/metadata/updateListMetadata';\n\nexport { ChangeSource } from './constants/ChangeSource';\nexport { BulletListType } from './constants/BulletListType';\nexport { NumberingListType } from './constants/NumberingListType';\nexport { TableBorderFormat } from './constants/TableBorderFormat';\nexport { OrderedListStyleMap } from './constants/OrderedListStyleMap';\nexport { UnorderedListStyleMap } from './constants/UnorderedListStyleMap';\n"]}
@@ -0,0 +1,15 @@
1
+ import type { ListMetadataFormat } from 'roosterjs-content-model-types';
2
+ /**
3
+ * Get automatic list style of a list item according to its lis type and metadata.
4
+ * @param listType The list type, either OL or UL
5
+ * @param metadata Metadata of this list item from list item model
6
+ * @param depth Depth of list level, start from 0
7
+ * @param existingStyleType Existing list style type in format, if any
8
+ * @returns A number to represent list style type.
9
+ * This will be the value of either NumberingListType (when listType is OL) or BulletListType (when listType is UL).
10
+ * When there is a specified list style in its metadata, return this value, otherwise
11
+ * When specified "applyListStyleFromLevel" in metadata, calculate auto list type from its depth, otherwise
12
+ * When there is already listStyleType in list level format, find a related style type index, otherwise
13
+ * return undefined
14
+ */
15
+ export declare function getAutoListStyleType(listType: 'OL' | 'UL', metadata: ListMetadataFormat, depth: number, existingStyleType?: string): number | undefined;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAutoListStyleType = void 0;
4
+ var BulletListType_1 = require("../../constants/BulletListType");
5
+ var NumberingListType_1 = require("../../constants/NumberingListType");
6
+ var DefaultOrderedListStyles = [
7
+ NumberingListType_1.NumberingListType.Decimal,
8
+ NumberingListType_1.NumberingListType.LowerAlpha,
9
+ NumberingListType_1.NumberingListType.LowerRoman,
10
+ ];
11
+ var DefaultUnorderedListStyles = [
12
+ BulletListType_1.BulletListType.Disc,
13
+ BulletListType_1.BulletListType.Circle,
14
+ BulletListType_1.BulletListType.Square,
15
+ ];
16
+ var OrderedListStyleRevertMap = {
17
+ 'lower-alpha': NumberingListType_1.NumberingListType.LowerAlpha,
18
+ 'lower-latin': NumberingListType_1.NumberingListType.LowerAlpha,
19
+ 'upper-alpha': NumberingListType_1.NumberingListType.UpperAlpha,
20
+ 'upper-latin': NumberingListType_1.NumberingListType.UpperAlpha,
21
+ 'lower-roman': NumberingListType_1.NumberingListType.LowerRoman,
22
+ 'upper-roman': NumberingListType_1.NumberingListType.UpperRoman,
23
+ };
24
+ var UnorderedListStyleRevertMap = {
25
+ disc: BulletListType_1.BulletListType.Disc,
26
+ circle: BulletListType_1.BulletListType.Circle,
27
+ square: BulletListType_1.BulletListType.Square,
28
+ };
29
+ /**
30
+ * Get automatic list style of a list item according to its lis type and metadata.
31
+ * @param listType The list type, either OL or UL
32
+ * @param metadata Metadata of this list item from list item model
33
+ * @param depth Depth of list level, start from 0
34
+ * @param existingStyleType Existing list style type in format, if any
35
+ * @returns A number to represent list style type.
36
+ * This will be the value of either NumberingListType (when listType is OL) or BulletListType (when listType is UL).
37
+ * When there is a specified list style in its metadata, return this value, otherwise
38
+ * When specified "applyListStyleFromLevel" in metadata, calculate auto list type from its depth, otherwise
39
+ * When there is already listStyleType in list level format, find a related style type index, otherwise
40
+ * return undefined
41
+ */
42
+ function getAutoListStyleType(listType, metadata, depth, existingStyleType) {
43
+ var orderedStyleType = metadata.orderedStyleType, unorderedStyleType = metadata.unorderedStyleType, applyListStyleFromLevel = metadata.applyListStyleFromLevel;
44
+ if (listType == 'OL') {
45
+ return typeof orderedStyleType == 'number'
46
+ ? orderedStyleType
47
+ : applyListStyleFromLevel
48
+ ? DefaultOrderedListStyles[depth % DefaultOrderedListStyles.length]
49
+ : existingStyleType
50
+ ? OrderedListStyleRevertMap[existingStyleType]
51
+ : undefined;
52
+ }
53
+ else {
54
+ return typeof unorderedStyleType == 'number'
55
+ ? unorderedStyleType
56
+ : applyListStyleFromLevel
57
+ ? DefaultUnorderedListStyles[depth % DefaultUnorderedListStyles.length]
58
+ : existingStyleType
59
+ ? UnorderedListStyleRevertMap[existingStyleType]
60
+ : undefined;
61
+ }
62
+ }
63
+ exports.getAutoListStyleType = getAutoListStyleType;
64
+ //# sourceMappingURL=getAutoListStyleType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAutoListStyleType.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelApi/list/getAutoListStyleType.ts"],"names":[],"mappings":";;;AAAA,iEAAgE;AAChE,uEAAsE;AAGtE,IAAM,wBAAwB,GAAG;IAC7B,qCAAiB,CAAC,OAAO;IACzB,qCAAiB,CAAC,UAAU;IAC5B,qCAAiB,CAAC,UAAU;CAC/B,CAAC;AACF,IAAM,0BAA0B,GAAG;IAC/B,+BAAc,CAAC,IAAI;IACnB,+BAAc,CAAC,MAAM;IACrB,+BAAc,CAAC,MAAM;CACxB,CAAC;AACF,IAAM,yBAAyB,GAA2B;IACtD,aAAa,EAAE,qCAAiB,CAAC,UAAU;IAC3C,aAAa,EAAE,qCAAiB,CAAC,UAAU;IAC3C,aAAa,EAAE,qCAAiB,CAAC,UAAU;IAC3C,aAAa,EAAE,qCAAiB,CAAC,UAAU;IAC3C,aAAa,EAAE,qCAAiB,CAAC,UAAU;IAC3C,aAAa,EAAE,qCAAiB,CAAC,UAAU;CAC9C,CAAC;AACF,IAAM,2BAA2B,GAA2B;IACxD,IAAI,EAAE,+BAAc,CAAC,IAAI;IACzB,MAAM,EAAE,+BAAc,CAAC,MAAM;IAC7B,MAAM,EAAE,+BAAc,CAAC,MAAM;CAChC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,SAAgB,oBAAoB,CAChC,QAAqB,EACrB,QAA4B,EAC5B,KAAa,EACb,iBAA0B;IAElB,IAAA,gBAAgB,GAAkD,QAAQ,iBAA1D,EAAE,kBAAkB,GAA8B,QAAQ,mBAAtC,EAAE,uBAAuB,GAAK,QAAQ,wBAAb,CAAc;IAEnF,IAAI,QAAQ,IAAI,IAAI,EAAE;QAClB,OAAO,OAAO,gBAAgB,IAAI,QAAQ;YACtC,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,uBAAuB;gBACzB,CAAC,CAAC,wBAAwB,CAAC,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC;gBACnE,CAAC,CAAC,iBAAiB;oBACnB,CAAC,CAAC,yBAAyB,CAAC,iBAAiB,CAAC;oBAC9C,CAAC,CAAC,SAAS,CAAC;KACnB;SAAM;QACH,OAAO,OAAO,kBAAkB,IAAI,QAAQ;YACxC,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,uBAAuB;gBACzB,CAAC,CAAC,0BAA0B,CAAC,KAAK,GAAG,0BAA0B,CAAC,MAAM,CAAC;gBACvE,CAAC,CAAC,iBAAiB;oBACnB,CAAC,CAAC,2BAA2B,CAAC,iBAAiB,CAAC;oBAChD,CAAC,CAAC,SAAS,CAAC;KACnB;AACL,CAAC;AAzBD,oDAyBC","sourcesContent":["import { BulletListType } from '../../constants/BulletListType';\nimport { NumberingListType } from '../../constants/NumberingListType';\nimport type { ListMetadataFormat } from 'roosterjs-content-model-types';\n\nconst DefaultOrderedListStyles = [\n NumberingListType.Decimal,\n NumberingListType.LowerAlpha,\n NumberingListType.LowerRoman,\n];\nconst DefaultUnorderedListStyles = [\n BulletListType.Disc,\n BulletListType.Circle,\n BulletListType.Square,\n];\nconst OrderedListStyleRevertMap: Record<string, number> = {\n 'lower-alpha': NumberingListType.LowerAlpha,\n 'lower-latin': NumberingListType.LowerAlpha,\n 'upper-alpha': NumberingListType.UpperAlpha,\n 'upper-latin': NumberingListType.UpperAlpha,\n 'lower-roman': NumberingListType.LowerRoman,\n 'upper-roman': NumberingListType.UpperRoman,\n};\nconst UnorderedListStyleRevertMap: Record<string, number> = {\n disc: BulletListType.Disc,\n circle: BulletListType.Circle,\n square: BulletListType.Square,\n};\n\n/**\n * Get automatic list style of a list item according to its lis type and metadata.\n * @param listType The list type, either OL or UL\n * @param metadata Metadata of this list item from list item model\n * @param depth Depth of list level, start from 0\n * @param existingStyleType Existing list style type in format, if any\n * @returns A number to represent list style type.\n * This will be the value of either NumberingListType (when listType is OL) or BulletListType (when listType is UL).\n * When there is a specified list style in its metadata, return this value, otherwise\n * When specified \"applyListStyleFromLevel\" in metadata, calculate auto list type from its depth, otherwise\n * When there is already listStyleType in list level format, find a related style type index, otherwise\n * return undefined\n */\nexport function getAutoListStyleType(\n listType: 'OL' | 'UL',\n metadata: ListMetadataFormat,\n depth: number,\n existingStyleType?: string\n): number | undefined {\n const { orderedStyleType, unorderedStyleType, applyListStyleFromLevel } = metadata;\n\n if (listType == 'OL') {\n return typeof orderedStyleType == 'number'\n ? orderedStyleType\n : applyListStyleFromLevel\n ? DefaultOrderedListStyles[depth % DefaultOrderedListStyles.length]\n : existingStyleType\n ? OrderedListStyleRevertMap[existingStyleType]\n : undefined;\n } else {\n return typeof unorderedStyleType == 'number'\n ? unorderedStyleType\n : applyListStyleFromLevel\n ? DefaultUnorderedListStyles[depth % DefaultUnorderedListStyles.length]\n : existingStyleType\n ? UnorderedListStyleRevertMap[existingStyleType]\n : undefined;\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Get the list number for a list item according to list style type and its index number
3
+ * @param styleType The list style number, should be a value of NumberingListType type
4
+ * @param listNumber List number, start from 1
5
+ * @returns A string for this list item. For example, when pass in NumberingListType.LowerAlpha and 2, it returns "b"
6
+ */
7
+ export declare function getOrderedListNumberStr(styleType: number, listNumber: number): string;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getOrderedListNumberStr = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var getObjectKeys_1 = require("../../domUtils/getObjectKeys");
6
+ var NumberingListType_1 = require("../../constants/NumberingListType");
7
+ var CharCodeOfA = 65;
8
+ var RomanValues = {
9
+ M: 1000,
10
+ CM: 900,
11
+ D: 500,
12
+ CD: 400,
13
+ C: 100,
14
+ XC: 90,
15
+ L: 50,
16
+ XL: 40,
17
+ X: 10,
18
+ IX: 9,
19
+ V: 5,
20
+ IV: 4,
21
+ I: 1,
22
+ };
23
+ /**
24
+ * Get the list number for a list item according to list style type and its index number
25
+ * @param styleType The list style number, should be a value of NumberingListType type
26
+ * @param listNumber List number, start from 1
27
+ * @returns A string for this list item. For example, when pass in NumberingListType.LowerAlpha and 2, it returns "b"
28
+ */
29
+ function getOrderedListNumberStr(styleType, listNumber) {
30
+ switch (styleType) {
31
+ case NumberingListType_1.NumberingListType.LowerAlpha:
32
+ case NumberingListType_1.NumberingListType.LowerAlphaDash:
33
+ case NumberingListType_1.NumberingListType.LowerAlphaDoubleParenthesis:
34
+ case NumberingListType_1.NumberingListType.LowerAlphaParenthesis:
35
+ return convertDecimalsToAlpha(listNumber, true /*isLowerCase*/);
36
+ case NumberingListType_1.NumberingListType.UpperAlpha:
37
+ case NumberingListType_1.NumberingListType.UpperAlphaDash:
38
+ case NumberingListType_1.NumberingListType.UpperAlphaDoubleParenthesis:
39
+ case NumberingListType_1.NumberingListType.UpperAlphaParenthesis:
40
+ return convertDecimalsToAlpha(listNumber, false /*isLowerCase*/);
41
+ case NumberingListType_1.NumberingListType.LowerRoman:
42
+ case NumberingListType_1.NumberingListType.LowerRomanDash:
43
+ case NumberingListType_1.NumberingListType.LowerRomanDoubleParenthesis:
44
+ case NumberingListType_1.NumberingListType.LowerRomanParenthesis:
45
+ return convertDecimalsToRoman(listNumber, true /*isLowerCase*/);
46
+ case NumberingListType_1.NumberingListType.UpperRoman:
47
+ case NumberingListType_1.NumberingListType.UpperRomanDash:
48
+ case NumberingListType_1.NumberingListType.UpperRomanDoubleParenthesis:
49
+ case NumberingListType_1.NumberingListType.UpperRomanParenthesis:
50
+ return convertDecimalsToRoman(listNumber, false /*isLowerCase*/);
51
+ default:
52
+ return listNumber + '';
53
+ }
54
+ }
55
+ exports.getOrderedListNumberStr = getOrderedListNumberStr;
56
+ function convertDecimalsToAlpha(decimal, isLowerCase) {
57
+ var alpha = '';
58
+ decimal--;
59
+ while (decimal >= 0) {
60
+ alpha = String.fromCharCode((decimal % 26) + CharCodeOfA) + alpha;
61
+ decimal = Math.floor(decimal / 26) - 1;
62
+ }
63
+ return isLowerCase ? alpha.toLowerCase() : alpha;
64
+ }
65
+ function convertDecimalsToRoman(decimal, isLowerCase) {
66
+ var e_1, _a;
67
+ var romanValue = '';
68
+ try {
69
+ for (var _b = (0, tslib_1.__values)((0, getObjectKeys_1.getObjectKeys)(RomanValues)), _c = _b.next(); !_c.done; _c = _b.next()) {
70
+ var i = _c.value;
71
+ var timesRomanCharAppear = Math.floor(decimal / RomanValues[i]);
72
+ decimal = decimal - timesRomanCharAppear * RomanValues[i];
73
+ romanValue = romanValue + i.repeat(timesRomanCharAppear);
74
+ }
75
+ }
76
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
77
+ finally {
78
+ try {
79
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
80
+ }
81
+ finally { if (e_1) throw e_1.error; }
82
+ }
83
+ return isLowerCase ? romanValue.toLocaleLowerCase() : romanValue;
84
+ }
85
+ //# sourceMappingURL=getOrderedListNumberStr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrderedListNumberStr.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelApi/list/getOrderedListNumberStr.ts"],"names":[],"mappings":"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","sourcesContent":["import { getObjectKeys } from '../../domUtils/getObjectKeys';\nimport { NumberingListType } from '../../constants/NumberingListType';\n\nconst CharCodeOfA = 65;\nconst RomanValues: Record<string, number> = {\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\n/**\n * Get the list number for a list item according to list style type and its index number\n * @param styleType The list style number, should be a value of NumberingListType type\n * @param listNumber List number, start from 1\n * @returns A string for this list item. For example, when pass in NumberingListType.LowerAlpha and 2, it returns \"b\"\n */\nexport function getOrderedListNumberStr(styleType: number, listNumber: number): string {\n switch (styleType) {\n case NumberingListType.LowerAlpha:\n case NumberingListType.LowerAlphaDash:\n case NumberingListType.LowerAlphaDoubleParenthesis:\n case NumberingListType.LowerAlphaParenthesis:\n return convertDecimalsToAlpha(listNumber, true /*isLowerCase*/);\n\n case NumberingListType.UpperAlpha:\n case NumberingListType.UpperAlphaDash:\n case NumberingListType.UpperAlphaDoubleParenthesis:\n case NumberingListType.UpperAlphaParenthesis:\n return convertDecimalsToAlpha(listNumber, false /*isLowerCase*/);\n\n case NumberingListType.LowerRoman:\n case NumberingListType.LowerRomanDash:\n case NumberingListType.LowerRomanDoubleParenthesis:\n case NumberingListType.LowerRomanParenthesis:\n return convertDecimalsToRoman(listNumber, true /*isLowerCase*/);\n\n case NumberingListType.UpperRoman:\n case NumberingListType.UpperRomanDash:\n case NumberingListType.UpperRomanDoubleParenthesis:\n case NumberingListType.UpperRomanParenthesis:\n return convertDecimalsToRoman(listNumber, false /*isLowerCase*/);\n\n default:\n return listNumber + '';\n }\n}\n\nfunction convertDecimalsToAlpha(decimal: number, isLowerCase?: boolean): string {\n let alpha = '';\n decimal--;\n\n while (decimal >= 0) {\n alpha = String.fromCharCode((decimal % 26) + CharCodeOfA) + alpha;\n decimal = Math.floor(decimal / 26) - 1;\n }\n return isLowerCase ? alpha.toLowerCase() : alpha;\n}\n\nfunction convertDecimalsToRoman(decimal: number, isLowerCase?: boolean) {\n let romanValue = '';\n\n for (const i of getObjectKeys(RomanValues)) {\n const timesRomanCharAppear = Math.floor(decimal / RomanValues[i]);\n decimal = decimal - timesRomanCharAppear * RomanValues[i];\n romanValue = romanValue + i.repeat(timesRomanCharAppear);\n }\n return isLowerCase ? romanValue.toLocaleLowerCase() : romanValue;\n}\n"]}
@@ -1,8 +1,8 @@
1
- import type { ContentModelWithDataset, ListMetadataFormat } from 'roosterjs-content-model-types';
1
+ import type { ContentModelWithDataset, ListMetadataFormat, ObjectDefinition } from 'roosterjs-content-model-types';
2
2
  /**
3
3
  * Metadata definition for List
4
4
  */
5
- export declare const ListMetadataDefinition: import("roosterjs-content-model-types").ObjectDefinition<ListMetadataFormat>;
5
+ export declare const ListMetadataDefinition: ObjectDefinition<ListMetadataFormat>;
6
6
  /**
7
7
  * Update list metadata with a callback
8
8
  * @param list The list Content Model (metadata holder)
@@ -1 +1 @@
1
- {"version":3,"file":"updateListMetadata.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelApi/metadata/updateListMetadata.ts"],"names":[],"mappings":";;;AAAA,iEAAgE;AAChE,uEAAsE;AACtE,mDAAkD;AAClD,2DAI8B;AAG9B;;GAEG;AACU,QAAA,sBAAsB,GAAG,IAAA,2CAAsB,EACxD;IACI,gBAAgB,EAAE,IAAA,2CAAsB,EACpC,IAAI,CAAC,iBAAiB,EACtB,SAAS,CAAC,aAAa,EACvB,qCAAiB,CAAC,GAAG,EACrB,qCAAiB,CAAC,GAAG,CACxB;IACD,kBAAkB,EAAE,IAAA,2CAAsB,EACtC,IAAI,CAAC,iBAAiB,EACtB,SAAS,CAAC,aAAa,EACvB,+BAAc,CAAC,GAAG,EAClB,+BAAc,CAAC,GAAG,CACrB;IACD,uBAAuB,EAAE,IAAA,4CAAuB,EAAC,IAAI,CAAC,cAAc,CAAC;CACxE,EACD,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,gBAAgB,CACxB,CAAC;AAEF;;;;GAIG;AACH,SAAgB,kBAAkB,CAC9B,IAAiD,EACjD,QAA2E;IAE3E,OAAO,IAAA,+BAAc,EAAC,IAAI,EAAE,QAAQ,EAAE,8BAAsB,CAAC,CAAC;AAClE,CAAC;AALD,gDAKC","sourcesContent":["import { BulletListType } from '../../constants/BulletListType';\nimport { NumberingListType } from '../../constants/NumberingListType';\nimport { updateMetadata } from './updateMetadata';\nimport {\n createBooleanDefinition,\n createNumberDefinition,\n createObjectDefinition,\n} from './definitionCreators';\nimport type { ContentModelWithDataset, ListMetadataFormat } from 'roosterjs-content-model-types';\n\n/**\n * Metadata definition for List\n */\nexport const ListMetadataDefinition = createObjectDefinition<ListMetadataFormat>(\n {\n orderedStyleType: createNumberDefinition(\n true /** isOptional */,\n undefined /** value **/,\n NumberingListType.Min,\n NumberingListType.Max\n ),\n unorderedStyleType: createNumberDefinition(\n true /** isOptional */,\n undefined /** value **/,\n BulletListType.Min,\n BulletListType.Max\n ),\n applyListStyleFromLevel: createBooleanDefinition(true /*isOptional*/),\n },\n true /** isOptional */,\n true /** allowNull */\n);\n\n/**\n * Update list metadata with a callback\n * @param list The list Content Model (metadata holder)\n * @param callback The callback function used for updating metadata\n */\nexport function updateListMetadata(\n list: ContentModelWithDataset<ListMetadataFormat>,\n callback?: (format: ListMetadataFormat | null) => ListMetadataFormat | null\n): ListMetadataFormat | null {\n return updateMetadata(list, callback, ListMetadataDefinition);\n}\n"]}
1
+ {"version":3,"file":"updateListMetadata.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelApi/metadata/updateListMetadata.ts"],"names":[],"mappings":";;;AAAA,iEAAgE;AAChE,uEAAsE;AACtE,mDAAkD;AAClD,2DAI8B;AAO9B;;GAEG;AACU,QAAA,sBAAsB,GAAyC,IAAA,2CAAsB,EAG9F;IACI,gBAAgB,EAAE,IAAA,2CAAsB,EACpC,IAAI,CAAC,iBAAiB,EACtB,SAAS,CAAC,aAAa,EACvB,qCAAiB,CAAC,GAAG,EACrB,qCAAiB,CAAC,GAAG,CACxB;IACD,kBAAkB,EAAE,IAAA,2CAAsB,EACtC,IAAI,CAAC,iBAAiB,EACtB,SAAS,CAAC,aAAa,EACvB,+BAAc,CAAC,GAAG,EAClB,+BAAc,CAAC,GAAG,CACrB;IACD,uBAAuB,EAAE,IAAA,4CAAuB,EAAC,IAAI,CAAC,cAAc,CAAC;CACxE,EACD,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,gBAAgB,CACxB,CAAC;AAEF;;;;GAIG;AACH,SAAgB,kBAAkB,CAC9B,IAAiD,EACjD,QAA2E;IAE3E,OAAO,IAAA,+BAAc,EAAC,IAAI,EAAE,QAAQ,EAAE,8BAAsB,CAAC,CAAC;AAClE,CAAC;AALD,gDAKC","sourcesContent":["import { BulletListType } from '../../constants/BulletListType';\nimport { NumberingListType } from '../../constants/NumberingListType';\nimport { updateMetadata } from './updateMetadata';\nimport {\n createBooleanDefinition,\n createNumberDefinition,\n createObjectDefinition,\n} from './definitionCreators';\nimport type {\n ContentModelWithDataset,\n ListMetadataFormat,\n ObjectDefinition,\n} from 'roosterjs-content-model-types';\n\n/**\n * Metadata definition for List\n */\nexport const ListMetadataDefinition: ObjectDefinition<ListMetadataFormat> = createObjectDefinition<\n ListMetadataFormat\n>(\n {\n orderedStyleType: createNumberDefinition(\n true /** isOptional */,\n undefined /** value **/,\n NumberingListType.Min,\n NumberingListType.Max\n ),\n unorderedStyleType: createNumberDefinition(\n true /** isOptional */,\n undefined /** value **/,\n BulletListType.Min,\n BulletListType.Max\n ),\n applyListStyleFromLevel: createBooleanDefinition(true /*isOptional*/),\n },\n true /** isOptional */,\n true /** allowNull */\n);\n\n/**\n * Update list metadata with a callback\n * @param list The list Content Model (metadata holder)\n * @param callback The callback function used for updating metadata\n */\nexport function updateListMetadata(\n list: ContentModelWithDataset<ListMetadataFormat>,\n callback?: (format: ListMetadataFormat | null) => ListMetadataFormat | null\n): ListMetadataFormat | null {\n return updateMetadata(list, callback, ListMetadataDefinition);\n}\n"]}
@@ -4,7 +4,7 @@ import type { ContentModelBlockGroup, ContentModelBlockGroupType, ContentModelDo
4
4
  * @param model The Content Model to get selection from
5
5
  * @param includingFormatHolder True means also include format holder as segment from list item, in that case paragraph will be null
6
6
  */
7
- export declare function getSelectedSegmentsAndParagraphs(model: ContentModelDocument, includingFormatHolder: boolean): [ContentModelSegment, ContentModelParagraph | null][];
7
+ export declare function getSelectedSegmentsAndParagraphs(model: ContentModelDocument, includingFormatHolder: boolean, includingEntity?: boolean): [ContentModelSegment, ContentModelParagraph | null, ContentModelBlockGroup[]][];
8
8
  /**
9
9
  * Get an array of selected segments from a content model
10
10
  * @param model The Content Model to get selection from
@@ -18,12 +18,12 @@ export declare function getSelectedSegments(model: ContentModelDocument, includi
18
18
  export declare function getSelectedParagraphs(model: ContentModelDocument): ContentModelParagraph[];
19
19
  /**
20
20
  * Get an array of block group - block pair that is of the expected block group type from selection
21
- * @param model The Content Model to get selection from
21
+ * @param group The root block group to search
22
22
  * @param blockGroupTypes The expected block group types
23
23
  * @param stopTypes Block group types that will stop searching when hit
24
24
  * @param deepFirst True means search in deep first, otherwise wide first
25
25
  */
26
- export declare function getOperationalBlocks<T extends ContentModelBlockGroup>(model: ContentModelDocument, blockGroupTypes: TypeOfBlockGroup<T>[], stopTypes: ContentModelBlockGroupType[], deepFirst?: boolean): OperationalBlocks<T>[];
26
+ export declare function getOperationalBlocks<T extends ContentModelBlockGroup>(group: ContentModelBlockGroup, blockGroupTypes: TypeOfBlockGroup<T>[], stopTypes: ContentModelBlockGroupType[], deepFirst?: boolean): OperationalBlocks<T>[];
27
27
  /**
28
28
  * Get the first selected table from content model
29
29
  * @param model The Content Model to get selection from