@atlaskit/editor-plugin-synced-block 5.2.1 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/afm-jira/tsconfig.json +1 -1
- package/dist/cjs/editor-commands/index.js +43 -5
- package/dist/cjs/editor-commands/utils.js +20 -0
- 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/SyncBlockRefresher.js +18 -4
- package/dist/cjs/ui/SyncedLocationDropdown.js +14 -11
- package/dist/cjs/ui/floating-toolbar.js +21 -2
- package/dist/es2019/editor-commands/index.js +44 -4
- package/dist/es2019/editor-commands/utils.js +14 -0
- 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/SyncBlockRefresher.js +18 -4
- package/dist/es2019/ui/SyncedLocationDropdown.js +14 -11
- package/dist/es2019/ui/floating-toolbar.js +20 -3
- package/dist/esm/editor-commands/index.js +42 -4
- package/dist/esm/editor-commands/utils.js +14 -0
- 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/SyncBlockRefresher.js +18 -4
- package/dist/esm/ui/SyncedLocationDropdown.js +14 -11
- package/dist/esm/ui/floating-toolbar.js +22 -3
- package/dist/types/editor-commands/index.d.ts +8 -1
- package/dist/types/editor-commands/utils.d.ts +2 -0
- 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 +8 -1
- package/dist/types-ts4.5/editor-commands/utils.d.ts +2 -0
- 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,107 +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
|
-
var isPastedFromFabricEditor = function isPastedFromFabricEditor(html) {
|
|
8
|
-
return !!html && html.indexOf('data-pm-slice="') >= 0;
|
|
9
|
-
};
|
|
10
|
-
var pluginKey = new PluginKey('createReferenceSyncBlockExperience');
|
|
11
|
-
var START_METHOD = {
|
|
12
|
-
PASTE: 'paste',
|
|
13
|
-
UNDO: 'undo',
|
|
14
|
-
REDO: 'redo'
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* This experience tracks when a reference sync block is inserted.
|
|
19
|
-
*
|
|
20
|
-
* Start: When user pastes a sync block from editor and createSyncedBlock is called
|
|
21
|
-
* Success: When the sync block is added to the DOM within 500ms of start
|
|
22
|
-
* Failure: When 500ms passes without the reference sync block being added to the DOM
|
|
23
|
-
*/
|
|
24
|
-
export var getCreateReferenceExperiencePlugin = function getCreateReferenceExperiencePlugin(_ref) {
|
|
25
|
-
var refs = _ref.refs,
|
|
26
|
-
dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent;
|
|
27
|
-
var experience = getCreateReferenceExperience({
|
|
28
|
-
refs: refs,
|
|
29
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent
|
|
30
|
-
});
|
|
31
|
-
return new SafePlugin({
|
|
32
|
-
key: pluginKey,
|
|
33
|
-
view: function view() {
|
|
34
|
-
return {
|
|
35
|
-
destroy: function destroy() {
|
|
36
|
-
experience.abort({
|
|
37
|
-
reason: EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
},
|
|
42
|
-
props: {
|
|
43
|
-
handlePaste: function handlePaste(_view, rawEvent, slice) {
|
|
44
|
-
var _event$clipboardData;
|
|
45
|
-
var event = rawEvent;
|
|
46
|
-
var html = (_event$clipboardData = event.clipboardData) === null || _event$clipboardData === void 0 ? void 0 : _event$clipboardData.getData('text/html');
|
|
47
|
-
|
|
48
|
-
// do not start on paste from renderer, because this flattens the content and does not create a reference block
|
|
49
|
-
if (isPastedFromFabricEditor(html)) {
|
|
50
|
-
slice.content.forEach(function (node) {
|
|
51
|
-
if (node.type.name === 'syncBlock' || node.type.name === 'bodiedSyncBlock') {
|
|
52
|
-
experience.start({
|
|
53
|
-
method: START_METHOD.PASTE
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
appendTransaction: function appendTransaction(transactions, oldState, newState) {
|
|
61
|
-
transactions.forEach(function (tr) {
|
|
62
|
-
var _wasSyncBlockDeletedO = wasSyncBlockDeletedOrAddedByHistory(tr, oldState, newState),
|
|
63
|
-
hasAddedSyncBlock = _wasSyncBlockDeletedO.hasAddedSyncBlock,
|
|
64
|
-
isUndo = _wasSyncBlockDeletedO.isUndo;
|
|
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
|
-
var getCreateReferenceExperience = function getCreateReferenceExperience(_ref2) {
|
|
76
|
-
var refs = _ref2.refs,
|
|
77
|
-
dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent;
|
|
78
|
-
return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
|
|
79
|
-
actionSubjectId: ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_CREATE,
|
|
80
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
81
|
-
checks: [new ExperienceCheckTimeout({
|
|
82
|
-
durationMs: 500
|
|
83
|
-
}), new ExperienceCheckDomMutation({
|
|
84
|
-
onDomMutation: function onDomMutation(_ref3) {
|
|
85
|
-
var mutations = _ref3.mutations;
|
|
86
|
-
var insertedResourceIds = getAddedResourceIds(mutations, '[data-prosemirror-node-name="syncBlock"]');
|
|
87
|
-
if (insertedResourceIds.length > 0) {
|
|
88
|
-
return {
|
|
89
|
-
status: 'success',
|
|
90
|
-
metadata: {
|
|
91
|
-
insertedResourceIds: insertedResourceIds
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
return undefined;
|
|
96
|
-
},
|
|
97
|
-
observeConfig: function observeConfig() {
|
|
98
|
-
return {
|
|
99
|
-
target: getTarget(refs.containerElement),
|
|
100
|
-
options: {
|
|
101
|
-
childList: true
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
})]
|
|
106
|
-
});
|
|
107
|
-
};
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import { bind } from 'bind-event-listener';
|
|
2
|
-
import { ACTION_SUBJECT, ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
|
|
3
|
-
import { Experience, ExperienceCheckDomMutation, ExperienceCheckTimeout, getPopupContainerFromEditorView, popupWithNestedElement } from '@atlaskit/editor-common/experiences';
|
|
4
|
-
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
|
|
5
|
-
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
|
|
6
|
-
import { EXPERIENCE_ABORT_REASON } from '../../types';
|
|
7
|
-
import { getAddedResourceIds, getTarget } from '../utils/experience-tracking-utils';
|
|
8
|
-
var pluginKey = new PluginKey('createSourceSyncBlockExperience');
|
|
9
|
-
var START_METHOD = {
|
|
10
|
-
BLOCK_MENU: 'block-menu',
|
|
11
|
-
PINNED_TOOLBAR: 'pinned-toolbar',
|
|
12
|
-
QUICK_INSERT: 'quick-insert'
|
|
13
|
-
};
|
|
14
|
-
var SYNCED_BLOCK_CREATE_BUTTON_IDS = ['create-synced-block-toolbar-btn', 'create-synced-block-block-menu-btn', 'create-synced-block-quick-insert-btn'];
|
|
15
|
-
var syncedBlockCreateButtonIds = new Set(SYNCED_BLOCK_CREATE_BUTTON_IDS);
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* This experience tracks when a source sync block is inserted.
|
|
19
|
-
*
|
|
20
|
-
* Start: When user inserts a sync block via block menu, quick insert or pinned toolbar
|
|
21
|
-
* Success: When the sync block is added to the DOM within 3000ms of start
|
|
22
|
-
* Failure: When 3000ms passes without the source sync block being added to the DOM
|
|
23
|
-
*/
|
|
24
|
-
export var getCreateSourceExperiencePlugin = function getCreateSourceExperiencePlugin(_ref) {
|
|
25
|
-
var refs = _ref.refs,
|
|
26
|
-
dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
|
|
27
|
-
syncBlockStore = _ref.syncBlockStore;
|
|
28
|
-
var popupsTargetEl;
|
|
29
|
-
var editorViewEl;
|
|
30
|
-
var getPopupsTarget = function getPopupsTarget() {
|
|
31
|
-
if (!popupsTargetEl) {
|
|
32
|
-
popupsTargetEl = refs.popupsMountPoint || refs.wrapperElement || getPopupContainerFromEditorView(editorViewEl);
|
|
33
|
-
}
|
|
34
|
-
return popupsTargetEl;
|
|
35
|
-
};
|
|
36
|
-
var experience = getCreateSourceExperience({
|
|
37
|
-
refs: refs,
|
|
38
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent
|
|
39
|
-
});
|
|
40
|
-
syncBlockStore.sourceManager.setCreateExperience(experience);
|
|
41
|
-
var unbindClickListener = 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 (!isSyncedBlockCreateButtonId(testId)) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
handleButtonClick(testId, experience);
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
var unbindKeydownListener = bind(document, {
|
|
60
|
-
type: 'keydown',
|
|
61
|
-
listener: function listener(event) {
|
|
62
|
-
if (isEnterKey(event.key)) {
|
|
63
|
-
var typeaheadPopup = popupWithNestedElement(getPopupsTarget(), '.fabric-editor-typeahead');
|
|
64
|
-
if (!typeaheadPopup || !(typeaheadPopup instanceof HTMLElement)) {
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
var firstItem = typeaheadPopup.querySelector('[role="option"]');
|
|
68
|
-
if (!firstItem || !(firstItem instanceof HTMLElement)) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
var testId = firstItem.dataset.testid;
|
|
72
|
-
if (testId === 'create-synced-block-quick-insert-btn') {
|
|
73
|
-
experience.start({
|
|
74
|
-
method: START_METHOD.QUICK_INSERT
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
options: {
|
|
80
|
-
capture: true
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
return new SafePlugin({
|
|
84
|
-
key: pluginKey,
|
|
85
|
-
view: function view(editorView) {
|
|
86
|
-
editorViewEl = editorView.dom;
|
|
87
|
-
return {
|
|
88
|
-
destroy: function destroy() {
|
|
89
|
-
experience.abort({
|
|
90
|
-
reason: EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
|
|
91
|
-
});
|
|
92
|
-
unbindClickListener();
|
|
93
|
-
unbindKeydownListener();
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
};
|
|
99
|
-
var getCreateSourceExperience = function getCreateSourceExperience(_ref2) {
|
|
100
|
-
var refs = _ref2.refs,
|
|
101
|
-
dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent;
|
|
102
|
-
return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
|
|
103
|
-
actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_CREATE,
|
|
104
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
105
|
-
checks: [new ExperienceCheckTimeout({
|
|
106
|
-
durationMs: 3000
|
|
107
|
-
}), new ExperienceCheckDomMutation({
|
|
108
|
-
onDomMutation: function onDomMutation(_ref3) {
|
|
109
|
-
var mutations = _ref3.mutations;
|
|
110
|
-
var createdResourceIds = getAddedResourceIds(mutations, '[data-prosemirror-node-name="bodiedSyncBlock"]');
|
|
111
|
-
if (createdResourceIds.length > 0) {
|
|
112
|
-
return {
|
|
113
|
-
status: 'success',
|
|
114
|
-
metadata: {
|
|
115
|
-
createdResourceIds: createdResourceIds
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
return undefined;
|
|
120
|
-
},
|
|
121
|
-
observeConfig: function observeConfig() {
|
|
122
|
-
return {
|
|
123
|
-
target: getTarget(refs.containerElement),
|
|
124
|
-
options: {
|
|
125
|
-
childList: true
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
})]
|
|
130
|
-
});
|
|
131
|
-
};
|
|
132
|
-
var isSyncedBlockCreateButtonId = function isSyncedBlockCreateButtonId(value) {
|
|
133
|
-
return !!value && syncedBlockCreateButtonIds.has(value);
|
|
134
|
-
};
|
|
135
|
-
var handleButtonClick = function handleButtonClick(testId, experience) {
|
|
136
|
-
switch (testId) {
|
|
137
|
-
case 'create-synced-block-toolbar-btn':
|
|
138
|
-
experience.start({
|
|
139
|
-
method: START_METHOD.PINNED_TOOLBAR
|
|
140
|
-
});
|
|
141
|
-
break;
|
|
142
|
-
case 'create-synced-block-block-menu-btn':
|
|
143
|
-
experience.start({
|
|
144
|
-
method: START_METHOD.BLOCK_MENU
|
|
145
|
-
});
|
|
146
|
-
break;
|
|
147
|
-
case 'create-synced-block-quick-insert-btn':
|
|
148
|
-
experience.start({
|
|
149
|
-
method: START_METHOD.QUICK_INSERT
|
|
150
|
-
});
|
|
151
|
-
break;
|
|
152
|
-
default:
|
|
153
|
-
{
|
|
154
|
-
// Exhaustiveness check: if a new SyncedBlockToolbarButtonId is added
|
|
155
|
-
// but not handled above, TypeScript will error here.
|
|
156
|
-
var _exhaustiveCheck = testId;
|
|
157
|
-
return _exhaustiveCheck;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
};
|
|
161
|
-
var isEnterKey = function isEnterKey(key) {
|
|
162
|
-
return key === 'Enter';
|
|
163
|
-
};
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
import { bind } from 'bind-event-listener';
|
|
2
|
-
import { ACTION_SUBJECT, ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
|
|
3
|
-
import { Experience, ExperienceCheckDomMutation, ExperienceCheckTimeout } from '@atlaskit/editor-common/experiences';
|
|
4
|
-
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
|
|
5
|
-
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
|
|
6
|
-
import { EXPERIENCE_ABORT_REASON } from '../../types';
|
|
7
|
-
import { getRemovedResourceIds, getTarget, wasSyncBlockDeletedOrAddedByHistory } from '../utils/experience-tracking-utils';
|
|
8
|
-
var pluginKey = new PluginKey('deleteReferenceSyncBlockExperience');
|
|
9
|
-
var START_METHOD = {
|
|
10
|
-
ELEMENT_TOOLBAR: 'element-toolbar',
|
|
11
|
-
DELETE: 'delete',
|
|
12
|
-
TYPED_OVER: 'typed-over',
|
|
13
|
-
CUT: 'cut',
|
|
14
|
-
UNDO: 'undo',
|
|
15
|
-
REDO: 'redo'
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* This experience tracks when a reference sync block is deleted.
|
|
20
|
-
*
|
|
21
|
-
* Start: When user deletes ref sync block from toolbar, presses delete when cursor is in front of ref sync block,
|
|
22
|
-
* 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
|
|
23
|
-
* Success: When the sync block is removed from the DOM within 2000ms of start
|
|
24
|
-
* Failure: When 2000ms passes without the reference sync block being removed from the DOM
|
|
25
|
-
*/
|
|
26
|
-
export var getDeleteReferenceExperiencePlugin = function getDeleteReferenceExperiencePlugin(_ref) {
|
|
27
|
-
var refs = _ref.refs,
|
|
28
|
-
dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
|
|
29
|
-
syncBlockStore = _ref.syncBlockStore;
|
|
30
|
-
var experience = getDeleteReferenceExperience({
|
|
31
|
-
refs: refs,
|
|
32
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent
|
|
33
|
-
});
|
|
34
|
-
syncBlockStore.sourceManager.setDeleteExperience(experience);
|
|
35
|
-
var unbindClickListener = 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 (isReferenceSyncedBlockDeleteButtonId(testId)) {
|
|
48
|
-
experience.start({
|
|
49
|
-
method: START_METHOD.ELEMENT_TOOLBAR
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
return new SafePlugin({
|
|
55
|
-
key: pluginKey,
|
|
56
|
-
props: {
|
|
57
|
-
handleDOMEvents: {
|
|
58
|
-
cut: function cut(view) {
|
|
59
|
-
var state = view.state;
|
|
60
|
-
if (hasSyncBlockInSelection(state.selection)) {
|
|
61
|
-
experience.start({
|
|
62
|
-
method: START_METHOD.CUT
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
return false;
|
|
66
|
-
},
|
|
67
|
-
keydown: function keydown(view, event) {
|
|
68
|
-
var state = view.state;
|
|
69
|
-
var hasSelection = hasSyncBlockInSelection(state.selection);
|
|
70
|
-
var hasAdjacent = hasSyncBlockBeforeCursor(state.selection);
|
|
71
|
-
if (hasSelection) {
|
|
72
|
-
experience.start({
|
|
73
|
-
method: START_METHOD.TYPED_OVER
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
if (isDeleteKey(event.key) && hasAdjacent) {
|
|
77
|
-
experience.start({
|
|
78
|
-
method: START_METHOD.DELETE
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
return false;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
},
|
|
85
|
-
appendTransaction: function appendTransaction(transactions, oldState, newState) {
|
|
86
|
-
transactions.forEach(function (tr) {
|
|
87
|
-
var _wasSyncBlockDeletedO = wasSyncBlockDeletedOrAddedByHistory(tr, oldState, newState),
|
|
88
|
-
hasDeletedSyncBlock = _wasSyncBlockDeletedO.hasDeletedSyncBlock,
|
|
89
|
-
isUndo = _wasSyncBlockDeletedO.isUndo;
|
|
90
|
-
if (hasDeletedSyncBlock) {
|
|
91
|
-
experience.start({
|
|
92
|
-
method: isUndo ? START_METHOD.UNDO : START_METHOD.REDO
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
return null;
|
|
97
|
-
},
|
|
98
|
-
view: function view() {
|
|
99
|
-
return {
|
|
100
|
-
destroy: function destroy() {
|
|
101
|
-
experience.abort({
|
|
102
|
-
reason: EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
|
|
103
|
-
});
|
|
104
|
-
unbindClickListener();
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
};
|
|
110
|
-
export var getDeleteReferenceExperience = function getDeleteReferenceExperience(_ref2) {
|
|
111
|
-
var refs = _ref2.refs,
|
|
112
|
-
dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent;
|
|
113
|
-
return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
|
|
114
|
-
actionSubjectId: ACTION_SUBJECT_ID.REFERENCE_SYNCED_BLOCK_DELETE,
|
|
115
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
116
|
-
checks: [new ExperienceCheckTimeout({
|
|
117
|
-
durationMs: 2000
|
|
118
|
-
}), new ExperienceCheckDomMutation({
|
|
119
|
-
onDomMutation: function onDomMutation(_ref3) {
|
|
120
|
-
var mutations = _ref3.mutations;
|
|
121
|
-
var deletedResourceIds = getRemovedResourceIds(mutations, '[data-prosemirror-node-name="syncBlock"]');
|
|
122
|
-
if (deletedResourceIds.length > 0) {
|
|
123
|
-
return {
|
|
124
|
-
status: 'success',
|
|
125
|
-
metadata: {
|
|
126
|
-
deletedResourceIds: deletedResourceIds
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
return undefined;
|
|
131
|
-
},
|
|
132
|
-
observeConfig: function observeConfig() {
|
|
133
|
-
return {
|
|
134
|
-
target: getTarget(refs.containerElement),
|
|
135
|
-
options: {
|
|
136
|
-
childList: true
|
|
137
|
-
}
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
})]
|
|
141
|
-
});
|
|
142
|
-
};
|
|
143
|
-
var isReferenceSyncedBlockDeleteButtonId = function isReferenceSyncedBlockDeleteButtonId(testId) {
|
|
144
|
-
return testId === 'reference-synced-block-delete-button';
|
|
145
|
-
};
|
|
146
|
-
var isDeleteKey = function isDeleteKey(key) {
|
|
147
|
-
return key === 'Delete' || key === 'Backspace';
|
|
148
|
-
};
|
|
149
|
-
var hasSyncBlockInSelection = function hasSyncBlockInSelection(selection) {
|
|
150
|
-
var syncBlock = selection.$from.doc.type.schema.nodes.syncBlock;
|
|
151
|
-
var found = false;
|
|
152
|
-
selection.$from.doc.nodesBetween(selection.from, selection.to, function (node) {
|
|
153
|
-
if (node.type === syncBlock) {
|
|
154
|
-
found = true;
|
|
155
|
-
return false;
|
|
156
|
-
}
|
|
157
|
-
// sync block nodes can only be found at the top level
|
|
158
|
-
return false;
|
|
159
|
-
});
|
|
160
|
-
return found;
|
|
161
|
-
};
|
|
162
|
-
var hasSyncBlockBeforeCursor = function hasSyncBlockBeforeCursor(selection) {
|
|
163
|
-
if (!selection.empty) {
|
|
164
|
-
return false;
|
|
165
|
-
}
|
|
166
|
-
var syncBlock = selection.$from.doc.type.schema.nodes.syncBlock;
|
|
167
|
-
var nodeBefore = selection.$from.nodeBefore;
|
|
168
|
-
return (nodeBefore === null || nodeBefore === void 0 ? void 0 : nodeBefore.type) === syncBlock;
|
|
169
|
-
};
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { bind } from 'bind-event-listener';
|
|
2
|
-
import { ACTION_SUBJECT, ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
|
|
3
|
-
import { Experience, ExperienceCheckDomMutation, ExperienceCheckTimeout } from '@atlaskit/editor-common/experiences';
|
|
4
|
-
import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
|
|
5
|
-
import { PluginKey } from '@atlaskit/editor-prosemirror/state';
|
|
6
|
-
import { EXPERIENCE_ABORT_REASON } from '../../types';
|
|
7
|
-
import { getRemovedResourceIds, getTarget } from '../utils/experience-tracking-utils';
|
|
8
|
-
var pluginKey = new PluginKey('deleteSourceSyncBlockExperience');
|
|
9
|
-
var START_METHOD = {
|
|
10
|
-
DELETE_CONFIRM_BUTTON: 'delete-confirm-button'
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* This experience tracks when a source sync block is deleted.
|
|
15
|
-
*
|
|
16
|
-
* Start: When user clicks the delete button in the delete modal
|
|
17
|
-
* Success: When the sync block is removed from the DOM within 2000ms of start
|
|
18
|
-
* Failure: When 2000ms passes without the source sync block being removed from the DOM
|
|
19
|
-
*/
|
|
20
|
-
export var getDeleteSourceExperiencePlugin = function getDeleteSourceExperiencePlugin(_ref) {
|
|
21
|
-
var refs = _ref.refs,
|
|
22
|
-
dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
|
|
23
|
-
syncBlockStore = _ref.syncBlockStore;
|
|
24
|
-
var experience = getDeleteSourceExperience({
|
|
25
|
-
refs: refs,
|
|
26
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent
|
|
27
|
-
});
|
|
28
|
-
syncBlockStore.sourceManager.setDeleteExperience(experience);
|
|
29
|
-
var unbindClickListener = bind(document, {
|
|
30
|
-
type: 'click',
|
|
31
|
-
listener: function listener(event) {
|
|
32
|
-
var target = event.target;
|
|
33
|
-
if (!target) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
var button = target.closest('button[data-testid]');
|
|
37
|
-
if (!button || !(button instanceof HTMLButtonElement)) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
var testId = button.dataset.testid;
|
|
41
|
-
if (isSyncedBlockDeleteButtonId(testId)) {
|
|
42
|
-
experience.start({
|
|
43
|
-
method: START_METHOD.DELETE_CONFIRM_BUTTON
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
return new SafePlugin({
|
|
49
|
-
key: pluginKey,
|
|
50
|
-
view: function view() {
|
|
51
|
-
return {
|
|
52
|
-
destroy: function destroy() {
|
|
53
|
-
experience.abort({
|
|
54
|
-
reason: EXPERIENCE_ABORT_REASON.EDITOR_DESTROYED
|
|
55
|
-
});
|
|
56
|
-
unbindClickListener();
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
};
|
|
62
|
-
export var getDeleteSourceExperience = function getDeleteSourceExperience(_ref2) {
|
|
63
|
-
var refs = _ref2.refs,
|
|
64
|
-
dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent;
|
|
65
|
-
return new Experience(ACTION_SUBJECT.SYNCED_BLOCK, {
|
|
66
|
-
actionSubjectId: ACTION_SUBJECT_ID.SYNCED_BLOCK_DELETE,
|
|
67
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
68
|
-
checks: [new ExperienceCheckTimeout({
|
|
69
|
-
durationMs: 2000
|
|
70
|
-
}), new ExperienceCheckDomMutation({
|
|
71
|
-
onDomMutation: function onDomMutation(_ref3) {
|
|
72
|
-
var mutations = _ref3.mutations;
|
|
73
|
-
var deletedResourceIds = getRemovedResourceIds(mutations, '[data-prosemirror-node-name="bodiedSyncBlock"]');
|
|
74
|
-
if (deletedResourceIds.length > 0) {
|
|
75
|
-
return {
|
|
76
|
-
status: 'success',
|
|
77
|
-
metadata: {
|
|
78
|
-
deletedResourceIds: deletedResourceIds
|
|
79
|
-
}
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
return undefined;
|
|
83
|
-
},
|
|
84
|
-
observeConfig: function observeConfig() {
|
|
85
|
-
return {
|
|
86
|
-
target: getTarget(refs.containerElement),
|
|
87
|
-
options: {
|
|
88
|
-
childList: true
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
})]
|
|
93
|
-
});
|
|
94
|
-
};
|
|
95
|
-
var isSyncedBlockDeleteButtonId = function isSyncedBlockDeleteButtonId(testId) {
|
|
96
|
-
return testId === 'synced-block-delete-confirmation-modal-delete-button';
|
|
97
|
-
};
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { getCreateReferenceExperiencePlugin } from "./create-reference-experience";
|
|
2
|
-
import { getCreateSourceExperiencePlugin } from "./create-source-experience";
|
|
3
|
-
import { getDeleteReferenceExperiencePlugin } from "./delete-reference-experience";
|
|
4
|
-
import { getDeleteSourceExperiencePlugin } from "./delete-source-experience";
|
|
5
|
-
import { getProviderOnlyExperiencesPlugin } from "./provider-only-experiences";
|
|
6
|
-
export var getExperienceTrackingPlugins = function getExperienceTrackingPlugins(_ref) {
|
|
7
|
-
var refs = _ref.refs,
|
|
8
|
-
dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
|
|
9
|
-
syncBlockStore = _ref.syncBlockStore;
|
|
10
|
-
return [{
|
|
11
|
-
name: 'createReferenceSyncedBlockExperiencePlugin',
|
|
12
|
-
plugin: function plugin() {
|
|
13
|
-
return getCreateReferenceExperiencePlugin({
|
|
14
|
-
refs: refs,
|
|
15
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
}, {
|
|
19
|
-
name: 'createSourceSyncedBlockExperiencePlugin',
|
|
20
|
-
plugin: function plugin() {
|
|
21
|
-
return getCreateSourceExperiencePlugin({
|
|
22
|
-
refs: refs,
|
|
23
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
24
|
-
syncBlockStore: syncBlockStore
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
}, {
|
|
28
|
-
name: 'deleteSourceExperiencePlugin',
|
|
29
|
-
plugin: function plugin() {
|
|
30
|
-
return getDeleteSourceExperiencePlugin({
|
|
31
|
-
refs: refs,
|
|
32
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
33
|
-
syncBlockStore: syncBlockStore
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
}, {
|
|
37
|
-
name: 'deleteReferenceExperiencePlugin',
|
|
38
|
-
plugin: function plugin() {
|
|
39
|
-
return getDeleteReferenceExperiencePlugin({
|
|
40
|
-
refs: refs,
|
|
41
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
42
|
-
syncBlockStore: syncBlockStore
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}, {
|
|
46
|
-
name: 'providerOnlySyncedBlockExperiencesPlugin',
|
|
47
|
-
plugin: function plugin() {
|
|
48
|
-
return getProviderOnlyExperiencesPlugin({
|
|
49
|
-
refs: refs,
|
|
50
|
-
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
51
|
-
syncBlockStore: syncBlockStore
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
}];
|
|
55
|
-
};
|