@cuby-ui/core 0.0.227 → 0.0.230
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/components/button/button.component.d.ts +1 -1
- package/components/content-wrapper/content-wrapper.component.d.ts +11 -0
- package/components/content-wrapper/index.d.ts +1 -0
- package/components/empty-state/empty-state.component.d.ts +7 -0
- package/components/empty-state/index.d.ts +1 -0
- package/components/ghost-input/ghost-input.component.d.ts +6 -0
- package/components/ghost-input/index.d.ts +1 -0
- package/components/index.d.ts +3 -0
- package/components/sidebar/sidebar-header/sidebar-header.component.d.ts +1 -1
- package/components/sidebar/sidebar-navigation-item/sidebar-navigation-item.component.d.ts +1 -1
- package/directives/tooltip/tooltip.component.d.ts +1 -1
- package/editor/components/editor-attaches-tool/editor-attaches-tool.component.d.ts +44 -0
- package/editor/components/editor-attaches-tool/editor-attaches-tool.options.d.ts +17 -0
- package/editor/components/editor-attaches-tool/index.d.ts +2 -0
- package/editor/components/editor-image-tool/editor-image-tool.component.d.ts +14 -0
- package/editor/components/editor-image-tool/editor-image-tool.options.d.ts +26 -0
- package/editor/components/editor-image-tool/index.d.ts +2 -0
- package/editor/components/editor-tool/editor-tool.component.d.ts +22 -0
- package/editor/components/editor-tool-modal/editor-tool-modal.component.d.ts +24 -0
- package/editor/components/editor-tool-modal/editor-tool-modal.options.d.ts +8 -0
- package/editor/components/editor-tool-modal/index.d.ts +2 -0
- package/editor/components/editor-tooltip/editor-tooltip.component.d.ts +16 -0
- package/editor/components/editor-tooltip/editor-tooltip.options.d.ts +9 -0
- package/editor/components/editor-tooltip/index.d.ts +2 -0
- package/editor/components/editor-video-tool/editor-video-tool.component.d.ts +12 -0
- package/editor/components/editor-video-tool/editor-video-tool.options.d.ts +26 -0
- package/editor/components/editor-video-tool/index.d.ts +2 -0
- package/editor/components/index.d.ts +7 -0
- package/editor/components/marker-modal/index.d.ts +3 -0
- package/editor/components/marker-modal/marker-modal.component.d.ts +62 -0
- package/editor/components/marker-modal/marker-modal.interfaces.d.ts +7 -0
- package/editor/components/marker-modal/marker-modal.options.d.ts +1 -0
- package/editor/components/marker-select/component/select-item/select-option.component.d.ts +7 -0
- package/editor/components/marker-select/index.d.ts +2 -0
- package/editor/components/marker-select/marker-select.component.d.ts +40 -0
- package/editor/components/marker-select/marker-select.options.d.ts +1 -0
- package/editor/config/custom-elements.d.ts +2 -0
- package/editor/config/editor.config.d.ts +3 -0
- package/editor/config/editor.provider.d.ts +2 -0
- package/editor/config/index.d.ts +2 -0
- package/editor/constants/editor.constants.d.ts +15 -0
- package/editor/constants/index.d.ts +1 -0
- package/editor/editor.component.d.ts +71 -0
- package/editor/events/editor-drag.event.d.ts +2 -0
- package/editor/events/editor-keyboard.event.d.ts +2 -0
- package/editor/events/editor-modal.event.d.ts +3 -0
- package/editor/events/editor-tooltip.event.d.ts +2 -0
- package/editor/events/set-editor-events.d.ts +1 -0
- package/editor/index.d.ts +9 -0
- package/editor/interfaces/angular-element.d.ts +2 -0
- package/editor/interfaces/blocks-request-data.d.ts +6 -0
- package/editor/interfaces/combined-block-adding-event.d.ts +7 -0
- package/editor/interfaces/combined-block-data.d.ts +5 -0
- package/editor/interfaces/combined-part-block-data.d.ts +7 -0
- package/editor/interfaces/custom-element.d.ts +5 -0
- package/editor/interfaces/event-action-data.d.ts +5 -0
- package/editor/interfaces/file-response-data.d.ts +10 -0
- package/editor/interfaces/full-block-data.d.ts +8 -0
- package/editor/interfaces/index.d.ts +14 -0
- package/editor/interfaces/main-editor-config.d.ts +15 -0
- package/editor/interfaces/mutation-actions.d.ts +5 -0
- package/editor/interfaces/parent.d.ts +4 -0
- package/editor/interfaces/tools.d.ts +4 -0
- package/editor/interfaces/tune.d.ts +6 -0
- package/editor/pipes/file-size.pipe.d.ts +9 -0
- package/editor/services/editor-service.options.d.ts +8 -0
- package/editor/services/editor.service.d.ts +23 -0
- package/editor/services/index.d.ts +6 -0
- package/editor/services/jtext-api.options.d.ts +20 -0
- package/editor/services/jtext-api.service.d.ts +23 -0
- package/editor/services/markers-service.options.d.ts +4 -0
- package/editor/services/markers.service.d.ts +11 -0
- package/editor/tools/attaches.tool.d.ts +28 -0
- package/editor/tools/bold.tool.d.ts +11 -0
- package/editor/tools/combined-text-block.tool.d.ts +49 -0
- package/editor/tools/custom-marker.tool.d.ts +16 -0
- package/editor/tools/header.tool.d.ts +8 -0
- package/editor/tools/image.tool.d.ts +37 -0
- package/editor/tools/index.d.ts +11 -0
- package/editor/tools/italic.tool.d.ts +12 -0
- package/editor/tools/link-marker.tool.d.ts +15 -0
- package/editor/tools/list.tool.d.ts +5 -0
- package/editor/tools/marker.tool.d.ts +36 -0
- package/editor/tools/role-marker.tool.d.ts +7 -0
- package/editor/tools/selection-base.tool.d.ts +24 -0
- package/editor/tools/tool-marker.tool.d.ts +7 -0
- package/editor/tools/video.tool.d.ts +32 -0
- package/editor/utils/create-link-modal.d.ts +3 -0
- package/editor/utils/create-tool-modal.d.ts +4 -0
- package/editor/utils/create-tooltip.d.ts +8 -0
- package/editor/utils/file-uploader.d.ts +26 -0
- package/editor/utils/generate-id.d.ts +1 -0
- package/editor/utils/index.d.ts +9 -0
- package/editor/utils/recalculate-indexes.d.ts +2 -0
- package/editor/utils/remove-element-tag-wrapper.d.ts +1 -0
- package/editor/utils/split-html.d.ts +1 -0
- package/editor/utils/url.validator.d.ts +2 -0
- package/editor/widgets/editor-block/editor-block.component.d.ts +22 -0
- package/editor/widgets/editor-block/index.d.ts +1 -0
- package/editor/widgets/editor-modal/editor-modal.component.d.ts +19 -0
- package/editor/widgets/editor-modal/index.d.ts +1 -0
- package/editor/widgets/editor-readonly/editor-readonly.component.d.ts +28 -0
- package/editor/widgets/editor-readonly/editor-readonly.options.d.ts +5 -0
- package/editor/widgets/editor-readonly/index.d.ts +2 -0
- package/editor/widgets/index.d.ts +3 -0
- package/esm2022/components/breadcrumbs/breadcrumbs.component.mjs +2 -2
- package/esm2022/components/content-wrapper/content-wrapper.component.mjs +29 -0
- package/esm2022/components/content-wrapper/index.mjs +2 -0
- package/esm2022/components/empty-state/empty-state.component.mjs +17 -0
- package/esm2022/components/empty-state/index.mjs +2 -0
- package/esm2022/components/ghost-input/ghost-input.component.mjs +16 -0
- package/esm2022/components/ghost-input/index.mjs +2 -0
- package/esm2022/components/index.mjs +4 -1
- package/esm2022/directives/tooltip/tooltip-describe.directive.mjs +5 -3
- package/esm2022/directives/tooltip/tooltip-position.directive.mjs +6 -3
- package/esm2022/directives/tooltip/tooltip.component.mjs +6 -3
- package/esm2022/editor/components/editor-attaches-tool/editor-attaches-tool.component.mjs +76 -0
- package/esm2022/editor/components/editor-attaches-tool/editor-attaches-tool.options.mjs +2 -0
- package/esm2022/editor/components/editor-attaches-tool/index.mjs +3 -0
- package/esm2022/editor/components/editor-image-tool/editor-image-tool.component.mjs +43 -0
- package/esm2022/editor/components/editor-image-tool/editor-image-tool.options.mjs +2 -0
- package/esm2022/editor/components/editor-image-tool/index.mjs +3 -0
- package/esm2022/editor/components/editor-tool/editor-tool.component.mjs +74 -0
- package/esm2022/editor/components/editor-tool-modal/editor-tool-modal.component.mjs +69 -0
- package/esm2022/editor/components/editor-tool-modal/editor-tool-modal.options.mjs +2 -0
- package/esm2022/editor/components/editor-tool-modal/index.mjs +3 -0
- package/esm2022/editor/components/editor-tooltip/editor-tooltip.component.mjs +45 -0
- package/esm2022/editor/components/editor-tooltip/editor-tooltip.options.mjs +2 -0
- package/esm2022/editor/components/editor-tooltip/index.mjs +3 -0
- package/esm2022/editor/components/editor-video-tool/editor-video-tool.component.mjs +41 -0
- package/esm2022/editor/components/editor-video-tool/editor-video-tool.options.mjs +2 -0
- package/esm2022/editor/components/editor-video-tool/index.mjs +3 -0
- package/esm2022/editor/components/index.mjs +8 -0
- package/esm2022/editor/components/marker-modal/index.mjs +3 -0
- package/esm2022/editor/components/marker-modal/marker-modal.component.mjs +261 -0
- package/esm2022/editor/components/marker-modal/marker-modal.interfaces.mjs +2 -0
- package/esm2022/editor/components/marker-modal/marker-modal.options.mjs +2 -0
- package/esm2022/editor/components/marker-select/component/select-item/select-option.component.mjs +15 -0
- package/esm2022/editor/components/marker-select/index.mjs +3 -0
- package/esm2022/editor/components/marker-select/marker-select.component.mjs +155 -0
- package/esm2022/editor/components/marker-select/marker-select.options.mjs +2 -0
- package/esm2022/editor/config/custom-elements.mjs +32 -0
- package/esm2022/editor/config/editor.config.mjs +30 -0
- package/esm2022/editor/config/editor.provider.mjs +19 -0
- package/esm2022/editor/config/index.mjs +3 -0
- package/esm2022/editor/constants/editor.constants.mjs +20 -0
- package/esm2022/editor/constants/index.mjs +2 -0
- package/esm2022/editor/editor.component.mjs +380 -0
- package/esm2022/editor/events/editor-drag.event.mjs +7 -0
- package/esm2022/editor/events/editor-keyboard.event.mjs +33 -0
- package/esm2022/editor/events/editor-modal.event.mjs +31 -0
- package/esm2022/editor/events/editor-tooltip.event.mjs +63 -0
- package/esm2022/editor/events/set-editor-events.mjs +11 -0
- package/esm2022/editor/i18n/en.json +14 -0
- package/esm2022/editor/index.mjs +8 -0
- package/esm2022/editor/interfaces/angular-element.mjs +2 -0
- package/esm2022/editor/interfaces/blocks-request-data.mjs +2 -0
- package/esm2022/editor/interfaces/combined-block-adding-event.mjs +2 -0
- package/esm2022/editor/interfaces/combined-block-data.mjs +2 -0
- package/esm2022/editor/interfaces/combined-part-block-data.mjs +2 -0
- package/esm2022/editor/interfaces/custom-element.mjs +2 -0
- package/esm2022/editor/interfaces/event-action-data.mjs +2 -0
- package/esm2022/editor/interfaces/file-response-data.mjs +2 -0
- package/esm2022/editor/interfaces/full-block-data.mjs +2 -0
- package/esm2022/editor/interfaces/index.mjs +14 -0
- package/esm2022/editor/interfaces/main-editor-config.mjs +2 -0
- package/esm2022/editor/interfaces/mutation-actions.mjs +2 -0
- package/esm2022/editor/interfaces/parent.mjs +2 -0
- package/esm2022/editor/interfaces/tools.mjs +2 -0
- package/esm2022/editor/interfaces/tune.mjs +2 -0
- package/esm2022/editor/pipes/file-size.pipe.mjs +25 -0
- package/esm2022/editor/services/editor-service.options.mjs +4 -0
- package/esm2022/editor/services/editor.service.mjs +138 -0
- package/esm2022/editor/services/index.mjs +7 -0
- package/esm2022/editor/services/jtext-api.options.mjs +2 -0
- package/esm2022/editor/services/jtext-api.service.mjs +50 -0
- package/esm2022/editor/services/markers-service.options.mjs +2 -0
- package/esm2022/editor/services/markers.service.mjs +79 -0
- package/esm2022/editor/tools/attaches.tool.mjs +96 -0
- package/esm2022/editor/tools/bold.tool.mjs +33 -0
- package/esm2022/editor/tools/combined-text-block.tool.mjs +380 -0
- package/esm2022/editor/tools/custom-marker.tool.mjs +88 -0
- package/esm2022/editor/tools/header.tool.mjs +16 -0
- package/esm2022/editor/tools/image.tool.mjs +157 -0
- package/esm2022/editor/tools/index.mjs +12 -0
- package/esm2022/editor/tools/italic.tool.mjs +35 -0
- package/esm2022/editor/tools/link-marker.tool.mjs +80 -0
- package/esm2022/editor/tools/list.tool.mjs +10 -0
- package/esm2022/editor/tools/marker.tool.mjs +144 -0
- package/esm2022/editor/tools/role-marker.tool.mjs +17 -0
- package/esm2022/editor/tools/selection-base.tool.mjs +92 -0
- package/esm2022/editor/tools/tool-marker.tool.mjs +14 -0
- package/esm2022/editor/tools/video.tool.mjs +132 -0
- package/esm2022/editor/utils/create-link-modal.mjs +22 -0
- package/esm2022/editor/utils/create-tool-modal.mjs +45 -0
- package/esm2022/editor/utils/create-tooltip.mjs +44 -0
- package/esm2022/editor/utils/file-uploader.mjs +57 -0
- package/esm2022/editor/utils/generate-id.mjs +4 -0
- package/esm2022/editor/utils/index.mjs +10 -0
- package/esm2022/editor/utils/recalculate-indexes.mjs +32 -0
- package/esm2022/editor/utils/remove-element-tag-wrapper.mjs +11 -0
- package/esm2022/editor/utils/split-html.mjs +128 -0
- package/esm2022/editor/utils/url.validator.mjs +12 -0
- package/esm2022/editor/widgets/editor-block/editor-block.component.mjs +63 -0
- package/esm2022/editor/widgets/editor-block/index.mjs +2 -0
- package/esm2022/editor/widgets/editor-modal/editor-modal.component.mjs +47 -0
- package/esm2022/editor/widgets/editor-modal/index.mjs +2 -0
- package/esm2022/editor/widgets/editor-readonly/editor-readonly.component.mjs +40 -0
- package/esm2022/editor/widgets/editor-readonly/editor-readonly.options.mjs +2 -0
- package/esm2022/editor/widgets/editor-readonly/index.mjs +2 -0
- package/esm2022/editor/widgets/index.mjs +4 -0
- package/esm2022/index.mjs +3 -1
- package/esm2022/interceptors/loader.interceptor.mjs +3 -3
- package/esm2022/services/loader.options.mjs +2 -2
- package/esm2022/services/loader.service.mjs +11 -11
- package/esm2022/utils/default-validators/create-default-validators.mjs +12 -0
- package/esm2022/utils/default-validators/extra-spaces.options.mjs +11 -0
- package/esm2022/utils/default-validators/extra-spaces.validators.mjs +16 -0
- package/esm2022/utils/default-validators/index.mjs +2 -0
- package/esm2022/utils/index.mjs +2 -1
- package/esm2022/widgets/categories/categories.component.mjs +75 -0
- package/esm2022/widgets/categories/components/categories-list/categories-list.component.mjs +16 -0
- package/esm2022/widgets/categories/components/categories-list/index.mjs +2 -0
- package/esm2022/widgets/categories/components/category-form/category-form.component.mjs +79 -0
- package/esm2022/widgets/categories/components/category-form/index.mjs +2 -0
- package/esm2022/widgets/categories/components/category-item/category-item.component.mjs +123 -0
- package/esm2022/widgets/categories/components/category-item/index.mjs +2 -0
- package/esm2022/widgets/categories/components/create-category-item/create-category-item.component.mjs +25 -0
- package/esm2022/widgets/categories/components/create-category-item/index.mjs +2 -0
- package/esm2022/widgets/categories/components/index.mjs +3 -0
- package/esm2022/widgets/categories/index.mjs +2 -0
- package/esm2022/widgets/categories/services/index.mjs +2 -0
- package/esm2022/widgets/categories/services/selected-category.service.mjs +38 -0
- package/esm2022/widgets/general-control-error-hint/general-control-error-hint.component.mjs +21 -0
- package/esm2022/widgets/general-control-error-hint/index.mjs +2 -0
- package/esm2022/widgets/index.mjs +3 -0
- package/esm2022/widgets/utility-info/index.mjs +2 -0
- package/esm2022/widgets/utility-info/utility-info.component.mjs +224 -0
- package/fesm2022/cuby-ui-core-en-D3DnyYmu.mjs +29 -0
- package/fesm2022/cuby-ui-core-en-D3DnyYmu.mjs.map +1 -0
- package/fesm2022/cuby-ui-core.mjs +4047 -67
- package/fesm2022/cuby-ui-core.mjs.map +1 -1
- package/index.d.ts +2 -0
- package/package.json +3 -3
- package/services/loader.options.d.ts +2 -2
- package/services/loader.service.d.ts +7 -7
- package/utils/default-validators/create-default-validators.d.ts +5 -0
- package/utils/default-validators/extra-spaces.options.d.ts +2 -0
- package/utils/default-validators/extra-spaces.validators.d.ts +3 -0
- package/utils/default-validators/index.d.ts +1 -0
- package/utils/index.d.ts +1 -0
- package/widgets/categories/categories.component.d.ts +24 -0
- package/widgets/categories/components/categories-list/categories-list.component.d.ts +7 -0
- package/widgets/categories/components/categories-list/index.d.ts +1 -0
- package/widgets/categories/components/category-form/category-form.component.d.ts +28 -0
- package/widgets/categories/components/category-form/index.d.ts +1 -0
- package/widgets/categories/components/category-item/category-item.component.d.ts +40 -0
- package/widgets/categories/components/category-item/index.d.ts +1 -0
- package/widgets/categories/components/create-category-item/create-category-item.component.d.ts +10 -0
- package/widgets/categories/components/create-category-item/index.d.ts +1 -0
- package/widgets/categories/components/index.d.ts +2 -0
- package/widgets/categories/index.d.ts +1 -0
- package/widgets/categories/services/index.d.ts +1 -0
- package/widgets/categories/services/selected-category.service.d.ts +18 -0
- package/widgets/general-control-error-hint/general-control-error-hint.component.d.ts +9 -0
- package/widgets/general-control-error-hint/index.d.ts +1 -0
- package/widgets/index.d.ts +2 -0
- package/widgets/utility-info/index.d.ts +1 -0
- package/widgets/utility-info/utility-info.component.d.ts +45 -0
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
import { COMBINED_TEXT_BLOCK, COMBINED_TEXT_BLOCK_ADDED, COMBINED_TEXT_BLOCK_NAME, COMBINED_TEXT_BLOCK_PART, COMBINED_TEXT_BLOCK_REMOVED, COMBINED_TEXT_BLOCK_UPDATED, DEFAULT_PLACEHOLDER, DEFAULT_READONLY_PLACEHOLDER, SPLIT_MAX_LENGTH } from '../constants';
|
|
2
|
+
import { recalculateIndexes, splitHTML, generateId } from '../utils';
|
|
3
|
+
export class CuiCombinedTextBlockTool {
|
|
4
|
+
constructor(options) {
|
|
5
|
+
this.TAG = 'span';
|
|
6
|
+
this.DEBOUNCE_TIME = 350;
|
|
7
|
+
this.MAX_CHILD_COUNT_FOR_EMPTY = 1;
|
|
8
|
+
this.PLACEHOLDER_ATTRIBUTE_NAME = 'placeholderActive';
|
|
9
|
+
this.mutationConfig = {
|
|
10
|
+
subtree: true,
|
|
11
|
+
childList: true,
|
|
12
|
+
characterData: true
|
|
13
|
+
};
|
|
14
|
+
this.changes = new Map();
|
|
15
|
+
this.getMutationCallback = (wait) => {
|
|
16
|
+
let timeoutId = null;
|
|
17
|
+
return () => {
|
|
18
|
+
if (timeoutId) {
|
|
19
|
+
clearTimeout(timeoutId);
|
|
20
|
+
}
|
|
21
|
+
timeoutId = setTimeout(() => this.handleMutations(), wait);
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
const body = options;
|
|
25
|
+
const data = body.data;
|
|
26
|
+
this.readOnly = body.readOnly;
|
|
27
|
+
this.placeholder = this.getPlaceholder(body.config);
|
|
28
|
+
this.api = body.api;
|
|
29
|
+
this.data = {
|
|
30
|
+
id: data.id || generateId(),
|
|
31
|
+
textBlocks: data.textBlocks || []
|
|
32
|
+
};
|
|
33
|
+
this.convertDefaultDataToCustom(data);
|
|
34
|
+
}
|
|
35
|
+
static get isInline() {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
static get isReadOnlySupported() {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
static get enableLineBreaks() {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
static get toolbox() {
|
|
45
|
+
return {
|
|
46
|
+
icon: '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path stroke="currentColor" stroke-linecap="round" stroke-width="2" d="M8 9V7.2C8 7.08954 8.08954 7 8.2 7L12 7M16 9V7.2C16 7.08954 15.9105 7 15.8 7L12 7M12 7L12 17M12 17H10M12 17H14"></path></svg>',
|
|
47
|
+
title: 'Text'
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
static get pasteConfig() {
|
|
51
|
+
return {
|
|
52
|
+
tags: ['P']
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
onPaste(event) {
|
|
56
|
+
if (event.type !== 'tag') {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const text = event.detail.data.textContent;
|
|
60
|
+
this.data.textBlocks.splice(this.data.textBlocks.length - 1, 1, this.getBlockPartObject(generateId(), text));
|
|
61
|
+
this.update(this.data.textBlocks);
|
|
62
|
+
}
|
|
63
|
+
render() {
|
|
64
|
+
this.wrapper = document.createElement('div');
|
|
65
|
+
this.wrapper.classList.add(COMBINED_TEXT_BLOCK);
|
|
66
|
+
this.wrapper.dataset[this.PLACEHOLDER_ATTRIBUTE_NAME] = this.api.i18n.t(this.placeholder);
|
|
67
|
+
if (!this.readOnly) {
|
|
68
|
+
this.wrapper.contentEditable = 'true';
|
|
69
|
+
}
|
|
70
|
+
if (!this.data.textBlocks.length) {
|
|
71
|
+
this.data.textBlocks.push(this.getBlockPartObject(generateId(), ''));
|
|
72
|
+
}
|
|
73
|
+
this.update(this.data.textBlocks);
|
|
74
|
+
this.checkIsEditorEmpty();
|
|
75
|
+
if (!this.readOnly) {
|
|
76
|
+
const callback = this.getMutationCallback(this.DEBOUNCE_TIME);
|
|
77
|
+
this.observer = new MutationObserver(this.onMutationEvent.bind(this, callback));
|
|
78
|
+
this.observer.observe(this.wrapper, this.mutationConfig);
|
|
79
|
+
}
|
|
80
|
+
return this.wrapper;
|
|
81
|
+
}
|
|
82
|
+
merge(blocksData) {
|
|
83
|
+
if (!this.wrapper) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
let blocksTextContent = '';
|
|
87
|
+
this.data.textBlocks = [];
|
|
88
|
+
blocksData.forEach((block) => {
|
|
89
|
+
blocksTextContent += block.data.text;
|
|
90
|
+
});
|
|
91
|
+
for (let i = 0; i < this.wrapper.childNodes.length; i++) {
|
|
92
|
+
const node = this.wrapper.childNodes.item(i);
|
|
93
|
+
if (!(node instanceof HTMLSpanElement)) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
i--;
|
|
97
|
+
blocksTextContent = node.innerHTML + blocksTextContent;
|
|
98
|
+
node.remove();
|
|
99
|
+
}
|
|
100
|
+
const parts = blocksTextContent.length < SPLIT_MAX_LENGTH ? [blocksTextContent] : splitHTML(blocksTextContent);
|
|
101
|
+
parts.forEach((part) => {
|
|
102
|
+
const blockObject = this.getBlockPartObject(generateId(), part);
|
|
103
|
+
this.data.textBlocks.push(blockObject);
|
|
104
|
+
});
|
|
105
|
+
this.update(this.data.textBlocks);
|
|
106
|
+
}
|
|
107
|
+
save(blockContent) {
|
|
108
|
+
const textBlocks = [];
|
|
109
|
+
blockContent.querySelectorAll(this.TAG).forEach((span) => {
|
|
110
|
+
textBlocks.push(this.getBlockPartObject(span.dataset['id'], span.innerHTML));
|
|
111
|
+
});
|
|
112
|
+
return textBlocks;
|
|
113
|
+
}
|
|
114
|
+
removed() {
|
|
115
|
+
this.observer?.disconnect();
|
|
116
|
+
const blockIds = new Set();
|
|
117
|
+
this.data.textBlocks.forEach((block) => {
|
|
118
|
+
blockIds.add(block.id || '');
|
|
119
|
+
});
|
|
120
|
+
this.removeBlocks(blockIds);
|
|
121
|
+
}
|
|
122
|
+
onMutationEvent(callback, mutationList) {
|
|
123
|
+
if (mutationList.length === 0) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
mutationList.forEach((mutation) => {
|
|
127
|
+
if (mutation.removedNodes.length) {
|
|
128
|
+
this.changes.set(generateId(), mutation);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
this.changes.set(mutation.target, mutation);
|
|
132
|
+
});
|
|
133
|
+
callback(mutationList);
|
|
134
|
+
this.checkIsEditorEmpty();
|
|
135
|
+
}
|
|
136
|
+
handleMutations() {
|
|
137
|
+
const mutationsList = [...this.changes.values()];
|
|
138
|
+
const { updatedElements, removedElementsIds } = this.getMutationActions(mutationsList);
|
|
139
|
+
const splitedParts = [];
|
|
140
|
+
updatedElements.forEach((element) => {
|
|
141
|
+
const elementContent = element.innerHTML;
|
|
142
|
+
if (elementContent.length < SPLIT_MAX_LENGTH) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const parts = splitHTML(elementContent);
|
|
146
|
+
parts.forEach((part, index) => {
|
|
147
|
+
if (index === 0) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
const blockId = generateId();
|
|
151
|
+
const textElement = this.createBlock(blockId, part);
|
|
152
|
+
splitedParts.push(textElement);
|
|
153
|
+
});
|
|
154
|
+
element.innerHTML = parts[0];
|
|
155
|
+
element.after(...splitedParts);
|
|
156
|
+
});
|
|
157
|
+
this.addBlocks(splitedParts, updatedElements);
|
|
158
|
+
this.updateBlocks(updatedElements);
|
|
159
|
+
this.removeBlocks(removedElementsIds);
|
|
160
|
+
this.changes.clear();
|
|
161
|
+
}
|
|
162
|
+
getNextIndex() {
|
|
163
|
+
recalculateIndexes(this.api.blocks);
|
|
164
|
+
const index = this.api.blocks.getCurrentBlockIndex();
|
|
165
|
+
const block = this.api.blocks.getBlockByIndex(index);
|
|
166
|
+
const dataIndex = Number(block?.holder.dataset['index']);
|
|
167
|
+
const selection = window.getSelection();
|
|
168
|
+
const range = selection?.rangeCount ? selection.getRangeAt(0) : null;
|
|
169
|
+
const caretPosition = range?.startOffset ?? 1;
|
|
170
|
+
let nextBlockIndex = dataIndex;
|
|
171
|
+
if (caretPosition !== 0) {
|
|
172
|
+
const blockContainer = block?.holder.querySelector('.' + COMBINED_TEXT_BLOCK);
|
|
173
|
+
const childrenCount = blockContainer?.children?.length ? blockContainer?.children?.length - 1 : 0;
|
|
174
|
+
nextBlockIndex = dataIndex + childrenCount + 1;
|
|
175
|
+
}
|
|
176
|
+
if (!nextBlockIndex) {
|
|
177
|
+
nextBlockIndex ||= 0;
|
|
178
|
+
}
|
|
179
|
+
return nextBlockIndex;
|
|
180
|
+
}
|
|
181
|
+
getBlockPartObject(blockId, text) {
|
|
182
|
+
return {
|
|
183
|
+
id: blockId,
|
|
184
|
+
type: COMBINED_TEXT_BLOCK_PART,
|
|
185
|
+
data: {
|
|
186
|
+
text,
|
|
187
|
+
parentId: this.data.id,
|
|
188
|
+
parentType: COMBINED_TEXT_BLOCK_NAME
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
getMutationActions(mutationList) {
|
|
193
|
+
const updatedElements = new Set();
|
|
194
|
+
const removedElementsIds = new Set();
|
|
195
|
+
const changedOutsideElements = [];
|
|
196
|
+
this.lastBlockElement = undefined;
|
|
197
|
+
mutationList.forEach((mutation) => {
|
|
198
|
+
this.handleUpdatedBlocks(mutation, updatedElements, changedOutsideElements);
|
|
199
|
+
this.handleRemovedBlocks(mutation, removedElementsIds);
|
|
200
|
+
});
|
|
201
|
+
if (this.lastBlockElement) {
|
|
202
|
+
const lastBlockElement = this.lastBlockElement;
|
|
203
|
+
lastBlockElement.append(...changedOutsideElements);
|
|
204
|
+
this.setCaretToBlocksEnd(lastBlockElement);
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
updatedElements,
|
|
208
|
+
removedElementsIds
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
setCaretToBlocksEnd(block) {
|
|
212
|
+
const selection = window.getSelection();
|
|
213
|
+
const range = document.createRange();
|
|
214
|
+
range.setStart(block, block.childNodes.length);
|
|
215
|
+
selection?.removeAllRanges();
|
|
216
|
+
selection?.addRange(range);
|
|
217
|
+
}
|
|
218
|
+
handleUpdatedBlocks(mutation, updatedElements, outsideChanges) {
|
|
219
|
+
let element = mutation.target;
|
|
220
|
+
if (mutation.target.nodeType === Node.TEXT_NODE) {
|
|
221
|
+
element = mutation.target.parentElement;
|
|
222
|
+
}
|
|
223
|
+
const span = element?.closest('.' + COMBINED_TEXT_BLOCK_PART);
|
|
224
|
+
if (span) {
|
|
225
|
+
updatedElements.add(span);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
this.handleChangesOutsideBlock(element, outsideChanges);
|
|
229
|
+
}
|
|
230
|
+
handleChangesOutsideBlock(element, outsideChanges) {
|
|
231
|
+
if (!element || this.lastBlockElement) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
element.childNodes.forEach((block) => {
|
|
235
|
+
const blockElement = block;
|
|
236
|
+
if (blockElement.classList?.contains(COMBINED_TEXT_BLOCK_PART)) {
|
|
237
|
+
this.lastBlockElement = blockElement;
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
outsideChanges.push(block);
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
addBlocks(splicedParts, updatedElements) {
|
|
244
|
+
if (!splicedParts.length) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
const addedBlocks = splicedParts.map((block) => {
|
|
248
|
+
const blockId = block.dataset['id'];
|
|
249
|
+
return {
|
|
250
|
+
id: blockId,
|
|
251
|
+
type: COMBINED_TEXT_BLOCK_PART,
|
|
252
|
+
data: {
|
|
253
|
+
text: block.innerHTML,
|
|
254
|
+
parentId: this.data.id,
|
|
255
|
+
parentType: COMBINED_TEXT_BLOCK_NAME
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
});
|
|
259
|
+
const previousElement = updatedElements.values().next().value;
|
|
260
|
+
const id = previousElement?.dataset['id'];
|
|
261
|
+
const index = Number(previousElement?.dataset['index']) + 1;
|
|
262
|
+
const blockIndex = this.data.textBlocks.findIndex((block) => block.id === id);
|
|
263
|
+
this.data.textBlocks.splice(blockIndex, 0, ...addedBlocks);
|
|
264
|
+
this.api.events.emit(COMBINED_TEXT_BLOCK_ADDED, {
|
|
265
|
+
index,
|
|
266
|
+
blockIndex,
|
|
267
|
+
blocks: addedBlocks,
|
|
268
|
+
data: this.data.textBlocks
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
updateBlocks(updatedElements) {
|
|
272
|
+
if (!updatedElements.size) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
const updatedBlocks = [...updatedElements.values()].map((block) => {
|
|
276
|
+
return {
|
|
277
|
+
id: block.dataset['id'],
|
|
278
|
+
type: COMBINED_TEXT_BLOCK_PART,
|
|
279
|
+
data: {
|
|
280
|
+
text: block.innerHTML,
|
|
281
|
+
parentId: this.data.id,
|
|
282
|
+
parentType: COMBINED_TEXT_BLOCK_NAME
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
});
|
|
286
|
+
this.api.events.emit(COMBINED_TEXT_BLOCK_UPDATED, updatedBlocks);
|
|
287
|
+
}
|
|
288
|
+
handleRemovedBlocks(mutation, removedElementsIds) {
|
|
289
|
+
if (mutation.removedNodes.length === 0) {
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
mutation.removedNodes.forEach((node) => {
|
|
293
|
+
if (!(node instanceof HTMLElement)) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
const blockId = node.dataset['id'];
|
|
297
|
+
if (!blockId) {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
removedElementsIds.add(blockId);
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
removeBlocks(ids) {
|
|
304
|
+
if (!ids.size) {
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
const removedElementIds = [...ids.values()];
|
|
308
|
+
this.data.textBlocks = this.data.textBlocks.filter((block) => !ids.has(block.id || ''));
|
|
309
|
+
this.api.events.emit(COMBINED_TEXT_BLOCK_REMOVED, removedElementIds);
|
|
310
|
+
}
|
|
311
|
+
update(blocks) {
|
|
312
|
+
if (!blocks.length) {
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
blocks.forEach((block) => {
|
|
316
|
+
const textElement = this.createBlock(block.id || generateId(), block.data.text);
|
|
317
|
+
if (!this.wrapper) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
if (this.wrapper.querySelector('.' + COMBINED_TEXT_BLOCK_PART)) {
|
|
321
|
+
this.wrapper.append(textElement);
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
this.wrapper.replaceChildren(textElement);
|
|
325
|
+
});
|
|
326
|
+
setTimeout(() => {
|
|
327
|
+
this.api.events.emit(COMBINED_TEXT_BLOCK_ADDED, {
|
|
328
|
+
blocks
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
createBlock(id, text) {
|
|
333
|
+
const textElement = document.createElement(this.TAG);
|
|
334
|
+
textElement.classList.add(COMBINED_TEXT_BLOCK_PART);
|
|
335
|
+
textElement.innerHTML = text;
|
|
336
|
+
textElement.dataset['id'] = id;
|
|
337
|
+
return textElement;
|
|
338
|
+
}
|
|
339
|
+
convertDefaultDataToCustom(data) {
|
|
340
|
+
if (Array.isArray(data)) {
|
|
341
|
+
this.data.textBlocks = data.map((block) => {
|
|
342
|
+
block.id = generateId();
|
|
343
|
+
block.data.parentId = this.data.id;
|
|
344
|
+
return block;
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
if (!data.text) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
const fragment = document.createRange().createContextualFragment(data.text);
|
|
351
|
+
let elementContent = '';
|
|
352
|
+
fragment.childNodes.forEach((node) => {
|
|
353
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
354
|
+
elementContent += node.textContent;
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
elementContent += node.innerHTML;
|
|
358
|
+
});
|
|
359
|
+
const parts = elementContent.length < SPLIT_MAX_LENGTH ? [elementContent] : splitHTML(elementContent);
|
|
360
|
+
parts.forEach((part) => {
|
|
361
|
+
const blockObject = this.getBlockPartObject(generateId(), part);
|
|
362
|
+
this.data.textBlocks.push(blockObject);
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
checkIsEditorEmpty() {
|
|
366
|
+
if (!this.wrapper || this.wrapper.children.length > this.MAX_CHILD_COUNT_FOR_EMPTY) {
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
const item = this.wrapper.children.item(0);
|
|
370
|
+
const isItemEmpty = !item.textContent?.length;
|
|
371
|
+
this.wrapper.dataset['empty'] = `${isItemEmpty}`;
|
|
372
|
+
}
|
|
373
|
+
getPlaceholder(config) {
|
|
374
|
+
if (this.readOnly) {
|
|
375
|
+
return config.readonlyPlaceholder ?? DEFAULT_READONLY_PLACEHOLDER;
|
|
376
|
+
}
|
|
377
|
+
return config.placeholder ?? DEFAULT_PLACEHOLDER;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZWQtdGV4dC1ibG9jay50b29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9lZGl0b3IvdG9vbHMvY29tYmluZWQtdGV4dC1ibG9jay50b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLGdCQUFnQixFQUNuQixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVyRSxNQUFNLE9BQU8sd0JBQXdCO0lBb0JqQyxZQUFZLE9BQWdCO1FBbkJYLFFBQUcsR0FBRyxNQUFNLENBQUM7UUFDYixrQkFBYSxHQUFHLEdBQUcsQ0FBQztRQUNwQiw4QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFDOUIsK0JBQTBCLEdBQUcsbUJBQW1CLENBQUM7UUFFMUQsbUJBQWMsR0FBRztZQUNyQixPQUFPLEVBQUUsSUFBSTtZQUNiLFNBQVMsRUFBRSxJQUFJO1lBQ2YsYUFBYSxFQUFFLElBQUk7U0FDdEIsQ0FBQztRQVFNLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBMkpwQix3QkFBbUIsR0FBRyxDQUFDLElBQVksRUFBdUIsRUFBRTtZQUNoRSxJQUFJLFNBQVMsR0FBK0MsSUFBSSxDQUFDO1lBRWpFLE9BQU8sR0FBRyxFQUFFO2dCQUNSLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ1osWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM1QixDQUFDO2dCQUVELFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFD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RUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFTyxjQUFjLENBQUMsTUFBa0I7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsT0FBTyxNQUFNLENBQUMsbUJBQW1CLElBQUksNEJBQTRCLENBQUM7UUFDdEUsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLFdBQVcsSUFBSSxtQkFBbUIsQ0FBQztJQUNyRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEN1aU51bGxhYmxlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcclxuaW1wb3J0IHR5cGUgeyBBUEksIEJsb2NrVG9vbCwgQmxvY2tUb29sQ29uc3RydWN0b3JPcHRpb25zLCBUb29sQ29uZmlnIH0gZnJvbSAnQGVkaXRvcmpzL2VkaXRvcmpzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBDT01CSU5FRF9URVhUX0JMT0NLLFxyXG4gICAgQ09NQklORURfVEVYVF9CTE9DS19BRERFRCxcclxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSxcclxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCxcclxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfUkVNT1ZFRCxcclxuICAgIENPTUJJTkVEX1RFWFRfQkxPQ0tfVVBEQVRFRCxcclxuICAgIERFRkFVTFRfUExBQ0VIT0xERVIsXHJcbiAgICBERUZBVUxUX1JFQURPTkxZX1BMQUNFSE9MREVSLFxyXG4gICAgU1BMSVRfTUFYX0xFTkdUSFxyXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB0eXBlIHsgQ3VpQ29tYmluZWRCbG9ja1Rvb2xEYXRhLCBDdWlDb21iaW5lZFBhcnRCbG9jaywgQ3VpTXV0YXRpb25BY3Rpb25zLCBDdWlNdXRhdGlvbkNhbGxiYWNrIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IHJlY2FsY3VsYXRlSW5kZXhlcywgc3BsaXRIVE1MLCBnZW5lcmF0ZUlkIH0gZnJvbSAnLi4vdXRpbHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1aUNvbWJpbmVkVGV4dEJsb2NrVG9vbCBpbXBsZW1lbnRzIEJsb2NrVG9vbCB7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IFRBRyA9ICdzcGFuJztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgREVCT1VOQ0VfVElNRSA9IDM1MDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgTUFYX0NISUxEX0NPVU5UX0ZPUl9FTVBUWSA9IDE7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IFBMQUNFSE9MREVSX0FUVFJJQlVURV9OQU1FID0gJ3BsYWNlaG9sZGVyQWN0aXZlJztcclxuXHJcbiAgICBwcml2YXRlIG11dGF0aW9uQ29uZmlnID0ge1xyXG4gICAgICAgIHN1YnRyZWU6IHRydWUsXHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcclxuICAgIH07XHJcbiAgICBwcml2YXRlIGFwaTogQVBJO1xyXG4gICAgcHJpdmF0ZSBkYXRhOiBDdWlDb21iaW5lZEJsb2NrVG9vbERhdGE7XHJcbiAgICBwcml2YXRlIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIHdyYXBwZXI/OiBIVE1MRWxlbWVudDtcclxuICAgIHByaXZhdGUgb2JzZXJ2ZXI/OiBNdXRhdGlvbk9ic2VydmVyO1xyXG4gICAgcHJpdmF0ZSBsYXN0QmxvY2tFbGVtZW50PzogSFRNTEVsZW1lbnQ7XHJcbiAgICBwcml2YXRlIHJlYWRPbmx5PzogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgY2hhbmdlcyA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiB1bmtub3duKSB7XHJcbiAgICAgICAgY29uc3QgYm9keSA9IG9wdGlvbnMgYXMgQmxvY2tUb29sQ29uc3RydWN0b3JPcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBib2R5LmRhdGE7XHJcblxyXG4gICAgICAgIHRoaXMucmVhZE9ubHkgPSBib2R5LnJlYWRPbmx5O1xyXG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyKGJvZHkuY29uZmlnKTtcclxuICAgICAgICB0aGlzLmFwaSA9IGJvZHkuYXBpO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IHtcclxuICAgICAgICAgICAgaWQ6IGRhdGEuaWQgfHwgZ2VuZXJhdGVJZCgpLFxyXG4gICAgICAgICAgICB0ZXh0QmxvY2tzOiBkYXRhLnRleHRCbG9ja3MgfHwgW11cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmNvbnZlcnREZWZhdWx0RGF0YVRvQ3VzdG9tKGRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGlzSW5saW5lKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldCBpc1JlYWRPbmx5U3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IGVuYWJsZUxpbmVCcmVha3MoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IHRvb2xib3goKTogeyBpY29uOiBzdHJpbmc7IHRpdGxlOiBzdHJpbmcgfSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWNvbjogJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPjxwYXRoIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIyXCIgZD1cIk04IDlWNy4yQzggNy4wODk1NCA4LjA4OTU0IDcgOC4yIDdMMTIgN00xNiA5VjcuMkMxNiA3LjA4OTU0IDE1LjkxMDUgNyAxNS44IDdMMTIgN00xMiA3TDEyIDE3TTEyIDE3SDEwTTEyIDE3SDE0XCI+PC9wYXRoPjwvc3ZnPicsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnVGV4dCdcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0IHBhc3RlQ29uZmlnKCk6IG9iamVjdCB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdGFnczogWydQJ11cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblBhc3RlKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChldmVudC50eXBlICE9PSAndGFnJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0ZXh0ID0gZXZlbnQuZGV0YWlsLmRhdGEudGV4dENvbnRlbnQ7XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzLnNwbGljZSh0aGlzLmRhdGEudGV4dEJsb2Nrcy5sZW5ndGggLSAxLCAxLCB0aGlzLmdldEJsb2NrUGFydE9iamVjdChnZW5lcmF0ZUlkKCksIHRleHQpKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLmRhdGEudGV4dEJsb2Nrcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbmRlcigpOiBIVE1MRWxlbWVudCB7XHJcbiAgICAgICAgdGhpcy53cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgdGhpcy53cmFwcGVyLmNsYXNzTGlzdC5hZGQoQ09NQklORURfVEVYVF9CTE9DSyk7XHJcbiAgICAgICAgdGhpcy53cmFwcGVyLmRhdGFzZXRbdGhpcy5QTEFDRUhPTERFUl9BVFRSSUJVVEVfTkFNRV0gPSB0aGlzLmFwaS5pMThuLnQodGhpcy5wbGFjZWhvbGRlcik7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5yZWFkT25seSkge1xyXG4gICAgICAgICAgICB0aGlzLndyYXBwZXIuY29udGVudEVkaXRhYmxlID0gJ3RydWUnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEudGV4dEJsb2Nrcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MucHVzaCh0aGlzLmdldEJsb2NrUGFydE9iamVjdChnZW5lcmF0ZUlkKCksICcnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLmRhdGEudGV4dEJsb2Nrcyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0lzRWRpdG9yRW1wdHkoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlYWRPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRNdXRhdGlvbkNhbGxiYWNrKHRoaXMuREVCT1VOQ0VfVElNRSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5vbk11dGF0aW9uRXZlbnQuYmluZCh0aGlzLCBjYWxsYmFjaykpO1xyXG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcy53cmFwcGVyLCB0aGlzLm11dGF0aW9uQ29uZmlnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1lcmdlKGJsb2Nrc0RhdGE6IEN1aUNvbWJpbmVkUGFydEJsb2NrW10pOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMud3JhcHBlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgYmxvY2tzVGV4dENvbnRlbnQgPSAnJztcclxuICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2NrcyA9IFtdO1xyXG5cclxuICAgICAgICBibG9ja3NEYXRhLmZvckVhY2goKGJsb2NrKSA9PiB7XHJcbiAgICAgICAgICAgIGJsb2Nrc1RleHRDb250ZW50ICs9IGJsb2NrLmRhdGEudGV4dDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLndyYXBwZXIuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy53cmFwcGVyLmNoaWxkTm9kZXMuaXRlbShpKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MU3BhbkVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGktLTtcclxuICAgICAgICAgICAgYmxvY2tzVGV4dENvbnRlbnQgPSBub2RlLmlubmVySFRNTCArIGJsb2Nrc1RleHRDb250ZW50O1xyXG4gICAgICAgICAgICBub2RlLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFydHMgPSBibG9ja3NUZXh0Q29udGVudC5sZW5ndGggPCBTUExJVF9NQVhfTEVOR1RIID8gW2Jsb2Nrc1RleHRDb250ZW50XSA6IHNwbGl0SFRNTChibG9ja3NUZXh0Q29udGVudCk7XHJcblxyXG4gICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBibG9ja09iamVjdCA9IHRoaXMuZ2V0QmxvY2tQYXJ0T2JqZWN0KGdlbmVyYXRlSWQoKSwgcGFydCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5wdXNoKGJsb2NrT2JqZWN0KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5kYXRhLnRleHRCbG9ja3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlKGJsb2NrQ29udGVudDogSFRNTEVsZW1lbnQpOiBDdWlDb21iaW5lZFBhcnRCbG9ja1tdIHtcclxuICAgICAgICBjb25zdCB0ZXh0QmxvY2tzOiBDdWlDb21iaW5lZFBhcnRCbG9ja1tdID0gW107XHJcblxyXG4gICAgICAgIGJsb2NrQ29udGVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuVEFHKS5mb3JFYWNoKChzcGFuOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgICB0ZXh0QmxvY2tzLnB1c2godGhpcy5nZXRCbG9ja1BhcnRPYmplY3Qoc3Bhbi5kYXRhc2V0WydpZCddISwgc3Bhbi5pbm5lckhUTUwpKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHRCbG9ja3M7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xyXG5cclxuICAgICAgICBjb25zdCBibG9ja0lkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5mb3JFYWNoKChibG9jazogQ3VpQ29tYmluZWRQYXJ0QmxvY2spID0+IHtcclxuICAgICAgICAgICAgYmxvY2tJZHMuYWRkKGJsb2NrLmlkIHx8ICcnKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5yZW1vdmVCbG9ja3MoYmxvY2tJZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25NdXRhdGlvbkV2ZW50KGNhbGxiYWNrOiAobXV0YXRpb25MaXN0OiBNdXRhdGlvblJlY29yZFtdKSA9PiB2b2lkLCBtdXRhdGlvbkxpc3Q6IE11dGF0aW9uUmVjb3JkW10pOiB2b2lkIHtcclxuICAgICAgICBpZiAobXV0YXRpb25MaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBtdXRhdGlvbkxpc3QuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcclxuICAgICAgICAgICAgaWYgKG11dGF0aW9uLnJlbW92ZWROb2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5zZXQoZ2VuZXJhdGVJZCgpLCBtdXRhdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMuc2V0KG11dGF0aW9uLnRhcmdldCwgbXV0YXRpb24pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjYWxsYmFjayhtdXRhdGlvbkxpc3QpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tJc0VkaXRvckVtcHR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRNdXRhdGlvbkNhbGxiYWNrID0gKHdhaXQ6IG51bWJlcik6IEN1aU11dGF0aW9uQ2FsbGJhY2sgPT4ge1xyXG4gICAgICAgIGxldCB0aW1lb3V0SWQ6IEN1aU51bGxhYmxlPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+PiA9IG51bGw7XHJcblxyXG4gICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aW1lb3V0SWQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaGFuZGxlTXV0YXRpb25zKCksIHdhaXQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlTXV0YXRpb25zKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG11dGF0aW9uc0xpc3QgPSBbLi4udGhpcy5jaGFuZ2VzLnZhbHVlcygpXTtcclxuICAgICAgICBjb25zdCB7IHVwZGF0ZWRFbGVtZW50cywgcmVtb3ZlZEVsZW1lbnRzSWRzIH0gPSB0aGlzLmdldE11dGF0aW9uQWN0aW9ucyhtdXRhdGlvbnNMaXN0KTtcclxuICAgICAgICBjb25zdCBzcGxpdGVkUGFydHM6IEhUTUxFbGVtZW50W10gPSBbXTtcclxuXHJcbiAgICAgICAgdXBkYXRlZEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRDb250ZW50OiBzdHJpbmcgPSBlbGVtZW50LmlubmVySFRNTDtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50Q29udGVudC5sZW5ndGggPCBTUExJVF9NQVhfTEVOR1RIKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gc3BsaXRIVE1MKGVsZW1lbnRDb250ZW50KTtcclxuXHJcbiAgICAgICAgICAgIHBhcnRzLmZvckVhY2goKHBhcnQ6IHN0cmluZywgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja0lkID0gZ2VuZXJhdGVJZCgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dEVsZW1lbnQgPSB0aGlzLmNyZWF0ZUJsb2NrKGJsb2NrSWQsIHBhcnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNwbGl0ZWRQYXJ0cy5wdXNoKHRleHRFbGVtZW50KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHBhcnRzWzBdO1xyXG4gICAgICAgICAgICBlbGVtZW50LmFmdGVyKC4uLnNwbGl0ZWRQYXJ0cyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkQmxvY2tzKHNwbGl0ZWRQYXJ0cywgdXBkYXRlZEVsZW1lbnRzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUJsb2Nrcyh1cGRhdGVkRWxlbWVudHMpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQmxvY2tzKHJlbW92ZWRFbGVtZW50c0lkcyk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VzLmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXROZXh0SW5kZXgoKTogbnVtYmVyIHtcclxuICAgICAgICByZWNhbGN1bGF0ZUluZGV4ZXModGhpcy5hcGkuYmxvY2tzKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYXBpLmJsb2Nrcy5nZXRDdXJyZW50QmxvY2tJbmRleCgpO1xyXG4gICAgICAgIGNvbnN0IGJsb2NrID0gdGhpcy5hcGkuYmxvY2tzLmdldEJsb2NrQnlJbmRleChpbmRleCk7XHJcbiAgICAgICAgY29uc3QgZGF0YUluZGV4ID0gTnVtYmVyKGJsb2NrPy5ob2xkZXIuZGF0YXNldFsnaW5kZXgnXSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbj8ucmFuZ2VDb3VudCA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApIDogbnVsbDtcclxuICAgICAgICBjb25zdCBjYXJldFBvc2l0aW9uID0gcmFuZ2U/LnN0YXJ0T2Zmc2V0ID8/IDE7XHJcblxyXG4gICAgICAgIGxldCBuZXh0QmxvY2tJbmRleCA9IGRhdGFJbmRleDtcclxuXHJcbiAgICAgICAgaWYgKGNhcmV0UG9zaXRpb24gIT09IDApIHtcclxuICAgICAgICAgICAgY29uc3QgYmxvY2tDb250YWluZXIgPSBibG9jaz8uaG9sZGVyLnF1ZXJ5U2VsZWN0b3IoJy4nICsgQ09NQklORURfVEVYVF9CTE9DSykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuQ291bnQgPSBibG9ja0NvbnRhaW5lcj8uY2hpbGRyZW4/Lmxlbmd0aCA/IGJsb2NrQ29udGFpbmVyPy5jaGlsZHJlbj8ubGVuZ3RoIC0gMSA6IDA7XHJcblxyXG4gICAgICAgICAgICBuZXh0QmxvY2tJbmRleCA9IGRhdGFJbmRleCArIGNoaWxkcmVuQ291bnQgKyAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFuZXh0QmxvY2tJbmRleCkge1xyXG4gICAgICAgICAgICBuZXh0QmxvY2tJbmRleCB8fD0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXh0QmxvY2tJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEJsb2NrUGFydE9iamVjdChibG9ja0lkOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IEN1aUNvbWJpbmVkUGFydEJsb2NrIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZDogYmxvY2tJZCxcclxuICAgICAgICAgICAgdHlwZTogQ09NQklORURfVEVYVF9CTE9DS19QQVJULFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0LFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IHRoaXMuZGF0YS5pZCxcclxuICAgICAgICAgICAgICAgIHBhcmVudFR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE11dGF0aW9uQWN0aW9ucyhtdXRhdGlvbkxpc3Q6IE11dGF0aW9uUmVjb3JkW10pOiBDdWlNdXRhdGlvbkFjdGlvbnMge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRFbGVtZW50cyA9IG5ldyBTZXQ8SFRNTEVsZW1lbnQ+KCk7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZEVsZW1lbnRzSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICAgICAgY29uc3QgY2hhbmdlZE91dHNpZGVFbGVtZW50czogTm9kZVtdID0gW107XHJcblxyXG4gICAgICAgIHRoaXMubGFzdEJsb2NrRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICAgICAgbXV0YXRpb25MaXN0LmZvckVhY2goKG11dGF0aW9uOiBNdXRhdGlvblJlY29yZCk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVVwZGF0ZWRCbG9ja3MobXV0YXRpb24sIHVwZGF0ZWRFbGVtZW50cywgY2hhbmdlZE91dHNpZGVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3ZlZEJsb2NrcyhtdXRhdGlvbiwgcmVtb3ZlZEVsZW1lbnRzSWRzKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubGFzdEJsb2NrRWxlbWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBsYXN0QmxvY2tFbGVtZW50ID0gdGhpcy5sYXN0QmxvY2tFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgbGFzdEJsb2NrRWxlbWVudC5hcHBlbmQoLi4uY2hhbmdlZE91dHNpZGVFbGVtZW50cyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRUb0Jsb2Nrc0VuZChsYXN0QmxvY2tFbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHVwZGF0ZWRFbGVtZW50cyxcclxuICAgICAgICAgICAgcmVtb3ZlZEVsZW1lbnRzSWRzXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldENhcmV0VG9CbG9ja3NFbmQoYmxvY2s6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuXHJcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoYmxvY2ssIGJsb2NrLmNoaWxkTm9kZXMubGVuZ3RoKTtcclxuICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlVXBkYXRlZEJsb2NrcyhcclxuICAgICAgICBtdXRhdGlvbjogTXV0YXRpb25SZWNvcmQsXHJcbiAgICAgICAgdXBkYXRlZEVsZW1lbnRzOiBTZXQ8SFRNTEVsZW1lbnQ+LFxyXG4gICAgICAgIG91dHNpZGVDaGFuZ2VzOiBOb2RlW11cclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIGxldCBlbGVtZW50ID0gbXV0YXRpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAobXV0YXRpb24udGFyZ2V0Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xyXG4gICAgICAgICAgICBlbGVtZW50ID0gbXV0YXRpb24udGFyZ2V0LnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzcGFuID0gZWxlbWVudD8uY2xvc2VzdCgnLicgKyBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQpIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAoc3Bhbikge1xyXG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudHMuYWRkKHNwYW4pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VzT3V0c2lkZUJsb2NrKGVsZW1lbnQsIG91dHNpZGVDaGFuZ2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZUNoYW5nZXNPdXRzaWRlQmxvY2soZWxlbWVudDogSFRNTEVsZW1lbnQsIG91dHNpZGVDaGFuZ2VzOiBOb2RlW10pOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWVsZW1lbnQgfHwgdGhpcy5sYXN0QmxvY2tFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsZW1lbnQuY2hpbGROb2Rlcy5mb3JFYWNoKChibG9jaykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBibG9ja0VsZW1lbnQgPSBibG9jayBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChibG9ja0VsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucyhDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RCbG9ja0VsZW1lbnQgPSBibG9ja0VsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBvdXRzaWRlQ2hhbmdlcy5wdXNoKGJsb2NrKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZEJsb2NrcyhzcGxpY2VkUGFydHM6IEhUTUxFbGVtZW50W10sIHVwZGF0ZWRFbGVtZW50czogU2V0PEhUTUxFbGVtZW50Pik6IHZvaWQge1xyXG4gICAgICAgIGlmICghc3BsaWNlZFBhcnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhZGRlZEJsb2NrczogQ3VpQ29tYmluZWRQYXJ0QmxvY2tbXSA9IHNwbGljZWRQYXJ0cy5tYXAoKGJsb2NrKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrSWQgPSBibG9jay5kYXRhc2V0WydpZCddO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBibG9ja0lkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogQ09NQklORURfVEVYVF9CTE9DS19QQVJULFxyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGJsb2NrLmlubmVySFRNTCxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogdGhpcy5kYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBwcmV2aW91c0VsZW1lbnQgPSB1cGRhdGVkRWxlbWVudHMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGlkID0gcHJldmlvdXNFbGVtZW50Py5kYXRhc2V0WydpZCddO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gTnVtYmVyKHByZXZpb3VzRWxlbWVudD8uZGF0YXNldFsnaW5kZXgnXSkgKyAxO1xyXG4gICAgICAgIGNvbnN0IGJsb2NrSW5kZXggPSB0aGlzLmRhdGEudGV4dEJsb2Nrcy5maW5kSW5kZXgoKGJsb2NrKSA9PiBibG9jay5pZCA9PT0gaWQpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGEudGV4dEJsb2Nrcy5zcGxpY2UoYmxvY2tJbmRleCwgMCwgLi4uYWRkZWRCbG9ja3MpO1xyXG4gICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsIHtcclxuICAgICAgICAgICAgaW5kZXgsXHJcbiAgICAgICAgICAgIGJsb2NrSW5kZXgsXHJcbiAgICAgICAgICAgIGJsb2NrczogYWRkZWRCbG9ja3MsXHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YS50ZXh0QmxvY2tzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVCbG9ja3ModXBkYXRlZEVsZW1lbnRzOiBTZXQ8SFRNTEVsZW1lbnQ+KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF1cGRhdGVkRWxlbWVudHMuc2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1cGRhdGVkQmxvY2tzID0gWy4uLnVwZGF0ZWRFbGVtZW50cy52YWx1ZXMoKV0ubWFwKChibG9jaykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGJsb2NrLmRhdGFzZXRbJ2lkJ10sXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogYmxvY2suaW5uZXJIVE1MLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB0aGlzLmRhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50VHlwZTogQ09NQklORURfVEVYVF9CTE9DS19OQU1FXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfVVBEQVRFRCwgdXBkYXRlZEJsb2Nrcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVSZW1vdmVkQmxvY2tzKG11dGF0aW9uOiBNdXRhdGlvblJlY29yZCwgcmVtb3ZlZEVsZW1lbnRzSWRzOiBTZXQ8c3RyaW5nPik6IHZvaWQge1xyXG4gICAgICAgIGlmIChtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG11dGF0aW9uLnJlbW92ZWROb2Rlcy5mb3JFYWNoKChub2RlOiBOb2RlKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgYmxvY2tJZCA9IChub2RlIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0WydpZCddO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFibG9ja0lkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlbW92ZWRFbGVtZW50c0lkcy5hZGQoYmxvY2tJZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW1vdmVCbG9ja3MoaWRzOiBTZXQ8c3RyaW5nPik6IHZvaWQge1xyXG4gICAgICAgIGlmICghaWRzLnNpemUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZEVsZW1lbnRJZHMgPSBbLi4uaWRzLnZhbHVlcygpXTtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MgPSB0aGlzLmRhdGEudGV4dEJsb2Nrcy5maWx0ZXIoKGJsb2NrKSA9PiAhaWRzLmhhcyhibG9jay5pZCB8fCAnJykpO1xyXG4gICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfUkVNT1ZFRCwgcmVtb3ZlZEVsZW1lbnRJZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlKGJsb2NrczogQ3VpQ29tYmluZWRQYXJ0QmxvY2tbXSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghYmxvY2tzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBibG9ja3MuZm9yRWFjaCgoYmxvY2s6IEN1aUNvbWJpbmVkUGFydEJsb2NrKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gdGhpcy5jcmVhdGVCbG9jayhibG9jay5pZCB8fCBnZW5lcmF0ZUlkKCksIGJsb2NrLmRhdGEudGV4dCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMud3JhcHBlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy53cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy4nICsgQ09NQklORURfVEVYVF9CTE9DS19QQVJUKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53cmFwcGVyLmFwcGVuZCh0ZXh0RWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLndyYXBwZXIucmVwbGFjZUNoaWxkcmVuKHRleHRFbGVtZW50KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBpLmV2ZW50cy5lbWl0KENPTUJJTkVEX1RFWFRfQkxPQ0tfQURERUQsIHtcclxuICAgICAgICAgICAgICAgIGJsb2Nrc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZUJsb2NrKGlkOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcclxuICAgICAgICBjb25zdCB0ZXh0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5UQUcpO1xyXG4gICAgICAgIHRleHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ09NQklORURfVEVYVF9CTE9DS19QQVJUKTtcclxuICAgICAgICB0ZXh0RWxlbWVudC5pbm5lckhUTUwgPSB0ZXh0O1xyXG4gICAgICAgIHRleHRFbGVtZW50LmRhdGFzZXRbJ2lkJ10gPSBpZDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRleHRFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29udmVydERlZmF1bHREYXRhVG9DdXN0b20oZGF0YTogeyB0ZXh0OiBzdHJpbmcgfSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS50ZXh0QmxvY2tzID0gZGF0YS5tYXAoKGJsb2NrKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBibG9jay5pZCA9IGdlbmVyYXRlSWQoKTtcclxuICAgICAgICAgICAgICAgIGJsb2NrLmRhdGEucGFyZW50SWQgPSB0aGlzLmRhdGEuaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZGF0YS50ZXh0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoZGF0YS50ZXh0KTtcclxuICAgICAgICBsZXQgZWxlbWVudENvbnRlbnQgPSAnJztcclxuXHJcbiAgICAgICAgZnJhZ21lbnQuY2hpbGROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudENvbnRlbnQgKz0gbm9kZS50ZXh0Q29udGVudDtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnRDb250ZW50ICs9IChub2RlIGFzIEhUTUxFbGVtZW50KS5pbm5lckhUTUw7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcnRzID0gZWxlbWVudENvbnRlbnQubGVuZ3RoIDwgU1BMSVRfTUFYX0xFTkdUSCA/IFtlbGVtZW50Q29udGVudF0gOiBzcGxpdEhUTUwoZWxlbWVudENvbnRlbnQpO1xyXG5cclxuICAgICAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYmxvY2tPYmplY3QgPSB0aGlzLmdldEJsb2NrUGFydE9iamVjdChnZW5lcmF0ZUlkKCksIHBhcnQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5kYXRhLnRleHRCbG9ja3MucHVzaChibG9ja09iamVjdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0lzRWRpdG9yRW1wdHkoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndyYXBwZXIgfHwgdGhpcy53cmFwcGVyLmNoaWxkcmVuLmxlbmd0aCA+IHRoaXMuTUFYX0NISUxEX0NPVU5UX0ZPUl9FTVBUWSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy53cmFwcGVyLmNoaWxkcmVuLml0ZW0oMCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgaXNJdGVtRW1wdHkgPSAhaXRlbS50ZXh0Q29udGVudD8ubGVuZ3RoO1xyXG5cclxuICAgICAgICB0aGlzLndyYXBwZXIuZGF0YXNldFsnZW1wdHknXSA9IGAke2lzSXRlbUVtcHR5fWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQbGFjZWhvbGRlcihjb25maWc6IFRvb2xDb25maWcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb25maWcucmVhZG9ubHlQbGFjZWhvbGRlciA/PyBERUZBVUxUX1JFQURPTkxZX1BMQUNFSE9MREVSO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5wbGFjZWhvbGRlciA/PyBERUZBVUxUX1BMQUNFSE9MREVSO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { MARKER_MODAL_SELECTOR } from '../components/marker-modal/marker-modal.options';
|
|
2
|
+
import { CuiMarkerTool } from './marker.tool';
|
|
3
|
+
export class CuiCustomMarkerTool extends CuiMarkerTool {
|
|
4
|
+
static get sanitize() {
|
|
5
|
+
return {
|
|
6
|
+
mark: {
|
|
7
|
+
class: true,
|
|
8
|
+
'data-id': true,
|
|
9
|
+
'data-type': true,
|
|
10
|
+
contenteditable: true
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
constructor(data) {
|
|
15
|
+
super(data);
|
|
16
|
+
}
|
|
17
|
+
wrapTool(range, markerData) {
|
|
18
|
+
const { startContainer, endContainer } = range;
|
|
19
|
+
if (markerData.data && typeof markerData.data !== 'string') {
|
|
20
|
+
this.id = markerData.data.id;
|
|
21
|
+
this.type = markerData.data.type;
|
|
22
|
+
}
|
|
23
|
+
const mark = this.createElement(markerData.title);
|
|
24
|
+
range.extractContents();
|
|
25
|
+
this.removeNestedMarkers(mark, this.DEFAULT_CLASS);
|
|
26
|
+
this.addMarkerToDOM(range, mark, startContainer, endContainer);
|
|
27
|
+
this.removeExternalMarkers(range, this.DEFAULT_CLASS);
|
|
28
|
+
this.removeEmptyMarkers(range);
|
|
29
|
+
this.api.selection.expandToTag(mark);
|
|
30
|
+
}
|
|
31
|
+
onToolButtonClick(event) {
|
|
32
|
+
const range = window.getSelection()?.getRangeAt(0);
|
|
33
|
+
if (range) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
event.stopImmediatePropagation();
|
|
37
|
+
}
|
|
38
|
+
render() {
|
|
39
|
+
super.render();
|
|
40
|
+
this.button.onclick = this.onToolButtonClick.bind(this);
|
|
41
|
+
return this.button;
|
|
42
|
+
}
|
|
43
|
+
renderActions() {
|
|
44
|
+
this.dropdown = document.createElement(this.DIV);
|
|
45
|
+
if (this.state) {
|
|
46
|
+
return this.dropdown;
|
|
47
|
+
}
|
|
48
|
+
const markerSelect = this.createLinkModal();
|
|
49
|
+
this.dropdown.append(markerSelect);
|
|
50
|
+
return this.dropdown;
|
|
51
|
+
}
|
|
52
|
+
createElement(text = '') {
|
|
53
|
+
const element = super.createElement(text);
|
|
54
|
+
element.contentEditable = 'false';
|
|
55
|
+
element.classList.add(this.CLASS);
|
|
56
|
+
element.setAttribute('data-id', this.id);
|
|
57
|
+
element.setAttribute('data-type', this.type);
|
|
58
|
+
return element;
|
|
59
|
+
}
|
|
60
|
+
checkState(select) {
|
|
61
|
+
const range = select.getRangeAt(0);
|
|
62
|
+
const mark = this.api.selection.findParentTag(this.TAG);
|
|
63
|
+
const isCorrectTool = mark?.classList.contains(this.CLASS);
|
|
64
|
+
if (!mark || !isCorrectTool) {
|
|
65
|
+
this.state = false;
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const startContainer = range.startContainer;
|
|
69
|
+
const endContainer = range.endContainer;
|
|
70
|
+
const isStartMarker = mark.contains(startContainer);
|
|
71
|
+
const isEndMarker = mark.contains(endContainer);
|
|
72
|
+
this.state = isStartMarker && isEndMarker && isStartMarker === isEndMarker;
|
|
73
|
+
}
|
|
74
|
+
createLinkModal() {
|
|
75
|
+
this.markerModal = document.createElement(MARKER_MODAL_SELECTOR);
|
|
76
|
+
this.markerModal.tool = { id: '', title: '', type: undefined };
|
|
77
|
+
this.markerModal.target = this.button;
|
|
78
|
+
this.markerModal.isTool = true;
|
|
79
|
+
this.markerModal.isGlobal = true;
|
|
80
|
+
this.markerModal.addEventListener('saveClicked', (event) => {
|
|
81
|
+
const customEvent = event;
|
|
82
|
+
const data = customEvent.detail;
|
|
83
|
+
this.wrapTool(this.range, data);
|
|
84
|
+
});
|
|
85
|
+
return this.markerModal;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW1hcmtlci50b29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9lZGl0b3IvdG9vbHMvY3VzdG9tLW1hcmtlci50b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRXhGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUMsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGFBQWE7SUFJN0MsTUFBTSxLQUFLLFFBQVE7UUFDeEIsT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsSUFBSTtnQkFDWCxTQUFTLEVBQUUsSUFBSTtnQkFDZixXQUFXLEVBQUUsSUFBSTtnQkFDakIsZUFBZSxFQUFFLElBQUk7YUFDdEI7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksSUFBa0M7UUFDNUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFZLEVBQUUsVUFBc0I7UUFDbEQsTUFBTSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFFL0MsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLE9BQU8sVUFBVSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMzRCxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRyxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFLLENBQUM7UUFDcEMsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxF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SUFBSSxDQUFDLEtBQUssR0FBRyxhQUFhLElBQUksV0FBVyxJQUFJLGFBQWEsS0FBSyxXQUFXLENBQUM7SUFDN0UsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUE0QyxDQUFDO1FBRTVHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFZLEVBQUUsRUFBRTtZQUNoRSxNQUFNLFdBQVcsR0FBRyxLQUFnQyxDQUFDO1lBQ3JELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFFaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSW5saW5lVG9vbENvbnN0cnVjdG9yT3B0aW9ucywgU2FuaXRpemVyQ29uZmlnIH0gZnJvbSAnQGVkaXRvcmpzL2VkaXRvcmpzJztcclxuXHJcbmltcG9ydCB0eXBlIHsgQ3VpQW5ndWxhckVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuXHJcbmltcG9ydCB0eXBlIHsgTWFya2VyTW9kYWxDb21wb25lbnQsIE1hcmtlckRhdGEgfSBmcm9tICcuLi9jb21wb25lbnRzL21hcmtlci1tb2RhbCc7XHJcbmltcG9ydCB7IE1BUktFUl9NT0RBTF9TRUxFQ1RPUiB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWFya2VyLW1vZGFsL21hcmtlci1tb2RhbC5vcHRpb25zJztcclxuXHJcbmltcG9ydCB7IEN1aU1hcmtlclRvb2wgfSBmcm9tICcuL21hcmtlci50b29sJztcclxuXHJcbmV4cG9ydCBjbGFzcyBDdWlDdXN0b21NYXJrZXJUb29sIGV4dGVuZHMgQ3VpTWFya2VyVG9vbCB7XHJcbiAgcHJvdGVjdGVkIGlkITogc3RyaW5nO1xyXG4gIHByb3RlY3RlZCB0eXBlITogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldCBzYW5pdGl6ZSgpOiBTYW5pdGl6ZXJDb25maWcge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWFyazoge1xyXG4gICAgICAgIGNsYXNzOiB0cnVlLFxyXG4gICAgICAgICdkYXRhLWlkJzogdHJ1ZSxcclxuICAgICAgICAnZGF0YS10eXBlJzogdHJ1ZSxcclxuICAgICAgICBjb250ZW50ZWRpdGFibGU6IHRydWVcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKGRhdGE6IElubGluZVRvb2xDb25zdHJ1Y3Rvck9wdGlvbnMpIHtcclxuICAgIHN1cGVyKGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHdyYXBUb29sKHJhbmdlOiBSYW5nZSwgbWFya2VyRGF0YTogTWFya2VyRGF0YSk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBzdGFydENvbnRhaW5lciwgZW5kQ29udGFpbmVyIH0gPSByYW5nZTtcclxuXHJcbiAgICBpZiAobWFya2VyRGF0YS5kYXRhICYmIHR5cGVvZiBtYXJrZXJEYXRhLmRhdGEgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuaWQgPSBtYXJrZXJEYXRhLmRhdGEuaWQhO1xyXG4gICAgICB0aGlzLnR5cGUgPSBtYXJrZXJEYXRhLmRhdGEudHlwZSE7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWFyayA9IHRoaXMuY3JlYXRlRWxlbWVudChtYXJrZXJEYXRhLnRpdGxlKTtcclxuXHJcbiAgICByYW5nZS5leHRyYWN0Q29udGVudHMoKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZU5lc3RlZE1hcmtlcnMobWFyaywgdGhpcy5ERUZBVUxUX0NMQVNTKTtcclxuXHJcbiAgICB0aGlzLmFkZE1hcmtlclRvRE9NKHJhbmdlLCBtYXJrLCBzdGFydENvbnRhaW5lciwgZW5kQ29udGFpbmVyKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUV4dGVybmFsTWFya2VycyhyYW5nZSwgdGhpcy5ERUZBVUxUX0NMQVNTKTtcclxuICAgIHRoaXMucmVtb3ZlRW1wdHlNYXJrZXJzKHJhbmdlKTtcclxuXHJcbiAgICB0aGlzLmFwaS5zZWxlY3Rpb24uZXhwYW5kVG9UYWcobWFyayk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uVG9vbEJ1dHRvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCByYW5nZSA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKTtcclxuXHJcbiAgICBpZiAocmFuZ2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG92ZXJyaWRlIHJlbmRlcigpOiBIVE1MQnV0dG9uRWxlbWVudCB7XHJcbiAgICBzdXBlci5yZW5kZXIoKTtcclxuXHJcbiAgICB0aGlzLmJ1dHRvbi5vbmNsaWNrID0gdGhpcy5vblRvb2xCdXR0b25DbGljay5iaW5kKHRoaXMpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmJ1dHRvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXJBY3Rpb25zKCk6IEhUTUxFbGVtZW50IHtcclxuICAgIHRoaXMuZHJvcGRvd24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuRElWKTtcclxuXHJcbiAgICBpZiAodGhpcy5zdGF0ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5kcm9wZG93bjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYXJrZXJTZWxlY3QgPSB0aGlzLmNyZWF0ZUxpbmtNb2RhbCgpO1xyXG5cclxuICAgIHRoaXMuZHJvcGRvd24uYXBwZW5kKG1hcmtlclNlbGVjdCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3ZlcnJpZGUgY3JlYXRlRWxlbWVudCh0ZXh0ID0gJycpOiBIVE1MRWxlbWVudCB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gc3VwZXIuY3JlYXRlRWxlbWVudCh0ZXh0KTtcclxuXHJcbiAgICBlbGVtZW50LmNvbnRlbnRFZGl0YWJsZSA9ICdmYWxzZSc7XHJcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5DTEFTUyk7XHJcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1pZCcsIHRoaXMuaWQpO1xyXG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwZScsIHRoaXMudHlwZSk7XHJcblxyXG4gICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tTdGF0ZShzZWxlY3Q6IFNlbGVjdGlvbik6IHZvaWQge1xyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3QuZ2V0UmFuZ2VBdCgwKTtcclxuICAgIGNvbnN0IG1hcmsgPSB0aGlzLmFwaS5zZWxlY3Rpb24uZmluZFBhcmVudFRhZyh0aGlzLlRBRyk7XHJcbiAgICBjb25zdCBpc0NvcnJlY3RUb29sID0gbWFyaz8uY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMuQ0xBU1MpO1xyXG5cclxuICAgIGlmICghbWFyayB8fCAhaXNDb3JyZWN0VG9vbCkge1xyXG4gICAgICB0aGlzLnN0YXRlID0gZmFsc2U7XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcjtcclxuICAgIGNvbnN0IGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcjtcclxuXHJcbiAgICBjb25zdCBpc1N0YXJ0TWFya2VyID0gbWFyay5jb250YWlucyhzdGFydENvbnRhaW5lcik7XHJcbiAgICBjb25zdCBpc0VuZE1hcmtlciA9IG1hcmsuY29udGFpbnMoZW5kQ29udGFpbmVyKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0gaXNTdGFydE1hcmtlciAmJiBpc0VuZE1hcmtlciAmJiBpc1N0YXJ0TWFya2VyID09PSBpc0VuZE1hcmtlcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlTGlua01vZGFsKCk6IEN1aUFuZ3VsYXJFbGVtZW50PE1hcmtlck1vZGFsQ29tcG9uZW50PiB7XHJcbiAgICB0aGlzLm1hcmtlck1vZGFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChNQVJLRVJfTU9EQUxfU0VMRUNUT1IpIGFzIEN1aUFuZ3VsYXJFbGVtZW50PE1hcmtlck1vZGFsQ29tcG9uZW50PjtcclxuXHJcbiAgICB0aGlzLm1hcmtlck1vZGFsLnRvb2wgPSB7IGlkOiAnJywgdGl0bGU6ICcnLCB0eXBlOiB1bmRlZmluZWQgfTtcclxuICAgIHRoaXMubWFya2VyTW9kYWwudGFyZ2V0ID0gdGhpcy5idXR0b247XHJcbiAgICB0aGlzLm1hcmtlck1vZGFsLmlzVG9vbCA9IHRydWU7XHJcbiAgICB0aGlzLm1hcmtlck1vZGFsLmlzR2xvYmFsID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm1hcmtlck1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ3NhdmVDbGlja2VkJywgKGV2ZW50OiBFdmVudCkgPT4ge1xyXG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PE1hcmtlckRhdGE+O1xyXG4gICAgICBjb25zdCBkYXRhID0gY3VzdG9tRXZlbnQuZGV0YWlsO1xyXG5cclxuICAgICAgdGhpcy53cmFwVG9vbCh0aGlzLnJhbmdlLCBkYXRhKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLm1hcmtlck1vZGFsO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import Header from '@editorjs/header';
|
|
2
|
+
export class CuiHeaderTool extends Header {
|
|
3
|
+
constructor(data) {
|
|
4
|
+
super(data);
|
|
5
|
+
}
|
|
6
|
+
validate() {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
render() {
|
|
10
|
+
return super.render();
|
|
11
|
+
}
|
|
12
|
+
save(block) {
|
|
13
|
+
return super.save(block);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLnRvb2wuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci90b29scy9oZWFkZXIudG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE1BQU0sTUFBTSxrQkFBa0IsQ0FBQztBQUV0QyxNQUFNLE9BQU8sYUFBYyxTQUFRLE1BQU07SUFDckMsWUFBWSxJQUFTO1FBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRWUsUUFBUTtRQUNwQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRWUsTUFBTTtRQUNsQixPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRWUsSUFBSSxDQUFDLEtBQXlCO1FBQzFDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJsb2NrVG9vbERhdGEgfSBmcm9tICdAZWRpdG9yanMvZWRpdG9yanMnO1xyXG5pbXBvcnQgSGVhZGVyIGZyb20gJ0BlZGl0b3Jqcy9oZWFkZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1aUhlYWRlclRvb2wgZXh0ZW5kcyBIZWFkZXIge1xyXG4gICAgY29uc3RydWN0b3IoZGF0YTogYW55KSB7XHJcbiAgICAgICAgc3VwZXIoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG92ZXJyaWRlIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvdmVycmlkZSByZW5kZXIoKTogSFRNTEhlYWRpbmdFbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gc3VwZXIucmVuZGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG92ZXJyaWRlIHNhdmUoYmxvY2s6IEhUTUxIZWFkaW5nRWxlbWVudCk6IEJsb2NrVG9vbERhdGEge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5zYXZlKGJsb2NrKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|