@atlaskit/editor-plugin-paste 2.1.2 → 2.2.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/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @atlaskit/editor-plugin-paste
2
2
 
3
+ ## 2.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#105322](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/105322)
8
+ [`8876083532adc`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/8876083532adc) -
9
+ Bumped editor-prosemirror version to 7.0.0
10
+ - [#111139](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/111139)
11
+ [`1e01e9f84d512`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/1e01e9f84d512) -
12
+ [ED-26430] Strip legacy content macro from pasted content
13
+
14
+ ### Patch Changes
15
+
16
+ - Updated dependencies
17
+
18
+ ## 2.1.3
19
+
20
+ ### Patch Changes
21
+
22
+ - [#107782](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/107782)
23
+ [`bc422d0adbbb5`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/bc422d0adbbb5) -
24
+ [ux] ED-26378 remove editor_nest_media_and_codeblock_in_quotes_jira
25
+ - [#107782](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/107782)
26
+ [`cccc7a8347929`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/cccc7a8347929) -
27
+ [ux] ED-26378 Remove editor_nest_media_and_codeblock_in_quotes_jira and
28
+ nestMediaAndCodeblockInQuote
29
+ - Updated dependencies
30
+
3
31
  ## 2.1.2
4
32
 
5
33
  ### Patch Changes
@@ -314,11 +314,11 @@ var handleMarkdownWithAnalytics = exports.handleMarkdownWithAnalytics = function
314
314
  type: _analytics.PasteTypes.markdown
315
315
  }))((0, _handlers.handleMarkdown)(slice, pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$c3 = pluginInjectionApi.card) === null || _pluginInjectionApi$c3 === void 0 || (_pluginInjectionApi$c3 = _pluginInjectionApi$c3.actions) === null || _pluginInjectionApi$c3 === void 0 ? void 0 : _pluginInjectionApi$c3.queueCardsFromChangedTr));
316
316
  };
317
- var handleRichTextWithAnalytics = exports.handleRichTextWithAnalytics = function handleRichTextWithAnalytics(view, event, slice, pluginInjectionApi, isNestingMediaOrCodeblockSupported) {
317
+ var handleRichTextWithAnalytics = exports.handleRichTextWithAnalytics = function handleRichTextWithAnalytics(view, event, slice, pluginInjectionApi) {
318
318
  var _pluginInjectionApi$a4, _pluginInjectionApi$c4;
319
319
  return injectAnalyticsPayloadBeforeCommand(pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$a4 = pluginInjectionApi.analytics) === null || _pluginInjectionApi$a4 === void 0 ? void 0 : _pluginInjectionApi$a4.actions)(createPasteAnalyticsPayloadBySelection(event, slice, {
320
320
  type: _analytics.PasteTypes.richText
321
- }, pluginInjectionApi))((0, _handlers.handleRichText)(slice, pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$c4 = pluginInjectionApi.card) === null || _pluginInjectionApi$c4 === void 0 || (_pluginInjectionApi$c4 = _pluginInjectionApi$c4.actions) === null || _pluginInjectionApi$c4 === void 0 ? void 0 : _pluginInjectionApi$c4.queueCardsFromChangedTr, isNestingMediaOrCodeblockSupported));
321
+ }, pluginInjectionApi))((0, _handlers.handleRichText)(slice, pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$c4 = pluginInjectionApi.card) === null || _pluginInjectionApi$c4 === void 0 || (_pluginInjectionApi$c4 = _pluginInjectionApi$c4.actions) === null || _pluginInjectionApi$c4 === void 0 ? void 0 : _pluginInjectionApi$c4.queueCardsFromChangedTr));
322
322
  };
