@atlaskit/editor-plugin-text-formatting 0.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/.eslintrc.js +7 -0
- package/CHANGELOG.md +1 -0
- package/LICENSE.md +13 -0
- package/README.md +9 -0
- package/dist/cjs/actions.js +188 -0
- package/dist/cjs/commands/clear-formatting.js +111 -0
- package/dist/cjs/commands/text-formatting.js +143 -0
- package/dist/cjs/commands/transform-to-code.js +68 -0
- package/dist/cjs/index.js +12 -0
- package/dist/cjs/plugin.js +133 -0
- package/dist/cjs/pm-plugins/clear-formatting-keymap.js +21 -0
- package/dist/cjs/pm-plugins/clear-formatting.js +36 -0
- package/dist/cjs/pm-plugins/cursor.js +55 -0
- package/dist/cjs/pm-plugins/input-rule.js +274 -0
- package/dist/cjs/pm-plugins/keymap.js +52 -0
- package/dist/cjs/pm-plugins/main.js +113 -0
- package/dist/cjs/pm-plugins/plugin-key.js +9 -0
- package/dist/cjs/pm-plugins/smart-input-rule.js +176 -0
- package/dist/cjs/ui/Toolbar/constants.js +19 -0
- package/dist/cjs/ui/Toolbar/dropdown-menu.js +86 -0
- package/dist/cjs/ui/Toolbar/hooks/clear-formatting-icon.js +55 -0
- package/dist/cjs/ui/Toolbar/hooks/formatting-icons.js +227 -0
- package/dist/cjs/ui/Toolbar/hooks/menu-state.js +23 -0
- package/dist/cjs/ui/Toolbar/hooks/responsive-toolbar-buttons.js +60 -0
- package/dist/cjs/ui/Toolbar/index.js +183 -0
- package/dist/cjs/ui/Toolbar/more-button.js +42 -0
- package/dist/cjs/ui/Toolbar/single-toolbar-buttons.js +49 -0
- package/dist/cjs/ui/Toolbar/types.js +17 -0
- package/dist/cjs/utils/cell-selection.js +12 -0
- package/dist/cjs/utils.js +86 -0
- package/dist/cjs/version.json +5 -0
- package/dist/es2019/actions.js +161 -0
- package/dist/es2019/commands/clear-formatting.js +105 -0
- package/dist/es2019/commands/text-formatting.js +144 -0
- package/dist/es2019/commands/transform-to-code.js +71 -0
- package/dist/es2019/index.js +1 -0
- package/dist/es2019/plugin.js +124 -0
- package/dist/es2019/pm-plugins/clear-formatting-keymap.js +10 -0
- package/dist/es2019/pm-plugins/clear-formatting.js +26 -0
- package/dist/es2019/pm-plugins/cursor.js +52 -0
- package/dist/es2019/pm-plugins/input-rule.js +242 -0
- package/dist/es2019/pm-plugins/keymap.js +43 -0
- package/dist/es2019/pm-plugins/main.js +110 -0
- package/dist/es2019/pm-plugins/plugin-key.js +2 -0
- package/dist/es2019/pm-plugins/smart-input-rule.js +155 -0
- package/dist/es2019/ui/Toolbar/constants.js +20 -0
- package/dist/es2019/ui/Toolbar/dropdown-menu.js +66 -0
- package/dist/es2019/ui/Toolbar/hooks/clear-formatting-icon.js +44 -0
- package/dist/es2019/ui/Toolbar/hooks/formatting-icons.js +212 -0
- package/dist/es2019/ui/Toolbar/hooks/menu-state.js +11 -0
- package/dist/es2019/ui/Toolbar/hooks/responsive-toolbar-buttons.js +48 -0
- package/dist/es2019/ui/Toolbar/index.js +168 -0
- package/dist/es2019/ui/Toolbar/more-button.js +34 -0
- package/dist/es2019/ui/Toolbar/single-toolbar-buttons.js +39 -0
- package/dist/es2019/ui/Toolbar/types.js +10 -0
- package/dist/es2019/utils/cell-selection.js +5 -0
- package/dist/es2019/utils.js +74 -0
- package/dist/es2019/version.json +5 -0
- package/dist/esm/actions.js +168 -0
- package/dist/esm/commands/clear-formatting.js +101 -0
- package/dist/esm/commands/text-formatting.js +134 -0
- package/dist/esm/commands/transform-to-code.js +61 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/plugin.js +125 -0
- package/dist/esm/pm-plugins/clear-formatting-keymap.js +10 -0
- package/dist/esm/pm-plugins/clear-formatting.js +28 -0
- package/dist/esm/pm-plugins/cursor.js +48 -0
- package/dist/esm/pm-plugins/input-rule.js +257 -0
- package/dist/esm/pm-plugins/keymap.js +43 -0
- package/dist/esm/pm-plugins/main.js +99 -0
- package/dist/esm/pm-plugins/plugin-key.js +2 -0
- package/dist/esm/pm-plugins/smart-input-rule.js +169 -0
- package/dist/esm/ui/Toolbar/constants.js +8 -0
- package/dist/esm/ui/Toolbar/dropdown-menu.js +75 -0
- package/dist/esm/ui/Toolbar/hooks/clear-formatting-icon.js +47 -0
- package/dist/esm/ui/Toolbar/hooks/formatting-icons.js +215 -0
- package/dist/esm/ui/Toolbar/hooks/menu-state.js +15 -0
- package/dist/esm/ui/Toolbar/hooks/responsive-toolbar-buttons.js +50 -0
- package/dist/esm/ui/Toolbar/index.js +174 -0
- package/dist/esm/ui/Toolbar/more-button.js +33 -0
- package/dist/esm/ui/Toolbar/single-toolbar-buttons.js +38 -0
- package/dist/esm/ui/Toolbar/types.js +10 -0
- package/dist/esm/utils/cell-selection.js +5 -0
- package/dist/esm/utils.js +75 -0
- package/dist/esm/version.json +5 -0
- package/dist/types/actions.d.ts +22 -0
- package/dist/types/commands/clear-formatting.d.ts +6 -0
- package/dist/types/commands/text-formatting.d.ts +5 -0
- package/dist/types/commands/transform-to-code.d.ts +2 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/plugin.d.ts +17 -0
- package/dist/types/pm-plugins/clear-formatting-keymap.d.ts +4 -0
- package/dist/types/pm-plugins/clear-formatting.d.ts +8 -0
- package/dist/types/pm-plugins/cursor.d.ts +3 -0
- package/dist/types/pm-plugins/input-rule.d.ts +23 -0
- package/dist/types/pm-plugins/keymap.d.ts +4 -0
- package/dist/types/pm-plugins/main.d.ts +7 -0
- package/dist/types/pm-plugins/plugin-key.d.ts +3 -0
- package/dist/types/pm-plugins/smart-input-rule.d.ts +3 -0
- package/dist/types/ui/Toolbar/constants.d.ts +6 -0
- package/dist/types/ui/Toolbar/dropdown-menu.d.ts +15 -0
- package/dist/types/ui/Toolbar/hooks/clear-formatting-icon.d.ts +7 -0
- package/dist/types/ui/Toolbar/hooks/formatting-icons.d.ts +14 -0
- package/dist/types/ui/Toolbar/hooks/menu-state.d.ts +1 -0
- package/dist/types/ui/Toolbar/hooks/responsive-toolbar-buttons.d.ts +20 -0
- package/dist/types/ui/Toolbar/index.d.ts +25 -0
- package/dist/types/ui/Toolbar/more-button.d.ts +14 -0
- package/dist/types/ui/Toolbar/single-toolbar-buttons.d.ts +10 -0
- package/dist/types/ui/Toolbar/types.d.ts +32 -0
- package/dist/types/utils/cell-selection.d.ts +3 -0
- package/dist/types/utils.d.ts +11 -0
- package/dist/types-ts4.5/actions.d.ts +22 -0
- package/dist/types-ts4.5/commands/clear-formatting.d.ts +6 -0
- package/dist/types-ts4.5/commands/text-formatting.d.ts +5 -0
- package/dist/types-ts4.5/commands/transform-to-code.d.ts +2 -0
- package/dist/types-ts4.5/index.d.ts +3 -0
- package/dist/types-ts4.5/plugin.d.ts +19 -0
- package/dist/types-ts4.5/pm-plugins/clear-formatting-keymap.d.ts +4 -0
- package/dist/types-ts4.5/pm-plugins/clear-formatting.d.ts +8 -0
- package/dist/types-ts4.5/pm-plugins/cursor.d.ts +3 -0
- package/dist/types-ts4.5/pm-plugins/input-rule.d.ts +23 -0
- package/dist/types-ts4.5/pm-plugins/keymap.d.ts +4 -0
- package/dist/types-ts4.5/pm-plugins/main.d.ts +7 -0
- package/dist/types-ts4.5/pm-plugins/plugin-key.d.ts +3 -0
- package/dist/types-ts4.5/pm-plugins/smart-input-rule.d.ts +3 -0
- package/dist/types-ts4.5/ui/Toolbar/constants.d.ts +6 -0
- package/dist/types-ts4.5/ui/Toolbar/dropdown-menu.d.ts +15 -0
- package/dist/types-ts4.5/ui/Toolbar/hooks/clear-formatting-icon.d.ts +7 -0
- package/dist/types-ts4.5/ui/Toolbar/hooks/formatting-icons.d.ts +14 -0
- package/dist/types-ts4.5/ui/Toolbar/hooks/menu-state.d.ts +5 -0
- package/dist/types-ts4.5/ui/Toolbar/hooks/responsive-toolbar-buttons.d.ts +20 -0
- package/dist/types-ts4.5/ui/Toolbar/index.d.ts +25 -0
- package/dist/types-ts4.5/ui/Toolbar/more-button.d.ts +14 -0
- package/dist/types-ts4.5/ui/Toolbar/single-toolbar-buttons.d.ts +10 -0
- package/dist/types-ts4.5/ui/Toolbar/types.d.ts +32 -0
- package/dist/types-ts4.5/utils/cell-selection.d.ts +3 -0
- package/dist/types-ts4.5/utils.d.ts +11 -0
- package/package.json +93 -0
- package/report.api.md +66 -0
- package/tmp/api-report-tmp.d.ts +39 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.plugin = void 0;
|
|
8
|
+
Object.defineProperty(exports, "pluginKey", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function get() {
|
|
11
|
+
return _pluginKey.pluginKey;
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
var _keymaps = require("@atlaskit/editor-common/keymaps");
|
|
15
|
+
var _mark = require("@atlaskit/editor-common/mark");
|
|
16
|
+
var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
|
|
17
|
+
var _utils = require("@atlaskit/editor-common/utils");
|
|
18
|
+
var _commands = require("@atlaskit/editor-prosemirror/commands");
|
|
19
|
+
var commands = _interopRequireWildcard(require("../commands/text-formatting"));
|
|
20
|
+
var _pluginKey = require("./plugin-key");
|
|
21
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
22
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
23
|
+
// TODO: Ideally this should use the custom toggleMark function from @atlaskit/editor-common so we also disable the options when selecting inline nodes but it disables the marks when the selection is empty at this point in time which is undesirable
|
|
24
|
+
// import { toggleMark } from '@atlaskit/editor-common/mark';
|
|
25
|
+
|
|
26
|
+
var getTextFormattingState = function getTextFormattingState(editorState, editorAnalyticsAPI) {
|
|
27
|
+
var _editorState$schema$m = editorState.schema.marks,
|
|
28
|
+
em = _editorState$schema$m.em,
|
|
29
|
+
code = _editorState$schema$m.code,
|
|
30
|
+
strike = _editorState$schema$m.strike,
|
|
31
|
+
strong = _editorState$schema$m.strong,
|
|
32
|
+
subsup = _editorState$schema$m.subsup,
|
|
33
|
+
underline = _editorState$schema$m.underline;
|
|
34
|
+
var state = {};
|
|
35
|
+
if (code) {
|
|
36
|
+
state.codeActive = (0, _mark.anyMarkActive)(editorState, code.create());
|
|
37
|
+
state.codeDisabled = !(0, _commands.toggleMark)(code)(editorState);
|
|
38
|
+
}
|
|
39
|
+
if (em) {
|
|
40
|
+
state.emActive = (0, _mark.anyMarkActive)(editorState, em);
|
|
41
|
+
state.emDisabled = state.codeActive ? true : !(0, _commands.toggleMark)(em)(editorState);
|
|
42
|
+
}
|
|
43
|
+
if (strike) {
|
|
44
|
+
state.strikeActive = (0, _mark.anyMarkActive)(editorState, strike);
|
|
45
|
+
state.strikeDisabled = state.codeActive ? true : !(0, _commands.toggleMark)(strike)(editorState);
|
|
46
|
+
}
|
|
47
|
+
if (strong) {
|
|
48
|
+
state.strongActive = (0, _mark.anyMarkActive)(editorState, strong);
|
|
49
|
+
state.strongDisabled = state.codeActive ? true : !(0, _commands.toggleMark)(strong)(editorState);
|
|
50
|
+
}
|
|
51
|
+
if (subsup) {
|
|
52
|
+
var subMark = subsup.create({
|
|
53
|
+
type: 'sub'
|
|
54
|
+
});
|
|
55
|
+
var supMark = subsup.create({
|
|
56
|
+
type: 'sup'
|
|
57
|
+
});
|
|
58
|
+
state.subscriptActive = (0, _mark.anyMarkActive)(editorState, subMark);
|
|
59
|
+
state.subscriptDisabled = state.codeActive ? true : !(0, _commands.toggleMark)(subsup, {
|
|
60
|
+
type: 'sub'
|
|
61
|
+
})(editorState);
|
|
62
|
+
state.superscriptActive = (0, _mark.anyMarkActive)(editorState, supMark);
|
|
63
|
+
state.superscriptDisabled = state.codeActive ? true : !(0, _commands.toggleMark)(subsup, {
|
|
64
|
+
type: 'sup'
|
|
65
|
+
})(editorState);
|
|
66
|
+
}
|
|
67
|
+
if (underline) {
|
|
68
|
+
state.underlineActive = (0, _mark.anyMarkActive)(editorState, underline);
|
|
69
|
+
state.underlineDisabled = state.codeActive ? true : !(0, _commands.toggleMark)(underline)(editorState);
|
|
70
|
+
}
|
|
71
|
+
return state;
|
|
72
|
+
};
|
|
73
|
+
var plugin = function plugin(dispatch, editorAnalyticsAPI) {
|
|
74
|
+
return new _safePlugin.SafePlugin({
|
|
75
|
+
state: {
|
|
76
|
+
init: function init(_config, state) {
|
|
77
|
+
return getTextFormattingState(state, editorAnalyticsAPI);
|
|
78
|
+
},
|
|
79
|
+
apply: function apply(_tr, pluginState, _oldState, newState) {
|
|
80
|
+
var state = getTextFormattingState(newState, editorAnalyticsAPI);
|
|
81
|
+
if (!(0, _utils.shallowEqual)(pluginState, state)) {
|
|
82
|
+
dispatch(_pluginKey.pluginKey, state);
|
|
83
|
+
return state;
|
|
84
|
+
}
|
|
85
|
+
return pluginState;
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
key: _pluginKey.pluginKey,
|
|
89
|
+
props: {
|
|
90
|
+
handleKeyDown: function handleKeyDown(view, event) {
|
|
91
|
+
var state = view.state,
|
|
92
|
+
dispatch = view.dispatch;
|
|
93
|
+
if (event.key === _keymaps.moveRight.common && !event.metaKey) {
|
|
94
|
+
return commands.moveRight()(state, dispatch);
|
|
95
|
+
} else if (event.key === _keymaps.moveLeft.common && !event.metaKey) {
|
|
96
|
+
return commands.moveLeft()(state, dispatch);
|
|
97
|
+
}
|
|
98
|
+
return false;
|
|
99
|
+
},
|
|
100
|
+
handleTextInput: function handleTextInput(view, from, to, text) {
|
|
101
|
+
var state = view.state,
|
|
102
|
+
dispatch = view.dispatch;
|
|
103
|
+
var schema = state.schema,
|
|
104
|
+
parentNodeType = state.selection.$from.parent.type;
|
|
105
|
+
if (parentNodeType.allowsMarkType(schema.marks.code)) {
|
|
106
|
+
return (0, commands.createInlineCodeFromTextInputWithAnalytics)(editorAnalyticsAPI)(from, to, text)(state, dispatch);
|
|
107
|
+
}
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
exports.plugin = plugin;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.pluginKey = void 0;
|
|
7
|
+
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
8
|
+
var pluginKey = new _state.PluginKey('textFormatting');
|
|
9
|
+
exports.pluginKey = pluginKey;
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
12
|
+
var _utils = require("@atlaskit/editor-common/utils");
|
|
13
|
+
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
14
|
+
var _prosemirrorInputRules = require("@atlaskit/prosemirror-input-rules");
|
|
15
|
+
/**
|
|
16
|
+
* Creates an InputRuleHandler that will match on a regular expression of the
|
|
17
|
+
* form `(prefix, content, suffix?)`, and replace it with some given text,
|
|
18
|
+
* maintaining prefix and suffix around the replacement.
|
|
19
|
+
*
|
|
20
|
+
* @param text text to replace with
|
|
21
|
+
*/
|
|
22
|
+
function replaceTextUsingCaptureGroup(text) {
|
|
23
|
+
return function (state, match, start, end) {
|
|
24
|
+
var _match = (0, _slicedToArray2.default)(match, 4),
|
|
25
|
+
prefix = _match[1],
|
|
26
|
+
suffix = _match[3];
|
|
27
|
+
var replacement = text + (suffix || '');
|
|
28
|
+
var tr = state.tr,
|
|
29
|
+
$to = state.selection.$to;
|
|
30
|
+
var startPos = start + (prefix || '').length;
|
|
31
|
+
var safePos = Math.min(
|
|
32
|
+
// I know it is almost impossible to have a negative value at this point.
|
|
33
|
+
// But, this is JS #trustnoone
|
|
34
|
+
Math.max(startPos, 0), end);
|
|
35
|
+
tr.replaceWith(safePos, end, state.schema.text(replacement, $to.marks()));
|
|
36
|
+
tr.setSelection(_state.Selection.near(tr.doc.resolve(tr.selection.to)));
|
|
37
|
+
return tr;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function createReplacementRule(to, from) {
|
|
41
|
+
return (0, _prosemirrorInputRules.createRule)(from, replaceTextUsingCaptureGroup(to));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Create replacement rules fiven a replacement map
|
|
46
|
+
* @param replMap - Replacement map
|
|
47
|
+
* @param trackingEventName - Analytics V2 tracking event name
|
|
48
|
+
* @param replacementRuleWithAnalytics - Analytics GAS V3 middleware for replacement and rules.
|
|
49
|
+
*/
|
|
50
|
+
function createReplacementRules(replMap, replacementRuleWithAnalytics) {
|
|
51
|
+
return Object.keys(replMap).map(function (replacement) {
|
|
52
|
+
var regex = replMap[replacement];
|
|
53
|
+
var rule = createReplacementRule(replacement, regex);
|
|
54
|
+
if (replacementRuleWithAnalytics) {
|
|
55
|
+
return replacementRuleWithAnalytics(replacement)(rule);
|
|
56
|
+
}
|
|
57
|
+
return rule;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// We don't agressively upgrade single quotes to smart quotes because
|
|
62
|
+
// they may clash with an emoji. Only do that when we have a matching
|
|
63
|
+
// single quote, or a contraction.
|
|
64
|
+
function createSingleQuotesRules() {
|
|
65
|
+
return [
|
|
66
|
+
// wrapped text
|
|
67
|
+
(0, _prosemirrorInputRules.createRule)(/(\s|^)'(\S+.*\S+)'$/, function (state, match, start, end) {
|
|
68
|
+
var OPEN_SMART_QUOTE_CHAR = '‘';
|
|
69
|
+
var CLOSED_SMART_QUOTE_CHAR = '’';
|
|
70
|
+
var _match2 = (0, _slicedToArray2.default)(match, 3),
|
|
71
|
+
spacing = _match2[1],
|
|
72
|
+
innerContent = _match2[2];
|
|
73
|
+
// Edge case where match begins with some spacing. We need to add
|
|
74
|
+
// it back to the document
|
|
75
|
+
var openQuoteReplacement = spacing + OPEN_SMART_QUOTE_CHAR;
|
|
76
|
+
// End is not always where the closed quote is, edge case exists
|
|
77
|
+
// when there is spacing after the closed quote. We need to
|
|
78
|
+
// determine position of closed quote from the start position.
|
|
79
|
+
var positionOfClosedQuote = start + openQuoteReplacement.length + innerContent.length;
|
|
80
|
+
return state.tr.insertText(CLOSED_SMART_QUOTE_CHAR, positionOfClosedQuote, end).insertText(openQuoteReplacement, start, start + openQuoteReplacement.length);
|
|
81
|
+
}),
|
|
82
|
+
// apostrophe
|
|
83
|
+
createReplacementRule('’', /(\w+)(')(\w+)$/)];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Get replacement rules related to product
|
|
88
|
+
*/
|
|
89
|
+
function getProductRules(editorAnalyticsAPI) {
|
|
90
|
+
var productRuleWithAnalytics = function productRuleWithAnalytics(product) {
|
|
91
|
+
return (0, _utils.inputRuleWithAnalytics)(function (_, match) {
|
|
92
|
+
return {
|
|
93
|
+
action: _analytics.ACTION.SUBSTITUTED,
|
|
94
|
+
actionSubject: _analytics.ACTION_SUBJECT.TEXT,
|
|
95
|
+
actionSubjectId: _analytics.ACTION_SUBJECT_ID.PRODUCT_NAME,
|
|
96
|
+
eventType: _analytics.EVENT_TYPE.TRACK,
|
|
97
|
+
attributes: {
|
|
98
|
+
product: product,
|
|
99
|
+
originalSpelling: match[2]
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
}, editorAnalyticsAPI);
|
|
103
|
+
};
|
|
104
|
+
return createReplacementRules({
|
|
105
|
+
Atlassian: /(\s+|^)(atlassian)(\s)$/,
|
|
106
|
+
Jira: /(\s+|^)(jira|JIRA)(\s)$/,
|
|
107
|
+
Bitbucket: /(\s+|^)(bitbucket|BitBucket)(\s)$/,
|
|
108
|
+
Hipchat: /(\s+|^)(hipchat|HipChat)(\s)$/,
|
|
109
|
+
Trello: /(\s+|^)(trello)(\s)$/
|
|
110
|
+
}, productRuleWithAnalytics);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Get replacement rules related to symbol
|
|
115
|
+
*/
|
|
116
|
+
function getSymbolRules(editorAnalyticsAPI) {
|
|
117
|
+
var symbolToString = {
|
|
118
|
+
'→': _analytics.SYMBOL.ARROW_RIGHT,
|
|
119
|
+
'←': _analytics.SYMBOL.ARROW_LEFT,
|
|
120
|
+
'↔︎': _analytics.SYMBOL.ARROW_DOUBLE
|
|
121
|
+
};
|
|
122
|
+
var symbolRuleWithAnalytics = function symbolRuleWithAnalytics(symbol) {
|
|
123
|
+
return (0, _utils.inputRuleWithAnalytics)({
|
|
124
|
+
action: _analytics.ACTION.SUBSTITUTED,
|
|
125
|
+
actionSubject: _analytics.ACTION_SUBJECT.TEXT,
|
|
126
|
+
actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYMBOL,
|
|
127
|
+
eventType: _analytics.EVENT_TYPE.TRACK,
|
|
128
|
+
attributes: {
|
|
129
|
+
symbol: symbolToString[symbol]
|
|
130
|
+
}
|
|
131
|
+
}, editorAnalyticsAPI);
|
|
132
|
+
};
|
|
133
|
+
return createReplacementRules({
|
|
134
|
+
'→': /(\s+|^)(--?>)(\s)$/,
|
|
135
|
+
'←': /(\s+|^)(<--?)(\s)$/,
|
|
136
|
+
'↔︎': /(\s+|^)(<->?)(\s)$/
|
|
137
|
+
}, symbolRuleWithAnalytics);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Get replacement rules related to punctuation
|
|
142
|
+
*/
|
|
143
|
+
function getPunctuationRules(editorAnalyticsAPI) {
|
|
144
|
+
var punctuationToString = (0, _defineProperty2.default)({
|
|
145
|
+
'–': _analytics.PUNC.DASH,
|
|
146
|
+
'…': _analytics.PUNC.ELLIPSIS,
|
|
147
|
+
'”': _analytics.PUNC.QUOTE_DOUBLE
|
|
148
|
+
}, _analytics.PUNC.QUOTE_SINGLE, _analytics.PUNC.QUOTE_SINGLE);
|
|
149
|
+
var punctuationRuleWithAnalytics = function punctuationRuleWithAnalytics(punctuation) {
|
|
150
|
+
return (0, _utils.inputRuleWithAnalytics)({
|
|
151
|
+
action: _analytics.ACTION.SUBSTITUTED,
|
|
152
|
+
actionSubject: _analytics.ACTION_SUBJECT.TEXT,
|
|
153
|
+
actionSubjectId: _analytics.ACTION_SUBJECT_ID.PUNC,
|
|
154
|
+
eventType: _analytics.EVENT_TYPE.TRACK,
|
|
155
|
+
attributes: {
|
|
156
|
+
punctuation: punctuationToString[punctuation]
|
|
157
|
+
}
|
|
158
|
+
}, editorAnalyticsAPI);
|
|
159
|
+
};
|
|
160
|
+
var dashEllipsisRules = createReplacementRules({
|
|
161
|
+
'–': /(\s+|^)(--)(\s)$/,
|
|
162
|
+
'…': /()(\.\.\.)$/
|
|
163
|
+
}, punctuationRuleWithAnalytics);
|
|
164
|
+
var doubleQuoteRules = createReplacementRules({
|
|
165
|
+
'“': /((?:^|[\s\{\[\(\<'"\u2018\u201C]))(")$/,
|
|
166
|
+
'”': /"$/
|
|
167
|
+
}, punctuationRuleWithAnalytics);
|
|
168
|
+
var singleQuoteRules = createSingleQuotesRules();
|
|
169
|
+
return [].concat((0, _toConsumableArray2.default)(dashEllipsisRules), (0, _toConsumableArray2.default)(doubleQuoteRules), (0, _toConsumableArray2.default)(singleQuoteRules.map(function (rule) {
|
|
170
|
+
return punctuationRuleWithAnalytics(_analytics.PUNC.QUOTE_SINGLE)(rule);
|
|
171
|
+
})));
|
|
172
|
+
}
|
|
173
|
+
var _default = function _default(editorAnalyticsAPI) {
|
|
174
|
+
return (0, _prosemirrorInputRules.createPlugin)('text-formatting:smart-input', [].concat((0, _toConsumableArray2.default)(getProductRules(editorAnalyticsAPI)), (0, _toConsumableArray2.default)(getSymbolRules(editorAnalyticsAPI)), (0, _toConsumableArray2.default)(getPunctuationRules(editorAnalyticsAPI))));
|
|
175
|
+
};
|
|
176
|
+
exports.default = _default;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.ResponsiveCustomMenu = exports.ResponsiveCustomButtonToolbar = exports.DefaultButtonsToolbar = exports.DefaultButtonsMenu = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _types = require("@atlaskit/editor-common/types");
|
|
10
|
+
var _types2 = require("./types");
|
|
11
|
+
var _ResponsiveCustomButt, _ResponsiveCustomMenu;
|
|
12
|
+
var DefaultButtonsToolbar = [_types2.IconTypes.strong, _types2.IconTypes.em];
|
|
13
|
+
exports.DefaultButtonsToolbar = DefaultButtonsToolbar;
|
|
14
|
+
var DefaultButtonsMenu = [_types2.IconTypes.underline, _types2.IconTypes.strike, _types2.IconTypes.code, _types2.IconTypes.subscript, _types2.IconTypes.superscript];
|
|
15
|
+
exports.DefaultButtonsMenu = DefaultButtonsMenu;
|
|
16
|
+
var ResponsiveCustomButtonToolbar = (_ResponsiveCustomButt = {}, (0, _defineProperty2.default)(_ResponsiveCustomButt, _types.ToolbarSize.XXL, DefaultButtonsToolbar), (0, _defineProperty2.default)(_ResponsiveCustomButt, _types.ToolbarSize.XL, DefaultButtonsToolbar), (0, _defineProperty2.default)(_ResponsiveCustomButt, _types.ToolbarSize.L, DefaultButtonsToolbar), (0, _defineProperty2.default)(_ResponsiveCustomButt, _types.ToolbarSize.M, []), (0, _defineProperty2.default)(_ResponsiveCustomButt, _types.ToolbarSize.S, []), (0, _defineProperty2.default)(_ResponsiveCustomButt, _types.ToolbarSize.XXXS, []), _ResponsiveCustomButt);
|
|
17
|
+
exports.ResponsiveCustomButtonToolbar = ResponsiveCustomButtonToolbar;
|
|
18
|
+
var ResponsiveCustomMenu = (_ResponsiveCustomMenu = {}, (0, _defineProperty2.default)(_ResponsiveCustomMenu, _types.ToolbarSize.XXL, DefaultButtonsMenu), (0, _defineProperty2.default)(_ResponsiveCustomMenu, _types.ToolbarSize.XL, DefaultButtonsMenu), (0, _defineProperty2.default)(_ResponsiveCustomMenu, _types.ToolbarSize.L, DefaultButtonsMenu), (0, _defineProperty2.default)(_ResponsiveCustomMenu, _types.ToolbarSize.M, [_types2.IconTypes.strong, _types2.IconTypes.em].concat(DefaultButtonsMenu)), (0, _defineProperty2.default)(_ResponsiveCustomMenu, _types.ToolbarSize.S, [_types2.IconTypes.strong, _types2.IconTypes.em].concat(DefaultButtonsMenu)), (0, _defineProperty2.default)(_ResponsiveCustomMenu, _types.ToolbarSize.XXXS, [_types2.IconTypes.strong, _types2.IconTypes.em].concat(DefaultButtonsMenu)), _ResponsiveCustomMenu);
|
|
19
|
+
exports.ResponsiveCustomMenu = ResponsiveCustomMenu;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.FormattingTextDropdownMenu = void 0;
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _uiMenu = require("@atlaskit/editor-common/ui-menu");
|
|
12
|
+
var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
|
|
13
|
+
var _menuState = require("./hooks/menu-state");
|
|
14
|
+
var _moreButton = require("./more-button");
|
|
15
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
16
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
17
|
+
var FormattingTextDropdownMenu = /*#__PURE__*/_react.default.memo(function (_ref) {
|
|
18
|
+
var editorView = _ref.editorView,
|
|
19
|
+
moreButtonLabel = _ref.moreButtonLabel,
|
|
20
|
+
isReducedSpacing = _ref.isReducedSpacing,
|
|
21
|
+
items = _ref.items,
|
|
22
|
+
hasFormattingActive = _ref.hasFormattingActive,
|
|
23
|
+
popupsBoundariesElement = _ref.popupsBoundariesElement,
|
|
24
|
+
popupsMountPoint = _ref.popupsMountPoint,
|
|
25
|
+
popupsScrollableElement = _ref.popupsScrollableElement;
|
|
26
|
+
var _useMenuState = (0, _menuState.useMenuState)(),
|
|
27
|
+
_useMenuState2 = (0, _slicedToArray2.default)(_useMenuState, 3),
|
|
28
|
+
isMenuOpen = _useMenuState2[0],
|
|
29
|
+
toggleMenu = _useMenuState2[1],
|
|
30
|
+
closeMenu = _useMenuState2[2];
|
|
31
|
+
var _useState = (0, _react.useState)(false),
|
|
32
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
33
|
+
isOpenedByKeyboard = _useState2[0],
|
|
34
|
+
setIsOpenedByKeyboard = _useState2[1];
|
|
35
|
+
var group = (0, _react.useMemo)(function () {
|
|
36
|
+
return [{
|
|
37
|
+
items: items
|
|
38
|
+
}];
|
|
39
|
+
}, [items]);
|
|
40
|
+
var onItemActivated = (0, _react.useCallback)(function (_ref2) {
|
|
41
|
+
var item = _ref2.item,
|
|
42
|
+
_ref2$shouldCloseMenu = _ref2.shouldCloseMenu,
|
|
43
|
+
shouldCloseMenu = _ref2$shouldCloseMenu === void 0 ? true : _ref2$shouldCloseMenu;
|
|
44
|
+
item.command(editorView.state, editorView.dispatch);
|
|
45
|
+
if (shouldCloseMenu) {
|
|
46
|
+
closeMenu();
|
|
47
|
+
}
|
|
48
|
+
}, [editorView.state, editorView.dispatch, closeMenu]);
|
|
49
|
+
return /*#__PURE__*/_react.default.createElement(_uiMenu.DropdownMenuWithKeyboardNavigation, {
|
|
50
|
+
mountTo: popupsMountPoint,
|
|
51
|
+
onOpenChange: closeMenu,
|
|
52
|
+
boundariesElement: popupsBoundariesElement,
|
|
53
|
+
scrollableElement: popupsScrollableElement,
|
|
54
|
+
onItemActivated: onItemActivated,
|
|
55
|
+
isOpen: isMenuOpen,
|
|
56
|
+
items: group,
|
|
57
|
+
zIndex: _editorSharedStyles.akEditorMenuZIndex,
|
|
58
|
+
fitHeight: 188,
|
|
59
|
+
fitWidth: 136,
|
|
60
|
+
shouldUseDefaultRole: true,
|
|
61
|
+
shouldFocusFirstItem: function shouldFocusFirstItem() {
|
|
62
|
+
if (isOpenedByKeyboard) {
|
|
63
|
+
setIsOpenedByKeyboard(false);
|
|
64
|
+
}
|
|
65
|
+
return isOpenedByKeyboard;
|
|
66
|
+
}
|
|
67
|
+
}, /*#__PURE__*/_react.default.createElement(_moreButton.MoreButton, {
|
|
68
|
+
isSelected: isMenuOpen || hasFormattingActive,
|
|
69
|
+
label: moreButtonLabel,
|
|
70
|
+
isReducedSpacing: isReducedSpacing,
|
|
71
|
+
isDisabled: false,
|
|
72
|
+
onClick: function onClick() {
|
|
73
|
+
toggleMenu();
|
|
74
|
+
setIsOpenedByKeyboard(false);
|
|
75
|
+
},
|
|
76
|
+
onKeyDown: function onKeyDown(event) {
|
|
77
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
78
|
+
event.preventDefault();
|
|
79
|
+
toggleMenu();
|
|
80
|
+
setIsOpenedByKeyboard(true);
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"aria-expanded": isMenuOpen
|
|
84
|
+
}));
|
|
85
|
+
});
|
|
86
|
+
exports.FormattingTextDropdownMenu = FormattingTextDropdownMenu;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useClearIcon = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _react2 = require("@emotion/react");
|
|
9
|
+
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
10
|
+
var _keymaps = require("@atlaskit/editor-common/keymaps");
|
|
11
|
+
var _messages = require("@atlaskit/editor-common/messages");
|
|
12
|
+
var _shortcut = require("@atlaskit/editor-shared-styles/shortcut");
|
|
13
|
+
var _clearFormatting = require("../../../commands/clear-formatting");
|
|
14
|
+
var _clearFormatting2 = require("../../../pm-plugins/clear-formatting");
|
|
15
|
+
/** @jsx jsx */
|
|
16
|
+
|
|
17
|
+
var useClearFormattingPluginState = function useClearFormattingPluginState(editorState) {
|
|
18
|
+
return (0, _react.useMemo)(function () {
|
|
19
|
+
return _clearFormatting2.pluginKey.getState(editorState);
|
|
20
|
+
}, [editorState]);
|
|
21
|
+
};
|
|
22
|
+
var useClearIcon = function useClearIcon(_ref) {
|
|
23
|
+
var intl = _ref.intl,
|
|
24
|
+
editorState = _ref.editorState,
|
|
25
|
+
editorAnalyticsAPI = _ref.editorAnalyticsAPI;
|
|
26
|
+
var pluginState = useClearFormattingPluginState(editorState);
|
|
27
|
+
var isPluginAvailable = Boolean(pluginState);
|
|
28
|
+
var formattingIsPresent = Boolean(pluginState === null || pluginState === void 0 ? void 0 : pluginState.formattingIsPresent);
|
|
29
|
+
var clearFormattingLabel = intl.formatMessage(_messages.toolbarMessages.clearFormatting);
|
|
30
|
+
var clearFormattingToolbar = (0, _react.useCallback)(function (state, dispatch) {
|
|
31
|
+
return (0, _clearFormatting.clearFormattingWithAnalytics)(_analytics.INPUT_METHOD.TOOLBAR, editorAnalyticsAPI)(state, dispatch);
|
|
32
|
+
}, [editorAnalyticsAPI]);
|
|
33
|
+
return (0, _react.useMemo)(function () {
|
|
34
|
+
if (!isPluginAvailable) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
key: 'clearFormatting',
|
|
39
|
+
command: clearFormattingToolbar,
|
|
40
|
+
content: clearFormattingLabel,
|
|
41
|
+
elemAfter:
|
|
42
|
+
// eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage
|
|
43
|
+
(0, _react2.jsx)("div", {
|
|
44
|
+
css: _shortcut.shortcutStyle
|
|
45
|
+
}, (0, _keymaps.tooltip)(_keymaps.clearFormatting)),
|
|
46
|
+
value: {
|
|
47
|
+
name: 'clearFormatting'
|
|
48
|
+
},
|
|
49
|
+
isActive: false,
|
|
50
|
+
isDisabled: !formattingIsPresent,
|
|
51
|
+
'aria-label': _keymaps.clearFormatting ? (0, _keymaps.tooltip)(_keymaps.clearFormatting, String(clearFormattingLabel)) : String(clearFormattingLabel)
|
|
52
|
+
};
|
|
53
|
+
}, [isPluginAvailable, clearFormattingToolbar, clearFormattingLabel, formattingIsPresent]);
|
|
54
|
+
};
|
|
55
|
+
exports.useClearIcon = useClearIcon;
|