roosterjs-content-model-dom 9.42.0 → 9.44.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 (52) hide show
  1. package/lib/domUtils/retrieveDocumentMetadata.d.ts +6 -0
  2. package/lib/domUtils/retrieveDocumentMetadata.js +23 -0
  3. package/lib/domUtils/retrieveDocumentMetadata.js.map +1 -0
  4. package/lib/index.d.ts +1 -0
  5. package/lib/index.js +4 -2
  6. package/lib/index.js.map +1 -1
  7. package/lib/modelToDom/handlers/handleBlockGroupChildren.js +17 -11
  8. package/lib/modelToDom/handlers/handleBlockGroupChildren.js.map +1 -1
  9. package/lib/modelToDom/handlers/handleList.js +51 -11
  10. package/lib/modelToDom/handlers/handleList.js.map +1 -1
  11. package/lib/modelToDom/handlers/handleListItem.js +32 -7
  12. package/lib/modelToDom/handlers/handleListItem.js.map +1 -1
  13. package/lib/modelToDom/utils/cleanUpRestNodes.d.ts +8 -0
  14. package/lib/modelToDom/utils/cleanUpRestNodes.js +24 -0
  15. package/lib/modelToDom/utils/cleanUpRestNodes.js.map +1 -0
  16. package/lib/modelToDom/utils/stackFormat.js +3 -0
  17. package/lib/modelToDom/utils/stackFormat.js.map +1 -1
  18. package/lib-amd/domUtils/retrieveDocumentMetadata.d.ts +6 -0
  19. package/lib-amd/domUtils/retrieveDocumentMetadata.js +24 -0
  20. package/lib-amd/domUtils/retrieveDocumentMetadata.js.map +1 -0
  21. package/lib-amd/index.d.ts +1 -0
  22. package/lib-amd/index.js +3 -2
  23. package/lib-amd/index.js.map +1 -1
  24. package/lib-amd/modelToDom/handlers/handleBlockGroupChildren.js +17 -11
  25. package/lib-amd/modelToDom/handlers/handleBlockGroupChildren.js.map +1 -1
  26. package/lib-amd/modelToDom/handlers/handleList.js +50 -12
  27. package/lib-amd/modelToDom/handlers/handleList.js.map +1 -1
  28. package/lib-amd/modelToDom/handlers/handleListItem.js +32 -8
  29. package/lib-amd/modelToDom/handlers/handleListItem.js.map +1 -1
  30. package/lib-amd/modelToDom/utils/cleanUpRestNodes.d.ts +8 -0
  31. package/lib-amd/modelToDom/utils/cleanUpRestNodes.js +25 -0
  32. package/lib-amd/modelToDom/utils/cleanUpRestNodes.js.map +1 -0
  33. package/lib-amd/modelToDom/utils/stackFormat.js +3 -0
  34. package/lib-amd/modelToDom/utils/stackFormat.js.map +1 -1
  35. package/lib-mjs/domUtils/retrieveDocumentMetadata.d.ts +6 -0
  36. package/lib-mjs/domUtils/retrieveDocumentMetadata.js +19 -0
  37. package/lib-mjs/domUtils/retrieveDocumentMetadata.js.map +1 -0
  38. package/lib-mjs/index.d.ts +1 -0
  39. package/lib-mjs/index.js +1 -0
  40. package/lib-mjs/index.js.map +1 -1
  41. package/lib-mjs/modelToDom/handlers/handleBlockGroupChildren.js +17 -11
  42. package/lib-mjs/modelToDom/handlers/handleBlockGroupChildren.js.map +1 -1
  43. package/lib-mjs/modelToDom/handlers/handleList.js +51 -11
  44. package/lib-mjs/modelToDom/handlers/handleList.js.map +1 -1
  45. package/lib-mjs/modelToDom/handlers/handleListItem.js +32 -7
  46. package/lib-mjs/modelToDom/handlers/handleListItem.js.map +1 -1
  47. package/lib-mjs/modelToDom/utils/cleanUpRestNodes.d.ts +8 -0
  48. package/lib-mjs/modelToDom/utils/cleanUpRestNodes.js +20 -0
  49. package/lib-mjs/modelToDom/utils/cleanUpRestNodes.js.map +1 -0
  50. package/lib-mjs/modelToDom/utils/stackFormat.js +3 -0
  51. package/lib-mjs/modelToDom/utils/stackFormat.js.map +1 -1
  52. package/package.json +2 -2
