roosterjs-content-model-dom 9.19.0 → 9.20.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/domUtils/event/extractClipboardItems.js +1 -0
- package/lib/domUtils/event/extractClipboardItems.js.map +1 -1
- package/lib/modelToText/contentModelToText.d.ts +2 -2
- package/lib/modelToText/contentModelToText.js.map +1 -1
- package/lib-amd/domUtils/event/extractClipboardItems.js +1 -0
- package/lib-amd/domUtils/event/extractClipboardItems.js.map +1 -1
- package/lib-amd/modelToText/contentModelToText.d.ts +2 -2
- package/lib-amd/modelToText/contentModelToText.js.map +1 -1
- package/lib-mjs/domUtils/event/extractClipboardItems.js +1 -0
- package/lib-mjs/domUtils/event/extractClipboardItems.js.map +1 -1
- package/lib-mjs/modelToText/contentModelToText.d.ts +2 -2
- package/lib-mjs/modelToText/contentModelToText.js.map +1 -1
- package/package.json +2 -2
|
@@ -8,6 +8,7 @@ var ContentHandlers = (_a = {},
|
|
|
8
8
|
_a['text/plain'] = function (data, value) { return (data.text = value); },
|
|
9
9
|
_a['text/*'] = function (data, value, type) { return !!type && (data.customValues[type] = value); },
|
|
10
10
|
_a['text/link-preview'] = tryParseLinkPreview,
|
|
11
|
+
_a['text/uri-list'] = function (data, value) { return (data.text = value); },
|
|
11
12
|
_a);
|
|
12
13
|
/**
|
|
13
14
|
* Extract clipboard items to be a ClipboardData object for IE
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractClipboardItems.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domUtils/event/extractClipboardItems.ts"],"names":[],"mappings":";;;;AAAA,wCAAuC;AAGvC,IAAM,eAAe;IAGjB,GAAC,WAAW,IAAG,UAAC,IAAI,EAAE,KAAK,IAAK,OAAA,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,EAAtB,CAAsB;IACtD,GAAC,YAAY,IAAG,UAAC,IAAI,EAAE,KAAK,IAAK,OAAA,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,EAAnB,CAAmB;IACpD,GAAC,QAAQ,IAAG,UAAC,IAAI,EAAE,KAAK,EAAE,IAAK,IAAK,OAAA,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EAA3C,CAA2C;IAC/E,GAAC,mBAAmB,IAAG,mBAAmB;
|
|
1
|
+
{"version":3,"file":"extractClipboardItems.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domUtils/event/extractClipboardItems.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from '../readFile';\nimport type { ClipboardData, EdgeLinkPreview } from 'roosterjs-content-model-types';\n\nconst ContentHandlers: {\n [contentType: string]: (data: ClipboardData, value: string, type?: string) => void;\n} = {\n ['text/html']: (data, value) => (data.rawHtml = value),\n ['text/plain']: (data, value) => (data.text = value),\n ['text/*']: (data, value, type?) => !!type && (data.customValues[type] = value),\n ['text/link-preview']: tryParseLinkPreview,\n ['text/uri-list']: (data, value) => (data.text = value),\n};\n\n/**\n * Extract clipboard items to be a ClipboardData object for IE\n * @param items The clipboard items retrieve from a DataTransfer object\n * @param allowedCustomPasteType Allowed custom content type when paste besides text/plain, text/html and images\n Only text types are supported, and do not add \"text/\" prefix to the type values\n */\nexport function extractClipboardItems(\n items: DataTransferItem[],\n allowedCustomPasteType?: string[]\n): Promise<ClipboardData> {\n const data: ClipboardData = {\n types: [],\n text: '',\n image: null,\n files: [],\n rawHtml: null,\n customValues: {},\n pasteNativeEvent: true,\n };\n\n return Promise.all(\n (items || []).map(item => {\n const type = item.type;\n\n if (type.indexOf('image/') == 0 && !data.image && item.kind == 'file') {\n data.types.push(type);\n data.image = item.getAsFile();\n return new Promise<void>(resolve => {\n if (data.image) {\n readFile(data.image, dataUrl => {\n data.imageDataUri = dataUrl;\n resolve();\n });\n } else {\n resolve();\n }\n });\n } else if (item.kind == 'file') {\n return new Promise<void>(resolve => {\n const file = item.getAsFile();\n if (!!file) {\n data.types.push(type);\n data.files!.push(file);\n }\n resolve();\n });\n } else {\n const customType = getAllowedCustomType(type, allowedCustomPasteType);\n const handler =\n ContentHandlers[type] || (customType ? ContentHandlers['text/*'] : null);\n return new Promise<void>(resolve =>\n handler\n ? item.getAsString(value => {\n data.types.push(type);\n handler(data, value, customType);\n resolve();\n })\n : resolve()\n );\n }\n })\n ).then(() => data);\n}\n\nfunction tryParseLinkPreview(data: ClipboardData, value: string) {\n try {\n data.customValues['link-preview'] = value;\n data.linkPreview = JSON.parse(value) as EdgeLinkPreview;\n } catch {}\n}\n\nfunction getAllowedCustomType(type: string, allowedCustomPasteType?: string[]) {\n const textType = type.indexOf('text/') == 0 ? type.substring('text/'.length) : null;\n const index =\n allowedCustomPasteType && textType ? allowedCustomPasteType.indexOf(textType) : -1;\n return textType && index >= 0 ? textType : undefined;\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ModelToTextCallbacks, ReadonlyContentModelDocument } from 'roosterjs-content-model-types';
|
|
2
2
|
/**
|
|
3
3
|
* Convert Content Model to plain text
|
|
4
4
|
* @param model The source Content Model
|
|
5
5
|
* @param [separator='\r\n'] The separator string used for connect lines
|
|
6
6
|
* @param callbacks Callbacks to customize the behavior of contentModelToText function
|
|
7
7
|
*/
|
|
8
|
-
export declare function contentModelToText(model:
|
|
8
|
+
export declare function contentModelToText(model: ReadonlyContentModelDocument, separator?: string, callbacks?: ModelToTextCallbacks): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contentModelToText.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/modelToText/contentModelToText.ts"],"names":[],"mappings":";;;AAMA,IAAM,SAAS,GAAG,0CAA0C,CAAC;AAC7D,IAAM,gBAAgB,GAAmC;IACrD,SAAS,EAAE,UAAA,OAAO,IAAI,OAAA,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAA1C,CAA0C;IAChE,aAAa,EAAE,cAAM,OAAA,EAAE,EAAF,CAAE;IACvB,eAAe,EAAE,UAAA,MAAM,YAAI,OAAA,MAAA,MAAM,CAAC,OAAO,CAAC,WAAW,mCAAI,EAAE,CAAA,EAAA;IAC3D,gBAAgB,EAAE,UAAA,OAAO,YAAI,OAAA,MAAA,OAAO,CAAC,OAAO,CAAC,WAAW,mCAAI,EAAE,CAAA,EAAA;IAC9D,OAAO,EAAE,cAAM,OAAA,GAAG,EAAH,CAAG;IAClB,MAAM,EAAE,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,IAAI,EAAT,CAAS;IACzB,WAAW,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;IACvB,OAAO,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;IACnB,YAAY,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;CAC3B,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,kBAAkB,CAC9B,
|
|
1
|
+
{"version":3,"file":"contentModelToText.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/modelToText/contentModelToText.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ModelToTextCallbacks,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelDocument,\n} from 'roosterjs-content-model-types';\n\nconst TextForHR = '________________________________________';\nconst defaultCallbacks: Required<ModelToTextCallbacks> = {\n onDivider: divider => (divider.tagName == 'hr' ? TextForHR : ''),\n onEntityBlock: () => '',\n onEntitySegment: entity => entity.wrapper.textContent ?? '',\n onGeneralSegment: segment => segment.element.textContent ?? '',\n onImage: () => ' ',\n onText: text => text.text,\n onParagraph: () => true,\n onTable: () => true,\n onBlockGroup: () => true,\n};\n\n/**\n * Convert Content Model to plain text\n * @param model The source Content Model\n * @param [separator='\\r\\n'] The separator string used for connect lines\n * @param callbacks Callbacks to customize the behavior of contentModelToText function\n */\nexport function contentModelToText(\n model: ReadonlyContentModelDocument,\n separator: string = '\\r\\n',\n callbacks?: ModelToTextCallbacks\n): string {\n const textArray: string[] = [];\n const fullCallbacks = Object.assign({}, defaultCallbacks, callbacks);\n\n contentModelToTextArray(model, textArray, fullCallbacks);\n\n return textArray.join(separator);\n}\n\nfunction contentModelToTextArray(\n group: ReadonlyContentModelBlockGroup,\n textArray: string[],\n callbacks: Required<ModelToTextCallbacks>\n) {\n if (callbacks.onBlockGroup(group)) {\n group.blocks.forEach(block => {\n switch (block.blockType) {\n case 'Paragraph':\n if (callbacks.onParagraph(block)) {\n let text = '';\n\n block.segments.forEach(segment => {\n switch (segment.segmentType) {\n case 'Br':\n textArray.push(text);\n text = '';\n break;\n\n case 'Entity':\n text += callbacks.onEntitySegment(segment);\n break;\n\n case 'General':\n text += callbacks.onGeneralSegment(segment);\n break;\n\n case 'Text':\n text += callbacks.onText(segment);\n break;\n\n case 'Image':\n text += callbacks.onImage(segment);\n break;\n }\n });\n\n if (text) {\n textArray.push(text);\n }\n }\n\n break;\n\n case 'Divider':\n textArray.push(callbacks.onDivider(block));\n break;\n case 'Entity':\n textArray.push(callbacks.onEntityBlock(block));\n break;\n\n case 'Table':\n if (callbacks.onTable(block)) {\n block.rows.forEach(row =>\n row.cells.forEach(cell => {\n contentModelToTextArray(cell, textArray, callbacks);\n })\n );\n }\n break;\n\n case 'BlockGroup':\n contentModelToTextArray(block, textArray, callbacks);\n break;\n }\n });\n }\n}\n"]}
|
|
@@ -8,6 +8,7 @@ define(["require", "exports", "../readFile"], function (require, exports, readFi
|
|
|
8
8
|
_a['text/plain'] = function (data, value) { return (data.text = value); },
|
|
9
9
|
_a['text/*'] = function (data, value, type) { return !!type && (data.customValues[type] = value); },
|
|
10
10
|
_a['text/link-preview'] = tryParseLinkPreview,
|
|
11
|
+
_a['text/uri-list'] = function (data, value) { return (data.text = value); },
|
|
11
12
|
_a);
|
|
12
13
|
/**
|
|
13
14
|
* Extract clipboard items to be a ClipboardData object for IE
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractClipboardItems.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domUtils/event/extractClipboardItems.ts"],"names":[],"mappings":";;;;;IAGA,IAAM,eAAe;QAGjB,GAAC,WAAW,IAAG,UAAC,IAAI,EAAE,KAAK,IAAK,OAAA,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,EAAtB,CAAsB;QACtD,GAAC,YAAY,IAAG,UAAC,IAAI,EAAE,KAAK,IAAK,OAAA,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,EAAnB,CAAmB;QACpD,GAAC,QAAQ,IAAG,UAAC,IAAI,EAAE,KAAK,EAAE,IAAK,IAAK,OAAA,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EAA3C,CAA2C;QAC/E,GAAC,mBAAmB,IAAG,mBAAmB;
|
|
1
|
+
{"version":3,"file":"extractClipboardItems.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domUtils/event/extractClipboardItems.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from '../readFile';\nimport type { ClipboardData, EdgeLinkPreview } from 'roosterjs-content-model-types';\n\nconst ContentHandlers: {\n [contentType: string]: (data: ClipboardData, value: string, type?: string) => void;\n} = {\n ['text/html']: (data, value) => (data.rawHtml = value),\n ['text/plain']: (data, value) => (data.text = value),\n ['text/*']: (data, value, type?) => !!type && (data.customValues[type] = value),\n ['text/link-preview']: tryParseLinkPreview,\n ['text/uri-list']: (data, value) => (data.text = value),\n};\n\n/**\n * Extract clipboard items to be a ClipboardData object for IE\n * @param items The clipboard items retrieve from a DataTransfer object\n * @param allowedCustomPasteType Allowed custom content type when paste besides text/plain, text/html and images\n Only text types are supported, and do not add \"text/\" prefix to the type values\n */\nexport function extractClipboardItems(\n items: DataTransferItem[],\n allowedCustomPasteType?: string[]\n): Promise<ClipboardData> {\n const data: ClipboardData = {\n types: [],\n text: '',\n image: null,\n files: [],\n rawHtml: null,\n customValues: {},\n pasteNativeEvent: true,\n };\n\n return Promise.all(\n (items || []).map(item => {\n const type = item.type;\n\n if (type.indexOf('image/') == 0 && !data.image && item.kind == 'file') {\n data.types.push(type);\n data.image = item.getAsFile();\n return new Promise<void>(resolve => {\n if (data.image) {\n readFile(data.image, dataUrl => {\n data.imageDataUri = dataUrl;\n resolve();\n });\n } else {\n resolve();\n }\n });\n } else if (item.kind == 'file') {\n return new Promise<void>(resolve => {\n const file = item.getAsFile();\n if (!!file) {\n data.types.push(type);\n data.files!.push(file);\n }\n resolve();\n });\n } else {\n const customType = getAllowedCustomType(type, allowedCustomPasteType);\n const handler =\n ContentHandlers[type] || (customType ? ContentHandlers['text/*'] : null);\n return new Promise<void>(resolve =>\n handler\n ? item.getAsString(value => {\n data.types.push(type);\n handler(data, value, customType);\n resolve();\n })\n : resolve()\n );\n }\n })\n ).then(() => data);\n}\n\nfunction tryParseLinkPreview(data: ClipboardData, value: string) {\n try {\n data.customValues['link-preview'] = value;\n data.linkPreview = JSON.parse(value) as EdgeLinkPreview;\n } catch {}\n}\n\nfunction getAllowedCustomType(type: string, allowedCustomPasteType?: string[]) {\n const textType = type.indexOf('text/') == 0 ? type.substring('text/'.length) : null;\n const index =\n allowedCustomPasteType && textType ? allowedCustomPasteType.indexOf(textType) : -1;\n return textType && index >= 0 ? textType : undefined;\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ModelToTextCallbacks, ReadonlyContentModelDocument } from 'roosterjs-content-model-types';
|
|
2
2
|
/**
|
|
3
3
|
* Convert Content Model to plain text
|
|
4
4
|
* @param model The source Content Model
|
|
5
5
|
* @param [separator='\r\n'] The separator string used for connect lines
|
|
6
6
|
* @param callbacks Callbacks to customize the behavior of contentModelToText function
|
|
7
7
|
*/
|
|
8
|
-
export declare function contentModelToText(model:
|
|
8
|
+
export declare function contentModelToText(model: ReadonlyContentModelDocument, separator?: string, callbacks?: ModelToTextCallbacks): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contentModelToText.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/modelToText/contentModelToText.ts"],"names":[],"mappings":";;;;IAMA,IAAM,SAAS,GAAG,0CAA0C,CAAC;IAC7D,IAAM,gBAAgB,GAAmC;QACrD,SAAS,EAAE,UAAA,OAAO,IAAI,OAAA,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAA1C,CAA0C;QAChE,aAAa,EAAE,cAAM,OAAA,EAAE,EAAF,CAAE;QACvB,eAAe,EAAE,UAAA,MAAM,YAAI,OAAA,MAAA,MAAM,CAAC,OAAO,CAAC,WAAW,mCAAI,EAAE,CAAA,EAAA;QAC3D,gBAAgB,EAAE,UAAA,OAAO,YAAI,OAAA,MAAA,OAAO,CAAC,OAAO,CAAC,WAAW,mCAAI,EAAE,CAAA,EAAA;QAC9D,OAAO,EAAE,cAAM,OAAA,GAAG,EAAH,CAAG;QAClB,MAAM,EAAE,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,IAAI,EAAT,CAAS;QACzB,WAAW,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;QACvB,OAAO,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;QACnB,YAAY,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;KAC3B,CAAC;IAEF;;;;;OAKG;IACH,SAAgB,kBAAkB,CAC9B,
|
|
1
|
+
{"version":3,"file":"contentModelToText.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/modelToText/contentModelToText.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ModelToTextCallbacks,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelDocument,\n} from 'roosterjs-content-model-types';\n\nconst TextForHR = '________________________________________';\nconst defaultCallbacks: Required<ModelToTextCallbacks> = {\n onDivider: divider => (divider.tagName == 'hr' ? TextForHR : ''),\n onEntityBlock: () => '',\n onEntitySegment: entity => entity.wrapper.textContent ?? '',\n onGeneralSegment: segment => segment.element.textContent ?? '',\n onImage: () => ' ',\n onText: text => text.text,\n onParagraph: () => true,\n onTable: () => true,\n onBlockGroup: () => true,\n};\n\n/**\n * Convert Content Model to plain text\n * @param model The source Content Model\n * @param [separator='\\r\\n'] The separator string used for connect lines\n * @param callbacks Callbacks to customize the behavior of contentModelToText function\n */\nexport function contentModelToText(\n model: ReadonlyContentModelDocument,\n separator: string = '\\r\\n',\n callbacks?: ModelToTextCallbacks\n): string {\n const textArray: string[] = [];\n const fullCallbacks = Object.assign({}, defaultCallbacks, callbacks);\n\n contentModelToTextArray(model, textArray, fullCallbacks);\n\n return textArray.join(separator);\n}\n\nfunction contentModelToTextArray(\n group: ReadonlyContentModelBlockGroup,\n textArray: string[],\n callbacks: Required<ModelToTextCallbacks>\n) {\n if (callbacks.onBlockGroup(group)) {\n group.blocks.forEach(block => {\n switch (block.blockType) {\n case 'Paragraph':\n if (callbacks.onParagraph(block)) {\n let text = '';\n\n block.segments.forEach(segment => {\n switch (segment.segmentType) {\n case 'Br':\n textArray.push(text);\n text = '';\n break;\n\n case 'Entity':\n text += callbacks.onEntitySegment(segment);\n break;\n\n case 'General':\n text += callbacks.onGeneralSegment(segment);\n break;\n\n case 'Text':\n text += callbacks.onText(segment);\n break;\n\n case 'Image':\n text += callbacks.onImage(segment);\n break;\n }\n });\n\n if (text) {\n textArray.push(text);\n }\n }\n\n break;\n\n case 'Divider':\n textArray.push(callbacks.onDivider(block));\n break;\n case 'Entity':\n textArray.push(callbacks.onEntityBlock(block));\n break;\n\n case 'Table':\n if (callbacks.onTable(block)) {\n block.rows.forEach(row =>\n row.cells.forEach(cell => {\n contentModelToTextArray(cell, textArray, callbacks);\n })\n );\n }\n break;\n\n case 'BlockGroup':\n contentModelToTextArray(block, textArray, callbacks);\n break;\n }\n });\n }\n}\n"]}
|
|
@@ -5,6 +5,7 @@ var ContentHandlers = (_a = {},
|
|
|
5
5
|
_a['text/plain'] = function (data, value) { return (data.text = value); },
|
|
6
6
|
_a['text/*'] = function (data, value, type) { return !!type && (data.customValues[type] = value); },
|
|
7
7
|
_a['text/link-preview'] = tryParseLinkPreview,
|
|
8
|
+
_a['text/uri-list'] = function (data, value) { return (data.text = value); },
|
|
8
9
|
_a);
|
|
9
10
|
/**
|
|
10
11
|
* Extract clipboard items to be a ClipboardData object for IE
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractClipboardItems.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domUtils/event/extractClipboardItems.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,IAAM,eAAe;IAGjB,GAAC,WAAW,IAAG,UAAC,IAAI,EAAE,KAAK,IAAK,OAAA,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,EAAtB,CAAsB;IACtD,GAAC,YAAY,IAAG,UAAC,IAAI,EAAE,KAAK,IAAK,OAAA,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,EAAnB,CAAmB;IACpD,GAAC,QAAQ,IAAG,UAAC,IAAI,EAAE,KAAK,EAAE,IAAK,IAAK,OAAA,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,EAA3C,CAA2C;IAC/E,GAAC,mBAAmB,IAAG,mBAAmB;
|
|
1
|
+
{"version":3,"file":"extractClipboardItems.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-dom/lib/domUtils/event/extractClipboardItems.ts"],"names":[],"mappings":"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","sourcesContent":["import { readFile } from '../readFile';\nimport type { ClipboardData, EdgeLinkPreview } from 'roosterjs-content-model-types';\n\nconst ContentHandlers: {\n [contentType: string]: (data: ClipboardData, value: string, type?: string) => void;\n} = {\n ['text/html']: (data, value) => (data.rawHtml = value),\n ['text/plain']: (data, value) => (data.text = value),\n ['text/*']: (data, value, type?) => !!type && (data.customValues[type] = value),\n ['text/link-preview']: tryParseLinkPreview,\n ['text/uri-list']: (data, value) => (data.text = value),\n};\n\n/**\n * Extract clipboard items to be a ClipboardData object for IE\n * @param items The clipboard items retrieve from a DataTransfer object\n * @param allowedCustomPasteType Allowed custom content type when paste besides text/plain, text/html and images\n Only text types are supported, and do not add \"text/\" prefix to the type values\n */\nexport function extractClipboardItems(\n items: DataTransferItem[],\n allowedCustomPasteType?: string[]\n): Promise<ClipboardData> {\n const data: ClipboardData = {\n types: [],\n text: '',\n image: null,\n files: [],\n rawHtml: null,\n customValues: {},\n pasteNativeEvent: true,\n };\n\n return Promise.all(\n (items || []).map(item => {\n const type = item.type;\n\n if (type.indexOf('image/') == 0 && !data.image && item.kind == 'file') {\n data.types.push(type);\n data.image = item.getAsFile();\n return new Promise<void>(resolve => {\n if (data.image) {\n readFile(data.image, dataUrl => {\n data.imageDataUri = dataUrl;\n resolve();\n });\n } else {\n resolve();\n }\n });\n } else if (item.kind == 'file') {\n return new Promise<void>(resolve => {\n const file = item.getAsFile();\n if (!!file) {\n data.types.push(type);\n data.files!.push(file);\n }\n resolve();\n });\n } else {\n const customType = getAllowedCustomType(type, allowedCustomPasteType);\n const handler =\n ContentHandlers[type] || (customType ? ContentHandlers['text/*'] : null);\n return new Promise<void>(resolve =>\n handler\n ? item.getAsString(value => {\n data.types.push(type);\n handler(data, value, customType);\n resolve();\n })\n : resolve()\n );\n }\n })\n ).then(() => data);\n}\n\nfunction tryParseLinkPreview(data: ClipboardData, value: string) {\n try {\n data.customValues['link-preview'] = value;\n data.linkPreview = JSON.parse(value) as EdgeLinkPreview;\n } catch {}\n}\n\nfunction getAllowedCustomType(type: string, allowedCustomPasteType?: string[]) {\n const textType = type.indexOf('text/') == 0 ? type.substring('text/'.length) : null;\n const index =\n allowedCustomPasteType && textType ? allowedCustomPasteType.indexOf(textType) : -1;\n return textType && index >= 0 ? textType : undefined;\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ModelToTextCallbacks, ReadonlyContentModelDocument } from 'roosterjs-content-model-types';
|
|
2
2
|
/**
|
|
3
3
|
* Convert Content Model to plain text
|
|
4
4
|
* @param model The source Content Model
|
|
5
5
|
* @param [separator='\r\n'] The separator string used for connect lines
|
|
6
6
|
* @param callbacks Callbacks to customize the behavior of contentModelToText function
|
|
7
7
|
*/
|
|
8
|
-
export declare function contentModelToText(model:
|
|
8
|
+
export declare function contentModelToText(model: ReadonlyContentModelDocument, separator?: string, callbacks?: ModelToTextCallbacks): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contentModelToText.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/modelToText/contentModelToText.ts"],"names":[],"mappings":"AAMA,IAAM,SAAS,GAAG,0CAA0C,CAAC;AAC7D,IAAM,gBAAgB,GAAmC;IACrD,SAAS,EAAE,UAAA,OAAO,IAAI,OAAA,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAA1C,CAA0C;IAChE,aAAa,EAAE,cAAM,OAAA,EAAE,EAAF,CAAE;IACvB,eAAe,EAAE,UAAA,MAAM,YAAI,OAAA,MAAA,MAAM,CAAC,OAAO,CAAC,WAAW,mCAAI,EAAE,CAAA,EAAA;IAC3D,gBAAgB,EAAE,UAAA,OAAO,YAAI,OAAA,MAAA,OAAO,CAAC,OAAO,CAAC,WAAW,mCAAI,EAAE,CAAA,EAAA;IAC9D,OAAO,EAAE,cAAM,OAAA,GAAG,EAAH,CAAG;IAClB,MAAM,EAAE,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,IAAI,EAAT,CAAS;IACzB,WAAW,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;IACvB,OAAO,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;IACnB,YAAY,EAAE,cAAM,OAAA,IAAI,EAAJ,CAAI;CAC3B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAC9B,
|
|
1
|
+
{"version":3,"file":"contentModelToText.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-dom/lib/modelToText/contentModelToText.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ModelToTextCallbacks,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelDocument,\n} from 'roosterjs-content-model-types';\n\nconst TextForHR = '________________________________________';\nconst defaultCallbacks: Required<ModelToTextCallbacks> = {\n onDivider: divider => (divider.tagName == 'hr' ? TextForHR : ''),\n onEntityBlock: () => '',\n onEntitySegment: entity => entity.wrapper.textContent ?? '',\n onGeneralSegment: segment => segment.element.textContent ?? '',\n onImage: () => ' ',\n onText: text => text.text,\n onParagraph: () => true,\n onTable: () => true,\n onBlockGroup: () => true,\n};\n\n/**\n * Convert Content Model to plain text\n * @param model The source Content Model\n * @param [separator='\\r\\n'] The separator string used for connect lines\n * @param callbacks Callbacks to customize the behavior of contentModelToText function\n */\nexport function contentModelToText(\n model: ReadonlyContentModelDocument,\n separator: string = '\\r\\n',\n callbacks?: ModelToTextCallbacks\n): string {\n const textArray: string[] = [];\n const fullCallbacks = Object.assign({}, defaultCallbacks, callbacks);\n\n contentModelToTextArray(model, textArray, fullCallbacks);\n\n return textArray.join(separator);\n}\n\nfunction contentModelToTextArray(\n group: ReadonlyContentModelBlockGroup,\n textArray: string[],\n callbacks: Required<ModelToTextCallbacks>\n) {\n if (callbacks.onBlockGroup(group)) {\n group.blocks.forEach(block => {\n switch (block.blockType) {\n case 'Paragraph':\n if (callbacks.onParagraph(block)) {\n let text = '';\n\n block.segments.forEach(segment => {\n switch (segment.segmentType) {\n case 'Br':\n textArray.push(text);\n text = '';\n break;\n\n case 'Entity':\n text += callbacks.onEntitySegment(segment);\n break;\n\n case 'General':\n text += callbacks.onGeneralSegment(segment);\n break;\n\n case 'Text':\n text += callbacks.onText(segment);\n break;\n\n case 'Image':\n text += callbacks.onImage(segment);\n break;\n }\n });\n\n if (text) {\n textArray.push(text);\n }\n }\n\n break;\n\n case 'Divider':\n textArray.push(callbacks.onDivider(block));\n break;\n case 'Entity':\n textArray.push(callbacks.onEntityBlock(block));\n break;\n\n case 'Table':\n if (callbacks.onTable(block)) {\n block.rows.forEach(row =>\n row.cells.forEach(cell => {\n contentModelToTextArray(cell, textArray, callbacks);\n })\n );\n }\n break;\n\n case 'BlockGroup':\n contentModelToTextArray(block, textArray, callbacks);\n break;\n }\n });\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"description": "Content Model for roosterjs",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"tslib": "^2.3.1",
|
|
6
|
-
"roosterjs-content-model-types": "^9.
|
|
6
|
+
"roosterjs-content-model-types": "^9.20.0"
|
|
7
7
|
},
|
|
8
|
-
"version": "9.
|
|
8
|
+
"version": "9.20.0",
|
|
9
9
|
"main": "./lib/index.js",
|
|
10
10
|
"typings": "./lib/index.d.ts",
|
|
11
11
|
"module": "./lib-mjs/index.js",
|