roosterjs-content-model-plugins 9.13.0 → 9.15.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/autoFormat/list/getListTypeStyle.js +17 -9
- package/lib/autoFormat/list/getListTypeStyle.js.map +1 -1
- package/lib/autoFormat/list/keyboardListTrigger.js +1 -1
- package/lib/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib/edit/inputSteps/handleEnterOnList.js +30 -10
- package/lib/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib/imageEdit/utils/createImageWrapper.js +1 -1
- package/lib/imageEdit/utils/createImageWrapper.js.map +1 -1
- package/lib/imageEdit/utils/findEditingImage.js +21 -69
- package/lib/imageEdit/utils/findEditingImage.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +3 -1
- package/lib/index.js.map +1 -1
- package/lib/shortcut/ShortcutPlugin.js +5 -0
- package/lib/shortcut/ShortcutPlugin.js.map +1 -1
- package/lib/shortcut/shortcuts.d.ts +1 -1
- package/lib/shortcut/shortcuts.js +1 -2
- package/lib/shortcut/shortcuts.js.map +1 -1
- package/lib/watermark/isModelEmptyFast.d.ts +2 -3
- package/lib/watermark/isModelEmptyFast.js +0 -1
- package/lib/watermark/isModelEmptyFast.js.map +1 -1
- package/lib-amd/autoFormat/list/getListTypeStyle.js +17 -9
- package/lib-amd/autoFormat/list/getListTypeStyle.js.map +1 -1
- package/lib-amd/autoFormat/list/keyboardListTrigger.js +1 -1
- package/lib-amd/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib-amd/edit/inputSteps/handleEnterOnList.js +30 -10
- package/lib-amd/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib-amd/imageEdit/utils/createImageWrapper.js +1 -1
- package/lib-amd/imageEdit/utils/createImageWrapper.js.map +1 -1
- package/lib-amd/imageEdit/utils/findEditingImage.js +21 -70
- package/lib-amd/imageEdit/utils/findEditingImage.js.map +1 -1
- package/lib-amd/index.d.ts +1 -0
- package/lib-amd/index.js +3 -2
- package/lib-amd/index.js.map +1 -1
- package/lib-amd/shortcut/ShortcutPlugin.js +5 -0
- package/lib-amd/shortcut/ShortcutPlugin.js.map +1 -1
- package/lib-amd/shortcut/shortcuts.d.ts +1 -1
- package/lib-amd/shortcut/shortcuts.js +1 -2
- package/lib-amd/shortcut/shortcuts.js.map +1 -1
- package/lib-amd/watermark/isModelEmptyFast.d.ts +2 -3
- package/lib-amd/watermark/isModelEmptyFast.js +0 -1
- package/lib-amd/watermark/isModelEmptyFast.js.map +1 -1
- package/lib-mjs/autoFormat/list/getListTypeStyle.js +17 -9
- package/lib-mjs/autoFormat/list/getListTypeStyle.js.map +1 -1
- package/lib-mjs/autoFormat/list/keyboardListTrigger.js +1 -1
- package/lib-mjs/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib-mjs/edit/inputSteps/handleEnterOnList.js +30 -10
- package/lib-mjs/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib-mjs/imageEdit/utils/createImageWrapper.js +1 -1
- package/lib-mjs/imageEdit/utils/createImageWrapper.js.map +1 -1
- package/lib-mjs/imageEdit/utils/findEditingImage.js +20 -68
- package/lib-mjs/imageEdit/utils/findEditingImage.js.map +1 -1
- package/lib-mjs/index.d.ts +1 -0
- package/lib-mjs/index.js +1 -0
- package/lib-mjs/index.js.map +1 -1
- package/lib-mjs/shortcut/ShortcutPlugin.js +5 -0
- package/lib-mjs/shortcut/ShortcutPlugin.js.map +1 -1
- package/lib-mjs/shortcut/shortcuts.d.ts +1 -1
- package/lib-mjs/shortcut/shortcuts.js +1 -2
- package/lib-mjs/shortcut/shortcuts.js.map +1 -1
- package/lib-mjs/watermark/isModelEmptyFast.d.ts +2 -3
- package/lib-mjs/watermark/isModelEmptyFast.js +0 -1
- package/lib-mjs/watermark/isModelEmptyFast.js.map +1 -1
- package/package.json +5 -5
|
@@ -27,7 +27,7 @@ function getListTypeStyle(model, shouldSearchForBullet, shouldSearchForNumbering
|
|
|
27
27
|
return { listType: 'UL', styleType: bulletType };
|
|
28
28
|
}
|
|
29
29
|
else if (shouldSearchForNumbering) {
|
|
30
|
-
var
|
|
30
|
+
var _a = getPreviousListLevel(model, paragraph), previousList = _a.previousList, hasSpaceBetween = _a.hasSpaceBetween;
|
|
31
31
|
var previousIndex = getPreviousListIndex(model, previousList);
|
|
32
32
|
var previousListStyle = getPreviousListStyle(previousList);
|
|
33
33
|
var numberingType = (0, getNumberingListStyle_1.getNumberingListStyle)(listMarker, previousIndex, previousListStyle);
|
|
@@ -35,11 +35,7 @@ function getListTypeStyle(model, shouldSearchForBullet, shouldSearchForNumbering
|
|
|
35
35
|
return {
|
|
36
36
|
listType: 'OL',
|
|
37
37
|
styleType: numberingType,
|
|
38
|
-
index:
|
|
39
|
-
previousListStyle === numberingType &&
|
|
40
|
-
previousIndex
|
|
41
|
-
? previousIndex + 1
|
|
42
|
-
: undefined,
|
|
38
|
+
index: getIndex(listMarker, previousListStyle, numberingType, previousIndex, hasSpaceBetween),
|
|
43
39
|
};
|
|
44
40
|
}
|
|
45
41
|
}
|
|
@@ -47,25 +43,37 @@ function getListTypeStyle(model, shouldSearchForBullet, shouldSearchForNumbering
|
|
|
47
43
|
return undefined;
|
|
48
44
|
}
|
|
49
45
|
exports.getListTypeStyle = getListTypeStyle;
|
|
46
|
+
var getIndex = function (listMarker, previousListStyle, numberingType, previousIndex, hasSpaceBetween) {
|
|
47
|
+
var newList = isNewList(listMarker);
|
|
48
|
+
return previousListStyle && previousListStyle !== numberingType && newList
|
|
49
|
+
? 1
|
|
50
|
+
: !newList && previousListStyle === numberingType && hasSpaceBetween && previousIndex
|
|
51
|
+
? previousIndex + 1
|
|
52
|
+
: undefined;
|
|
53
|
+
};
|
|
50
54
|
var getPreviousListIndex = function (model, previousListItem) {
|
|
51
55
|
return previousListItem ? (0, roosterjs_content_model_api_1.findListItemsInSameThread)(model, previousListItem).length : undefined;
|
|
52
56
|
};
|
|
53
57
|
var getPreviousListLevel = function (model, paragraph) {
|
|
54
58
|
var blocks = (0, roosterjs_content_model_dom_1.getOperationalBlocks)(model, ['ListItem'], ['TableCell'])[0];
|
|
55
|
-
var
|
|
59
|
+
var previousList = undefined;
|
|
60
|
+
var hasSpaceBetween = false;
|
|
56
61
|
if (blocks) {
|
|
57
62
|
var listBlockIndex = blocks.parent.blocks.indexOf(paragraph);
|
|
58
63
|
if (listBlockIndex > -1) {
|
|
59
64
|
for (var i = listBlockIndex - 1; i > -1; i--) {
|
|
60
65
|
var item = blocks.parent.blocks[i];
|
|
61
66
|
if ((0, roosterjs_content_model_dom_1.isBlockGroupOfType)(item, 'ListItem')) {
|
|
62
|
-
|
|
67
|
+
previousList = item;
|
|
63
68
|
break;
|
|
64
69
|
}
|
|
70
|
+
else {
|
|
71
|
+
hasSpaceBetween = listBlockIndex > 0 ? true : false;
|
|
72
|
+
}
|
|
65
73
|
}
|
|
66
74
|
}
|
|
67
75
|
}
|
|
68
|
-
return
|
|
76
|
+
return { previousList: previousList, hasSpaceBetween: hasSpaceBetween };
|
|
69
77
|
};
|
|
70
78
|
var getPreviousListStyle = function (list) {
|
|
71
79
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getListTypeStyle.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/autoFormat/list/getListTypeStyle.ts"],"names":[],"mappings":";;;AAAA,2EAAwE;AACxE,iEAAgE;AAOhE,2EAMqC;AAWrC;;GAEG;AACH,SAAgB,gBAAgB,CAC5B,KAAmC,EACnC,qBAAqC,EACrC,wBAAwC;IADxC,sCAAA,EAAA,4BAAqC;IACrC,yCAAA,EAAA,+BAAwC;IAExC,IAAM,6BAA6B,GAAG,IAAA,8DAAgC,EAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpF,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE;QACnC,OAAO,SAAS,CAAC;KACpB;IACD,IAAM,MAAM,GAAG,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,IAAM,SAAS,GAAG,6BAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,IAAM,iBAAiB,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEjD,IACI,MAAM;QACN,MAAM,CAAC,WAAW,IAAI,iBAAiB;QACvC,iBAAiB;QACjB,iBAAiB,CAAC,WAAW,IAAI,MAAM,EACzC;QACE,IAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjD,IAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAElD,IAAI,UAAU,IAAI,qBAAqB,EAAE;YACrC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;SACpD;aAAM,IAAI,wBAAwB,EAAE;
|
|
1
|
+
{"version":3,"file":"getListTypeStyle.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/autoFormat/list/getListTypeStyle.ts"],"names":[],"mappings":"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","sourcesContent":["import { findListItemsInSameThread } from 'roosterjs-content-model-api';\nimport { getNumberingListStyle } from './getNumberingListStyle';\nimport type {\n ContentModelListItem,\n ReadonlyContentModelDocument,\n ReadonlyContentModelListItem,\n ReadonlyContentModelParagraph,\n} from 'roosterjs-content-model-types';\nimport {\n BulletListType,\n isBlockGroupOfType,\n updateListMetadata,\n getOperationalBlocks,\n getSelectedSegmentsAndParagraphs,\n} from 'roosterjs-content-model-dom';\n\n/**\n * @internal\n */\ninterface ListTypeStyle {\n listType: 'UL' | 'OL';\n styleType: number;\n index?: number;\n}\n\n/**\n * @internal\n */\nexport function getListTypeStyle(\n model: ReadonlyContentModelDocument,\n shouldSearchForBullet: boolean = true,\n shouldSearchForNumbering: boolean = true\n): ListTypeStyle | undefined {\n const selectedSegmentsAndParagraphs = getSelectedSegmentsAndParagraphs(model, true);\n if (!selectedSegmentsAndParagraphs[0]) {\n return undefined;\n }\n const marker = selectedSegmentsAndParagraphs[0][0];\n const paragraph = selectedSegmentsAndParagraphs[0][1];\n const listMarkerSegment = paragraph?.segments[0];\n\n if (\n marker &&\n marker.segmentType == 'SelectionMarker' &&\n listMarkerSegment &&\n listMarkerSegment.segmentType == 'Text'\n ) {\n const listMarker = listMarkerSegment.text.trim();\n const bulletType = bulletListType.get(listMarker);\n\n if (bulletType && shouldSearchForBullet) {\n return { listType: 'UL', styleType: bulletType };\n } else if (shouldSearchForNumbering) {\n const { previousList, hasSpaceBetween } = getPreviousListLevel(model, paragraph);\n const previousIndex = getPreviousListIndex(model, previousList);\n const previousListStyle = getPreviousListStyle(previousList);\n const numberingType = getNumberingListStyle(\n listMarker,\n previousIndex,\n previousListStyle\n );\n\n if (numberingType) {\n return {\n listType: 'OL',\n styleType: numberingType,\n index: getIndex(\n listMarker,\n previousListStyle,\n numberingType,\n previousIndex,\n hasSpaceBetween\n ),\n };\n }\n }\n }\n return undefined;\n}\n\nconst getIndex = (\n listMarker: string,\n previousListStyle?: number,\n numberingType?: number,\n previousIndex?: number,\n hasSpaceBetween?: boolean\n) => {\n const newList = isNewList(listMarker);\n return previousListStyle && previousListStyle !== numberingType && newList\n ? 1\n : !newList && previousListStyle === numberingType && hasSpaceBetween && previousIndex\n ? previousIndex + 1\n : undefined;\n};\n\nconst getPreviousListIndex = (\n model: ReadonlyContentModelDocument,\n previousListItem?: ReadonlyContentModelListItem\n) => {\n return previousListItem ? findListItemsInSameThread(model, previousListItem).length : undefined;\n};\n\nconst getPreviousListLevel = (\n model: ReadonlyContentModelDocument,\n paragraph: ReadonlyContentModelParagraph\n) => {\n const blocks = getOperationalBlocks<ContentModelListItem>(\n model,\n ['ListItem'],\n ['TableCell']\n )[0];\n let previousList: ContentModelListItem | undefined = undefined;\n let hasSpaceBetween = false;\n if (blocks) {\n const listBlockIndex = blocks.parent.blocks.indexOf(paragraph);\n\n if (listBlockIndex > -1) {\n for (let i = listBlockIndex - 1; i > -1; i--) {\n const item = blocks.parent.blocks[i];\n if (isBlockGroupOfType<ContentModelListItem>(item, 'ListItem')) {\n previousList = item;\n break;\n } else {\n hasSpaceBetween = listBlockIndex > 0 ? true : false;\n }\n }\n }\n }\n\n return { previousList, hasSpaceBetween };\n};\n\nconst getPreviousListStyle = (list?: ContentModelListItem) => {\n if (list?.levels[0].dataset) {\n return updateListMetadata(list.levels[0])?.orderedStyleType;\n }\n};\n\nconst bulletListType: Map<string, number> = new Map<string, number>([\n ['*', BulletListType.Disc],\n ['-', BulletListType.Dash],\n ['--', BulletListType.Square],\n ['->', BulletListType.LongArrow],\n ['-->', BulletListType.DoubleLongArrow],\n ['=>', BulletListType.UnfilledArrow],\n ['>', BulletListType.ShortArrow],\n ['—', BulletListType.Hyphen],\n]);\n\nconst isNewList = (listMarker: string) => {\n const marker = listMarker.replace(/[^\\w\\s]/g, '');\n const pattern = /^[1aAiI]$/;\n return pattern.test(marker);\n};\n"]}
|
|
@@ -26,7 +26,7 @@ exports.keyboardListTrigger = keyboardListTrigger;
|
|
|
26
26
|
var triggerList = function (model, listType, styleType, index) {
|
|
27
27
|
(0, roosterjs_content_model_api_1.setListType)(model, listType);
|
|
28
28
|
var isOrderedList = listType == 'OL';
|
|
29
|
-
if (index && index >
|
|
29
|
+
if (index && index > 0 && isOrderedList) {
|
|
30
30
|
(0, roosterjs_content_model_api_1.setModelListStartNumber)(model, index);
|
|
31
31
|
}
|
|
32
32
|
(0, roosterjs_content_model_api_1.setModelListStyle)(model, isOrderedList
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboardListTrigger.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/autoFormat/list/keyboardListTrigger.ts"],"names":[],"mappings":";;;;AAAA,uDAAsD;AACtD,2EAAuF;AACvF,2EAKqC;AAQrC;;GAEG;AACH,SAAgB,mBAAmB,CAC/B,KAAmC,EACnC,SAA8C,EAC9C,OAAkC,EAClC,qBAAqC,EACrC,wBAAwC;IADxC,sCAAA,EAAA,4BAAqC;IACrC,yCAAA,EAAA,+BAAwC;IAExC,IAAM,aAAa,GAAG,IAAA,mCAAgB,EAAC,KAAK,EAAE,qBAAqB,EAAE,wBAAwB,CAAC,CAAC;IAC/F,IAAI,aAAa,EAAE;QACf,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,IAAA,QAAQ,GAAuB,aAAa,SAApC,EAAE,SAAS,GAAY,aAAa,UAAzB,EAAE,KAAK,GAAK,aAAa,MAAlB,CAAmB;QACrD,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAClC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC;KACf;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAlBD,kDAkBC;AAED,IAAM,WAAW,GAAG,UAChB,KAAmC,EACnC,QAAqB,EACrB,SAAiB,EACjB,KAAc;IAEd,IAAA,yCAAW,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7B,IAAM,aAAa,GAAG,QAAQ,IAAI,IAAI,CAAC;IACvC,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,IAAI,aAAa,EAAE;QACrC,IAAA,qDAAuB,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACzC;IACD,IAAA,+CAAiB,EACb,KAAK,EACL,aAAa;QACT,CAAC,CAAC;YACI,gBAAgB,EAAE,SAAS;YAC3B,uBAAuB,EAAE,KAAK;SACjC;QACH,CAAC,CAAC;YACI,kBAAkB,EAAE,SAAS;YAC7B,uBAAuB,EAAE,KAAK;SACjC,CACV,CAAC;AACN,CAAC,CAAC;AACF,SAAS,eAAe,CAAC,KAAmC,EAAE,OAAkC;IACtF,IAAA,KAAA,oBAAyB,IAAA,kDAAoB,EAC/C,KAAK,EACL,CAAC,UAAU,CAAC,EACZ,EAAE,CAAC,8IAA8I;KACpJ,IAAA,EAJM,oBAAoB,QAI1B,CAAC;IAEF,IAAI,oBAAoB,IAAI,IAAA,gDAAkB,EAAC,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;QAC5E,IAAA,IAAI,GAAY,oBAAoB,KAAhC,EAAE,KAAK,GAAK,oBAAoB,MAAzB,CAA0B;QAC7C,OAAO,CAAC,YAAY,GAAG,IAAA,iDAAmB,8BAAE,KAAK,uBAAK,IAAI,UAAE,CAAC;KAChE;AACL,CAAC","sourcesContent":["import { getListTypeStyle } from './getListTypeStyle';\nimport { getOperationalBlocks, isBlockGroupOfType } from 'roosterjs-content-model-dom';\nimport {\n getListAnnounceData,\n setListType,\n setModelListStartNumber,\n setModelListStyle,\n} from 'roosterjs-content-model-api';\nimport type {\n ContentModelListItem,\n FormatContentModelContext,\n ReadonlyContentModelDocument,\n ShallowMutableContentModelParagraph,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function keyboardListTrigger(\n model: ReadonlyContentModelDocument,\n paragraph: ShallowMutableContentModelParagraph,\n context: FormatContentModelContext,\n shouldSearchForBullet: boolean = true,\n shouldSearchForNumbering: boolean = true\n) {\n const listStyleType = getListTypeStyle(model, shouldSearchForBullet, shouldSearchForNumbering);\n if (listStyleType) {\n paragraph.segments.splice(0, 1);\n const { listType, styleType, index } = listStyleType;\n triggerList(model, listType, styleType, index);\n context.canUndoByBackspace = true;\n setAnnounceData(model, context);\n\n return true;\n }\n return false;\n}\n\nconst triggerList = (\n model: ReadonlyContentModelDocument,\n listType: 'OL' | 'UL',\n styleType: number,\n index?: number\n) => {\n setListType(model, listType);\n const isOrderedList = listType == 'OL';\n if (index && index >
|
|
1
|
+
{"version":3,"file":"keyboardListTrigger.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/autoFormat/list/keyboardListTrigger.ts"],"names":[],"mappings":";;;;AAAA,uDAAsD;AACtD,2EAAuF;AACvF,2EAKqC;AAQrC;;GAEG;AACH,SAAgB,mBAAmB,CAC/B,KAAmC,EACnC,SAA8C,EAC9C,OAAkC,EAClC,qBAAqC,EACrC,wBAAwC;IADxC,sCAAA,EAAA,4BAAqC;IACrC,yCAAA,EAAA,+BAAwC;IAExC,IAAM,aAAa,GAAG,IAAA,mCAAgB,EAAC,KAAK,EAAE,qBAAqB,EAAE,wBAAwB,CAAC,CAAC;IAC/F,IAAI,aAAa,EAAE;QACf,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,IAAA,QAAQ,GAAuB,aAAa,SAApC,EAAE,SAAS,GAAY,aAAa,UAAzB,EAAE,KAAK,GAAK,aAAa,MAAlB,CAAmB;QACrD,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAClC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC;KACf;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAlBD,kDAkBC;AAED,IAAM,WAAW,GAAG,UAChB,KAAmC,EACnC,QAAqB,EACrB,SAAiB,EACjB,KAAc;IAEd,IAAA,yCAAW,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7B,IAAM,aAAa,GAAG,QAAQ,IAAI,IAAI,CAAC;IACvC,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,IAAI,aAAa,EAAE;QACrC,IAAA,qDAAuB,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACzC;IACD,IAAA,+CAAiB,EACb,KAAK,EACL,aAAa;QACT,CAAC,CAAC;YACI,gBAAgB,EAAE,SAAS;YAC3B,uBAAuB,EAAE,KAAK;SACjC;QACH,CAAC,CAAC;YACI,kBAAkB,EAAE,SAAS;YAC7B,uBAAuB,EAAE,KAAK;SACjC,CACV,CAAC;AACN,CAAC,CAAC;AACF,SAAS,eAAe,CAAC,KAAmC,EAAE,OAAkC;IACtF,IAAA,KAAA,oBAAyB,IAAA,kDAAoB,EAC/C,KAAK,EACL,CAAC,UAAU,CAAC,EACZ,EAAE,CAAC,8IAA8I;KACpJ,IAAA,EAJM,oBAAoB,QAI1B,CAAC;IAEF,IAAI,oBAAoB,IAAI,IAAA,gDAAkB,EAAC,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;QAC5E,IAAA,IAAI,GAAY,oBAAoB,KAAhC,EAAE,KAAK,GAAK,oBAAoB,MAAzB,CAA0B;QAC7C,OAAO,CAAC,YAAY,GAAG,IAAA,iDAAmB,8BAAE,KAAK,uBAAK,IAAI,UAAE,CAAC;KAChE;AACL,CAAC","sourcesContent":["import { getListTypeStyle } from './getListTypeStyle';\nimport { getOperationalBlocks, isBlockGroupOfType } from 'roosterjs-content-model-dom';\nimport {\n getListAnnounceData,\n setListType,\n setModelListStartNumber,\n setModelListStyle,\n} from 'roosterjs-content-model-api';\nimport type {\n ContentModelListItem,\n FormatContentModelContext,\n ReadonlyContentModelDocument,\n ShallowMutableContentModelParagraph,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function keyboardListTrigger(\n model: ReadonlyContentModelDocument,\n paragraph: ShallowMutableContentModelParagraph,\n context: FormatContentModelContext,\n shouldSearchForBullet: boolean = true,\n shouldSearchForNumbering: boolean = true\n) {\n const listStyleType = getListTypeStyle(model, shouldSearchForBullet, shouldSearchForNumbering);\n if (listStyleType) {\n paragraph.segments.splice(0, 1);\n const { listType, styleType, index } = listStyleType;\n triggerList(model, listType, styleType, index);\n context.canUndoByBackspace = true;\n setAnnounceData(model, context);\n\n return true;\n }\n return false;\n}\n\nconst triggerList = (\n model: ReadonlyContentModelDocument,\n listType: 'OL' | 'UL',\n styleType: number,\n index?: number\n) => {\n setListType(model, listType);\n const isOrderedList = listType == 'OL';\n if (index && index > 0 && isOrderedList) {\n setModelListStartNumber(model, index);\n }\n setModelListStyle(\n model,\n isOrderedList\n ? {\n orderedStyleType: styleType,\n applyListStyleFromLevel: false,\n }\n : {\n unorderedStyleType: styleType,\n applyListStyleFromLevel: false,\n }\n );\n};\nfunction setAnnounceData(model: ReadonlyContentModelDocument, context: FormatContentModelContext) {\n const [paragraphOrListItems] = getOperationalBlocks<ContentModelListItem>(\n model,\n ['ListItem'],\n [] // Set stop types to be empty so we can find list items even cross the boundary of table, then we can always operation on the list item if any\n );\n\n if (paragraphOrListItems && isBlockGroupOfType(paragraphOrListItems.block, 'ListItem')) {\n const { path, block } = paragraphOrListItems;\n context.announceData = getListAnnounceData([block, ...path]);\n }\n}\n"]}
|
|
@@ -31,16 +31,19 @@ var handleEnterOnList = function (context) {
|
|
|
31
31
|
var listIndex = listParent.blocks.indexOf(listItem);
|
|
32
32
|
var nextBlock = listParent.blocks[listIndex + 1];
|
|
33
33
|
if (nextBlock) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
nextListItem.levels.forEach(function (level) {
|
|
34
|
+
if ((0, roosterjs_content_model_dom_1.isBlockGroupOfType)(nextBlock, 'ListItem') &&
|
|
35
|
+
nextBlock.levels[0]) {
|
|
36
|
+
nextBlock.levels.forEach(function (level) {
|
|
38
37
|
// Remove startNumberOverride so that next list item can join current list, unless it is 1.
|
|
39
38
|
// List start with 1 means it should be an explicit new list and should never join another list before it
|
|
40
39
|
if (level.format.startNumberOverride !== 1) {
|
|
41
40
|
level.format.startNumberOverride = undefined;
|
|
42
41
|
}
|
|
43
42
|
});
|
|
43
|
+
if (listItem.levels.length == 0) {
|
|
44
|
+
var index_1 = findIndex(listParent.blocks, nextBlock.levels.length, listIndex);
|
|
45
|
+
nextBlock.levels[nextBlock.levels.length - 1].format.startNumberOverride = index_1;
|
|
46
|
+
}
|
|
44
47
|
}
|
|
45
48
|
}
|
|
46
49
|
context.deleteResult = 'range';
|
|
@@ -49,11 +52,13 @@ var handleEnterOnList = function (context) {
|
|
|
49
52
|
};
|
|
50
53
|
exports.handleEnterOnList = handleEnterOnList;
|
|
51
54
|
var isEmptyListItem = function (listItem) {
|
|
52
|
-
return
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
return listItem.blocks.length === 1 && isEmptyParagraph(listItem.blocks[0]);
|
|
56
|
+
};
|
|
57
|
+
var isEmptyParagraph = function (block) {
|
|
58
|
+
return (block.blockType === 'Paragraph' &&
|
|
59
|
+
block.segments.length === 2 &&
|
|
60
|
+
block.segments[0].segmentType === 'SelectionMarker' &&
|
|
61
|
+
block.segments[1].segmentType === 'Br');
|
|
57
62
|
};
|
|
58
63
|
var createNewListItem = function (context, listItem, listParent) {
|
|
59
64
|
var _a;
|
|
@@ -63,7 +68,7 @@ var createNewListItem = function (context, listItem, listParent) {
|
|
|
63
68
|
var paraIndex = listItem.blocks.indexOf(currentPara);
|
|
64
69
|
var newParagraph = (0, splitParagraph_1.splitParagraph)(insertPoint);
|
|
65
70
|
var levels = createNewListLevel(listItem);
|
|
66
|
-
var newListItem = (0, roosterjs_content_model_dom_1.createListItem)(levels,
|
|
71
|
+
var newListItem = (0, roosterjs_content_model_dom_1.createListItem)(levels, listItem.formatHolder.format);
|
|
67
72
|
newListItem.blocks.push(newParagraph);
|
|
68
73
|
var remainingBlockCount = listItem.blocks.length - paraIndex - 1;
|
|
69
74
|
if (paraIndex >= 0 && remainingBlockCount > 0) {
|
|
@@ -81,4 +86,19 @@ var createNewListLevel = function (listItem) {
|
|
|
81
86
|
return (0, roosterjs_content_model_dom_1.createListLevel)(level.listType, (0, tslib_1.__assign)((0, tslib_1.__assign)({}, level.format), { startNumberOverride: undefined, displayForDummyItem: undefined }), level.dataset);
|
|
82
87
|
});
|
|
83
88
|
};
|
|
89
|
+
var findIndex = function (blocks, levelLength, index) {
|
|
90
|
+
var counter = 1;
|
|
91
|
+
for (var i = index; i > -1; i--) {
|
|
92
|
+
var listItem = blocks[i];
|
|
93
|
+
if ((0, roosterjs_content_model_dom_1.isBlockGroupOfType)(listItem, 'ListItem') &&
|
|
94
|
+
listItem.levels.length === levelLength) {
|
|
95
|
+
counter++;
|
|
96
|
+
}
|
|
97
|
+
else if (!((0, roosterjs_content_model_dom_1.isBlockGroupOfType)(listItem, 'ListItem') &&
|
|
98
|
+
listItem.levels.length == 0)) {
|
|
99
|
+
return counter;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return counter;
|
|
103
|
+
};
|
|
84
104
|
//# sourceMappingURL=handleEnterOnList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleEnterOnList.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/inputSteps/handleEnterOnList.ts"],"names":[],"mappings":"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","sourcesContent":["import { getListAnnounceData } from 'roosterjs-content-model-api';\nimport { splitParagraph } from '../utils/splitParagraph';\nimport {\n createListItem,\n createListLevel,\n getClosestAncestorBlockGroupIndex,\n isBlockGroupOfType,\n mutateBlock,\n} from 'roosterjs-content-model-dom';\nimport type {\n ContentModelListItem,\n DeleteSelectionStep,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelListItem,\n ShallowMutableContentModelListItem,\n ValidDeleteSelectionContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleEnterOnList: DeleteSelectionStep = context => {\n const { deleteResult, insertPoint } = context;\n\n if (deleteResult == 'notDeleted' || deleteResult == 'nothingToDelete') {\n const { path } = insertPoint;\n const index = getClosestAncestorBlockGroupIndex(\n path,\n ['ListItem'],\n ['TableCell', 'FormatContainer']\n );\n\n const readonlyListItem = path[index];\n const listParent = path[index + 1];\n\n if (readonlyListItem?.blockGroupType === 'ListItem' && listParent) {\n let listItem = mutateBlock(readonlyListItem);\n\n if (isEmptyListItem(listItem)) {\n listItem.levels.pop();\n } else {\n listItem = createNewListItem(context, listItem, listParent);\n\n if (context.formatContext) {\n context.formatContext.announceData = getListAnnounceData([\n listItem,\n ...path.slice(index + 1),\n ]);\n }\n }\n\n const listIndex = listParent.blocks.indexOf(listItem);\n const nextBlock = listParent.blocks[listIndex + 1];\n\n if (nextBlock) {\n const nextListItem = listParent.blocks[listIndex + 1];\n\n if (\n isBlockGroupOfType<ContentModelListItem>(nextListItem, 'ListItem') &&\n nextListItem.levels[0]\n ) {\n nextListItem.levels.forEach(level => {\n // Remove startNumberOverride so that next list item can join current list, unless it is 1.\n // List start with 1 means it should be an explicit new list and should never join another list before it\n if (level.format.startNumberOverride !== 1) {\n level.format.startNumberOverride = undefined;\n }\n });\n }\n }\n\n context.deleteResult = 'range';\n }\n }\n};\n\nconst isEmptyListItem = (listItem: ReadonlyContentModelListItem) => {\n return (\n listItem.blocks.length === 1 &&\n listItem.blocks[0].blockType === 'Paragraph' &&\n listItem.blocks[0].segments.length === 2 &&\n listItem.blocks[0].segments[0].segmentType === 'SelectionMarker' &&\n listItem.blocks[0].segments[1].segmentType === 'Br'\n );\n};\n\nconst createNewListItem = (\n context: ValidDeleteSelectionContext,\n listItem: ReadonlyContentModelListItem,\n listParent: ReadonlyContentModelBlockGroup\n) => {\n const { insertPoint } = context;\n const listIndex = listParent.blocks.indexOf(listItem);\n const currentPara = insertPoint.paragraph;\n const paraIndex = listItem.blocks.indexOf(currentPara);\n const newParagraph = splitParagraph(insertPoint);\n\n const levels = createNewListLevel(listItem);\n const newListItem: ShallowMutableContentModelListItem = createListItem(\n levels,\n insertPoint.marker.format\n );\n\n newListItem.blocks.push(newParagraph);\n\n const remainingBlockCount = listItem.blocks.length - paraIndex - 1;\n\n if (paraIndex >= 0 && remainingBlockCount > 0) {\n newListItem.blocks.push(\n ...mutateBlock(listItem).blocks.splice(paraIndex + 1, remainingBlockCount)\n );\n }\n\n insertPoint.paragraph = newParagraph;\n mutateBlock(listParent).blocks.splice(listIndex + 1, 0, newListItem);\n\n if (context.lastParagraph == currentPara) {\n context.lastParagraph = newParagraph;\n }\n\n return newListItem;\n};\n\nconst createNewListLevel = (listItem: ReadonlyContentModelListItem) => {\n return listItem.levels.map(level => {\n return createListLevel(\n level.listType,\n {\n ...level.format,\n startNumberOverride: undefined,\n displayForDummyItem: undefined, // When ENTER, we should create a new regular list item, so force its dummy item display to undefined\n },\n level.dataset\n );\n });\n};\n"]}
|
|
1
|
+
{"version":3,"file":"handleEnterOnList.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/inputSteps/handleEnterOnList.ts"],"names":[],"mappings":"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","sourcesContent":["import { getListAnnounceData } from 'roosterjs-content-model-api';\nimport { splitParagraph } from '../utils/splitParagraph';\nimport {\n createListItem,\n createListLevel,\n getClosestAncestorBlockGroupIndex,\n isBlockGroupOfType,\n mutateBlock,\n} from 'roosterjs-content-model-dom';\nimport type {\n ContentModelListItem,\n DeleteSelectionStep,\n ReadonlyContentModelBlock,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelListItem,\n ShallowMutableContentModelListItem,\n ValidDeleteSelectionContext,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport const handleEnterOnList: DeleteSelectionStep = context => {\n const { deleteResult, insertPoint } = context;\n\n if (deleteResult == 'notDeleted' || deleteResult == 'nothingToDelete') {\n const { path } = insertPoint;\n const index = getClosestAncestorBlockGroupIndex(\n path,\n ['ListItem'],\n ['TableCell', 'FormatContainer']\n );\n\n const readonlyListItem = path[index];\n const listParent = path[index + 1];\n\n if (readonlyListItem?.blockGroupType === 'ListItem' && listParent) {\n let listItem = mutateBlock(readonlyListItem);\n\n if (isEmptyListItem(listItem)) {\n listItem.levels.pop();\n } else {\n listItem = createNewListItem(context, listItem, listParent);\n\n if (context.formatContext) {\n context.formatContext.announceData = getListAnnounceData([\n listItem,\n ...path.slice(index + 1),\n ]);\n }\n }\n\n const listIndex = listParent.blocks.indexOf(listItem);\n const nextBlock = listParent.blocks[listIndex + 1];\n\n if (nextBlock) {\n if (\n isBlockGroupOfType<ContentModelListItem>(nextBlock, 'ListItem') &&\n nextBlock.levels[0]\n ) {\n nextBlock.levels.forEach(level => {\n // Remove startNumberOverride so that next list item can join current list, unless it is 1.\n // List start with 1 means it should be an explicit new list and should never join another list before it\n if (level.format.startNumberOverride !== 1) {\n level.format.startNumberOverride = undefined;\n }\n });\n\n if (listItem.levels.length == 0) {\n const index = findIndex(\n listParent.blocks,\n nextBlock.levels.length,\n listIndex\n );\n nextBlock.levels[\n nextBlock.levels.length - 1\n ].format.startNumberOverride = index;\n }\n }\n }\n\n context.deleteResult = 'range';\n }\n }\n};\n\nconst isEmptyListItem = (listItem: ReadonlyContentModelListItem) => {\n return listItem.blocks.length === 1 && isEmptyParagraph(listItem.blocks[0]);\n};\n\nconst isEmptyParagraph = (block: ReadonlyContentModelBlock) => {\n return (\n block.blockType === 'Paragraph' &&\n block.segments.length === 2 &&\n block.segments[0].segmentType === 'SelectionMarker' &&\n block.segments[1].segmentType === 'Br'\n );\n};\n\nconst createNewListItem = (\n context: ValidDeleteSelectionContext,\n listItem: ReadonlyContentModelListItem,\n listParent: ReadonlyContentModelBlockGroup\n) => {\n const { insertPoint } = context;\n const listIndex = listParent.blocks.indexOf(listItem);\n const currentPara = insertPoint.paragraph;\n const paraIndex = listItem.blocks.indexOf(currentPara);\n const newParagraph = splitParagraph(insertPoint);\n\n const levels = createNewListLevel(listItem);\n const newListItem: ShallowMutableContentModelListItem = createListItem(\n levels,\n listItem.formatHolder.format\n );\n\n newListItem.blocks.push(newParagraph);\n\n const remainingBlockCount = listItem.blocks.length - paraIndex - 1;\n\n if (paraIndex >= 0 && remainingBlockCount > 0) {\n newListItem.blocks.push(\n ...mutateBlock(listItem).blocks.splice(paraIndex + 1, remainingBlockCount)\n );\n }\n\n insertPoint.paragraph = newParagraph;\n mutateBlock(listParent).blocks.splice(listIndex + 1, 0, newListItem);\n\n if (context.lastParagraph == currentPara) {\n context.lastParagraph = newParagraph;\n }\n\n return newListItem;\n};\n\nconst createNewListLevel = (listItem: ReadonlyContentModelListItem) => {\n return listItem.levels.map(level => {\n return createListLevel(\n level.listType,\n {\n ...level.format,\n startNumberOverride: undefined,\n displayForDummyItem: undefined, // When ENTER, we should create a new regular list item, so force its dummy item display to undefined\n },\n level.dataset\n );\n });\n};\n\nconst findIndex = (\n blocks: readonly ReadonlyContentModelBlock[],\n levelLength: number,\n index: number\n) => {\n let counter = 1;\n for (let i = index; i > -1; i--) {\n const listItem = blocks[i];\n if (\n isBlockGroupOfType<ContentModelListItem>(listItem, 'ListItem') &&\n listItem.levels.length === levelLength\n ) {\n counter++;\n } else if (\n !(\n isBlockGroupOfType<ContentModelListItem>(listItem, 'ListItem') &&\n listItem.levels.length == 0\n )\n ) {\n return counter;\n }\n }\n\n return counter;\n};\n"]}
|
|
@@ -33,7 +33,7 @@ var createShadowSpan = function (wrapper, imageSpan) {
|
|
|
33
33
|
var shadowRoot = imageSpan.attachShadow({
|
|
34
34
|
mode: 'open',
|
|
35
35
|
});
|
|
36
|
-
|
|
36
|
+
wrapper.style.verticalAlign = 'bottom';
|
|
37
37
|
shadowRoot.appendChild(wrapper);
|
|
38
38
|
return imageSpan;
|
|
39
39
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createImageWrapper.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/utils/createImageWrapper.ts"],"names":[],"mappings":";;;AAAA,oEAAmE;AACnE,oEAAmE;AACnE,oEAAmE;AACnE,2EAAmD;AAsBnD;;GAEG;AACH,SAAgB,kBAAkB,CAC9B,MAAe,EACf,KAAuB,EACvB,OAAyB,EACzB,QAA6B,EAC7B,WAA6B,EAC7B,SAA+B;IAE/B,IAAM,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC/C,IAAM,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEjC,IAAI,QAAQ,GAAqB,EAAE,CAAC;IACpC,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;QAC5D,QAAQ,GAAG,IAAA,uCAAkB,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC;KACnD;IACD,IAAI,QAAQ,GAAqB,EAAE,CAAC;IACpC,IAAI,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;QAClC,QAAQ,GAAG,IAAA,uCAAkB,EAAC,GAAG,CAAC,CAAC;KACtC;IAED,IAAI,QAAQ,GAAqB,EAAE,CAAC;IACpC,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;QAChC,QAAQ,GAAG,IAAA,uCAAkB,EAAC,GAAG,CAAC,CAAC;KACtC;IAED,IAAM,OAAO,GAAG,aAAa,CACzB,MAAM,EACN,UAAU,EACV,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,CACX,CAAC;IACF,IAAM,SAAS,GAAG,IAAA,kCAAI,EAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACxD,OAAO,EAAE,OAAO,SAAA,EAAE,UAAU,YAAA,EAAE,UAAU,YAAA,EAAE,QAAQ,UAAA,EAAE,QAAQ,UAAA,EAAE,QAAQ,UAAA,EAAE,CAAC;AAC7E,CAAC;AArCD,gDAqCC;AAED,IAAM,gBAAgB,GAAG,UAAC,OAAoB,EAAE,SAA0B;IACtE,IAAM,UAAU,GAAG,SAAS,CAAC,YAAY,CAAC;QACtC,IAAI,EAAE,MAAM;KACf,CAAC,CAAC;IACH,
|
|
1
|
+
{"version":3,"file":"createImageWrapper.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/utils/createImageWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import { createImageCropper } from '../Cropper/createImageCropper';\nimport { createImageResizer } from '../Resizer/createImageResizer';\nimport { createImageRotator } from '../Rotator/createImageRotator';\nimport { wrap } from 'roosterjs-content-model-dom';\n\nimport type {\n IEditor,\n ImageEditOperation,\n ImageMetadataFormat,\n} from 'roosterjs-content-model-types';\nimport type { ImageEditOptions } from '../types/ImageEditOptions';\nimport type { ImageHtmlOptions } from '../types/ImageHtmlOptions';\n\n/**\n * @internal\n */\nexport interface WrapperElements {\n wrapper: HTMLSpanElement;\n shadowSpan: HTMLElement;\n imageClone: HTMLImageElement;\n resizers: HTMLDivElement[];\n rotators: HTMLDivElement[];\n croppers: HTMLDivElement[];\n}\n\n/**\n * @internal\n */\nexport function createImageWrapper(\n editor: IEditor,\n image: HTMLImageElement,\n options: ImageEditOptions,\n editInfo: ImageMetadataFormat,\n htmlOptions: ImageHtmlOptions,\n operation: ImageEditOperation[]\n): WrapperElements {\n const imageClone = cloneImage(image, editInfo);\n const doc = editor.getDocument();\n\n let rotators: HTMLDivElement[] = [];\n if (!options.disableRotate && operation.indexOf('rotate') > -1) {\n rotators = createImageRotator(doc, htmlOptions);\n }\n let resizers: HTMLDivElement[] = [];\n if (operation.indexOf('resize') > -1) {\n resizers = createImageResizer(doc);\n }\n\n let croppers: HTMLDivElement[] = [];\n if (operation.indexOf('crop') > -1) {\n croppers = createImageCropper(doc);\n }\n\n const wrapper = createWrapper(\n editor,\n imageClone,\n options,\n editInfo,\n resizers,\n rotators,\n croppers\n );\n const imageSpan = wrap(doc, image, 'span');\n const shadowSpan = createShadowSpan(wrapper, imageSpan);\n return { wrapper, shadowSpan, imageClone, resizers, rotators, croppers };\n}\n\nconst createShadowSpan = (wrapper: HTMLElement, imageSpan: HTMLSpanElement) => {\n const shadowRoot = imageSpan.attachShadow({\n mode: 'open',\n });\n wrapper.style.verticalAlign = 'bottom';\n shadowRoot.appendChild(wrapper);\n return imageSpan;\n};\n\nconst createWrapper = (\n editor: IEditor,\n image: HTMLImageElement,\n options: ImageEditOptions,\n editInfo: ImageMetadataFormat,\n resizers?: HTMLDivElement[],\n rotators?: HTMLDivElement[],\n cropper?: HTMLDivElement[]\n) => {\n const doc = editor.getDocument();\n const wrapper = doc.createElement('span');\n const imageBox = doc.createElement('div');\n\n imageBox.setAttribute(\n `style`,\n `position:relative;width:100%;height:100%;overflow:hidden;transform:scale(1);`\n );\n imageBox.appendChild(image);\n wrapper.setAttribute(\n 'style',\n `font-size: 24px; margin: 0px; transform: rotate(${editInfo.angleRad ?? 0}rad);`\n );\n wrapper.style.display = editor.getEnvironment().isSafari\n ? '-webkit-inline-flex'\n : 'inline-flex';\n\n const border = createBorder(editor, options.borderColor);\n wrapper.appendChild(imageBox);\n wrapper.appendChild(border);\n wrapper.style.userSelect = 'none';\n\n if (resizers && resizers?.length > 0) {\n resizers.forEach(resizer => {\n wrapper.appendChild(resizer);\n });\n }\n if (rotators && rotators.length > 0) {\n rotators.forEach(r => {\n wrapper.appendChild(r);\n });\n }\n if (cropper && cropper.length > 0) {\n cropper.forEach(c => {\n wrapper.appendChild(c);\n });\n }\n\n return wrapper;\n};\n\nconst createBorder = (editor: IEditor, borderColor?: string) => {\n const doc = editor.getDocument();\n const resizeBorder = doc.createElement('div');\n resizeBorder.setAttribute(\n `style`,\n `position:absolute;left:0;right:0;top:0;bottom:0;border:solid 2px ${borderColor};pointer-events:none;`\n );\n return resizeBorder;\n};\n\nconst cloneImage = (image: HTMLImageElement, editInfo: ImageMetadataFormat) => {\n const imageClone = image.cloneNode(true) as HTMLImageElement;\n imageClone.style.removeProperty('transform');\n if (editInfo.src) {\n imageClone.src = editInfo.src;\n imageClone.removeAttribute('id');\n imageClone.style.removeProperty('max-width');\n imageClone.style.removeProperty('max-height');\n imageClone.style.width = editInfo.widthPx + 'px';\n imageClone.style.height = editInfo.heightPx + 'px';\n }\n return imageClone;\n};\n"]}
|
|
@@ -2,82 +2,34 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.findEditingImage = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
|
+
var roosterjs_content_model_api_1 = require("roosterjs-content-model-api");
|
|
5
6
|
/**
|
|
6
7
|
* @internal
|
|
7
8
|
*/
|
|
8
9
|
function findEditingImage(group, imageId) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
for (var j = 0; j < block.segments.length; j++) {
|
|
20
|
-
var segment = block.segments[j];
|
|
21
|
-
switch (segment.segmentType) {
|
|
22
|
-
case 'Image':
|
|
23
|
-
if ((imageId && segment.format.id == imageId) ||
|
|
24
|
-
segment.dataset.isEditing) {
|
|
25
|
-
return {
|
|
26
|
-
paragraph: block,
|
|
27
|
-
image: segment,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
break;
|
|
31
|
-
case 'General':
|
|
32
|
-
var result_1 = findEditingImage(segment, imageId);
|
|
33
|
-
if (result_1) {
|
|
34
|
-
return result_1;
|
|
35
|
-
}
|
|
36
|
-
break;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
break;
|
|
40
|
-
case 'Table':
|
|
41
|
-
var imageInTable = findEditingImageOnTable(block, imageId);
|
|
42
|
-
if (imageInTable) {
|
|
43
|
-
return imageInTable;
|
|
10
|
+
var imageAndParagraph = null;
|
|
11
|
+
(0, roosterjs_content_model_api_1.queryContentModelBlocks)(group, 'Paragraph', function (paragraph) {
|
|
12
|
+
var e_1, _a;
|
|
13
|
+
try {
|
|
14
|
+
for (var _b = (0, tslib_1.__values)(paragraph.segments), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
15
|
+
var segment = _c.value;
|
|
16
|
+
if (segment.segmentType == 'Image' &&
|
|
17
|
+
((imageId && segment.format.id == imageId) || segment.dataset.isEditing)) {
|
|
18
|
+
imageAndParagraph = { image: segment, paragraph: paragraph };
|
|
19
|
+
return true;
|
|
44
20
|
}
|
|
45
|
-
|
|
21
|
+
}
|
|
46
22
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
exports.findEditingImage = findEditingImage;
|
|
51
|
-
var findEditingImageOnTable = function (table, imageId) {
|
|
52
|
-
var e_1, _a, e_2, _b;
|
|
53
|
-
try {
|
|
54
|
-
for (var _c = (0, tslib_1.__values)(table.rows), _d = _c.next(); !_d.done; _d = _c.next()) {
|
|
55
|
-
var row = _d.value;
|
|
23
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
24
|
+
finally {
|
|
56
25
|
try {
|
|
57
|
-
|
|
58
|
-
var cell = _f.value;
|
|
59
|
-
var result = findEditingImage(cell, imageId);
|
|
60
|
-
if (result) {
|
|
61
|
-
return result;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
26
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
64
27
|
}
|
|
65
|
-
|
|
66
|
-
finally {
|
|
67
|
-
try {
|
|
68
|
-
if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
|
|
69
|
-
}
|
|
70
|
-
finally { if (e_2) throw e_2.error; }
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
75
|
-
finally {
|
|
76
|
-
try {
|
|
77
|
-
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
|
|
28
|
+
finally { if (e_1) throw e_1.error; }
|
|
78
29
|
}
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
return
|
|
82
|
-
}
|
|
30
|
+
return false;
|
|
31
|
+
}, true /*findFirstOnly*/);
|
|
32
|
+
return imageAndParagraph;
|
|
33
|
+
}
|
|
34
|
+
exports.findEditingImage = findEditingImage;
|
|
83
35
|
//# sourceMappingURL=findEditingImage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findEditingImage.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/utils/findEditingImage.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"findEditingImage.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/utils/findEditingImage.ts"],"names":[],"mappings":";;;;AAAA,2EAAsE;AAOtE;;GAEG;AACH,SAAgB,gBAAgB,CAC5B,KAAqC,EACrC,OAAgB;IAEhB,IAAI,iBAAiB,GAA6B,IAAI,CAAC;IACvD,IAAA,qDAAuB,EACnB,KAAK,EACL,WAAW,EACX,UAAC,SAAwC;;;YACrC,KAAsB,IAAA,KAAA,sBAAA,SAAS,CAAC,QAAQ,CAAA,gBAAA,4BAAE;gBAArC,IAAM,OAAO,WAAA;gBACd,IACI,OAAO,CAAC,WAAW,IAAI,OAAO;oBAC9B,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAC1E;oBACE,iBAAiB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,WAAA,EAAE,CAAC;oBAClD,OAAO,IAAI,CAAC;iBACf;aACJ;;;;;;;;;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,EACD,IAAI,CAAC,iBAAiB,CACzB,CAAC;IAEF,OAAO,iBAAiB,CAAC;AAC7B,CAAC;AAxBD,4CAwBC","sourcesContent":["import { queryContentModelBlocks } from 'roosterjs-content-model-api';\nimport type {\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelParagraph,\n} from 'roosterjs-content-model-types';\nimport type { ImageAndParagraph } from '../types/ImageAndParagraph';\n\n/**\n * @internal\n */\nexport function findEditingImage(\n group: ReadonlyContentModelBlockGroup,\n imageId?: string\n): ImageAndParagraph | null {\n let imageAndParagraph: ImageAndParagraph | null = null;\n queryContentModelBlocks<ReadonlyContentModelParagraph>(\n group,\n 'Paragraph',\n (paragraph: ReadonlyContentModelParagraph): paragraph is ReadonlyContentModelParagraph => {\n for (const segment of paragraph.segments) {\n if (\n segment.segmentType == 'Image' &&\n ((imageId && segment.format.id == imageId) || segment.dataset.isEditing)\n ) {\n imageAndParagraph = { image: segment, paragraph };\n return true;\n }\n }\n return false;\n },\n true /*findFirstOnly*/\n );\n\n return imageAndParagraph;\n}\n"]}
|
package/lib/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export { ShortcutKeyDefinition, ShortcutCommand } from './shortcut/ShortcutComma
|
|
|
12
12
|
export { ContextMenuPluginBase, ContextMenuOptions } from './contextMenuBase/ContextMenuPluginBase';
|
|
13
13
|
export { WatermarkPlugin } from './watermark/WatermarkPlugin';
|
|
14
14
|
export { WatermarkFormat } from './watermark/WatermarkFormat';
|
|
15
|
+
export { isModelEmptyFast } from './watermark/isModelEmptyFast';
|
|
15
16
|
export { MarkdownPlugin, MarkdownOptions } from './markdown/MarkdownPlugin';
|
|
16
17
|
export { HyperlinkPlugin } from './hyperlink/HyperlinkPlugin';
|
|
17
18
|
export { HyperlinkToolTip } from './hyperlink/HyperlinkToolTip';
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ImageEditPlugin = exports.CustomReplacePlugin = exports.PickerPlugin = exports.HyperlinkPlugin = exports.MarkdownPlugin = exports.WatermarkPlugin = exports.ContextMenuPluginBase = exports.ShortcutPlugin = exports.ShortcutOutdentList = exports.ShortcutIndentList = exports.ShortcutDecreaseFont = exports.ShortcutIncreaseFont = exports.ShortcutNumbering = exports.ShortcutBullet = exports.ShortcutRedoMacOS = exports.ShortcutRedoAlt = exports.ShortcutRedo = exports.ShortcutUndo2 = exports.ShortcutUndo = exports.ShortcutClearFormat = exports.ShortcutUnderline = exports.ShortcutItalic = exports.ShortcutBold = exports.AutoFormatPlugin = exports.EditPlugin = exports.DefaultSanitizers = exports.PastePlugin = exports.TableEditPlugin = void 0;
|
|
3
|
+
exports.ImageEditPlugin = exports.CustomReplacePlugin = exports.PickerPlugin = exports.HyperlinkPlugin = exports.MarkdownPlugin = exports.isModelEmptyFast = exports.WatermarkPlugin = exports.ContextMenuPluginBase = exports.ShortcutPlugin = exports.ShortcutOutdentList = exports.ShortcutIndentList = exports.ShortcutDecreaseFont = exports.ShortcutIncreaseFont = exports.ShortcutNumbering = exports.ShortcutBullet = exports.ShortcutRedoMacOS = exports.ShortcutRedoAlt = exports.ShortcutRedo = exports.ShortcutUndo2 = exports.ShortcutUndo = exports.ShortcutClearFormat = exports.ShortcutUnderline = exports.ShortcutItalic = exports.ShortcutBold = exports.AutoFormatPlugin = exports.EditPlugin = exports.DefaultSanitizers = exports.PastePlugin = exports.TableEditPlugin = void 0;
|
|
4
4
|
var TableEditPlugin_1 = require("./tableEdit/TableEditPlugin");
|
|
5
5
|
Object.defineProperty(exports, "TableEditPlugin", { enumerable: true, get: function () { return TableEditPlugin_1.TableEditPlugin; } });
|
|
6
6
|
var PastePlugin_1 = require("./paste/PastePlugin");
|
|
@@ -33,6 +33,8 @@ var ContextMenuPluginBase_1 = require("./contextMenuBase/ContextMenuPluginBase")
|
|
|
33
33
|
Object.defineProperty(exports, "ContextMenuPluginBase", { enumerable: true, get: function () { return ContextMenuPluginBase_1.ContextMenuPluginBase; } });
|
|
34
34
|
var WatermarkPlugin_1 = require("./watermark/WatermarkPlugin");
|
|
35
35
|
Object.defineProperty(exports, "WatermarkPlugin", { enumerable: true, get: function () { return WatermarkPlugin_1.WatermarkPlugin; } });
|
|
36
|
+
var isModelEmptyFast_1 = require("./watermark/isModelEmptyFast");
|
|
37
|
+
Object.defineProperty(exports, "isModelEmptyFast", { enumerable: true, get: function () { return isModelEmptyFast_1.isModelEmptyFast; } });
|
|
36
38
|
var MarkdownPlugin_1 = require("./markdown/MarkdownPlugin");
|
|
37
39
|
Object.defineProperty(exports, "MarkdownPlugin", { enumerable: true, get: function () { return MarkdownPlugin_1.MarkdownPlugin; } });
|
|
38
40
|
var HyperlinkPlugin_1 = require("./hyperlink/HyperlinkPlugin");
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/roosterjs-content-model-plugins/lib/index.ts"],"names":[],"mappings":";;;AAAA,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AAGxB,mDAAkD;AAAzC,0GAAA,WAAW,OAAA;AACpB,+DAA8D;AAArD,sHAAA,iBAAiB,OAAA;AAC1B,gDAA4D;AAAnD,wGAAA,UAAU,OAAA;AACnB,kEAAiE;AAAxD,oHAAA,gBAAgB,OAAA;AAGzB,kDAgB8B;AAf1B,yGAAA,YAAY,OAAA;AACZ,2GAAA,cAAc,OAAA;AACd,8GAAA,iBAAiB,OAAA;AACjB,gHAAA,mBAAmB,OAAA;AACnB,yGAAA,YAAY,OAAA;AACZ,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AACZ,4GAAA,eAAe,OAAA;AACf,8GAAA,iBAAiB,OAAA;AACjB,2GAAA,cAAc,OAAA;AACd,8GAAA,iBAAiB,OAAA;AACjB,iHAAA,oBAAoB,OAAA;AACpB,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,gHAAA,mBAAmB,OAAA;AAEvB,4DAA2D;AAAlD,gHAAA,cAAc,OAAA;AAEvB,iFAAoG;AAA3F,8HAAA,qBAAqB,OAAA;AAC9B,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AAExB,4DAA4E;AAAnE,gHAAA,cAAc,OAAA;AACvB,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AAExB,sDAAqD;AAA5C,4GAAA,YAAY,OAAA;AAGrB,2EAAyF;AAAhF,0HAAA,mBAAmB,OAAA;AAC5B,+DAA8D;AAArD,kHAAA,eAAe,OAAA","sourcesContent":["export { TableEditPlugin } from './tableEdit/TableEditPlugin';\nexport { OnTableEditorCreatedCallback } from './tableEdit/OnTableEditorCreatedCallback';\nexport { TableEditFeatureName } from './tableEdit/editors/features/TableEditFeatureName';\nexport { PastePlugin } from './paste/PastePlugin';\nexport { DefaultSanitizers } from './paste/DefaultSanitizers';\nexport { EditPlugin, EditOptions } from './edit/EditPlugin';\nexport { AutoFormatPlugin } from './autoFormat/AutoFormatPlugin';\nexport { AutoFormatOptions } from './autoFormat/interface/AutoFormatOptions';\n\nexport {\n ShortcutBold,\n ShortcutItalic,\n ShortcutUnderline,\n ShortcutClearFormat,\n ShortcutUndo,\n ShortcutUndo2,\n ShortcutRedo,\n ShortcutRedoAlt,\n ShortcutRedoMacOS,\n ShortcutBullet,\n ShortcutNumbering,\n ShortcutIncreaseFont,\n ShortcutDecreaseFont,\n ShortcutIndentList,\n ShortcutOutdentList,\n} from './shortcut/shortcuts';\nexport { ShortcutPlugin } from './shortcut/ShortcutPlugin';\nexport { ShortcutKeyDefinition, ShortcutCommand } from './shortcut/ShortcutCommand';\nexport { ContextMenuPluginBase, ContextMenuOptions } from './contextMenuBase/ContextMenuPluginBase';\nexport { WatermarkPlugin } from './watermark/WatermarkPlugin';\nexport { WatermarkFormat } from './watermark/WatermarkFormat';\nexport { MarkdownPlugin, MarkdownOptions } from './markdown/MarkdownPlugin';\nexport { HyperlinkPlugin } from './hyperlink/HyperlinkPlugin';\nexport { HyperlinkToolTip } from './hyperlink/HyperlinkToolTip';\nexport { PickerPlugin } from './picker/PickerPlugin';\nexport { PickerHelper } from './picker/PickerHelper';\nexport { PickerSelectionChangMode, PickerDirection, PickerHandler } from './picker/PickerHandler';\nexport { CustomReplacePlugin, CustomReplace } from './customReplace/CustomReplacePlugin';\nexport { ImageEditPlugin } from './imageEdit/ImageEditPlugin';\nexport { ImageEditOptions } from './imageEdit/types/ImageEditOptions';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/roosterjs-content-model-plugins/lib/index.ts"],"names":[],"mappings":";;;AAAA,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AAGxB,mDAAkD;AAAzC,0GAAA,WAAW,OAAA;AACpB,+DAA8D;AAArD,sHAAA,iBAAiB,OAAA;AAC1B,gDAA4D;AAAnD,wGAAA,UAAU,OAAA;AACnB,kEAAiE;AAAxD,oHAAA,gBAAgB,OAAA;AAGzB,kDAgB8B;AAf1B,yGAAA,YAAY,OAAA;AACZ,2GAAA,cAAc,OAAA;AACd,8GAAA,iBAAiB,OAAA;AACjB,gHAAA,mBAAmB,OAAA;AACnB,yGAAA,YAAY,OAAA;AACZ,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AACZ,4GAAA,eAAe,OAAA;AACf,8GAAA,iBAAiB,OAAA;AACjB,2GAAA,cAAc,OAAA;AACd,8GAAA,iBAAiB,OAAA;AACjB,iHAAA,oBAAoB,OAAA;AACpB,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,gHAAA,mBAAmB,OAAA;AAEvB,4DAA2D;AAAlD,gHAAA,cAAc,OAAA;AAEvB,iFAAoG;AAA3F,8HAAA,qBAAqB,OAAA;AAC9B,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AAExB,iEAAgE;AAAvD,oHAAA,gBAAgB,OAAA;AACzB,4DAA4E;AAAnE,gHAAA,cAAc,OAAA;AACvB,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AAExB,sDAAqD;AAA5C,4GAAA,YAAY,OAAA;AAGrB,2EAAyF;AAAhF,0HAAA,mBAAmB,OAAA;AAC5B,+DAA8D;AAArD,kHAAA,eAAe,OAAA","sourcesContent":["export { TableEditPlugin } from './tableEdit/TableEditPlugin';\nexport { OnTableEditorCreatedCallback } from './tableEdit/OnTableEditorCreatedCallback';\nexport { TableEditFeatureName } from './tableEdit/editors/features/TableEditFeatureName';\nexport { PastePlugin } from './paste/PastePlugin';\nexport { DefaultSanitizers } from './paste/DefaultSanitizers';\nexport { EditPlugin, EditOptions } from './edit/EditPlugin';\nexport { AutoFormatPlugin } from './autoFormat/AutoFormatPlugin';\nexport { AutoFormatOptions } from './autoFormat/interface/AutoFormatOptions';\n\nexport {\n ShortcutBold,\n ShortcutItalic,\n ShortcutUnderline,\n ShortcutClearFormat,\n ShortcutUndo,\n ShortcutUndo2,\n ShortcutRedo,\n ShortcutRedoAlt,\n ShortcutRedoMacOS,\n ShortcutBullet,\n ShortcutNumbering,\n ShortcutIncreaseFont,\n ShortcutDecreaseFont,\n ShortcutIndentList,\n ShortcutOutdentList,\n} from './shortcut/shortcuts';\nexport { ShortcutPlugin } from './shortcut/ShortcutPlugin';\nexport { ShortcutKeyDefinition, ShortcutCommand } from './shortcut/ShortcutCommand';\nexport { ContextMenuPluginBase, ContextMenuOptions } from './contextMenuBase/ContextMenuPluginBase';\nexport { WatermarkPlugin } from './watermark/WatermarkPlugin';\nexport { WatermarkFormat } from './watermark/WatermarkFormat';\nexport { isModelEmptyFast } from './watermark/isModelEmptyFast';\nexport { MarkdownPlugin, MarkdownOptions } from './markdown/MarkdownPlugin';\nexport { HyperlinkPlugin } from './hyperlink/HyperlinkPlugin';\nexport { HyperlinkToolTip } from './hyperlink/HyperlinkToolTip';\nexport { PickerPlugin } from './picker/PickerPlugin';\nexport { PickerHelper } from './picker/PickerHelper';\nexport { PickerSelectionChangMode, PickerDirection, PickerHandler } from './picker/PickerHandler';\nexport { CustomReplacePlugin, CustomReplace } from './customReplace/CustomReplacePlugin';\nexport { ImageEditPlugin } from './imageEdit/ImageEditPlugin';\nexport { ImageEditOptions } from './imageEdit/types/ImageEditOptions';\n"]}
|
|
@@ -91,6 +91,11 @@ var ShortcutPlugin = /** @class */ (function () {
|
|
|
91
91
|
var _this = this;
|
|
92
92
|
return (0, roosterjs_content_model_dom_1.cacheGetEventData)(event, CommandCacheKey, function (event) {
|
|
93
93
|
var editor = _this.editor;
|
|
94
|
+
var _a = event.rawEvent, ctrlKey = _a.ctrlKey, metaKey = _a.metaKey;
|
|
95
|
+
if (ctrlKey && metaKey) {
|
|
96
|
+
// We don't support both Ctrl and Meta key pressed at the same time.
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
94
99
|
return (editor &&
|
|
95
100
|
_this.shortcuts.filter(function (command) {
|
|
96
101
|
return _this.matchOS(command.environment) &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShortcutPlugin.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/shortcut/ShortcutPlugin.ts"],"names":[],"mappings":";;;AAAA,2EAAgE;AAEhE,yCAgBqB;AAQrB,IAAM,gBAAgB,GAAsB;IACxC,wBAAY;IACZ,0BAAc;IACd,6BAAiB;IACjB,+BAAmB;IACnB,wBAAY;IACZ,yBAAa;IACb,wBAAY;IACZ,2BAAe;IACf,6BAAiB;IACjB,0BAAc;IACd,6BAAiB;IACjB,gCAAoB;IACpB,gCAAoB;IACpB,8BAAkB;IAClB,+BAAmB;CACtB,CAAC;AACF,IAAM,eAAe,GAAG,wBAAwB,CAAC;AAEjD;;GAEG;AACH;IAII;;;OAGG;IACH,wBAAoB,SAA+C;QAA/C,0BAAA,EAAA,4BAA+C;QAA/C,cAAS,GAAT,SAAS,CAAsC;QAP3D,WAAM,GAAmB,IAAI,CAAC;QAC9B,UAAK,GAAG,KAAK,CAAC;IAMgD,CAAC;IAEvE;;OAEG;IACH,gCAAO,GAAP;QACI,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,mCAAU,GAAV,UAAW,MAAe;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC;IACtD,CAAC;IAED;;;;OAIG;IACH,gCAAO,GAAP;QACI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IAED;;;;;;;OAOG;IACH,mDAA0B,GAA1B,UAA2B,KAAkB;QACzC,OAAO,CACH,KAAK,CAAC,SAAS,IAAI,SAAS;YAC5B,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3E,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAChC,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACH,sCAAa,GAAb,UAAc,KAAkB;QAC5B,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,SAAS,EAAE;YAC7C,IAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAE5C,IAAI,OAAO,EAAE;gBACT,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC7B,KAAK,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;aACnC;SACJ;IACL,CAAC;IAEO,wCAAe,GAAvB,UAAwB,KAAmB;QAA3C,
|
|
1
|
+
{"version":3,"file":"ShortcutPlugin.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/shortcut/ShortcutPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { cacheGetEventData } from 'roosterjs-content-model-dom';\nimport type { ShortcutCommand, ShortcutKeyDefinition } from './ShortcutCommand';\nimport {\n ShortcutBold,\n ShortcutBullet,\n ShortcutClearFormat,\n ShortcutDecreaseFont,\n ShortcutIncreaseFont,\n ShortcutIndentList,\n ShortcutItalic,\n ShortcutNumbering,\n ShortcutOutdentList,\n ShortcutRedo,\n ShortcutRedoAlt,\n ShortcutRedoMacOS,\n ShortcutUnderline,\n ShortcutUndo,\n ShortcutUndo2,\n} from './shortcuts';\nimport type {\n EditorPlugin,\n IEditor,\n KeyDownEvent,\n PluginEvent,\n} from 'roosterjs-content-model-types';\n\nconst defaultShortcuts: ShortcutCommand[] = [\n ShortcutBold,\n ShortcutItalic,\n ShortcutUnderline,\n ShortcutClearFormat,\n ShortcutUndo,\n ShortcutUndo2,\n ShortcutRedo,\n ShortcutRedoAlt,\n ShortcutRedoMacOS,\n ShortcutBullet,\n ShortcutNumbering,\n ShortcutIncreaseFont,\n ShortcutDecreaseFont,\n ShortcutIndentList,\n ShortcutOutdentList,\n];\nconst CommandCacheKey = '__ShortcutCommandCache';\n\n/**\n * Shortcut plugin hook on the specified shortcut keys and trigger related format API\n */\nexport class ShortcutPlugin implements EditorPlugin {\n private editor: IEditor | null = null;\n private isMac = false;\n\n /**\n * Create a new instance of ShortcutPlugin\n * @param [shortcuts=defaultShortcuts] Allowed commands\n */\n constructor(private shortcuts: ShortcutCommand[] = defaultShortcuts) {}\n\n /**\n * Get name of this plugin\n */\n getName() {\n return 'Shortcut';\n }\n\n /**\n * The first method that editor will call to a plugin when editor is initializing.\n * It will pass in the editor instance, plugin should take this chance to save the\n * editor reference so that it can call to any editor method or format API later.\n * @param editor The editor object\n */\n initialize(editor: IEditor) {\n this.editor = editor;\n this.isMac = !!this.editor.getEnvironment().isMac;\n }\n\n /**\n * The last method that editor will call to a plugin before it is disposed.\n * Plugin can take this chance to clear the reference to editor. After this method is\n * called, plugin should not call to any editor method since it will result in error.\n */\n dispose() {\n this.editor = null;\n }\n\n /**\n * Check if the plugin should handle the given event exclusively.\n * Handle an event exclusively means other plugin will not receive this event in\n * onPluginEvent method.\n * If two plugins will return true in willHandleEventExclusively() for the same event,\n * the final result depends on the order of the plugins are added into editor\n * @param event The event to check:\n */\n willHandleEventExclusively(event: PluginEvent) {\n return (\n event.eventType == 'keyDown' &&\n (event.rawEvent.ctrlKey || event.rawEvent.altKey || event.rawEvent.metaKey) &&\n !!this.cacheGetCommand(event)\n );\n }\n\n /**\n * Core method for a plugin. Once an event happens in editor, editor will call this\n * method of each plugin to handle the event as long as the event is not handled\n * exclusively by another plugin.\n * @param event The event to handle:\n */\n onPluginEvent(event: PluginEvent) {\n if (this.editor && event.eventType == 'keyDown') {\n const command = this.cacheGetCommand(event);\n\n if (command) {\n command.onClick(this.editor);\n event.rawEvent.preventDefault();\n }\n }\n }\n\n private cacheGetCommand(event: KeyDownEvent) {\n return cacheGetEventData(event, CommandCacheKey, event => {\n const editor = this.editor;\n const { ctrlKey, metaKey } = event.rawEvent;\n if (ctrlKey && metaKey) {\n // We don't support both Ctrl and Meta key pressed at the same time.\n return null;\n }\n return (\n editor &&\n this.shortcuts.filter(\n command =>\n this.matchOS(command.environment) &&\n this.matchShortcut(command.shortcutKey, event.rawEvent)\n )[0]\n );\n });\n }\n\n private matchOS(environment?: 'all' | 'mac' | 'nonMac') {\n switch (environment) {\n case 'mac':\n return this.isMac;\n\n case 'nonMac':\n return !this.isMac;\n\n default:\n return true;\n }\n }\n\n private matchShortcut(shortcutKey: ShortcutKeyDefinition, event: KeyboardEvent) {\n const { ctrlKey, altKey, shiftKey, which, metaKey } = event;\n const ctrlOrMeta = this.isMac ? metaKey : ctrlKey;\n const matchModifier =\n (shortcutKey.modifierKey == 'ctrl' && ctrlOrMeta && !altKey) ||\n (shortcutKey.modifierKey == 'alt' && altKey && !ctrlOrMeta);\n\n return matchModifier && shiftKey == shortcutKey.shiftKey && shortcutKey.which == which;\n }\n}\n"]}
|
|
@@ -20,7 +20,7 @@ export declare const ShortcutUnderline: ShortcutCommand;
|
|
|
20
20
|
/**
|
|
21
21
|
* Shortcut command for Clear Format
|
|
22
22
|
* Windows: Ctrl + Space
|
|
23
|
-
* MacOS:
|
|
23
|
+
* MacOS: Meta + Space, this shortcut is the same as the default global spotlight shortcut, so it is invalid if the user keeps spotlight‘s.
|
|
24
24
|
*/
|
|
25
25
|
export declare const ShortcutClearFormat: ShortcutCommand;
|
|
26
26
|
/**
|
|
@@ -61,7 +61,7 @@ exports.ShortcutUnderline = {
|
|
|
61
61
|
/**
|
|
62
62
|
* Shortcut command for Clear Format
|
|
63
63
|
* Windows: Ctrl + Space
|
|
64
|
-
* MacOS:
|
|
64
|
+
* MacOS: Meta + Space, this shortcut is the same as the default global spotlight shortcut, so it is invalid if the user keeps spotlight‘s.
|
|
65
65
|
*/
|
|
66
66
|
exports.ShortcutClearFormat = {
|
|
67
67
|
shortcutKey: {
|
|
@@ -70,7 +70,6 @@ exports.ShortcutClearFormat = {
|
|
|
70
70
|
which: 32 /* SPACE */,
|
|
71
71
|
},
|
|
72
72
|
onClick: function (editor) { return (0, roosterjs_content_model_api_1.clearFormat)(editor); },
|
|
73
|
-
environment: 'nonMac',
|
|
74
73
|
};
|
|
75
74
|
/**
|
|
76
75
|
* Shortcut command for Undo 1
|