package/lib-amd/index.js CHANGED
@@ -1,7 +1,7 @@
1
- define(["require", "exports", "./domToModel/domToContentModel", "./modelToDom/contentModelToDom", "./modelToText/contentModelToText", "./domToModel/processors/childProcessor", "./domToModel/processors/entityProcessor", "./domToModel/processors/tableProcessor", "./domToModel/utils/getRegularSelectionOffsets", "./domToModel/utils/parseFormat", "./domToModel/utils/areSameFormats", "./domToModel/utils/isBlockElement", "./domToModel/utils/buildSelectionMarker", "./modelApi/metadata/updateMetadata", "./domUtils/isNodeOfType", "./domUtils/isElementOfType", "./domUtils/getObjectKeys", "./domUtils/getSafeIdSelector", "./domUtils/toArray", "./domUtils/moveChildNodes", "./domUtils/wrap", "./domUtils/unwrap", "./domUtils/entityUtils", "./domUtils/reuseCachedElement", "./domUtils/isWhiteSpacePreserved", "./domUtils/normalizeRect", "./domUtils/scrollRectIntoView", "./domUtils/hiddenProperties/undeletableLink", "./modelApi/creators/createBr", "./modelApi/creators/createListItem", "./modelApi/creators/createFormatContainer", "./modelApi/creators/createParagraph", "./modelApi/creators/createSelectionMarker", "./modelApi/creators/createTable", "./modelApi/creators/createTableCell", "./modelApi/creators/createText", "./modelApi/creators/createImage", "./modelApi/creators/createContentModelDocument", "./modelApi/creators/createParagraphDecorator", "./modelApi/creators/createGeneralSegment", "./modelApi/creators/createGeneralBlock", "./modelApi/creators/createEntity", "./modelApi/creators/createDivider", "./modelApi/creators/createListLevel", "./modelApi/creators/createEmptyModel", "./modelApi/creators/createTableRow", "./modelApi/common/mutate", "./modelApi/common/addBlock", "./modelApi/common/addDecorators", "./modelApi/common/addDecorators", "./modelApi/common/addTextSegment", "./modelApi/common/normalizeParagraph", "./modelApi/common/normalizeContentModel", "./modelApi/typeCheck/isGeneralSegment", "./modelApi/common/unwrapBlock", "./modelApi/common/addSegment", "./modelApi/common/isEmpty", "./modelApi/common/normalizeSegment", "./modelApi/common/mergeTextSegments", "./modelApi/common/normalizeSegmentFormat", "./modelApi/block/setParagraphNotImplicit", "./modelApi/block/copyFormat", "./modelApi/list/getOrderedListNumberStr", "./modelApi/list/getAutoListStyleType", "./formatHandlers/utils/parseValueWithUnit", "./formatHandlers/common/borderFormatHandler", "./formatHandlers/utils/color", "./domToModel/context/createDomToModelContext", "./modelToDom/context/createModelToDomContext", "./domUtils/style/isBold", "./domUtils/selection/getSelectionRootNode", "./domUtils/selection/getDOMInsertPointRect", "./domUtils/event/eventUtils", "./domUtils/style/borderValues", "./domUtils/stringUtil", "./domUtils/table/parseTableCells", "./domUtils/readFile", "./domUtils/style/transformColor", "./domUtils/style/normalizeFontFamily", "./domUtils/event/extractClipboardItems", "./domUtils/event/cacheGetEventData", "./domUtils/hiddenProperties/paragraphMarker", "./domUtils/hiddenProperties/imageState", "./domUtils/getRangesByText", "./modelApi/typeCheck/isBlockGroupOfType", "./modelApi/selection/iterateSelections", "./modelApi/selection/collectSelections", "./modelApi/selection/getSelectedCells", "./modelApi/selection/hasSelectionInBlock", "./modelApi/selection/hasSelectionInSegment", "./modelApi/selection/hasSelectionInBlockGroup", "./modelApi/selection/setSelection", "./modelApi/editing/cloneModel", "./modelApi/editing/mergeModel", "./modelApi/editing/deleteSelection", "./modelApi/editing/deleteSegment", "./modelApi/editing/deleteBlock", "./modelApi/editing/applyTableFormat", "./modelApi/editing/normalizeTable", "./modelApi/editing/setTableCellBackgroundColor", "./modelApi/editing/retrieveModelFormatState", "./modelApi/editing/getListStyleTypeFromString", "./modelApi/editing/getSegmentTextFormat", "./modelApi/editing/getClosestAncestorBlockGroupIndex", "./modelApi/editing/runEditSteps", "./modelApi/metadata/updateImageMetadata", "./modelApi/metadata/updateTableCellMetadata", "./modelApi/metadata/updateTableMetadata", "./modelApi/metadata/updateListMetadata", "./constants/ChangeSource", "./constants/BulletListType", "./constants/NumberingListType", "./constants/TableBorderFormat", "./constants/OrderedListStyleMap", "./constants/UnorderedListStyleMap", "./constants/EmptySegmentFormat"], function (require, exports, domToContentModel_1, contentModelToDom_1, contentModelToText_1, childProcessor_1, entityProcessor_1, tableProcessor_1, getRegularSelectionOffsets_1, parseFormat_1, areSameFormats_1, isBlockElement_1, buildSelectionMarker_1, updateMetadata_1, isNodeOfType_1, isElementOfType_1, getObjectKeys_1, getSafeIdSelector_1, toArray_1, moveChildNodes_1, wrap_1, unwrap_1, entityUtils_1, reuseCachedElement_1, isWhiteSpacePreserved_1, normalizeRect_1, scrollRectIntoView_1, undeletableLink_1, createBr_1, createListItem_1, createFormatContainer_1, createParagraph_1, createSelectionMarker_1, createTable_1, createTableCell_1, createText_1, createImage_1, createContentModelDocument_1, createParagraphDecorator_1, createGeneralSegment_1, createGeneralBlock_1, createEntity_1, createDivider_1, createListLevel_1, createEmptyModel_1, createTableRow_1, mutate_1, addBlock_1, addDecorators_1, addDecorators_2, addTextSegment_1, normalizeParagraph_1, normalizeContentModel_1, isGeneralSegment_1, unwrapBlock_1, addSegment_1, isEmpty_1, normalizeSegment_1, mergeTextSegments_1, normalizeSegmentFormat_1, setParagraphNotImplicit_1, copyFormat_1, getOrderedListNumberStr_1, getAutoListStyleType_1, parseValueWithUnit_1, borderFormatHandler_1, color_1, createDomToModelContext_1, createModelToDomContext_1, isBold_1, getSelectionRootNode_1, getDOMInsertPointRect_1, eventUtils_1, borderValues_1, stringUtil_1, parseTableCells_1, readFile_1, transformColor_1, normalizeFontFamily_1, extractClipboardItems_1, cacheGetEventData_1, paragraphMarker_1, imageState_1, getRangesByText_1, isBlockGroupOfType_1, iterateSelections_1, collectSelections_1, getSelectedCells_1, hasSelectionInBlock_1, hasSelectionInSegment_1, hasSelectionInBlockGroup_1, setSelection_1, cloneModel_1, mergeModel_1, deleteSelection_1, deleteSegment_1, deleteBlock_1, applyTableFormat_1, normalizeTable_1, setTableCellBackgroundColor_1, retrieveModelFormatState_1, getListStyleTypeFromString_1, getSegmentTextFormat_1, getClosestAncestorBlockGroupIndex_1, runEditSteps_1, updateImageMetadata_1, updateTableCellMetadata_1, updateTableMetadata_1, updateListMetadata_1, ChangeSource_1, BulletListType_1, NumberingListType_1, TableBorderFormat_1, OrderedListStyleMap_1, UnorderedListStyleMap_1, EmptySegmentFormat_1) {
1
+ define(["require", "exports", "./domToModel/domToContentModel", "./modelToDom/contentModelToDom", "./modelToText/contentModelToText", "./domToModel/processors/childProcessor", "./domToModel/processors/entityProcessor", "./domToModel/processors/tableProcessor", "./domToModel/utils/getRegularSelectionOffsets", "./domToModel/utils/parseFormat", "./domToModel/utils/areSameFormats", "./domToModel/utils/isBlockElement", "./domToModel/utils/buildSelectionMarker", "./modelApi/metadata/updateMetadata", "./domUtils/isNodeOfType", "./domUtils/isElementOfType", "./domUtils/getObjectKeys", "./domUtils/getSafeIdSelector", "./domUtils/toArray", "./domUtils/moveChildNodes", "./domUtils/wrap", "./domUtils/unwrap", "./domUtils/entityUtils", "./domUtils/reuseCachedElement", "./domUtils/isWhiteSpacePreserved", "./domUtils/normalizeRect", "./domUtils/scrollRectIntoView", "./domUtils/hiddenProperties/undeletableLink", "./modelApi/creators/createBr", "./modelApi/creators/createListItem", "./modelApi/creators/createFormatContainer", "./modelApi/creators/createParagraph", "./modelApi/creators/createSelectionMarker", "./modelApi/creators/createTable", "./modelApi/creators/createTableCell", "./modelApi/creators/createText", "./modelApi/creators/createImage", "./modelApi/creators/createContentModelDocument", "./modelApi/creators/createParagraphDecorator", "./modelApi/creators/createGeneralSegment", "./modelApi/creators/createGeneralBlock", "./modelApi/creators/createEntity", "./modelApi/creators/createDivider", "./modelApi/creators/createListLevel", "./modelApi/creators/createEmptyModel", "./modelApi/creators/createTableRow", "./modelApi/common/mutate", "./modelApi/common/addBlock", "./modelApi/common/addDecorators", "./modelApi/common/addDecorators", "./modelApi/common/addTextSegment", "./modelApi/common/normalizeParagraph", "./modelApi/common/normalizeContentModel", "./modelApi/typeCheck/isGeneralSegment", "./modelApi/common/unwrapBlock", "./modelApi/common/addSegment", "./modelApi/common/isEmpty", "./modelApi/common/normalizeSegment", "./modelApi/common/mergeTextSegments", "./modelApi/common/normalizeSegmentFormat", "./modelApi/block/setParagraphNotImplicit", "./modelApi/block/copyFormat", "./modelApi/list/getOrderedListNumberStr", "./modelApi/list/getAutoListStyleType", "./formatHandlers/utils/parseValueWithUnit", "./formatHandlers/common/borderFormatHandler", "./formatHandlers/utils/color", "./domToModel/context/createDomToModelContext", "./modelToDom/context/createModelToDomContext", "./domUtils/style/isBold", "./domUtils/selection/getSelectionRootNode", "./domUtils/selection/getDOMInsertPointRect", "./domUtils/event/eventUtils", "./domUtils/style/borderValues", "./domUtils/stringUtil", "./domUtils/table/parseTableCells", "./domUtils/readFile", "./domUtils/retrieveDocumentMetadata", "./domUtils/style/transformColor", "./domUtils/style/normalizeFontFamily", "./domUtils/event/extractClipboardItems", "./domUtils/event/cacheGetEventData", "./domUtils/hiddenProperties/paragraphMarker", "./domUtils/hiddenProperties/imageState", "./domUtils/getRangesByText", "./modelApi/typeCheck/isBlockGroupOfType", "./modelApi/selection/iterateSelections", "./modelApi/selection/collectSelections", "./modelApi/selection/getSelectedCells", "./modelApi/selection/hasSelectionInBlock", "./modelApi/selection/hasSelectionInSegment", "./modelApi/selection/hasSelectionInBlockGroup", "./modelApi/selection/setSelection", "./modelApi/editing/cloneModel", "./modelApi/editing/mergeModel", "./modelApi/editing/deleteSelection", "./modelApi/editing/deleteSegment", "./modelApi/editing/deleteBlock", "./modelApi/editing/applyTableFormat", "./modelApi/editing/normalizeTable", "./modelApi/editing/setTableCellBackgroundColor", "./modelApi/editing/retrieveModelFormatState", "./modelApi/editing/getListStyleTypeFromString", "./modelApi/editing/getSegmentTextFormat", "./modelApi/editing/getClosestAncestorBlockGroupIndex", "./modelApi/editing/runEditSteps", "./modelApi/metadata/updateImageMetadata", "./modelApi/metadata/updateTableCellMetadata", "./modelApi/metadata/updateTableMetadata", "./modelApi/metadata/updateListMetadata", "./constants/ChangeSource", "./constants/BulletListType", "./constants/NumberingListType", "./constants/TableBorderFormat", "./constants/OrderedListStyleMap", "./constants/UnorderedListStyleMap", "./constants/EmptySegmentFormat"], function (require, exports, domToContentModel_1, contentModelToDom_1, contentModelToText_1, childProcessor_1, entityProcessor_1, tableProcessor_1, getRegularSelectionOffsets_1, parseFormat_1, areSameFormats_1, isBlockElement_1, buildSelectionMarker_1, updateMetadata_1, isNodeOfType_1, isElementOfType_1, getObjectKeys_1, getSafeIdSelector_1, toArray_1, moveChildNodes_1, wrap_1, unwrap_1, entityUtils_1, reuseCachedElement_1, isWhiteSpacePreserved_1, normalizeRect_1, scrollRectIntoView_1, undeletableLink_1, createBr_1, createListItem_1, createFormatContainer_1, createParagraph_1, createSelectionMarker_1, createTable_1, createTableCell_1, createText_1, createImage_1, createContentModelDocument_1, createParagraphDecorator_1, createGeneralSegment_1, createGeneralBlock_1, createEntity_1, createDivider_1, createListLevel_1, createEmptyModel_1, createTableRow_1, mutate_1, addBlock_1, addDecorators_1, addDecorators_2, addTextSegment_1, normalizeParagraph_1, normalizeContentModel_1, isGeneralSegment_1, unwrapBlock_1, addSegment_1, isEmpty_1, normalizeSegment_1, mergeTextSegments_1, normalizeSegmentFormat_1, setParagraphNotImplicit_1, copyFormat_1, getOrderedListNumberStr_1, getAutoListStyleType_1, parseValueWithUnit_1, borderFormatHandler_1, color_1, createDomToModelContext_1, createModelToDomContext_1, isBold_1, getSelectionRootNode_1, getDOMInsertPointRect_1, eventUtils_1, borderValues_1, stringUtil_1, parseTableCells_1, readFile_1, retrieveDocumentMetadata_1, transformColor_1, normalizeFontFamily_1, extractClipboardItems_1, cacheGetEventData_1, paragraphMarker_1, imageState_1, getRangesByText_1, isBlockGroupOfType_1, iterateSelections_1, collectSelections_1, getSelectedCells_1, hasSelectionInBlock_1, hasSelectionInSegment_1, hasSelectionInBlockGroup_1, setSelection_1, cloneModel_1, mergeModel_1, deleteSelection_1, deleteSegment_1, deleteBlock_1, applyTableFormat_1, normalizeTable_1, setTableCellBackgroundColor_1, retrieveModelFormatState_1, getListStyleTypeFromString_1, getSegmentTextFormat_1, getClosestAncestorBlockGroupIndex_1, runEditSteps_1, updateImageMetadata_1, updateTableCellMetadata_1, updateTableMetadata_1, updateListMetadata_1, ChangeSource_1, BulletListType_1, NumberingListType_1, TableBorderFormat_1, OrderedListStyleMap_1, UnorderedListStyleMap_1, EmptySegmentFormat_1) {
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = exports.runEditSteps = exports.getClosestAncestorBlockGroupIndex = exports.getSegmentTextFormat = exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_HEIGHT = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.setFirstColumnFormatBorders = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.isBlockGroupOfType = exports.getRangesByText = exports.getImageState = exports.setImageState = exports.getParagraphMarker = exports.setParagraphMarker = exports.cacheGetEventData = exports.extractClipboardItems = exports.normalizeFontFamily = exports.transformColor = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = exports.getDOMInsertPointRect = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.defaultGenerateColorKey = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.getAutoListStyleType = exports.getOrderedListNumberStr = exports.ParagraphFormats = exports.ListFormatsToMove = exports.ListFormatsToKeep = exports.ListFormats = exports.copyFormat = exports.setParagraphNotImplicit = exports.normalizeSegmentFormat = exports.mergeTextSegments = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addCode = exports.addBlock = exports.mutateSegment = exports.mutateSegments = exports.mutateBlock = exports.createTableRow = 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.isLinkUndeletable = exports.setLinkUndeletable = exports.scrollRectIntoView = 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.unwrap = exports.wrap = exports.wrapAllChildNodes = exports.moveChildNodes = exports.toArray = exports.getSafeIdSelector = exports.getObjectKeys = exports.isElementOfType = exports.isNodeOfType = exports.hasMetadata = exports.getMetadata = 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.EmptySegmentFormat = exports.UnorderedListStyleMap = exports.OrderedListStyleMap = exports.TableBorderFormat = exports.NumberingListType = exports.BulletListType = exports.ChangeSource = exports.ListMetadataDefinition = exports.getListMetadata = exports.updateListMetadata = exports.getTableMetadata = exports.updateTableMetadata = exports.getTableCellMetadata = exports.updateTableCellMetadata = exports.getImageMetadata = exports.updateImageMetadata = exports.runEditSteps = exports.getClosestAncestorBlockGroupIndex = exports.getSegmentTextFormat = exports.getListStyleTypeFromString = exports.retrieveModelFormatState = exports.setTableCellBackgroundColor = exports.MIN_ALLOWED_TABLE_CELL_HEIGHT = exports.MIN_ALLOWED_TABLE_CELL_WIDTH = exports.normalizeTable = exports.setFirstColumnFormatBorders = exports.applyTableFormat = exports.deleteBlock = exports.deleteSegment = exports.deleteSelection = exports.mergeModel = exports.cloneModel = exports.setSelection = exports.hasSelectionInBlockGroup = exports.hasSelectionInSegment = exports.hasSelectionInBlock = exports.getSelectedCells = exports.getSelectedSegmentsAndParagraphs = exports.getSelectedSegments = exports.getSelectedParagraphs = exports.getOperationalBlocks = exports.getFirstSelectedTable = exports.getFirstSelectedListItem = exports.iterateSelections = exports.isBlockGroupOfType = exports.getRangesByText = exports.getImageState = exports.setImageState = exports.getParagraphMarker = exports.setParagraphMarker = exports.cacheGetEventData = exports.extractClipboardItems = exports.normalizeFontFamily = exports.transformColor = exports.retrieveDocumentMetadata = exports.readFile = exports.parseTableCells = exports.normalizeText = exports.isSpace = exports.isPunctuation = exports.extractBorderValues = exports.combineBorderValue = exports.isCursorMovingKey = exports.isModifierKey = exports.isCharacterValue = exports.getDOMInsertPointRect = exports.getSelectionRootNode = exports.isBold = exports.createModelToDomConfig = exports.createModelToDomContextWithConfig = exports.createModelToDomContext = exports.createDomToModelConfig = exports.createDomToModelContextWithConfig = exports.createDomToModelContext = exports.defaultGenerateColorKey = exports.parseColor = exports.setColor = exports.getColor = exports.DeprecatedColors = exports.BorderKeys = exports.parseValueWithUnit = exports.getAutoListStyleType = exports.getOrderedListNumberStr = exports.ParagraphFormats = exports.ListFormatsToMove = exports.ListFormatsToKeep = exports.ListFormats = exports.copyFormat = exports.setParagraphNotImplicit = exports.normalizeSegmentFormat = exports.mergeTextSegments = exports.normalizeSingleSegment = exports.isEmpty = exports.addSegment = exports.unwrapBlock = exports.isGeneralSegment = exports.normalizeContentModel = exports.normalizeParagraph = exports.addTextSegment = exports.addLink = exports.addCode = exports.addBlock = exports.mutateSegment = exports.mutateSegments = exports.mutateBlock = exports.createTableRow = 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.isLinkUndeletable = exports.setLinkUndeletable = exports.scrollRectIntoView = 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.unwrap = exports.wrap = exports.wrapAllChildNodes = exports.moveChildNodes = exports.toArray = exports.getSafeIdSelector = exports.getObjectKeys = exports.isElementOfType = exports.isNodeOfType = exports.hasMetadata = exports.getMetadata = 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;
5
5
  Object.defineProperty(exports, "domToContentModel", { enumerable: true, get: function () { return domToContentModel_1.domToContentModel; } });
6
6
  Object.defineProperty(exports, "contentModelToDom", { enumerable: true, get: function () { return contentModelToDom_1.contentModelToDom; } });
7
7
  Object.defineProperty(exports, "contentModelToText", { enumerable: true, get: function () { return contentModelToText_1.contentModelToText; } });
@@ -110,6 +110,7 @@ define(["require", "exports", "./domToModel/domToContentModel", "./modelToDom/co
110
110
  Object.defineProperty(exports, "normalizeText", { enumerable: true, get: function () { return stringUtil_1.normalizeText; } });
111
111
  Object.defineProperty(exports, "parseTableCells", { enumerable: true, get: function () { return parseTableCells_1.parseTableCells; } });
112
112
  Object.defineProperty(exports, "readFile", { enumerable: true, get: function () { return readFile_1.readFile; } });
113
+ Object.defineProperty(exports, "retrieveDocumentMetadata", { enumerable: true, get: function () { return retrieveDocumentMetadata_1.retrieveDocumentMetadata; } });
113
114
  Object.defineProperty(exports, "transformColor", { enumerable: true, get: function () { return transformColor_1.transformColor; } });
114
115
  Object.defineProperty(exports, "normalizeFontFamily", { enumerable: true, get: function () { return normalizeFontFamily_1.normalizeFontFamily; } });
115
116
  Object.defineProperty(exports, "extractClipboardItems", { enumerable: true, get: function () { return extractClipboardItems_1.extractClipboardItems; } });
@@ -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, getMetadata, hasMetadata } from './modelApi/metadata/updateMetadata';\nexport { isNodeOfType } from './domUtils/isNodeOfType';\nexport { isElementOfType } from './domUtils/isElementOfType';\nexport { getObjectKeys } from './domUtils/getObjectKeys';\nexport { getSafeIdSelector } from './domUtils/getSafeIdSelector';\nexport { toArray } from './domUtils/toArray';\nexport { moveChildNodes, wrapAllChildNodes } from './domUtils/moveChildNodes';\nexport { wrap } from './domUtils/wrap';\nexport { unwrap } from './domUtils/unwrap';\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';\nexport { scrollRectIntoView } from './domUtils/scrollRectIntoView';\n\nexport { setLinkUndeletable, isLinkUndeletable } from './domUtils/hiddenProperties/undeletableLink';\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';\nexport { createTableRow } from './modelApi/creators/createTableRow';\n\nexport { mutateBlock, mutateSegments, mutateSegment } from './modelApi/common/mutate';\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';\nexport { mergeTextSegments } from './modelApi/common/mergeTextSegments';\nexport { normalizeSegmentFormat } from './modelApi/common/normalizeSegmentFormat';\n\nexport { setParagraphNotImplicit } from './modelApi/block/setParagraphNotImplicit';\nexport {\n copyFormat,\n ListFormats,\n ListFormatsToKeep,\n ListFormatsToMove,\n ParagraphFormats,\n} from './modelApi/block/copyFormat';\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 {\n DeprecatedColors,\n getColor,\n setColor,\n parseColor,\n defaultGenerateColorKey,\n} 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 { getDOMInsertPointRect } from './domUtils/selection/getDOMInsertPointRect';\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 { normalizeFontFamily } from './domUtils/style/normalizeFontFamily';\nexport { extractClipboardItems } from './domUtils/event/extractClipboardItems';\nexport { cacheGetEventData } from './domUtils/event/cacheGetEventData';\nexport {\n setParagraphMarker,\n getParagraphMarker,\n} from './domUtils/hiddenProperties/paragraphMarker';\nexport { setImageState, getImageState } from './domUtils/hiddenProperties/imageState';\nexport { getRangesByText } from './domUtils/getRangesByText';\n\nexport { isBlockGroupOfType } from './modelApi/typeCheck/isBlockGroupOfType';\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, setFirstColumnFormatBorders } from './modelApi/editing/applyTableFormat';\nexport {\n normalizeTable,\n MIN_ALLOWED_TABLE_CELL_WIDTH,\n MIN_ALLOWED_TABLE_CELL_HEIGHT,\n} 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';\nexport { getClosestAncestorBlockGroupIndex } from './modelApi/editing/getClosestAncestorBlockGroupIndex';\nexport { runEditSteps } from './modelApi/editing/runEditSteps';\n\nexport { updateImageMetadata, getImageMetadata } from './modelApi/metadata/updateImageMetadata';\nexport {\n updateTableCellMetadata,\n getTableCellMetadata,\n} from './modelApi/metadata/updateTableCellMetadata';\nexport { updateTableMetadata, getTableMetadata } from './modelApi/metadata/updateTableMetadata';\nexport {\n updateListMetadata,\n getListMetadata,\n ListMetadataDefinition,\n} 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';\nexport { EmptySegmentFormat } from './constants/EmptySegmentFormat';\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, getMetadata, hasMetadata } from './modelApi/metadata/updateMetadata';\nexport { isNodeOfType } from './domUtils/isNodeOfType';\nexport { isElementOfType } from './domUtils/isElementOfType';\nexport { getObjectKeys } from './domUtils/getObjectKeys';\nexport { getSafeIdSelector } from './domUtils/getSafeIdSelector';\nexport { toArray } from './domUtils/toArray';\nexport { moveChildNodes, wrapAllChildNodes } from './domUtils/moveChildNodes';\nexport { wrap } from './domUtils/wrap';\nexport { unwrap } from './domUtils/unwrap';\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';\nexport { scrollRectIntoView } from './domUtils/scrollRectIntoView';\n\nexport { setLinkUndeletable, isLinkUndeletable } from './domUtils/hiddenProperties/undeletableLink';\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';\nexport { createTableRow } from './modelApi/creators/createTableRow';\n\nexport { mutateBlock, mutateSegments, mutateSegment } from './modelApi/common/mutate';\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';\nexport { mergeTextSegments } from './modelApi/common/mergeTextSegments';\nexport { normalizeSegmentFormat } from './modelApi/common/normalizeSegmentFormat';\n\nexport { setParagraphNotImplicit } from './modelApi/block/setParagraphNotImplicit';\nexport {\n copyFormat,\n ListFormats,\n ListFormatsToKeep,\n ListFormatsToMove,\n ParagraphFormats,\n} from './modelApi/block/copyFormat';\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 {\n DeprecatedColors,\n getColor,\n setColor,\n parseColor,\n defaultGenerateColorKey,\n} 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 { getDOMInsertPointRect } from './domUtils/selection/getDOMInsertPointRect';\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 { retrieveDocumentMetadata } from './domUtils/retrieveDocumentMetadata';\nexport { transformColor } from './domUtils/style/transformColor';\nexport { normalizeFontFamily } from './domUtils/style/normalizeFontFamily';\nexport { extractClipboardItems } from './domUtils/event/extractClipboardItems';\nexport { cacheGetEventData } from './domUtils/event/cacheGetEventData';\nexport {\n setParagraphMarker,\n getParagraphMarker,\n} from './domUtils/hiddenProperties/paragraphMarker';\nexport { setImageState, getImageState } from './domUtils/hiddenProperties/imageState';\nexport { getRangesByText } from './domUtils/getRangesByText';\n\nexport { isBlockGroupOfType } from './modelApi/typeCheck/isBlockGroupOfType';\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, setFirstColumnFormatBorders } from './modelApi/editing/applyTableFormat';\nexport {\n normalizeTable,\n MIN_ALLOWED_TABLE_CELL_WIDTH,\n MIN_ALLOWED_TABLE_CELL_HEIGHT,\n} 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';\nexport { getClosestAncestorBlockGroupIndex } from './modelApi/editing/getClosestAncestorBlockGroupIndex';\nexport { runEditSteps } from './modelApi/editing/runEditSteps';\n\nexport { updateImageMetadata, getImageMetadata } from './modelApi/metadata/updateImageMetadata';\nexport {\n updateTableCellMetadata,\n getTableCellMetadata,\n} from './modelApi/metadata/updateTableCellMetadata';\nexport { updateTableMetadata, getTableMetadata } from './modelApi/metadata/updateTableMetadata';\nexport {\n updateListMetadata,\n getListMetadata,\n ListMetadataDefinition,\n} 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';\nexport { EmptySegmentFormat } from './constants/EmptySegmentFormat';\n"]}
@@ -1,4 +1,4 @@
1
- define(["require", "exports", "../../domUtils/isNodeOfType"], function (require, exports, isNodeOfType_1) {
1
+ define(["require", "exports", "../utils/cleanUpRestNodes"], function (require, exports, cleanUpRestNodes_1) {
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.handleBlockGroupChildren = void 0;
@@ -6,7 +6,6 @@ define(["require", "exports", "../../domUtils/isNodeOfType"], function (require,
6
6
  * @internal
7
7
  */
8
8
  var handleBlockGroupChildren = function (doc, parent, group, context) {
9
- var _a;
10
9
  var listFormat = context.listFormat;
11
10
  var nodeStack = listFormat.nodeStack;
12
11
  var refNode = parent.firstChild;
@@ -20,27 +19,34 @@ define(["require", "exports", "../../domUtils/isNodeOfType"], function (require,
20
19
  if (index == 0 ||
21
20
  childBlock.blockType != 'BlockGroup' ||
22
21
  childBlock.blockGroupType != 'ListItem') {
23
- listFormat.nodeStack = [];
22
+ cleanUpNodeStack(listFormat.nodeStack, context);
23
+ if (listFormat.nodeStack.length > 0) {
24
+ listFormat.nodeStack = [];
25
+ }
24
26
  }
25
27
  refNode = context.modelHandlers.block(doc, parent, childBlock, context, refNode);
26
28
  if (childBlock.blockType == 'Entity') {
27
29
  (_a = context.domIndexer) === null || _a === void 0 ? void 0 : _a.onBlockEntity(childBlock, group);
28
30
  }
29
31
  });
32
+ cleanUpNodeStack(listFormat.nodeStack, context);
30
33
  // Remove all rest node if any since they don't appear in content model
31
- while (refNode) {
32
- var next = refNode.nextSibling;
33
- if ((0, isNodeOfType_1.isNodeOfType)(refNode, 'ELEMENT_NODE')) {
34
- context.rewriteFromModel.removedBlockElements.push(refNode);
35
- }
36
- (_a = refNode.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(refNode);
37
- refNode = next;
38
- }
34
+ (0, cleanUpRestNodes_1.cleanUpRestNodes)(refNode, context.rewriteFromModel);
39
35
  }
40
36
  finally {
41
37
  listFormat.nodeStack = nodeStack;
42
38
  }
43
39
  };
44
40
  exports.handleBlockGroupChildren = handleBlockGroupChildren;
41
+ function cleanUpNodeStack(nodeStack, context) {
42
+ var _a, _b;
43
+ if (context.allowCacheListItem && nodeStack.length > 0) {
44
+ // Clear list stack, only run to nodeStack[1] because nodeStack[0] is the parent node
45
+ for (var i = nodeStack.length - 1; i > 0; i--) {
46
+ var node = (_b = (_a = nodeStack.pop()) === null || _a === void 0 ? void 0 : _a.refNode) !== null && _b !== void 0 ? _b : null;
47
+ (0, cleanUpRestNodes_1.cleanUpRestNodes)(node, context.rewriteFromModel);
48
+ }
49
+ }
50
+ }
45
51
  });
46
52
  //# sourceMappingURL=handleBlockGroupChildren.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handleBlockGroupChildren.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlockGroupChildren.ts"],"names":[],"mappings":";;;;IAOA;;OAEG;IACI,IAAM,wBAAwB,GAAgD,UACjF,GAAa,EACb,MAAY,EACZ,KAA6B,EAC7B,OAA0B;;QAElB,IAAA,UAAU,GAAK,OAAO,WAAZ,CAAa;QAC/B,IAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;QACvC,IAAI,OAAO,GAAgB,MAAM,CAAC,UAAU,CAAC;QAE7C,IAAI;YACA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,UAAU,EAAE,KAAK;;gBACnC,2CAA2C;gBAC3C,wEAAwE;gBACxE,sFAAsF;gBACtF,+FAA+F;gBAC/F,IACI,KAAK,IAAI,CAAC;oBACV,UAAU,CAAC,SAAS,IAAI,YAAY;oBACpC,UAAU,CAAC,cAAc,IAAI,UAAU,EACzC;oBACE,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC;iBAC7B;gBAED,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAEjF,IAAI,UAAU,CAAC,SAAS,IAAI,QAAQ,EAAE;oBAClC,MAAA,OAAO,CAAC,UAAU,0CAAE,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;iBACxD;YACL,CAAC,CAAC,CAAC;YAEH,uEAAuE;YACvE,OAAO,OAAO,EAAE;gBACZ,IAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;gBAEjC,IAAI,IAAA,2BAAY,EAAC,OAAO,EAAE,cAAc,CAAC,EAAE;oBACvC,OAAO,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBAC/D;gBAED,MAAA,OAAO,CAAC,UAAU,0CAAE,WAAW,CAAC,OAAO,CAAC,CAAC;gBACzC,OAAO,GAAG,IAAI,CAAC;aAClB;SACJ;gBAAS;YACN,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;SACpC;IACL,CAAC,CAAC;IA7CW,QAAA,wBAAwB,4BA6CnC","sourcesContent":["import { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport type {\n ContentModelBlockGroup,\n ContentModelHandler,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleBlockGroupChildren: ContentModelHandler<ContentModelBlockGroup> = (\n doc: Document,\n parent: Node,\n group: ContentModelBlockGroup,\n context: ModelToDomContext\n) => {\n const { listFormat } = context;\n const nodeStack = listFormat.nodeStack;\n let refNode: Node | null = parent.firstChild;\n\n try {\n group.blocks.forEach((childBlock, index) => {\n // When process list, we need a node stack.\n // When there are two continuous lists, they should share the same stack\n // so that list items with same type/threadId can be merged into the same list element\n // In other cases, clear the stack so that two separate lists won't share the same list element\n if (\n index == 0 ||\n childBlock.blockType != 'BlockGroup' ||\n childBlock.blockGroupType != 'ListItem'\n ) {\n listFormat.nodeStack = [];\n }\n\n refNode = context.modelHandlers.block(doc, parent, childBlock, context, refNode);\n\n if (childBlock.blockType == 'Entity') {\n context.domIndexer?.onBlockEntity(childBlock, group);\n }\n });\n\n // Remove all rest node if any since they don't appear in content model\n while (refNode) {\n const next = refNode.nextSibling;\n\n if (isNodeOfType(refNode, 'ELEMENT_NODE')) {\n context.rewriteFromModel.removedBlockElements.push(refNode);\n }\n\n refNode.parentNode?.removeChild(refNode);\n refNode = next;\n }\n } finally {\n listFormat.nodeStack = nodeStack;\n }\n};\n"]}
1
+ {"version":3,"file":"handleBlockGroupChildren.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleBlockGroupChildren.ts"],"names":[],"mappings":";;;;IAQA;;OAEG;IACI,IAAM,wBAAwB,GAAgD,UACjF,GAAa,EACb,MAAY,EACZ,KAA6B,EAC7B,OAA0B;QAElB,IAAA,UAAU,GAAK,OAAO,WAAZ,CAAa;QAC/B,IAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;QACvC,IAAI,OAAO,GAAgB,MAAM,CAAC,UAAU,CAAC;QAE7C,IAAI;YACA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,UAAU,EAAE,KAAK;;gBACnC,2CAA2C;gBAC3C,wEAAwE;gBACxE,sFAAsF;gBACtF,+FAA+F;gBAC/F,IACI,KAAK,IAAI,CAAC;oBACV,UAAU,CAAC,SAAS,IAAI,YAAY;oBACpC,UAAU,CAAC,cAAc,IAAI,UAAU,EACzC;oBACE,gBAAgB,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBAEhD,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;wBACjC,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC;qBAC7B;iBACJ;gBAED,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAEjF,IAAI,UAAU,CAAC,SAAS,IAAI,QAAQ,EAAE;oBAClC,MAAA,OAAO,CAAC,UAAU,0CAAE,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;iBACxD;YACL,CAAC,CAAC,CAAC;YAEH,gBAAgB,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAEhD,uEAAuE;YACvE,IAAA,mCAAgB,EAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;SACvD;gBAAS;YACN,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;SACpC;IACL,CAAC,CAAC;IA1CW,QAAA,wBAAwB,4BA0CnC;IAEF,SAAS,gBAAgB,CAAC,SAAoC,EAAE,OAA0B;;QACtF,IAAI,OAAO,CAAC,kBAAkB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACpD,qFAAqF;YACrF,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAM,IAAI,GAAG,MAAA,MAAA,SAAS,CAAC,GAAG,EAAE,0CAAE,OAAO,mCAAI,IAAI,CAAC;gBAE9C,IAAA,mCAAgB,EAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;aACpD;SACJ;IACL,CAAC","sourcesContent":["import { cleanUpRestNodes } from '../utils/cleanUpRestNodes';\nimport type {\n ContentModelBlockGroup,\n ContentModelHandler,\n ModelToDomContext,\n ModelToDomListStackItem,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleBlockGroupChildren: ContentModelHandler<ContentModelBlockGroup> = (\n doc: Document,\n parent: Node,\n group: ContentModelBlockGroup,\n context: ModelToDomContext\n) => {\n const { listFormat } = context;\n const nodeStack = listFormat.nodeStack;\n let refNode: Node | null = parent.firstChild;\n\n try {\n group.blocks.forEach((childBlock, index) => {\n // When process list, we need a node stack.\n // When there are two continuous lists, they should share the same stack\n // so that list items with same type/threadId can be merged into the same list element\n // In other cases, clear the stack so that two separate lists won't share the same list element\n if (\n index == 0 ||\n childBlock.blockType != 'BlockGroup' ||\n childBlock.blockGroupType != 'ListItem'\n ) {\n cleanUpNodeStack(listFormat.nodeStack, context);\n\n if (listFormat.nodeStack.length > 0) {\n listFormat.nodeStack = [];\n }\n }\n\n refNode = context.modelHandlers.block(doc, parent, childBlock, context, refNode);\n\n if (childBlock.blockType == 'Entity') {\n context.domIndexer?.onBlockEntity(childBlock, group);\n }\n });\n\n cleanUpNodeStack(listFormat.nodeStack, context);\n\n // Remove all rest node if any since they don't appear in content model\n cleanUpRestNodes(refNode, context.rewriteFromModel);\n } finally {\n listFormat.nodeStack = nodeStack;\n }\n};\n\nfunction cleanUpNodeStack(nodeStack: ModelToDomListStackItem[], context: ModelToDomContext) {\n if (context.allowCacheListItem && nodeStack.length > 0) {\n // Clear list stack, only run to nodeStack[1] because nodeStack[0] is the parent node\n for (let i = nodeStack.length - 1; i > 0; i--) {\n const node = nodeStack.pop()?.refNode ?? null;\n\n cleanUpRestNodes(node, context.rewriteFromModel);\n }\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- define(["require", "exports", "tslib", "../utils/applyFormat", "../utils/applyMetadata"], function (require, exports, tslib_1, applyFormat_1, applyMetadata_1) {
1
+ define(["require", "exports", "tslib", "../utils/applyFormat", "../utils/applyMetadata", "../utils/cleanUpRestNodes", "../../domUtils/reuseCachedElement"], function (require, exports, tslib_1, applyFormat_1, applyMetadata_1, cleanUpRestNodes_1, reuseCachedElement_1) {
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.handleList = void 0;
@@ -6,16 +6,18 @@ define(["require", "exports", "tslib", "../utils/applyFormat", "../utils/applyMe
6
6
  * @internal
7
7
  */
8
8
  var handleList = function (doc, parent, listItem, context, refNode) {
9
- var _a, _b, _c;
9
+ var _a, _b, _c, _d;
10
10
  var layer = 0;
11
11
  var nodeStack = context.listFormat.nodeStack;
12
12
  if (nodeStack.length == 0) {
13
13
  nodeStack.push({
14
14
  node: parent,
15
+ refNode: refNode,
15
16
  });
16
17
  }
17
18
  // Skip existing list levels that has same properties so we can reuse them
18
19
  for (; layer < listItem.levels.length && layer + 1 < nodeStack.length; layer++) {
20
+ var parentLevel = nodeStack[layer];
19
21
  var stackLevel = nodeStack[layer + 1];
20
22
  var itemLevel = listItem.levels[layer];
21
23
  if (stackLevel.listType != itemLevel.listType ||
@@ -26,30 +28,66 @@ define(["require", "exports", "tslib", "../utils/applyFormat", "../utils/applyMe
26
28
  itemLevel.format.listStyleType != ((_b = stackLevel.format) === null || _b === void 0 ? void 0 : _b.listStyleType))) {
27
29
  break;
28
30
  }
31
+ if (context.allowCacheListItem &&
32
+ parentLevel.refNode &&
33
+ itemLevel.cachedElement == parentLevel.refNode) {
34
+ // Move refNode to next node since we are reusing this cached element
35
+ parentLevel.refNode = parentLevel.refNode.nextSibling;
36
+ }
29
37
  }
30
38
  // Cut off remained list levels that we can't reuse
39
+ if (context.allowCacheListItem) {
40
+ // Clean up all rest nodes in the reused list levels
41
+ for (var i = layer + 1; i < nodeStack.length; i++) {
42
+ var stackLevel = nodeStack[i];
43
+ (0, cleanUpRestNodes_1.cleanUpRestNodes)(stackLevel.refNode, context.rewriteFromModel);
44
+ }
45
+ }
31
46
  nodeStack.splice(layer + 1);
32
47
  // Create new list levels that are after reused ones
33
48
  for (; layer < listItem.levels.length; layer++) {
34
49
  var level = listItem.levels[layer];
35
- var newList = doc.createElement(level.listType || 'UL');
36
50
  var lastParent = nodeStack[nodeStack.length - 1].node;
37
- lastParent.insertBefore(newList, layer == 0 ? refNode : null);
38
- nodeStack.push({
39
- node: newList,
40
- listType: level.listType,
41
- format: (0, tslib_1.__assign)({}, level.format),
42
- dataset: (0, tslib_1.__assign)({}, level.dataset),
43
- });
51
+ var newList = void 0;
52
+ var isNewlyCreated = false;
53
+ var levelRefNode = (_c = nodeStack[layer].refNode) !== null && _c !== void 0 ? _c : null;
54
+ if (context.allowCacheListItem && level.cachedElement) {
55
+ newList = level.cachedElement;
56
+ nodeStack[layer].refNode = (0, reuseCachedElement_1.reuseCachedElement)(lastParent, level.cachedElement, levelRefNode, context.rewriteFromModel);
57
+ nodeStack.push({
58
+ node: newList,
59
+ refNode: newList.firstChild,
60
+ listType: level.listType,
61
+ format: (0, tslib_1.__assign)({}, level.format),
62
+ dataset: (0, tslib_1.__assign)({}, level.dataset),
63
+ });
64
+ }
65
+ else {
66
+ newList = doc.createElement(level.listType == 'OL' ? 'ol' : 'ul');
67
+ isNewlyCreated = true;
68
+ lastParent.insertBefore(newList, levelRefNode);
69
+ nodeStack.push({
70
+ node: newList,
71
+ refNode: null,
72
+ listType: level.listType,
73
+ format: (0, tslib_1.__assign)({}, level.format),
74
+ dataset: (0, tslib_1.__assign)({}, level.dataset),
75
+ });
76
+ if (context.allowCacheListItem) {
77
+ level.cachedElement = newList;
78
+ }
79
+ }
44
80
  (0, applyFormat_1.applyFormat)(newList, context.formatAppliers.listLevelThread, level.format, context);
45
81
  // Need to apply metadata after applying list level format since the list numbers value relies on the result of list thread handling
46
82
  (0, applyMetadata_1.applyMetadata)(level, context.metadataAppliers.listLevel, level.format, context);
47
83
  // Need to apply listItemElement formats after applying metadata since the list numbers value relies on the result of metadata handling
48
84
  (0, applyFormat_1.applyFormat)(newList, context.formatAppliers.listLevel, level.format, context);
49
85
  (0, applyFormat_1.applyFormat)(newList, context.formatAppliers.dataset, level.dataset, context);
50
- (_c = context.onNodeCreated) === null || _c === void 0 ? void 0 : _c.call(context, level, newList);
86
+ if (isNewlyCreated) {
87
+ (_d = context.onNodeCreated) === null || _d === void 0 ? void 0 : _d.call(context, level, newList);
88
+ }
51
89
  }
52
- return refNode;
90
+ return nodeStack[0].refNode;
53
91
  };
54
92
  exports.handleList = handleList;
55
93
  });
@@ -1 +1 @@
1
- {"version":3,"file":"handleList.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleList.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyFormat } from '../utils/applyFormat';\nimport { applyMetadata } from '../utils/applyMetadata';\nimport type {\n ContentModelBlockHandler,\n ContentModelListItem,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleList: ContentModelBlockHandler<ContentModelListItem> = (\n doc: Document,\n parent: Node,\n listItem: ContentModelListItem,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n let layer = 0;\n const { nodeStack } = context.listFormat;\n\n if (nodeStack.length == 0) {\n nodeStack.push({\n node: parent,\n });\n }\n\n // Skip existing list levels that has same properties so we can reuse them\n for (; layer < listItem.levels.length && layer + 1 < nodeStack.length; layer++) {\n const stackLevel = nodeStack[layer + 1];\n const itemLevel = listItem.levels[layer];\n\n if (\n stackLevel.listType != itemLevel.listType ||\n stackLevel.dataset?.editingInfo != itemLevel.dataset.editingInfo ||\n (itemLevel.listType == 'OL' &&\n typeof itemLevel.format.startNumberOverride === 'number') ||\n (itemLevel.listType == 'UL' &&\n itemLevel.format.listStyleType != stackLevel.format?.listStyleType)\n ) {\n break;\n }\n }\n\n // Cut off remained list levels that we can't reuse\n nodeStack.splice(layer + 1);\n\n // Create new list levels that are after reused ones\n for (; layer < listItem.levels.length; layer++) {\n const level = listItem.levels[layer];\n const newList = doc.createElement(level.listType || 'UL');\n const lastParent = nodeStack[nodeStack.length - 1].node;\n\n lastParent.insertBefore(newList, layer == 0 ? refNode : null);\n nodeStack.push({\n node: newList,\n listType: level.listType,\n format: { ...level.format },\n dataset: { ...level.dataset },\n });\n\n applyFormat(newList, context.formatAppliers.listLevelThread, level.format, context);\n\n // Need to apply metadata after applying list level format since the list numbers value relies on the result of list thread handling\n applyMetadata(level, context.metadataAppliers.listLevel, level.format, context);\n\n // Need to apply listItemElement formats after applying metadata since the list numbers value relies on the result of metadata handling\n applyFormat(newList, context.formatAppliers.listLevel, level.format, context);\n applyFormat(newList, context.formatAppliers.dataset, level.dataset, context);\n\n context.onNodeCreated?.(level, newList);\n }\n\n return refNode;\n};\n"]}
1
+ {"version":3,"file":"handleList.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleList.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyFormat } from '../utils/applyFormat';\nimport { applyMetadata } from '../utils/applyMetadata';\nimport { cleanUpRestNodes } from '../utils/cleanUpRestNodes';\nimport { reuseCachedElement } from '../../domUtils/reuseCachedElement';\nimport type {\n ContentModelBlockHandler,\n ContentModelListItem,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleList: ContentModelBlockHandler<ContentModelListItem> = (\n doc: Document,\n parent: Node,\n listItem: ContentModelListItem,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n let layer = 0;\n const { nodeStack } = context.listFormat;\n\n if (nodeStack.length == 0) {\n nodeStack.push({\n node: parent,\n refNode,\n });\n }\n\n // Skip existing list levels that has same properties so we can reuse them\n for (; layer < listItem.levels.length && layer + 1 < nodeStack.length; layer++) {\n const parentLevel = nodeStack[layer];\n const stackLevel = nodeStack[layer + 1];\n const itemLevel = listItem.levels[layer];\n\n if (\n stackLevel.listType != itemLevel.listType ||\n stackLevel.dataset?.editingInfo != itemLevel.dataset.editingInfo ||\n (itemLevel.listType == 'OL' &&\n typeof itemLevel.format.startNumberOverride === 'number') ||\n (itemLevel.listType == 'UL' &&\n itemLevel.format.listStyleType != stackLevel.format?.listStyleType)\n ) {\n break;\n }\n\n if (\n context.allowCacheListItem &&\n parentLevel.refNode &&\n itemLevel.cachedElement == parentLevel.refNode\n ) {\n // Move refNode to next node since we are reusing this cached element\n parentLevel.refNode = parentLevel.refNode.nextSibling;\n }\n }\n\n // Cut off remained list levels that we can't reuse\n if (context.allowCacheListItem) {\n // Clean up all rest nodes in the reused list levels\n for (let i = layer + 1; i < nodeStack.length; i++) {\n const stackLevel = nodeStack[i];\n\n cleanUpRestNodes(stackLevel.refNode, context.rewriteFromModel);\n }\n }\n\n nodeStack.splice(layer + 1);\n\n // Create new list levels that are after reused ones\n for (; layer < listItem.levels.length; layer++) {\n const level = listItem.levels[layer];\n const lastParent = nodeStack[nodeStack.length - 1].node;\n\n let newList: HTMLOListElement | HTMLUListElement;\n let isNewlyCreated = false;\n const levelRefNode = nodeStack[layer].refNode ?? null;\n\n if (context.allowCacheListItem && level.cachedElement) {\n newList = level.cachedElement;\n\n nodeStack[layer].refNode = reuseCachedElement(\n lastParent,\n level.cachedElement,\n levelRefNode,\n context.rewriteFromModel\n );\n nodeStack.push({\n node: newList,\n refNode: newList.firstChild,\n listType: level.listType,\n format: { ...level.format },\n dataset: { ...level.dataset },\n });\n } else {\n newList = doc.createElement(level.listType == 'OL' ? 'ol' : 'ul');\n isNewlyCreated = true;\n\n lastParent.insertBefore(newList, levelRefNode);\n nodeStack.push({\n node: newList,\n refNode: null,\n listType: level.listType,\n format: { ...level.format },\n dataset: { ...level.dataset },\n });\n\n if (context.allowCacheListItem) {\n level.cachedElement = newList;\n }\n }\n\n applyFormat(newList, context.formatAppliers.listLevelThread, level.format, context);\n\n // Need to apply metadata after applying list level format since the list numbers value relies on the result of list thread handling\n applyMetadata(level, context.metadataAppliers.listLevel, level.format, context);\n\n // Need to apply listItemElement formats after applying metadata since the list numbers value relies on the result of metadata handling\n applyFormat(newList, context.formatAppliers.listLevel, level.format, context);\n applyFormat(newList, context.formatAppliers.dataset, level.dataset, context);\n\n if (isNewlyCreated) {\n context.onNodeCreated?.(level, newList);\n }\n }\n\n return nodeStack[0].refNode;\n};\n"]}
@@ -1,4 +1,4 @@
1
- define(["require", "exports", "../utils/applyFormat", "../utils/applyMetadata", "../../domUtils/isGenericRoleElement", "../../modelApi/block/setParagraphNotImplicit", "../utils/stackFormat", "../../domUtils/unwrap"], function (require, exports, applyFormat_1, applyMetadata_1, isGenericRoleElement_1, setParagraphNotImplicit_1, stackFormat_1, unwrap_1) {
1
+ define(["require", "exports", "../utils/applyFormat", "../utils/applyMetadata", "../../domUtils/isGenericRoleElement", "../../domUtils/reuseCachedElement", "../../modelApi/block/setParagraphNotImplicit", "../utils/stackFormat", "../../domUtils/unwrap"], function (require, exports, applyFormat_1, applyMetadata_1, isGenericRoleElement_1, reuseCachedElement_1, setParagraphNotImplicit_1, stackFormat_1, unwrap_1) {
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.handleListItem = void 0;
@@ -11,13 +11,35 @@ define(["require", "exports", "../utils/applyFormat", "../utils/applyMetadata",
11
11
  var _a, _b;
12
12
  refNode = context.modelHandlers.list(doc, parent, listItem, context, refNode);
13
13
  var nodeStack = context.listFormat.nodeStack;
14
- var listParent = ((_a = nodeStack === null || nodeStack === void 0 ? void 0 : nodeStack[(nodeStack === null || nodeStack === void 0 ? void 0 : nodeStack.length) - 1]) === null || _a === void 0 ? void 0 : _a.node) || parent;
15
- var li = doc.createElement('li');
14
+ var leafLevel = (_a = nodeStack === null || nodeStack === void 0 ? void 0 : nodeStack[nodeStack.length - 1]) !== null && _a !== void 0 ? _a : {};
15
+ var itemRefNode = leafLevel.refNode || null;
16
+ var listParent = leafLevel.node || parent;
16
17
  var level = listItem.levels[listItem.levels.length - 1];
17
- // It is possible listParent is the same with parent param.
18
- // This happens when outdent a list item to cause it has no list level
19
- listParent.insertBefore(li, (refNode === null || refNode === void 0 ? void 0 : refNode.parentNode) == listParent ? refNode : null);
20
- context.rewriteFromModel.addedBlockElements.push(li);
18
+ var li;
19
+ var isNewlyCreated = false;
20
+ if (context.allowCacheListItem && listItem.cachedElement) {
21
+ li = listItem.cachedElement;
22
+ // Check if the cached LI is used as refNode under another list level,
23
+ // since we know we are going to move it under the current listParent,
24
+ // we need to update the refNode of the previous list level to avoid removing it later
25
+ for (var i = 0; i < nodeStack.length - 1; i++) {
26
+ if (nodeStack[i].refNode === li) {
27
+ nodeStack[i].refNode = li.nextSibling;
28
+ }
29
+ }
30
+ leafLevel.refNode = (0, reuseCachedElement_1.reuseCachedElement)(listParent, li, itemRefNode, context.rewriteFromModel);
31
+ }
32
+ else {
33
+ li = doc.createElement('li');
34
+ isNewlyCreated = true;
35
+ // It is possible listParent is the same with parent param.
36
+ // This happens when outdent a list item to cause it has no list level
37
+ listParent.insertBefore(li, (itemRefNode === null || itemRefNode === void 0 ? void 0 : itemRefNode.parentNode) == listParent ? itemRefNode : null);
38
+ context.rewriteFromModel.addedBlockElements.push(li);
39
+ if (context.allowCacheListItem) {
40
+ listItem.cachedElement = li;
41
+ }
42
+ }
21
43
  if (level) {
22
44
  (0, applyFormat_1.applyFormat)(li, context.formatAppliers.segment, listItem.formatHolder.format, context);
23
45
  (0, applyFormat_1.applyFormat)(li, context.formatAppliers.listItemThread, level.format, context);
@@ -45,7 +67,9 @@ define(["require", "exports", "../utils/applyFormat", "../utils/applyMetadata",
45
67
  element.setAttribute(HtmlRoleAttribute, PresentationRoleValue);
46
68
  }
47
69
  }
48
- (_b = context.onNodeCreated) === null || _b === void 0 ? void 0 : _b.call(context, listItem, li);
70
+ if (isNewlyCreated) {
71
+ (_b = context.onNodeCreated) === null || _b === void 0 ? void 0 : _b.call(context, listItem, li);
72
+ }
49
73
  return refNode;
50
74
  };
51
75
  exports.handleListItem = handleListItem;
@@ -1 +1 @@
1
- {"version":3,"file":"handleListItem.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleListItem.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyFormat } from '../utils/applyFormat';\nimport { applyMetadata } from '../utils/applyMetadata';\nimport { isGenericRoleElement } from '../../domUtils/isGenericRoleElement';\nimport { setParagraphNotImplicit } from '../../modelApi/block/setParagraphNotImplicit';\nimport { stackFormat } from '../utils/stackFormat';\nimport { unwrap } from '../../domUtils/unwrap';\nimport type {\n ContentModelBlockHandler,\n ContentModelListItem,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\nconst HtmlRoleAttribute = 'role';\nconst PresentationRoleValue = 'presentation';\n\n/**\n * @internal\n */\nexport const handleListItem: ContentModelBlockHandler<ContentModelListItem> = (\n doc: Document,\n parent: Node,\n listItem: ContentModelListItem,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n refNode = context.modelHandlers.list(doc, parent, listItem, context, refNode);\n\n const { nodeStack } = context.listFormat;\n\n const listParent = nodeStack?.[nodeStack?.length - 1]?.node || parent;\n const li = doc.createElement('li');\n const level = listItem.levels[listItem.levels.length - 1];\n\n // It is possible listParent is the same with parent param.\n // This happens when outdent a list item to cause it has no list level\n listParent.insertBefore(li, refNode?.parentNode == listParent ? refNode : null);\n context.rewriteFromModel.addedBlockElements.push(li);\n\n if (level) {\n applyFormat(li, context.formatAppliers.segment, listItem.formatHolder.format, context);\n applyFormat(li, context.formatAppliers.listItemThread, level.format, context);\n\n // Need to apply metadata after applying listItem format since the list numbers value relies on the result of list thread handling\n applyMetadata(level, context.metadataAppliers.listItem, listItem.format, context);\n\n // Need to apply listItemElement formats after applying metadata since the list numbers value relies on the result of metadata handling\n applyFormat(li, context.formatAppliers.listItemElement, listItem.format, context);\n\n stackFormat(context, listItem.formatHolder.format, () => {\n context.modelHandlers.blockGroupChildren(doc, li, listItem, context);\n });\n } else {\n // There is no level for this list item, that means it should be moved out of the list\n // For each paragraph, make it not implicit so it will have a DIV around it, to avoid more paragraphs connected together\n listItem.blocks.forEach(setParagraphNotImplicit);\n\n context.modelHandlers.blockGroupChildren(doc, li, listItem, context);\n\n unwrap(li);\n }\n\n // Add role=\"presentation\" to all generic role elements inside the LI element\n // This is to make sure the elements are announced correctly by screen readers\n // when using arrow keys to navigate the list.\n for (let index = 0; index < li.children.length; index++) {\n const element = li.children.item(index);\n if (isGenericRoleElement(element)) {\n element.setAttribute(HtmlRoleAttribute, PresentationRoleValue);\n }\n }\n\n context.onNodeCreated?.(listItem, li);\n\n return refNode;\n};\n"]}
1
+ {"version":3,"file":"handleListItem.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/handlers/handleListItem.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyFormat } from '../utils/applyFormat';\nimport { applyMetadata } from '../utils/applyMetadata';\nimport { isGenericRoleElement } from '../../domUtils/isGenericRoleElement';\nimport { reuseCachedElement } from '../../domUtils/reuseCachedElement';\nimport { setParagraphNotImplicit } from '../../modelApi/block/setParagraphNotImplicit';\nimport { stackFormat } from '../utils/stackFormat';\nimport { unwrap } from '../../domUtils/unwrap';\nimport type {\n ContentModelBlockHandler,\n ContentModelListItem,\n ModelToDomContext,\n ModelToDomListStackItem,\n} from 'roosterjs-content-model-types';\n\nconst HtmlRoleAttribute = 'role';\nconst PresentationRoleValue = 'presentation';\n\n/**\n * @internal\n */\nexport const handleListItem: ContentModelBlockHandler<ContentModelListItem> = (\n doc: Document,\n parent: Node,\n listItem: ContentModelListItem,\n context: ModelToDomContext,\n refNode: Node | null\n) => {\n refNode = context.modelHandlers.list(doc, parent, listItem, context, refNode);\n\n const { nodeStack } = context.listFormat;\n const leafLevel: Partial<ModelToDomListStackItem> = nodeStack?.[nodeStack.length - 1] ?? {};\n const itemRefNode = leafLevel.refNode || null;\n const listParent = leafLevel.node || parent;\n const level = listItem.levels[listItem.levels.length - 1];\n\n let li: HTMLLIElement;\n let isNewlyCreated = false;\n\n if (context.allowCacheListItem && listItem.cachedElement) {\n li = listItem.cachedElement;\n\n // Check if the cached LI is used as refNode under another list level,\n // since we know we are going to move it under the current listParent,\n // we need to update the refNode of the previous list level to avoid removing it later\n for (let i = 0; i < nodeStack.length - 1; i++) {\n if (nodeStack[i].refNode === li) {\n nodeStack[i].refNode = li.nextSibling;\n }\n }\n\n leafLevel.refNode = reuseCachedElement(\n listParent,\n li,\n itemRefNode,\n context.rewriteFromModel\n );\n } else {\n li = doc.createElement('li');\n isNewlyCreated = true;\n\n // It is possible listParent is the same with parent param.\n // This happens when outdent a list item to cause it has no list level\n listParent.insertBefore(li, itemRefNode?.parentNode == listParent ? itemRefNode : null);\n context.rewriteFromModel.addedBlockElements.push(li);\n\n if (context.allowCacheListItem) {\n listItem.cachedElement = li;\n }\n }\n\n if (level) {\n applyFormat(li, context.formatAppliers.segment, listItem.formatHolder.format, context);\n applyFormat(li, context.formatAppliers.listItemThread, level.format, context);\n\n // Need to apply metadata after applying listItem format since the list numbers value relies on the result of list thread handling\n applyMetadata(level, context.metadataAppliers.listItem, listItem.format, context);\n\n // Need to apply listItemElement formats after applying metadata since the list numbers value relies on the result of metadata handling\n applyFormat(li, context.formatAppliers.listItemElement, listItem.format, context);\n\n stackFormat(context, listItem.formatHolder.format, () => {\n context.modelHandlers.blockGroupChildren(doc, li, listItem, context);\n });\n } else {\n // There is no level for this list item, that means it should be moved out of the list\n // For each paragraph, make it not implicit so it will have a DIV around it, to avoid more paragraphs connected together\n listItem.blocks.forEach(setParagraphNotImplicit);\n\n context.modelHandlers.blockGroupChildren(doc, li, listItem, context);\n\n unwrap(li);\n }\n\n // Add role=\"presentation\" to all generic role elements inside the LI element\n // This is to make sure the elements are announced correctly by screen readers\n // when using arrow keys to navigate the list.\n for (let index = 0; index < li.children.length; index++) {\n const element = li.children.item(index);\n if (isGenericRoleElement(element)) {\n element.setAttribute(HtmlRoleAttribute, PresentationRoleValue);\n }\n }\n\n if (isNewlyCreated) {\n context.onNodeCreated?.(listItem, li);\n }\n\n return refNode;\n};\n"]}
@@ -0,0 +1,8 @@
1
+ import type { RewriteFromModel } from 'roosterjs-content-model-types';
2
+ /**
3
+ * @internal
4
+ * Cleans up all rest nodes starting from refNode
5
+ * @param refNode The reference node to start cleaning up
6
+ * @param rewriteContext The context for rewrite process
7
+ */
8
+ export declare function cleanUpRestNodes(refNode: Node | null, rewriteContext: RewriteFromModel): void;
@@ -0,0 +1,25 @@
1
+ define(["require", "exports", "../../domUtils/isNodeOfType"], function (require, exports, isNodeOfType_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.cleanUpRestNodes = void 0;
5
+ /**
6
+ * @internal
7
+ * Cleans up all rest nodes starting from refNode
8
+ * @param refNode The reference node to start cleaning up
9
+ * @param rewriteContext The context for rewrite process
10
+ */
11
+ function cleanUpRestNodes(refNode, rewriteContext) {
12
+ while (refNode) {
13
+ var next = refNode.nextSibling;
14
+ if (refNode.parentNode) {
15
+ if ((0, isNodeOfType_1.isNodeOfType)(refNode, 'ELEMENT_NODE')) {
16
+ rewriteContext.removedBlockElements.push(refNode);
17
+ }
18
+ refNode.parentNode.removeChild(refNode);
19
+ }
20
+ refNode = next;
21
+ }
22
+ }
23
+ exports.cleanUpRestNodes = cleanUpRestNodes;
24
+ });
25
+ //# sourceMappingURL=cleanUpRestNodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanUpRestNodes.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/utils/cleanUpRestNodes.ts"],"names":[],"mappings":";;;;IAGA;;;;;OAKG;IACH,SAAgB,gBAAgB,CAAC,OAAoB,EAAE,cAAgC;QACnF,OAAO,OAAO,EAAE;YACZ,IAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;YAEjC,IAAI,OAAO,CAAC,UAAU,EAAE;gBACpB,IAAI,IAAA,2BAAY,EAAC,OAAO,EAAE,cAAc,CAAC,EAAE;oBACvC,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACrD;gBAED,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;aAC3C;YAED,OAAO,GAAG,IAAI,CAAC;SAClB;IACL,CAAC;IAdD,4CAcC","sourcesContent":["import { isNodeOfType } from '../../domUtils/isNodeOfType';\nimport type { RewriteFromModel } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Cleans up all rest nodes starting from refNode\n * @param refNode The reference node to start cleaning up\n * @param rewriteContext The context for rewrite process\n */\nexport function cleanUpRestNodes(refNode: Node | null, rewriteContext: RewriteFromModel) {\n while (refNode) {\n const next = refNode.nextSibling;\n\n if (refNode.parentNode) {\n if (isNodeOfType(refNode, 'ELEMENT_NODE')) {\n rewriteContext.removedBlockElements.push(refNode);\n }\n\n refNode.parentNode.removeChild(refNode);\n }\n\n refNode = next;\n }\n}\n"]}
@@ -11,12 +11,15 @@ define(["require", "exports", "tslib"], function (require, exports, tslib_1) {
11
11
  : tagNameOrFormat;
12
12
  if (newFormat) {
13
13
  var implicitFormat = context.implicitFormat;
14
+ var nodeStack = context.listFormat.nodeStack;
14
15
  try {
15
16
  context.implicitFormat = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, implicitFormat), newFormat);
17
+ context.listFormat.nodeStack = [];
16
18
  callback();
17
19
  }
18
20
  finally {
19
21
  context.implicitFormat = implicitFormat;
22
+ context.listFormat.nodeStack = nodeStack;
20
23
  }
21
24
  }
22
25
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"stackFormat.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/utils/stackFormat.ts"],"names":[],"mappings":";;;;IAMA;;OAEG;IACH,SAAgB,WAAW,CACvB,OAA0B,EAC1B,eAAsF,EACtF,QAAoB;QAEpB,IAAM,SAAS,GACX,OAAO,eAAe,KAAK,QAAQ;YAC/B,CAAC,CAAC,OAAO,CAAC,4BAA4B,CAAC,eAAe,CAAC;YACvD,CAAC,CAAC,eAAe,CAAC;QAE1B,IAAI,SAAS,EAAE;YACX,IAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;YAE9C,IAAI;gBACA,OAAO,CAAC,cAAc,mDACf,cAAc,GACd,SAAS,CACf,CAAC;gBAEF,QAAQ,EAAE,CAAC;aACd;oBAAS;gBACN,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;aAC3C;SACJ;aAAM;YACH,QAAQ,EAAE,CAAC;SACd;IACL,CAAC;IA1BD,kCA0BC","sourcesContent":["import type {\n ContentModelBlockFormat,\n ContentModelSegmentFormat,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function stackFormat(\n context: ModelToDomContext,\n tagNameOrFormat: string | (ContentModelSegmentFormat & ContentModelBlockFormat) | null,\n callback: () => void\n) {\n const newFormat =\n typeof tagNameOrFormat === 'string'\n ? context.defaultContentModelFormatMap[tagNameOrFormat]\n : tagNameOrFormat;\n\n if (newFormat) {\n const implicitFormat = context.implicitFormat;\n\n try {\n context.implicitFormat = {\n ...implicitFormat,\n ...newFormat,\n };\n\n callback();\n } finally {\n context.implicitFormat = implicitFormat;\n }\n } else {\n callback();\n }\n}\n"]}
1
+ {"version":3,"file":"stackFormat.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/modelToDom/utils/stackFormat.ts"],"names":[],"mappings":";;;;IAMA;;OAEG;IACH,SAAgB,WAAW,CACvB,OAA0B,EAC1B,eAAsF,EACtF,QAAoB;QAEpB,IAAM,SAAS,GACX,OAAO,eAAe,KAAK,QAAQ;YAC/B,CAAC,CAAC,OAAO,CAAC,4BAA4B,CAAC,eAAe,CAAC;YACvD,CAAC,CAAC,eAAe,CAAC;QAE1B,IAAI,SAAS,EAAE;YACX,IAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;YAC9C,IAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;YAE/C,IAAI;gBACA,OAAO,CAAC,cAAc,mDACf,cAAc,GACd,SAAS,CACf,CAAC;gBACF,OAAO,CAAC,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC;gBAElC,QAAQ,EAAE,CAAC;aACd;oBAAS;gBACN,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;gBACxC,OAAO,CAAC,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;aAC5C;SACJ;aAAM;YACH,QAAQ,EAAE,CAAC;SACd;IACL,CAAC;IA7BD,kCA6BC","sourcesContent":["import type {\n ContentModelBlockFormat,\n ContentModelSegmentFormat,\n ModelToDomContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function stackFormat(\n context: ModelToDomContext,\n tagNameOrFormat: string | (ContentModelSegmentFormat & ContentModelBlockFormat) | null,\n callback: () => void\n) {\n const newFormat =\n typeof tagNameOrFormat === 'string'\n ? context.defaultContentModelFormatMap[tagNameOrFormat]\n : tagNameOrFormat;\n\n if (newFormat) {\n const implicitFormat = context.implicitFormat;\n const nodeStack = context.listFormat.nodeStack;\n\n try {\n context.implicitFormat = {\n ...implicitFormat,\n ...newFormat,\n };\n context.listFormat.nodeStack = [];\n\n callback();\n } finally {\n context.implicitFormat = implicitFormat;\n context.listFormat.nodeStack = nodeStack;\n }\n } else {\n callback();\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Retrieves metadata from the given document, including HTML attributes and meta tags.
3
+ * @param doc The document from which to retrieve metadata.
4
+ * @returns A record containing metadata key-value pairs.
5
+ */
6
+ export declare function retrieveDocumentMetadata(doc: Document): Record<string, string>;
@@ -0,0 +1,19 @@
1
+ import { toArray } from './toArray';
2
+ /**
3
+ * Retrieves metadata from the given document, including HTML attributes and meta tags.
4
+ * @param doc The document from which to retrieve metadata.
5
+ * @returns A record containing metadata key-value pairs.
6
+ */
7
+ export function retrieveDocumentMetadata(doc) {
8
+ var _a;
9
+ var result = {};
10
+ var attributes = (_a = doc.querySelector('html')) === null || _a === void 0 ? void 0 : _a.attributes;
11
+ (attributes ? toArray(attributes) : []).forEach(function (attr) {
12
+ result[attr.name] = attr.value;
13
+ });
14
+ toArray(doc.querySelectorAll('meta')).forEach(function (meta) {
15
+ result[meta.name] = meta.content;
16
+ });
17
+ return result;
18
+ }
19
+ //# sourceMappingURL=retrieveDocumentMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieveDocumentMetadata.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/domUtils/retrieveDocumentMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAa;;IAClD,IAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAM,UAAU,GAAG,MAAA,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,0CAAE,UAAU,CAAC;IAEzD,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;QAChD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;QAC9C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAClB,CAAC","sourcesContent":["import { toArray } from './toArray';\n\n/**\n * Retrieves metadata from the given document, including HTML attributes and meta tags.\n * @param doc The document from which to retrieve metadata.\n * @returns A record containing metadata key-value pairs.\n */\nexport function retrieveDocumentMetadata(doc: Document): Record<string, string> {\n const result: Record<string, string> = {};\n const attributes = doc.querySelector('html')?.attributes;\n\n (attributes ? toArray(attributes) : []).forEach(attr => {\n result[attr.name] = attr.value;\n });\n\n toArray(doc.querySelectorAll('meta')).forEach(meta => {\n result[meta.name] = meta.content;\n });\n\n return result;\n}\n"]}
@@ -73,6 +73,7 @@ export { combineBorderValue, extractBorderValues } from './domUtils/style/border
73
73
  export { isPunctuation, isSpace, normalizeText } from './domUtils/stringUtil';
74
74
  export { parseTableCells } from './domUtils/table/parseTableCells';
75
75
  export { readFile } from './domUtils/readFile';
76
+ export { retrieveDocumentMetadata } from './domUtils/retrieveDocumentMetadata';
76
77
  export { transformColor } from './domUtils/style/transformColor';
77
78
  export { normalizeFontFamily } from './domUtils/style/normalizeFontFamily';
78
79
  export { extractClipboardItems } from './domUtils/event/extractClipboardItems';
package/lib-mjs/index.js CHANGED
@@ -73,6 +73,7 @@ export { combineBorderValue, extractBorderValues } from './domUtils/style/border
73
73
  export { isPunctuation, isSpace, normalizeText } from './domUtils/stringUtil';
74
74
  export { parseTableCells } from './domUtils/table/parseTableCells';
75
75
  export { readFile } from './domUtils/readFile';
76
+ export { retrieveDocumentMetadata } from './domUtils/retrieveDocumentMetadata';
76
77
  export { transformColor } from './domUtils/style/transformColor';
77
78
  export { normalizeFontFamily } from './domUtils/style/normalizeFontFamily';
78
79
  export { extractClipboardItems } from './domUtils/event/extractClipboardItems';