@searpent/react-image-annotate 2.0.74 → 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.
Files changed (224) hide show
  1. package/.babelrc +6 -0
  2. package/.env +1 -0
  3. package/.flowconfig +2 -0
  4. package/.github/workflows/release-on-master.yml +32 -0
  5. package/.github/workflows/test.yml +16 -0
  6. package/.prettierrc +3 -0
  7. package/.releaserc.js +18 -0
  8. package/.storybook/addons.js +2 -0
  9. package/.storybook/config.js +16 -0
  10. package/LICENSE +21 -0
  11. package/package.json +1 -1
  12. package/public/favicon.ico +0 -0
  13. package/public/index.html +38 -0
  14. package/src/Annotator/bike-pic.png +0 -0
  15. package/src/Annotator/bike-pic2.png +0 -0
  16. package/src/Annotator/dab-keyframes.story.json +1 -0
  17. package/src/Annotator/exampleImages.js +48 -0
  18. package/src/Annotator/examplePhotos.js +7603 -0
  19. package/src/Annotator/index.js +380 -0
  20. package/src/Annotator/index.story.js +877 -0
  21. package/src/Annotator/poses.story.js +150 -0
  22. package/src/Annotator/reducers/combine-reducers.js +7 -0
  23. package/src/Annotator/reducers/convert-expanding-line-to-polygon.js +53 -0
  24. package/{Annotator → src/Annotator}/reducers/fix-twisted.js +5 -3
  25. package/src/Annotator/reducers/general-reducer.js +1228 -0
  26. package/src/Annotator/reducers/get-active-image.js +21 -0
  27. package/src/Annotator/reducers/get-implied-video-regions.js +115 -0
  28. package/src/Annotator/reducers/history-handler.js +60 -0
  29. package/src/Annotator/reducers/image-reducer.js +23 -0
  30. package/src/Annotator/reducers/video-reducer.js +85 -0
  31. package/src/Annotator/video.story.js +51 -0
  32. package/src/ClassSelectionMenu/index.js +112 -0
  33. package/src/Crosshairs/index.js +64 -0
  34. package/src/DebugSidebarBox/index.js +36 -0
  35. package/src/DemoSite/Editor.js +235 -0
  36. package/src/DemoSite/ErrorBoundaryDialog.js +34 -0
  37. package/src/DemoSite/index.js +41 -0
  38. package/src/DemoSite/index.story.js +10 -0
  39. package/src/DemoSite/simple-segmentation-example.json +572 -0
  40. package/{Editor → src/Editor}/annotation-plugin/annotation.css +2 -0
  41. package/src/Editor/annotation-plugin/annotation.js +536 -0
  42. package/src/Editor/index.js +50 -0
  43. package/src/Editor/readOnly.js +21 -0
  44. package/{Editor → src/Editor}/tools.js +3 -2
  45. package/src/Errorer/index.js +13 -0
  46. package/src/FullImageSegmentationAnnotator/hard1.story.jpg +0 -0
  47. package/src/FullImageSegmentationAnnotator/hard2.story.jpg +0 -0
  48. package/src/FullImageSegmentationAnnotator/hard3.story.jpg +0 -0
  49. package/src/FullImageSegmentationAnnotator/index.js +7 -0
  50. package/src/FullImageSegmentationAnnotator/index.story.js +177 -0
  51. package/src/FullImageSegmentationAnnotator/orange.story.png +0 -0
  52. package/src/GroupSelectorSidebarBox/index.js +48 -0
  53. package/src/GroupsEditorSidebarBox/index.js +108 -0
  54. package/src/HelpSidebarBox/index.js +43 -0
  55. package/src/HighlightBox/index.js +143 -0
  56. package/src/HistorySidebarBox/index.js +78 -0
  57. package/src/ImageCanvas/dancing-man.story.jpg +0 -0
  58. package/src/ImageCanvas/index.js +515 -0
  59. package/src/ImageCanvas/index.story.js +314 -0
  60. package/src/ImageCanvas/mouse_mask.story.png +0 -0
  61. package/src/ImageCanvas/region-tools.js +171 -0
  62. package/src/ImageCanvas/seves_desk.story.jpg +0 -0
  63. package/{ImageCanvas → src/ImageCanvas}/styles.js +8 -12
  64. package/src/ImageCanvas/use-mouse.js +168 -0
  65. package/src/ImageCanvas/use-project-box.js +23 -0
  66. package/src/ImageCanvas/use-wasd-mode.js +50 -0
  67. package/src/ImageMask/index.js +127 -0
  68. package/src/ImageMask/load-image.js +32 -0
  69. package/src/ImageSelectorSidebarBox/index.js +54 -0
  70. package/src/KeyframeTimeline/get-time-string.js +25 -0
  71. package/src/KeyframeTimeline/index.js +223 -0
  72. package/src/KeyframesSelectorSidebarBox/index.js +93 -0
  73. package/src/LandingPage/content.md +57 -0
  74. package/src/LandingPage/github-markdown.css +964 -0
  75. package/src/LandingPage/index.js +147 -0
  76. package/src/Locker/index.js +13 -0
  77. package/src/MainLayout/RightSidebarItemsWrapper.js +21 -0
  78. package/src/MainLayout/icon-dictionary.js +79 -0
  79. package/src/MainLayout/index.js +564 -0
  80. package/src/MainLayout/index.story.js +240 -0
  81. package/{MainLayout → src/MainLayout}/styles.js +7 -6
  82. package/src/MainLayout/types.js +171 -0
  83. package/src/MainLayout/use-implied-video-regions.js +17 -0
  84. package/src/MetadataEditorSidebarBox/index.js +160 -0
  85. package/src/PageSelector/index.js +159 -0
  86. package/src/PointDistances/index.js +90 -0
  87. package/src/PreventScrollToParents/index.js +48 -0
  88. package/src/PreventScrollToParents/index.story.js +23 -0
  89. package/src/RegionLabel/index.js +236 -0
  90. package/{RegionLabel → src/RegionLabel}/styles.js +15 -12
  91. package/src/RegionSelectAndTransformBoxes/index.js +236 -0
  92. package/src/RegionSelectorSidebarBox/index.js +220 -0
  93. package/{RegionSelectorSidebarBox → src/RegionSelectorSidebarBox}/styles.js +14 -13
  94. package/src/RegionShapes/index.js +254 -0
  95. package/src/RegionTags/index.js +136 -0
  96. package/src/SettingsDialog/index.js +58 -0
  97. package/src/SettingsProvider/index.js +57 -0
  98. package/src/Shortcuts/ShortcutField.js +44 -0
  99. package/src/Shortcuts/index.js +129 -0
  100. package/src/ShortcutsManager/index.js +162 -0
  101. package/src/Sidebar/index.js +117 -0
  102. package/src/SidebarBoxContainer/index.js +93 -0
  103. package/src/SmallToolButton/index.js +57 -0
  104. package/src/TagsSidebarBox/index.js +93 -0
  105. package/src/TaskDescriptionSidebarBox/index.js +43 -0
  106. package/src/Theme/index.js +36 -0
  107. package/src/VideoOrImageCanvasBackground/index.js +170 -0
  108. package/src/colors.js +32 -0
  109. package/src/hooks/use-colors.js +75 -0
  110. package/src/hooks/use-event-callback.js +11 -0
  111. package/src/hooks/use-exclude-pattern.js +27 -0
  112. package/src/hooks/use-load-image.js +21 -0
  113. package/src/hooks/use-window-size.js +46 -0
  114. package/{hooks → src/hooks}/xpattern.js +1 -1
  115. package/src/hooks/xpattern.png +0 -0
  116. package/src/index.js +18 -0
  117. package/src/lib.js +7 -0
  118. package/src/screenshot.png +0 -0
  119. package/src/site.css +5 -0
  120. package/src/stories.js +2 -0
  121. package/src/utils/blocks-to-article.js +61 -0
  122. package/{utils → src/utils}/blocks-to-article.test.js +8 -5
  123. package/{utils → src/utils}/default-locked-until.js +1 -2
  124. package/{utils → src/utils}/filter-only-unique.js +1 -1
  125. package/src/utils/get-from-local-storage.js +7 -0
  126. package/src/utils/get-hotkey-help-text.js +11 -0
  127. package/src/utils/get-landmarks-with-transform.js +23 -0
  128. package/src/utils/photosToImages.js +67 -0
  129. package/src/utils/regions-groups.js +19 -0
  130. package/src/utils/regions-to-blocks.js +16 -0
  131. package/src/utils/saveable-actions-enum.js +5 -0
  132. package/src/utils/set-in-local-storage.js +6 -0
  133. package/src/utils/sleep.js +3 -0
  134. package/src/utils/uuid-to-hash.js +5 -0
  135. package/Annotator/exampleImages.js +0 -41
  136. package/Annotator/examplePhotos.js +0 -6980
  137. package/Annotator/index.js +0 -417
  138. package/Annotator/reducers/combine-reducers.js +0 -14
  139. package/Annotator/reducers/convert-expanding-line-to-polygon.js +0 -73
  140. package/Annotator/reducers/general-reducer.js +0 -1430
  141. package/Annotator/reducers/get-active-image.js +0 -27
  142. package/Annotator/reducers/get-implied-video-regions.js +0 -180
  143. package/Annotator/reducers/history-handler.js +0 -38
  144. package/Annotator/reducers/image-reducer.js +0 -20
  145. package/Annotator/reducers/video-reducer.js +0 -88
  146. package/ClassSelectionMenu/index.js +0 -140
  147. package/Crosshairs/index.js +0 -53
  148. package/DebugSidebarBox/index.js +0 -20
  149. package/DemoSite/Editor.js +0 -194
  150. package/DemoSite/ErrorBoundaryDialog.js +0 -64
  151. package/DemoSite/index.js +0 -40
  152. package/Editor/annotation-plugin/annotation.js +0 -642
  153. package/Editor/index.js +0 -93
  154. package/Editor/readOnly.js +0 -68
  155. package/Errorer/index.js +0 -11
  156. package/FullImageSegmentationAnnotator/index.js +0 -7
  157. package/GroupSelectorSidebarBox/index.js +0 -63
  158. package/GroupsEditorSidebarBox/index.js +0 -138
  159. package/HelpSidebarBox/index.js +0 -58
  160. package/HighlightBox/index.js +0 -102
  161. package/HistorySidebarBox/index.js +0 -71
  162. package/ImageCanvas/index.js +0 -441
  163. package/ImageCanvas/region-tools.js +0 -165
  164. package/ImageCanvas/use-mouse.js +0 -180
  165. package/ImageCanvas/use-project-box.js +0 -27
  166. package/ImageCanvas/use-wasd-mode.js +0 -62
  167. package/ImageMask/index.js +0 -133
  168. package/ImageMask/load-image.js +0 -25
  169. package/ImageSelectorSidebarBox/index.js +0 -60
  170. package/KeyframeTimeline/get-time-string.js +0 -27
  171. package/KeyframeTimeline/index.js +0 -233
  172. package/KeyframesSelectorSidebarBox/index.js +0 -93
  173. package/LandingPage/index.js +0 -159
  174. package/Locker/index.js +0 -11
  175. package/MainLayout/RightSidebarItemsWrapper.js +0 -19
  176. package/MainLayout/icon-dictionary.js +0 -104
  177. package/MainLayout/index.js +0 -526
  178. package/MainLayout/types.js +0 -0
  179. package/MainLayout/use-implied-video-regions.js +0 -13
  180. package/MetadataEditorSidebarBox/index.js +0 -231
  181. package/PageSelector/index.js +0 -180
  182. package/PointDistances/index.js +0 -73
  183. package/PreventScrollToParents/index.js +0 -51
  184. package/RegionLabel/index.js +0 -232
  185. package/RegionSelectAndTransformBoxes/index.js +0 -169
  186. package/RegionSelectorSidebarBox/index.js +0 -254
  187. package/RegionShapes/index.js +0 -294
  188. package/RegionTags/index.js +0 -144
  189. package/SettingsDialog/index.js +0 -52
  190. package/SettingsProvider/index.js +0 -60
  191. package/Shortcuts/ShortcutField.js +0 -46
  192. package/Shortcuts/index.js +0 -133
  193. package/ShortcutsManager/index.js +0 -155
  194. package/Sidebar/index.js +0 -69
  195. package/SidebarBoxContainer/index.js +0 -93
  196. package/SmallToolButton/index.js +0 -42
  197. package/TagsSidebarBox/index.js +0 -105
  198. package/TaskDescriptionSidebarBox/index.js +0 -58
  199. package/Theme/index.js +0 -30
  200. package/VideoOrImageCanvasBackground/index.js +0 -151
  201. package/colors.js +0 -14
  202. package/hooks/use-colors.js +0 -94
  203. package/hooks/use-event-callback.js +0 -10
  204. package/hooks/use-exclude-pattern.js +0 -24
  205. package/hooks/use-load-image.js +0 -26
  206. package/hooks/use-window-size.js +0 -46
  207. package/index.js +0 -3
  208. package/lib.js +0 -3
  209. package/stories.js +0 -5
  210. package/utils/blocks-to-article.js +0 -60
  211. package/utils/get-from-local-storage.js +0 -7
  212. package/utils/get-hotkey-help-text.js +0 -9
  213. package/utils/get-landmarks-with-transform.js +0 -40
  214. package/utils/photosToImages.js +0 -85
  215. package/utils/regions-groups.js +0 -28
  216. package/utils/regions-to-blocks.js +0 -18
  217. package/utils/saveable-actions-enum.js +0 -3
  218. package/utils/set-in-local-storage.js +0 -3
  219. package/utils/sleep.js +0 -7
  220. package/utils/uuid-to-hash.js +0 -5
  221. /package/{Errorer → src/Errorer}/errorer.css +0 -0
  222. /package/{Locker → src/Locker}/locker.css +0 -0
  223. /package/{PageSelector → src/PageSelector}/page-selector.css +0 -0
  224. /package/{utils → src/utils}/next-group-id.js +0 -0
