@searpent/react-image-annotate 2.0.75 → 2.0.76
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/.babelrc +6 -0
- package/.env +1 -0
- package/.flowconfig +2 -0
- package/.github/workflows/release-on-master.yml +32 -0
- package/.github/workflows/test.yml +16 -0
- package/.prettierrc +3 -0
- package/.releaserc.js +18 -0
- package/.storybook/addons.js +2 -0
- package/.storybook/config.js +16 -0
- package/LICENSE +21 -0
- package/package.json +1 -1
- package/public/favicon.ico +0 -0
- package/public/index.html +38 -0
- package/src/Annotator/bike-pic.png +0 -0
- package/src/Annotator/bike-pic2.png +0 -0
- package/src/Annotator/dab-keyframes.story.json +1 -0
- package/src/Annotator/exampleImages.js +48 -0
- package/src/Annotator/examplePhotos.js +7603 -0
- package/src/Annotator/index.js +380 -0
- package/src/Annotator/index.story.js +877 -0
- package/src/Annotator/poses.story.js +150 -0
- package/src/Annotator/reducers/combine-reducers.js +7 -0
- package/src/Annotator/reducers/convert-expanding-line-to-polygon.js +53 -0
- package/{Annotator → src/Annotator}/reducers/fix-twisted.js +5 -3
- package/src/Annotator/reducers/general-reducer.js +1228 -0
- package/src/Annotator/reducers/get-active-image.js +21 -0
- package/src/Annotator/reducers/get-implied-video-regions.js +115 -0
- package/src/Annotator/reducers/history-handler.js +60 -0
- package/src/Annotator/reducers/image-reducer.js +23 -0
- package/src/Annotator/reducers/video-reducer.js +85 -0
- package/src/Annotator/video.story.js +51 -0
- package/src/ClassSelectionMenu/index.js +112 -0
- package/src/Crosshairs/index.js +64 -0
- package/src/DebugSidebarBox/index.js +36 -0
- package/src/DemoSite/Editor.js +235 -0
- package/src/DemoSite/ErrorBoundaryDialog.js +34 -0
- package/src/DemoSite/index.js +41 -0
- package/src/DemoSite/index.story.js +10 -0
- package/src/DemoSite/simple-segmentation-example.json +572 -0
- package/src/Editor/annotation-plugin/annotation.js +536 -0
- package/src/Editor/index.js +50 -0
- package/src/Editor/readOnly.js +21 -0
- package/{Editor → src/Editor}/tools.js +3 -2
- package/src/Errorer/index.js +13 -0
- package/src/FullImageSegmentationAnnotator/hard1.story.jpg +0 -0
- package/src/FullImageSegmentationAnnotator/hard2.story.jpg +0 -0
- package/src/FullImageSegmentationAnnotator/hard3.story.jpg +0 -0
- package/src/FullImageSegmentationAnnotator/index.js +7 -0
- package/src/FullImageSegmentationAnnotator/index.story.js +177 -0
- package/src/FullImageSegmentationAnnotator/orange.story.png +0 -0
- package/src/GroupSelectorSidebarBox/index.js +48 -0
- package/src/GroupsEditorSidebarBox/index.js +108 -0
- package/src/HelpSidebarBox/index.js +43 -0
- package/src/HighlightBox/index.js +143 -0
- package/src/HistorySidebarBox/index.js +78 -0
- package/src/ImageCanvas/dancing-man.story.jpg +0 -0
- package/src/ImageCanvas/index.js +515 -0
- package/src/ImageCanvas/index.story.js +314 -0
- package/src/ImageCanvas/mouse_mask.story.png +0 -0
- package/src/ImageCanvas/region-tools.js +171 -0
- package/src/ImageCanvas/seves_desk.story.jpg +0 -0
- package/{ImageCanvas → src/ImageCanvas}/styles.js +8 -12
- package/src/ImageCanvas/use-mouse.js +168 -0
- package/src/ImageCanvas/use-project-box.js +23 -0
- package/src/ImageCanvas/use-wasd-mode.js +50 -0
- package/src/ImageMask/index.js +127 -0
- package/src/ImageMask/load-image.js +32 -0
- package/src/ImageSelectorSidebarBox/index.js +54 -0
- package/src/KeyframeTimeline/get-time-string.js +25 -0
- package/src/KeyframeTimeline/index.js +223 -0
- package/src/KeyframesSelectorSidebarBox/index.js +93 -0
- package/src/LandingPage/content.md +57 -0
- package/src/LandingPage/github-markdown.css +964 -0
- package/src/LandingPage/index.js +147 -0
- package/src/Locker/index.js +13 -0
- package/src/MainLayout/RightSidebarItemsWrapper.js +21 -0
- package/src/MainLayout/icon-dictionary.js +79 -0
- package/src/MainLayout/index.js +564 -0
- package/src/MainLayout/index.story.js +240 -0
- package/{MainLayout → src/MainLayout}/styles.js +7 -6
- package/src/MainLayout/types.js +171 -0
- package/src/MainLayout/use-implied-video-regions.js +17 -0
- package/src/MetadataEditorSidebarBox/index.js +160 -0
- package/src/PageSelector/index.js +159 -0
- package/src/PointDistances/index.js +90 -0
- package/src/PreventScrollToParents/index.js +48 -0
- package/src/PreventScrollToParents/index.story.js +23 -0
- package/src/RegionLabel/index.js +236 -0
- package/{RegionLabel → src/RegionLabel}/styles.js +15 -12
- package/src/RegionSelectAndTransformBoxes/index.js +236 -0
- package/src/RegionSelectorSidebarBox/index.js +220 -0
- package/{RegionSelectorSidebarBox → src/RegionSelectorSidebarBox}/styles.js +14 -13
- package/src/RegionShapes/index.js +254 -0
- package/src/RegionTags/index.js +136 -0
- package/src/SettingsDialog/index.js +58 -0
- package/src/SettingsProvider/index.js +57 -0
- package/src/Shortcuts/ShortcutField.js +44 -0
- package/src/Shortcuts/index.js +129 -0
- package/src/ShortcutsManager/index.js +162 -0
- package/src/Sidebar/index.js +117 -0
- package/src/SidebarBoxContainer/index.js +93 -0
- package/src/SmallToolButton/index.js +57 -0
- package/src/TagsSidebarBox/index.js +93 -0
- package/src/TaskDescriptionSidebarBox/index.js +43 -0
- package/src/Theme/index.js +36 -0
- package/src/VideoOrImageCanvasBackground/index.js +170 -0
- package/src/colors.js +32 -0
- package/src/hooks/use-colors.js +75 -0
- package/src/hooks/use-event-callback.js +11 -0
- package/src/hooks/use-exclude-pattern.js +27 -0
- package/src/hooks/use-load-image.js +21 -0
- package/src/hooks/use-window-size.js +46 -0
- package/{hooks → src/hooks}/xpattern.js +1 -1
- package/src/hooks/xpattern.png +0 -0
- package/src/index.js +18 -0
- package/src/lib.js +7 -0
- package/src/screenshot.png +0 -0
- package/src/site.css +5 -0
- package/src/stories.js +2 -0
- package/src/utils/blocks-to-article.js +61 -0
- package/{utils → src/utils}/blocks-to-article.test.js +8 -5
- package/{utils → src/utils}/default-locked-until.js +1 -2
- package/{utils → src/utils}/filter-only-unique.js +1 -1
- package/src/utils/get-from-local-storage.js +7 -0
- package/src/utils/get-hotkey-help-text.js +11 -0
- package/src/utils/get-landmarks-with-transform.js +23 -0
- package/src/utils/photosToImages.js +67 -0
- package/src/utils/regions-groups.js +19 -0
- package/src/utils/regions-to-blocks.js +16 -0
- package/src/utils/saveable-actions-enum.js +5 -0
- package/src/utils/set-in-local-storage.js +6 -0
- package/src/utils/sleep.js +3 -0
- package/src/utils/uuid-to-hash.js +5 -0
- package/Annotator/exampleImages.js +0 -41
- package/Annotator/examplePhotos.js +0 -6980
- package/Annotator/index.js +0 -417
- package/Annotator/reducers/combine-reducers.js +0 -14
- package/Annotator/reducers/convert-expanding-line-to-polygon.js +0 -73
- package/Annotator/reducers/general-reducer.js +0 -1430
- package/Annotator/reducers/get-active-image.js +0 -27
- package/Annotator/reducers/get-implied-video-regions.js +0 -180
- package/Annotator/reducers/history-handler.js +0 -38
- package/Annotator/reducers/image-reducer.js +0 -20
- package/Annotator/reducers/video-reducer.js +0 -88
- package/ClassSelectionMenu/index.js +0 -140
- package/Crosshairs/index.js +0 -53
- package/DebugSidebarBox/index.js +0 -20
- package/DemoSite/Editor.js +0 -194
- package/DemoSite/ErrorBoundaryDialog.js +0 -64
- package/DemoSite/index.js +0 -40
- package/Editor/annotation-plugin/annotation.js +0 -647
- package/Editor/index.js +0 -93
- package/Editor/readOnly.js +0 -73
- package/Errorer/index.js +0 -11
- package/FullImageSegmentationAnnotator/index.js +0 -7
- package/GroupSelectorSidebarBox/index.js +0 -63
- package/GroupsEditorSidebarBox/index.js +0 -138
- package/HelpSidebarBox/index.js +0 -58
- package/HighlightBox/index.js +0 -102
- package/HistorySidebarBox/index.js +0 -71
- package/ImageCanvas/index.js +0 -441
- package/ImageCanvas/region-tools.js +0 -165
- package/ImageCanvas/use-mouse.js +0 -180
- package/ImageCanvas/use-project-box.js +0 -27
- package/ImageCanvas/use-wasd-mode.js +0 -62
- package/ImageMask/index.js +0 -133
- package/ImageMask/load-image.js +0 -25
- package/ImageSelectorSidebarBox/index.js +0 -60
- package/KeyframeTimeline/get-time-string.js +0 -27
- package/KeyframeTimeline/index.js +0 -233
- package/KeyframesSelectorSidebarBox/index.js +0 -93
- package/LandingPage/index.js +0 -159
- package/Locker/index.js +0 -11
- package/MainLayout/RightSidebarItemsWrapper.js +0 -19
- package/MainLayout/icon-dictionary.js +0 -104
- package/MainLayout/index.js +0 -526
- package/MainLayout/types.js +0 -0
- package/MainLayout/use-implied-video-regions.js +0 -13
- package/MetadataEditorSidebarBox/index.js +0 -231
- package/PageSelector/index.js +0 -180
- package/PointDistances/index.js +0 -73
- package/PreventScrollToParents/index.js +0 -51
- package/RegionLabel/index.js +0 -232
- package/RegionSelectAndTransformBoxes/index.js +0 -169
- package/RegionSelectorSidebarBox/index.js +0 -254
- package/RegionShapes/index.js +0 -294
- package/RegionTags/index.js +0 -144
- package/SettingsDialog/index.js +0 -52
- package/SettingsProvider/index.js +0 -60
- package/Shortcuts/ShortcutField.js +0 -46
- package/Shortcuts/index.js +0 -133
- package/ShortcutsManager/index.js +0 -155
- package/Sidebar/index.js +0 -69
- package/SidebarBoxContainer/index.js +0 -93
- package/SmallToolButton/index.js +0 -42
- package/TagsSidebarBox/index.js +0 -105
- package/TaskDescriptionSidebarBox/index.js +0 -58
- package/Theme/index.js +0 -30
- package/VideoOrImageCanvasBackground/index.js +0 -151
- package/colors.js +0 -14
- package/hooks/use-colors.js +0 -97
- package/hooks/use-event-callback.js +0 -10
- package/hooks/use-exclude-pattern.js +0 -24
- package/hooks/use-load-image.js +0 -26
- package/hooks/use-window-size.js +0 -46
- package/index.js +0 -3
- package/lib.js +0 -3
- package/stories.js +0 -5
- package/utils/blocks-to-article.js +0 -60
- package/utils/get-from-local-storage.js +0 -7
- package/utils/get-hotkey-help-text.js +0 -9
- package/utils/get-landmarks-with-transform.js +0 -40
- package/utils/photosToImages.js +0 -85
- package/utils/regions-groups.js +0 -28
- package/utils/regions-to-blocks.js +0 -18
- package/utils/saveable-actions-enum.js +0 -3
- package/utils/set-in-local-storage.js +0 -3
- package/utils/sleep.js +0 -7
- package/utils/uuid-to-hash.js +0 -5
- /package/{Editor → src/Editor}/annotation-plugin/annotation.css +0 -0
- /package/{Errorer → src/Errorer}/errorer.css +0 -0
- /package/{Locker → src/Locker}/locker.css +0 -0
- /package/{PageSelector → src/PageSelector}/page-selector.css +0 -0
- /package/{utils → src/utils}/next-group-id.js +0 -0
|
@@ -1,647 +0,0 @@
|
|
|
1
|
-
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
2
|
-
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Build styles
|
|
6
|
-
*/
|
|
7
|
-
import './annotation.css';
|
|
8
|
-
export function whitespaceCharactersToHTML() {
|
|
9
|
-
var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
10
|
-
return str // new line whitespace
|
|
11
|
-
.replaceAll(/[ ]\n[ ]/gm, ' <br> ') // space both sides adds
|
|
12
|
-
.replaceAll(/\n[ ]/gm, '<br> ') // space right side adds
|
|
13
|
-
.replaceAll(/[ ]\n/gm, ' <br>') // space left side adds
|
|
14
|
-
.replaceAll(/\n/gm, '<br>') // no spaces
|
|
15
|
-
// tab whitespace
|
|
16
|
-
.replaceAll(/\t/gm, ' '); // no spaces
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function HTMLToWhitespaceCharacters() {
|
|
20
|
-
var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
21
|
-
return str.replaceAll(/(( |\s){4})/gm, '\t').replaceAll(' ', ' ').replaceAll('<br>', '\n'); // new line whitespace
|
|
22
|
-
} // Possible classes
|
|
23
|
-
// ================
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
var Annotation =
|
|
27
|
-
/*#__PURE__*/
|
|
28
|
-
function () {
|
|
29
|
-
/**
|
|
30
|
-
* Render plugin`s main Element and fill it with saved data
|
|
31
|
-
*
|
|
32
|
-
* @param {{data: HeaderData, config: HeaderConfig, api: object}}
|
|
33
|
-
* data — previously saved data
|
|
34
|
-
* config - user config for Tool
|
|
35
|
-
* api - Editor.js API
|
|
36
|
-
* readOnly - read only mode flag
|
|
37
|
-
*/
|
|
38
|
-
function Annotation(_ref) {
|
|
39
|
-
var data = _ref.data,
|
|
40
|
-
config = _ref.config,
|
|
41
|
-
api = _ref.api,
|
|
42
|
-
readOnly = _ref.readOnly;
|
|
43
|
-
|
|
44
|
-
_classCallCheck(this, Annotation);
|
|
45
|
-
|
|
46
|
-
this.api = api;
|
|
47
|
-
this.readOnly = readOnly;
|
|
48
|
-
/**
|
|
49
|
-
* Styles
|
|
50
|
-
*
|
|
51
|
-
* @type {object}
|
|
52
|
-
*/
|
|
53
|
-
|
|
54
|
-
this._CSS = {
|
|
55
|
-
block: this.api.styles.block,
|
|
56
|
-
settingsButton: this.api.styles.settingsButton,
|
|
57
|
-
settingsButtonActive: this.api.styles.settingsButtonActive,
|
|
58
|
-
wrapper: 'ce-header',
|
|
59
|
-
backgroundColor: (data === null || data === void 0 ? void 0 : data.highlighted) && (data === null || data === void 0 ? void 0 : data.clsColor) ? data.clsColor : undefined
|
|
60
|
-
};
|
|
61
|
-
/**
|
|
62
|
-
* Tool's settings passed from Editor
|
|
63
|
-
*
|
|
64
|
-
* @type {HeaderConfig}
|
|
65
|
-
* @private
|
|
66
|
-
*/
|
|
67
|
-
|
|
68
|
-
this._settings = config;
|
|
69
|
-
/**
|
|
70
|
-
* Block's data
|
|
71
|
-
*
|
|
72
|
-
* @type {HeaderData}
|
|
73
|
-
* @private
|
|
74
|
-
*/
|
|
75
|
-
|
|
76
|
-
this._data = this.normalizeData(data);
|
|
77
|
-
/**
|
|
78
|
-
* List of settings buttons
|
|
79
|
-
*
|
|
80
|
-
* @type {HTMLElement[]}
|
|
81
|
-
*/
|
|
82
|
-
|
|
83
|
-
this.settingsButtons = [];
|
|
84
|
-
/**
|
|
85
|
-
* Main Block wrapper
|
|
86
|
-
*
|
|
87
|
-
* @type {HTMLElement}
|
|
88
|
-
* @private
|
|
89
|
-
*/
|
|
90
|
-
|
|
91
|
-
this._element = this.getTag();
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Normalize input data
|
|
95
|
-
*
|
|
96
|
-
* @param {HeaderData} data - saved data to process
|
|
97
|
-
*
|
|
98
|
-
* @returns {HeaderData}
|
|
99
|
-
* @private
|
|
100
|
-
*/
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
_createClass(Annotation, [{
|
|
104
|
-
key: "normalizeData",
|
|
105
|
-
value: function normalizeData(data) {
|
|
106
|
-
var newData = {};
|
|
107
|
-
|
|
108
|
-
if (typeof data !== 'object') {
|
|
109
|
-
data = {};
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
newData.text = whitespaceCharactersToHTML(data.text);
|
|
113
|
-
newData.labelName = data.labelName || this.defaultLabel.labelName;
|
|
114
|
-
return newData;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Return Tool's view
|
|
118
|
-
*
|
|
119
|
-
* @returns {HTMLHeadingElement}
|
|
120
|
-
* @public
|
|
121
|
-
*/
|
|
122
|
-
|
|
123
|
-
}, {
|
|
124
|
-
key: "render",
|
|
125
|
-
value: function render() {
|
|
126
|
-
return this._element;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Create Block's settings block
|
|
130
|
-
*
|
|
131
|
-
* @returns {HTMLElement}
|
|
132
|
-
*/
|
|
133
|
-
|
|
134
|
-
}, {
|
|
135
|
-
key: "renderSettings",
|
|
136
|
-
value: function renderSettings() {
|
|
137
|
-
var _this = this;
|
|
138
|
-
|
|
139
|
-
var holder = document.createElement('DIV'); // do not add settings button, when only one label is configured
|
|
140
|
-
|
|
141
|
-
if (this.labels.length <= 1) {
|
|
142
|
-
return holder;
|
|
143
|
-
}
|
|
144
|
-
/** Add type selectors */
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
this.labels.forEach(function (label) {
|
|
148
|
-
var selectTypeButton = document.createElement('DIV');
|
|
149
|
-
selectTypeButton.classList.add(_this._CSS.settingsButton);
|
|
150
|
-
/**
|
|
151
|
-
* Highlight current label button
|
|
152
|
-
*/
|
|
153
|
-
|
|
154
|
-
if (_this.currentLabel.labelName === label.labelName) {
|
|
155
|
-
selectTypeButton.classList.add(_this._CSS.settingsButtonActive);
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Add SVG icon
|
|
159
|
-
*/
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
selectTypeButton.innerHTML = "".concat(label.labelName);
|
|
163
|
-
/**
|
|
164
|
-
* Save label to its button
|
|
165
|
-
*/
|
|
166
|
-
|
|
167
|
-
selectTypeButton.dataset.labelName = label.labelName;
|
|
168
|
-
/**
|
|
169
|
-
* Set up click handler
|
|
170
|
-
*/
|
|
171
|
-
|
|
172
|
-
selectTypeButton.addEventListener('click', function () {
|
|
173
|
-
_this.setLabelName(label.labelName);
|
|
174
|
-
});
|
|
175
|
-
/**
|
|
176
|
-
* Append settings button to holder
|
|
177
|
-
*/
|
|
178
|
-
|
|
179
|
-
holder.appendChild(selectTypeButton);
|
|
180
|
-
/**
|
|
181
|
-
* Save settings buttons
|
|
182
|
-
*/
|
|
183
|
-
|
|
184
|
-
_this.settingsButtons.push(selectTypeButton);
|
|
185
|
-
});
|
|
186
|
-
return holder;
|
|
187
|
-
}
|
|
188
|
-
/**
|
|
189
|
-
* Callback for Block's settings buttons
|
|
190
|
-
*
|
|
191
|
-
* @param {labelName} labelName - labelName to set
|
|
192
|
-
*/
|
|
193
|
-
|
|
194
|
-
}, {
|
|
195
|
-
key: "setLabelName",
|
|
196
|
-
value: function setLabelName(labelName) {
|
|
197
|
-
var _this2 = this;
|
|
198
|
-
|
|
199
|
-
this.data = {
|
|
200
|
-
labelName: labelName,
|
|
201
|
-
text: this.data.text
|
|
202
|
-
};
|
|
203
|
-
/**
|
|
204
|
-
* Highlight button by selected labelName
|
|
205
|
-
*/
|
|
206
|
-
|
|
207
|
-
this.settingsButtons.forEach(function (button) {
|
|
208
|
-
button.classList.toggle(_this2._CSS.settingsButtonActive, button.dataset.labelName === labelName);
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Method that specified how to merge two Text blocks.
|
|
213
|
-
* Called by Editor.js by backspace at the beginning of the Block
|
|
214
|
-
*
|
|
215
|
-
* @param {HeaderData} data - saved data to merger with current block
|
|
216
|
-
* @public
|
|
217
|
-
*/
|
|
218
|
-
|
|
219
|
-
}, {
|
|
220
|
-
key: "merge",
|
|
221
|
-
value: function merge(data) {
|
|
222
|
-
var newData = {
|
|
223
|
-
text: this.data.text + data.text,
|
|
224
|
-
labelName: this.data.labelName
|
|
225
|
-
};
|
|
226
|
-
this.data = newData;
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Validate Text block data:
|
|
230
|
-
* - check for emptiness
|
|
231
|
-
*
|
|
232
|
-
* @param {HeaderData} blockData — data received after saving
|
|
233
|
-
* @returns {boolean} false if saved data is not correct, otherwise true
|
|
234
|
-
* @public
|
|
235
|
-
*/
|
|
236
|
-
|
|
237
|
-
}, {
|
|
238
|
-
key: "validate",
|
|
239
|
-
value: function validate(blockData) {
|
|
240
|
-
return blockData.text.trim() !== '';
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Extract Tool's data from the view
|
|
244
|
-
*
|
|
245
|
-
* @param {HTMLHeadingElement} toolsContent - Text tools rendered view
|
|
246
|
-
* @returns {HeaderData} - saved data
|
|
247
|
-
* @public
|
|
248
|
-
*/
|
|
249
|
-
|
|
250
|
-
}, {
|
|
251
|
-
key: "save",
|
|
252
|
-
value: function save(toolsContent) {
|
|
253
|
-
return {
|
|
254
|
-
text: HTMLToWhitespaceCharacters(toolsContent.innerHTML),
|
|
255
|
-
labelName: this.currentLabel.labelName
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Allow Header to be converted to/from other blocks
|
|
260
|
-
*/
|
|
261
|
-
|
|
262
|
-
}, {
|
|
263
|
-
key: "getTag",
|
|
264
|
-
|
|
265
|
-
/**
|
|
266
|
-
* Get tag for target label
|
|
267
|
-
* By default returns second-labelled header
|
|
268
|
-
*
|
|
269
|
-
* @returns {HTMLElement}
|
|
270
|
-
*/
|
|
271
|
-
value: function getTag() {
|
|
272
|
-
/**
|
|
273
|
-
* Create element for current Block's label
|
|
274
|
-
*/
|
|
275
|
-
var tag = document.createElement(this.currentLabel.tag);
|
|
276
|
-
|
|
277
|
-
if (this._CSS.backgroundColor) {
|
|
278
|
-
tag.style.backgroundColor = this._CSS.backgroundColor;
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Add text to block
|
|
282
|
-
*/
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
tag.innerHTML = this._data.text || '';
|
|
286
|
-
/**
|
|
287
|
-
* Add styles class
|
|
288
|
-
*/
|
|
289
|
-
|
|
290
|
-
tag.classList.add(this._CSS.wrapper);
|
|
291
|
-
/**
|
|
292
|
-
* Make tag editable
|
|
293
|
-
*/
|
|
294
|
-
|
|
295
|
-
tag.contentEditable = this.readOnly ? 'false' : 'true';
|
|
296
|
-
/**
|
|
297
|
-
* Add Placeholder
|
|
298
|
-
*/
|
|
299
|
-
|
|
300
|
-
tag.dataset.placeholder = this.api.i18n.t(this._settings.placeholder || '');
|
|
301
|
-
return tag;
|
|
302
|
-
}
|
|
303
|
-
/**
|
|
304
|
-
* Get current label
|
|
305
|
-
*
|
|
306
|
-
* @returns {label}
|
|
307
|
-
*/
|
|
308
|
-
|
|
309
|
-
}, {
|
|
310
|
-
key: "onPaste",
|
|
311
|
-
|
|
312
|
-
/**
|
|
313
|
-
* Handle H1-H6 tags on paste to substitute it with header Tool
|
|
314
|
-
*
|
|
315
|
-
* @param {PasteEvent} event - event with pasted content
|
|
316
|
-
*/
|
|
317
|
-
value: function onPaste(event) {
|
|
318
|
-
var content = event.detail.data;
|
|
319
|
-
/**
|
|
320
|
-
* Define default label value
|
|
321
|
-
*
|
|
322
|
-
* @type {labelName}
|
|
323
|
-
*/
|
|
324
|
-
|
|
325
|
-
var labelName = this.defaultLabel.labelName;
|
|
326
|
-
|
|
327
|
-
switch (content.tagName) {
|
|
328
|
-
case 'H1':
|
|
329
|
-
labelName = 1;
|
|
330
|
-
break;
|
|
331
|
-
|
|
332
|
-
case 'H2':
|
|
333
|
-
labelName = 2;
|
|
334
|
-
break;
|
|
335
|
-
|
|
336
|
-
case 'H3':
|
|
337
|
-
labelName = 3;
|
|
338
|
-
break;
|
|
339
|
-
|
|
340
|
-
case 'H4':
|
|
341
|
-
labelName = 4;
|
|
342
|
-
break;
|
|
343
|
-
|
|
344
|
-
case 'H5':
|
|
345
|
-
labelName = 5;
|
|
346
|
-
break;
|
|
347
|
-
|
|
348
|
-
case 'H6':
|
|
349
|
-
labelName = 6;
|
|
350
|
-
break;
|
|
351
|
-
} // if (this._settings.labels) {
|
|
352
|
-
// // Fallback to nearest label when specified not available
|
|
353
|
-
// label = this._settings.labels.reduce((prevLabel, currLabel) => {
|
|
354
|
-
// return Math.abs(currLabel - label) < Math.abs(prevLabel - label)
|
|
355
|
-
// ? currLabel
|
|
356
|
-
// : prevLabel;
|
|
357
|
-
// });
|
|
358
|
-
// }
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
this.data = {
|
|
362
|
-
labelName: labelName,
|
|
363
|
-
text: content.innerHTML
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
/**
|
|
367
|
-
* Used by Editor.js paste handling API.
|
|
368
|
-
* Provides configuration to handle H1-H6 tags.
|
|
369
|
-
*
|
|
370
|
-
* @returns {{handler: (function(HTMLElement): {text: string}), tags: string[]}}
|
|
371
|
-
*/
|
|
372
|
-
|
|
373
|
-
}, {
|
|
374
|
-
key: "data",
|
|
375
|
-
|
|
376
|
-
/**
|
|
377
|
-
* Get current Tools`s data
|
|
378
|
-
*
|
|
379
|
-
* @returns {HeaderData} Current data
|
|
380
|
-
* @private
|
|
381
|
-
*/
|
|
382
|
-
get: function get() {
|
|
383
|
-
this._data.text = this._element.innerHTML;
|
|
384
|
-
this._data.labelName = this.currentLabel.labelName;
|
|
385
|
-
return this._data;
|
|
386
|
-
}
|
|
387
|
-
/**
|
|
388
|
-
* Store data in plugin:
|
|
389
|
-
* - at the this._data property
|
|
390
|
-
* - at the HTML
|
|
391
|
-
*
|
|
392
|
-
* @param {HeaderData} data — data to set
|
|
393
|
-
* @private
|
|
394
|
-
*/
|
|
395
|
-
,
|
|
396
|
-
set: function set(data) {
|
|
397
|
-
this._data = this.normalizeData(data);
|
|
398
|
-
/**
|
|
399
|
-
* If labelName is set and block in DOM
|
|
400
|
-
* then replace it to a new block
|
|
401
|
-
*/
|
|
402
|
-
|
|
403
|
-
if (data.labelName !== undefined && this._element.parentNode) {
|
|
404
|
-
/**
|
|
405
|
-
* Create a new tag
|
|
406
|
-
*
|
|
407
|
-
* @type {HTMLHeadingElement}
|
|
408
|
-
*/
|
|
409
|
-
var newHeader = this.getTag();
|
|
410
|
-
/**
|
|
411
|
-
* Save Block's content
|
|
412
|
-
*/
|
|
413
|
-
|
|
414
|
-
newHeader.innerHTML = this._element.innerHTML;
|
|
415
|
-
/**
|
|
416
|
-
* Replace blocks
|
|
417
|
-
*/
|
|
418
|
-
|
|
419
|
-
this._element.parentNode.replaceChild(newHeader, this._element);
|
|
420
|
-
/**
|
|
421
|
-
* Save new block to private variable
|
|
422
|
-
*
|
|
423
|
-
* @type {HTMLHeadingElement}
|
|
424
|
-
* @private
|
|
425
|
-
*/
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
this._element = newHeader;
|
|
429
|
-
}
|
|
430
|
-
/**
|
|
431
|
-
* If data.text was passed then update block's content
|
|
432
|
-
*/
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
if (data.text !== undefined) {
|
|
436
|
-
this._element.innerHTML = this._data.text || '';
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
}, {
|
|
440
|
-
key: "currentLabel",
|
|
441
|
-
get: function get() {
|
|
442
|
-
var _this3 = this;
|
|
443
|
-
|
|
444
|
-
var label = this.labels.find(function (labelItem) {
|
|
445
|
-
return labelItem.labelName === _this3._data.labelName;
|
|
446
|
-
});
|
|
447
|
-
|
|
448
|
-
if (!label) {
|
|
449
|
-
label = this.defaultLabel;
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
return label;
|
|
453
|
-
}
|
|
454
|
-
/**
|
|
455
|
-
* Return default label
|
|
456
|
-
*
|
|
457
|
-
* @returns {label}
|
|
458
|
-
*/
|
|
459
|
-
|
|
460
|
-
}, {
|
|
461
|
-
key: "defaultLabel",
|
|
462
|
-
get: function get() {
|
|
463
|
-
var _this4 = this;
|
|
464
|
-
|
|
465
|
-
/**
|
|
466
|
-
* User can specify own default label value
|
|
467
|
-
*/
|
|
468
|
-
if (this._settings.defaultLabel) {
|
|
469
|
-
var userSpecified = this.labels.find(function (labelItem) {
|
|
470
|
-
return labelItem.labelName === _this4._settings.defaultLabel;
|
|
471
|
-
});
|
|
472
|
-
|
|
473
|
-
if (userSpecified) {
|
|
474
|
-
return userSpecified;
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
console.warn("(ง'̀-'́)ง Annotation Tool: the default label specified was not found in available labels");
|
|
478
|
-
}
|
|
479
|
-
/**
|
|
480
|
-
* With no additional options, there will be H2 by default
|
|
481
|
-
*
|
|
482
|
-
* @type {label}
|
|
483
|
-
*/
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
return this.labels[1];
|
|
487
|
-
}
|
|
488
|
-
/**
|
|
489
|
-
* @typedef {object} label
|
|
490
|
-
* @property {labelName} labelName - label labelName
|
|
491
|
-
* @property {string} tag - tag corresponds with label labelName
|
|
492
|
-
* @property {string} svg - icon
|
|
493
|
-
*/
|
|
494
|
-
|
|
495
|
-
/**
|
|
496
|
-
* Available header labels
|
|
497
|
-
*
|
|
498
|
-
* @returns {label[]}
|
|
499
|
-
*/
|
|
500
|
-
|
|
501
|
-
}, {
|
|
502
|
-
key: "labels",
|
|
503
|
-
get: function get() {
|
|
504
|
-
var _this5 = this;
|
|
505
|
-
|
|
506
|
-
var availableLabels = [{
|
|
507
|
-
labelName: 'title',
|
|
508
|
-
tag: 'h1',
|
|
509
|
-
name: 'title',
|
|
510
|
-
backgroundColor: '#ffcccc'
|
|
511
|
-
}, {
|
|
512
|
-
labelName: 'subtitle',
|
|
513
|
-
tag: 'h2',
|
|
514
|
-
name: 'subtitle',
|
|
515
|
-
backgroundColor: '#ffccff'
|
|
516
|
-
}, {
|
|
517
|
-
labelName: 'text',
|
|
518
|
-
tag: 'p',
|
|
519
|
-
name: 'text',
|
|
520
|
-
backgroundColor: '#14deef'
|
|
521
|
-
}, {
|
|
522
|
-
labelName: 'author',
|
|
523
|
-
tag: 'i',
|
|
524
|
-
name: 'author',
|
|
525
|
-
backgroundColor: '#00bb00'
|
|
526
|
-
}, {
|
|
527
|
-
labelName: 'appendix',
|
|
528
|
-
tag: 'p',
|
|
529
|
-
name: 'appendix',
|
|
530
|
-
backgroundColor: '#dcfcec'
|
|
531
|
-
}, {
|
|
532
|
-
labelName: 'photo_author',
|
|
533
|
-
tag: 'p',
|
|
534
|
-
name: 'photo_author',
|
|
535
|
-
backgroundColor: '#bb0000'
|
|
536
|
-
}, {
|
|
537
|
-
labelName: 'photo_caption',
|
|
538
|
-
tag: 'p',
|
|
539
|
-
name: 'photo_caption',
|
|
540
|
-
backgroundColor: '#ccffff'
|
|
541
|
-
}, {
|
|
542
|
-
labelName: 'advertisement',
|
|
543
|
-
tag: 'p',
|
|
544
|
-
name: 'advertisement',
|
|
545
|
-
backgroundColor: '#ffeccc'
|
|
546
|
-
}, {
|
|
547
|
-
labelName: 'other_graphics',
|
|
548
|
-
tag: 'p',
|
|
549
|
-
name: 'other_graphics',
|
|
550
|
-
backgroundColor: '#ff5400'
|
|
551
|
-
}, {
|
|
552
|
-
labelName: 'unknown',
|
|
553
|
-
tag: 's',
|
|
554
|
-
name: 'unknown',
|
|
555
|
-
backgroundColor: '#cccccc'
|
|
556
|
-
}, {
|
|
557
|
-
labelName: 'about_author',
|
|
558
|
-
tag: 'p',
|
|
559
|
-
name: 'about_author',
|
|
560
|
-
backgroundColor: '#ecffec'
|
|
561
|
-
}, {
|
|
562
|
-
labelName: 'image',
|
|
563
|
-
tag: 'p',
|
|
564
|
-
name: 'image',
|
|
565
|
-
backgroundColor: '#ffffcc'
|
|
566
|
-
}, {
|
|
567
|
-
labelName: 'interview',
|
|
568
|
-
tag: 'p',
|
|
569
|
-
name: 'interview',
|
|
570
|
-
backgroundColor: '#23b20f'
|
|
571
|
-
}, {
|
|
572
|
-
labelName: 'table',
|
|
573
|
-
tag: 'p',
|
|
574
|
-
name: 'table',
|
|
575
|
-
backgroundColor: '#0000bb'
|
|
576
|
-
}, {
|
|
577
|
-
labelName: 'section',
|
|
578
|
-
tag: 'p',
|
|
579
|
-
name: 'section',
|
|
580
|
-
backgroundColor: '#ffcccc'
|
|
581
|
-
}];
|
|
582
|
-
return this._settings.labels ? availableLabels.filter(function (l) {
|
|
583
|
-
return _this5._settings.labels.includes(l.labelName);
|
|
584
|
-
}) : availableLabels;
|
|
585
|
-
}
|
|
586
|
-
}], [{
|
|
587
|
-
key: "conversionConfig",
|
|
588
|
-
get: function get() {
|
|
589
|
-
return {
|
|
590
|
-
export: 'text',
|
|
591
|
-
// use 'text' property for other blocks
|
|
592
|
-
import: 'text' // fill 'text' property from other block's export string
|
|
593
|
-
|
|
594
|
-
};
|
|
595
|
-
}
|
|
596
|
-
/**
|
|
597
|
-
* Sanitizer Rules
|
|
598
|
-
*/
|
|
599
|
-
|
|
600
|
-
}, {
|
|
601
|
-
key: "sanitize",
|
|
602
|
-
get: function get() {
|
|
603
|
-
return {
|
|
604
|
-
labelName: false,
|
|
605
|
-
text: {}
|
|
606
|
-
};
|
|
607
|
-
}
|
|
608
|
-
/**
|
|
609
|
-
* Returns true to notify core that read-only is supported
|
|
610
|
-
*
|
|
611
|
-
* @returns {boolean}
|
|
612
|
-
*/
|
|
613
|
-
|
|
614
|
-
}, {
|
|
615
|
-
key: "isReadOnlySupported",
|
|
616
|
-
get: function get() {
|
|
617
|
-
return true;
|
|
618
|
-
}
|
|
619
|
-
}, {
|
|
620
|
-
key: "pasteConfig",
|
|
621
|
-
get: function get() {
|
|
622
|
-
return {
|
|
623
|
-
tags: ['H1', 'H2', 'H3', 'H4', 'H5', 'H6']
|
|
624
|
-
};
|
|
625
|
-
}
|
|
626
|
-
/**
|
|
627
|
-
* Get Tool toolbox settings
|
|
628
|
-
* icon - Tool icon's SVG
|
|
629
|
-
* title - title to show in toolbox
|
|
630
|
-
*
|
|
631
|
-
* @returns {{icon: string, title: string}}
|
|
632
|
-
*/
|
|
633
|
-
|
|
634
|
-
}, {
|
|
635
|
-
key: "toolbox",
|
|
636
|
-
get: function get() {
|
|
637
|
-
return {
|
|
638
|
-
icon: '<svg width="17" height="15" viewBox="0 0 336 276" xmlns="http://www.w3.org/2000/svg"><path d="M291 150V79c0-19-15-34-34-34H79c-19 0-34 15-34 34v42l67-44 81 72 56-29 42 30zm0 52l-43-30-56 30-81-67-66 39v23c0 19 15 34 34 34h178c17 0 31-13 34-29zM79 0h178c44 0 79 35 79 79v118c0 44-35 79-79 79H79c-44 0-79-35-79-79V79C0 35 35 0 79 0z"/></svg>',
|
|
639
|
-
title: 'Annotation'
|
|
640
|
-
};
|
|
641
|
-
}
|
|
642
|
-
}]);
|
|
643
|
-
|
|
644
|
-
return Annotation;
|
|
645
|
-
}();
|
|
646
|
-
|
|
647
|
-
export default Annotation;
|