@atlaskit/editor-plugin-paste-options-toolbar 0.2.2 → 0.2.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/editor-plugin-paste-options-toolbar
2
2
 
3
+ ## 0.2.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [#42152](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42152) [`0097171c562`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0097171c562) - ED-19766-collab: Adding collab support for paste options toolbar for confluence
8
+
3
9
  ## 0.2.2
4
10
 
5
11
  ### Patch Changes
@@ -26,9 +26,13 @@ var showToolbar = exports.showToolbar = function showToolbar(lastContentPasted,
26
26
  };
27
27
  return (0, _pluginFactory.createCommand)(commandAction);
28
28
  };
29
- var changeToPlainText = exports.changeToPlainText = function changeToPlainText(pasteStartPos, plaintext) {
29
+ var changeToPlainText = exports.changeToPlainText = function changeToPlainText() {
30
30
  var plaintextTransformer = function plaintextTransformer(tr, state) {
31
- return (0, _formatHandlers.formatPlainText)(state, pasteStartPos, plaintext);
31
+ var pluginState = _types.pasteOptionsPluginKey.getState(state);
32
+ if (pluginState.selectedOption === _types.ToolbarDropdownOption.PlainText) {
33
+ return tr;
34
+ }
35
+ return (0, _formatHandlers.formatPlainText)(tr, pluginState);
32
36
  };
33
37
  var commandAction = function commandAction(editorState) {
34
38
  return {
@@ -41,7 +45,7 @@ var changeToPlainText = exports.changeToPlainText = function changeToPlainText(p
41
45
  return (0, _pluginFactory.createCommand)(commandAction, plaintextTransformer);
42
46
  };
43
47
  var changeToPlainTextWithAnalytics = exports.changeToPlainTextWithAnalytics = function changeToPlainTextWithAnalytics(editorAnalyticsAPI, sliceSize) {
44
- return function (pasteStartPos, plaintext) {
48
+ return function () {
45
49
  return (0, _editorAnalytics.withAnalytics)(editorAnalyticsAPI, {
46
50
  action: _analytics.ACTION.PASTED,
47
51
  actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
@@ -52,16 +56,19 @@ var changeToPlainTextWithAnalytics = exports.changeToPlainTextWithAnalytics = fu
52
56
  content: _analytics.PasteContents.text,
53
57
  pasteSize: sliceSize
54
58
  }
55
- })(changeToPlainText(pasteStartPos, plaintext));
59
+ })(changeToPlainText());
56
60
  };
57
61
  };
58
62
  var dropdownClickHandler = exports.dropdownClickHandler = function dropdownClickHandler() {
59
63
  return highlightContent();
60
64
  };
61
- var changeToRichText = exports.changeToRichText = function changeToRichText(pasteStartPos) {
65
+ var changeToRichText = exports.changeToRichText = function changeToRichText() {
62
66
  var transformer = function transformer(tr, state) {
63
- var pastePluginState = _types.pasteOptionsPluginKey.getState(state);
64
- return (0, _formatHandlers.formatRichText)(state, pasteStartPos, pastePluginState.richTextSlice);
67
+ var pluginState = _types.pasteOptionsPluginKey.getState(state);
68
+ if (pluginState.selectedOption === _types.ToolbarDropdownOption.RichText) {
69
+ return tr;
70
+ }
71
+ return (0, _formatHandlers.formatRichText)(tr, pluginState);
65
72
  };
66
73
  var commandAction = function commandAction(editorState) {
67
74
  return {
@@ -74,7 +81,7 @@ var changeToRichText = exports.changeToRichText = function changeToRichText(past
74
81
  return (0, _pluginFactory.createCommand)(commandAction, transformer);
75
82
  };
76
83
  var changeToRichTextWithAnalytics = exports.changeToRichTextWithAnalytics = function changeToRichTextWithAnalytics(editorAnalyticsAPI) {
77
- return function (pasteStartPos) {
84
+ return function () {
78
85
  var payloadCallback = function payloadCallback(state) {
79
86
  var _pastePluginState$ric;
80
87
  var pastePluginState = _types.pasteOptionsPluginKey.getState(state);
@@ -90,12 +97,16 @@ var changeToRichTextWithAnalytics = exports.changeToRichTextWithAnalytics = func
90
97
  }
91
98
  };
92
99
  };
93
- return (0, _editorAnalytics.withAnalytics)(editorAnalyticsAPI, payloadCallback)(changeToRichText(pasteStartPos));
100
+ return (0, _editorAnalytics.withAnalytics)(editorAnalyticsAPI, payloadCallback)(changeToRichText());
94
101
  };
95
102
  };
96
- var changeToMarkDown = exports.changeToMarkDown = function changeToMarkDown(pasteStartPos, plaintext) {
103
+ var changeToMarkDown = exports.changeToMarkDown = function changeToMarkDown() {
97
104
  var markdownTransformer = function markdownTransformer(tr, state) {
98
- return (0, _formatHandlers.formatMarkdown)(state, pasteStartPos, plaintext);
105
+ var pluginState = _types.pasteOptionsPluginKey.getState(state);
106
+ if (pluginState.selectedOption === _types.ToolbarDropdownOption.Markdown) {
107
+ return tr;
108
+ }
109
+ return (0, _formatHandlers.formatMarkdown)(tr, pluginState);
99
110
  };
100
111
  var commandAction = function commandAction(editorState) {
101
112
  return {
@@ -108,7 +119,7 @@ var changeToMarkDown = exports.changeToMarkDown = function changeToMarkDown(past
108
119
  return (0, _pluginFactory.createCommand)(commandAction, markdownTransformer);
109
120
  };
110
121
  var changeToMarkdownWithAnalytics = exports.changeToMarkdownWithAnalytics = function changeToMarkdownWithAnalytics(editorAnalyticsAPI, sliceSize) {
111
- return function (pasteStartPos, plaintext) {
122
+ return function () {
112
123
  return (0, _editorAnalytics.withAnalytics)(editorAnalyticsAPI, {
113
124
  action: _analytics.ACTION.PASTED,
114
125
  actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
@@ -119,7 +130,7 @@ var changeToMarkdownWithAnalytics = exports.changeToMarkdownWithAnalytics = func
119
130
  content: _analytics.PasteContents.text,
120
131
  pasteSize: sliceSize
121
132
  }
122
- })(changeToMarkDown(pasteStartPos, plaintext));
133
+ })(changeToMarkDown());
123
134
  };
124
135
  };
125
136
  var highlightContent = exports.highlightContent = function highlightContent() {
@@ -29,18 +29,14 @@ var pasteOptionsToolbarPlugin = exports.pasteOptionsToolbarPlugin = function pas
29
29
  pluginsOptions: {
30
30
  floatingToolbar: function floatingToolbar(state, intl) {
31
31
  var pastePluginState = _types.pasteOptionsPluginKey.getState(state);
32
- var _ref3 = pastePluginState || {},
33
- showToolbar = _ref3.showToolbar,
34
- pasteStartPos = _ref3.pasteStartPos,
35
- plaintext = _ref3.plaintext;
36
- if (showToolbar) {
37
- return (0, _toolbar.buildToolbar)(state, pasteStartPos, plaintext, intl, editorAnalyticsAPI);
32
+ if (pastePluginState.showToolbar) {
33
+ return (0, _toolbar.buildToolbar)(state, intl, editorAnalyticsAPI);
38
34
  }
39
35
  return;
40
36
  }
41
37
  },
42
- usePluginHook: function usePluginHook(_ref4) {
43
- var editorView = _ref4.editorView;
38
+ usePluginHook: function usePluginHook(_ref3) {
39
+ var editorView = _ref3.editorView;
44
40
  var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['paste']),
45
41
  pasteState = _useSharedPluginState.pasteState;
46
42
  var lastContentPasted = pasteState === null || pasteState === void 0 ? void 0 : pasteState.lastContentPasted;
@@ -3,11 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.TEXT_HIGHLIGHT_CLASS = exports.PASTE_TOOLBAR_MENU_ID = exports.PASTE_TOOLBAR_ITEM_CLASS = exports.PASTE_TOOLBAR_CLASS = exports.PASTE_OPTIONS_TEST_ID = exports.PASTE_HIGHLIGHT_DECORATION_KEY = exports.EDITOR_WRAPPER_CLASS = void 0;
6
+ exports.TEXT_HIGHLIGHT_CLASS = exports.PASTE_TOOLBAR_MENU_ID = exports.PASTE_TOOLBAR_ITEM_CLASS = exports.PASTE_TOOLBAR_CLASS = exports.PASTE_OPTIONS_TEST_ID = exports.PASTE_OPTIONS_META_ID = exports.PASTE_HIGHLIGHT_DECORATION_KEY = exports.EDITOR_WRAPPER_CLASS = void 0;
7
7
  var PASTE_TOOLBAR_CLASS = exports.PASTE_TOOLBAR_CLASS = 'ak-editor-paste-toolbar';
8
8
  var PASTE_TOOLBAR_MENU_ID = exports.PASTE_TOOLBAR_MENU_ID = 'ak-editor-paste-toolbar-item-dropdownList';
9
9
  var TEXT_HIGHLIGHT_CLASS = exports.TEXT_HIGHLIGHT_CLASS = 'text-highlight';
10
10
  var PASTE_HIGHLIGHT_DECORATION_KEY = exports.PASTE_HIGHLIGHT_DECORATION_KEY = 'paste-highlight-decoration-key';
11
11
  var PASTE_TOOLBAR_ITEM_CLASS = exports.PASTE_TOOLBAR_ITEM_CLASS = 'ak-editor-paste-toolbar-item';
12
12
  var EDITOR_WRAPPER_CLASS = exports.EDITOR_WRAPPER_CLASS = 'akEditor';
13
- var PASTE_OPTIONS_TEST_ID = exports.PASTE_OPTIONS_TEST_ID = 'paste-options-testid';
13
+ var PASTE_OPTIONS_TEST_ID = exports.PASTE_OPTIONS_TEST_ID = 'paste-options-testid';
14
+ var PASTE_OPTIONS_META_ID = exports.PASTE_OPTIONS_META_ID = 'paste-options$';
@@ -7,13 +7,36 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.getPluginState = exports.createPluginState = exports.createCommand = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _utils = require("@atlaskit/editor-common/utils");
10
+ var _actions = require("../actions");
10
11
  var _reducer = require("../reducer");
11
12
  var _types = require("../types");
13
+ var _constants = require("./constants");
12
14
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
15
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
16
  var _pluginFactory = (0, _utils.pluginFactory)(_types.pasteOptionsPluginKey, _reducer.reducer, {
15
17
  mapping: function mapping(tr, pluginState) {
16
- return pluginState;
18
+ if (!tr.docChanged || !pluginState.showToolbar) {
19
+ return pluginState;
20
+ }
21
+ var oldPasteStartPos = pluginState.pasteStartPos;
22
+ var oldPasteEndPos = pluginState.pasteEndPos;
23
+ var newPasteStartPos = tr.mapping.map(oldPasteStartPos);
24
+ var newPasteEndPos = tr.mapping.map(oldPasteEndPos);
25
+
26
+ //this is true when user changes format from the toolbar.
27
+ //only change pasteEndPos in this case
28
+ if (changedFormatFromToolbar(tr)) {
29
+ return _objectSpread(_objectSpread({}, pluginState), {}, {
30
+ pasteEndPos: newPasteEndPos
31
+ });
32
+ }
33
+ if (oldPasteStartPos === newPasteStartPos && oldPasteEndPos === newPasteEndPos) {
34
+ return pluginState;
35
+ }
36
+ return _objectSpread(_objectSpread({}, pluginState), {}, {
37
+ pasteStartPos: newPasteStartPos,
38
+ pasteEndPos: newPasteEndPos
39
+ });
17
40
  },
18
41
  onSelectionChanged: function onSelectionChanged(tr, pluginState) {
19
42
  // Detect click outside the editor
@@ -28,4 +51,11 @@ var _pluginFactory = (0, _utils.pluginFactory)(_types.pasteOptionsPluginKey, _re
28
51
  }),
29
52
  createPluginState = exports.createPluginState = _pluginFactory.createPluginState,
30
53
  createCommand = exports.createCommand = _pluginFactory.createCommand,
31
- getPluginState = exports.getPluginState = _pluginFactory.getPluginState;
54
+ getPluginState = exports.getPluginState = _pluginFactory.getPluginState;
55
+ var changedFormatFromToolbar = function changedFormatFromToolbar(tr) {
56
+ var meta = tr.getMeta(_constants.PASTE_OPTIONS_META_ID);
57
+ if (meta && meta.type === _actions.PastePluginActionTypes.CHANGE_FORMAT) {
58
+ return true;
59
+ }
60
+ return false;
61
+ };
@@ -37,23 +37,23 @@ var isToolbarVisible = exports.isToolbarVisible = function isToolbarVisible(stat
37
37
  }
38
38
  return false;
39
39
  };
40
- var getToolbarMenuConfig = exports.getToolbarMenuConfig = function getToolbarMenuConfig(pluginState, pasteStartPos, plaintext, intl, editorAnalyticsAPI) {
40
+ var getToolbarMenuConfig = exports.getToolbarMenuConfig = function getToolbarMenuConfig(pluginState, intl, editorAnalyticsAPI) {
41
41
  var options = [{
42
42
  id: 'editor.paste.richText',
43
43
  title: intl.formatMessage(_messages.messages.richText),
44
44
  selected: pluginState.selectedOption === _types.ToolbarDropdownOption.RichText,
45
45
  hidden: pluginState.isPlainText,
46
- onClick: (0, _commands.changeToRichTextWithAnalytics)(editorAnalyticsAPI)(pasteStartPos)
46
+ onClick: (0, _commands.changeToRichTextWithAnalytics)(editorAnalyticsAPI)()
47
47
  }, {
48
48
  id: 'editor.paste.markdown',
49
49
  title: intl.formatMessage(_messages.messages.markdown),
50
50
  selected: pluginState.selectedOption === _types.ToolbarDropdownOption.Markdown,
51
- onClick: (0, _commands.changeToMarkdownWithAnalytics)(editorAnalyticsAPI, plaintext.length)(pasteStartPos, plaintext)
51
+ onClick: (0, _commands.changeToMarkdownWithAnalytics)(editorAnalyticsAPI, pluginState.plaintext.length)()
52
52
  }, {
53
53
  id: 'editor.paste.plainText',
54
54
  title: intl.formatMessage(_messages.messages.plainText),
55
55
  selected: pluginState.selectedOption === _types.ToolbarDropdownOption.PlainText,
56
- onClick: (0, _commands.changeToPlainTextWithAnalytics)(editorAnalyticsAPI, plaintext.length)(pasteStartPos, plaintext)
56
+ onClick: (0, _commands.changeToPlainTextWithAnalytics)(editorAnalyticsAPI, pluginState.plaintext.length)()
57
57
  }];
58
58
  return {
59
59
  id: _constants.PASTE_TOOLBAR_ITEM_CLASS,
@@ -68,11 +68,11 @@ var getToolbarMenuConfig = exports.getToolbarMenuConfig = function getToolbarMen
68
68
  var onToggleHandler = function onToggleHandler(state, dispatch) {
69
69
  return (0, _commands.dropdownClickHandler)()(state, dispatch);
70
70
  };
71
- var buildToolbar = exports.buildToolbar = function buildToolbar(state, pasteStartPos, plaintext, intl, editorAnalyticsAPI) {
71
+ var buildToolbar = exports.buildToolbar = function buildToolbar(state, intl, editorAnalyticsAPI) {
72
72
  var schema = state.schema;
73
73
  var validNodes = Object.values(schema.nodes);
74
74
  var pluginState = _types.pasteOptionsPluginKey.getState(state);
75
- var menu = getToolbarMenuConfig(pluginState, pasteStartPos, plaintext, intl, editorAnalyticsAPI);
75
+ var menu = getToolbarMenuConfig(pluginState, intl, editorAnalyticsAPI);
76
76
  return {
77
77
  title: intl.formatMessage(_messages.messages.pasteOptions),
78
78
  nodeType: validNodes,
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.formatRichText = exports.formatPlainText = exports.formatMarkdown = void 0;
7
7
  exports.getMarkdownSlice = getMarkdownSlice;
8
- exports.getRichTextSlice = void 0;
9
8
  var _monitoring = require("@atlaskit/editor-common/monitoring");
10
9
  var _paste = require("@atlaskit/editor-common/paste");
11
10
  var _editorMarkdownTransformer = require("@atlaskit/editor-markdown-transformer");
@@ -13,10 +12,10 @@ var _model = require("@atlaskit/editor-prosemirror/model");
13
12
  var _state = require("@atlaskit/editor-prosemirror/state");
14
13
  var _transform = require("@atlaskit/editor-prosemirror/transform");
15
14
  var _index = require("./index");
16
- var formatMarkdown = exports.formatMarkdown = function formatMarkdown(state, pasteStartPos, plaintext) {
17
- var schema = state.schema;
18
- var tr = state.tr;
19
- var selection = tr.selection;
15
+ var formatMarkdown = exports.formatMarkdown = function formatMarkdown(tr, pluginState) {
16
+ var pasteStartPos = pluginState.pasteStartPos;
17
+ var pasteEndPos = pluginState.pasteEndPos;
18
+ var plaintext = pluginState.plaintext;
20
19
  if (pasteStartPos < 0) {
21
20
  return tr;
22
21
  }
@@ -25,11 +24,10 @@ var formatMarkdown = exports.formatMarkdown = function formatMarkdown(state, pas
25
24
  if (parentOffset === 0 && resolvedPasteStartPos.depth > 0) {
26
25
  pasteStartPos = resolvedPasteStartPos.before();
27
26
  }
28
- var markdownSlice = getMarkdownSlice(plaintext, schema, selection);
27
+ var markdownSlice = getMarkdownSlice(plaintext, tr.doc.type.schema, tr.selection);
29
28
  if (!markdownSlice) {
30
29
  return tr;
31
30
  }
32
- var pasteEndPos = selection.$to.pos;
33
31
  pasteSliceIntoTransactionWithSelectionAdjust({
34
32
  tr: tr,
35
33
  pasteStartPos: pasteStartPos,
@@ -38,22 +36,16 @@ var formatMarkdown = exports.formatMarkdown = function formatMarkdown(state, pas
38
36
  });
39
37
  return tr;
40
38
  };
41
- var getRichTextSlice = exports.getRichTextSlice = function getRichTextSlice(state, pasteStartPos) {
42
- var tr = state.tr;
43
- var selection = tr.selection;
44
- var pasteEndPos = selection.$to.pos;
45
- return state.doc.slice(pasteStartPos, pasteEndPos);
46
- };
47
- var formatRichText = exports.formatRichText = function formatRichText(state, pasteStartPos, richTextSlice) {
48
- var tr = state.tr;
49
- var selection = tr.selection;
39
+ var formatRichText = exports.formatRichText = function formatRichText(tr, pluginState) {
40
+ var pasteStartPos = pluginState.pasteStartPos;
41
+ var pasteEndPos = pluginState.pasteEndPos;
42
+ var richTextSlice = pluginState.richTextSlice;
50
43
  if (pasteStartPos < 0) {
51
44
  return tr;
52
45
  }
53
- if (richTextSlice === _model.Slice.empty) {
46
+ if (richTextSlice.content.size === 0) {
54
47
  return tr;
55
48
  }
56
- var pasteEndPos = selection.$to.pos;
57
49
  var resolvedPasteStartPos = tr.doc.resolve(pasteStartPos);
58
50
  var parentOffset = resolvedPasteStartPos.parentOffset;
59
51
  if (parentOffset === 0 && resolvedPasteStartPos.depth > 0) {
@@ -67,21 +59,21 @@ var formatRichText = exports.formatRichText = function formatRichText(state, pas
67
59
  });
68
60
  return tr;
69
61
  };
70
- var formatPlainText = exports.formatPlainText = function formatPlainText(state, pasteStartPos, plaintext) {
71
- var tr = state.tr,
72
- schema = state.schema;
62
+ var formatPlainText = exports.formatPlainText = function formatPlainText(tr, pluginState) {
63
+ var pasteStartPos = pluginState.pasteStartPos;
64
+ var pasteEndPos = pluginState.pasteEndPos;
65
+ var plaintext = pluginState.plaintext;
73
66
 
74
67
  //not possible to create plain text slice with empty string
75
68
  if (pasteStartPos < 0 || plaintext === '') {
76
69
  return tr;
77
70
  }
78
- var selection = tr.selection;
79
- var pasteEndPos = selection.$to.pos;
80
71
  var resolvedPasteStartPos = tr.doc.resolve(pasteStartPos);
81
72
  var parentOffset = resolvedPasteStartPos.parentOffset;
82
73
  if (parentOffset === 0 && resolvedPasteStartPos.depth > 0) {
83
74
  pasteStartPos = resolvedPasteStartPos.before();
84
75
  }
76
+ var schema = tr.doc.type.schema;
85
77
  var plainTextNode = schema.text(plaintext);
86
78
  var plainTextFragment = _model.Fragment.from(schema.nodes.paragraph.createAndFill(null, plainTextNode));
87
79
  var plainTextSlice = new _model.Slice(plainTextFragment, resolvedPasteStartPos.depth, resolvedPasteStartPos.depth);
@@ -20,9 +20,13 @@ export const showToolbar = (lastContentPasted, selectedOption) => {
20
20
  };
21
21
  return createCommand(commandAction);
22
22
  };
23
- export const changeToPlainText = (pasteStartPos, plaintext) => {
23
+ export const changeToPlainText = () => {
24
24
  const plaintextTransformer = (tr, state) => {
25
- return formatPlainText(state, pasteStartPos, plaintext);
25
+ const pluginState = pasteOptionsPluginKey.getState(state);
26
+ if (pluginState.selectedOption === ToolbarDropdownOption.PlainText) {
27
+ return tr;
28
+ }
29
+ return formatPlainText(tr, pluginState);
26
30
  };
27
31
  const commandAction = editorState => {
28
32
  return {
@@ -34,7 +38,7 @@ export const changeToPlainText = (pasteStartPos, plaintext) => {
34
38
  };
35
39
  return createCommand(commandAction, plaintextTransformer);
36
40
  };
37
- export const changeToPlainTextWithAnalytics = (editorAnalyticsAPI, sliceSize) => (pasteStartPos, plaintext) => {
41
+ export const changeToPlainTextWithAnalytics = (editorAnalyticsAPI, sliceSize) => () => {
38
42
  return withAnalytics(editorAnalyticsAPI, {
39
43
  action: ACTION.PASTED,
40
44
  actionSubject: ACTION_SUBJECT.DOCUMENT,
@@ -45,15 +49,18 @@ export const changeToPlainTextWithAnalytics = (editorAnalyticsAPI, sliceSize) =>
45
49
  content: PasteContents.text,
46
50
  pasteSize: sliceSize
47
51
  }
48
- })(changeToPlainText(pasteStartPos, plaintext));
52
+ })(changeToPlainText());
49
53
  };
50
54
  export const dropdownClickHandler = () => {
51
55
  return highlightContent();
52
56
  };
53
- export const changeToRichText = pasteStartPos => {
57
+ export const changeToRichText = () => {
54
58
  const transformer = (tr, state) => {
55
- const pastePluginState = pasteOptionsPluginKey.getState(state);
56
- return formatRichText(state, pasteStartPos, pastePluginState.richTextSlice);
59
+ const pluginState = pasteOptionsPluginKey.getState(state);
60
+ if (pluginState.selectedOption === ToolbarDropdownOption.RichText) {
61
+ return tr;
62
+ }
63
+ return formatRichText(tr, pluginState);
57
64
  };
58
65
  const commandAction = editorState => {
59
66
  return {
@@ -65,7 +72,7 @@ export const changeToRichText = pasteStartPos => {
65
72
  };
66
73
  return createCommand(commandAction, transformer);
67
74
  };
68
- export const changeToRichTextWithAnalytics = editorAnalyticsAPI => pasteStartPos => {
75
+ export const changeToRichTextWithAnalytics = editorAnalyticsAPI => () => {
69
76
  const payloadCallback = state => {
70
77
  var _pastePluginState$ric;
71
78
  const pastePluginState = pasteOptionsPluginKey.getState(state);
@@ -81,11 +88,15 @@ export const changeToRichTextWithAnalytics = editorAnalyticsAPI => pasteStartPos
81
88
  }
82
89
  };
83
90
  };
84
- return withAnalytics(editorAnalyticsAPI, payloadCallback)(changeToRichText(pasteStartPos));
91
+ return withAnalytics(editorAnalyticsAPI, payloadCallback)(changeToRichText());
85
92
  };
86
- export const changeToMarkDown = (pasteStartPos, plaintext) => {
93
+ export const changeToMarkDown = () => {
87
94
  const markdownTransformer = (tr, state) => {
88
- return formatMarkdown(state, pasteStartPos, plaintext);
95
+ const pluginState = pasteOptionsPluginKey.getState(state);
96
+ if (pluginState.selectedOption === ToolbarDropdownOption.Markdown) {
97
+ return tr;
98
+ }
99
+ return formatMarkdown(tr, pluginState);
89
100
  };
90
101
  const commandAction = editorState => {
91
102
  return {
@@ -97,7 +108,7 @@ export const changeToMarkDown = (pasteStartPos, plaintext) => {
97
108
  };
98
109
  return createCommand(commandAction, markdownTransformer);
99
110
  };
100
- export const changeToMarkdownWithAnalytics = (editorAnalyticsAPI, sliceSize) => (pasteStartPos, plaintext) => {
111
+ export const changeToMarkdownWithAnalytics = (editorAnalyticsAPI, sliceSize) => () => {
101
112
  return withAnalytics(editorAnalyticsAPI, {
102
113
  action: ACTION.PASTED,
103
114
  actionSubject: ACTION_SUBJECT.DOCUMENT,
@@ -108,7 +119,7 @@ export const changeToMarkdownWithAnalytics = (editorAnalyticsAPI, sliceSize) =>
108
119
  content: PasteContents.text,
109
120
  pasteSize: sliceSize
110
121
  }
111
- })(changeToMarkDown(pasteStartPos, plaintext));
122
+ })(changeToMarkDown());
112
123
  };
113
124
  export const highlightContent = () => {
114
125
  const commandAction = editorState => {
@@ -23,13 +23,8 @@ export const pasteOptionsToolbarPlugin = ({
23
23
  pluginsOptions: {
24
24
  floatingToolbar(state, intl) {
25
25
  const pastePluginState = pasteOptionsPluginKey.getState(state);
26
- const {
27
- showToolbar,
28
- pasteStartPos,
29
- plaintext
30
- } = pastePluginState || {};
31
- if (showToolbar) {
32
- return buildToolbar(state, pasteStartPos, plaintext, intl, editorAnalyticsAPI);
26
+ if (pastePluginState.showToolbar) {
27
+ return buildToolbar(state, intl, editorAnalyticsAPI);
33
28
  }
34
29
  return;
35
30
  }
@@ -4,4 +4,5 @@ export const TEXT_HIGHLIGHT_CLASS = 'text-highlight';
4
4
  export const PASTE_HIGHLIGHT_DECORATION_KEY = 'paste-highlight-decoration-key';
5
5
  export const PASTE_TOOLBAR_ITEM_CLASS = 'ak-editor-paste-toolbar-item';
6
6
  export const EDITOR_WRAPPER_CLASS = 'akEditor';
7
- export const PASTE_OPTIONS_TEST_ID = 'paste-options-testid';
7
+ export const PASTE_OPTIONS_TEST_ID = 'paste-options-testid';
8
+ export const PASTE_OPTIONS_META_ID = 'paste-options$';
@@ -1,13 +1,38 @@
1
1
  import { pluginFactory } from '@atlaskit/editor-common/utils';
2
+ import { PastePluginActionTypes } from '../actions';
2
3
  import { reducer } from '../reducer';
3
4
  import { pasteOptionsPluginKey } from '../types';
5
+ import { PASTE_OPTIONS_META_ID } from './constants';
4
6
  export const {
5
7
  createPluginState,
6
8
  createCommand,
7
9
  getPluginState
8
10
  } = pluginFactory(pasteOptionsPluginKey, reducer, {
9
11
  mapping: (tr, pluginState) => {
10
- return pluginState;
12
+ if (!tr.docChanged || !pluginState.showToolbar) {
13
+ return pluginState;
14
+ }
15
+ const oldPasteStartPos = pluginState.pasteStartPos;
16
+ const oldPasteEndPos = pluginState.pasteEndPos;
17
+ const newPasteStartPos = tr.mapping.map(oldPasteStartPos);
18
+ const newPasteEndPos = tr.mapping.map(oldPasteEndPos);
19
+
20
+ //this is true when user changes format from the toolbar.
21
+ //only change pasteEndPos in this case
22
+ if (changedFormatFromToolbar(tr)) {
23
+ return {
24
+ ...pluginState,
25
+ pasteEndPos: newPasteEndPos
26
+ };
27
+ }
28
+ if (oldPasteStartPos === newPasteStartPos && oldPasteEndPos === newPasteEndPos) {
29
+ return pluginState;
30
+ }
31
+ return {
32
+ ...pluginState,
33
+ pasteStartPos: newPasteStartPos,
34
+ pasteEndPos: newPasteEndPos
35
+ };
11
36
  },
12
37
  onSelectionChanged: (tr, pluginState) => {
13
38
  // Detect click outside the editor
@@ -20,4 +45,11 @@ export const {
20
45
  }
21
46
  return pluginState;
22
47
  }
23
- });
48
+ });
49
+ const changedFormatFromToolbar = tr => {
50
+ const meta = tr.getMeta(PASTE_OPTIONS_META_ID);
51
+ if (meta && meta.type === PastePluginActionTypes.CHANGE_FORMAT) {
52
+ return true;
53
+ }
54
+ return false;
55
+ };
@@ -30,23 +30,23 @@ export const isToolbarVisible = (state, lastContentPasted) => {
30
30
  }
31
31
  return false;
32
32
  };
33
- export const getToolbarMenuConfig = (pluginState, pasteStartPos, plaintext, intl, editorAnalyticsAPI) => {
33
+ export const getToolbarMenuConfig = (pluginState, intl, editorAnalyticsAPI) => {
34
34
  const options = [{
35
35
  id: 'editor.paste.richText',
36
36
  title: intl.formatMessage(messages.richText),
37
37
  selected: pluginState.selectedOption === ToolbarDropdownOption.RichText,
38
38
  hidden: pluginState.isPlainText,
39
- onClick: changeToRichTextWithAnalytics(editorAnalyticsAPI)(pasteStartPos)
39
+ onClick: changeToRichTextWithAnalytics(editorAnalyticsAPI)()
40
40
  }, {
41
41
  id: 'editor.paste.markdown',
42
42
  title: intl.formatMessage(messages.markdown),
43
43
  selected: pluginState.selectedOption === ToolbarDropdownOption.Markdown,
44
- onClick: changeToMarkdownWithAnalytics(editorAnalyticsAPI, plaintext.length)(pasteStartPos, plaintext)
44
+ onClick: changeToMarkdownWithAnalytics(editorAnalyticsAPI, pluginState.plaintext.length)()
45
45
  }, {
46
46
  id: 'editor.paste.plainText',
47
47
  title: intl.formatMessage(messages.plainText),
48
48
  selected: pluginState.selectedOption === ToolbarDropdownOption.PlainText,
49
- onClick: changeToPlainTextWithAnalytics(editorAnalyticsAPI, plaintext.length)(pasteStartPos, plaintext)
49
+ onClick: changeToPlainTextWithAnalytics(editorAnalyticsAPI, pluginState.plaintext.length)()
50
50
  }];
51
51
  return {
52
52
  id: PASTE_TOOLBAR_ITEM_CLASS,
@@ -61,13 +61,13 @@ export const getToolbarMenuConfig = (pluginState, pasteStartPos, plaintext, intl
61
61
  const onToggleHandler = (state, dispatch) => {
62
62
  return dropdownClickHandler()(state, dispatch);
63
63
  };
64
- export const buildToolbar = (state, pasteStartPos, plaintext, intl, editorAnalyticsAPI) => {
64
+ export const buildToolbar = (state, intl, editorAnalyticsAPI) => {
65
65
  const {
66
66
  schema
67
67
  } = state;
68
68
  const validNodes = Object.values(schema.nodes);
69
69
  const pluginState = pasteOptionsPluginKey.getState(state);
70
- const menu = getToolbarMenuConfig(pluginState, pasteStartPos, plaintext, intl, editorAnalyticsAPI);
70
+ const menu = getToolbarMenuConfig(pluginState, intl, editorAnalyticsAPI);
71
71
  return {
72
72
  title: intl.formatMessage(messages.pasteOptions),
73
73
  nodeType: validNodes,
@@ -5,14 +5,10 @@ import { Fragment, Slice } from '@atlaskit/editor-prosemirror/model';
5
5
  import { Selection } from '@atlaskit/editor-prosemirror/state';
6
6
  import { ReplaceStep } from '@atlaskit/editor-prosemirror/transform';
7
7
  import { escapeLinks } from './index';
8
- export const formatMarkdown = (state, pasteStartPos, plaintext) => {
9
- const schema = state.schema;
10
- let {
11
- tr
12
- } = state;
13
- const {
14
- selection
15
- } = tr;
8
+ export const formatMarkdown = (tr, pluginState) => {
9
+ let pasteStartPos = pluginState.pasteStartPos;
10
+ let pasteEndPos = pluginState.pasteEndPos;
11
+ let plaintext = pluginState.plaintext;
16
12
  if (pasteStartPos < 0) {
17
13
  return tr;
18
14
  }
@@ -21,11 +17,10 @@ export const formatMarkdown = (state, pasteStartPos, plaintext) => {
21
17
  if (parentOffset === 0 && resolvedPasteStartPos.depth > 0) {
22
18
  pasteStartPos = resolvedPasteStartPos.before();
23
19
  }
24
- const markdownSlice = getMarkdownSlice(plaintext, schema, selection);
20
+ const markdownSlice = getMarkdownSlice(plaintext, tr.doc.type.schema, tr.selection);
25
21
  if (!markdownSlice) {
26
22
  return tr;
27
23
  }
28
- const pasteEndPos = selection.$to.pos;
29
24
  pasteSliceIntoTransactionWithSelectionAdjust({
30
25
  tr,
31
26
  pasteStartPos,
@@ -34,30 +29,16 @@ export const formatMarkdown = (state, pasteStartPos, plaintext) => {
34
29
  });
35
30
  return tr;
36
31
  };
37
- export const getRichTextSlice = (state, pasteStartPos) => {
38
- const {
39
- tr
40
- } = state;
41
- const {
42
- selection
43
- } = tr;
44
- let pasteEndPos = selection.$to.pos;
45
- return state.doc.slice(pasteStartPos, pasteEndPos);
46
- };
47
- export const formatRichText = (state, pasteStartPos, richTextSlice) => {
48
- let {
49
- tr
50
- } = state;
51
- const {
52
- selection
53
- } = tr;
32
+ export const formatRichText = (tr, pluginState) => {
33
+ let pasteStartPos = pluginState.pasteStartPos;
34
+ let pasteEndPos = pluginState.pasteEndPos;
35
+ const richTextSlice = pluginState.richTextSlice;
54
36
  if (pasteStartPos < 0) {
55
37
  return tr;
56
38
  }
57
- if (richTextSlice === Slice.empty) {
39
+ if (richTextSlice.content.size === 0) {
58
40
  return tr;
59
41
  }
60
- let pasteEndPos = selection.$to.pos;
61
42
  const resolvedPasteStartPos = tr.doc.resolve(pasteStartPos);
62
43
  const parentOffset = resolvedPasteStartPos.parentOffset;
63
44
  if (parentOffset === 0 && resolvedPasteStartPos.depth > 0) {
@@ -71,25 +52,21 @@ export const formatRichText = (state, pasteStartPos, richTextSlice) => {
71
52
  });
72
53
  return tr;
73
54
  };
74
- export const formatPlainText = (state, pasteStartPos, plaintext) => {
75
- const {
76
- tr,
77
- schema
78
- } = state;
55
+ export const formatPlainText = (tr, pluginState) => {
56
+ let pasteStartPos = pluginState.pasteStartPos;
57
+ let pasteEndPos = pluginState.pasteEndPos;
58
+ let plaintext = pluginState.plaintext;
79
59
 
80
60
  //not possible to create plain text slice with empty string
81
61
  if (pasteStartPos < 0 || plaintext === '') {
82
62
  return tr;
83
63
  }
84
- const {
85
- selection
86
- } = tr;
87
- const pasteEndPos = selection.$to.pos;
88
64
  const resolvedPasteStartPos = tr.doc.resolve(pasteStartPos);
89
65
  const parentOffset = resolvedPasteStartPos.parentOffset;
90
66
  if (parentOffset === 0 && resolvedPasteStartPos.depth > 0) {
91
67
  pasteStartPos = resolvedPasteStartPos.before();
92
68
  }
69
+ const schema = tr.doc.type.schema;
93
70
  const plainTextNode = schema.text(plaintext);
94
71
  const plainTextFragment = Fragment.from(schema.nodes.paragraph.createAndFill(null, plainTextNode));
95
72
  const plainTextSlice = new Slice(plainTextFragment, resolvedPasteStartPos.depth, resolvedPasteStartPos.depth);
@@ -20,9 +20,13 @@ export var showToolbar = function showToolbar(lastContentPasted, selectedOption)
20
20
  };
21
21
  return createCommand(commandAction);
22
22
  };
23
- export var changeToPlainText = function changeToPlainText(pasteStartPos, plaintext) {
23
+ export var changeToPlainText = function changeToPlainText() {
24
24
  var plaintextTransformer = function plaintextTransformer(tr, state) {
25
- return formatPlainText(state, pasteStartPos, plaintext);
25
+ var pluginState = pasteOptionsPluginKey.getState(state);
26
+ if (pluginState.selectedOption === ToolbarDropdownOption.PlainText) {
27
+ return tr;
28
+ }
29
+ return formatPlainText(tr, pluginState);
26
30
  };
27
31
  var commandAction = function commandAction(editorState) {
28
32
  return {
@@ -35,7 +39,7 @@ export var changeToPlainText = function changeToPlainText(pasteStartPos, plainte
35
39
  return createCommand(commandAction, plaintextTransformer);
36
40
  };
37
41
  export var changeToPlainTextWithAnalytics = function changeToPlainTextWithAnalytics(editorAnalyticsAPI, sliceSize) {
38
- return function (pasteStartPos, plaintext) {
42
+ return function () {
39
43
  return withAnalytics(editorAnalyticsAPI, {
40
44
  action: ACTION.PASTED,
41
45
  actionSubject: ACTION_SUBJECT.DOCUMENT,
@@ -46,16 +50,19 @@ export var changeToPlainTextWithAnalytics = function changeToPlainTextWithAnalyt
46
50
  content: PasteContents.text,
47
51
  pasteSize: sliceSize
48
52
  }
49
- })(changeToPlainText(pasteStartPos, plaintext));
53
+ })(changeToPlainText());
50
54
  };
51
55
  };
52
56
  export var dropdownClickHandler = function dropdownClickHandler() {
53
57
  return highlightContent();
54
58
  };
55
- export var changeToRichText = function changeToRichText(pasteStartPos) {
59
+ export var changeToRichText = function changeToRichText() {
56
60
  var transformer = function transformer(tr, state) {
57
- var pastePluginState = pasteOptionsPluginKey.getState(state);
58
- return formatRichText(state, pasteStartPos, pastePluginState.richTextSlice);
61
+ var pluginState = pasteOptionsPluginKey.getState(state);
62
+ if (pluginState.selectedOption === ToolbarDropdownOption.RichText) {
63
+ return tr;
64
+ }
65
+ return formatRichText(tr, pluginState);
59
66
  };
60
67
  var commandAction = function commandAction(editorState) {
61
68
  return {
@@ -68,7 +75,7 @@ export var changeToRichText = function changeToRichText(pasteStartPos) {
68
75
  return createCommand(commandAction, transformer);
69
76
  };
70
77
  export var changeToRichTextWithAnalytics = function changeToRichTextWithAnalytics(editorAnalyticsAPI) {
71
- return function (pasteStartPos) {
78
+ return function () {
72
79
  var payloadCallback = function payloadCallback(state) {
73
80
  var _pastePluginState$ric;
74
81
  var pastePluginState = pasteOptionsPluginKey.getState(state);
@@ -84,12 +91,16 @@ export var changeToRichTextWithAnalytics = function changeToRichTextWithAnalytic
84
91
  }
85
92
  };
86
93
  };
87
- return withAnalytics(editorAnalyticsAPI, payloadCallback)(changeToRichText(pasteStartPos));
94
+ return withAnalytics(editorAnalyticsAPI, payloadCallback)(changeToRichText());
88
95
  };
89
96
  };
90
- export var changeToMarkDown = function changeToMarkDown(pasteStartPos, plaintext) {
97
+ export var changeToMarkDown = function changeToMarkDown() {
91
98
  var markdownTransformer = function markdownTransformer(tr, state) {
92
- return formatMarkdown(state, pasteStartPos, plaintext);
99
+ var pluginState = pasteOptionsPluginKey.getState(state);
100
+ if (pluginState.selectedOption === ToolbarDropdownOption.Markdown) {
101
+ return tr;
102
+ }
103
+ return formatMarkdown(tr, pluginState);
93
104
  };
94
105
  var commandAction = function commandAction(editorState) {
95
106
  return {
@@ -102,7 +113,7 @@ export var changeToMarkDown = function changeToMarkDown(pasteStartPos, plaintext
102
113
  return createCommand(commandAction, markdownTransformer);
103
114
  };
104
115
  export var changeToMarkdownWithAnalytics = function changeToMarkdownWithAnalytics(editorAnalyticsAPI, sliceSize) {
105
- return function (pasteStartPos, plaintext) {
116
+ return function () {
106
117
  return withAnalytics(editorAnalyticsAPI, {
107
118
  action: ACTION.PASTED,
108
119
  actionSubject: ACTION_SUBJECT.DOCUMENT,
@@ -113,7 +124,7 @@ export var changeToMarkdownWithAnalytics = function changeToMarkdownWithAnalytic
113
124
  content: PasteContents.text,
114
125
  pasteSize: sliceSize
115
126
  }
116
- })(changeToMarkDown(pasteStartPos, plaintext));
127
+ })(changeToMarkDown());
117
128
  };
118
129
  };
119
130
  export var highlightContent = function highlightContent() {
@@ -23,18 +23,14 @@ export var pasteOptionsToolbarPlugin = function pasteOptionsToolbarPlugin(_ref)
23
23
  pluginsOptions: {
24
24
  floatingToolbar: function floatingToolbar(state, intl) {
25
25
  var pastePluginState = pasteOptionsPluginKey.getState(state);
26
- var _ref3 = pastePluginState || {},
27
- showToolbar = _ref3.showToolbar,
28
- pasteStartPos = _ref3.pasteStartPos,
29
- plaintext = _ref3.plaintext;
30
- if (showToolbar) {
31
- return buildToolbar(state, pasteStartPos, plaintext, intl, editorAnalyticsAPI);
26
+ if (pastePluginState.showToolbar) {
27
+ return buildToolbar(state, intl, editorAnalyticsAPI);
32
28
  }
33
29
  return;
34
30
  }
35
31
  },
36
- usePluginHook: function usePluginHook(_ref4) {
37
- var editorView = _ref4.editorView;
32
+ usePluginHook: function usePluginHook(_ref3) {
33
+ var editorView = _ref3.editorView;
38
34
  var _useSharedPluginState = useSharedPluginState(api, ['paste']),
39
35
  pasteState = _useSharedPluginState.pasteState;
40
36
  var lastContentPasted = pasteState === null || pasteState === void 0 ? void 0 : pasteState.lastContentPasted;
@@ -4,4 +4,5 @@ export var TEXT_HIGHLIGHT_CLASS = 'text-highlight';
4
4
  export var PASTE_HIGHLIGHT_DECORATION_KEY = 'paste-highlight-decoration-key';
5
5
  export var PASTE_TOOLBAR_ITEM_CLASS = 'ak-editor-paste-toolbar-item';
6
6
  export var EDITOR_WRAPPER_CLASS = 'akEditor';
7
- export var PASTE_OPTIONS_TEST_ID = 'paste-options-testid';
7
+ export var PASTE_OPTIONS_TEST_ID = 'paste-options-testid';
8
+ export var PASTE_OPTIONS_META_ID = 'paste-options$';
@@ -2,11 +2,34 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
3
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
4
  import { pluginFactory } from '@atlaskit/editor-common/utils';
5
+ import { PastePluginActionTypes } from '../actions';
5
6
  import { reducer } from '../reducer';
6
7
  import { pasteOptionsPluginKey } from '../types';
8
+ import { PASTE_OPTIONS_META_ID } from './constants';
7
9
  var _pluginFactory = pluginFactory(pasteOptionsPluginKey, reducer, {
8
10
  mapping: function mapping(tr, pluginState) {
9
- return pluginState;
11
+ if (!tr.docChanged || !pluginState.showToolbar) {
12
+ return pluginState;
13
+ }
14
+ var oldPasteStartPos = pluginState.pasteStartPos;
15
+ var oldPasteEndPos = pluginState.pasteEndPos;
16
+ var newPasteStartPos = tr.mapping.map(oldPasteStartPos);
17
+ var newPasteEndPos = tr.mapping.map(oldPasteEndPos);
18
+
19
+ //this is true when user changes format from the toolbar.
20
+ //only change pasteEndPos in this case
21
+ if (changedFormatFromToolbar(tr)) {
22
+ return _objectSpread(_objectSpread({}, pluginState), {}, {
23
+ pasteEndPos: newPasteEndPos
24
+ });
25
+ }
26
+ if (oldPasteStartPos === newPasteStartPos && oldPasteEndPos === newPasteEndPos) {
27
+ return pluginState;
28
+ }
29
+ return _objectSpread(_objectSpread({}, pluginState), {}, {
30
+ pasteStartPos: newPasteStartPos,
31
+ pasteEndPos: newPasteEndPos
32
+ });
10
33
  },
11
34
  onSelectionChanged: function onSelectionChanged(tr, pluginState) {
12
35
  // Detect click outside the editor
@@ -22,4 +45,11 @@ var _pluginFactory = pluginFactory(pasteOptionsPluginKey, reducer, {
22
45
  createPluginState = _pluginFactory.createPluginState,
23
46
  createCommand = _pluginFactory.createCommand,
24
47
  getPluginState = _pluginFactory.getPluginState;
25
- export { createPluginState, createCommand, getPluginState };
48
+ export { createPluginState, createCommand, getPluginState };
49
+ var changedFormatFromToolbar = function changedFormatFromToolbar(tr) {
50
+ var meta = tr.getMeta(PASTE_OPTIONS_META_ID);
51
+ if (meta && meta.type === PastePluginActionTypes.CHANGE_FORMAT) {
52
+ return true;
53
+ }
54
+ return false;
55
+ };
@@ -30,23 +30,23 @@ export var isToolbarVisible = function isToolbarVisible(state, lastContentPasted
30
30
  }
31
31
  return false;
32
32
  };
33
- export var getToolbarMenuConfig = function getToolbarMenuConfig(pluginState, pasteStartPos, plaintext, intl, editorAnalyticsAPI) {
33
+ export var getToolbarMenuConfig = function getToolbarMenuConfig(pluginState, intl, editorAnalyticsAPI) {
34
34
  var options = [{
35
35
  id: 'editor.paste.richText',
36
36
  title: intl.formatMessage(messages.richText),
37
37
  selected: pluginState.selectedOption === ToolbarDropdownOption.RichText,
38
38
  hidden: pluginState.isPlainText,
39
- onClick: changeToRichTextWithAnalytics(editorAnalyticsAPI)(pasteStartPos)
39
+ onClick: changeToRichTextWithAnalytics(editorAnalyticsAPI)()
40
40
  }, {
41
41
  id: 'editor.paste.markdown',
42
42
  title: intl.formatMessage(messages.markdown),
43
43
  selected: pluginState.selectedOption === ToolbarDropdownOption.Markdown,
44
- onClick: changeToMarkdownWithAnalytics(editorAnalyticsAPI, plaintext.length)(pasteStartPos, plaintext)
44
+ onClick: changeToMarkdownWithAnalytics(editorAnalyticsAPI, pluginState.plaintext.length)()
45
45
  }, {
46
46
  id: 'editor.paste.plainText',
47
47
  title: intl.formatMessage(messages.plainText),
48
48
  selected: pluginState.selectedOption === ToolbarDropdownOption.PlainText,
49
- onClick: changeToPlainTextWithAnalytics(editorAnalyticsAPI, plaintext.length)(pasteStartPos, plaintext)
49
+ onClick: changeToPlainTextWithAnalytics(editorAnalyticsAPI, pluginState.plaintext.length)()
50
50
  }];
51
51
  return {
52
52
  id: PASTE_TOOLBAR_ITEM_CLASS,
@@ -61,11 +61,11 @@ export var getToolbarMenuConfig = function getToolbarMenuConfig(pluginState, pas
61
61
  var onToggleHandler = function onToggleHandler(state, dispatch) {
62
62
  return dropdownClickHandler()(state, dispatch);
63
63
  };
64
- export var buildToolbar = function buildToolbar(state, pasteStartPos, plaintext, intl, editorAnalyticsAPI) {
64
+ export var buildToolbar = function buildToolbar(state, intl, editorAnalyticsAPI) {
65
65
  var schema = state.schema;
66
66
  var validNodes = Object.values(schema.nodes);
67
67
  var pluginState = pasteOptionsPluginKey.getState(state);
68
- var menu = getToolbarMenuConfig(pluginState, pasteStartPos, plaintext, intl, editorAnalyticsAPI);
68
+ var menu = getToolbarMenuConfig(pluginState, intl, editorAnalyticsAPI);
69
69
  return {
70
70
  title: intl.formatMessage(messages.pasteOptions),
71
71
  nodeType: validNodes,
@@ -5,10 +5,10 @@ import { Fragment, Slice } from '@atlaskit/editor-prosemirror/model';
5
5
  import { Selection } from '@atlaskit/editor-prosemirror/state';
6
6
  import { ReplaceStep } from '@atlaskit/editor-prosemirror/transform';
7
7
  import { escapeLinks } from './index';
8
- export var formatMarkdown = function formatMarkdown(state, pasteStartPos, plaintext) {
9
- var schema = state.schema;
10
- var tr = state.tr;
11
- var selection = tr.selection;
8
+ export var formatMarkdown = function formatMarkdown(tr, pluginState) {
9
+ var pasteStartPos = pluginState.pasteStartPos;
10
+ var pasteEndPos = pluginState.pasteEndPos;
11
+ var plaintext = pluginState.plaintext;
12
12
  if (pasteStartPos < 0) {
13
13
  return tr;
14
14
  }
@@ -17,11 +17,10 @@ export var formatMarkdown = function formatMarkdown(state, pasteStartPos, plaint
17
17
  if (parentOffset === 0 && resolvedPasteStartPos.depth > 0) {
18
18
  pasteStartPos = resolvedPasteStartPos.before();
19
19
  }
20
- var markdownSlice = getMarkdownSlice(plaintext, schema, selection);
20
+ var markdownSlice = getMarkdownSlice(plaintext, tr.doc.type.schema, tr.selection);
21
21
  if (!markdownSlice) {
22
22
  return tr;
23
23
  }
24
- var pasteEndPos = selection.$to.pos;
25
24
  pasteSliceIntoTransactionWithSelectionAdjust({
26
25
  tr: tr,
27
26
  pasteStartPos: pasteStartPos,
@@ -30,22 +29,16 @@ export var formatMarkdown = function formatMarkdown(state, pasteStartPos, plaint
30
29
  });
31
30
  return tr;
32
31
  };
33
- export var getRichTextSlice = function getRichTextSlice(state, pasteStartPos) {
34
- var tr = state.tr;
35
- var selection = tr.selection;
36
- var pasteEndPos = selection.$to.pos;
37
- return state.doc.slice(pasteStartPos, pasteEndPos);
38
- };
39
- export var formatRichText = function formatRichText(state, pasteStartPos, richTextSlice) {
40
- var tr = state.tr;
41
- var selection = tr.selection;
32
+ export var formatRichText = function formatRichText(tr, pluginState) {
33
+ var pasteStartPos = pluginState.pasteStartPos;
34
+ var pasteEndPos = pluginState.pasteEndPos;
35
+ var richTextSlice = pluginState.richTextSlice;
42
36
  if (pasteStartPos < 0) {
43
37
  return tr;
44
38
  }
45
- if (richTextSlice === Slice.empty) {
39
+ if (richTextSlice.content.size === 0) {
46
40
  return tr;
47
41
  }
48
- var pasteEndPos = selection.$to.pos;
49
42
  var resolvedPasteStartPos = tr.doc.resolve(pasteStartPos);
50
43
  var parentOffset = resolvedPasteStartPos.parentOffset;
51
44
  if (parentOffset === 0 && resolvedPasteStartPos.depth > 0) {
@@ -59,21 +52,21 @@ export var formatRichText = function formatRichText(state, pasteStartPos, richTe
59
52
  });
60
53
  return tr;
61
54
  };
62
- export var formatPlainText = function formatPlainText(state, pasteStartPos, plaintext) {
63
- var tr = state.tr,
64
- schema = state.schema;
55
+ export var formatPlainText = function formatPlainText(tr, pluginState) {
56
+ var pasteStartPos = pluginState.pasteStartPos;
57
+ var pasteEndPos = pluginState.pasteEndPos;
58
+ var plaintext = pluginState.plaintext;
65
59
 
66
60
  //not possible to create plain text slice with empty string
67
61
  if (pasteStartPos < 0 || plaintext === '') {
68
62
  return tr;
69
63
  }
70
- var selection = tr.selection;
71
- var pasteEndPos = selection.$to.pos;
72
64
  var resolvedPasteStartPos = tr.doc.resolve(pasteStartPos);
73
65
  var parentOffset = resolvedPasteStartPos.parentOffset;
74
66
  if (parentOffset === 0 && resolvedPasteStartPos.depth > 0) {
75
67
  pasteStartPos = resolvedPasteStartPos.before();
76
68
  }
69
+ var schema = tr.doc.type.schema;
77
70
  var plainTextNode = schema.text(plaintext);
78
71
  var plainTextFragment = Fragment.from(schema.nodes.paragraph.createAndFill(null, plainTextNode));
79
72
  var plainTextSlice = new Slice(plainTextFragment, resolvedPasteStartPos.depth, resolvedPasteStartPos.depth);
@@ -4,13 +4,13 @@ import type { LastContentPasted } from '@atlaskit/editor-plugin-paste';
4
4
  import type { EditorView } from '@atlaskit/editor-prosemirror/view';
5
5
  import { ToolbarDropdownOption } from './types';
6
6
  export declare const showToolbar: (lastContentPasted: LastContentPasted, selectedOption: ToolbarDropdownOption) => Command;
7
- export declare const changeToPlainText: (pasteStartPos: number, plaintext: string) => Command;
8
- export declare const changeToPlainTextWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined, sliceSize: number) => (pasteStartPos: number, plaintext: string) => Command;
7
+ export declare const changeToPlainText: () => Command;
8
+ export declare const changeToPlainTextWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined, sliceSize: number) => () => Command;
9
9
  export declare const dropdownClickHandler: () => Command;
10
- export declare const changeToRichText: (pasteStartPos: number) => Command;
11
- export declare const changeToRichTextWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => (pasteStartPos: number) => Command;
12
- export declare const changeToMarkDown: (pasteStartPos: number, plaintext: string) => Command;
13
- export declare const changeToMarkdownWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined, sliceSize: number) => (pasteStartPos: number, plaintext: string) => Command;
10
+ export declare const changeToRichText: () => Command;
11
+ export declare const changeToRichTextWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => () => Command;
12
+ export declare const changeToMarkDown: () => Command;
13
+ export declare const changeToMarkdownWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined, sliceSize: number) => () => Command;
14
14
  export declare const highlightContent: () => Command;
15
15
  export declare const hideToolbar: () => Command;
16
16
  export declare const checkAndHideToolbar: (view: EditorView) => void;
@@ -5,3 +5,4 @@ export declare const PASTE_HIGHLIGHT_DECORATION_KEY = "paste-highlight-decoratio
5
5
  export declare const PASTE_TOOLBAR_ITEM_CLASS = "ak-editor-paste-toolbar-item";
6
6
  export declare const EDITOR_WRAPPER_CLASS = "akEditor";
7
7
  export declare const PASTE_OPTIONS_TEST_ID = "paste-options-testid";
8
+ export declare const PASTE_OPTIONS_META_ID = "paste-options$";
@@ -5,5 +5,5 @@ import type { LastContentPasted } from '@atlaskit/editor-plugin-paste';
5
5
  import type { EditorState } from '@atlaskit/editor-prosemirror/state';
6
6
  import type { PasteOtionsPluginState } from './types';
7
7
  export declare const isToolbarVisible: (state: EditorState, lastContentPasted: LastContentPasted) => boolean;
8
- export declare const getToolbarMenuConfig: (pluginState: PasteOtionsPluginState, pasteStartPos: number, plaintext: string, intl: IntlShape, editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => FloatingToolbarDropdown<Command>;
9
- export declare const buildToolbar: (state: EditorState, pasteStartPos: number, plaintext: string, intl: IntlShape, editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => FloatingToolbarConfig | undefined;
8
+ export declare const getToolbarMenuConfig: (pluginState: PasteOtionsPluginState, intl: IntlShape, editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => FloatingToolbarDropdown<Command>;
9
+ export declare const buildToolbar: (state: EditorState, intl: IntlShape, editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => FloatingToolbarConfig | undefined;
@@ -1,9 +1,9 @@
1
1
  import type { Schema } from '@atlaskit/editor-prosemirror/model';
2
2
  import { Slice } from '@atlaskit/editor-prosemirror/model';
3
- import type { EditorState, Transaction } from '@atlaskit/editor-prosemirror/state';
3
+ import type { Transaction } from '@atlaskit/editor-prosemirror/state';
4
4
  import { Selection } from '@atlaskit/editor-prosemirror/state';
5
- export declare const formatMarkdown: (state: EditorState, pasteStartPos: number, plaintext: string) => Transaction;
6
- export declare const getRichTextSlice: (state: EditorState, pasteStartPos: number) => Slice;
7
- export declare const formatRichText: (state: EditorState, pasteStartPos: number, richTextSlice: Slice) => Transaction;
8
- export declare const formatPlainText: (state: EditorState, pasteStartPos: number, plaintext: string) => Transaction;
5
+ import type { PasteOtionsPluginState } from '../types';
6
+ export declare const formatMarkdown: (tr: Transaction, pluginState: PasteOtionsPluginState) => Transaction;
7
+ export declare const formatRichText: (tr: Transaction, pluginState: PasteOtionsPluginState) => Transaction;
8
+ export declare const formatPlainText: (tr: Transaction, pluginState: PasteOtionsPluginState) => Transaction;
9
9
  export declare function getMarkdownSlice(text: string, schema: Schema, selection: Selection): Slice | undefined;
@@ -4,13 +4,13 @@ import type { LastContentPasted } from '@atlaskit/editor-plugin-paste';
4
4
  import type { EditorView } from '@atlaskit/editor-prosemirror/view';
5
5
  import { ToolbarDropdownOption } from './types';
6
6
  export declare const showToolbar: (lastContentPasted: LastContentPasted, selectedOption: ToolbarDropdownOption) => Command;
7
- export declare const changeToPlainText: (pasteStartPos: number, plaintext: string) => Command;
8
- export declare const changeToPlainTextWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined, sliceSize: number) => (pasteStartPos: number, plaintext: string) => Command;
7
+ export declare const changeToPlainText: () => Command;
8
+ export declare const changeToPlainTextWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined, sliceSize: number) => () => Command;
9
9
  export declare const dropdownClickHandler: () => Command;
10
- export declare const changeToRichText: (pasteStartPos: number) => Command;
11
- export declare const changeToRichTextWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => (pasteStartPos: number) => Command;
12
- export declare const changeToMarkDown: (pasteStartPos: number, plaintext: string) => Command;
13
- export declare const changeToMarkdownWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined, sliceSize: number) => (pasteStartPos: number, plaintext: string) => Command;
10
+ export declare const changeToRichText: () => Command;
11
+ export declare const changeToRichTextWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => () => Command;
12
+ export declare const changeToMarkDown: () => Command;
13
+ export declare const changeToMarkdownWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined, sliceSize: number) => () => Command;
14
14
  export declare const highlightContent: () => Command;
15
15
  export declare const hideToolbar: () => Command;
16
16
  export declare const checkAndHideToolbar: (view: EditorView) => void;
@@ -5,3 +5,4 @@ export declare const PASTE_HIGHLIGHT_DECORATION_KEY = "paste-highlight-decoratio
5
5
  export declare const PASTE_TOOLBAR_ITEM_CLASS = "ak-editor-paste-toolbar-item";
6
6
  export declare const EDITOR_WRAPPER_CLASS = "akEditor";
7
7
  export declare const PASTE_OPTIONS_TEST_ID = "paste-options-testid";
8
+ export declare const PASTE_OPTIONS_META_ID = "paste-options$";
@@ -5,5 +5,5 @@ import type { LastContentPasted } from '@atlaskit/editor-plugin-paste';
5
5
  import type { EditorState } from '@atlaskit/editor-prosemirror/state';
6
6
  import type { PasteOtionsPluginState } from './types';
7
7
  export declare const isToolbarVisible: (state: EditorState, lastContentPasted: LastContentPasted) => boolean;
8
- export declare const getToolbarMenuConfig: (pluginState: PasteOtionsPluginState, pasteStartPos: number, plaintext: string, intl: IntlShape, editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => FloatingToolbarDropdown<Command>;
9
- export declare const buildToolbar: (state: EditorState, pasteStartPos: number, plaintext: string, intl: IntlShape, editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => FloatingToolbarConfig | undefined;
8
+ export declare const getToolbarMenuConfig: (pluginState: PasteOtionsPluginState, intl: IntlShape, editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => FloatingToolbarDropdown<Command>;
9
+ export declare const buildToolbar: (state: EditorState, intl: IntlShape, editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => FloatingToolbarConfig | undefined;
@@ -1,9 +1,9 @@
1
1
  import type { Schema } from '@atlaskit/editor-prosemirror/model';
2
2
  import { Slice } from '@atlaskit/editor-prosemirror/model';
3
- import type { EditorState, Transaction } from '@atlaskit/editor-prosemirror/state';
3
+ import type { Transaction } from '@atlaskit/editor-prosemirror/state';
4
4
  import { Selection } from '@atlaskit/editor-prosemirror/state';
5
- export declare const formatMarkdown: (state: EditorState, pasteStartPos: number, plaintext: string) => Transaction;
6
- export declare const getRichTextSlice: (state: EditorState, pasteStartPos: number) => Slice;
7
- export declare const formatRichText: (state: EditorState, pasteStartPos: number, richTextSlice: Slice) => Transaction;
8
- export declare const formatPlainText: (state: EditorState, pasteStartPos: number, plaintext: string) => Transaction;
5
+ import type { PasteOtionsPluginState } from '../types';
6
+ export declare const formatMarkdown: (tr: Transaction, pluginState: PasteOtionsPluginState) => Transaction;
7
+ export declare const formatRichText: (tr: Transaction, pluginState: PasteOtionsPluginState) => Transaction;
8
+ export declare const formatPlainText: (tr: Transaction, pluginState: PasteOtionsPluginState) => Transaction;
9
9
  export declare function getMarkdownSlice(text: string, schema: Schema, selection: Selection): Slice | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-paste-options-toolbar",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "Paste options toolbar for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",