@@ -1,642 +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, '&nbsp;<br>&nbsp;') // space both sides adds &nbsp;
12
- .replaceAll(/\n[ ]/gm, '<br>&nbsp;') // space right side adds &nbsp;
13
- .replaceAll(/[ ]\n/gm, '&nbsp;<br>') // space left side adds &nbsp;
14
- .replaceAll(/\n/gm, '<br>') // no spaces
15
- // tab whitespace
16
- .replaceAll(/\t/gm, '&nbsp;&nbsp;&nbsp;&nbsp;'); // no spaces
17
- }
18
-
19
- function HTMLToWhitespaceCharacters() {
20
- var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
21
- return str.replaceAll(/((&nbsp;|\s){4})/gm, '\t').replaceAll('&nbsp;', ' ').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
- return this._settings.labels ? availableLabels.filter(function (l) {
578
- return _this5._settings.labels.includes(l.labelName);
579
- }) : availableLabels;
580
- }
581
- }], [{
582
- key: "conversionConfig",
583
- get: function get() {
584
- return {
585
- export: 'text',
586
- // use 'text' property for other blocks
587
- import: 'text' // fill 'text' property from other block's export string
588
-
589
- };
590
- }
591
- /**
592
- * Sanitizer Rules
593
- */
594
-
595
- }, {
596
- key: "sanitize",
597
- get: function get() {
598
- return {
599
- labelName: false,
600
- text: {}
601
- };
602
- }
603
- /**
604
- * Returns true to notify core that read-only is supported
605
- *
606
- * @returns {boolean}
607
- */
608
-
609
- }, {
610
- key: "isReadOnlySupported",
611
- get: function get() {
612
- return true;
613
- }
614
- }, {
615
- key: "pasteConfig",
616
- get: function get() {
617
- return {
618
- tags: ['H1', 'H2', 'H3', 'H4', 'H5', 'H6']
619
- };
620
- }
621
- /**
622
- * Get Tool toolbox settings
623
- * icon - Tool icon's SVG
624
- * title - title to show in toolbox
625
- *
626
- * @returns {{icon: string, title: string}}
627
- */
628
-
629
- }, {
630
- key: "toolbox",
631
- get: function get() {
632
- return {
633
- 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>',
634
- title: 'Annotation'
635
- };
636
- }
637
- }]);
638
-
639
- return Annotation;
640
- }();
641
-
642
- export default Annotation;