@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,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.appearanceForLink = appearanceForLink;
|
|
7
|
+
exports.findLinksAtPositions = exports.areSameLinks = void 0;
|
|
8
|
+
exports.findLinksInNode = findLinksInNode;
|
|
9
|
+
exports.getLinkNodeContext = void 0;
|
|
10
|
+
exports.getLinkUrl = getLinkUrl;
|
|
11
|
+
exports.isLink = void 0;
|
|
12
|
+
exports.isLinkNode = isLinkNode;
|
|
13
|
+
exports.linkObjectFromNode = void 0;
|
|
14
|
+
var _utils = require("@atlaskit/editor-common/utils");
|
|
15
|
+
var _utils2 = require("../../utils");
|
|
16
|
+
/**
|
|
17
|
+
* Whether a node is a "link" node, ie inline card, block card, embed card
|
|
18
|
+
* (but not a text node with a link mark)
|
|
19
|
+
*/
|
|
20
|
+
function isLinkNode(node) {
|
|
21
|
+
return !!(0, _utils2.appearanceForNodeType)(node.type);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Analytics appearance for link object
|
|
26
|
+
*/
|
|
27
|
+
function appearanceForLink(link) {
|
|
28
|
+
if (link.type === 'node') {
|
|
29
|
+
var appearance = (0, _utils2.appearanceForNodeType)(link.node.type);
|
|
30
|
+
if (appearance) {
|
|
31
|
+
return appearance;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return 'url';
|
|
35
|
+
}
|
|
36
|
+
var nodeHasLinkMark = function nodeHasLinkMark(schema, node) {
|
|
37
|
+
if (node.marks) {
|
|
38
|
+
for (var i = 0; i < node.marks.length; i++) {
|
|
39
|
+
var mark = node.marks[i];
|
|
40
|
+
if ((0, _utils.isLinkMark)(mark, schema)) {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Determine if a node is considered to be a link
|
|
50
|
+
*/
|
|
51
|
+
var isLink = function isLink(schema, node) {
|
|
52
|
+
if (isLinkNode(node)) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
return nodeHasLinkMark(schema, node);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Given a node, find all nodes and marks that are considered "links"
|
|
60
|
+
* @param state EditorState
|
|
61
|
+
* @param fragment Fragment to search
|
|
62
|
+
* @returns Array of nodes and marks found in the fragment that are "links"
|
|
63
|
+
*/
|
|
64
|
+
exports.isLink = isLink;
|
|
65
|
+
function findLinksInNode(doc, schema, node, offset) {
|
|
66
|
+
var links = [];
|
|
67
|
+
node.descendants(function (node, pos) {
|
|
68
|
+
var nodeContext = getLinkNodeContext(doc, pos);
|
|
69
|
+
|
|
70
|
+
// Nodes
|
|
71
|
+
if (isLinkNode(node)) {
|
|
72
|
+
links.push({
|
|
73
|
+
type: 'node',
|
|
74
|
+
pos: pos + offset,
|
|
75
|
+
node: node,
|
|
76
|
+
nodeContext: nodeContext
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Marks
|
|
81
|
+
if (node.marks) {
|
|
82
|
+
for (var i = 0; i < node.marks.length; i++) {
|
|
83
|
+
var mark = node.marks[i];
|
|
84
|
+
if ((0, _utils.isLinkMark)(mark, schema)) {
|
|
85
|
+
links.push({
|
|
86
|
+
type: 'mark',
|
|
87
|
+
pos: pos + offset,
|
|
88
|
+
mark: mark,
|
|
89
|
+
nodeContext: nodeContext
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
return links;
|
|
96
|
+
}
|
|
97
|
+
function getLinkUrl(link) {
|
|
98
|
+
var _link$mark$attrs;
|
|
99
|
+
if (link.type === 'node') {
|
|
100
|
+
var _link$node$attrs;
|
|
101
|
+
return (_link$node$attrs = link.node.attrs) === null || _link$node$attrs === void 0 ? void 0 : _link$node$attrs.url;
|
|
102
|
+
}
|
|
103
|
+
return (_link$mark$attrs = link.mark.attrs) === null || _link$mark$attrs === void 0 ? void 0 : _link$mark$attrs.href;
|
|
104
|
+
}
|
|
105
|
+
var getLinkNodeContext = function getLinkNodeContext(doc, pos) {
|
|
106
|
+
var $pos = doc.resolve(pos);
|
|
107
|
+
var maxDepth = 3;
|
|
108
|
+
for (var i = 0; i <= maxDepth; i++) {
|
|
109
|
+
var node = $pos.node($pos.depth - i);
|
|
110
|
+
if (node && node.type.name !== 'paragraph') {
|
|
111
|
+
return node.type.name;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return 'unknown';
|
|
115
|
+
};
|
|
116
|
+
exports.getLinkNodeContext = getLinkNodeContext;
|
|
117
|
+
var linkObjectFromNode = function linkObjectFromNode(doc, schema, node, pos) {
|
|
118
|
+
var nodeContext = getLinkNodeContext(doc, pos);
|
|
119
|
+
if (isLinkNode(node)) {
|
|
120
|
+
return {
|
|
121
|
+
type: 'node',
|
|
122
|
+
pos: pos,
|
|
123
|
+
node: node,
|
|
124
|
+
nodeContext: nodeContext
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
if (node.marks) {
|
|
128
|
+
for (var i = 0; i < node.marks.length; i++) {
|
|
129
|
+
var mark = node.marks[i];
|
|
130
|
+
if ((0, _utils.isLinkMark)(mark, schema)) {
|
|
131
|
+
return {
|
|
132
|
+
type: 'mark',
|
|
133
|
+
pos: pos,
|
|
134
|
+
mark: mark,
|
|
135
|
+
nodeContext: nodeContext
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
exports.linkObjectFromNode = linkObjectFromNode;
|
|
142
|
+
var findLinksAtPositions = function findLinksAtPositions(tr, positions) {
|
|
143
|
+
var schema = tr.doc.type.schema;
|
|
144
|
+
var links = [];
|
|
145
|
+
for (var i = 0; i < positions.length; i++) {
|
|
146
|
+
var pos = positions[i];
|
|
147
|
+
var node = tr.doc.nodeAt(pos);
|
|
148
|
+
if (!node) {
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
var link = linkObjectFromNode(tr.doc, schema, node, pos);
|
|
152
|
+
if (!link) {
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
links.push(link);
|
|
156
|
+
}
|
|
157
|
+
return links;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Returns whether or not two sets of links appear to likely be the same set of links
|
|
162
|
+
* That they are in the same order and that both their hrefs and appearances match
|
|
163
|
+
*/
|
|
164
|
+
exports.findLinksAtPositions = findLinksAtPositions;
|
|
165
|
+
var areSameLinks = function areSameLinks(linksA, linksB) {
|
|
166
|
+
if (linksA.length !== linksB.length) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
for (var i = 0; i < linksA.length; i++) {
|
|
170
|
+
var linkA = linksA[i];
|
|
171
|
+
var linkB = linksB[i];
|
|
172
|
+
if (getLinkUrl(linkA) !== getLinkUrl(linkB) || appearanceForLink(linkA) !== appearanceForLink(linkB)) {
|
|
173
|
+
return false;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return true;
|
|
177
|
+
};
|
|
178
|
+
exports.areSameLinks = areSameLinks;
|
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.updateExistingDatasource = exports.updateCard = exports.setSelectedCardAppearance = exports.replaceQueuedUrlWithCard = exports.queueCardsFromChangedTr = exports.queueCardFromChangedTr = exports.insertDatasource = exports.handleFallbackWithAnalytics = exports.convertHyperlinkToSmartCard = exports.changeSelectedCardToText = exports.changeSelectedCardToLinkFallback = exports.changeSelectedCardToLink = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
11
|
+
var _prosemirrorHistory = require("prosemirror-history");
|
|
12
|
+
var _prosemirrorState = require("prosemirror-state");
|
|
13
|
+
var _adfSchema = require("@atlaskit/adf-schema");
|
|
14
|
+
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
15
|
+
var _card = require("@atlaskit/editor-common/card");
|
|
16
|
+
var _utils = require("@atlaskit/editor-common/utils");
|
|
17
|
+
var _utils2 = require("../utils");
|
|
18
|
+
var _actions = require("./actions");
|
|
19
|
+
var _pluginKey = require("./plugin-key");
|
|
20
|
+
var _shouldReplaceLink = require("./shouldReplaceLink");
|
|
21
|
+
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; }
|
|
22
|
+
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) { (0, _defineProperty2.default)(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; }
|
|
23
|
+
/**
|
|
24
|
+
* Attempt to replace the link into the respective card.
|
|
25
|
+
*/
|
|
26
|
+
function replaceLinksToCards(tr, cardAdf, schema, request) {
|
|
27
|
+
var inlineCard = schema.nodes.inlineCard;
|
|
28
|
+
var url = request.url;
|
|
29
|
+
if (!(0, _adfSchema.isSafeUrl)(url)) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// replace all the outstanding links with their cards
|
|
34
|
+
var pos = tr.mapping.map(request.pos);
|
|
35
|
+
var $pos = tr.doc.resolve(pos);
|
|
36
|
+
var node = tr.doc.nodeAt(pos);
|
|
37
|
+
if (!node || !node.type.isText) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
var replaceLink = request.shouldReplaceLink || (0, _shouldReplaceLink.shouldReplaceLink)(node, request.compareLinkText, url);
|
|
41
|
+
if (!replaceLink) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// ED-5638: add an extra space after inline cards to avoid re-rendering them
|
|
46
|
+
var nodes = [cardAdf];
|
|
47
|
+
if (cardAdf.type === inlineCard) {
|
|
48
|
+
nodes.push(schema.text(' '));
|
|
49
|
+
}
|
|
50
|
+
tr.replaceWith(pos, pos + (node.text || url).length, nodes);
|
|
51
|
+
return $pos.node($pos.depth - 1).type.name;
|
|
52
|
+
}
|
|
53
|
+
var replaceQueuedUrlWithCard = function replaceQueuedUrlWithCard(url, cardData, analyticsAction, editorAnalyticsApi, createAnalyticsEvent) {
|
|
54
|
+
return function (editorState, dispatch) {
|
|
55
|
+
var state = _pluginKey.pluginKey.getState(editorState);
|
|
56
|
+
if (!state) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// find the requests for this URL
|
|
61
|
+
var requests = state.requests.filter(function (req) {
|
|
62
|
+
return req.url === url;
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// try to transform response to ADF
|
|
66
|
+
var schema = editorState.schema;
|
|
67
|
+
var cardAdf = (0, _utils.processRawValue)(schema, cardData);
|
|
68
|
+
var tr = editorState.tr;
|
|
69
|
+
if (cardAdf) {
|
|
70
|
+
// Should prevent any other node than cards? [inlineCard, blockCard].includes(cardAdf.type)
|
|
71
|
+
var nodeContexts = requests.map(function (request) {
|
|
72
|
+
return replaceLinksToCards(tr, cardAdf, schema, request);
|
|
73
|
+
}).filter(function (context) {
|
|
74
|
+
return !!context;
|
|
75
|
+
}); // context exist
|
|
76
|
+
|
|
77
|
+
// Send analytics information
|
|
78
|
+
if (nodeContexts.length) {
|
|
79
|
+
var nodeContext = nodeContexts.every(function (context) {
|
|
80
|
+
return context === nodeContexts[0];
|
|
81
|
+
}) ? nodeContexts[0] : 'mixed';
|
|
82
|
+
|
|
83
|
+
/** For block links v1, default to inline links */
|
|
84
|
+
var nodeType = 'inlineCard';
|
|
85
|
+
var _url$split = url.split('/'),
|
|
86
|
+
_url$split2 = (0, _slicedToArray2.default)(_url$split, 3),
|
|
87
|
+
domainName = _url$split2[2];
|
|
88
|
+
if (state.smartLinkEvents) {
|
|
89
|
+
state.smartLinkEvents.insertSmartLink(domainName, 'inline', createAnalyticsEvent);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* TODO:
|
|
94
|
+
* What if each request has a different source?
|
|
95
|
+
* Unlikely, but need to define behaviour.
|
|
96
|
+
* Ignore analytics event? take first? provide 'mixed' as well?
|
|
97
|
+
*/
|
|
98
|
+
var inputMethod = requests[0].source;
|
|
99
|
+
var sourceEvent = requests[0].sourceEvent;
|
|
100
|
+
editorAnalyticsApi === null || editorAnalyticsApi === void 0 ? void 0 : editorAnalyticsApi.attachAnalyticsEvent({
|
|
101
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
102
|
+
action: analyticsAction || _analytics.ACTION.INSERTED,
|
|
103
|
+
actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
|
|
104
|
+
actionSubjectId: _analytics.ACTION_SUBJECT_ID.SMART_LINK,
|
|
105
|
+
eventType: _analytics.EVENT_TYPE.TRACK,
|
|
106
|
+
attributes: {
|
|
107
|
+
inputMethod: inputMethod,
|
|
108
|
+
nodeType: nodeType,
|
|
109
|
+
nodeContext: nodeContext,
|
|
110
|
+
fromCurrentDomain: (0, _utils.isFromCurrentDomain)(url)
|
|
111
|
+
},
|
|
112
|
+
nonPrivacySafeAttributes: {
|
|
113
|
+
domainName: domainName
|
|
114
|
+
}
|
|
115
|
+
})(tr);
|
|
116
|
+
(0, _card.addLinkMetadata)(editorState.selection, tr, {
|
|
117
|
+
action: analyticsAction,
|
|
118
|
+
inputMethod: inputMethod,
|
|
119
|
+
cardAction: 'RESOLVE',
|
|
120
|
+
sourceEvent: sourceEvent
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (dispatch) {
|
|
125
|
+
dispatch((0, _actions.resolveCard)(url)((0, _prosemirrorHistory.closeHistory)(tr)));
|
|
126
|
+
}
|
|
127
|
+
return true;
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
exports.replaceQueuedUrlWithCard = replaceQueuedUrlWithCard;
|
|
131
|
+
var handleFallbackWithAnalytics = function handleFallbackWithAnalytics(request, editorAnalyticsApi) {
|
|
132
|
+
return function (state, dispatch) {
|
|
133
|
+
var cardState = _pluginKey.pluginKey.getState(state);
|
|
134
|
+
if (!cardState) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
var tr = state.tr;
|
|
138
|
+
if (request.source !== _analytics.INPUT_METHOD.FLOATING_TB) {
|
|
139
|
+
editorAnalyticsApi === null || editorAnalyticsApi === void 0 ? void 0 : editorAnalyticsApi.attachAnalyticsEvent((0, _utils.getLinkCreationAnalyticsEvent)(request.source, request.url))(tr);
|
|
140
|
+
}
|
|
141
|
+
(0, _card.addLinkMetadata)(state.selection, tr, {
|
|
142
|
+
action: request.analyticsAction,
|
|
143
|
+
inputMethod: request.source
|
|
144
|
+
});
|
|
145
|
+
if (dispatch) {
|
|
146
|
+
dispatch((0, _actions.resolveCard)(request.url)(tr));
|
|
147
|
+
}
|
|
148
|
+
return true;
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
exports.handleFallbackWithAnalytics = handleFallbackWithAnalytics;
|
|
152
|
+
var queueCardsFromChangedTr = function queueCardsFromChangedTr(state, tr, source, analyticsAction) {
|
|
153
|
+
var normalizeLinkText = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
|
|
154
|
+
var sourceEvent = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : undefined;
|
|
155
|
+
var schema = state.schema;
|
|
156
|
+
var link = schema.marks.link;
|
|
157
|
+
var requests = [];
|
|
158
|
+
(0, _utils.nodesBetweenChanged)(tr, function (node, pos) {
|
|
159
|
+
if (!node.isText) {
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
var linkMark = node.marks.find(function (mark) {
|
|
163
|
+
return mark.type === link;
|
|
164
|
+
});
|
|
165
|
+
if (linkMark) {
|
|
166
|
+
if (!(0, _shouldReplaceLink.shouldReplaceLink)(node, normalizeLinkText)) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
requests.push({
|
|
170
|
+
url: linkMark.attrs.href,
|
|
171
|
+
pos: pos,
|
|
172
|
+
appearance: 'inline',
|
|
173
|
+
compareLinkText: normalizeLinkText,
|
|
174
|
+
source: source,
|
|
175
|
+
analyticsAction: analyticsAction,
|
|
176
|
+
sourceEvent: sourceEvent
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
return false;
|
|
180
|
+
});
|
|
181
|
+
if (analyticsAction) {
|
|
182
|
+
(0, _card.addLinkMetadata)(state.selection, tr, {
|
|
183
|
+
action: analyticsAction
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
return (0, _actions.queueCards)(requests)(tr);
|
|
187
|
+
};
|
|
188
|
+
exports.queueCardsFromChangedTr = queueCardsFromChangedTr;
|
|
189
|
+
var queueCardFromChangedTr = function queueCardFromChangedTr(state, tr, source, analyticsAction) {
|
|
190
|
+
var normalizeLinkText = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
|
|
191
|
+
var sourceEvent = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : undefined;
|
|
192
|
+
var previousAppearance = arguments.length > 6 ? arguments[6] : undefined;
|
|
193
|
+
var schema = state.schema;
|
|
194
|
+
var link = schema.marks.link;
|
|
195
|
+
var requests = [];
|
|
196
|
+
(0, _utils.nodesBetweenChanged)(tr, function (node, pos) {
|
|
197
|
+
if (!node.isText) {
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
var linkMark = node.marks.find(function (mark) {
|
|
201
|
+
return mark.type === link;
|
|
202
|
+
});
|
|
203
|
+
if (linkMark) {
|
|
204
|
+
if (!(0, _shouldReplaceLink.shouldReplaceLink)(node, normalizeLinkText)) {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
requests.push({
|
|
208
|
+
url: linkMark.attrs.href,
|
|
209
|
+
pos: pos,
|
|
210
|
+
appearance: 'inline',
|
|
211
|
+
previousAppearance: previousAppearance,
|
|
212
|
+
compareLinkText: normalizeLinkText,
|
|
213
|
+
source: source,
|
|
214
|
+
analyticsAction: analyticsAction,
|
|
215
|
+
sourceEvent: sourceEvent
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
return false;
|
|
219
|
+
});
|
|
220
|
+
(0, _card.addLinkMetadata)(state.selection, tr, {
|
|
221
|
+
action: analyticsAction
|
|
222
|
+
});
|
|
223
|
+
return (0, _actions.queueCards)(requests)(tr);
|
|
224
|
+
};
|
|
225
|
+
exports.queueCardFromChangedTr = queueCardFromChangedTr;
|
|
226
|
+
var convertHyperlinkToSmartCard = function convertHyperlinkToSmartCard(state, source, appearance) {
|
|
227
|
+
var normalizeLinkText = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
228
|
+
var schema = state.schema;
|
|
229
|
+
var link = schema.marks.link;
|
|
230
|
+
var requests = [];
|
|
231
|
+
state.tr.doc.nodesBetween(state.selection.from, state.selection.to, function (node, pos) {
|
|
232
|
+
var linkMark = node.marks.find(function (mark) {
|
|
233
|
+
return mark.type === link;
|
|
234
|
+
});
|
|
235
|
+
if (linkMark) {
|
|
236
|
+
requests.push({
|
|
237
|
+
url: linkMark.attrs.href,
|
|
238
|
+
pos: pos,
|
|
239
|
+
appearance: appearance,
|
|
240
|
+
previousAppearance: 'url',
|
|
241
|
+
compareLinkText: normalizeLinkText,
|
|
242
|
+
source: source,
|
|
243
|
+
analyticsAction: _analytics.ACTION.CHANGED_TYPE,
|
|
244
|
+
shouldReplaceLink: true
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
(0, _card.addLinkMetadata)(state.selection, state.tr, {
|
|
249
|
+
action: _analytics.ACTION.CHANGED_TYPE
|
|
250
|
+
});
|
|
251
|
+
return (0, _actions.queueCards)(requests)(state.tr);
|
|
252
|
+
};
|
|
253
|
+
exports.convertHyperlinkToSmartCard = convertHyperlinkToSmartCard;
|
|
254
|
+
var changeSelectedCardToLink = function changeSelectedCardToLink(text, href, sendAnalytics, node, pos, editorAnalyticsApi) {
|
|
255
|
+
return function (state, dispatch) {
|
|
256
|
+
var tr;
|
|
257
|
+
if (node && pos) {
|
|
258
|
+
tr = cardNodeToLinkWithTransaction(state, text, href, node, pos);
|
|
259
|
+
} else {
|
|
260
|
+
tr = cardToLinkWithTransaction(state, text, href);
|
|
261
|
+
}
|
|
262
|
+
var selectedNode = state.selection instanceof _prosemirrorState.NodeSelection && state.selection.node;
|
|
263
|
+
if (sendAnalytics) {
|
|
264
|
+
if (selectedNode) {
|
|
265
|
+
editorAnalyticsApi === null || editorAnalyticsApi === void 0 ? void 0 : editorAnalyticsApi.attachAnalyticsEvent({
|
|
266
|
+
action: _analytics.ACTION.CHANGED_TYPE,
|
|
267
|
+
actionSubject: _analytics.ACTION_SUBJECT.SMART_LINK,
|
|
268
|
+
eventType: _analytics.EVENT_TYPE.TRACK,
|
|
269
|
+
attributes: {
|
|
270
|
+
newType: _analytics.SMART_LINK_TYPE.URL,
|
|
271
|
+
previousType: (0, _utils2.appearanceForNodeType)(selectedNode.type)
|
|
272
|
+
}
|
|
273
|
+
})(tr);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
if (dispatch) {
|
|
277
|
+
dispatch(tr.scrollIntoView());
|
|
278
|
+
}
|
|
279
|
+
return true;
|
|
280
|
+
};
|
|
281
|
+
};
|
|
282
|
+
exports.changeSelectedCardToLink = changeSelectedCardToLink;
|
|
283
|
+
var changeSelectedCardToLinkFallback = function changeSelectedCardToLinkFallback(text, href, sendAnalytics, node, pos, editorAnalyticsApi) {
|
|
284
|
+
return function (state, dispatch) {
|
|
285
|
+
var tr;
|
|
286
|
+
if (node && pos) {
|
|
287
|
+
tr = cardNodeToLinkWithTransaction(state, text, href, node, pos);
|
|
288
|
+
} else {
|
|
289
|
+
tr = cardToLinkWithTransaction(state, text, href);
|
|
290
|
+
}
|
|
291
|
+
if (sendAnalytics) {
|
|
292
|
+
editorAnalyticsApi === null || editorAnalyticsApi === void 0 ? void 0 : editorAnalyticsApi.attachAnalyticsEvent({
|
|
293
|
+
action: _analytics.ACTION.ERRORED,
|
|
294
|
+
actionSubject: _analytics.ACTION_SUBJECT.SMART_LINK,
|
|
295
|
+
eventType: _analytics.EVENT_TYPE.OPERATIONAL,
|
|
296
|
+
attributes: {
|
|
297
|
+
error: 'Smart card falling back to link.'
|
|
298
|
+
}
|
|
299
|
+
})(tr);
|
|
300
|
+
}
|
|
301
|
+
if (dispatch) {
|
|
302
|
+
dispatch(tr.scrollIntoView());
|
|
303
|
+
}
|
|
304
|
+
return true;
|
|
305
|
+
};
|
|
306
|
+
};
|
|
307
|
+
exports.changeSelectedCardToLinkFallback = changeSelectedCardToLinkFallback;
|
|
308
|
+
var updateCard = function updateCard(href, sourceEvent) {
|
|
309
|
+
return function (state, dispatch) {
|
|
310
|
+
var selectedNode = state.selection instanceof _prosemirrorState.NodeSelection && state.selection.node;
|
|
311
|
+
if (!selectedNode) {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
var cardAppearance = (0, _utils2.selectedCardAppearance)(state);
|
|
315
|
+
var tr = cardToLinkWithTransaction(state, href, href);
|
|
316
|
+
queueCardFromChangedTr(state, tr, _analytics.INPUT_METHOD.MANUAL, _analytics.ACTION.UPDATED, undefined, sourceEvent, cardAppearance);
|
|
317
|
+
if (dispatch) {
|
|
318
|
+
dispatch(tr.scrollIntoView());
|
|
319
|
+
}
|
|
320
|
+
return true;
|
|
321
|
+
};
|
|
322
|
+
};
|
|
323
|
+
exports.updateCard = updateCard;
|
|
324
|
+
function cardToLinkWithTransaction(state, text, href) {
|
|
325
|
+
var selectedNode = state.selection instanceof _prosemirrorState.NodeSelection && state.selection.node;
|
|
326
|
+
if (!selectedNode) {
|
|
327
|
+
return state.tr;
|
|
328
|
+
}
|
|
329
|
+
var link = state.schema.marks.link;
|
|
330
|
+
var url = selectedNode.attrs.url || selectedNode.attrs.data.url;
|
|
331
|
+
var tr = state.tr.replaceSelectionWith(state.schema.text(text || url, [link.create({
|
|
332
|
+
href: href || url
|
|
333
|
+
})]), false);
|
|
334
|
+
return tr;
|
|
335
|
+
}
|
|
336
|
+
function cardNodeToLinkWithTransaction(state, text, href, node, pos) {
|
|
337
|
+
var link = state.schema.marks.link;
|
|
338
|
+
var url = node.attrs.url || node.attrs.data.url;
|
|
339
|
+
return state.tr.replaceWith(pos, pos + node.nodeSize, state.schema.text(text || url, [link.create({
|
|
340
|
+
href: href || url
|
|
341
|
+
})]));
|
|
342
|
+
}
|
|
343
|
+
var changeSelectedCardToText = function changeSelectedCardToText(text, editorAnalyticsApi) {
|
|
344
|
+
return function (state, dispatch) {
|
|
345
|
+
var selectedNode = state.selection instanceof _prosemirrorState.NodeSelection && state.selection.node;
|
|
346
|
+
if (!selectedNode) {
|
|
347
|
+
return false;
|
|
348
|
+
}
|
|
349
|
+
var tr = state.tr.replaceSelectionWith(state.schema.text(text), false);
|
|
350
|
+
if (dispatch) {
|
|
351
|
+
(0, _card.addLinkMetadata)(state.selection, tr, {
|
|
352
|
+
action: _analytics.ACTION.UNLINK
|
|
353
|
+
});
|
|
354
|
+
tr.scrollIntoView();
|
|
355
|
+
editorAnalyticsApi === null || editorAnalyticsApi === void 0 ? void 0 : editorAnalyticsApi.attachAnalyticsEvent((0, _analytics.unlinkPayload)(_analytics.ACTION_SUBJECT_ID.CARD_INLINE))(tr);
|
|
356
|
+
dispatch(tr);
|
|
357
|
+
}
|
|
358
|
+
return true;
|
|
359
|
+
};
|
|
360
|
+
};
|
|
361
|
+
exports.changeSelectedCardToText = changeSelectedCardToText;
|
|
362
|
+
var setSelectedCardAppearance = function setSelectedCardAppearance(appearance, editorAnalyticsApi) {
|
|
363
|
+
return function (state, dispatch) {
|
|
364
|
+
var _previousNode$type;
|
|
365
|
+
var selectedNode = state.selection instanceof _prosemirrorState.NodeSelection && state.selection.node;
|
|
366
|
+
if (!selectedNode) {
|
|
367
|
+
// When there is no selected node, we insert a new one
|
|
368
|
+
// and replace the existing blue link
|
|
369
|
+
var _tr = convertHyperlinkToSmartCard(state, _analytics.INPUT_METHOD.FLOATING_TB, appearance);
|
|
370
|
+
if (dispatch) {
|
|
371
|
+
(0, _card.addLinkMetadata)(state.selection, _tr, {
|
|
372
|
+
action: _analytics.ACTION.CHANGED_TYPE
|
|
373
|
+
});
|
|
374
|
+
dispatch(_tr.scrollIntoView());
|
|
375
|
+
}
|
|
376
|
+
return false;
|
|
377
|
+
}
|
|
378
|
+
if ((0, _utils2.appearanceForNodeType)(selectedNode.type) === appearance) {
|
|
379
|
+
return false;
|
|
380
|
+
}
|
|
381
|
+
var isEmbed = appearance === 'embed';
|
|
382
|
+
var attrs = isEmbed ? _objectSpread(_objectSpread({}, selectedNode.attrs), {}, {
|
|
383
|
+
layout: 'center'
|
|
384
|
+
}) : selectedNode.attrs;
|
|
385
|
+
var _state$selection = state.selection,
|
|
386
|
+
from = _state$selection.from,
|
|
387
|
+
to = _state$selection.to;
|
|
388
|
+
var nodeType = getLinkNodeType(appearance, state.schema.nodes);
|
|
389
|
+
var tr = state.tr.setNodeMarkup(from, nodeType, attrs, selectedNode.marks);
|
|
390
|
+
|
|
391
|
+
// When the selected card is the last element in the doc we add a new paragraph after it for consistent replacement
|
|
392
|
+
if (tr.doc.nodeSize - 2 === to) {
|
|
393
|
+
tr.insertText(' ', to);
|
|
394
|
+
}
|
|
395
|
+
tr.setSelection(_prosemirrorState.TextSelection.create(tr.doc, to + 1));
|
|
396
|
+
var previousNodePos = from - 1 > 0 ? from - 1 : 0;
|
|
397
|
+
var previousNode = tr.doc.nodeAt(previousNodePos);
|
|
398
|
+
if ((previousNode === null || previousNode === void 0 ? void 0 : (_previousNode$type = previousNode.type) === null || _previousNode$type === void 0 ? void 0 : _previousNode$type.name) === 'paragraph') {
|
|
399
|
+
tr.delete(previousNodePos, from);
|
|
400
|
+
}
|
|
401
|
+
editorAnalyticsApi === null || editorAnalyticsApi === void 0 ? void 0 : editorAnalyticsApi.attachAnalyticsEvent({
|
|
402
|
+
action: _analytics.ACTION.CHANGED_TYPE,
|
|
403
|
+
actionSubject: _analytics.ACTION_SUBJECT.SMART_LINK,
|
|
404
|
+
eventType: _analytics.EVENT_TYPE.TRACK,
|
|
405
|
+
attributes: {
|
|
406
|
+
newType: appearance,
|
|
407
|
+
previousType: (0, _utils2.appearanceForNodeType)(selectedNode.type)
|
|
408
|
+
}
|
|
409
|
+
})(tr);
|
|
410
|
+
(0, _card.addLinkMetadata)(state.selection, tr, {
|
|
411
|
+
action: _analytics.ACTION.CHANGED_TYPE
|
|
412
|
+
});
|
|
413
|
+
if (dispatch) {
|
|
414
|
+
dispatch(tr.scrollIntoView());
|
|
415
|
+
}
|
|
416
|
+
return true;
|
|
417
|
+
};
|
|
418
|
+
};
|
|
419
|
+
exports.setSelectedCardAppearance = setSelectedCardAppearance;
|
|
420
|
+
var getLinkNodeType = function getLinkNodeType(appearance, linkNodes) {
|
|
421
|
+
switch (appearance) {
|
|
422
|
+
case 'inline':
|
|
423
|
+
return linkNodes.inlineCard;
|
|
424
|
+
case 'block':
|
|
425
|
+
return linkNodes.blockCard;
|
|
426
|
+
case 'embed':
|
|
427
|
+
return linkNodes.embedCard;
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
|
|
431
|
+
// Apply an update to a datasource (aka blockCard) node
|
|
432
|
+
var updateExistingDatasource = function updateExistingDatasource(state, node, newAdf, view) {
|
|
433
|
+
var tr = state.tr,
|
|
434
|
+
from = state.selection.from,
|
|
435
|
+
schemaNodes = state.schema.nodes;
|
|
436
|
+
|
|
437
|
+
// datasource to datasource
|
|
438
|
+
if (newAdf.type === 'blockCard' && newAdf.attrs.datasource && node.attrs.datasource) {
|
|
439
|
+
var _ref3, _ref6, _newViews$properties, _oldViews$properties, _newAdf$attrs, _node$attrs;
|
|
440
|
+
var _ref = (_ref3 = newAdf.attrs.datasource.views) !== null && _ref3 !== void 0 ? _ref3 : [],
|
|
441
|
+
_ref2 = (0, _slicedToArray2.default)(_ref, 1),
|
|
442
|
+
newViews = _ref2[0];
|
|
443
|
+
var _ref4 = (_ref6 = node.attrs.datasource.views) !== null && _ref6 !== void 0 ? _ref6 : [],
|
|
444
|
+
_ref5 = (0, _slicedToArray2.default)(_ref4, 1),
|
|
445
|
+
oldViews = _ref5[0];
|
|
446
|
+
var newColumnKeys = newViews === null || newViews === void 0 ? void 0 : (_newViews$properties = newViews.properties) === null || _newViews$properties === void 0 ? void 0 : _newViews$properties.columns.map(function (column) {
|
|
447
|
+
return column.key;
|
|
448
|
+
});
|
|
449
|
+
var oldColumnKeys = oldViews === null || oldViews === void 0 ? void 0 : (_oldViews$properties = oldViews.properties) === null || _oldViews$properties === void 0 ? void 0 : _oldViews$properties.columns.map(function (column) {
|
|
450
|
+
return column.key;
|
|
451
|
+
});
|
|
452
|
+
var isColumnChange = !(0, _isEqual.default)(oldColumnKeys, newColumnKeys);
|
|
453
|
+
var isUrlChange = ((_newAdf$attrs = newAdf.attrs) === null || _newAdf$attrs === void 0 ? void 0 : _newAdf$attrs.url) !== ((_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.url);
|
|
454
|
+
if (isColumnChange || isUrlChange) {
|
|
455
|
+
tr.setNodeMarkup(from, schemaNodes.blockCard, _objectSpread(_objectSpread({}, node.attrs), newAdf.attrs));
|
|
456
|
+
}
|
|
457
|
+
} else if (newAdf.type === 'inlineCard') {
|
|
458
|
+
// datasource to inline
|
|
459
|
+
tr.setNodeMarkup(from, schemaNodes.inlineCard, newAdf.attrs);
|
|
460
|
+
}
|
|
461
|
+
(0, _actions.hideDatasourceModal)(tr);
|
|
462
|
+
view.dispatch(tr.scrollIntoView());
|
|
463
|
+
};
|
|
464
|
+
exports.updateExistingDatasource = updateExistingDatasource;
|
|
465
|
+
var insertDatasource = function insertDatasource(state, adf, view) {
|
|
466
|
+
var tr = state.tr,
|
|
467
|
+
from = state.selection.from,
|
|
468
|
+
schemaNodes = state.schema.nodes;
|
|
469
|
+
var attrs = adf.attrs,
|
|
470
|
+
type = adf.type;
|
|
471
|
+
var schemaNode = type === 'inlineCard' ? schemaNodes.inlineCard : schemaNodes.blockCard;
|
|
472
|
+
var newNode = schemaNode.createChecked(attrs);
|
|
473
|
+
// in future, if we decide to do datasource insertion from the main toolbar, we should probably consider editor-plugin-content-insertion instead of tr.insert
|
|
474
|
+
// this will allow us to deal with insertions from multiple paths in a more consistent way
|
|
475
|
+
newNode && tr.insert(from, newNode);
|
|
476
|
+
(0, _actions.hideDatasourceModal)(tr);
|
|
477
|
+
view.dispatch(tr.scrollIntoView());
|
|
478
|
+
};
|
|
479
|
+
exports.insertDatasource = insertDatasource;
|