@atlaskit/editor-plugin-synced-block 5.2.1 → 5.2.2
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 +9 -0
- package/afm-jira/tsconfig.json +1 -1
- package/dist/cjs/editor-commands/index.js +10 -4
- package/dist/cjs/pm-plugins/menu-and-toolbar-experiences.js +267 -0
- package/dist/cjs/syncedBlockPlugin.js +21 -12
- package/dist/cjs/types/index.js +6 -3
- package/dist/cjs/ui/CreateSyncedBlockButton.js +2 -1
- package/dist/cjs/ui/CreateSyncedBlockDropdownItem.js +2 -1
- package/dist/cjs/ui/floating-toolbar.js +2 -1
- package/dist/es2019/editor-commands/index.js +10 -4
- package/dist/es2019/pm-plugins/menu-and-toolbar-experiences.js +261 -0
- package/dist/es2019/syncedBlockPlugin.js +19 -12
- package/dist/es2019/types/index.js +5 -2
- package/dist/es2019/ui/CreateSyncedBlockButton.js +2 -1
- package/dist/es2019/ui/CreateSyncedBlockDropdownItem.js +2 -1
- package/dist/es2019/ui/floating-toolbar.js +2 -1
- package/dist/esm/editor-commands/index.js +10 -4
- package/dist/esm/pm-plugins/menu-and-toolbar-experiences.js +260 -0
- package/dist/esm/syncedBlockPlugin.js +21 -12
- package/dist/esm/types/index.js +5 -2
- package/dist/esm/ui/CreateSyncedBlockButton.js +2 -1
- package/dist/esm/ui/CreateSyncedBlockDropdownItem.js +2 -1
- package/dist/esm/ui/floating-toolbar.js +2 -1
- package/dist/types/editor-commands/index.d.ts +3 -1
- package/dist/types/pm-plugins/menu-and-toolbar-experiences.d.ts +12 -0
- package/dist/types/types/index.d.ts +5 -14
- package/dist/types-ts4.5/editor-commands/index.d.ts +3 -1
- package/dist/types-ts4.5/pm-plugins/menu-and-toolbar-experiences.d.ts +12 -0
- package/dist/types-ts4.5/types/index.d.ts +5 -14
- package/package.json +3 -3
- package/dist/cjs/pm-plugins/experience-tracking/create-reference-experience.js +0 -113
- package/dist/cjs/pm-plugins/experience-tracking/create-source-experience.js +0 -169
- package/dist/cjs/pm-plugins/experience-tracking/delete-reference-experience.js +0 -175
- package/dist/cjs/pm-plugins/experience-tracking/delete-source-experience.js +0 -103
- package/dist/cjs/pm-plugins/experience-tracking/get-experience-tracking-plugins.js +0 -61
- package/dist/cjs/pm-plugins/experience-tracking/provider-only-experiences.js +0 -128
- package/dist/cjs/pm-plugins/utils/experience-tracking-utils.js +0 -85
- package/dist/es2019/pm-plugins/experience-tracking/create-reference-experience.js +0 -109
- package/dist/es2019/pm-plugins/experience-tracking/create-source-experience.js +0 -166
- package/dist/es2019/pm-plugins/experience-tracking/delete-reference-experience.js +0 -181
- package/dist/es2019/pm-plugins/experience-tracking/delete-source-experience.js +0 -98
- package/dist/es2019/pm-plugins/experience-tracking/get-experience-tracking-plugins.js +0 -46
- package/dist/es2019/pm-plugins/experience-tracking/provider-only-experiences.js +0 -127
- package/dist/es2019/pm-plugins/utils/experience-tracking-utils.js +0 -65
- package/dist/esm/pm-plugins/experience-tracking/create-reference-experience.js +0 -107
- package/dist/esm/pm-plugins/experience-tracking/create-source-experience.js +0 -163
- package/dist/esm/pm-plugins/experience-tracking/delete-reference-experience.js +0 -169
- package/dist/esm/pm-plugins/experience-tracking/delete-source-experience.js +0 -97
- package/dist/esm/pm-plugins/experience-tracking/get-experience-tracking-plugins.js +0 -55
- package/dist/esm/pm-plugins/experience-tracking/provider-only-experiences.js +0 -122
- package/dist/esm/pm-plugins/utils/experience-tracking-utils.js +0 -79
- package/dist/types/pm-plugins/experience-tracking/create-reference-experience.d.ts +0 -10
- package/dist/types/pm-plugins/experience-tracking/create-source-experience.d.ts +0 -10
- package/dist/types/pm-plugins/experience-tracking/delete-reference-experience.d.ts +0 -13
- package/dist/types/pm-plugins/experience-tracking/delete-source-experience.d.ts +0 -12
- package/dist/types/pm-plugins/experience-tracking/get-experience-tracking-plugins.d.ts +0 -5
- package/dist/types/pm-plugins/experience-tracking/provider-only-experiences.d.ts +0 -3
- package/dist/types/pm-plugins/utils/experience-tracking-utils.d.ts +0 -9
- package/dist/types-ts4.5/pm-plugins/experience-tracking/create-reference-experience.d.ts +0 -10
- package/dist/types-ts4.5/pm-plugins/experience-tracking/create-source-experience.d.ts +0 -10
- package/dist/types-ts4.5/pm-plugins/experience-tracking/delete-reference-experience.d.ts +0 -13
- package/dist/types-ts4.5/pm-plugins/experience-tracking/delete-source-experience.d.ts +0 -12
- package/dist/types-ts4.5/pm-plugins/experience-tracking/get-experience-tracking-plugins.d.ts +0 -5
- package/dist/types-ts4.5/pm-plugins/experience-tracking/provider-only-experiences.d.ts +0 -3
- package/dist/types-ts4.5/pm-plugins/utils/experience-tracking-utils.d.ts +0 -9
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getDeleteReferenceExperiencePlugin = exports.getDeleteReferenceExperience = void 0;
|
|
7
|
-
var _bindEventListener = require("bind-event-listener");
|
|
8
|
-
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
9
|
-
var _experiences = require("@atlaskit/editor-common/experiences");
|
|
10
|
-
var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
|
|
11
|
-
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
12
|
-
var _types = require("../../types");
|
|
13
|
-
var _experienceTrackingUtils = require("../utils/experience-tracking-utils");
|
|
14
|
-
var pluginKey = new _state.PluginKey('deleteReferenceSyncBlockExperience');
|
|
15
|
-
var START_METHOD = {
|
|
16
|
-
ELEMENT_TOOLBAR: 'element-toolbar',
|
|
17
|
-
DELETE: 'delete',
|
|
18
|
-
TYPED_OVER: 'typed-over',
|
|
19
|
-
CUT: 'cut',
|
|
20
|
-
UNDO: 'undo',
|
|
21
|
-
REDO: 'redo'
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* This experience tracks when a reference sync block is deleted.
|
|
26
|
-
*
|
|
27
|
-
* Start: When user deletes ref sync block from toolbar, presses delete when cursor is in front of ref sync block,
|
|
28
|
-
* presses any key with a ref sync block selected, cuts with a ref sync block selected, triggers undo/redo that deletes a ref sync block
|
|
29
|
-
* Success: When the sync block is removed from the DOM within 2000ms of start
|
|
30
|
-
* Failure: When 2000ms passes without the reference sync block being removed from the DOM
|
|
31
|
-
*/
|
|
32
|
-
var getDeleteReferenceExperiencePlugin = exports.getDeleteReferenceExperiencePlugin = function getDeleteReferenceExperiencePlugin(_ref) {
|
|
33
|
-
var refs = _ref.refs,
|
|
34
|
-
dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
|
|
35
|
-
syncBlockStore = _ref.syncBlockStore;
|
|
36
|
-
var experience = getDeleteReferenceExperience({
|
|
37
|
-
refs: refs,
|
|
38
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent
|
|
39
|
-
});
|
|
40
|
-
syncBlockStore.sourceManager.setDeleteExperience(experience);
|
|
41
|
-
var unbindClickListener = (0, _bindEventListener.bind)(document, {
|
|
42
|
-
type: 'click',
|
|
43
|
-
listener: function listener(event) {
|
|
44
|
-
var target = event.target;
|
|
45
|
-
if (!target) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
var button = target.closest('button[data-testid]');
|
|
49
|
-
if (!button || !(button instanceof HTMLButtonElement)) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
var testId = button.dataset.testid;
|
|
53
|
-
if (isReferenceSyncedBlockDeleteButtonId(testId)) {
|
|
54
|
-
experience.start({
|
|
55
|
-
method: START_METHOD.ELEMENT_TOOLBAR
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
return new _safePlugin.SafePlugin({
|
|
61
|
-
key: pluginKey,
|
|
62
|
-
props: {
|
|
63
|
-
handleDOMEvents: {
|
|
64
|
-
cut: function cut(view) {
|
|
65
|
-
var state = view.state;
|
|
66
|
-
if (hasSyncBlockInSelection(state.selection)) {
|
|
67
|
-
experience.start({
|
|
68
|
-
method: START_METHOD.CUT
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
return false;
|
|
72
|
-
},
|
|
73
|
-
keydown: function keydown(view, event) {
|
|
74
|
-
var state = view.state;
|
|
75
|
-
var hasSelection = hasSyncBlockInSelection(state.selection);
|
|
76
|
-
var hasAdjacent = hasSyncBlockBeforeCursor(state.selection);
|
|
77
|
-
if (hasSelection) {
|
|
78
|
-
experience.start({
|
|
79
|
-
method: START_METHOD.TYPED_OVER
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
if (isDeleteKey(event.key) && hasAdjacent) {
|
|
83
|
-
experience.start({
|
|
84
|
-
method: START_METHOD.DELETE
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
return false;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
appendTransaction: function appendTransaction(transactions, oldState, newState) {
|
|
92
|
-
transactions.forEach(function (tr) {
|
|
93
|
-
var _wasSyncBlockDeletedO = (0, _experienceTrackingUtils.wasSyncBlockDeletedOrAddedByHistory)(tr, oldState, newState),
|
|
94
|
-
hasDeletedSyncBlock = _wasSyncBlockDeletedO.hasDeletedSyncBlock,
|
|
95
|
-
isUndo = _wasSyncBlockDeletedO.isUndo;
|
|
96
|
-
if (hasDeletedSyncBlock) {
|
|
97
|
-
experience.start({
|
|
98
|
-
method: isUndo ? START_METHOD.UNDO : START_METHOD.REDO
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
return null;
|
|
103
|
-
},
|
|
104
|
-
view: function view() {
|
|
105
|
-
return {
|
|
106
|
-
destroy: function destroy() {
|
|
107
|
-
experience.abort({
|
|
108
|
-
reason: _types.EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
|
|
109
|
-
});
|
|
110
|
-
unbindClickListener();
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
};
|
|
116
|
-
var getDeleteReferenceExperience = exports.getDeleteReferenceExperience = function getDeleteReferenceExperience(_ref2) {
|
|
117
|
-
var refs = _ref2.refs,
|
|
118
|
-
dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent;
|
|
119
|
-
return new _experiences.Experience(_analytics.ACTION_SUBJECT.SYNCED_BLOCK, {
|
|
120
|
-
actionSubjectId: _analytics.ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_DELETE,
|
|
121
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
122
|
-
checks: [new _experiences.ExperienceCheckTimeout({
|
|
123
|
-
durationMs: 2000
|
|
124
|
-
}), new _experiences.ExperienceCheckDomMutation({
|
|
125
|
-
onDomMutation: function onDomMutation(_ref3) {
|
|
126
|
-
var mutations = _ref3.mutations;
|
|
127
|
-
var deletedResourceIds = (0, _experienceTrackingUtils.getRemovedResourceIds)(mutations, '[data-prosemirror-node-name="syncBlock"]');
|
|
128
|
-
if (deletedResourceIds.length > 0) {
|
|
129
|
-
return {
|
|
130
|
-
status: 'success',
|
|
131
|
-
metadata: {
|
|
132
|
-
deletedResourceIds: deletedResourceIds
|
|
133
|
-
}
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
return undefined;
|
|
137
|
-
},
|
|
138
|
-
observeConfig: function observeConfig() {
|
|
139
|
-
return {
|
|
140
|
-
target: (0, _experienceTrackingUtils.getTarget)(refs.containerElement),
|
|
141
|
-
options: {
|
|
142
|
-
childList: true
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
})]
|
|
147
|
-
});
|
|
148
|
-
};
|
|
149
|
-
var isReferenceSyncedBlockDeleteButtonId = function isReferenceSyncedBlockDeleteButtonId(testId) {
|
|
150
|
-
return testId === 'reference-synced-block-delete-button';
|
|
151
|
-
};
|
|
152
|
-
var isDeleteKey = function isDeleteKey(key) {
|
|
153
|
-
return key === 'Delete' || key === 'Backspace';
|
|
154
|
-
};
|
|
155
|
-
var hasSyncBlockInSelection = function hasSyncBlockInSelection(selection) {
|
|
156
|
-
var syncBlock = selection.$from.doc.type.schema.nodes.syncBlock;
|
|
157
|
-
var found = false;
|
|
158
|
-
selection.$from.doc.nodesBetween(selection.from, selection.to, function (node) {
|
|
159
|
-
if (node.type === syncBlock) {
|
|
160
|
-
found = true;
|
|
161
|
-
return false;
|
|
162
|
-
}
|
|
163
|
-
// sync block nodes can only be found at the top level
|
|
164
|
-
return false;
|
|
165
|
-
});
|
|
166
|
-
return found;
|
|
167
|
-
};
|
|
168
|
-
var hasSyncBlockBeforeCursor = function hasSyncBlockBeforeCursor(selection) {
|
|
169
|
-
if (!selection.empty) {
|
|
170
|
-
return false;
|
|
171
|
-
}
|
|
172
|
-
var syncBlock = selection.$from.doc.type.schema.nodes.syncBlock;
|
|
173
|
-
var nodeBefore = selection.$from.nodeBefore;
|
|
174
|
-
return (nodeBefore === null || nodeBefore === void 0 ? void 0 : nodeBefore.type) === syncBlock;
|
|
175
|
-
};
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getDeleteSourceExperiencePlugin = exports.getDeleteSourceExperience = void 0;
|
|
7
|
-
var _bindEventListener = require("bind-event-listener");
|
|
8
|
-
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
9
|
-
var _experiences = require("@atlaskit/editor-common/experiences");
|
|
10
|
-
var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
|
|
11
|
-
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
12
|
-
var _types = require("../../types");
|
|
13
|
-
var _experienceTrackingUtils = require("../utils/experience-tracking-utils");
|
|
14
|
-
var pluginKey = new _state.PluginKey('deleteSourceSyncBlockExperience');
|
|
15
|
-
var START_METHOD = {
|
|
16
|
-
DELETE_CONFIRM_BUTTON: 'delete-confirm-button'
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* This experience tracks when a source sync block is deleted.
|
|
21
|
-
*
|
|
22
|
-
* Start: When user clicks the delete button in the delete modal
|
|
23
|
-
* Success: When the sync block is removed from the DOM within 2000ms of start
|
|
24
|
-
* Failure: When 2000ms passes without the source sync block being removed from the DOM
|
|
25
|
-
*/
|
|
26
|
-
var getDeleteSourceExperiencePlugin = exports.getDeleteSourceExperiencePlugin = function getDeleteSourceExperiencePlugin(_ref) {
|
|
27
|
-
var refs = _ref.refs,
|
|
28
|
-
dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
|
|
29
|
-
syncBlockStore = _ref.syncBlockStore;
|
|
30
|
-
var experience = getDeleteSourceExperience({
|
|
31
|
-
refs: refs,
|
|
32
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent
|
|
33
|
-
});
|
|
34
|
-
syncBlockStore.sourceManager.setDeleteExperience(experience);
|
|
35
|
-
var unbindClickListener = (0, _bindEventListener.bind)(document, {
|
|
36
|
-
type: 'click',
|
|
37
|
-
listener: function listener(event) {
|
|
38
|
-
var target = event.target;
|
|
39
|
-
if (!target) {
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
var button = target.closest('button[data-testid]');
|
|
43
|
-
if (!button || !(button instanceof HTMLButtonElement)) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
var testId = button.dataset.testid;
|
|
47
|
-
if (isSyncedBlockDeleteButtonId(testId)) {
|
|
48
|
-
experience.start({
|
|
49
|
-
method: START_METHOD.DELETE_CONFIRM_BUTTON
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
return new _safePlugin.SafePlugin({
|
|
55
|
-
key: pluginKey,
|
|
56
|
-
view: function view() {
|
|
57
|
-
return {
|
|
58
|
-
destroy: function destroy() {
|
|
59
|
-
experience.abort({
|
|
60
|
-
reason: _types.EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
|
|
61
|
-
});
|
|
62
|
-
unbindClickListener();
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
};
|
|
68
|
-
var getDeleteSourceExperience = exports.getDeleteSourceExperience = function getDeleteSourceExperience(_ref2) {
|
|
69
|
-
var refs = _ref2.refs,
|
|
70
|
-
dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent;
|
|
71
|
-
return new _experiences.Experience(_analytics.ACTION_SUBJECT.SYNCED_BLOCK, {
|
|
72
|
-
actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_DELETE,
|
|
73
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
74
|
-
checks: [new _experiences.ExperienceCheckTimeout({
|
|
75
|
-
durationMs: 2000
|
|
76
|
-
}), new _experiences.ExperienceCheckDomMutation({
|
|
77
|
-
onDomMutation: function onDomMutation(_ref3) {
|
|
78
|
-
var mutations = _ref3.mutations;
|
|
79
|
-
var deletedResourceIds = (0, _experienceTrackingUtils.getRemovedResourceIds)(mutations, '[data-prosemirror-node-name="bodiedSyncBlock"]');
|
|
80
|
-
if (deletedResourceIds.length > 0) {
|
|
81
|
-
return {
|
|
82
|
-
status: 'success',
|
|
83
|
-
metadata: {
|
|
84
|
-
deletedResourceIds: deletedResourceIds
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
return undefined;
|
|
89
|
-
},
|
|
90
|
-
observeConfig: function observeConfig() {
|
|
91
|
-
return {
|
|
92
|
-
target: (0, _experienceTrackingUtils.getTarget)(refs.containerElement),
|
|
93
|
-
options: {
|
|
94
|
-
childList: true
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
})]
|
|
99
|
-
});
|
|
100
|
-
};
|
|
101
|
-
var isSyncedBlockDeleteButtonId = function isSyncedBlockDeleteButtonId(testId) {
|
|
102
|
-
return testId === 'synced-block-delete-confirmation-modal-delete-button';
|
|
103
|
-
};
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getExperienceTrackingPlugins = void 0;
|
|
7
|
-
var _createReferenceExperience = require("./create-reference-experience");
|
|
8
|
-
var _createSourceExperience = require("./create-source-experience");
|
|
9
|
-
var _deleteReferenceExperience = require("./delete-reference-experience");
|
|
10
|
-
var _deleteSourceExperience = require("./delete-source-experience");
|
|
11
|
-
var _providerOnlyExperiences = require("./provider-only-experiences");
|
|
12
|
-
var getExperienceTrackingPlugins = exports.getExperienceTrackingPlugins = function getExperienceTrackingPlugins(_ref) {
|
|
13
|
-
var refs = _ref.refs,
|
|
14
|
-
dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
|
|
15
|
-
syncBlockStore = _ref.syncBlockStore;
|
|
16
|
-
return [{
|
|
17
|
-
name: 'createReferenceSyncedBlockExperiencePlugin',
|
|
18
|
-
plugin: function plugin() {
|
|
19
|
-
return (0, _createReferenceExperience.getCreateReferenceExperiencePlugin)({
|
|
20
|
-
refs: refs,
|
|
21
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
}, {
|
|
25
|
-
name: 'createSourceSyncedBlockExperiencePlugin',
|
|
26
|
-
plugin: function plugin() {
|
|
27
|
-
return (0, _createSourceExperience.getCreateSourceExperiencePlugin)({
|
|
28
|
-
refs: refs,
|
|
29
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
30
|
-
syncBlockStore: syncBlockStore
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
}, {
|
|
34
|
-
name: 'deleteSourceExperiencePlugin',
|
|
35
|
-
plugin: function plugin() {
|
|
36
|
-
return (0, _deleteSourceExperience.getDeleteSourceExperiencePlugin)({
|
|
37
|
-
refs: refs,
|
|
38
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
39
|
-
syncBlockStore: syncBlockStore
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
}, {
|
|
43
|
-
name: 'deleteReferenceExperiencePlugin',
|
|
44
|
-
plugin: function plugin() {
|
|
45
|
-
return (0, _deleteReferenceExperience.getDeleteReferenceExperiencePlugin)({
|
|
46
|
-
refs: refs,
|
|
47
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
48
|
-
syncBlockStore: syncBlockStore
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
}, {
|
|
52
|
-
name: 'providerOnlySyncedBlockExperiencesPlugin',
|
|
53
|
-
plugin: function plugin() {
|
|
54
|
-
return (0, _providerOnlyExperiences.getProviderOnlyExperiencesPlugin)({
|
|
55
|
-
refs: refs,
|
|
56
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
57
|
-
syncBlockStore: syncBlockStore
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
}];
|
|
61
|
-
};
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getProviderOnlyExperiencesPlugin = void 0;
|
|
7
|
-
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
8
|
-
var _experiences = require("@atlaskit/editor-common/experiences");
|
|
9
|
-
var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
|
|
10
|
-
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
11
|
-
var _types = require("../../types");
|
|
12
|
-
var pluginKey = new _state.PluginKey('providerOnlySyncBlockExperiences');
|
|
13
|
-
var getProviderOnlyExperiencesPlugin = exports.getProviderOnlyExperiencesPlugin = function getProviderOnlyExperiencesPlugin(_ref) {
|
|
14
|
-
var refs = _ref.refs,
|
|
15
|
-
dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
|
|
16
|
-
syncBlockStore = _ref.syncBlockStore;
|
|
17
|
-
var saveSourceExperience = getSaveSourceExperience({
|
|
18
|
-
refs: refs,
|
|
19
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent
|
|
20
|
-
});
|
|
21
|
-
syncBlockStore.sourceManager.setSaveExperience(saveSourceExperience);
|
|
22
|
-
var saveReferenceExperience = getSaveReferenceExperience({
|
|
23
|
-
refs: refs,
|
|
24
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent
|
|
25
|
-
});
|
|
26
|
-
var fetchExperience = getFetchExperience({
|
|
27
|
-
refs: refs,
|
|
28
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent
|
|
29
|
-
});
|
|
30
|
-
var fetchSourceInfoExperience = getFetchSourceInfoExperience({
|
|
31
|
-
refs: refs,
|
|
32
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent
|
|
33
|
-
});
|
|
34
|
-
syncBlockStore.referenceManager.setExperiences(fetchExperience, fetchSourceInfoExperience, saveReferenceExperience);
|
|
35
|
-
return new _safePlugin.SafePlugin({
|
|
36
|
-
key: pluginKey,
|
|
37
|
-
view: function view() {
|
|
38
|
-
return {
|
|
39
|
-
destroy: function destroy() {
|
|
40
|
-
saveSourceExperience.abort({
|
|
41
|
-
reason: _types.EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
|
|
42
|
-
});
|
|
43
|
-
saveReferenceExperience.abort({
|
|
44
|
-
reason: _types.EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
|
|
45
|
-
});
|
|
46
|
-
fetchExperience.abort({
|
|
47
|
-
reason: _types.EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
|
|
48
|
-
});
|
|
49
|
-
fetchSourceInfoExperience.abort({
|
|
50
|
-
reason: _types.EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* This experience tracks when a source sync block is saved to the BE.
|
|
60
|
-
*
|
|
61
|
-
* Start: When the flush source sync block function is called.
|
|
62
|
-
* Success: When the sync block save is successful within 1500ms of start.
|
|
63
|
-
* Failure: When 1500ms passes without the sync block being successfully saved
|
|
64
|
-
*/
|
|
65
|
-
var getSaveSourceExperience = function getSaveSourceExperience(_ref2) {
|
|
66
|
-
var dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent;
|
|
67
|
-
return new _experiences.Experience(_analytics.ACTION_SUBJECT.SYNCED_BLOCK, {
|
|
68
|
-
actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_UPDATE,
|
|
69
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
70
|
-
checks: [new _experiences.ExperienceCheckTimeout({
|
|
71
|
-
durationMs: 1500
|
|
72
|
-
})]
|
|
73
|
-
});
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* This experience tracks when a reference sync block is saved to the BE.
|
|
78
|
-
*
|
|
79
|
-
* Start: When the flush sync block function is called.
|
|
80
|
-
* Success: When the sync block save is successful within 1500ms of start.
|
|
81
|
-
* Failure: When 1500ms passes without the sync block being successfully saved
|
|
82
|
-
*/
|
|
83
|
-
var getSaveReferenceExperience = function getSaveReferenceExperience(_ref3) {
|
|
84
|
-
var dispatchAnalyticsEvent = _ref3.dispatchAnalyticsEvent;
|
|
85
|
-
return new _experiences.Experience(_analytics.ACTION_SUBJECT.SYNCED_BLOCK, {
|
|
86
|
-
actionSubjectId: _analytics.ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_UPDATE,
|
|
87
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
88
|
-
checks: [new _experiences.ExperienceCheckTimeout({
|
|
89
|
-
durationMs: 1500
|
|
90
|
-
})]
|
|
91
|
-
});
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* This experience tracks when a reference sync block data is fetched from the BE.
|
|
96
|
-
*
|
|
97
|
-
* Start: When the fetchNodesData function is called.
|
|
98
|
-
* Success: When the fetching the data is successful within 1500ms of start.
|
|
99
|
-
* Failure: When 1500ms passes without the data being successfully fetched, or the fetch fails
|
|
100
|
-
*/
|
|
101
|
-
var getFetchExperience = function getFetchExperience(_ref4) {
|
|
102
|
-
var dispatchAnalyticsEvent = _ref4.dispatchAnalyticsEvent;
|
|
103
|
-
return new _experiences.Experience(_analytics.ACTION_SUBJECT.SYNCED_BLOCK, {
|
|
104
|
-
actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_FETCH,
|
|
105
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
106
|
-
checks: [new _experiences.ExperienceCheckTimeout({
|
|
107
|
-
durationMs: 1500
|
|
108
|
-
})]
|
|
109
|
-
});
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* This experience tracks when a reference sync block source info data (title, url) is fetched from the BE.
|
|
114
|
-
*
|
|
115
|
-
* Start: When the fetchSourceInfo function is called.
|
|
116
|
-
* Success: When the fetching the data is successful within 2500ms of start.
|
|
117
|
-
* Failure: When 2500ms passes without the data being successfully fetched, or the fetch fails
|
|
118
|
-
*/
|
|
119
|
-
var getFetchSourceInfoExperience = function getFetchSourceInfoExperience(_ref5) {
|
|
120
|
-
var dispatchAnalyticsEvent = _ref5.dispatchAnalyticsEvent;
|
|
121
|
-
return new _experiences.Experience(_analytics.ACTION_SUBJECT.SYNCED_BLOCK, {
|
|
122
|
-
actionSubjectId: _analytics.ACTION_SUBJECT_ID.SYNCED_BLOCK_GET_SOURCE_INFO,
|
|
123
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
124
|
-
checks: [new _experiences.ExperienceCheckTimeout({
|
|
125
|
-
durationMs: 2500
|
|
126
|
-
})]
|
|
127
|
-
});
|
|
128
|
-
};
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.wasSyncBlockDeletedOrAddedByHistory = exports.getTarget = exports.getRemovedResourceIds = exports.getAddedResourceIds = void 0;
|
|
7
|
-
var _utils = require("@atlaskit/editor-common/utils");
|
|
8
|
-
var _utils2 = require("@atlaskit/editor-prosemirror/utils");
|
|
9
|
-
var targetEl;
|
|
10
|
-
var getTarget = exports.getTarget = function getTarget(containerElement) {
|
|
11
|
-
if (!targetEl) {
|
|
12
|
-
var element = containerElement === null || containerElement === void 0 ? void 0 : containerElement.querySelector('.ProseMirror');
|
|
13
|
-
if (!element || !(element instanceof HTMLElement)) {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
targetEl = element;
|
|
17
|
-
}
|
|
18
|
-
return targetEl;
|
|
19
|
-
};
|
|
20
|
-
var wasSyncBlockDeletedOrAddedByHistory = exports.wasSyncBlockDeletedOrAddedByHistory = function wasSyncBlockDeletedOrAddedByHistory(tr, oldState, newState) {
|
|
21
|
-
var historyMeta = tr.getMeta(_utils.pmHistoryPluginKey);
|
|
22
|
-
if (!Boolean(historyMeta)) {
|
|
23
|
-
return {};
|
|
24
|
-
}
|
|
25
|
-
var syncBlock = newState.schema.nodes.syncBlock;
|
|
26
|
-
var oldSyncBlockNodes = (0, _utils2.findChildren)(oldState.doc, function (node) {
|
|
27
|
-
return node.type === syncBlock;
|
|
28
|
-
});
|
|
29
|
-
var newSyncBlockNodes = (0, _utils2.findChildren)(newState.doc, function (node) {
|
|
30
|
-
return node.type === syncBlock;
|
|
31
|
-
});
|
|
32
|
-
var oldSyncBlockIds = new Set(oldSyncBlockNodes.map(function (nodeWithPos) {
|
|
33
|
-
return nodeWithPos.node.attrs.localId;
|
|
34
|
-
}).filter(function (localId) {
|
|
35
|
-
return Boolean(localId);
|
|
36
|
-
}));
|
|
37
|
-
var newSyncBlockIds = new Set(newSyncBlockNodes.map(function (nodeWithPos) {
|
|
38
|
-
return nodeWithPos.node.attrs.localId;
|
|
39
|
-
}).filter(function (localId) {
|
|
40
|
-
return Boolean(localId);
|
|
41
|
-
}));
|
|
42
|
-
var hasDeletedSyncBlock = Array.from(oldSyncBlockIds).some(function (localId) {
|
|
43
|
-
return !newSyncBlockIds.has(localId);
|
|
44
|
-
});
|
|
45
|
-
var hasAddedSyncBlock = Array.from(newSyncBlockIds).some(function (localId) {
|
|
46
|
-
return !oldSyncBlockIds.has(localId);
|
|
47
|
-
});
|
|
48
|
-
return {
|
|
49
|
-
hasDeletedSyncBlock: hasDeletedSyncBlock,
|
|
50
|
-
hasAddedSyncBlock: hasAddedSyncBlock,
|
|
51
|
-
isUndo: historyMeta.redo === false
|
|
52
|
-
};
|
|
53
|
-
};
|
|
54
|
-
var getResourceIds = function getResourceIds(nodes, resourceIds, query) {
|
|
55
|
-
nodes.forEach(function (node) {
|
|
56
|
-
if (!(node instanceof HTMLElement)) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
var syncBlockElements = node.querySelectorAll(query);
|
|
60
|
-
syncBlockElements.forEach(function (element) {
|
|
61
|
-
var resourceId = element.getAttribute('resourceid');
|
|
62
|
-
if (resourceId) {
|
|
63
|
-
resourceIds.push(resourceId);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
};
|
|
68
|
-
var getAddedResourceIds = exports.getAddedResourceIds = function getAddedResourceIds(mutations, query) {
|
|
69
|
-
var resourceIds = [];
|
|
70
|
-
mutations.forEach(function (mutation) {
|
|
71
|
-
if (mutation.type === 'childList') {
|
|
72
|
-
getResourceIds(mutation.addedNodes, resourceIds, query);
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
return resourceIds;
|
|
76
|
-
};
|
|
77
|
-
var getRemovedResourceIds = exports.getRemovedResourceIds = function getRemovedResourceIds(mutations, query) {
|
|
78
|
-
var resourceIds = [];
|
|
79
|
-
mutations.forEach(function (mutation) {
|
|
80
|
-
if (mutation.type === 'childList') {
|
|
81
|
-
getResourceIds(mutation.removedNodes, resourceIds, query);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
return resourceIds;
|
|
85
|
-
};
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { ACTION_SUBJECT, ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
|
|
2
|
-
import { Experience, ExperienceCheckDomMutation, ExperienceCheckTimeout } from '@atlaskit/editor-common/experiences';
|
|
3
|
-
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
|
|
4
|
-
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
|
|
5
|
-
import { EXPERIENCE_ABORT_REASON } from '../../types';
|
|
6
|
-
import { getAddedResourceIds, wasSyncBlockDeletedOrAddedByHistory, getTarget } from '../utils/experience-tracking-utils';
|
|
7
|
-
const isPastedFromFabricEditor = html => !!html && html.indexOf('data-pm-slice="') >= 0;
|
|
8
|
-
const pluginKey = new PluginKey('createReferenceSyncBlockExperience');
|
|
9
|
-
const START_METHOD = {
|
|
10
|
-
PASTE: 'paste',
|
|
11
|
-
UNDO: 'undo',
|
|
12
|
-
REDO: 'redo'
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* This experience tracks when a reference sync block is inserted.
|
|
17
|
-
*
|
|
18
|
-
* Start: When user pastes a sync block from editor and createSyncedBlock is called
|
|
19
|
-
* Success: When the sync block is added to the DOM within 500ms of start
|
|
20
|
-
* Failure: When 500ms passes without the reference sync block being added to the DOM
|
|
21
|
-
*/
|
|
22
|
-
export const getCreateReferenceExperiencePlugin = ({
|
|
23
|
-
refs,
|
|
24
|
-
dispatchAnalyticsEvent
|
|
25
|
-
}) => {
|
|
26
|
-
const experience = getCreateReferenceExperience({
|
|
27
|
-
refs,
|
|
28
|
-
dispatchAnalyticsEvent
|
|
29
|
-
});
|
|
30
|
-
return new SafePlugin({
|
|
31
|
-
key: pluginKey,
|
|
32
|
-
view: () => {
|
|
33
|
-
return {
|
|
34
|
-
destroy: () => {
|
|
35
|
-
experience.abort({
|
|
36
|
-
reason: EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
},
|
|
41
|
-
props: {
|
|
42
|
-
handlePaste: (_view, rawEvent, slice) => {
|
|
43
|
-
var _event$clipboardData;
|
|
44
|
-
const event = rawEvent;
|
|
45
|
-
const html = (_event$clipboardData = event.clipboardData) === null || _event$clipboardData === void 0 ? void 0 : _event$clipboardData.getData('text/html');
|
|
46
|
-
|
|
47
|
-
// do not start on paste from renderer, because this flattens the content and does not create a reference block
|
|
48
|
-
if (isPastedFromFabricEditor(html)) {
|
|
49
|
-
slice.content.forEach(node => {
|
|
50
|
-
if (node.type.name === 'syncBlock' || node.type.name === 'bodiedSyncBlock') {
|
|
51
|
-
experience.start({
|
|
52
|
-
method: START_METHOD.PASTE
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
},
|
|
59
|
-
appendTransaction: (transactions, oldState, newState) => {
|
|
60
|
-
transactions.forEach(tr => {
|
|
61
|
-
const {
|
|
62
|
-
hasAddedSyncBlock,
|
|
63
|
-
isUndo
|
|
64
|
-
} = wasSyncBlockDeletedOrAddedByHistory(tr, oldState, newState);
|
|
65
|
-
if (hasAddedSyncBlock) {
|
|
66
|
-
experience.start({
|
|
67
|
-
method: isUndo ? START_METHOD.UNDO : START_METHOD.REDO
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
};
|
|
75
|
-
const getCreateReferenceExperience = ({
|
|
76
|
-
refs,
|
|
77
|
-
dispatchAnalyticsEvent
|
|
78
|
-
}) => {
|
|
79
|
-
return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
|
|
80
|
-
actionSubjectId: ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_CREATE,
|
|
81
|
-
dispatchAnalyticsEvent,
|
|
82
|
-
checks: [new ExperienceCheckTimeout({
|
|
83
|
-
durationMs: 500
|
|
84
|
-
}), new ExperienceCheckDomMutation({
|
|
85
|
-
onDomMutation: ({
|
|
86
|
-
mutations
|
|
87
|
-
}) => {
|
|
88
|
-
const insertedResourceIds = getAddedResourceIds(mutations, '[data-prosemirror-node-name="syncBlock"]');
|
|
89
|
-
if (insertedResourceIds.length > 0) {
|
|
90
|
-
return {
|
|
91
|
-
status: 'success',
|
|
92
|
-
metadata: {
|
|
93
|
-
insertedResourceIds
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
return undefined;
|
|
98
|
-
},
|
|
99
|
-
observeConfig: () => {
|
|
100
|
-
return {
|
|
101
|
-
target: getTarget(refs.containerElement),
|
|
102
|
-
options: {
|
|
103
|
-
childList: true
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
})]
|
|
108
|
-
});
|
|
109
|
-
};
|