@atlaskit/editor-plugin-card 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +15 -0
- package/CHANGELOG.md +1 -0
- package/LICENSE.md +13 -0
- package/README.md +7 -0
- package/dist/cjs/index.js +12 -0
- package/dist/cjs/messages.js +20 -0
- package/dist/cjs/nodeviews/blockCard.js +164 -0
- package/dist/cjs/nodeviews/datasource.js +173 -0
- package/dist/cjs/nodeviews/embedCard.js +398 -0
- package/dist/cjs/nodeviews/genericCard.js +118 -0
- package/dist/cjs/nodeviews/inlineCard.js +132 -0
- package/dist/cjs/plugin.js +138 -0
- package/dist/cjs/pm-plugins/actions.js +122 -0
- package/dist/cjs/pm-plugins/analytics/create-analytics-queue.js +48 -0
- package/dist/cjs/pm-plugins/analytics/events-from-tr.js +359 -0
- package/dist/cjs/pm-plugins/analytics/index.js +19 -0
- package/dist/cjs/pm-plugins/analytics/types.js +5 -0
- package/dist/cjs/pm-plugins/analytics/utils.js +178 -0
- package/dist/cjs/pm-plugins/doc.js +479 -0
- package/dist/cjs/pm-plugins/keymap.js +64 -0
- package/dist/cjs/pm-plugins/main.js +212 -0
- package/dist/cjs/pm-plugins/mountHyperlink.js +47 -0
- package/dist/cjs/pm-plugins/plugin-key.js +9 -0
- package/dist/cjs/pm-plugins/reducers.js +111 -0
- package/dist/cjs/pm-plugins/shouldReplaceLink.js +35 -0
- package/dist/cjs/pm-plugins/util/resolve.js +59 -0
- package/dist/cjs/pm-plugins/util/state.js +49 -0
- package/dist/cjs/toolbar.js +364 -0
- package/dist/cjs/types.js +5 -0
- package/dist/cjs/ui/DatasourceModal/ModalWithState.js +25 -0
- package/dist/cjs/ui/DatasourceModal/index.js +60 -0
- package/dist/cjs/ui/EditLinkToolbar.js +258 -0
- package/dist/cjs/ui/EditorSmartCardEvents.js +21 -0
- package/dist/cjs/ui/EditorSmartCardEventsNext.js +215 -0
- package/dist/cjs/ui/HyperlinkToolbarAppearance.js +174 -0
- package/dist/cjs/ui/LayoutButton/index.js +121 -0
- package/dist/cjs/ui/LayoutButton/types.js +5 -0
- package/dist/cjs/ui/LayoutButton/utils.js +19 -0
- package/dist/cjs/ui/LinkToolbarAppearance.js +152 -0
- package/dist/cjs/ui/ResizableEmbedCard.js +364 -0
- package/dist/cjs/ui/SmallerEditIcon.js +22 -0
- package/dist/cjs/utils.js +60 -0
- package/dist/cjs/version.json +5 -0
- package/dist/es2019/index.js +1 -0
- package/dist/es2019/messages.js +13 -0
- package/dist/es2019/nodeviews/blockCard.js +131 -0
- package/dist/es2019/nodeviews/datasource.js +137 -0
- package/dist/es2019/nodeviews/embedCard.js +370 -0
- package/dist/es2019/nodeviews/genericCard.js +92 -0
- package/dist/es2019/nodeviews/inlineCard.js +113 -0
- package/dist/es2019/plugin.js +129 -0
- package/dist/es2019/pm-plugins/actions.js +57 -0
- package/dist/es2019/pm-plugins/analytics/create-analytics-queue.js +38 -0
- package/dist/es2019/pm-plugins/analytics/events-from-tr.js +339 -0
- package/dist/es2019/pm-plugins/analytics/index.js +2 -0
- package/dist/es2019/pm-plugins/analytics/types.js +1 -0
- package/dist/es2019/pm-plugins/analytics/utils.js +160 -0
- package/dist/es2019/pm-plugins/doc.js +451 -0
- package/dist/es2019/pm-plugins/keymap.js +59 -0
- package/dist/es2019/pm-plugins/main.js +208 -0
- package/dist/es2019/pm-plugins/mountHyperlink.js +37 -0
- package/dist/es2019/pm-plugins/plugin-key.js +2 -0
- package/dist/es2019/pm-plugins/reducers.js +110 -0
- package/dist/es2019/pm-plugins/shouldReplaceLink.js +25 -0
- package/dist/es2019/pm-plugins/util/resolve.js +50 -0
- package/dist/es2019/pm-plugins/util/state.js +26 -0
- package/dist/es2019/toolbar.js +359 -0
- package/dist/es2019/types.js +1 -0
- package/dist/es2019/ui/DatasourceModal/ModalWithState.js +19 -0
- package/dist/es2019/ui/DatasourceModal/index.js +48 -0
- package/dist/es2019/ui/EditLinkToolbar.js +226 -0
- package/dist/es2019/ui/EditorSmartCardEvents.js +15 -0
- package/dist/es2019/ui/EditorSmartCardEventsNext.js +199 -0
- package/dist/es2019/ui/HyperlinkToolbarAppearance.js +86 -0
- package/dist/es2019/ui/LayoutButton/index.js +114 -0
- package/dist/es2019/ui/LayoutButton/types.js +1 -0
- package/dist/es2019/ui/LayoutButton/utils.js +15 -0
- package/dist/es2019/ui/LinkToolbarAppearance.js +118 -0
- package/dist/es2019/ui/ResizableEmbedCard.js +335 -0
- package/dist/es2019/ui/SmallerEditIcon.js +14 -0
- package/dist/es2019/utils.js +46 -0
- package/dist/es2019/version.json +5 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/messages.js +13 -0
- package/dist/esm/nodeviews/blockCard.js +156 -0
- package/dist/esm/nodeviews/datasource.js +165 -0
- package/dist/esm/nodeviews/embedCard.js +389 -0
- package/dist/esm/nodeviews/genericCard.js +111 -0
- package/dist/esm/nodeviews/inlineCard.js +124 -0
- package/dist/esm/plugin.js +130 -0
- package/dist/esm/pm-plugins/actions.js +102 -0
- package/dist/esm/pm-plugins/analytics/create-analytics-queue.js +41 -0
- package/dist/esm/pm-plugins/analytics/events-from-tr.js +350 -0
- package/dist/esm/pm-plugins/analytics/index.js +2 -0
- package/dist/esm/pm-plugins/analytics/types.js +1 -0
- package/dist/esm/pm-plugins/analytics/utils.js +160 -0
- package/dist/esm/pm-plugins/doc.js +460 -0
- package/dist/esm/pm-plugins/keymap.js +58 -0
- package/dist/esm/pm-plugins/main.js +199 -0
- package/dist/esm/pm-plugins/mountHyperlink.js +39 -0
- package/dist/esm/pm-plugins/plugin-key.js +2 -0
- package/dist/esm/pm-plugins/reducers.js +103 -0
- package/dist/esm/pm-plugins/shouldReplaceLink.js +29 -0
- package/dist/esm/pm-plugins/util/resolve.js +52 -0
- package/dist/esm/pm-plugins/util/state.js +40 -0
- package/dist/esm/toolbar.js +350 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/ui/DatasourceModal/ModalWithState.js +17 -0
- package/dist/esm/ui/DatasourceModal/index.js +49 -0
- package/dist/esm/ui/EditLinkToolbar.js +244 -0
- package/dist/esm/ui/EditorSmartCardEvents.js +14 -0
- package/dist/esm/ui/EditorSmartCardEventsNext.js +203 -0
- package/dist/esm/ui/HyperlinkToolbarAppearance.js +163 -0
- package/dist/esm/ui/LayoutButton/index.js +110 -0
- package/dist/esm/ui/LayoutButton/types.js +1 -0
- package/dist/esm/ui/LayoutButton/utils.js +12 -0
- package/dist/esm/ui/LinkToolbarAppearance.js +141 -0
- package/dist/esm/ui/ResizableEmbedCard.js +358 -0
- package/dist/esm/ui/SmallerEditIcon.js +14 -0
- package/dist/esm/utils.js +48 -0
- package/dist/esm/version.json +5 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/messages.d.ts +12 -0
- package/dist/types/nodeviews/blockCard.d.ts +26 -0
- package/dist/types/nodeviews/datasource.d.ts +42 -0
- package/dist/types/nodeviews/embedCard.d.ts +46 -0
- package/dist/types/nodeviews/genericCard.d.ts +37 -0
- package/dist/types/nodeviews/inlineCard.d.ts +23 -0
- package/dist/types/plugin.d.ts +24 -0
- package/dist/types/pm-plugins/actions.d.ts +23 -0
- package/dist/types/pm-plugins/analytics/create-analytics-queue.d.ts +10 -0
- package/dist/types/pm-plugins/analytics/events-from-tr.d.ts +17 -0
- package/dist/types/pm-plugins/analytics/index.d.ts +2 -0
- package/dist/types/pm-plugins/analytics/types.d.ts +12 -0
- package/dist/types/pm-plugins/analytics/utils.d.ts +32 -0
- package/dist/types/pm-plugins/doc.d.ts +22 -0
- package/dist/types/pm-plugins/keymap.d.ts +3 -0
- package/dist/types/pm-plugins/main.d.ts +6 -0
- package/dist/types/pm-plugins/mountHyperlink.d.ts +5 -0
- package/dist/types/pm-plugins/plugin-key.d.ts +3 -0
- package/dist/types/pm-plugins/reducers.d.ts +3 -0
- package/dist/types/pm-plugins/shouldReplaceLink.d.ts +2 -0
- package/dist/types/pm-plugins/util/resolve.d.ts +8 -0
- package/dist/types/pm-plugins/util/state.d.ts +31 -0
- package/dist/types/toolbar.d.ts +9 -0
- package/dist/types/types.d.ts +163 -0
- package/dist/types/ui/DatasourceModal/ModalWithState.d.ts +9 -0
- package/dist/types/ui/DatasourceModal/index.d.ts +11 -0
- package/dist/types/ui/EditLinkToolbar.d.ts +47 -0
- package/dist/types/ui/EditorSmartCardEvents.d.ts +5 -0
- package/dist/types/ui/EditorSmartCardEventsNext.d.ts +18 -0
- package/dist/types/ui/HyperlinkToolbarAppearance.d.ts +32 -0
- package/dist/types/ui/LayoutButton/index.d.ts +9 -0
- package/dist/types/ui/LayoutButton/types.d.ts +19 -0
- package/dist/types/ui/LayoutButton/utils.d.ts +5 -0
- package/dist/types/ui/LinkToolbarAppearance.d.ts +29 -0
- package/dist/types/ui/ResizableEmbedCard.d.ts +61 -0
- package/dist/types/ui/SmallerEditIcon.d.ts +3 -0
- package/dist/types/utils.d.ts +19 -0
- package/dist/types-ts4.5/index.d.ts +2 -0
- package/dist/types-ts4.5/messages.d.ts +12 -0
- package/dist/types-ts4.5/nodeviews/blockCard.d.ts +26 -0
- package/dist/types-ts4.5/nodeviews/datasource.d.ts +42 -0
- package/dist/types-ts4.5/nodeviews/embedCard.d.ts +46 -0
- package/dist/types-ts4.5/nodeviews/genericCard.d.ts +37 -0
- package/dist/types-ts4.5/nodeviews/inlineCard.d.ts +23 -0
- package/dist/types-ts4.5/plugin.d.ts +24 -0
- package/dist/types-ts4.5/pm-plugins/actions.d.ts +23 -0
- package/dist/types-ts4.5/pm-plugins/analytics/create-analytics-queue.d.ts +10 -0
- package/dist/types-ts4.5/pm-plugins/analytics/events-from-tr.d.ts +17 -0
- package/dist/types-ts4.5/pm-plugins/analytics/index.d.ts +2 -0
- package/dist/types-ts4.5/pm-plugins/analytics/types.d.ts +12 -0
- package/dist/types-ts4.5/pm-plugins/analytics/utils.d.ts +32 -0
- package/dist/types-ts4.5/pm-plugins/doc.d.ts +22 -0
- package/dist/types-ts4.5/pm-plugins/keymap.d.ts +3 -0
- package/dist/types-ts4.5/pm-plugins/main.d.ts +6 -0
- package/dist/types-ts4.5/pm-plugins/mountHyperlink.d.ts +5 -0
- package/dist/types-ts4.5/pm-plugins/plugin-key.d.ts +3 -0
- package/dist/types-ts4.5/pm-plugins/reducers.d.ts +3 -0
- package/dist/types-ts4.5/pm-plugins/shouldReplaceLink.d.ts +2 -0
- package/dist/types-ts4.5/pm-plugins/util/resolve.d.ts +8 -0
- package/dist/types-ts4.5/pm-plugins/util/state.d.ts +31 -0
- package/dist/types-ts4.5/toolbar.d.ts +9 -0
- package/dist/types-ts4.5/types.d.ts +163 -0
- package/dist/types-ts4.5/ui/DatasourceModal/ModalWithState.d.ts +9 -0
- package/dist/types-ts4.5/ui/DatasourceModal/index.d.ts +11 -0
- package/dist/types-ts4.5/ui/EditLinkToolbar.d.ts +47 -0
- package/dist/types-ts4.5/ui/EditorSmartCardEvents.d.ts +5 -0
- package/dist/types-ts4.5/ui/EditorSmartCardEventsNext.d.ts +18 -0
- package/dist/types-ts4.5/ui/HyperlinkToolbarAppearance.d.ts +32 -0
- package/dist/types-ts4.5/ui/LayoutButton/index.d.ts +9 -0
- package/dist/types-ts4.5/ui/LayoutButton/types.d.ts +19 -0
- package/dist/types-ts4.5/ui/LayoutButton/utils.d.ts +5 -0
- package/dist/types-ts4.5/ui/LinkToolbarAppearance.d.ts +29 -0
- package/dist/types-ts4.5/ui/ResizableEmbedCard.d.ts +61 -0
- package/dist/types-ts4.5/ui/SmallerEditIcon.d.ts +3 -0
- package/dist/types-ts4.5/utils.d.ts +19 -0
- package/package.json +126 -0
- package/report.api.md +146 -0
- package/tmp/api-report-tmp.d.ts +117 -0
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _typeof from "@babel/runtime/helpers/typeof";
|
|
3
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
4
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
5
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
|
+
import { AddMarkStep, RemoveMarkStep } from 'prosemirror-transform';
|
|
7
|
+
import { LinkMetaStep } from '@atlaskit/adf-schema/steps';
|
|
8
|
+
import { ACTION } from '@atlaskit/editor-common/analytics';
|
|
9
|
+
import { getLinkMetadataFromTransaction } from '@atlaskit/editor-common/card';
|
|
10
|
+
import { isLinkMark, pmHistoryPluginKey } from '@atlaskit/editor-common/utils';
|
|
11
|
+
import { pluginKey } from '../plugin-key';
|
|
12
|
+
import { getPluginState } from '../util/state';
|
|
13
|
+
import { appearanceForLink, areSameLinks, findLinksAtPositions, getLinkNodeContext, getLinkUrl, isLink, linkObjectFromNode } from './utils';
|
|
14
|
+
var findLinksInNodeRange = function findLinksInNodeRange(doc, schema, from, to) {
|
|
15
|
+
var links = [];
|
|
16
|
+
doc.nodesBetween(from, to, function (node, pos) {
|
|
17
|
+
if (isLink(schema, node)) {
|
|
18
|
+
var entireLinkInRange = pos >= from && pos + node.nodeSize <= to;
|
|
19
|
+
if (entireLinkInRange) {
|
|
20
|
+
var link = linkObjectFromNode(doc, schema, node, pos);
|
|
21
|
+
if (link) {
|
|
22
|
+
links.push(link);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
return links;
|
|
28
|
+
};
|
|
29
|
+
export var findChangedLinks = function findChangedLinks(tr, state) {
|
|
30
|
+
var schema = tr.doc.type.schema;
|
|
31
|
+
var removed = [];
|
|
32
|
+
var inserted = [];
|
|
33
|
+
var updated = [];
|
|
34
|
+
var queuedForUpgrade = isTransactionQueuedForUpgrade(tr);
|
|
35
|
+
var isResolveReplace = isTransactionResolveReplace(tr);
|
|
36
|
+
|
|
37
|
+
// History
|
|
38
|
+
var historyMeta = tr.getMeta(pmHistoryPluginKey);
|
|
39
|
+
var isUndo = isHistoryMeta(historyMeta) && historyMeta.redo === false;
|
|
40
|
+
var isRedo = isHistoryMeta(historyMeta) && historyMeta.redo === true;
|
|
41
|
+
var isUpdate = isUpdateTr(tr, isUndo || isRedo);
|
|
42
|
+
var _loop = function _loop(i) {
|
|
43
|
+
var _tr$docs$i, _tr$docs;
|
|
44
|
+
var step = tr.steps[i];
|
|
45
|
+
var stepMap = step.getMap();
|
|
46
|
+
var removedInStep = [];
|
|
47
|
+
var insertedInStep = [];
|
|
48
|
+
var before = (_tr$docs$i = tr.docs[i]) !== null && _tr$docs$i !== void 0 ? _tr$docs$i : tr.before;
|
|
49
|
+
var after = (_tr$docs = tr.docs[i + 1]) !== null && _tr$docs !== void 0 ? _tr$docs : tr.doc;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* AddMarkStep and RemoveMarkSteps don't produce stepMap ranges
|
|
53
|
+
* because there are no "changed tokens" only marks added/removed
|
|
54
|
+
* So have to check these manually
|
|
55
|
+
*/
|
|
56
|
+
if (step instanceof AddMarkStep) {
|
|
57
|
+
var addMarkStep = step;
|
|
58
|
+
if (isLinkMark(addMarkStep.mark, schema)) {
|
|
59
|
+
/**
|
|
60
|
+
* For url text pasted on plain text
|
|
61
|
+
*/
|
|
62
|
+
insertedInStep.push({
|
|
63
|
+
type: 'mark',
|
|
64
|
+
pos: addMarkStep.from,
|
|
65
|
+
mark: addMarkStep.mark,
|
|
66
|
+
nodeContext: getLinkNodeContext(after, addMarkStep.from)
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (step instanceof RemoveMarkStep) {
|
|
71
|
+
var removeMarkStep = step;
|
|
72
|
+
if (isLinkMark(removeMarkStep.mark, schema)) {
|
|
73
|
+
removedInStep.push({
|
|
74
|
+
type: 'mark',
|
|
75
|
+
pos: removeMarkStep.from,
|
|
76
|
+
mark: removeMarkStep.mark,
|
|
77
|
+
nodeContext: getLinkNodeContext(before, removeMarkStep.from)
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
stepMap.forEach(function (oldStart, oldEnd, newStart, newEnd) {
|
|
82
|
+
var _tr$docs2;
|
|
83
|
+
var before = tr.docs[i];
|
|
84
|
+
var after = (_tr$docs2 = tr.docs[i + 1]) !== null && _tr$docs2 !== void 0 ? _tr$docs2 : tr.doc;
|
|
85
|
+
var removedInRange = [];
|
|
86
|
+
var insertedInRange = [];
|
|
87
|
+
|
|
88
|
+
// Removed
|
|
89
|
+
removedInRange.push.apply(removedInRange, _toConsumableArray(findLinksInNodeRange(before, schema, oldStart, oldEnd)));
|
|
90
|
+
// Inserted
|
|
91
|
+
insertedInRange.push.apply(insertedInRange, _toConsumableArray(findLinksInNodeRange(after, schema, newStart, newEnd)));
|
|
92
|
+
removedInStep.push.apply(removedInStep, removedInRange);
|
|
93
|
+
insertedInStep.push.apply(insertedInStep, insertedInRange);
|
|
94
|
+
});
|
|
95
|
+
var omitQueuedLinks = function omitQueuedLinks(links) {
|
|
96
|
+
if (!queuedForUpgrade) {
|
|
97
|
+
return links;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Skip/filter out links that have been queued, they will be tracked later
|
|
101
|
+
*/
|
|
102
|
+
var queuedPositions = getQueuedPositions(tr);
|
|
103
|
+
return links.filter(function (link) {
|
|
104
|
+
return !queuedPositions.includes(link.pos);
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Skip "deletions" when the transaction is relating to
|
|
110
|
+
* replacing links queued for upgrade to cards,
|
|
111
|
+
* because the "deleted" link has not actually been
|
|
112
|
+
* tracked as "created" yet
|
|
113
|
+
*/
|
|
114
|
+
if (!isResolveReplace) {
|
|
115
|
+
removed.push.apply(removed, removedInStep);
|
|
116
|
+
}
|
|
117
|
+
inserted.push.apply(inserted, _toConsumableArray(omitQueuedLinks(insertedInStep)));
|
|
118
|
+
};
|
|
119
|
+
for (var i = 0; i < tr.steps.length; i++) {
|
|
120
|
+
_loop(i);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* If there are no links changed but the transaction is a "resolve" action
|
|
125
|
+
* Then this means we have resolved a link but it has failed to upgrade
|
|
126
|
+
* We should track all resolved links as now being created
|
|
127
|
+
*/
|
|
128
|
+
if (inserted.length === 0 && isResolveReplace) {
|
|
129
|
+
var positions = getResolvePositions(tr, state);
|
|
130
|
+
inserted.push.apply(inserted, _toConsumableArray(findLinksAtPositions(tr, positions)));
|
|
131
|
+
}
|
|
132
|
+
if (!isUpdate) {
|
|
133
|
+
var _getLinkMetadataFromT = getLinkMetadataFromTransaction(tr),
|
|
134
|
+
inputMethod = _getLinkMetadataFromT.inputMethod;
|
|
135
|
+
/**
|
|
136
|
+
* If there is no identifiable input method, and the links inserted and removed appear to be the same,
|
|
137
|
+
* then this transaction likely is not intended to be consided to be the insertion and removal of links
|
|
138
|
+
*/
|
|
139
|
+
if (!inputMethod && areSameLinks(removed, inserted)) {
|
|
140
|
+
return {
|
|
141
|
+
removed: [],
|
|
142
|
+
inserted: [],
|
|
143
|
+
updated: updated
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
removed: removed,
|
|
148
|
+
inserted: inserted,
|
|
149
|
+
updated: updated
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
for (var _i = 0; _i < inserted.length; _i++) {
|
|
153
|
+
if (isResolveReplace) {
|
|
154
|
+
var newLink = inserted[_i];
|
|
155
|
+
|
|
156
|
+
// what is the 2nd argument 'assoc = -1' doing here exactly?
|
|
157
|
+
var mappedPos = tr.mapping.map(newLink.pos, -1);
|
|
158
|
+
var previousDisplay = getResolveLinkPrevDisplay(state, mappedPos);
|
|
159
|
+
updated.push({
|
|
160
|
+
inserted: inserted[_i],
|
|
161
|
+
previous: {
|
|
162
|
+
display: previousDisplay
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
if (inserted.length === removed.length) {
|
|
168
|
+
updated.push({
|
|
169
|
+
removed: removed[_i],
|
|
170
|
+
inserted: inserted[_i]
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
inserted: [],
|
|
176
|
+
removed: [],
|
|
177
|
+
updated: updated
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* List of actions to be considered link "updates"
|
|
183
|
+
*/
|
|
184
|
+
var UPDATE_ACTIONS = [ACTION.CHANGED_TYPE, ACTION.UPDATED];
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Returns true if the transaction has LinkMetaSteps that indicate the transaction is
|
|
188
|
+
* intended to be perceived as an update to links, rather than insertion+deletion
|
|
189
|
+
*/
|
|
190
|
+
var isUpdateTr = function isUpdateTr(tr, isUndoOrRedo) {
|
|
191
|
+
return !!tr.steps.find(function (step) {
|
|
192
|
+
if (!(step instanceof LinkMetaStep)) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
var _step$getMetadata = step.getMetadata(),
|
|
196
|
+
action = _step$getMetadata.action,
|
|
197
|
+
cardAction = _step$getMetadata.cardAction;
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Undo of a resolve step should be considered an update
|
|
201
|
+
* because the user is choosing to update the url back to the un-upgraded display
|
|
202
|
+
*/
|
|
203
|
+
if (cardAction === 'RESOLVE' && isUndoOrRedo) {
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
if (!action) {
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
return UPDATE_ACTIONS.includes(action);
|
|
210
|
+
});
|
|
211
|
+
};
|
|
212
|
+
var hasType = function hasType(pluginMeta) {
|
|
213
|
+
return _typeof(pluginMeta) === 'object' && pluginMeta !== null && 'type' in pluginMeta;
|
|
214
|
+
};
|
|
215
|
+
var isTransactionQueuedForUpgrade = function isTransactionQueuedForUpgrade(tr) {
|
|
216
|
+
var pluginMeta = tr.getMeta(pluginKey);
|
|
217
|
+
return isMetadataQueue(pluginMeta);
|
|
218
|
+
};
|
|
219
|
+
var isMetadataQueue = function isMetadataQueue(metaData) {
|
|
220
|
+
return hasType(metaData) && metaData.type === 'QUEUE';
|
|
221
|
+
};
|
|
222
|
+
var isTransactionResolveReplace = function isTransactionResolveReplace(tr) {
|
|
223
|
+
var pluginMeta = tr.getMeta(pluginKey);
|
|
224
|
+
return isMetadataResolve(pluginMeta);
|
|
225
|
+
};
|
|
226
|
+
var isMetadataResolve = function isMetadataResolve(metaData) {
|
|
227
|
+
return hasType(metaData) && metaData.type === 'RESOLVE';
|
|
228
|
+
};
|
|
229
|
+
var isHistoryMeta = function isHistoryMeta(meta) {
|
|
230
|
+
return _typeof(meta) === 'object' && meta !== null && 'redo' in meta;
|
|
231
|
+
};
|
|
232
|
+
var getQueuedPositions = function getQueuedPositions(tr) {
|
|
233
|
+
var pluginMeta = tr.getMeta(pluginKey);
|
|
234
|
+
if (!isMetadataQueue(pluginMeta)) {
|
|
235
|
+
return [];
|
|
236
|
+
}
|
|
237
|
+
return pluginMeta.requests.map(function (_ref) {
|
|
238
|
+
var pos = _ref.pos;
|
|
239
|
+
return pos;
|
|
240
|
+
});
|
|
241
|
+
};
|
|
242
|
+
var getResolvePositions = function getResolvePositions(tr, state) {
|
|
243
|
+
var cardState = getPluginState(state);
|
|
244
|
+
if (!cardState) {
|
|
245
|
+
return [];
|
|
246
|
+
}
|
|
247
|
+
var pluginMeta = tr.getMeta(pluginKey);
|
|
248
|
+
if (!isMetadataResolve(pluginMeta)) {
|
|
249
|
+
return [];
|
|
250
|
+
}
|
|
251
|
+
return cardState.requests.filter(function (request) {
|
|
252
|
+
return request.url === pluginMeta.url;
|
|
253
|
+
}).map(function (request) {
|
|
254
|
+
return request.pos;
|
|
255
|
+
});
|
|
256
|
+
};
|
|
257
|
+
var getResolveLinkPrevDisplay = function getResolveLinkPrevDisplay(state, pos) {
|
|
258
|
+
var _cardState$requests$f;
|
|
259
|
+
var cardState = getPluginState(state);
|
|
260
|
+
if (!cardState) {
|
|
261
|
+
return undefined;
|
|
262
|
+
}
|
|
263
|
+
return (_cardState$requests$f = cardState.requests.find(function (request) {
|
|
264
|
+
return request.pos === pos;
|
|
265
|
+
})) === null || _cardState$requests$f === void 0 ? void 0 : _cardState$requests$f.previousAppearance;
|
|
266
|
+
};
|
|
267
|
+
export function eventsFromTransaction(tr, state) {
|
|
268
|
+
var events = [];
|
|
269
|
+
try {
|
|
270
|
+
/**
|
|
271
|
+
* Skip transactions sent by collab (identified by 'isRemote' key)
|
|
272
|
+
* Skip entire document replace steps
|
|
273
|
+
* We are only concerned with transactions performed on the document directly by the user
|
|
274
|
+
*/
|
|
275
|
+
var isRemote = tr.getMeta('isRemote');
|
|
276
|
+
var isReplaceDocument = tr.getMeta('replaceDocument');
|
|
277
|
+
if (isRemote || isReplaceDocument) {
|
|
278
|
+
return events;
|
|
279
|
+
}
|
|
280
|
+
var historyMeta = tr.getMeta(pmHistoryPluginKey);
|
|
281
|
+
var isUndo = isHistoryMeta(historyMeta) && historyMeta.redo === false;
|
|
282
|
+
var isRedo = isHistoryMeta(historyMeta) && historyMeta.redo === true;
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Retrieve metadata from the LinkMetaStep(s) in the transaction
|
|
286
|
+
*/
|
|
287
|
+
var _getLinkMetadataFromT2 = getLinkMetadataFromTransaction(tr),
|
|
288
|
+
action = _getLinkMetadataFromT2.action,
|
|
289
|
+
inputMethod = _getLinkMetadataFromT2.inputMethod,
|
|
290
|
+
sourceEvent = _getLinkMetadataFromT2.sourceEvent;
|
|
291
|
+
var contextualData = {
|
|
292
|
+
action: action,
|
|
293
|
+
inputMethod: inputMethod,
|
|
294
|
+
sourceEvent: sourceEvent,
|
|
295
|
+
isUndo: isUndo,
|
|
296
|
+
isRedo: isRedo
|
|
297
|
+
};
|
|
298
|
+
var _findChangedLinks = findChangedLinks(tr, state),
|
|
299
|
+
removed = _findChangedLinks.removed,
|
|
300
|
+
inserted = _findChangedLinks.inserted,
|
|
301
|
+
updated = _findChangedLinks.updated;
|
|
302
|
+
var MAX_LINK_EVENTS = 50;
|
|
303
|
+
if ([removed, inserted, updated].some(function (arr) {
|
|
304
|
+
return arr.length > MAX_LINK_EVENTS;
|
|
305
|
+
})) {
|
|
306
|
+
return [];
|
|
307
|
+
}
|
|
308
|
+
for (var i = 0; i < updated.length; i++) {
|
|
309
|
+
var _update$previous$disp;
|
|
310
|
+
var update = updated[i];
|
|
311
|
+
var link = update.inserted;
|
|
312
|
+
var url = getLinkUrl(link);
|
|
313
|
+
var display = appearanceForLink(link);
|
|
314
|
+
var previousDisplay = 'removed' in update ? appearanceForLink(update.removed) : (_update$previous$disp = update.previous.display) !== null && _update$previous$disp !== void 0 ? _update$previous$disp : 'unknown';
|
|
315
|
+
if (url) {
|
|
316
|
+
events.push({
|
|
317
|
+
type: 'updated',
|
|
318
|
+
data: _objectSpread(_objectSpread({}, contextualData), {}, {
|
|
319
|
+
url: url,
|
|
320
|
+
display: display,
|
|
321
|
+
previousDisplay: previousDisplay,
|
|
322
|
+
nodeContext: link.nodeContext
|
|
323
|
+
})
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
var pushEvents = function pushEvents(links, type) {
|
|
328
|
+
for (var _i2 = 0; _i2 < links.length; _i2++) {
|
|
329
|
+
var _link = links[_i2];
|
|
330
|
+
var _url = getLinkUrl(_link);
|
|
331
|
+
var _display = appearanceForLink(_link);
|
|
332
|
+
if (_url) {
|
|
333
|
+
events.push({
|
|
334
|
+
type: type,
|
|
335
|
+
data: _objectSpread(_objectSpread({}, contextualData), {}, {
|
|
336
|
+
url: _url,
|
|
337
|
+
display: _display,
|
|
338
|
+
nodeContext: _link.nodeContext
|
|
339
|
+
})
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
pushEvents(removed, 'deleted');
|
|
345
|
+
pushEvents(inserted, 'created');
|
|
346
|
+
return events;
|
|
347
|
+
} catch (err) {
|
|
348
|
+
return events;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { isLinkMark } from '@atlaskit/editor-common/utils';
|
|
2
|
+
import { appearanceForNodeType } from '../../utils';
|
|
3
|
+
/**
|
|
4
|
+
* Whether a node is a "link" node, ie inline card, block card, embed card
|
|
5
|
+
* (but not a text node with a link mark)
|
|
6
|
+
*/
|
|
7
|
+
export function isLinkNode(node) {
|
|
8
|
+
return !!appearanceForNodeType(node.type);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Analytics appearance for link object
|
|
13
|
+
*/
|
|
14
|
+
export function appearanceForLink(link) {
|
|
15
|
+
if (link.type === 'node') {
|
|
16
|
+
var appearance = appearanceForNodeType(link.node.type);
|
|
17
|
+
if (appearance) {
|
|
18
|
+
return appearance;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return 'url';
|
|
22
|
+
}
|
|
23
|
+
var nodeHasLinkMark = function nodeHasLinkMark(schema, node) {
|
|
24
|
+
if (node.marks) {
|
|
25
|
+
for (var i = 0; i < node.marks.length; i++) {
|
|
26
|
+
var mark = node.marks[i];
|
|
27
|
+
if (isLinkMark(mark, schema)) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Determine if a node is considered to be a link
|
|
37
|
+
*/
|
|
38
|
+
export var isLink = function isLink(schema, node) {
|
|
39
|
+
if (isLinkNode(node)) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
return nodeHasLinkMark(schema, node);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Given a node, find all nodes and marks that are considered "links"
|
|
47
|
+
* @param state EditorState
|
|
48
|
+
* @param fragment Fragment to search
|
|
49
|
+
* @returns Array of nodes and marks found in the fragment that are "links"
|
|
50
|
+
*/
|
|
51
|
+
export function findLinksInNode(doc, schema, node, offset) {
|
|
52
|
+
var links = [];
|
|
53
|
+
node.descendants(function (node, pos) {
|
|
54
|
+
var nodeContext = getLinkNodeContext(doc, pos);
|
|
55
|
+
|
|
56
|
+
// Nodes
|
|
57
|
+
if (isLinkNode(node)) {
|
|
58
|
+
links.push({
|
|
59
|
+
type: 'node',
|
|
60
|
+
pos: pos + offset,
|
|
61
|
+
node: node,
|
|
62
|
+
nodeContext: nodeContext
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Marks
|
|
67
|
+
if (node.marks) {
|
|
68
|
+
for (var i = 0; i < node.marks.length; i++) {
|
|
69
|
+
var mark = node.marks[i];
|
|
70
|
+
if (isLinkMark(mark, schema)) {
|
|
71
|
+
links.push({
|
|
72
|
+
type: 'mark',
|
|
73
|
+
pos: pos + offset,
|
|
74
|
+
mark: mark,
|
|
75
|
+
nodeContext: nodeContext
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return links;
|
|
82
|
+
}
|
|
83
|
+
export function getLinkUrl(link) {
|
|
84
|
+
var _link$mark$attrs;
|
|
85
|
+
if (link.type === 'node') {
|
|
86
|
+
var _link$node$attrs;
|
|
87
|
+
return (_link$node$attrs = link.node.attrs) === null || _link$node$attrs === void 0 ? void 0 : _link$node$attrs.url;
|
|
88
|
+
}
|
|
89
|
+
return (_link$mark$attrs = link.mark.attrs) === null || _link$mark$attrs === void 0 ? void 0 : _link$mark$attrs.href;
|
|
90
|
+
}
|
|
91
|
+
export var getLinkNodeContext = function getLinkNodeContext(doc, pos) {
|
|
92
|
+
var $pos = doc.resolve(pos);
|
|
93
|
+
var maxDepth = 3;
|
|
94
|
+
for (var i = 0; i <= maxDepth; i++) {
|
|
95
|
+
var node = $pos.node($pos.depth - i);
|
|
96
|
+
if (node && node.type.name !== 'paragraph') {
|
|
97
|
+
return node.type.name;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return 'unknown';
|
|
101
|
+
};
|
|
102
|
+
export var linkObjectFromNode = function linkObjectFromNode(doc, schema, node, pos) {
|
|
103
|
+
var nodeContext = getLinkNodeContext(doc, pos);
|
|
104
|
+
if (isLinkNode(node)) {
|
|
105
|
+
return {
|
|
106
|
+
type: 'node',
|
|
107
|
+
pos: pos,
|
|
108
|
+
node: node,
|
|
109
|
+
nodeContext: nodeContext
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
if (node.marks) {
|
|
113
|
+
for (var i = 0; i < node.marks.length; i++) {
|
|
114
|
+
var mark = node.marks[i];
|
|
115
|
+
if (isLinkMark(mark, schema)) {
|
|
116
|
+
return {
|
|
117
|
+
type: 'mark',
|
|
118
|
+
pos: pos,
|
|
119
|
+
mark: mark,
|
|
120
|
+
nodeContext: nodeContext
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
export var findLinksAtPositions = function findLinksAtPositions(tr, positions) {
|
|
127
|
+
var schema = tr.doc.type.schema;
|
|
128
|
+
var links = [];
|
|
129
|
+
for (var i = 0; i < positions.length; i++) {
|
|
130
|
+
var pos = positions[i];
|
|
131
|
+
var node = tr.doc.nodeAt(pos);
|
|
132
|
+
if (!node) {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
var link = linkObjectFromNode(tr.doc, schema, node, pos);
|
|
136
|
+
if (!link) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
links.push(link);
|
|
140
|
+
}
|
|
141
|
+
return links;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Returns whether or not two sets of links appear to likely be the same set of links
|
|
146
|
+
* That they are in the same order and that both their hrefs and appearances match
|
|
147
|
+
*/
|
|
148
|
+
export var areSameLinks = function areSameLinks(linksA, linksB) {
|
|
149
|
+
if (linksA.length !== linksB.length) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
for (var i = 0; i < linksA.length; i++) {
|
|
153
|
+
var linkA = linksA[i];
|
|
154
|
+
var linkB = linksB[i];
|
|
155
|
+
if (getLinkUrl(linkA) !== getLinkUrl(linkB) || appearanceForLink(linkA) !== appearanceForLink(linkB)) {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return true;
|
|
160
|
+
};
|