roosterjs-content-model-core 9.51.0 → 9.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/command/createModelFromHtml/convertInlineCss.d.ts +1 -7
- package/lib/command/createModelFromHtml/convertInlineCss.js.map +1 -1
- package/lib/command/cutCopy/getContentForCopy.js +4 -1
- package/lib/command/cutCopy/getContentForCopy.js.map +1 -1
- package/lib/command/paste/generatePasteOptionFromPlugins.js +1 -0
- package/lib/command/paste/generatePasteOptionFromPlugins.js.map +1 -1
- package/lib/command/paste/retrieveHtmlInfo.d.ts +1 -2
- package/lib/command/paste/retrieveHtmlInfo.js.map +1 -1
- package/lib/coreApi/announce/announce.js +1 -0
- package/lib/coreApi/announce/announce.js.map +1 -1
- package/lib/coreApi/getDOMSelection/getDOMSelection.js +12 -9
- package/lib/coreApi/getDOMSelection/getDOMSelection.js.map +1 -1
- package/lib/coreApi/setDOMSelection/setDOMSelection.js +7 -8
- package/lib/coreApi/setDOMSelection/setDOMSelection.js.map +1 -1
- package/lib/coreApi/setEditorStyle/ensureUniqueId.js +2 -2
- package/lib/coreApi/setEditorStyle/ensureUniqueId.js.map +1 -1
- package/lib/coreApi/setEditorStyle/setEditorStyle.js +1 -1
- package/lib/coreApi/setEditorStyle/setEditorStyle.js.map +1 -1
- package/lib/corePlugin/cache/areSameSelections.d.ts +0 -4
- package/lib/corePlugin/cache/areSameSelections.js +3 -10
- package/lib/corePlugin/cache/areSameSelections.js.map +1 -1
- package/lib/corePlugin/cache/domIndexerImpl.js +14 -6
- package/lib/corePlugin/cache/domIndexerImpl.js.map +1 -1
- package/lib/corePlugin/lifecycle/LifecyclePlugin.js +1 -0
- package/lib/corePlugin/lifecycle/LifecyclePlugin.js.map +1 -1
- package/lib/corePlugin/selection/SelectionPlugin.js +10 -7
- package/lib/corePlugin/selection/SelectionPlugin.js.map +1 -1
- package/lib/editor/core/DOMHelperImpl.d.ts +4 -0
- package/lib/editor/core/DOMHelperImpl.js +61 -1
- package/lib/editor/core/DOMHelperImpl.js.map +1 -1
- package/lib/editor/core/createEditorCore.js +4 -1
- package/lib/editor/core/createEditorCore.js.map +1 -1
- package/lib/override/containerSizeFormatParser.js +2 -0
- package/lib/override/containerSizeFormatParser.js.map +1 -1
- package/lib/utils/areSameRanges.d.ts +5 -0
- package/lib/utils/areSameRanges.js +13 -0
- package/lib/utils/areSameRanges.js.map +1 -0
- package/lib/utils/createAriaLiveElement.js +0 -1
- package/lib/utils/createAriaLiveElement.js.map +1 -1
- package/lib-amd/command/createModelFromHtml/convertInlineCss.d.ts +1 -7
- package/lib-amd/command/createModelFromHtml/convertInlineCss.js.map +1 -1
- package/lib-amd/command/cutCopy/getContentForCopy.js +4 -1
- package/lib-amd/command/cutCopy/getContentForCopy.js.map +1 -1
- package/lib-amd/command/paste/generatePasteOptionFromPlugins.js +1 -0
- package/lib-amd/command/paste/generatePasteOptionFromPlugins.js.map +1 -1
- package/lib-amd/command/paste/retrieveHtmlInfo.d.ts +1 -2
- package/lib-amd/command/paste/retrieveHtmlInfo.js.map +1 -1
- package/lib-amd/coreApi/announce/announce.js +1 -0
- package/lib-amd/coreApi/announce/announce.js.map +1 -1
- package/lib-amd/coreApi/getDOMSelection/getDOMSelection.js +12 -9
- package/lib-amd/coreApi/getDOMSelection/getDOMSelection.js.map +1 -1
- package/lib-amd/coreApi/setDOMSelection/setDOMSelection.js +8 -8
- package/lib-amd/coreApi/setDOMSelection/setDOMSelection.js.map +1 -1
- package/lib-amd/coreApi/setEditorStyle/ensureUniqueId.js +2 -2
- package/lib-amd/coreApi/setEditorStyle/ensureUniqueId.js.map +1 -1
- package/lib-amd/coreApi/setEditorStyle/setEditorStyle.js +1 -1
- package/lib-amd/coreApi/setEditorStyle/setEditorStyle.js.map +1 -1
- package/lib-amd/corePlugin/cache/areSameSelections.d.ts +0 -4
- package/lib-amd/corePlugin/cache/areSameSelections.js +3 -11
- package/lib-amd/corePlugin/cache/areSameSelections.js.map +1 -1
- package/lib-amd/corePlugin/cache/domIndexerImpl.js +14 -6
- package/lib-amd/corePlugin/cache/domIndexerImpl.js.map +1 -1
- package/lib-amd/corePlugin/lifecycle/LifecyclePlugin.js +1 -0
- package/lib-amd/corePlugin/lifecycle/LifecyclePlugin.js.map +1 -1
- package/lib-amd/corePlugin/selection/SelectionPlugin.js +10 -7
- package/lib-amd/corePlugin/selection/SelectionPlugin.js.map +1 -1
- package/lib-amd/editor/core/DOMHelperImpl.d.ts +4 -0
- package/lib-amd/editor/core/DOMHelperImpl.js +61 -2
- package/lib-amd/editor/core/DOMHelperImpl.js.map +1 -1
- package/lib-amd/editor/core/createEditorCore.js +4 -1
- package/lib-amd/editor/core/createEditorCore.js.map +1 -1
- package/lib-amd/override/containerSizeFormatParser.js +2 -0
- package/lib-amd/override/containerSizeFormatParser.js.map +1 -1
- package/lib-amd/utils/areSameRanges.d.ts +5 -0
- package/lib-amd/utils/areSameRanges.js +15 -0
- package/lib-amd/utils/areSameRanges.js.map +1 -0
- package/lib-amd/utils/createAriaLiveElement.js +0 -1
- package/lib-amd/utils/createAriaLiveElement.js.map +1 -1
- package/lib-mjs/command/createModelFromHtml/convertInlineCss.d.ts +1 -7
- package/lib-mjs/command/createModelFromHtml/convertInlineCss.js.map +1 -1
- package/lib-mjs/command/cutCopy/getContentForCopy.js +5 -2
- package/lib-mjs/command/cutCopy/getContentForCopy.js.map +1 -1
- package/lib-mjs/command/paste/generatePasteOptionFromPlugins.js +1 -0
- package/lib-mjs/command/paste/generatePasteOptionFromPlugins.js.map +1 -1
- package/lib-mjs/command/paste/retrieveHtmlInfo.d.ts +1 -2
- package/lib-mjs/command/paste/retrieveHtmlInfo.js.map +1 -1
- package/lib-mjs/coreApi/announce/announce.js +1 -0
- package/lib-mjs/coreApi/announce/announce.js.map +1 -1
- package/lib-mjs/coreApi/getDOMSelection/getDOMSelection.js +12 -9
- package/lib-mjs/coreApi/getDOMSelection/getDOMSelection.js.map +1 -1
- package/lib-mjs/coreApi/setDOMSelection/setDOMSelection.js +7 -8
- package/lib-mjs/coreApi/setDOMSelection/setDOMSelection.js.map +1 -1
- package/lib-mjs/coreApi/setEditorStyle/ensureUniqueId.js +2 -2
- package/lib-mjs/coreApi/setEditorStyle/ensureUniqueId.js.map +1 -1
- package/lib-mjs/coreApi/setEditorStyle/setEditorStyle.js +1 -1
- package/lib-mjs/coreApi/setEditorStyle/setEditorStyle.js.map +1 -1
- package/lib-mjs/corePlugin/cache/areSameSelections.d.ts +0 -4
- package/lib-mjs/corePlugin/cache/areSameSelections.js +1 -7
- package/lib-mjs/corePlugin/cache/areSameSelections.js.map +1 -1
- package/lib-mjs/corePlugin/cache/domIndexerImpl.js +14 -6
- package/lib-mjs/corePlugin/cache/domIndexerImpl.js.map +1 -1
- package/lib-mjs/corePlugin/lifecycle/LifecyclePlugin.js +1 -0
- package/lib-mjs/corePlugin/lifecycle/LifecyclePlugin.js.map +1 -1
- package/lib-mjs/corePlugin/selection/SelectionPlugin.js +10 -7
- package/lib-mjs/corePlugin/selection/SelectionPlugin.js.map +1 -1
- package/lib-mjs/editor/core/DOMHelperImpl.d.ts +4 -0
- package/lib-mjs/editor/core/DOMHelperImpl.js +61 -1
- package/lib-mjs/editor/core/DOMHelperImpl.js.map +1 -1
- package/lib-mjs/editor/core/createEditorCore.js +4 -1
- package/lib-mjs/editor/core/createEditorCore.js.map +1 -1
- package/lib-mjs/override/containerSizeFormatParser.js +2 -0
- package/lib-mjs/override/containerSizeFormatParser.js.map +1 -1
- package/lib-mjs/utils/areSameRanges.d.ts +5 -0
- package/lib-mjs/utils/areSameRanges.js +9 -0
- package/lib-mjs/utils/areSameRanges.js.map +1 -0
- package/lib-mjs/utils/createAriaLiveElement.js +0 -1
- package/lib-mjs/utils/createAriaLiveElement.js.map +1 -1
- package/package.json +3 -3
- package/lib/coreApi/setDOMSelection/addRangeToSelection.d.ts +0 -4
- package/lib/coreApi/setDOMSelection/addRangeToSelection.js +0 -27
- package/lib/coreApi/setDOMSelection/addRangeToSelection.js.map +0 -1
- package/lib-amd/coreApi/setDOMSelection/addRangeToSelection.d.ts +0 -4
- package/lib-amd/coreApi/setDOMSelection/addRangeToSelection.js +0 -28
- package/lib-amd/coreApi/setDOMSelection/addRangeToSelection.js.map +0 -1
- package/lib-mjs/coreApi/setDOMSelection/addRangeToSelection.d.ts +0 -4
- package/lib-mjs/coreApi/setDOMSelection/addRangeToSelection.js +0 -23
- package/lib-mjs/coreApi/setDOMSelection/addRangeToSelection.js.map +0 -1
|
@@ -1,7 +1,20 @@
|
|
|
1
|
+
import { areSameRanges } from '../../utils/areSameRanges';
|
|
1
2
|
import { getColor, getRangesByText, isBlockElement, isNodeOfType, parseValueWithUnit, toArray, } from 'roosterjs-content-model-dom';
|
|
3
|
+
function isSelectionWithComposedRanges(sel) {
|
|
4
|
+
return 'getComposedRanges' in sel;
|
|
5
|
+
}
|
|
6
|
+
function isShadowRoot(node) {
|
|
7
|
+
return 'host' in node;
|
|
8
|
+
}
|
|
2
9
|
var DOMHelperImpl = /** @class */ (function () {
|
|
3
10
|
function DOMHelperImpl(contentDiv, options) {
|
|
11
|
+
var _a;
|
|
4
12
|
this.contentDiv = contentDiv;
|
|
13
|
+
var rootNode = contentDiv.getRootNode();
|
|
14
|
+
this.shadowRoot = (options === null || options === void 0 ? void 0 : options.useShadowDom) && isShadowRoot(rootNode) ? rootNode : null;
|
|
15
|
+
this.doc = contentDiv.ownerDocument;
|
|
16
|
+
var sel = (_a = this.doc.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
|
|
17
|
+
this.useComposedRanges = !!(this.shadowRoot && sel && 'getComposedRanges' in sel);
|
|
5
18
|
}
|
|
6
19
|
DOMHelperImpl.prototype.queryElements = function (selector) {
|
|
7
20
|
return toArray(this.contentDiv.querySelectorAll(selector));
|
|
@@ -63,7 +76,9 @@ var DOMHelperImpl = /** @class */ (function () {
|
|
|
63
76
|
return this.contentDiv;
|
|
64
77
|
};
|
|
65
78
|
DOMHelperImpl.prototype.hasFocus = function () {
|
|
66
|
-
var activeElement = this.
|
|
79
|
+
var activeElement = this.shadowRoot
|
|
80
|
+
? this.shadowRoot.activeElement
|
|
81
|
+
: this.doc.activeElement;
|
|
67
82
|
return !!(activeElement && this.contentDiv.contains(activeElement));
|
|
68
83
|
};
|
|
69
84
|
/**
|
|
@@ -130,6 +145,51 @@ var DOMHelperImpl = /** @class */ (function () {
|
|
|
130
145
|
DOMHelperImpl.prototype.getRangesByText = function (text, matchCase, wholeWord) {
|
|
131
146
|
return getRangesByText(this.contentDiv, text, matchCase, wholeWord, true /*editableOnly*/);
|
|
132
147
|
};
|
|
148
|
+
DOMHelperImpl.prototype.getSelectionRange = function () {
|
|
149
|
+
var _a;
|
|
150
|
+
var sel = (_a = this.doc.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
|
|
151
|
+
if (!sel) {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
if (this.useComposedRanges && this.shadowRoot && isSelectionWithComposedRanges(sel)) {
|
|
155
|
+
var staticRanges = sel.getComposedRanges({
|
|
156
|
+
shadowRoots: [this.shadowRoot],
|
|
157
|
+
});
|
|
158
|
+
if ((staticRanges === null || staticRanges === void 0 ? void 0 : staticRanges.length) > 0) {
|
|
159
|
+
var sr = staticRanges[0];
|
|
160
|
+
var range = this.doc.createRange();
|
|
161
|
+
range.setStart(sr.startContainer, sr.startOffset);
|
|
162
|
+
range.setEnd(sr.endContainer, sr.endOffset);
|
|
163
|
+
return range;
|
|
164
|
+
}
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
return sel.rangeCount > 0 ? sel.getRangeAt(0) : null;
|
|
168
|
+
};
|
|
169
|
+
DOMHelperImpl.prototype.setSelectionRange = function (range, isReverted) {
|
|
170
|
+
var _a;
|
|
171
|
+
if (isReverted === void 0) { isReverted = false; }
|
|
172
|
+
var sel = (_a = this.doc.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
|
|
173
|
+
var currentRange = this.getSelectionRange();
|
|
174
|
+
if (!sel || (currentRange && areSameRanges(range, currentRange))) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
var startContainer = range.startContainer, startOffset = range.startOffset, endContainer = range.endContainer, endOffset = range.endOffset;
|
|
178
|
+
if (!isReverted) {
|
|
179
|
+
sel.setBaseAndExtent(startContainer, startOffset, endContainer, endOffset);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
sel.setBaseAndExtent(endContainer, endOffset, startContainer, startOffset);
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
DOMHelperImpl.prototype.appendToRoot = function (element) {
|
|
186
|
+
if (this.shadowRoot) {
|
|
187
|
+
this.shadowRoot.appendChild(element);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
this.doc.body.appendChild(element);
|
|
191
|
+
}
|
|
192
|
+
};
|
|
133
193
|
return DOMHelperImpl;
|
|
134
194
|
}());
|
|
135
195
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DOMHelperImpl.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-core/lib/editor/core/DOMHelperImpl.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getColor,\n getRangesByText,\n isBlockElement,\n isNodeOfType,\n parseValueWithUnit,\n toArray,\n} from 'roosterjs-content-model-dom';\nimport type {\n ContentModelSegmentFormat,\n DarkColorHandler,\n DOMHelper,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport interface DOMHelperImplOption {\n /**\n * @deprecated This is always treated as true now\n */\n cloneIndependentRoot?: boolean;\n}\n\nclass DOMHelperImpl implements DOMHelper {\n constructor(private contentDiv: HTMLElement, options?: DOMHelperImplOption) {}\n\n queryElements(selector: string): HTMLElement[] {\n return toArray(this.contentDiv.querySelectorAll(selector)) as HTMLElement[];\n }\n\n getTextContent(): string {\n return this.contentDiv.textContent || '';\n }\n\n isNodeInEditor(node: Node, excludeRoot?: boolean): boolean {\n return excludeRoot && node == this.contentDiv ? false : this.contentDiv.contains(node);\n }\n\n calculateZoomScale(): number {\n const originalWidth = this.contentDiv.getBoundingClientRect()?.width || 0;\n const visualWidth = this.contentDiv.offsetWidth;\n\n return visualWidth > 0 && originalWidth > 0\n ? Math.round((originalWidth / visualWidth) * 100) / 100\n : 1;\n }\n\n setDomAttribute(name: string, value: string | null) {\n if (value === null) {\n this.contentDiv.removeAttribute(name);\n } else {\n this.contentDiv.setAttribute(name, value);\n }\n }\n\n getDomAttribute(name: string): string | null {\n return this.contentDiv.getAttribute(name);\n }\n\n getDomStyle<T extends keyof CSSStyleDeclaration>(style: T): CSSStyleDeclaration[T] {\n return this.contentDiv.style[style];\n }\n\n findClosestElementAncestor(startFrom: Node, selector?: string): HTMLElement | null {\n const startElement = isNodeOfType(startFrom, 'ELEMENT_NODE')\n ? startFrom\n : startFrom.parentElement;\n const closestElement = selector\n ? (startElement?.closest(selector) as HTMLElement | null)\n : startElement;\n\n return closestElement &&\n this.isNodeInEditor(closestElement) &&\n closestElement != this.contentDiv\n ? closestElement\n : null;\n }\n\n /**\n * Find the closest block element ancestor from the given node within current editing scope\n * @param startFrom The node to start the search from\n * @returns The closest block element ancestor\n */\n findClosestBlockElement(startFrom: Node): HTMLElement {\n let node: Node | null = startFrom;\n\n while (node && this.isNodeInEditor(node)) {\n if (isNodeOfType(node, 'ELEMENT_NODE') && isBlockElement(node)) {\n return node;\n }\n\n node = node.parentElement;\n }\n\n return this.contentDiv;\n }\n\n hasFocus(): boolean {\n const activeElement = this.contentDiv.ownerDocument.activeElement;\n return !!(activeElement && this.contentDiv.contains(activeElement));\n }\n\n /**\n * Check if the root element is in RTL mode\n */\n isRightToLeft(): boolean {\n const contentDiv = this.contentDiv;\n const style = contentDiv.ownerDocument.defaultView?.getComputedStyle(contentDiv);\n\n return style?.direction == 'rtl';\n }\n\n /**\n * Get the width of the editable area of the editor content div\n */\n getClientWidth(): number {\n const contentDiv = this.contentDiv;\n const style = contentDiv.ownerDocument.defaultView?.getComputedStyle(contentDiv);\n const paddingLeft = parseValueWithUnit(style?.paddingLeft);\n const paddingRight = parseValueWithUnit(style?.paddingRight);\n return this.contentDiv.clientWidth - (paddingLeft + paddingRight);\n }\n\n /**\n * Get a deep cloned root element\n */\n getClonedRoot(): HTMLElement {\n const doc = this.contentDiv.ownerDocument.implementation.createHTMLDocument();\n const clone = doc.importNode(this.contentDiv, true /*deep*/);\n\n return clone;\n }\n\n /**\n * Get format of the container element\n * @param isInDarkMode Optional flag to indicate if the environment is in dark mode\n * @param darkColorHandler Optional DarkColorHandler to retrieve dark mode colors\n */\n getContainerFormat(\n isInDarkMode?: boolean,\n darkColorHandler?: DarkColorHandler\n ): ContentModelSegmentFormat {\n const window = this.contentDiv.ownerDocument.defaultView;\n\n const style = window?.getComputedStyle(this.contentDiv);\n\n return style\n ? {\n fontSize: style.fontSize,\n fontFamily: style.fontFamily,\n fontWeight: style.fontWeight,\n textColor: getColor(\n this.contentDiv,\n false /*isBackgroundColor*/,\n !!isInDarkMode,\n darkColorHandler,\n style.color\n ),\n backgroundColor: getColor(\n this.contentDiv,\n true /*isBackgroundColor*/,\n !!isInDarkMode,\n darkColorHandler,\n style.backgroundColor\n ),\n italic: style.fontStyle == 'italic',\n letterSpacing: style.letterSpacing,\n lineHeight: style.lineHeight,\n strikethrough: style.textDecoration?.includes('line-through'),\n superOrSubScriptSequence: style.verticalAlign,\n underline: style.textDecoration?.includes('underline'),\n }\n : {};\n }\n\n /**\n * Get text ranges by searching for a specific text, with options to match case and whole word.\n * This will only search within editable elements.\n * @param text The text to search for\n * @param matchCase Whether to match case\n * @param wholeWord Whether to match whole word\n * @returns An array of Ranges that match the search criteria\n */\n getRangesByText(text: string, matchCase: boolean, wholeWord: boolean): Range[] {\n return getRangesByText(this.contentDiv, text, matchCase, wholeWord, true /*editableOnly*/);\n }\n}\n\n/**\n * @internal Create new instance of DOMHelper\n */\nexport function createDOMHelper(\n contentDiv: HTMLElement,\n options: DOMHelperImplOption = {}\n): DOMHelper {\n return new DOMHelperImpl(contentDiv, options);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DOMHelperImpl.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-core/lib/editor/core/DOMHelperImpl.ts"],"names":[],"mappings":"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","sourcesContent":["import { areSameRanges } from '../../utils/areSameRanges';\nimport {\n getColor,\n getRangesByText,\n isBlockElement,\n isNodeOfType,\n parseValueWithUnit,\n toArray,\n} from 'roosterjs-content-model-dom';\nimport type {\n ContentModelSegmentFormat,\n DarkColorHandler,\n DOMHelper,\n} from 'roosterjs-content-model-types';\n\ninterface SelectionWithComposedRanges extends Selection {\n getComposedRanges(options: { shadowRoots: ShadowRoot[] }): StaticRange[];\n}\n\nfunction isSelectionWithComposedRanges(sel: Selection): sel is SelectionWithComposedRanges {\n return 'getComposedRanges' in sel;\n}\n\nfunction isShadowRoot(node: Node): node is ShadowRoot {\n return 'host' in node;\n}\n\n/**\n * @internal\n */\nexport interface DOMHelperImplOption {\n /**\n * @deprecated This is always treated as true now\n */\n cloneIndependentRoot?: boolean;\n\n /**\n * When true, enable shadow root detection so the editor works inside a Shadow DOM.\n */\n useShadowDom?: boolean;\n}\n\nclass DOMHelperImpl implements DOMHelper {\n private shadowRoot: ShadowRoot | null;\n private doc: Document;\n private useComposedRanges: boolean;\n\n constructor(private contentDiv: HTMLElement, options?: DOMHelperImplOption) {\n const rootNode = contentDiv.getRootNode();\n this.shadowRoot = options?.useShadowDom && isShadowRoot(rootNode) ? rootNode : null;\n this.doc = contentDiv.ownerDocument;\n\n const sel = this.doc.defaultView?.getSelection();\n this.useComposedRanges = !!(this.shadowRoot && sel && 'getComposedRanges' in sel);\n }\n\n queryElements(selector: string): HTMLElement[] {\n return toArray(this.contentDiv.querySelectorAll(selector)) as HTMLElement[];\n }\n\n getTextContent(): string {\n return this.contentDiv.textContent || '';\n }\n\n isNodeInEditor(node: Node, excludeRoot?: boolean): boolean {\n return excludeRoot && node == this.contentDiv ? false : this.contentDiv.contains(node);\n }\n\n calculateZoomScale(): number {\n const originalWidth = this.contentDiv.getBoundingClientRect()?.width || 0;\n const visualWidth = this.contentDiv.offsetWidth;\n\n return visualWidth > 0 && originalWidth > 0\n ? Math.round((originalWidth / visualWidth) * 100) / 100\n : 1;\n }\n\n setDomAttribute(name: string, value: string | null) {\n if (value === null) {\n this.contentDiv.removeAttribute(name);\n } else {\n this.contentDiv.setAttribute(name, value);\n }\n }\n\n getDomAttribute(name: string): string | null {\n return this.contentDiv.getAttribute(name);\n }\n\n getDomStyle<T extends keyof CSSStyleDeclaration>(style: T): CSSStyleDeclaration[T] {\n return this.contentDiv.style[style];\n }\n\n findClosestElementAncestor(startFrom: Node, selector?: string): HTMLElement | null {\n const startElement = isNodeOfType(startFrom, 'ELEMENT_NODE')\n ? startFrom\n : startFrom.parentElement;\n const closestElement = selector\n ? (startElement?.closest(selector) as HTMLElement | null)\n : startElement;\n\n return closestElement &&\n this.isNodeInEditor(closestElement) &&\n closestElement != this.contentDiv\n ? closestElement\n : null;\n }\n\n /**\n * Find the closest block element ancestor from the given node within current editing scope\n * @param startFrom The node to start the search from\n * @returns The closest block element ancestor\n */\n findClosestBlockElement(startFrom: Node): HTMLElement {\n let node: Node | null = startFrom;\n\n while (node && this.isNodeInEditor(node)) {\n if (isNodeOfType(node, 'ELEMENT_NODE') && isBlockElement(node)) {\n return node;\n }\n\n node = node.parentElement;\n }\n\n return this.contentDiv;\n }\n\n hasFocus(): boolean {\n const activeElement = this.shadowRoot\n ? this.shadowRoot.activeElement\n : this.doc.activeElement;\n return !!(activeElement && this.contentDiv.contains(activeElement));\n }\n\n /**\n * Check if the root element is in RTL mode\n */\n isRightToLeft(): boolean {\n const contentDiv = this.contentDiv;\n const style = contentDiv.ownerDocument.defaultView?.getComputedStyle(contentDiv);\n\n return style?.direction == 'rtl';\n }\n\n /**\n * Get the width of the editable area of the editor content div\n */\n getClientWidth(): number {\n const contentDiv = this.contentDiv;\n const style = contentDiv.ownerDocument.defaultView?.getComputedStyle(contentDiv);\n const paddingLeft = parseValueWithUnit(style?.paddingLeft);\n const paddingRight = parseValueWithUnit(style?.paddingRight);\n return this.contentDiv.clientWidth - (paddingLeft + paddingRight);\n }\n\n /**\n * Get a deep cloned root element\n */\n getClonedRoot(): HTMLElement {\n const doc = this.contentDiv.ownerDocument.implementation.createHTMLDocument();\n const clone = doc.importNode(this.contentDiv, true /*deep*/);\n\n return clone;\n }\n\n /**\n * Get format of the container element\n * @param isInDarkMode Optional flag to indicate if the environment is in dark mode\n * @param darkColorHandler Optional DarkColorHandler to retrieve dark mode colors\n */\n getContainerFormat(\n isInDarkMode?: boolean,\n darkColorHandler?: DarkColorHandler\n ): ContentModelSegmentFormat {\n const window = this.contentDiv.ownerDocument.defaultView;\n\n const style = window?.getComputedStyle(this.contentDiv);\n\n return style\n ? {\n fontSize: style.fontSize,\n fontFamily: style.fontFamily,\n fontWeight: style.fontWeight,\n textColor: getColor(\n this.contentDiv,\n false /*isBackgroundColor*/,\n !!isInDarkMode,\n darkColorHandler,\n style.color\n ),\n backgroundColor: getColor(\n this.contentDiv,\n true /*isBackgroundColor*/,\n !!isInDarkMode,\n darkColorHandler,\n style.backgroundColor\n ),\n italic: style.fontStyle == 'italic',\n letterSpacing: style.letterSpacing,\n lineHeight: style.lineHeight,\n strikethrough: style.textDecoration?.includes('line-through'),\n superOrSubScriptSequence: style.verticalAlign,\n underline: style.textDecoration?.includes('underline'),\n }\n : {};\n }\n\n /**\n * Get text ranges by searching for a specific text, with options to match case and whole word.\n * This will only search within editable elements.\n * @param text The text to search for\n * @param matchCase Whether to match case\n * @param wholeWord Whether to match whole word\n * @returns An array of Ranges that match the search criteria\n */\n getRangesByText(text: string, matchCase: boolean, wholeWord: boolean): Range[] {\n return getRangesByText(this.contentDiv, text, matchCase, wholeWord, true /*editableOnly*/);\n }\n\n getSelectionRange(): Range | null {\n const sel = this.doc.defaultView?.getSelection();\n if (!sel) {\n return null;\n }\n\n if (this.useComposedRanges && this.shadowRoot && isSelectionWithComposedRanges(sel)) {\n const staticRanges = sel.getComposedRanges({\n shadowRoots: [this.shadowRoot],\n });\n\n if (staticRanges?.length > 0) {\n const sr = staticRanges[0];\n const range = this.doc.createRange();\n range.setStart(sr.startContainer, sr.startOffset);\n range.setEnd(sr.endContainer, sr.endOffset);\n return range;\n }\n return null;\n }\n\n return sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n }\n\n setSelectionRange(range: Range, isReverted: boolean = false): void {\n const sel = this.doc.defaultView?.getSelection();\n const currentRange = this.getSelectionRange();\n if (!sel || (currentRange && areSameRanges(range, currentRange))) {\n return;\n }\n\n const { startContainer, startOffset, endContainer, endOffset } = range;\n if (!isReverted) {\n sel.setBaseAndExtent(startContainer, startOffset, endContainer, endOffset);\n } else {\n sel.setBaseAndExtent(endContainer, endOffset, startContainer, startOffset);\n }\n }\n\n appendToRoot(element: HTMLElement): void {\n if (this.shadowRoot) {\n this.shadowRoot.appendChild(element);\n } else {\n this.doc.body.appendChild(element);\n }\n }\n}\n\n/**\n * @internal Create new instance of DOMHelper\n */\nexport function createDOMHelper(\n contentDiv: HTMLElement,\n options: DOMHelperImplOption = {}\n): DOMHelper {\n return new DOMHelperImpl(contentDiv, options);\n}\n"]}
|
|
@@ -27,7 +27,10 @@ export function createEditorCore(contentDiv, options) {
|
|
|
27
27
|
corePlugins.lifecycle,
|
|
28
28
|
], false), environment: createEditorEnvironment(contentDiv, options), darkColorHandler: createDarkColorHandler(contentDiv, (_b = options.getDarkColor) !== null && _b !== void 0 ? _b : getDarkColorFallback, options.knownColors, options.generateColorKey), trustedHTMLHandler: options.trustedHTMLHandler && !isDOMCreator(options.trustedHTMLHandler)
|
|
29
29
|
? options.trustedHTMLHandler
|
|
30
|
-
: createTrustedHTMLHandler(domCreator), domCreator: domCreator, domHelper: createDOMHelper(contentDiv
|
|
30
|
+
: createTrustedHTMLHandler(domCreator), domCreator: domCreator, domHelper: createDOMHelper(contentDiv, {
|
|
31
|
+
useShadowDom: !!options.experimentalFeatures &&
|
|
32
|
+
options.experimentalFeatures.indexOf('ShadowDom') >= 0,
|
|
33
|
+
}) }, getPluginState(corePlugins)), { disposeErrorHandler: options.disposeErrorHandler, onFixUpModel: options.onFixUpModel, experimentalFeatures: options.experimentalFeatures ? __spreadArray([], __read(options.experimentalFeatures), false) : [] });
|
|
31
34
|
}
|
|
32
35
|
function createEditorEnvironment(contentDiv, options) {
|
|
33
36
|
var _a, _b, _c;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createEditorCore.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-core/lib/editor/core/createEditorCore.ts"],"names":[],"mappings":"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","sourcesContent":["import { coreApiMap } from '../../coreApi/coreApiMap';\nimport { createDarkColorHandler } from './DarkColorHandlerImpl';\nimport { createDOMCreator, createTrustedHTMLHandler, isDOMCreator } from '../../utils/domCreator';\nimport { createDOMHelper } from './DOMHelperImpl';\nimport { createDomToModelSettings, createModelToDomSettings } from './createEditorDefaultSettings';\nimport { createEditorCorePlugins } from '../../corePlugin/createEditorCorePlugins';\nimport type {\n EditorEnvironment,\n PluginState,\n EditorCore,\n EditorCorePlugins,\n EditorOptions,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal Create core object for editor\n * @param contentDiv Editor content DIV\n * @param options Editor options\n */\nexport function createEditorCore(contentDiv: HTMLDivElement, options: EditorOptions): EditorCore {\n const corePlugins = createEditorCorePlugins(options, contentDiv);\n const domCreator = createDOMCreator(options.trustedHTMLHandler);\n\n return {\n physicalRoot: contentDiv,\n logicalRoot: contentDiv,\n api: { ...coreApiMap, ...options.coreApiOverride },\n originalApi: { ...coreApiMap },\n plugins: [\n corePlugins.cache,\n corePlugins.format,\n corePlugins.copyPaste,\n corePlugins.domEvent,\n corePlugins.selection,\n corePlugins.entity,\n ...(options.plugins ?? []).filter(x => !!x),\n corePlugins.undo,\n corePlugins.contextMenu,\n corePlugins.lifecycle,\n ],\n environment: createEditorEnvironment(contentDiv, options),\n darkColorHandler: createDarkColorHandler(\n contentDiv,\n options.getDarkColor ?? getDarkColorFallback,\n options.knownColors,\n options.generateColorKey\n ),\n trustedHTMLHandler:\n options.trustedHTMLHandler && !isDOMCreator(options.trustedHTMLHandler)\n ? options.trustedHTMLHandler\n : createTrustedHTMLHandler(domCreator),\n domCreator: domCreator,\n domHelper: createDOMHelper(contentDiv),\n ...getPluginState(corePlugins),\n disposeErrorHandler: options.disposeErrorHandler,\n onFixUpModel: options.onFixUpModel,\n experimentalFeatures: options.experimentalFeatures ? [...options.experimentalFeatures] : [],\n };\n}\n\nfunction createEditorEnvironment(\n contentDiv: HTMLElement,\n options: EditorOptions\n): EditorEnvironment {\n const navigator = contentDiv.ownerDocument.defaultView?.navigator;\n const userAgent = navigator?.userAgent ?? '';\n const appVersion = navigator?.appVersion ?? '';\n\n return {\n document: contentDiv.ownerDocument,\n domToModelSettings: createDomToModelSettings(options),\n modelToDomSettings: createModelToDomSettings(options),\n isMac: appVersion.indexOf('Mac') != -1,\n isAndroid: /android/i.test(userAgent),\n isIOS: /iPad|iPhone/.test(userAgent),\n isSafari:\n userAgent.indexOf('AppleWebKit') >= 0 &&\n userAgent.indexOf('Chrome') < 0 &&\n userAgent.indexOf('Android') < 0,\n isMobileOrTablet: getIsMobileOrTablet(userAgent),\n };\n}\n\nfunction getIsMobileOrTablet(userAgent: string) {\n // Reference: http://detectmobilebrowsers.com/\n // The default regex on the website doesn't consider tablet.\n // To support tablet, add |android|ipad|playbook|silk to the first regex according to the info in /about page\n if (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(\n userAgent\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\n userAgent.substring(0, 4)\n )\n ) {\n return true;\n }\n return false;\n}\n\nfunction getPluginState(corePlugins: EditorCorePlugins): PluginState {\n return {\n domEvent: corePlugins.domEvent.getState(),\n copyPaste: corePlugins.copyPaste.getState(),\n cache: corePlugins.cache.getState(),\n format: corePlugins.format.getState(),\n lifecycle: corePlugins.lifecycle.getState(),\n entity: corePlugins.entity.getState(),\n selection: corePlugins.selection.getState(),\n contextMenu: corePlugins.contextMenu.getState(),\n undo: corePlugins.undo.getState(),\n };\n}\n\n/**\n * @internal Export for test only\n * A fallback function, always return original color\n */\nexport function getDarkColorFallback(color: string) {\n return color;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"createEditorCore.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-core/lib/editor/core/createEditorCore.ts"],"names":[],"mappings":"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","sourcesContent":["import { coreApiMap } from '../../coreApi/coreApiMap';\nimport { createDarkColorHandler } from './DarkColorHandlerImpl';\nimport { createDOMCreator, createTrustedHTMLHandler, isDOMCreator } from '../../utils/domCreator';\nimport { createDOMHelper } from './DOMHelperImpl';\nimport { createDomToModelSettings, createModelToDomSettings } from './createEditorDefaultSettings';\nimport { createEditorCorePlugins } from '../../corePlugin/createEditorCorePlugins';\nimport type {\n EditorEnvironment,\n PluginState,\n EditorCore,\n EditorCorePlugins,\n EditorOptions,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal Create core object for editor\n * @param contentDiv Editor content DIV\n * @param options Editor options\n */\nexport function createEditorCore(contentDiv: HTMLDivElement, options: EditorOptions): EditorCore {\n const corePlugins = createEditorCorePlugins(options, contentDiv);\n const domCreator = createDOMCreator(options.trustedHTMLHandler);\n\n return {\n physicalRoot: contentDiv,\n logicalRoot: contentDiv,\n api: { ...coreApiMap, ...options.coreApiOverride },\n originalApi: { ...coreApiMap },\n plugins: [\n corePlugins.cache,\n corePlugins.format,\n corePlugins.copyPaste,\n corePlugins.domEvent,\n corePlugins.selection,\n corePlugins.entity,\n ...(options.plugins ?? []).filter(x => !!x),\n corePlugins.undo,\n corePlugins.contextMenu,\n corePlugins.lifecycle,\n ],\n environment: createEditorEnvironment(contentDiv, options),\n darkColorHandler: createDarkColorHandler(\n contentDiv,\n options.getDarkColor ?? getDarkColorFallback,\n options.knownColors,\n options.generateColorKey\n ),\n trustedHTMLHandler:\n options.trustedHTMLHandler && !isDOMCreator(options.trustedHTMLHandler)\n ? options.trustedHTMLHandler\n : createTrustedHTMLHandler(domCreator),\n domCreator: domCreator,\n domHelper: createDOMHelper(contentDiv, {\n useShadowDom:\n !!options.experimentalFeatures &&\n options.experimentalFeatures.indexOf('ShadowDom') >= 0,\n }),\n ...getPluginState(corePlugins),\n disposeErrorHandler: options.disposeErrorHandler,\n onFixUpModel: options.onFixUpModel,\n experimentalFeatures: options.experimentalFeatures ? [...options.experimentalFeatures] : [],\n };\n}\n\nfunction createEditorEnvironment(\n contentDiv: HTMLElement,\n options: EditorOptions\n): EditorEnvironment {\n const navigator = contentDiv.ownerDocument.defaultView?.navigator;\n const userAgent = navigator?.userAgent ?? '';\n const appVersion = navigator?.appVersion ?? '';\n\n return {\n document: contentDiv.ownerDocument,\n domToModelSettings: createDomToModelSettings(options),\n modelToDomSettings: createModelToDomSettings(options),\n isMac: appVersion.indexOf('Mac') != -1,\n isAndroid: /android/i.test(userAgent),\n isIOS: /iPad|iPhone/.test(userAgent),\n isSafari:\n userAgent.indexOf('AppleWebKit') >= 0 &&\n userAgent.indexOf('Chrome') < 0 &&\n userAgent.indexOf('Android') < 0,\n isMobileOrTablet: getIsMobileOrTablet(userAgent),\n };\n}\n\nfunction getIsMobileOrTablet(userAgent: string) {\n // Reference: http://detectmobilebrowsers.com/\n // The default regex on the website doesn't consider tablet.\n // To support tablet, add |android|ipad|playbook|silk to the first regex according to the info in /about page\n if (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(\n userAgent\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\n userAgent.substring(0, 4)\n )\n ) {\n return true;\n }\n return false;\n}\n\nfunction getPluginState(corePlugins: EditorCorePlugins): PluginState {\n return {\n domEvent: corePlugins.domEvent.getState(),\n copyPaste: corePlugins.copyPaste.getState(),\n cache: corePlugins.cache.getState(),\n format: corePlugins.format.getState(),\n lifecycle: corePlugins.lifecycle.getState(),\n entity: corePlugins.entity.getState(),\n selection: corePlugins.selection.getState(),\n contextMenu: corePlugins.contextMenu.getState(),\n undo: corePlugins.undo.getState(),\n };\n}\n\n/**\n * @internal Export for test only\n * A fallback function, always return original color\n */\nexport function getDarkColorFallback(color: string) {\n return color;\n}\n"]}
|
|
@@ -6,6 +6,8 @@ export var containerSizeFormatParser = function (format, element) {
|
|
|
6
6
|
if (element.tagName == 'DIV' || element.tagName == 'P') {
|
|
7
7
|
delete format.width;
|
|
8
8
|
delete format.height;
|
|
9
|
+
delete format.maxHeight;
|
|
10
|
+
delete format.maxWidth;
|
|
9
11
|
}
|
|
10
12
|
};
|
|
11
13
|
//# sourceMappingURL=containerSizeFormatParser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containerSizeFormatParser.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/override/containerSizeFormatParser.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,IAAM,yBAAyB,GAA6B,UAAC,MAAM,EAAE,OAAO;IAC/E,mHAAmH;IACnH,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,IAAI,OAAO,CAAC,OAAO,IAAI,GAAG,EAAE;QACpD,OAAO,MAAM,CAAC,KAAK,CAAC;QACpB,OAAO,MAAM,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"containerSizeFormatParser.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/override/containerSizeFormatParser.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,IAAM,yBAAyB,GAA6B,UAAC,MAAM,EAAE,OAAO;IAC/E,mHAAmH;IACnH,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,IAAI,OAAO,CAAC,OAAO,IAAI,GAAG,EAAE;QACpD,OAAO,MAAM,CAAC,KAAK,CAAC;QACpB,OAAO,MAAM,CAAC,MAAM,CAAC;QACrB,OAAO,MAAM,CAAC,SAAS,CAAC;QACxB,OAAO,MAAM,CAAC,QAAQ,CAAC;KAC1B;AACL,CAAC,CAAC","sourcesContent":["import type { FormatParser, SizeFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal Do not paste width for Format Containers since it may be generated by browser according to temp div width\n */\nexport const containerSizeFormatParser: FormatParser<SizeFormat> = (format, element) => {\n // For pasted content, there may be existing width generated by browser from the temp DIV. So we need to remove it.\n if (element.tagName == 'DIV' || element.tagName == 'P') {\n delete format.width;\n delete format.height;\n delete format.maxHeight;\n delete format.maxWidth;\n }\n};\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
var RangeKeys = ['startContainer', 'endContainer', 'startOffset', 'endOffset'];
|
|
2
|
+
/**
|
|
3
|
+
* @internal
|
|
4
|
+
* Check if two ranges have the same start and end positions.
|
|
5
|
+
*/
|
|
6
|
+
export function areSameRanges(r1, r2) {
|
|
7
|
+
return RangeKeys.every(function (k) { return r1[k] == r2[k]; });
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=areSameRanges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"areSameRanges.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/utils/areSameRanges.ts"],"names":[],"mappings":"AAAA,IAAM,SAAS,GAAoB,CAAC,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;AAElG;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,EAAS,EAAE,EAAS;IAC9C,OAAO,SAAS,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAd,CAAc,CAAC,CAAC;AAChD,CAAC","sourcesContent":["const RangeKeys: (keyof Range)[] = ['startContainer', 'endContainer', 'startOffset', 'endOffset'];\n\n/**\n * @internal\n * Check if two ranges have the same start and end positions.\n */\nexport function areSameRanges(r1: Range, r2: Range): boolean {\n return RangeKeys.every(k => r1[k] == r2[k]);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAriaLiveElement.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/utils/createAriaLiveElement.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAkB;IACpD,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1C,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,0BAA0B,CAAC;IAC5C,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC;IACnC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;IACzB,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC9B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IAChC,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;IAChC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACxB,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC;IAE3B,
|
|
1
|
+
{"version":3,"file":"createAriaLiveElement.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-core/lib/utils/createAriaLiveElement.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAkB;IACpD,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1C,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,0BAA0B,CAAC;IAC5C,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC;IACnC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;IACzB,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC9B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IAChC,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;IAChC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IACxB,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAC;IAE3B,OAAO,GAAG,CAAC;AACf,CAAC","sourcesContent":["/**\n * @internal\n */\nexport function createAriaLiveElement(document: Document): HTMLDivElement {\n const div = document.createElement('div');\n\n div.style.clip = 'rect(0px, 0px, 0px, 0px)';\n div.style.clipPath = 'inset(100%)';\n div.style.height = '1px';\n div.style.overflow = 'hidden';\n div.style.position = 'absolute';\n div.style.whiteSpace = 'nowrap';\n div.style.width = '1px';\n div.ariaLive = 'assertive';\n\n return div;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
"description": "Core editor for roosterjs",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"tslib": "^2.3.1",
|
|
6
|
-
"roosterjs-content-model-dom": "^9.
|
|
7
|
-
"roosterjs-content-model-types": "^9.
|
|
6
|
+
"roosterjs-content-model-dom": "^9.53.0",
|
|
7
|
+
"roosterjs-content-model-types": "^9.53.0"
|
|
8
8
|
},
|
|
9
|
-
"version": "9.
|
|
9
|
+
"version": "9.53.0",
|
|
10
10
|
"main": "./lib/index.js",
|
|
11
11
|
"typings": "./lib/index.d.ts",
|
|
12
12
|
"module": "./lib-mjs/index.js",
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.addRangeToSelection = void 0;
|
|
4
|
-
var areSameSelections_1 = require("../../corePlugin/cache/areSameSelections");
|
|
5
|
-
/**
|
|
6
|
-
* @internal
|
|
7
|
-
*/
|
|
8
|
-
function addRangeToSelection(doc, range, isReverted) {
|
|
9
|
-
var _a;
|
|
10
|
-
if (isReverted === void 0) { isReverted = false; }
|
|
11
|
-
var selection = (_a = doc.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
|
|
12
|
-
if (selection) {
|
|
13
|
-
var currentRange = selection.rangeCount > 0 && selection.getRangeAt(0);
|
|
14
|
-
if (currentRange && (0, areSameSelections_1.areSameRanges)(currentRange, range)) {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
selection.removeAllRanges();
|
|
18
|
-
if (!isReverted) {
|
|
19
|
-
selection.addRange(range);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
selection.setBaseAndExtent(range.endContainer, range.endOffset, range.startContainer, range.startOffset);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
exports.addRangeToSelection = addRangeToSelection;
|
|
27
|
-
//# sourceMappingURL=addRangeToSelection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"addRangeToSelection.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/addRangeToSelection.ts"],"names":[],"mappings":";;;AAAA,8EAAyE;AAEzE;;GAEG;AACH,SAAgB,mBAAmB,CAAC,GAAa,EAAE,KAAY,EAAE,UAA2B;;IAA3B,2BAAA,EAAA,kBAA2B;IACxF,IAAM,SAAS,GAAG,MAAA,GAAG,CAAC,WAAW,0CAAE,YAAY,EAAE,CAAC;IAElD,IAAI,SAAS,EAAE;QACX,IAAM,YAAY,GAAG,SAAS,CAAC,UAAU,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,YAAY,IAAI,IAAA,iCAAa,EAAC,YAAY,EAAE,KAAK,CAAC,EAAE;YACpD,OAAO;SACV;QACD,SAAS,CAAC,eAAe,EAAE,CAAC;QAE5B,IAAI,CAAC,UAAU,EAAE;YACb,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC7B;aAAM;YACH,SAAS,CAAC,gBAAgB,CACtB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,WAAW,CACpB,CAAC;SACL;KACJ;AACL,CAAC;AArBD,kDAqBC","sourcesContent":["import { areSameRanges } from '../../corePlugin/cache/areSameSelections';\n\n/**\n * @internal\n */\nexport function addRangeToSelection(doc: Document, range: Range, isReverted: boolean = false) {\n const selection = doc.defaultView?.getSelection();\n\n if (selection) {\n const currentRange = selection.rangeCount > 0 && selection.getRangeAt(0);\n if (currentRange && areSameRanges(currentRange, range)) {\n return;\n }\n selection.removeAllRanges();\n\n if (!isReverted) {\n selection.addRange(range);\n } else {\n selection.setBaseAndExtent(\n range.endContainer,\n range.endOffset,\n range.startContainer,\n range.startOffset\n );\n }\n }\n}\n"]}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
define(["require", "exports", "../../corePlugin/cache/areSameSelections"], function (require, exports, areSameSelections_1) {
|
|
2
|
-
"use strict";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.addRangeToSelection = void 0;
|
|
5
|
-
/**
|
|
6
|
-
* @internal
|
|
7
|
-
*/
|
|
8
|
-
function addRangeToSelection(doc, range, isReverted) {
|
|
9
|
-
var _a;
|
|
10
|
-
if (isReverted === void 0) { isReverted = false; }
|
|
11
|
-
var selection = (_a = doc.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
|
|
12
|
-
if (selection) {
|
|
13
|
-
var currentRange = selection.rangeCount > 0 && selection.getRangeAt(0);
|
|
14
|
-
if (currentRange && (0, areSameSelections_1.areSameRanges)(currentRange, range)) {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
selection.removeAllRanges();
|
|
18
|
-
if (!isReverted) {
|
|
19
|
-
selection.addRange(range);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
selection.setBaseAndExtent(range.endContainer, range.endOffset, range.startContainer, range.startOffset);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
exports.addRangeToSelection = addRangeToSelection;
|
|
27
|
-
});
|
|
28
|
-
//# sourceMappingURL=addRangeToSelection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"addRangeToSelection.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/addRangeToSelection.ts"],"names":[],"mappings":";;;;IAEA;;OAEG;IACH,SAAgB,mBAAmB,CAAC,GAAa,EAAE,KAAY,EAAE,UAA2B;;QAA3B,2BAAA,EAAA,kBAA2B;QACxF,IAAM,SAAS,GAAG,MAAA,GAAG,CAAC,WAAW,0CAAE,YAAY,EAAE,CAAC;QAElD,IAAI,SAAS,EAAE;YACX,IAAM,YAAY,GAAG,SAAS,CAAC,UAAU,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,YAAY,IAAI,IAAA,iCAAa,EAAC,YAAY,EAAE,KAAK,CAAC,EAAE;gBACpD,OAAO;aACV;YACD,SAAS,CAAC,eAAe,EAAE,CAAC;YAE5B,IAAI,CAAC,UAAU,EAAE;gBACb,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAC7B;iBAAM;gBACH,SAAS,CAAC,gBAAgB,CACtB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,WAAW,CACpB,CAAC;aACL;SACJ;IACL,CAAC;IArBD,kDAqBC","sourcesContent":["import { areSameRanges } from '../../corePlugin/cache/areSameSelections';\n\n/**\n * @internal\n */\nexport function addRangeToSelection(doc: Document, range: Range, isReverted: boolean = false) {\n const selection = doc.defaultView?.getSelection();\n\n if (selection) {\n const currentRange = selection.rangeCount > 0 && selection.getRangeAt(0);\n if (currentRange && areSameRanges(currentRange, range)) {\n return;\n }\n selection.removeAllRanges();\n\n if (!isReverted) {\n selection.addRange(range);\n } else {\n selection.setBaseAndExtent(\n range.endContainer,\n range.endOffset,\n range.startContainer,\n range.startOffset\n );\n }\n }\n}\n"]}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { areSameRanges } from '../../corePlugin/cache/areSameSelections';
|
|
2
|
-
/**
|
|
3
|
-
* @internal
|
|
4
|
-
*/
|
|
5
|
-
export function addRangeToSelection(doc, range, isReverted) {
|
|
6
|
-
var _a;
|
|
7
|
-
if (isReverted === void 0) { isReverted = false; }
|
|
8
|
-
var selection = (_a = doc.defaultView) === null || _a === void 0 ? void 0 : _a.getSelection();
|
|
9
|
-
if (selection) {
|
|
10
|
-
var currentRange = selection.rangeCount > 0 && selection.getRangeAt(0);
|
|
11
|
-
if (currentRange && areSameRanges(currentRange, range)) {
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
selection.removeAllRanges();
|
|
15
|
-
if (!isReverted) {
|
|
16
|
-
selection.addRange(range);
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
selection.setBaseAndExtent(range.endContainer, range.endOffset, range.startContainer, range.startOffset);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=addRangeToSelection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"addRangeToSelection.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-core/lib/coreApi/setDOMSelection/addRangeToSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEzE;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAa,EAAE,KAAY,EAAE,UAA2B;;IAA3B,2BAAA,EAAA,kBAA2B;IACxF,IAAM,SAAS,GAAG,MAAA,GAAG,CAAC,WAAW,0CAAE,YAAY,EAAE,CAAC;IAElD,IAAI,SAAS,EAAE;QACX,IAAM,YAAY,GAAG,SAAS,CAAC,UAAU,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,YAAY,IAAI,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE;YACpD,OAAO;SACV;QACD,SAAS,CAAC,eAAe,EAAE,CAAC;QAE5B,IAAI,CAAC,UAAU,EAAE;YACb,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC7B;aAAM;YACH,SAAS,CAAC,gBAAgB,CACtB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,WAAW,CACpB,CAAC;SACL;KACJ;AACL,CAAC","sourcesContent":["import { areSameRanges } from '../../corePlugin/cache/areSameSelections';\n\n/**\n * @internal\n */\nexport function addRangeToSelection(doc: Document, range: Range, isReverted: boolean = false) {\n const selection = doc.defaultView?.getSelection();\n\n if (selection) {\n const currentRange = selection.rangeCount > 0 && selection.getRangeAt(0);\n if (currentRange && areSameRanges(currentRange, range)) {\n return;\n }\n selection.removeAllRanges();\n\n if (!isReverted) {\n selection.addRange(range);\n } else {\n selection.setBaseAndExtent(\n range.endContainer,\n range.endOffset,\n range.startContainer,\n range.startOffset\n );\n }\n }\n}\n"]}
|