roosterjs-content-model-plugins 9.0.0 → 9.1.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/AutoFormatPlugin.d.ts +5 -0
- package/lib/autoFormat/AutoFormatPlugin.js +24 -6
- package/lib/autoFormat/AutoFormatPlugin.js.map +1 -1
- package/lib/autoFormat/hyphen/transformHyphen.d.ts +5 -0
- package/lib/autoFormat/hyphen/transformHyphen.js +35 -0
- package/lib/autoFormat/hyphen/transformHyphen.js.map +1 -0
- package/lib/autoFormat/link/createLink.js +6 -6
- package/lib/autoFormat/link/createLink.js.map +1 -1
- package/lib/autoFormat/link/createLinkAfterSpace.d.ts +2 -2
- package/lib/autoFormat/link/createLinkAfterSpace.js +17 -34
- package/lib/autoFormat/link/createLinkAfterSpace.js.map +1 -1
- package/lib/autoFormat/link/unlink.js +4 -5
- package/lib/autoFormat/link/unlink.js.map +1 -1
- package/lib/autoFormat/list/getListTypeStyle.js +2 -2
- package/lib/autoFormat/list/getListTypeStyle.js.map +1 -1
- package/lib/autoFormat/list/keyboardListTrigger.d.ts +2 -2
- package/lib/autoFormat/list/keyboardListTrigger.js +10 -18
- package/lib/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib/edit/deleteSteps/deleteList.js +13 -7
- package/lib/edit/deleteSteps/deleteList.js.map +1 -1
- package/lib/edit/inputSteps/handleEnterOnList.js +1 -1
- package/lib/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib/edit/keyboardDelete.js +2 -2
- package/lib/edit/keyboardDelete.js.map +1 -1
- package/lib/edit/keyboardTab.js +25 -9
- package/lib/edit/keyboardTab.js.map +1 -1
- package/lib/edit/tabUtils/handleTabOnTable.d.ts +6 -0
- package/lib/edit/tabUtils/handleTabOnTable.js +25 -0
- package/lib/edit/tabUtils/handleTabOnTable.js.map +1 -0
- package/lib/edit/tabUtils/handleTabOnTableCell.d.ts +6 -0
- package/lib/edit/tabUtils/handleTabOnTableCell.js +40 -0
- package/lib/edit/tabUtils/handleTabOnTableCell.js.map +1 -0
- package/lib/hyperlink/HyperlinkPlugin.d.ts +48 -0
- package/lib/hyperlink/HyperlinkPlugin.js +141 -0
- package/lib/hyperlink/HyperlinkPlugin.js.map +1 -0
- package/lib/hyperlink/HyperlinkToolTip.d.ts +7 -0
- package/lib/hyperlink/HyperlinkToolTip.js +3 -0
- package/lib/hyperlink/HyperlinkToolTip.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/lib/index.js.map +1 -1
- package/lib/markdown/MarkdownPlugin.d.ts +13 -4
- package/lib/markdown/MarkdownPlugin.js +31 -12
- package/lib/markdown/MarkdownPlugin.js.map +1 -1
- package/lib/markdown/utils/setFormat.d.ts +2 -2
- package/lib/markdown/utils/setFormat.js +20 -30
- package/lib/markdown/utils/setFormat.js.map +1 -1
- package/lib/shortcut/shortcuts.d.ts +3 -3
- package/lib/shortcut/shortcuts.js +6 -3
- package/lib/shortcut/shortcuts.js.map +1 -1
- package/lib-amd/autoFormat/AutoFormatPlugin.d.ts +5 -0
- package/lib-amd/autoFormat/AutoFormatPlugin.js +23 -7
- package/lib-amd/autoFormat/AutoFormatPlugin.js.map +1 -1
- package/lib-amd/autoFormat/hyphen/transformHyphen.d.ts +5 -0
- package/lib-amd/autoFormat/hyphen/transformHyphen.js +36 -0
- package/lib-amd/autoFormat/hyphen/transformHyphen.js.map +1 -0
- package/lib-amd/autoFormat/link/createLink.js +6 -6
- package/lib-amd/autoFormat/link/createLink.js.map +1 -1
- package/lib-amd/autoFormat/link/createLinkAfterSpace.d.ts +2 -2
- package/lib-amd/autoFormat/link/createLinkAfterSpace.js +18 -34
- package/lib-amd/autoFormat/link/createLinkAfterSpace.js.map +1 -1
- package/lib-amd/autoFormat/link/unlink.js +4 -5
- package/lib-amd/autoFormat/link/unlink.js.map +1 -1
- package/lib-amd/autoFormat/list/getListTypeStyle.js +2 -2
- package/lib-amd/autoFormat/list/getListTypeStyle.js.map +1 -1
- package/lib-amd/autoFormat/list/keyboardListTrigger.d.ts +2 -2
- package/lib-amd/autoFormat/list/keyboardListTrigger.js +11 -18
- package/lib-amd/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteList.js +13 -7
- package/lib-amd/edit/deleteSteps/deleteList.js.map +1 -1
- package/lib-amd/edit/inputSteps/handleEnterOnList.js +1 -1
- package/lib-amd/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib-amd/edit/keyboardDelete.js +2 -2
- package/lib-amd/edit/keyboardDelete.js.map +1 -1
- package/lib-amd/edit/keyboardTab.js +24 -10
- package/lib-amd/edit/keyboardTab.js.map +1 -1
- package/lib-amd/edit/tabUtils/handleTabOnTable.d.ts +6 -0
- package/lib-amd/edit/tabUtils/handleTabOnTable.js +25 -0
- package/lib-amd/edit/tabUtils/handleTabOnTable.js.map +1 -0
- package/lib-amd/edit/tabUtils/handleTabOnTableCell.d.ts +6 -0
- package/lib-amd/edit/tabUtils/handleTabOnTableCell.js +40 -0
- package/lib-amd/edit/tabUtils/handleTabOnTableCell.js.map +1 -0
- package/lib-amd/hyperlink/HyperlinkPlugin.d.ts +48 -0
- package/lib-amd/hyperlink/HyperlinkPlugin.js +142 -0
- package/lib-amd/hyperlink/HyperlinkPlugin.js.map +1 -0
- package/lib-amd/hyperlink/HyperlinkToolTip.d.ts +7 -0
- package/lib-amd/hyperlink/HyperlinkToolTip.js +5 -0
- package/lib-amd/hyperlink/HyperlinkToolTip.js.map +1 -0
- package/lib-amd/index.d.ts +2 -0
- package/lib-amd/index.js +3 -2
- package/lib-amd/index.js.map +1 -1
- package/lib-amd/markdown/MarkdownPlugin.d.ts +13 -4
- package/lib-amd/markdown/MarkdownPlugin.js +31 -12
- package/lib-amd/markdown/MarkdownPlugin.js.map +1 -1
- package/lib-amd/markdown/utils/setFormat.d.ts +2 -2
- package/lib-amd/markdown/utils/setFormat.js +20 -30
- package/lib-amd/markdown/utils/setFormat.js.map +1 -1
- package/lib-amd/shortcut/shortcuts.d.ts +3 -3
- package/lib-amd/shortcut/shortcuts.js +6 -3
- package/lib-amd/shortcut/shortcuts.js.map +1 -1
- package/lib-mjs/autoFormat/AutoFormatPlugin.d.ts +5 -0
- package/lib-mjs/autoFormat/AutoFormatPlugin.js +24 -6
- package/lib-mjs/autoFormat/AutoFormatPlugin.js.map +1 -1
- package/lib-mjs/autoFormat/hyphen/transformHyphen.d.ts +5 -0
- package/lib-mjs/autoFormat/hyphen/transformHyphen.js +31 -0
- package/lib-mjs/autoFormat/hyphen/transformHyphen.js.map +1 -0
- package/lib-mjs/autoFormat/link/createLink.js +6 -6
- package/lib-mjs/autoFormat/link/createLink.js.map +1 -1
- package/lib-mjs/autoFormat/link/createLinkAfterSpace.d.ts +2 -2
- package/lib-mjs/autoFormat/link/createLinkAfterSpace.js +17 -34
- package/lib-mjs/autoFormat/link/createLinkAfterSpace.js.map +1 -1
- package/lib-mjs/autoFormat/link/unlink.js +4 -5
- package/lib-mjs/autoFormat/link/unlink.js.map +1 -1
- package/lib-mjs/autoFormat/list/getListTypeStyle.js +2 -2
- package/lib-mjs/autoFormat/list/getListTypeStyle.js.map +1 -1
- package/lib-mjs/autoFormat/list/keyboardListTrigger.d.ts +2 -2
- package/lib-mjs/autoFormat/list/keyboardListTrigger.js +10 -18
- package/lib-mjs/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteList.js +13 -7
- package/lib-mjs/edit/deleteSteps/deleteList.js.map +1 -1
- package/lib-mjs/edit/inputSteps/handleEnterOnList.js +1 -1
- package/lib-mjs/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib-mjs/edit/keyboardDelete.js +2 -2
- package/lib-mjs/edit/keyboardDelete.js.map +1 -1
- package/lib-mjs/edit/keyboardTab.js +25 -9
- package/lib-mjs/edit/keyboardTab.js.map +1 -1
- package/lib-mjs/edit/tabUtils/handleTabOnTable.d.ts +6 -0
- package/lib-mjs/edit/tabUtils/handleTabOnTable.js +21 -0
- package/lib-mjs/edit/tabUtils/handleTabOnTable.js.map +1 -0
- package/lib-mjs/edit/tabUtils/handleTabOnTableCell.d.ts +6 -0
- package/lib-mjs/edit/tabUtils/handleTabOnTableCell.js +36 -0
- package/lib-mjs/edit/tabUtils/handleTabOnTableCell.js.map +1 -0
- package/lib-mjs/hyperlink/HyperlinkPlugin.d.ts +48 -0
- package/lib-mjs/hyperlink/HyperlinkPlugin.js +138 -0
- package/lib-mjs/hyperlink/HyperlinkPlugin.js.map +1 -0
- package/lib-mjs/hyperlink/HyperlinkToolTip.d.ts +7 -0
- package/lib-mjs/hyperlink/HyperlinkToolTip.js +2 -0
- package/lib-mjs/hyperlink/HyperlinkToolTip.js.map +1 -0
- package/lib-mjs/index.d.ts +2 -0
- package/lib-mjs/index.js +1 -0
- package/lib-mjs/index.js.map +1 -1
- package/lib-mjs/markdown/MarkdownPlugin.d.ts +13 -4
- package/lib-mjs/markdown/MarkdownPlugin.js +31 -12
- package/lib-mjs/markdown/MarkdownPlugin.js.map +1 -1
- package/lib-mjs/markdown/utils/setFormat.d.ts +2 -2
- package/lib-mjs/markdown/utils/setFormat.js +20 -30
- package/lib-mjs/markdown/utils/setFormat.js.map +1 -1
- package/lib-mjs/shortcut/shortcuts.d.ts +3 -3
- package/lib-mjs/shortcut/shortcuts.js +6 -3
- package/lib-mjs/shortcut/shortcuts.js.map +1 -1
- package/package.json +5 -5
- package/lib/autoFormat/link/getLinkSegment.d.ts +0 -5
- package/lib/autoFormat/link/getLinkSegment.js +0 -27
- package/lib/autoFormat/link/getLinkSegment.js.map +0 -1
- package/lib-amd/autoFormat/link/getLinkSegment.d.ts +0 -5
- package/lib-amd/autoFormat/link/getLinkSegment.js +0 -27
- package/lib-amd/autoFormat/link/getLinkSegment.js.map +0 -1
- package/lib-mjs/autoFormat/link/getLinkSegment.d.ts +0 -5
- package/lib-mjs/autoFormat/link/getLinkSegment.js +0 -23
- package/lib-mjs/autoFormat/link/getLinkSegment.js.map +0 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
define(["require", "exports", "roosterjs-content-model-api"], function (require, exports, roosterjs_content_model_api_1) {
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.HyperlinkPlugin = void 0;
|
|
5
|
+
var defaultToolTipCallback = function (url) { return url; };
|
|
6
|
+
/**
|
|
7
|
+
* Hyperlink plugin does the following jobs for a hyperlink in editor:
|
|
8
|
+
* 1. When hover on a link, show a tool tip
|
|
9
|
+
* 2. When Ctrl+Click on a link, open a new window with the link
|
|
10
|
+
* 3. When type directly on a link whose text matches its link url, update the link url with the link text
|
|
11
|
+
*/
|
|
12
|
+
var HyperlinkPlugin = /** @class */ (function () {
|
|
13
|
+
/**
|
|
14
|
+
* Create a new instance of HyperLink class
|
|
15
|
+
* @param tooltip Tooltip to show when mouse hover over a link
|
|
16
|
+
* Default value is to return the href itself. If null, there will be no tooltip text.
|
|
17
|
+
* @param target (Optional) Target window name for hyperlink. If null, will use "_blank"
|
|
18
|
+
* @param onLinkClick (Optional) Open link callback (return false to use default behavior)
|
|
19
|
+
*/
|
|
20
|
+
function HyperlinkPlugin(tooltip, target, onLinkClick) {
|
|
21
|
+
var _this = this;
|
|
22
|
+
if (tooltip === void 0) { tooltip = defaultToolTipCallback; }
|
|
23
|
+
this.tooltip = tooltip;
|
|
24
|
+
this.target = target;
|
|
25
|
+
this.onLinkClick = onLinkClick;
|
|
26
|
+
this.editor = null;
|
|
27
|
+
this.domHelper = null;
|
|
28
|
+
this.isMac = false;
|
|
29
|
+
this.disposer = null;
|
|
30
|
+
this.currentNode = null;
|
|
31
|
+
this.currentLink = null;
|
|
32
|
+
this.onMouse = function (e) {
|
|
33
|
+
_this.runWithHyperlink(e.target, function (href, a) {
|
|
34
|
+
var _a;
|
|
35
|
+
var tooltip = e.type == 'mouseover'
|
|
36
|
+
? typeof _this.tooltip == 'function'
|
|
37
|
+
? _this.tooltip(href, a)
|
|
38
|
+
: _this.tooltip
|
|
39
|
+
: null;
|
|
40
|
+
(_a = _this.domHelper) === null || _a === void 0 ? void 0 : _a.setDomAttribute('title', tooltip);
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get a friendly name of this plugin
|
|
46
|
+
*/
|
|
47
|
+
HyperlinkPlugin.prototype.getName = function () {
|
|
48
|
+
return 'Hyperlink';
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Initialize this plugin
|
|
52
|
+
* @param editor The editor instance
|
|
53
|
+
*/
|
|
54
|
+
HyperlinkPlugin.prototype.initialize = function (editor) {
|
|
55
|
+
this.editor = editor;
|
|
56
|
+
this.domHelper = editor.getDOMHelper();
|
|
57
|
+
this.isMac = !!editor.getEnvironment().isMac;
|
|
58
|
+
this.disposer = editor.attachDomEvent({
|
|
59
|
+
mouseover: { beforeDispatch: this.onMouse },
|
|
60
|
+
mouseout: { beforeDispatch: this.onMouse },
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Dispose this plugin
|
|
65
|
+
*/
|
|
66
|
+
HyperlinkPlugin.prototype.dispose = function () {
|
|
67
|
+
if (this.disposer) {
|
|
68
|
+
this.disposer();
|
|
69
|
+
this.disposer = null;
|
|
70
|
+
}
|
|
71
|
+
this.currentNode = null;
|
|
72
|
+
this.currentLink = null;
|
|
73
|
+
this.editor = null;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Handle events triggered from editor
|
|
77
|
+
* @param event PluginEvent object
|
|
78
|
+
*/
|
|
79
|
+
HyperlinkPlugin.prototype.onPluginEvent = function (event) {
|
|
80
|
+
var _this = this;
|
|
81
|
+
var _a, _b;
|
|
82
|
+
var matchedLink;
|
|
83
|
+
if (event.eventType == 'keyDown') {
|
|
84
|
+
var selection = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.getDOMSelection();
|
|
85
|
+
var node_1 = (selection === null || selection === void 0 ? void 0 : selection.type) == 'range' ? selection.range.commonAncestorContainer : null;
|
|
86
|
+
if (node_1 && node_1 != this.currentNode) {
|
|
87
|
+
this.currentNode = node_1;
|
|
88
|
+
this.currentLink = null;
|
|
89
|
+
this.runWithHyperlink(node_1, function (href, a) {
|
|
90
|
+
if (node_1.textContent &&
|
|
91
|
+
(matchedLink = (0, roosterjs_content_model_api_1.matchLink)(node_1.textContent)) &&
|
|
92
|
+
matchedLink.normalizedUrl == href) {
|
|
93
|
+
_this.currentLink = a;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else if (event.eventType == 'keyUp') {
|
|
99
|
+
var selection = (_b = this.editor) === null || _b === void 0 ? void 0 : _b.getDOMSelection();
|
|
100
|
+
var node = (selection === null || selection === void 0 ? void 0 : selection.type) == 'range' ? selection.range.commonAncestorContainer : null;
|
|
101
|
+
if (node &&
|
|
102
|
+
node == this.currentNode &&
|
|
103
|
+
this.currentLink &&
|
|
104
|
+
this.currentLink.contains(node) &&
|
|
105
|
+
node.textContent &&
|
|
106
|
+
(matchedLink = (0, roosterjs_content_model_api_1.matchLink)(node.textContent))) {
|
|
107
|
+
this.currentLink.setAttribute('href', matchedLink.normalizedUrl);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else if (event.eventType == 'mouseUp' && event.isClicking) {
|
|
111
|
+
this.runWithHyperlink(event.rawEvent.target, function (href, anchor) {
|
|
112
|
+
var _a, _b;
|
|
113
|
+
if (!((_a = _this.onLinkClick) === null || _a === void 0 ? void 0 : _a.call(_this, anchor, event.rawEvent)) &&
|
|
114
|
+
_this.isCtrlOrMetaPressed(event.rawEvent) &&
|
|
115
|
+
event.rawEvent.button === 0) {
|
|
116
|
+
event.rawEvent.preventDefault();
|
|
117
|
+
var target = _this.target || '_blank';
|
|
118
|
+
var window_1 = (_b = _this.editor) === null || _b === void 0 ? void 0 : _b.getDocument().defaultView;
|
|
119
|
+
try {
|
|
120
|
+
window_1 === null || window_1 === void 0 ? void 0 : window_1.open(href, target);
|
|
121
|
+
}
|
|
122
|
+
catch (_c) { }
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
HyperlinkPlugin.prototype.runWithHyperlink = function (node, callback) {
|
|
128
|
+
var _a;
|
|
129
|
+
var a = (_a = this.domHelper) === null || _a === void 0 ? void 0 : _a.findClosestElementAncestor(node, 'a[href]');
|
|
130
|
+
var href = a === null || a === void 0 ? void 0 : a.getAttribute('href');
|
|
131
|
+
if (href && a) {
|
|
132
|
+
callback(href, a);
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
HyperlinkPlugin.prototype.isCtrlOrMetaPressed = function (event) {
|
|
136
|
+
return this.isMac ? event.metaKey : event.ctrlKey;
|
|
137
|
+
};
|
|
138
|
+
return HyperlinkPlugin;
|
|
139
|
+
}());
|
|
140
|
+
exports.HyperlinkPlugin = HyperlinkPlugin;
|
|
141
|
+
});
|
|
142
|
+
//# sourceMappingURL=HyperlinkPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HyperlinkPlugin.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/hyperlink/HyperlinkPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { matchLink } from 'roosterjs-content-model-api';\nimport type { HyperlinkToolTip } from './HyperlinkToolTip';\nimport type {\n DOMHelper,\n EditorPlugin,\n IEditor,\n PluginEvent,\n LinkData,\n} from 'roosterjs-content-model-types';\n\nconst defaultToolTipCallback: HyperlinkToolTip = (url: string) => url;\n\n/**\n * Hyperlink plugin does the following jobs for a hyperlink in editor:\n * 1. When hover on a link, show a tool tip\n * 2. When Ctrl+Click on a link, open a new window with the link\n * 3. When type directly on a link whose text matches its link url, update the link url with the link text\n */\nexport class HyperlinkPlugin implements EditorPlugin {\n private editor: IEditor | null = null;\n private domHelper: DOMHelper | null = null;\n private isMac: boolean = false;\n private disposer: (() => void) | null = null;\n\n private currentNode: Node | null = null;\n private currentLink: HTMLAnchorElement | null = null;\n\n /**\n * Create a new instance of HyperLink class\n * @param tooltip Tooltip to show when mouse hover over a link\n * Default value is to return the href itself. If null, there will be no tooltip text.\n * @param target (Optional) Target window name for hyperlink. If null, will use \"_blank\"\n * @param onLinkClick (Optional) Open link callback (return false to use default behavior)\n */\n constructor(\n private tooltip: HyperlinkToolTip = defaultToolTipCallback,\n private target?: string,\n private onLinkClick?: (anchor: HTMLAnchorElement, mouseEvent: MouseEvent) => boolean | void\n ) {}\n\n /**\n * Get a friendly name of this plugin\n */\n getName() {\n return 'Hyperlink';\n }\n\n /**\n * Initialize this plugin\n * @param editor The editor instance\n */\n public initialize(editor: IEditor): void {\n this.editor = editor;\n this.domHelper = editor.getDOMHelper();\n this.isMac = !!editor.getEnvironment().isMac;\n this.disposer = editor.attachDomEvent({\n mouseover: { beforeDispatch: this.onMouse },\n mouseout: { beforeDispatch: this.onMouse },\n });\n }\n\n /**\n * Dispose this plugin\n */\n public dispose(): void {\n if (this.disposer) {\n this.disposer();\n this.disposer = null;\n }\n\n this.currentNode = null;\n this.currentLink = null;\n this.editor = null;\n }\n\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n public onPluginEvent(event: PluginEvent): void {\n let matchedLink: LinkData | null;\n\n if (event.eventType == 'keyDown') {\n const selection = this.editor?.getDOMSelection();\n const node =\n selection?.type == 'range' ? selection.range.commonAncestorContainer : null;\n\n if (node && node != this.currentNode) {\n this.currentNode = node;\n this.currentLink = null;\n\n this.runWithHyperlink(node, (href, a) => {\n if (\n node.textContent &&\n (matchedLink = matchLink(node.textContent)) &&\n matchedLink.normalizedUrl == href\n ) {\n this.currentLink = a;\n }\n });\n }\n } else if (event.eventType == 'keyUp') {\n const selection = this.editor?.getDOMSelection();\n const node =\n selection?.type == 'range' ? selection.range.commonAncestorContainer : null;\n\n if (\n node &&\n node == this.currentNode &&\n this.currentLink &&\n this.currentLink.contains(node) &&\n node.textContent &&\n (matchedLink = matchLink(node.textContent))\n ) {\n this.currentLink.setAttribute('href', matchedLink.normalizedUrl);\n }\n } else if (event.eventType == 'mouseUp' && event.isClicking) {\n this.runWithHyperlink(event.rawEvent.target as Node, (href, anchor) => {\n if (\n !this.onLinkClick?.(anchor, event.rawEvent) &&\n this.isCtrlOrMetaPressed(event.rawEvent) &&\n event.rawEvent.button === 0\n ) {\n event.rawEvent.preventDefault();\n\n const target = this.target || '_blank';\n const window = this.editor?.getDocument().defaultView;\n\n try {\n window?.open(href, target);\n } catch {}\n }\n });\n }\n }\n\n protected onMouse = (e: Event) => {\n this.runWithHyperlink(e.target as Node, (href, a) => {\n const tooltip =\n e.type == 'mouseover'\n ? typeof this.tooltip == 'function'\n ? this.tooltip(href, a)\n : this.tooltip\n : null;\n this.domHelper?.setDomAttribute('title', tooltip);\n });\n };\n\n private runWithHyperlink(node: Node, callback: (href: string, a: HTMLAnchorElement) => void) {\n const a = this.domHelper?.findClosestElementAncestor(\n node,\n 'a[href]'\n ) as HTMLAnchorElement | null;\n const href = a?.getAttribute('href');\n\n if (href && a) {\n callback(href, a);\n }\n }\n\n private isCtrlOrMetaPressed(event: KeyboardEvent | MouseEvent): boolean {\n return this.isMac ? event.metaKey : event.ctrlKey;\n }\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A type to specify how to get a tool tip of hyperlink in editor
|
|
3
|
+
* string: Use this string as tooltip
|
|
4
|
+
* null: No tooltip
|
|
5
|
+
* function: Call this function to get a tooltip
|
|
6
|
+
*/
|
|
7
|
+
export declare type HyperlinkToolTip = string | null | ((url: string, anchor: HTMLAnchorElement) => string);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HyperlinkToolTip.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/hyperlink/HyperlinkToolTip.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * A type to specify how to get a tool tip of hyperlink in editor\n * string: Use this string as tooltip\n * null: No tooltip\n * function: Call this function to get a tooltip\n */\nexport type HyperlinkToolTip = string | null | ((url: string, anchor: HTMLAnchorElement) => string);\n"]}
|
package/lib-amd/index.d.ts
CHANGED
|
@@ -9,3 +9,5 @@ export { ContextMenuPluginBase, ContextMenuOptions } from './contextMenuBase/Con
|
|
|
9
9
|
export { WatermarkPlugin } from './watermark/WatermarkPlugin';
|
|
10
10
|
export { WatermarkFormat } from './watermark/WatermarkFormat';
|
|
11
11
|
export { MarkdownPlugin, MarkdownOptions } from './markdown/MarkdownPlugin';
|
|
12
|
+
export { HyperlinkPlugin } from './hyperlink/HyperlinkPlugin';
|
|
13
|
+
export { HyperlinkToolTip } from './hyperlink/HyperlinkToolTip';
|
package/lib-amd/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
define(["require", "exports", "./tableEdit/TableEditPlugin", "./paste/PastePlugin", "./edit/EditPlugin", "./autoFormat/AutoFormatPlugin", "./shortcut/shortcuts", "./shortcut/ShortcutPlugin", "./contextMenuBase/ContextMenuPluginBase", "./watermark/WatermarkPlugin", "./markdown/MarkdownPlugin"], function (require, exports, TableEditPlugin_1, PastePlugin_1, EditPlugin_1, AutoFormatPlugin_1, shortcuts_1, ShortcutPlugin_1, ContextMenuPluginBase_1, WatermarkPlugin_1, MarkdownPlugin_1) {
|
|
1
|
+
define(["require", "exports", "./tableEdit/TableEditPlugin", "./paste/PastePlugin", "./edit/EditPlugin", "./autoFormat/AutoFormatPlugin", "./shortcut/shortcuts", "./shortcut/ShortcutPlugin", "./contextMenuBase/ContextMenuPluginBase", "./watermark/WatermarkPlugin", "./markdown/MarkdownPlugin", "./hyperlink/HyperlinkPlugin"], function (require, exports, TableEditPlugin_1, PastePlugin_1, EditPlugin_1, AutoFormatPlugin_1, shortcuts_1, ShortcutPlugin_1, ContextMenuPluginBase_1, WatermarkPlugin_1, MarkdownPlugin_1, HyperlinkPlugin_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.MarkdownPlugin = exports.WatermarkPlugin = exports.ContextMenuPluginBase = exports.ShortcutPlugin = exports.ShortcutOutdentList = exports.ShortcutIndentList = exports.ShortcutDecreaseFont = exports.ShortcutIncreaseFont = exports.ShortcutNumbering = exports.ShortcutBullet = exports.ShortcutRedoMacOS = exports.ShortcutRedo = exports.ShortcutUndo2 = exports.ShortcutUndo = exports.ShortcutClearFormat = exports.ShortcutUnderline = exports.ShortcutItalic = exports.ShortcutBold = exports.AutoFormatPlugin = exports.EditPlugin = exports.PastePlugin = exports.TableEditPlugin = void 0;
|
|
4
|
+
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.ShortcutRedo = exports.ShortcutUndo2 = exports.ShortcutUndo = exports.ShortcutClearFormat = exports.ShortcutUnderline = exports.ShortcutItalic = exports.ShortcutBold = exports.AutoFormatPlugin = exports.EditPlugin = exports.PastePlugin = exports.TableEditPlugin = void 0;
|
|
5
5
|
Object.defineProperty(exports, "TableEditPlugin", { enumerable: true, get: function () { return TableEditPlugin_1.TableEditPlugin; } });
|
|
6
6
|
Object.defineProperty(exports, "PastePlugin", { enumerable: true, get: function () { return PastePlugin_1.PastePlugin; } });
|
|
7
7
|
Object.defineProperty(exports, "EditPlugin", { enumerable: true, get: function () { return EditPlugin_1.EditPlugin; } });
|
|
@@ -24,5 +24,6 @@ define(["require", "exports", "./tableEdit/TableEditPlugin", "./paste/PastePlugi
|
|
|
24
24
|
Object.defineProperty(exports, "ContextMenuPluginBase", { enumerable: true, get: function () { return ContextMenuPluginBase_1.ContextMenuPluginBase; } });
|
|
25
25
|
Object.defineProperty(exports, "WatermarkPlugin", { enumerable: true, get: function () { return WatermarkPlugin_1.WatermarkPlugin; } });
|
|
26
26
|
Object.defineProperty(exports, "MarkdownPlugin", { enumerable: true, get: function () { return MarkdownPlugin_1.MarkdownPlugin; } });
|
|
27
|
+
Object.defineProperty(exports, "HyperlinkPlugin", { enumerable: true, get: function () { return HyperlinkPlugin_1.HyperlinkPlugin; } });
|
|
27
28
|
});
|
|
28
29
|
//# sourceMappingURL=index.js.map
|
package/lib-amd/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/roosterjs-content-model-plugins/lib/index.ts"],"names":[],"mappings":";;;;IAAS,kHAAA,eAAe,OAAA;IACf,0GAAA,WAAW,OAAA;IACX,wGAAA,UAAU,OAAA;IACV,oHAAA,gBAAgB,OAAA;IAGrB,yGAAA,YAAY,OAAA;IACZ,2GAAA,cAAc,OAAA;IACd,8GAAA,iBAAiB,OAAA;IACjB,gHAAA,mBAAmB,OAAA;IACnB,yGAAA,YAAY,OAAA;IACZ,0GAAA,aAAa,OAAA;IACb,yGAAA,YAAY,OAAA;IACZ,8GAAA,iBAAiB,OAAA;IACjB,2GAAA,cAAc,OAAA;IACd,8GAAA,iBAAiB,OAAA;IACjB,iHAAA,oBAAoB,OAAA;IACpB,iHAAA,oBAAoB,OAAA;IACpB,+GAAA,kBAAkB,OAAA;IAClB,gHAAA,mBAAmB,OAAA;IAEd,gHAAA,cAAc,OAAA;IAEd,8HAAA,qBAAqB,OAAA;IACrB,kHAAA,eAAe,OAAA;IAEf,gHAAA,cAAc,OAAA","sourcesContent":["export { TableEditPlugin } from './tableEdit/TableEditPlugin';\nexport { PastePlugin } from './paste/PastePlugin';\nexport { EditPlugin } from './edit/EditPlugin';\nexport { AutoFormatPlugin, AutoFormatOptions } from './autoFormat/AutoFormatPlugin';\n\nexport {\n ShortcutBold,\n ShortcutItalic,\n ShortcutUnderline,\n ShortcutClearFormat,\n ShortcutUndo,\n ShortcutUndo2,\n ShortcutRedo,\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';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/roosterjs-content-model-plugins/lib/index.ts"],"names":[],"mappings":";;;;IAAS,kHAAA,eAAe,OAAA;IACf,0GAAA,WAAW,OAAA;IACX,wGAAA,UAAU,OAAA;IACV,oHAAA,gBAAgB,OAAA;IAGrB,yGAAA,YAAY,OAAA;IACZ,2GAAA,cAAc,OAAA;IACd,8GAAA,iBAAiB,OAAA;IACjB,gHAAA,mBAAmB,OAAA;IACnB,yGAAA,YAAY,OAAA;IACZ,0GAAA,aAAa,OAAA;IACb,yGAAA,YAAY,OAAA;IACZ,8GAAA,iBAAiB,OAAA;IACjB,2GAAA,cAAc,OAAA;IACd,8GAAA,iBAAiB,OAAA;IACjB,iHAAA,oBAAoB,OAAA;IACpB,iHAAA,oBAAoB,OAAA;IACpB,+GAAA,kBAAkB,OAAA;IAClB,gHAAA,mBAAmB,OAAA;IAEd,gHAAA,cAAc,OAAA;IAEd,8HAAA,qBAAqB,OAAA;IACrB,kHAAA,eAAe,OAAA;IAEf,gHAAA,cAAc,OAAA;IACd,kHAAA,eAAe,OAAA","sourcesContent":["export { TableEditPlugin } from './tableEdit/TableEditPlugin';\nexport { PastePlugin } from './paste/PastePlugin';\nexport { EditPlugin } from './edit/EditPlugin';\nexport { AutoFormatPlugin, AutoFormatOptions } from './autoFormat/AutoFormatPlugin';\n\nexport {\n ShortcutBold,\n ShortcutItalic,\n ShortcutUnderline,\n ShortcutClearFormat,\n ShortcutUndo,\n ShortcutUndo2,\n ShortcutRedo,\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';\n"]}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
import type { EditorPlugin, IEditor, PluginEvent } from 'roosterjs-content-model-types';
|
|
1
|
+
import type { ContentModelCodeFormat, EditorPlugin, IEditor, PluginEvent } from 'roosterjs-content-model-types';
|
|
2
2
|
/**
|
|
3
|
+
*
|
|
3
4
|
* Options for Markdown plugin
|
|
5
|
+
* - strikethrough: If true text between ~ will receive strikethrough format.
|
|
6
|
+
* - bold: If true text between * will receive bold format.
|
|
7
|
+
* - italic: If true text between _ will receive italic format.
|
|
8
|
+
* - codeFormat: If provided, text between ` will receive code format. If equal to {}, it will set the default code format.
|
|
4
9
|
*/
|
|
5
10
|
export interface MarkdownOptions {
|
|
6
11
|
strikethrough?: boolean;
|
|
7
12
|
bold?: boolean;
|
|
8
13
|
italic?: boolean;
|
|
14
|
+
codeFormat?: ContentModelCodeFormat;
|
|
9
15
|
}
|
|
10
16
|
/**
|
|
11
17
|
* Markdown plugin handles markdown formatting, such as transforming * characters into bold text.
|
|
@@ -16,12 +22,14 @@ export declare class MarkdownPlugin implements EditorPlugin {
|
|
|
16
22
|
private shouldBold;
|
|
17
23
|
private shouldItalic;
|
|
18
24
|
private shouldStrikethrough;
|
|
25
|
+
private shouldCode;
|
|
19
26
|
private lastKeyTyped;
|
|
20
27
|
/**
|
|
21
28
|
* @param options An optional parameter that takes in an object of type MarkdownOptions, which includes the following properties:
|
|
22
|
-
* - strikethrough: If true text between ~ will receive strikethrough format. Defaults to
|
|
23
|
-
* - bold: If true text between * will receive bold format. Defaults to
|
|
24
|
-
* - italic: If true text between _ will receive italic format. Defaults to
|
|
29
|
+
* - strikethrough: If true text between ~ will receive strikethrough format. Defaults to false.
|
|
30
|
+
* - bold: If true text between * will receive bold format. Defaults to false.
|
|
31
|
+
* - italic: If true text between _ will receive italic format. Defaults to false.
|
|
32
|
+
* - codeFormat: If provided, text between ` will receive code format. Defaults to undefined.
|
|
25
33
|
*/
|
|
26
34
|
constructor(options?: MarkdownOptions);
|
|
27
35
|
/**
|
|
@@ -52,4 +60,5 @@ export declare class MarkdownPlugin implements EditorPlugin {
|
|
|
52
60
|
private handleKeyDownEvent;
|
|
53
61
|
private handleBackspaceEvent;
|
|
54
62
|
private handleContentChangedEvent;
|
|
63
|
+
private disableAllFeatures;
|
|
55
64
|
}
|
|
@@ -16,9 +16,10 @@ define(["require", "exports", "./utils/setFormat"], function (require, exports,
|
|
|
16
16
|
var MarkdownPlugin = /** @class */ (function () {
|
|
17
17
|
/**
|
|
18
18
|
* @param options An optional parameter that takes in an object of type MarkdownOptions, which includes the following properties:
|
|
19
|
-
* - strikethrough: If true text between ~ will receive strikethrough format. Defaults to
|
|
20
|
-
* - bold: If true text between * will receive bold format. Defaults to
|
|
21
|
-
* - italic: If true text between _ will receive italic format. Defaults to
|
|
19
|
+
* - strikethrough: If true text between ~ will receive strikethrough format. Defaults to false.
|
|
20
|
+
* - bold: If true text between * will receive bold format. Defaults to false.
|
|
21
|
+
* - italic: If true text between _ will receive italic format. Defaults to false.
|
|
22
|
+
* - codeFormat: If provided, text between ` will receive code format. Defaults to undefined.
|
|
22
23
|
*/
|
|
23
24
|
function MarkdownPlugin(options) {
|
|
24
25
|
if (options === void 0) { options = DefaultOptions; }
|
|
@@ -27,6 +28,7 @@ define(["require", "exports", "./utils/setFormat"], function (require, exports,
|
|
|
27
28
|
this.shouldBold = false;
|
|
28
29
|
this.shouldItalic = false;
|
|
29
30
|
this.shouldStrikethrough = false;
|
|
31
|
+
this.shouldCode = false;
|
|
30
32
|
this.lastKeyTyped = null;
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
@@ -51,9 +53,7 @@ define(["require", "exports", "./utils/setFormat"], function (require, exports,
|
|
|
51
53
|
*/
|
|
52
54
|
MarkdownPlugin.prototype.dispose = function () {
|
|
53
55
|
this.editor = null;
|
|
54
|
-
this.
|
|
55
|
-
this.shouldItalic = false;
|
|
56
|
-
this.shouldStrikethrough = false;
|
|
56
|
+
this.disableAllFeatures();
|
|
57
57
|
this.lastKeyTyped = null;
|
|
58
58
|
};
|
|
59
59
|
/**
|
|
@@ -119,6 +119,17 @@ define(["require", "exports", "./utils/setFormat"], function (require, exports,
|
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
break;
|
|
122
|
+
case '`':
|
|
123
|
+
if (this.options.codeFormat) {
|
|
124
|
+
if (this.shouldCode) {
|
|
125
|
+
(0, setFormat_1.setFormat)(editor, '`', {} /* format */, this.options.codeFormat);
|
|
126
|
+
this.shouldCode = false;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
this.shouldCode = true;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
break;
|
|
122
133
|
}
|
|
123
134
|
}
|
|
124
135
|
};
|
|
@@ -127,9 +138,7 @@ define(["require", "exports", "./utils/setFormat"], function (require, exports,
|
|
|
127
138
|
if (!event.handledByEditFeature && !rawEvent.defaultPrevented) {
|
|
128
139
|
switch (rawEvent.key) {
|
|
129
140
|
case 'Enter':
|
|
130
|
-
this.
|
|
131
|
-
this.shouldItalic = false;
|
|
132
|
-
this.shouldStrikethrough = false;
|
|
141
|
+
this.disableAllFeatures();
|
|
133
142
|
this.lastKeyTyped = null;
|
|
134
143
|
break;
|
|
135
144
|
case ' ':
|
|
@@ -142,6 +151,9 @@ define(["require", "exports", "./utils/setFormat"], function (require, exports,
|
|
|
142
151
|
else if (this.lastKeyTyped === '_' && this.shouldItalic) {
|
|
143
152
|
this.shouldItalic = false;
|
|
144
153
|
}
|
|
154
|
+
else if (this.lastKeyTyped === '`' && this.shouldCode) {
|
|
155
|
+
this.shouldCode = false;
|
|
156
|
+
}
|
|
145
157
|
this.lastKeyTyped = null;
|
|
146
158
|
break;
|
|
147
159
|
default:
|
|
@@ -161,16 +173,23 @@ define(["require", "exports", "./utils/setFormat"], function (require, exports,
|
|
|
161
173
|
else if (this.lastKeyTyped === '_' && this.shouldItalic) {
|
|
162
174
|
this.shouldItalic = false;
|
|
163
175
|
}
|
|
176
|
+
else if (this.lastKeyTyped === '`' && this.shouldCode) {
|
|
177
|
+
this.shouldCode = false;
|
|
178
|
+
}
|
|
164
179
|
this.lastKeyTyped = null;
|
|
165
180
|
}
|
|
166
181
|
};
|
|
167
182
|
MarkdownPlugin.prototype.handleContentChangedEvent = function (event) {
|
|
168
183
|
if (event.source == 'Format') {
|
|
169
|
-
this.
|
|
170
|
-
this.shouldItalic = false;
|
|
171
|
-
this.shouldStrikethrough = false;
|
|
184
|
+
this.disableAllFeatures();
|
|
172
185
|
}
|
|
173
186
|
};
|
|
187
|
+
MarkdownPlugin.prototype.disableAllFeatures = function () {
|
|
188
|
+
this.shouldBold = false;
|
|
189
|
+
this.shouldItalic = false;
|
|
190
|
+
this.shouldStrikethrough = false;
|
|
191
|
+
this.shouldCode = false;
|
|
192
|
+
};
|
|
174
193
|
return MarkdownPlugin;
|
|
175
194
|
}());
|
|
176
195
|
exports.MarkdownPlugin = MarkdownPlugin;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownPlugin.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/markdown/MarkdownPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { setFormat } from './utils/setFormat';\nimport type {\n ContentChangedEvent,\n EditorInputEvent,\n EditorPlugin,\n IEditor,\n KeyDownEvent,\n PluginEvent,\n} from 'roosterjs-content-model-types';\n\n/**\n * Options for Markdown plugin\n */\nexport interface MarkdownOptions {\n strikethrough?: boolean;\n bold?: boolean;\n italic?: boolean;\n}\n\n/**\n * @internal\n */\nconst DefaultOptions: Required<MarkdownOptions> = {\n strikethrough: false,\n bold: false,\n italic: false,\n};\n\n/**\n * Markdown plugin handles markdown formatting, such as transforming * characters into bold text.\n */\nexport class MarkdownPlugin implements EditorPlugin {\n private editor: IEditor | null = null;\n private shouldBold = false;\n private shouldItalic = false;\n private shouldStrikethrough = false;\n private lastKeyTyped: string | null = null;\n\n /**\n * @param options An optional parameter that takes in an object of type MarkdownOptions, which includes the following properties:\n * - strikethrough: If true text between ~ will receive strikethrough format. Defaults to true.\n * - bold: If true text between * will receive bold format. Defaults to true.\n * - italic: If true text between _ will receive italic format. Defaults to true.\n */\n constructor(private options: MarkdownOptions = DefaultOptions) {}\n\n /**\n * Get name of this plugin\n */\n getName() {\n return 'Markdown';\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 }\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 this.shouldBold = false;\n this.shouldItalic = false;\n this.shouldStrikethrough = false;\n this.lastKeyTyped = null;\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) {\n switch (event.eventType) {\n case 'input':\n this.handleEditorInputEvent(this.editor, event);\n break;\n case 'keyDown':\n this.handleBackspaceEvent(event);\n this.handleKeyDownEvent(event);\n break;\n case 'contentChanged':\n this.handleContentChangedEvent(event);\n break;\n }\n }\n }\n\n private handleEditorInputEvent(editor: IEditor, event: EditorInputEvent) {\n const rawEvent = event.rawEvent;\n const selection = editor.getDOMSelection();\n if (\n selection &&\n selection.type == 'range' &&\n selection.range.collapsed &&\n rawEvent.inputType == 'insertText'\n ) {\n switch (rawEvent.data) {\n case '*':\n if (this.options.bold) {\n if (this.shouldBold) {\n setFormat(editor, '*', { fontWeight: 'bold' });\n this.shouldBold = false;\n } else {\n this.shouldBold = true;\n }\n }\n\n break;\n case '~':\n if (this.options.strikethrough) {\n if (this.shouldStrikethrough) {\n setFormat(editor, '~', { strikethrough: true });\n this.shouldStrikethrough = false;\n } else {\n this.shouldStrikethrough = true;\n }\n }\n break;\n case '_':\n if (this.options.italic) {\n if (this.shouldItalic) {\n setFormat(editor, '_', { italic: true });\n this.shouldItalic = false;\n } else {\n this.shouldItalic = true;\n }\n }\n break;\n }\n }\n }\n\n private handleKeyDownEvent(event: KeyDownEvent) {\n const rawEvent = event.rawEvent;\n if (!event.handledByEditFeature && !rawEvent.defaultPrevented) {\n switch (rawEvent.key) {\n case 'Enter':\n this.shouldBold = false;\n this.shouldItalic = false;\n this.shouldStrikethrough = false;\n this.lastKeyTyped = null;\n break;\n case ' ':\n if (this.lastKeyTyped === '*' && this.shouldBold) {\n this.shouldBold = false;\n } else if (this.lastKeyTyped === '~' && this.shouldStrikethrough) {\n this.shouldStrikethrough = false;\n } else if (this.lastKeyTyped === '_' && this.shouldItalic) {\n this.shouldItalic = false;\n }\n this.lastKeyTyped = null;\n break;\n default:\n this.lastKeyTyped = rawEvent.key;\n break;\n }\n }\n }\n\n private handleBackspaceEvent(event: KeyDownEvent) {\n if (!event.handledByEditFeature && event.rawEvent.key === 'Backspace') {\n if (this.lastKeyTyped === '*' && this.shouldBold) {\n this.shouldBold = false;\n } else if (this.lastKeyTyped === '~' && this.shouldStrikethrough) {\n this.shouldStrikethrough = false;\n } else if (this.lastKeyTyped === '_' && this.shouldItalic) {\n this.shouldItalic = false;\n }\n this.lastKeyTyped = null;\n }\n }\n\n private handleContentChangedEvent(event: ContentChangedEvent) {\n if (event.source == 'Format') {\n this.shouldBold = false;\n this.shouldItalic = false;\n this.shouldStrikethrough = false;\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MarkdownPlugin.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/markdown/MarkdownPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { setFormat } from './utils/setFormat';\nimport type {\n ContentChangedEvent,\n ContentModelCodeFormat,\n EditorInputEvent,\n EditorPlugin,\n IEditor,\n KeyDownEvent,\n PluginEvent,\n} from 'roosterjs-content-model-types';\n\n/**\n *\n * Options for Markdown plugin\n * - strikethrough: If true text between ~ will receive strikethrough format.\n * - bold: If true text between * will receive bold format.\n * - italic: If true text between _ will receive italic format.\n * - codeFormat: If provided, text between ` will receive code format. If equal to {}, it will set the default code format.\n */\nexport interface MarkdownOptions {\n strikethrough?: boolean;\n bold?: boolean;\n italic?: boolean;\n codeFormat?: ContentModelCodeFormat;\n}\n\n/**\n * @internal\n */\nconst DefaultOptions: Partial<MarkdownOptions> = {\n strikethrough: false,\n bold: false,\n italic: false,\n};\n\n/**\n * Markdown plugin handles markdown formatting, such as transforming * characters into bold text.\n */\nexport class MarkdownPlugin implements EditorPlugin {\n private editor: IEditor | null = null;\n private shouldBold = false;\n private shouldItalic = false;\n private shouldStrikethrough = false;\n private shouldCode = false;\n private lastKeyTyped: string | null = null;\n\n /**\n * @param options An optional parameter that takes in an object of type MarkdownOptions, which includes the following properties:\n * - strikethrough: If true text between ~ will receive strikethrough format. Defaults to false.\n * - bold: If true text between * will receive bold format. Defaults to false.\n * - italic: If true text between _ will receive italic format. Defaults to false.\n * - codeFormat: If provided, text between ` will receive code format. Defaults to undefined.\n */\n constructor(private options: MarkdownOptions = DefaultOptions) {}\n\n /**\n * Get name of this plugin\n */\n getName() {\n return 'Markdown';\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 }\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 this.disableAllFeatures();\n this.lastKeyTyped = null;\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) {\n switch (event.eventType) {\n case 'input':\n this.handleEditorInputEvent(this.editor, event);\n break;\n case 'keyDown':\n this.handleBackspaceEvent(event);\n this.handleKeyDownEvent(event);\n break;\n case 'contentChanged':\n this.handleContentChangedEvent(event);\n break;\n }\n }\n }\n\n private handleEditorInputEvent(editor: IEditor, event: EditorInputEvent) {\n const rawEvent = event.rawEvent;\n const selection = editor.getDOMSelection();\n if (\n selection &&\n selection.type == 'range' &&\n selection.range.collapsed &&\n rawEvent.inputType == 'insertText'\n ) {\n switch (rawEvent.data) {\n case '*':\n if (this.options.bold) {\n if (this.shouldBold) {\n setFormat(editor, '*', { fontWeight: 'bold' });\n this.shouldBold = false;\n } else {\n this.shouldBold = true;\n }\n }\n\n break;\n case '~':\n if (this.options.strikethrough) {\n if (this.shouldStrikethrough) {\n setFormat(editor, '~', { strikethrough: true });\n this.shouldStrikethrough = false;\n } else {\n this.shouldStrikethrough = true;\n }\n }\n break;\n case '_':\n if (this.options.italic) {\n if (this.shouldItalic) {\n setFormat(editor, '_', { italic: true });\n this.shouldItalic = false;\n } else {\n this.shouldItalic = true;\n }\n }\n break;\n case '`':\n if (this.options.codeFormat) {\n if (this.shouldCode) {\n setFormat(editor, '`', {} /* format */, this.options.codeFormat);\n this.shouldCode = false;\n } else {\n this.shouldCode = true;\n }\n }\n break;\n }\n }\n }\n\n private handleKeyDownEvent(event: KeyDownEvent) {\n const rawEvent = event.rawEvent;\n if (!event.handledByEditFeature && !rawEvent.defaultPrevented) {\n switch (rawEvent.key) {\n case 'Enter':\n this.disableAllFeatures();\n this.lastKeyTyped = null;\n break;\n case ' ':\n if (this.lastKeyTyped === '*' && this.shouldBold) {\n this.shouldBold = false;\n } else if (this.lastKeyTyped === '~' && this.shouldStrikethrough) {\n this.shouldStrikethrough = false;\n } else if (this.lastKeyTyped === '_' && this.shouldItalic) {\n this.shouldItalic = false;\n } else if (this.lastKeyTyped === '`' && this.shouldCode) {\n this.shouldCode = false;\n }\n this.lastKeyTyped = null;\n break;\n default:\n this.lastKeyTyped = rawEvent.key;\n break;\n }\n }\n }\n\n private handleBackspaceEvent(event: KeyDownEvent) {\n if (!event.handledByEditFeature && event.rawEvent.key === 'Backspace') {\n if (this.lastKeyTyped === '*' && this.shouldBold) {\n this.shouldBold = false;\n } else if (this.lastKeyTyped === '~' && this.shouldStrikethrough) {\n this.shouldStrikethrough = false;\n } else if (this.lastKeyTyped === '_' && this.shouldItalic) {\n this.shouldItalic = false;\n } else if (this.lastKeyTyped === '`' && this.shouldCode) {\n this.shouldCode = false;\n }\n this.lastKeyTyped = null;\n }\n }\n\n private handleContentChangedEvent(event: ContentChangedEvent) {\n if (event.source == 'Format') {\n this.disableAllFeatures();\n }\n }\n\n private disableAllFeatures() {\n this.shouldBold = false;\n this.shouldItalic = false;\n this.shouldStrikethrough = false;\n this.shouldCode = false;\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ContentModelSegmentFormat, IEditor } from 'roosterjs-content-model-types';
|
|
1
|
+
import type { ContentModelCodeFormat, ContentModelSegmentFormat, IEditor } from 'roosterjs-content-model-types';
|
|
2
2
|
/**
|
|
3
3
|
* @internal
|
|
4
4
|
*/
|
|
5
|
-
export declare function setFormat(editor: IEditor, character: string, format: ContentModelSegmentFormat): void;
|
|
5
|
+
export declare function setFormat(editor: IEditor, character: string, format: ContentModelSegmentFormat, codeFormat?: ContentModelCodeFormat): void;
|
|
@@ -1,40 +1,30 @@
|
|
|
1
|
-
define(["require", "exports", "tslib", "roosterjs-content-model-
|
|
1
|
+
define(["require", "exports", "tslib", "roosterjs-content-model-api", "../../pluginUtils/splitTextSegment"], function (require, exports, tslib_1, roosterjs_content_model_api_1, splitTextSegment_1) {
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.setFormat = void 0;
|
|
5
5
|
/**
|
|
6
6
|
* @internal
|
|
7
7
|
*/
|
|
8
|
-
function setFormat(editor, character, format) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
var firstCharIndex = segmentBeforeMarker.text
|
|
26
|
-
.substring(0, lastCharIndex - 1)
|
|
27
|
-
.lastIndexOf(character);
|
|
28
|
-
var formattedText = (0, splitTextSegment_1.splitTextSegment)(segmentBeforeMarker, paragraph, firstCharIndex, lastCharIndex);
|
|
29
|
-
formattedText.text = formattedText.text
|
|
30
|
-
.replace(character, '')
|
|
31
|
-
.slice(0, -1);
|
|
32
|
-
formattedText.format = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, formattedText.format), format);
|
|
33
|
-
context.canUndoByBackspace = true;
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
8
|
+
function setFormat(editor, character, format, codeFormat) {
|
|
9
|
+
(0, roosterjs_content_model_api_1.formatTextSegmentBeforeSelectionMarker)(editor, function (_model, previousSegment, paragraph, markerFormat, context) {
|
|
10
|
+
if (previousSegment.text[previousSegment.text.length - 1] == character) {
|
|
11
|
+
var textBeforeMarker = previousSegment.text.slice(0, -1);
|
|
12
|
+
context.newPendingFormat = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, markerFormat), { strikethrough: !!markerFormat.strikethrough, italic: !!markerFormat.italic, fontWeight: (markerFormat === null || markerFormat === void 0 ? void 0 : markerFormat.fontWeight) ? 'bold' : undefined });
|
|
13
|
+
if (textBeforeMarker.indexOf(character) > -1) {
|
|
14
|
+
var lastCharIndex = previousSegment.text.length;
|
|
15
|
+
var firstCharIndex = previousSegment.text
|
|
16
|
+
.substring(0, lastCharIndex - 1)
|
|
17
|
+
.lastIndexOf(character);
|
|
18
|
+
var formattedText = (0, splitTextSegment_1.splitTextSegment)(previousSegment, paragraph, firstCharIndex, lastCharIndex);
|
|
19
|
+
formattedText.text = formattedText.text.replace(character, '').slice(0, -1);
|
|
20
|
+
formattedText.format = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, formattedText.format), format);
|
|
21
|
+
if (codeFormat) {
|
|
22
|
+
formattedText.code = {
|
|
23
|
+
format: codeFormat,
|
|
24
|
+
};
|
|
37
25
|
}
|
|
26
|
+
context.canUndoByBackspace = true;
|
|
27
|
+
return true;
|
|
38
28
|
}
|
|
39
29
|
}
|
|
40
30
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setFormat.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/markdown/utils/setFormat.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"setFormat.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/markdown/utils/setFormat.ts"],"names":[],"mappings":";;;;IASA;;OAEG;IACH,SAAgB,SAAS,CACrB,MAAe,EACf,SAAiB,EACjB,MAAiC,EACjC,UAAmC;QAEnC,IAAA,oEAAsC,EAClC,MAAM,EACN,UAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO;YACtD,IAAI,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,SAAS,EAAE;gBACpE,IAAM,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3D,OAAO,CAAC,gBAAgB,mDACjB,YAAY,KACf,aAAa,EAAE,CAAC,CAAC,YAAY,CAAC,aAAa,EAC3C,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM,EAC7B,UAAU,EAAE,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,UAAU,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,GAC5D,CAAC;gBACF,IAAI,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;oBAC1C,IAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;oBAClD,IAAM,cAAc,GAAG,eAAe,CAAC,IAAI;yBACtC,SAAS,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC;yBAC/B,WAAW,CAAC,SAAS,CAAC,CAAC;oBAE5B,IAAM,aAAa,GAAG,IAAA,mCAAgB,EAClC,eAAe,EACf,SAAS,EACT,cAAc,EACd,aAAa,CAChB,CAAC;oBAEF,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5E,aAAa,CAAC,MAAM,mDACb,aAAa,CAAC,MAAM,GACpB,MAAM,CACZ,CAAC;oBACF,IAAI,UAAU,EAAE;wBACZ,aAAa,CAAC,IAAI,GAAG;4BACjB,MAAM,EAAE,UAAU;yBACrB,CAAC;qBACL;oBAED,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;oBAClC,OAAO,IAAI,CAAC;iBACf;aACJ;YACD,OAAO,KAAK,CAAC;QACjB,CAAC,CACJ,CAAC;IACN,CAAC;IAhDD,8BAgDC","sourcesContent":["import { formatTextSegmentBeforeSelectionMarker } from 'roosterjs-content-model-api';\nimport { splitTextSegment } from '../../pluginUtils/splitTextSegment';\n\nimport type {\n ContentModelCodeFormat,\n ContentModelSegmentFormat,\n IEditor,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function setFormat(\n editor: IEditor,\n character: string,\n format: ContentModelSegmentFormat,\n codeFormat?: ContentModelCodeFormat\n) {\n formatTextSegmentBeforeSelectionMarker(\n editor,\n (_model, previousSegment, paragraph, markerFormat, context) => {\n if (previousSegment.text[previousSegment.text.length - 1] == character) {\n const textBeforeMarker = previousSegment.text.slice(0, -1);\n context.newPendingFormat = {\n ...markerFormat,\n strikethrough: !!markerFormat.strikethrough,\n italic: !!markerFormat.italic,\n fontWeight: markerFormat?.fontWeight ? 'bold' : undefined,\n };\n if (textBeforeMarker.indexOf(character) > -1) {\n const lastCharIndex = previousSegment.text.length;\n const firstCharIndex = previousSegment.text\n .substring(0, lastCharIndex - 1)\n .lastIndexOf(character);\n\n const formattedText = splitTextSegment(\n previousSegment,\n paragraph,\n firstCharIndex,\n lastCharIndex\n );\n\n formattedText.text = formattedText.text.replace(character, '').slice(0, -1);\n formattedText.format = {\n ...formattedText.format,\n ...format,\n };\n if (codeFormat) {\n formattedText.code = {\n format: codeFormat,\n };\n }\n\n context.canUndoByBackspace = true;\n return true;\n }\n }\n return false;\n }\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: N/A
|
|
24
24
|
*/
|
|
25
25
|
export declare const ShortcutClearFormat: ShortcutCommand;
|
|
26
26
|
/**
|
|
@@ -74,12 +74,12 @@ export declare const ShortcutDecreaseFont: ShortcutCommand;
|
|
|
74
74
|
/**
|
|
75
75
|
* Shortcut command for Intent list
|
|
76
76
|
* Windows: Alt + Shift + Arrow Right
|
|
77
|
-
* MacOS:
|
|
77
|
+
* MacOS: N/A
|
|
78
78
|
*/
|
|
79
79
|
export declare const ShortcutIndentList: ShortcutCommand;
|
|
80
80
|
/**
|
|
81
81
|
* Shortcut command for Outdent list
|
|
82
82
|
* Windows: Alt + Shift + Arrow Left
|
|
83
|
-
* MacOS:
|
|
83
|
+
* MacOS: N/A
|
|
84
84
|
*/
|
|
85
85
|
export declare const ShortcutOutdentList: ShortcutCommand;
|
|
@@ -59,7 +59,7 @@ define(["require", "exports", "roosterjs-content-model-core", "./utils/setShortc
|
|
|
59
59
|
/**
|
|
60
60
|
* Shortcut command for Clear Format
|
|
61
61
|
* Windows: Ctrl + Space
|
|
62
|
-
* MacOS:
|
|
62
|
+
* MacOS: N/A
|
|
63
63
|
*/
|
|
64
64
|
exports.ShortcutClearFormat = {
|
|
65
65
|
shortcutKey: {
|
|
@@ -68,6 +68,7 @@ define(["require", "exports", "roosterjs-content-model-core", "./utils/setShortc
|
|
|
68
68
|
which: 32 /* SPACE */,
|
|
69
69
|
},
|
|
70
70
|
onClick: function (editor) { return (0, roosterjs_content_model_api_1.clearFormat)(editor); },
|
|
71
|
+
environment: 'nonMac',
|
|
71
72
|
};
|
|
72
73
|
/**
|
|
73
74
|
* Shortcut command for Undo 1
|
|
@@ -179,7 +180,7 @@ define(["require", "exports", "roosterjs-content-model-core", "./utils/setShortc
|
|
|
179
180
|
/**
|
|
180
181
|
* Shortcut command for Intent list
|
|
181
182
|
* Windows: Alt + Shift + Arrow Right
|
|
182
|
-
* MacOS:
|
|
183
|
+
* MacOS: N/A
|
|
183
184
|
*/
|
|
184
185
|
exports.ShortcutIndentList = {
|
|
185
186
|
shortcutKey: {
|
|
@@ -190,11 +191,12 @@ define(["require", "exports", "roosterjs-content-model-core", "./utils/setShortc
|
|
|
190
191
|
onClick: function (editor) {
|
|
191
192
|
(0, setShortcutIndentationCommand_1.setShortcutIndentationCommand)(editor, 'indent');
|
|
192
193
|
},
|
|
194
|
+
environment: 'nonMac',
|
|
193
195
|
};
|
|
194
196
|
/**
|
|
195
197
|
* Shortcut command for Outdent list
|
|
196
198
|
* Windows: Alt + Shift + Arrow Left
|
|
197
|
-
* MacOS:
|
|
199
|
+
* MacOS: N/A
|
|
198
200
|
*/
|
|
199
201
|
exports.ShortcutOutdentList = {
|
|
200
202
|
shortcutKey: {
|
|
@@ -205,6 +207,7 @@ define(["require", "exports", "roosterjs-content-model-core", "./utils/setShortc
|
|
|
205
207
|
onClick: function (editor) {
|
|
206
208
|
(0, setShortcutIndentationCommand_1.setShortcutIndentationCommand)(editor, 'outdent');
|
|
207
209
|
},
|
|
210
|
+
environment: 'nonMac',
|
|
208
211
|
};
|
|
209
212
|
});
|
|
210
213
|
//# sourceMappingURL=shortcuts.js.map
|