323
323
  var injectAnalyticsPayloadBeforeCommand = function injectAnalyticsPayloadBeforeCommand(editorAnalyticsAPI) {
324
324
  return function (createPayloadByTransaction) {
@@ -406,7 +406,7 @@ function createPlugin(schema, dispatchAnalyticsEvent, dispatch, featureFlags, pl
406
406
 
407
407
  // finally, handle rich-text copy-paste
408
408
  if (isRichText || isNestedMarkdownTable) {
409
- var _pluginInjectionApi$c2, _pluginInjectionApi$e2, _pluginInjectionApi$f, _pluginInjectionApi$l, _pluginInjectionApi$f2;
409
+ var _pluginInjectionApi$c2, _pluginInjectionApi$e2, _pluginInjectionApi$f, _pluginInjectionApi$l;
410
410
  // linkify the text where possible
411
411
  slice = (0, _utils.linkifyContent)(state.schema)(slice);
412
412
  if ((0, _analytics2.handlePasteLinkOnSelectedTextWithAnalytics)(editorAnalyticsAPI)(view, event, slice, _analytics.PasteTypes.richText)(state, dispatch)) {
@@ -475,8 +475,7 @@ function createPlugin(schema, dispatchAnalyticsEvent, dispatch, featureFlags, pl
475
475
  if ((0, _analytics2.handlePasteNonNestableBlockNodesIntoListWithAnalytics)(editorAnalyticsAPI)(view, event, slice)(state, dispatch)) {
476
476
  return true;
477
477
  }
478
- var isNestingMediaOrCodeblockSupported = (pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$f2 = pluginInjectionApi.featureFlags) === null || _pluginInjectionApi$f2 === void 0 || (_pluginInjectionApi$f2 = _pluginInjectionApi$f2.sharedState.currentState()) === null || _pluginInjectionApi$f2 === void 0 ? void 0 : _pluginInjectionApi$f2.nestMediaAndCodeblockInQuote) || (0, _platformFeatureFlags.fg)('editor_nest_media_and_codeblock_in_quotes_jira');
479
- return (0, _analytics2.handleRichTextWithAnalytics)(view, event, slice, pluginInjectionApi, isNestingMediaOrCodeblockSupported)(state, dispatch);
478
+ return (0, _analytics2.handleRichTextWithAnalytics)(view, event, slice, pluginInjectionApi)(state, dispatch);
480
479
  }
481
480
  return false;
482
481
  },
@@ -507,6 +506,13 @@ function createPlugin(schema, dispatchAnalyticsEvent, dispatch, featureFlags, pl
507
506
  if ((0, _platformFeatureFlags.fg)('platform_editor_advanced_layouts_post_fix_patch_2')) {
508
507
  slice = (0, _transforms.transformSingleColumnLayout)(slice, schema);
509
508
  }
509
+
510
+ // Strip Legacy Content Macro (LCM) extensions on paste
511
+ if (
512
+ // eslint-disable-next-line @atlaskit/platform/no-preconditioning
513
+ (0, _platformFeatureFlags.fg)('platform_editor_legacy_content_macro') && !(0, _platformFeatureFlags.fg)('platform_editor_legacy_content_macro_insert')) {
514
+ slice = (0, _transforms.transformSliceToRemoveLegacyContentMacro)(slice, schema);
515
+ }
510
516
  return slice;
511
517
  },
512
518
  transformPastedHTML: function transformPastedHTML(html) {
@@ -44,7 +44,6 @@ var _utils3 = require("@atlaskit/editor-tables/utils");
44
44
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
45
45
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
46
46
  var _commands = require("../../editor-commands/commands");
47
- var _main = require("../main");
48
47
  var _pluginFactory = require("../plugin-factory");
49
48
  var _edgeCases = require("./edge-cases");
50
49
  var _lists = require("./edge-cases/lists");
@@ -971,11 +970,10 @@ function flattenNestedListInSlice(slice) {
971
970
  var contentWithFlattenedList = slice.content.replaceChild(0, listToFlatten.type.createChecked(listToFlatten.attrs, leafListItems));
972
971
  return new _model.Slice(contentWithFlattenedList, slice.openEnd, slice.openEnd);
973
972
  }
974
- function handleRichText(slice, queueCardsFromChangedTr, isNestingMediaOrCodeblockSupported) {
973
+ function handleRichText(slice, queueCardsFromChangedTr) {
975
974
  return function (state, dispatch) {
976
975
  var _slice$content, _slice$content2, _firstChildOfSlice$ty, _lastChildOfSlice$typ, _panelParentOverCurre;
977
976
  var _state$schema$nodes4 = state.schema.nodes,
978
- blockquote = _state$schema$nodes4.blockquote,
979
977
  codeBlock = _state$schema$nodes4.codeBlock,
980
978
  heading = _state$schema$nodes4.heading,
981
979
  paragraph = _state$schema$nodes4.paragraph,
@@ -1010,25 +1008,12 @@ function handleRichText(slice, queueCardsFromChangedTr, isNestingMediaOrCodebloc
1010
1008
  var noNeedForSafeInsert = selection.$to.node().type.validContent(slice.content) || textNodes.includes(selection.$to.node().type) && selectionParent.type.validContent(slice.content);
1011
1009
  var panelParentOverCurrentSelection = (0, _utils2.findParentNodeOfType)(panel)(tr.selection);
1012
1010
  var isTargetPanelEmpty = panelParentOverCurrentSelection && ((_panelParentOverCurre = panelParentOverCurrentSelection.node) === null || _panelParentOverCurre === void 0 ? void 0 : _panelParentOverCurre.content.size) === 2;
1013
- var sliceContainsCodeblockOrMedia = false;
1014
- var codeBlockAndMediaNodes = ['codeBlock', 'mediaSingle', 'mediaGroup'];
1015
- slice.content.forEach(function (child) {
1016
- if (codeBlockAndMediaNodes.includes(child.type.name)) {
1017
- sliceContainsCodeblockOrMedia = true;
1018
- }
1019
- });
1020
- var blockquoteNode = (0, _utils2.findParentNodeOfType)(blockquote)(tr.selection);
1021
1011
  if (!isSliceContentTaskListNodes && (isSliceContentListNodes || isTargetPanelEmpty)) {
1022
1012
  (0, _edgeCases.insertSliceForLists)({
1023
1013
  tr: tr,
1024
1014
  slice: slice,
1025
1015
  schema: schema
1026
1016
  });
1027
- } else if (
1028
- // If nesting media or codeblock in blockquote is not supported
1029
- // we want to insert slice after the blockquote.
1030
- (0, _main.isInsideBlockQuote)(state) && sliceContainsCodeblockOrMedia && !isNestingMediaOrCodeblockSupported && blockquoteNode) {
1031
- tr = (0, _utils2.safeInsert)(slice.content, blockquoteNode.start + blockquoteNode.node.nodeSize - 1)(tr);
1032
1017
  } else if (noNeedForSafeInsert) {
1033
1018
  var _firstChildOfSlice$ty2, _firstChildOfSlice$co, _firstChildOfSlice$co2;
1034
1019
  if ((firstChildOfSlice === null || firstChildOfSlice === void 0 || (_firstChildOfSlice$ty2 = firstChildOfSlice.type) === null || _firstChildOfSlice$ty2 === void 0 ? void 0 : _firstChildOfSlice$ty2.name) === 'blockquote' && firstChildOfSlice !== null && firstChildOfSlice !== void 0 && (_firstChildOfSlice$co = firstChildOfSlice.content.firstChild) !== null && _firstChildOfSlice$co !== void 0 && _firstChildOfSlice$co.type.name && ['bulletList', 'orderedList', 'mediaSingle'].includes(firstChildOfSlice === null || firstChildOfSlice === void 0 || (_firstChildOfSlice$co2 = firstChildOfSlice.content.firstChild) === null || _firstChildOfSlice$co2 === void 0 ? void 0 : _firstChildOfSlice$co2.type.name)) {
@@ -291,11 +291,11 @@ export const handleMarkdownWithAnalytics = (view, event, slice, pluginInjectionA
291
291
  type: PasteTypes.markdown
292
292
  }))(handleMarkdown(slice, pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : (_pluginInjectionApi$c5 = pluginInjectionApi.card) === null || _pluginInjectionApi$c5 === void 0 ? void 0 : (_pluginInjectionApi$c6 = _pluginInjectionApi$c5.actions) === null || _pluginInjectionApi$c6 === void 0 ? void 0 : _pluginInjectionApi$c6.queueCardsFromChangedTr));
293
293
  };
294
- export const handleRichTextWithAnalytics = (view, event, slice, pluginInjectionApi, isNestingMediaOrCodeblockSupported) => {
294
+ export const handleRichTextWithAnalytics = (view, event, slice, pluginInjectionApi) => {
295
295
  var _pluginInjectionApi$a4, _pluginInjectionApi$c7, _pluginInjectionApi$c8;
296
296
  return injectAnalyticsPayloadBeforeCommand(pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : (_pluginInjectionApi$a4 = pluginInjectionApi.analytics) === null || _pluginInjectionApi$a4 === void 0 ? void 0 : _pluginInjectionApi$a4.actions)(createPasteAnalyticsPayloadBySelection(event, slice, {
297
297
  type: PasteTypes.richText
298
- }, pluginInjectionApi))(handleRichText(slice, pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : (_pluginInjectionApi$c7 = pluginInjectionApi.card) === null || _pluginInjectionApi$c7 === void 0 ? void 0 : (_pluginInjectionApi$c8 = _pluginInjectionApi$c7.actions) === null || _pluginInjectionApi$c8 === void 0 ? void 0 : _pluginInjectionApi$c8.queueCardsFromChangedTr, isNestingMediaOrCodeblockSupported));
298
+ }, pluginInjectionApi))(handleRichText(slice, pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : (_pluginInjectionApi$c7 = pluginInjectionApi.card) === null || _pluginInjectionApi$c7 === void 0 ? void 0 : (_pluginInjectionApi$c8 = _pluginInjectionApi$c7.actions) === null || _pluginInjectionApi$c8 === void 0 ? void 0 : _pluginInjectionApi$c8.queueCardsFromChangedTr));
299
299
  };
300
300
  const injectAnalyticsPayloadBeforeCommand = editorAnalyticsAPI => createPayloadByTransaction => {
301
301
  return mainCommand => {
@@ -6,7 +6,7 @@ import { getExtensionAutoConvertersFromProvider } from '@atlaskit/editor-common/
6
6
  import { isPastedFile as isPastedFileFromEvent, md } from '@atlaskit/editor-common/paste';
7
7
  import { measureRender } from '@atlaskit/editor-common/performance/measure-render';
8
8
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
9
- import { transformSingleLineCodeBlockToCodeMark, transformSingleColumnLayout, transformSliceNestedExpandToExpand, transformSliceToDecisionList, transformSliceToJoinAdjacentCodeBlocks } from '@atlaskit/editor-common/transforms';
9
+ import { transformSingleLineCodeBlockToCodeMark, transformSingleColumnLayout, transformSliceNestedExpandToExpand, transformSliceToDecisionList, transformSliceToJoinAdjacentCodeBlocks, transformSliceToRemoveLegacyContentMacro } from '@atlaskit/editor-common/transforms';
10
10
  import { containsAnyAnnotations, extractSliceFromStep, linkifyContent, mapChildren } from '@atlaskit/editor-common/utils';
11
11
  import { MarkdownTransformer } from '@atlaskit/editor-markdown-transformer';
12
12
  import { Fragment, Slice } from '@atlaskit/editor-prosemirror/model';
@@ -382,7 +382,7 @@ export function createPlugin(schema, dispatchAnalyticsEvent, dispatch, featureFl
382
382
 
383
383
  // finally, handle rich-text copy-paste
384
384
  if (isRichText || isNestedMarkdownTable) {
385
- var _pluginInjectionApi$c3, _pluginInjectionApi$c4, _pluginInjectionApi$e3, _pluginInjectionApi$e4, _pluginInjectionApi$f, _pluginInjectionApi$f2, _pluginInjectionApi$l, _pluginInjectionApi$f3, _pluginInjectionApi$f4;
385
+ var _pluginInjectionApi$c3, _pluginInjectionApi$c4, _pluginInjectionApi$e3, _pluginInjectionApi$e4, _pluginInjectionApi$f, _pluginInjectionApi$f2, _pluginInjectionApi$l;
386
386
  // linkify the text where possible
387
387
  slice = linkifyContent(state.schema)(slice);
388
388
  if (handlePasteLinkOnSelectedTextWithAnalytics(editorAnalyticsAPI)(view, event, slice, PasteTypes.richText)(state, dispatch)) {
@@ -449,8 +449,7 @@ export function createPlugin(schema, dispatchAnalyticsEvent, dispatch, featureFl
449
449
  if (handlePasteNonNestableBlockNodesIntoListWithAnalytics(editorAnalyticsAPI)(view, event, slice)(state, dispatch)) {
450
450
  return true;
451
451
  }
452
- const isNestingMediaOrCodeblockSupported = (pluginInjectionApi === null || pluginInjectionApi === void 0 ? void 0 : (_pluginInjectionApi$f3 = pluginInjectionApi.featureFlags) === null || _pluginInjectionApi$f3 === void 0 ? void 0 : (_pluginInjectionApi$f4 = _pluginInjectionApi$f3.sharedState.currentState()) === null || _pluginInjectionApi$f4 === void 0 ? void 0 : _pluginInjectionApi$f4.nestMediaAndCodeblockInQuote) || fg('editor_nest_media_and_codeblock_in_quotes_jira');
453
- return handleRichTextWithAnalytics(view, event, slice, pluginInjectionApi, isNestingMediaOrCodeblockSupported)(state, dispatch);
452
+ return handleRichTextWithAnalytics(view, event, slice, pluginInjectionApi)(state, dispatch);
454
453
  }
455
454
  return false;
456
455
  },
@@ -481,6 +480,13 @@ export function createPlugin(schema, dispatchAnalyticsEvent, dispatch, featureFl
481
480
  if (fg('platform_editor_advanced_layouts_post_fix_patch_2')) {
482
481
  slice = transformSingleColumnLayout(slice, schema);
483
482
  }
483
+
484
+ // Strip Legacy Content Macro (LCM) extensions on paste
485
+ if (
486
+ // eslint-disable-next-line @atlaskit/platform/no-preconditioning
487
+ fg('platform_editor_legacy_content_macro') && !fg('platform_editor_legacy_content_macro_insert')) {
488
+ slice = transformSliceToRemoveLegacyContentMacro(slice, schema);
489
+ }
484
490
  return slice;
485
491
  },
486
492
  transformPastedHTML(html) {
@@ -15,7 +15,6 @@ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
15
15
  // TODO: ED-20519 Needs Macro extraction
16
16
 
17
17
  import { startTrackingPastedMacroPositions, stopTrackingPastedMacroPositions } from '../../editor-commands/commands';
18
- import { isInsideBlockQuote } from '../main';
19
18
  import { getPluginState as getPastePluginState } from '../plugin-factory';
20
19
  import { insertSliceForLists, insertSliceForTaskInsideList, insertSliceInsideBlockquote, updateSelectionAfterReplace } from './edge-cases';
21
20
  import { insertSliceInsideOfPanelNodeSelected } from './edge-cases/lists';
@@ -951,11 +950,10 @@ export function flattenNestedListInSlice(slice) {
951
950
  const contentWithFlattenedList = slice.content.replaceChild(0, listToFlatten.type.createChecked(listToFlatten.attrs, leafListItems));
952
951
  return new Slice(contentWithFlattenedList, slice.openEnd, slice.openEnd);
953
952
  }
954
- export function handleRichText(slice, queueCardsFromChangedTr, isNestingMediaOrCodeblockSupported) {
953
+ export function handleRichText(slice, queueCardsFromChangedTr) {
955
954
  return (state, dispatch) => {
956
955
  var _slice$content, _slice$content2, _firstChildOfSlice$ty, _lastChildOfSlice$typ, _panelParentOverCurre;
957
956
  const {
958
- blockquote,
959
957
  codeBlock,
960
958
  heading,
961
959
  paragraph,
@@ -993,25 +991,12 @@ export function handleRichText(slice, queueCardsFromChangedTr, isNestingMediaOrC
993
991
  const noNeedForSafeInsert = selection.$to.node().type.validContent(slice.content) || textNodes.includes(selection.$to.node().type) && selectionParent.type.validContent(slice.content);
994
992
  const panelParentOverCurrentSelection = findParentNodeOfType(panel)(tr.selection);
995
993
  const isTargetPanelEmpty = panelParentOverCurrentSelection && ((_panelParentOverCurre = panelParentOverCurrentSelection.node) === null || _panelParentOverCurre === void 0 ? void 0 : _panelParentOverCurre.content.size) === 2;
996
- let sliceContainsCodeblockOrMedia = false;
997
- const codeBlockAndMediaNodes = ['codeBlock', 'mediaSingle', 'mediaGroup'];
998
- slice.content.forEach(child => {
999
- if (codeBlockAndMediaNodes.includes(child.type.name)) {
1000
- sliceContainsCodeblockOrMedia = true;
1001
- }
1002
- });
1003
- const blockquoteNode = findParentNodeOfType(blockquote)(tr.selection);
1004
994
  if (!isSliceContentTaskListNodes && (isSliceContentListNodes || isTargetPanelEmpty)) {
1005
995
  insertSliceForLists({
1006
996
  tr,
1007
997
  slice,
1008
998
  schema
1009
999
  });
1010
- } else if (
1011
- // If nesting media or codeblock in blockquote is not supported
1012
- // we want to insert slice after the blockquote.
1013
- isInsideBlockQuote(state) && sliceContainsCodeblockOrMedia && !isNestingMediaOrCodeblockSupported && blockquoteNode) {
1014
- tr = safeInsert(slice.content, blockquoteNode.start + blockquoteNode.node.nodeSize - 1)(tr);
1015
1000
  } else if (noNeedForSafeInsert) {
1016
1001
  var _firstChildOfSlice$ty2, _firstChildOfSlice$co, _firstChildOfSlice$co2;
1017
1002
  if ((firstChildOfSlice === null || firstChildOfSlice === void 0 ? void 0 : (_firstChildOfSlice$ty2 = firstChildOfSlice.type) === null || _firstChildOfSlice$ty2 === void 0 ? void 0 : _firstChildOfSlice$ty2.name) === 'blockquote' && firstChildOfSlice !== null && firstChildOfSlice !== void 0 && (_firstChildOfSlice$co = firstChildOfSlice.content.firstChild) !== null && _firstChildOfSlice$co !== void 0 && _firstChildOfSlice$co.type.name && ['bulletList', 'orderedList', 'mediaSingle'].includes(firstChildOfSlice === null || firstChildOfSlice === void 0 ? void 0 : (_firstChildOfSlice$co2 = firstChildOfSlice.content.firstChild) === null || _firstChildOfSlice$co2 === void 0 ? void 0 : _firstChildOfSlice$co2.type.name)) {
@@ -302,11 +302,11 @@ export var handleMarkdownWithAnalytics = function handleMarkdownWithAnalytics(vi
302
302
  type: PasteTypes.markdown
303
303
  }))(handleMarkdown(slice, pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$c3 = pluginInjectionApi.card) === null || _pluginInjectionApi$c3 === void 0 || (_pluginInjectionApi$c3 = _pluginInjectionApi$c3.actions) === null || _pluginInjectionApi$c3 === void 0 ? void 0 : _pluginInjectionApi$c3.queueCardsFromChangedTr));
304
304
  };
305
- export var handleRichTextWithAnalytics = function handleRichTextWithAnalytics(view, event, slice, pluginInjectionApi, isNestingMediaOrCodeblockSupported) {
305
+ export var handleRichTextWithAnalytics = function handleRichTextWithAnalytics(view, event, slice, pluginInjectionApi) {
306
306
  var _pluginInjectionApi$a4, _pluginInjectionApi$c4;
307
307
  return injectAnalyticsPayloadBeforeCommand(pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$a4 = pluginInjectionApi.analytics) === null || _pluginInjectionApi$a4 === void 0 ? void 0 : _pluginInjectionApi$a4.actions)(createPasteAnalyticsPayloadBySelection(event, slice, {
308
308
  type: PasteTypes.richText
309
- }, pluginInjectionApi))(handleRichText(slice, pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$c4 = pluginInjectionApi.card) === null || _pluginInjectionApi$c4 === void 0 || (_pluginInjectionApi$c4 = _pluginInjectionApi$c4.actions) === null || _pluginInjectionApi$c4 === void 0 ? void 0 : _pluginInjectionApi$c4.queueCardsFromChangedTr, isNestingMediaOrCodeblockSupported));
309
+ }, pluginInjectionApi))(handleRichText(slice, pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$c4 = pluginInjectionApi.card) === null || _pluginInjectionApi$c4 === void 0 || (_pluginInjectionApi$c4 = _pluginInjectionApi$c4.actions) === null || _pluginInjectionApi$c4 === void 0 ? void 0 : _pluginInjectionApi$c4.queueCardsFromChangedTr));
310
310
  };
311
311
  var injectAnalyticsPayloadBeforeCommand = function injectAnalyticsPayloadBeforeCommand(editorAnalyticsAPI) {
312
312
  return function (createPayloadByTransaction) {
@@ -8,7 +8,7 @@ import { getExtensionAutoConvertersFromProvider } from '@atlaskit/editor-common/
8
8
  import { isPastedFile as isPastedFileFromEvent, md } from '@atlaskit/editor-common/paste';
9
9
  import { measureRender } from '@atlaskit/editor-common/performance/measure-render';
10
10
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
11
- import { transformSingleLineCodeBlockToCodeMark, transformSingleColumnLayout, transformSliceNestedExpandToExpand, transformSliceToDecisionList, transformSliceToJoinAdjacentCodeBlocks } from '@atlaskit/editor-common/transforms';
11
+ import { transformSingleLineCodeBlockToCodeMark, transformSingleColumnLayout, transformSliceNestedExpandToExpand, transformSliceToDecisionList, transformSliceToJoinAdjacentCodeBlocks, transformSliceToRemoveLegacyContentMacro } from '@atlaskit/editor-common/transforms';
12
12
  import { containsAnyAnnotations, extractSliceFromStep, linkifyContent, mapChildren } from '@atlaskit/editor-common/utils';
13
13
  import { MarkdownTransformer } from '@atlaskit/editor-markdown-transformer';
14
14
  import { Fragment, Slice } from '@atlaskit/editor-prosemirror/model';
@@ -398,7 +398,7 @@ export function createPlugin(schema, dispatchAnalyticsEvent, dispatch, featureFl
398
398
 
399
399
  // finally, handle rich-text copy-paste
400
400
  if (isRichText || isNestedMarkdownTable) {
401
- var _pluginInjectionApi$c2, _pluginInjectionApi$e2, _pluginInjectionApi$f, _pluginInjectionApi$l, _pluginInjectionApi$f2;
401
+ var _pluginInjectionApi$c2, _pluginInjectionApi$e2, _pluginInjectionApi$f, _pluginInjectionApi$l;
402
402
  // linkify the text where possible
403
403
  slice = linkifyContent(state.schema)(slice);
404
404
  if (handlePasteLinkOnSelectedTextWithAnalytics(editorAnalyticsAPI)(view, event, slice, PasteTypes.richText)(state, dispatch)) {
@@ -467,8 +467,7 @@ export function createPlugin(schema, dispatchAnalyticsEvent, dispatch, featureFl
467
467
  if (handlePasteNonNestableBlockNodesIntoListWithAnalytics(editorAnalyticsAPI)(view, event, slice)(state, dispatch)) {
468
468
  return true;
469
469
  }
470
- var isNestingMediaOrCodeblockSupported = (pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$f2 = pluginInjectionApi.featureFlags) === null || _pluginInjectionApi$f2 === void 0 || (_pluginInjectionApi$f2 = _pluginInjectionApi$f2.sharedState.currentState()) === null || _pluginInjectionApi$f2 === void 0 ? void 0 : _pluginInjectionApi$f2.nestMediaAndCodeblockInQuote) || fg('editor_nest_media_and_codeblock_in_quotes_jira');
471
- return handleRichTextWithAnalytics(view, event, slice, pluginInjectionApi, isNestingMediaOrCodeblockSupported)(state, dispatch);
470
+ return handleRichTextWithAnalytics(view, event, slice, pluginInjectionApi)(state, dispatch);
472
471
  }
473
472
  return false;
474
473
  },
@@ -499,6 +498,13 @@ export function createPlugin(schema, dispatchAnalyticsEvent, dispatch, featureFl
499
498
  if (fg('platform_editor_advanced_layouts_post_fix_patch_2')) {
500
499
  slice = transformSingleColumnLayout(slice, schema);
501
500
  }
501
+
502
+ // Strip Legacy Content Macro (LCM) extensions on paste
503
+ if (
504
+ // eslint-disable-next-line @atlaskit/platform/no-preconditioning
505
+ fg('platform_editor_legacy_content_macro') && !fg('platform_editor_legacy_content_macro_insert')) {
506
+ slice = transformSliceToRemoveLegacyContentMacro(slice, schema);
507
+ }
502
508
  return slice;
503
509
  },
504
510
  transformPastedHTML: function transformPastedHTML(html) {
@@ -23,7 +23,6 @@ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
23
23
  // TODO: ED-20519 Needs Macro extraction
24
24
 
25
25
  import { startTrackingPastedMacroPositions, stopTrackingPastedMacroPositions } from '../../editor-commands/commands';
26
- import { isInsideBlockQuote } from '../main';
27
26
  import { getPluginState as getPastePluginState } from '../plugin-factory';
28
27
  import { insertSliceForLists, insertSliceForTaskInsideList, insertSliceInsideBlockquote, updateSelectionAfterReplace } from './edge-cases';
29
28
  import { insertSliceInsideOfPanelNodeSelected } from './edge-cases/lists';
@@ -945,11 +944,10 @@ export function flattenNestedListInSlice(slice) {
945
944
  var contentWithFlattenedList = slice.content.replaceChild(0, listToFlatten.type.createChecked(listToFlatten.attrs, leafListItems));
946
945
  return new Slice(contentWithFlattenedList, slice.openEnd, slice.openEnd);
947
946
  }
948
- export function handleRichText(slice, queueCardsFromChangedTr, isNestingMediaOrCodeblockSupported) {
947
+ export function handleRichText(slice, queueCardsFromChangedTr) {
949
948
  return function (state, dispatch) {
950
949
  var _slice$content, _slice$content2, _firstChildOfSlice$ty, _lastChildOfSlice$typ, _panelParentOverCurre;
951
950
  var _state$schema$nodes4 = state.schema.nodes,
952
- blockquote = _state$schema$nodes4.blockquote,
953
951
  codeBlock = _state$schema$nodes4.codeBlock,
954
952
  heading = _state$schema$nodes4.heading,
955
953
  paragraph = _state$schema$nodes4.paragraph,
@@ -984,25 +982,12 @@ export function handleRichText(slice, queueCardsFromChangedTr, isNestingMediaOrC
984
982
  var noNeedForSafeInsert = selection.$to.node().type.validContent(slice.content) || textNodes.includes(selection.$to.node().type) && selectionParent.type.validContent(slice.content);
985
983
  var panelParentOverCurrentSelection = findParentNodeOfType(panel)(tr.selection);
986
984
  var isTargetPanelEmpty = panelParentOverCurrentSelection && ((_panelParentOverCurre = panelParentOverCurrentSelection.node) === null || _panelParentOverCurre === void 0 ? void 0 : _panelParentOverCurre.content.size) === 2;
987
- var sliceContainsCodeblockOrMedia = false;
988
- var codeBlockAndMediaNodes = ['codeBlock', 'mediaSingle', 'mediaGroup'];
989
- slice.content.forEach(function (child) {
990
- if (codeBlockAndMediaNodes.includes(child.type.name)) {
991
- sliceContainsCodeblockOrMedia = true;
992
- }
993
- });
994
- var blockquoteNode = findParentNodeOfType(blockquote)(tr.selection);
995
985
  if (!isSliceContentTaskListNodes && (isSliceContentListNodes || isTargetPanelEmpty)) {
996
986
  insertSliceForLists({
997
987
  tr: tr,
998
988
  slice: slice,
999
989
  schema: schema
1000
990
  });
1001
- } else if (
1002
- // If nesting media or codeblock in blockquote is not supported
1003
- // we want to insert slice after the blockquote.
1004
- isInsideBlockQuote(state) && sliceContainsCodeblockOrMedia && !isNestingMediaOrCodeblockSupported && blockquoteNode) {
1005
- tr = safeInsert(slice.content, blockquoteNode.start + blockquoteNode.node.nodeSize - 1)(tr);
1006
991
  } else if (noNeedForSafeInsert) {
1007
992
  var _firstChildOfSlice$ty2, _firstChildOfSlice$co, _firstChildOfSlice$co2;
1008
993
  if ((firstChildOfSlice === null || firstChildOfSlice === void 0 || (_firstChildOfSlice$ty2 = firstChildOfSlice.type) === null || _firstChildOfSlice$ty2 === void 0 ? void 0 : _firstChildOfSlice$ty2.name) === 'blockquote' && firstChildOfSlice !== null && firstChildOfSlice !== void 0 && (_firstChildOfSlice$co = firstChildOfSlice.content.firstChild) !== null && _firstChildOfSlice$co !== void 0 && _firstChildOfSlice$co.type.name && ['bulletList', 'orderedList', 'mediaSingle'].includes(firstChildOfSlice === null || firstChildOfSlice === void 0 || (_firstChildOfSlice$co2 = firstChildOfSlice.content.firstChild) === null || _firstChildOfSlice$co2 === void 0 ? void 0 : _firstChildOfSlice$co2.type.name)) {
@@ -28,7 +28,7 @@ export declare const handleCodeBlockWithAnalytics: (editorAnalyticsAPI: EditorAn
28
28
  export declare const handleMediaSingleWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => (view: EditorView, event: ClipboardEvent, slice: Slice, type: PasteType, insertMediaAsMediaSingle: InsertMediaAsMediaSingle | undefined) => Command;
29
29
  export declare const handlePastePreservingMarksWithAnalytics: (view: EditorView, event: ClipboardEvent, slice: Slice, type: PasteType, pluginInjectionApi: ExtractInjectionAPI<PastePlugin> | undefined) => Command;
30
30
  export declare const handleMarkdownWithAnalytics: (view: EditorView, event: ClipboardEvent, slice: Slice, pluginInjectionApi: ExtractInjectionAPI<PastePlugin> | undefined) => Command;
31
- export declare const handleRichTextWithAnalytics: (view: EditorView, event: ClipboardEvent, slice: Slice, pluginInjectionApi: ExtractInjectionAPI<PastePlugin> | undefined, isNestingMediaOrCodeblockSupported: boolean) => Command;
31
+ export declare const handleRichTextWithAnalytics: (view: EditorView, event: ClipboardEvent, slice: Slice, pluginInjectionApi: ExtractInjectionAPI<PastePlugin> | undefined) => Command;
32
32
  export declare const handlePastePanelOrDecisionIntoListWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => (view: EditorView, event: ClipboardEvent, slice: Slice, findRootParentListNode: FindRootParentListNode | undefined) => Command;
33
33
  export declare const handlePasteNonNestableBlockNodesIntoListWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => (view: EditorView, event: ClipboardEvent, slice: Slice) => Command;
34
34
  export declare const handleExpandWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined, isNestingExpandsSupported: boolean) => (view: EditorView, event: ClipboardEvent, slice: Slice) => Command;
@@ -52,7 +52,7 @@ export declare function handleParagraphBlockMarks(state: EditorState, slice: Sli
52
52
  * ┗━p -> "two"
53
53
  */
54
54
  export declare function flattenNestedListInSlice(slice: Slice): Slice;
55
- export declare function handleRichText(slice: Slice, queueCardsFromChangedTr: QueueCardsFromTransactionAction | undefined, isNestingMediaOrCodeblockSupported?: boolean): Command;
55
+ export declare function handleRichText(slice: Slice, queueCardsFromChangedTr: QueueCardsFromTransactionAction | undefined): Command;
56
56
  export declare function handlePasteIntoCaption(slice: Slice): Command;
57
57
  export declare const handleSelectedTable: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => (slice: Slice) => Command;
58
58
  export declare function checkTaskListInList(state: EditorState, slice: Slice): boolean;
@@ -28,7 +28,7 @@ export declare const handleCodeBlockWithAnalytics: (editorAnalyticsAPI: EditorAn
28
28
  export declare const handleMediaSingleWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => (view: EditorView, event: ClipboardEvent, slice: Slice, type: PasteType, insertMediaAsMediaSingle: InsertMediaAsMediaSingle | undefined) => Command;
29
29
  export declare const handlePastePreservingMarksWithAnalytics: (view: EditorView, event: ClipboardEvent, slice: Slice, type: PasteType, pluginInjectionApi: ExtractInjectionAPI<PastePlugin> | undefined) => Command;
30
30
  export declare const handleMarkdownWithAnalytics: (view: EditorView, event: ClipboardEvent, slice: Slice, pluginInjectionApi: ExtractInjectionAPI<PastePlugin> | undefined) => Command;
31
- export declare const handleRichTextWithAnalytics: (view: EditorView, event: ClipboardEvent, slice: Slice, pluginInjectionApi: ExtractInjectionAPI<PastePlugin> | undefined, isNestingMediaOrCodeblockSupported: boolean) => Command;
31
+ export declare const handleRichTextWithAnalytics: (view: EditorView, event: ClipboardEvent, slice: Slice, pluginInjectionApi: ExtractInjectionAPI<PastePlugin> | undefined) => Command;
32
32
  export declare const handlePastePanelOrDecisionIntoListWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => (view: EditorView, event: ClipboardEvent, slice: Slice, findRootParentListNode: FindRootParentListNode | undefined) => Command;
33
33
  export declare const handlePasteNonNestableBlockNodesIntoListWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => (view: EditorView, event: ClipboardEvent, slice: Slice) => Command;
34
34
  export declare const handleExpandWithAnalytics: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined, isNestingExpandsSupported: boolean) => (view: EditorView, event: ClipboardEvent, slice: Slice) => Command;
@@ -52,7 +52,7 @@ export declare function handleParagraphBlockMarks(state: EditorState, slice: Sli
52
52
  * ┗━p -> "two"
53
53
  */
54
54
  export declare function flattenNestedListInSlice(slice: Slice): Slice;
55
- export declare function handleRichText(slice: Slice, queueCardsFromChangedTr: QueueCardsFromTransactionAction | undefined, isNestingMediaOrCodeblockSupported?: boolean): Command;
55
+ export declare function handleRichText(slice: Slice, queueCardsFromChangedTr: QueueCardsFromTransactionAction | undefined): Command;
56
56
  export declare function handlePasteIntoCaption(slice: Slice): Command;
57
57
  export declare const handleSelectedTable: (editorAnalyticsAPI: EditorAnalyticsAPI | undefined) => (slice: Slice) => Command;
58
58
  export declare function checkTaskListInList(state: EditorState, slice: Slice): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-paste",
3
- "version": "2.1.2",
3
+ "version": "2.2.0",
4
4
  "description": "Paste plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -33,22 +33,22 @@
33
33
  "dependencies": {
34
34
  "@atlaskit/adf-schema": "^46.1.0",
35
35
  "@atlaskit/code": "^15.6.9",
36
- "@atlaskit/editor-common": "^99.7.0",
37
- "@atlaskit/editor-markdown-transformer": "^5.14.0",
38
- "@atlaskit/editor-plugin-analytics": "^1.11.0",
39
- "@atlaskit/editor-plugin-annotation": "^1.27.0",
40
- "@atlaskit/editor-plugin-better-type-history": "^1.10.0",
41
- "@atlaskit/editor-plugin-card": "^4.5.0",
42
- "@atlaskit/editor-plugin-feature-flags": "^1.2.0",
43
- "@atlaskit/editor-plugin-list": "^3.9.0",
44
- "@atlaskit/editor-plugin-media": "^1.44.0",
45
- "@atlaskit/editor-plugin-mentions": "^2.14.0",
46
- "@atlaskit/editor-prosemirror": "6.2.1",
47
- "@atlaskit/editor-tables": "^2.8.0",
36
+ "@atlaskit/editor-common": "^99.10.0",
37
+ "@atlaskit/editor-markdown-transformer": "^5.15.0",
38
+ "@atlaskit/editor-plugin-analytics": "^1.12.0",
39
+ "@atlaskit/editor-plugin-annotation": "^1.28.0",
40
+ "@atlaskit/editor-plugin-better-type-history": "^1.11.0",
41
+ "@atlaskit/editor-plugin-card": "^4.6.0",
42
+ "@atlaskit/editor-plugin-feature-flags": "^1.3.0",
43
+ "@atlaskit/editor-plugin-list": "^3.10.0",
44
+ "@atlaskit/editor-plugin-media": "^1.45.0",
45
+ "@atlaskit/editor-plugin-mentions": "^2.15.0",
46
+ "@atlaskit/editor-prosemirror": "7.0.0",
47
+ "@atlaskit/editor-tables": "^2.9.0",
48
48
  "@atlaskit/media-client": "^31.1.0",
49
49
  "@atlaskit/media-common": "^11.8.0",
50
50
  "@atlaskit/platform-feature-flags": "^1.0.0",
51
- "@atlaskit/tmp-editor-statsig": "^2.41.0",
51
+ "@atlaskit/tmp-editor-statsig": "^2.43.0",
52
52
  "@babel/runtime": "^7.0.0",
53
53
  "lodash": "^4.17.21",
54
54
  "uuid": "^3.1.0"
@@ -59,9 +59,9 @@
59
59
  },
60
60
  "devDependencies": {
61
61
  "@af/visual-regression": "*",
62
- "@atlaskit/editor-plugin-block-type": "^4.2.0",
63
- "@atlaskit/editor-plugin-history": "^1.3.0",
64
- "@atlaskit/editor-plugin-type-ahead": "^1.12.0",
62
+ "@atlaskit/editor-plugin-block-type": "^4.3.0",
63
+ "@atlaskit/editor-plugin-history": "^1.4.0",
64
+ "@atlaskit/editor-plugin-type-ahead": "^1.13.0",
65
65
  "@atlaskit/ssr": "*",
66
66
  "@atlaskit/visual-regression": "*",
67
67
  "@testing-library/react": "^13.4.0",
@@ -114,9 +114,6 @@
114
114
  "platform_editor_nest_nested_expand_in_expand_jira": {
115
115
  "type": "boolean"
116
116
  },
117
- "editor_nest_media_and_codeblock_in_quotes_jira": {
118
- "type": "boolean"
119
- },
120
117
  "platform_editor_use_nested_table_pm_nodes": {
121
118
  "type": "boolean"
122
119
  },
@@ -131,6 +128,12 @@
131
128
  },
132
129
  "platform_editor_fix_paste_action_item_in_list": {
133
130
  "type": "boolean"
131
+ },
132
+ "platform_editor_legacy_content_macro": {
133
+ "type": "boolean"
134
+ },
135
+ "platform_editor_legacy_content_macro_insert": {
136
+ "type": "boolean"
134
137
  }
135
138
  }
136
139
  }