diva.js 6.0.2 → 7.2.3

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 (131) hide show
  1. package/.clang-format +7 -0
  2. package/.github/workflows/npm-publish.yml +45 -0
  3. package/LICENSE +55 -0
  4. package/Makefile +75 -0
  5. package/README.md +15 -114
  6. package/elm.json +32 -0
  7. package/package.json +12 -59
  8. package/review/elm.json +52 -0
  9. package/review/src/ReviewConfig.elm +87 -0
  10. package/scripts/elm-esm.sh +40 -0
  11. package/scripts/minify-css.mjs +31 -0
  12. package/src/Filters.elm +1044 -0
  13. package/src/Main.elm +1217 -0
  14. package/src/Model.elm +213 -0
  15. package/src/Msg.elm +59 -0
  16. package/src/Utilities.elm +46 -0
  17. package/src/View/CollectionExplorer.elm +172 -0
  18. package/src/View/Helpers.elm +86 -0
  19. package/src/View/HtmlRenderer.elm +136 -0
  20. package/src/View/Icons.elm +159 -0
  21. package/src/View/ManifestInfoModal.elm +363 -0
  22. package/src/View/PageViewModal.elm +1046 -0
  23. package/src/View/Sidebar.elm +786 -0
  24. package/src/View/Toolbar.elm +189 -0
  25. package/src/View.elm +244 -0
  26. package/src/diva.ts +802 -0
  27. package/src/filters.ts +1843 -0
  28. package/src/styles/app.css +328 -0
  29. package/src/styles/collection.css +75 -0
  30. package/src/styles/modal.css +388 -0
  31. package/src/styles/sidebar.css +215 -0
  32. package/src/styles/theme.css +39 -0
  33. package/src/styles/toolbar.css +154 -0
  34. package/src/viewer-element.ts +1307 -0
  35. package/testing/index.html +52 -0
  36. package/testing/testing.html +231 -0
  37. package/tsconfig.json +12 -0
  38. package/AUTHORS +0 -22
  39. package/build/diva.css +0 -554
  40. package/build/diva.css.map +0 -1
  41. package/build/diva.js +0 -9
  42. package/build/diva.js.map +0 -1
  43. package/build/plugins/download.js +0 -2
  44. package/build/plugins/download.js.map +0 -1
  45. package/build/plugins/manipulation.js +0 -2
  46. package/build/plugins/manipulation.js.map +0 -1
  47. package/build/plugins/metadata.js +0 -2
  48. package/build/plugins/metadata.js.map +0 -1
  49. package/index.html +0 -28
  50. package/karma.conf.js +0 -87
  51. package/source/css/_mixins.scss +0 -43
  52. package/source/css/_variables.scss +0 -50
  53. package/source/css/_viewer.scss +0 -462
  54. package/source/css/diva.scss +0 -15
  55. package/source/css/plugins/_manipulation.scss +0 -228
  56. package/source/css/plugins/_metadata.scss +0 -31
  57. package/source/img/adjust.svg +0 -11
  58. package/source/img/book-view.svg +0 -6
  59. package/source/img/close.svg +0 -6
  60. package/source/img/download.svg +0 -6
  61. package/source/img/from-fullscreen.svg +0 -8
  62. package/source/img/grid-fewer.svg +0 -6
  63. package/source/img/grid-more.svg +0 -6
  64. package/source/img/grid-view.svg +0 -6
  65. package/source/img/link.svg +0 -6
  66. package/source/img/metadata.svg +0 -9
  67. package/source/img/page-view.svg +0 -6
  68. package/source/img/to-fullscreen.svg +0 -11
  69. package/source/img/zoom-in.svg +0 -6
  70. package/source/img/zoom-out.svg +0 -7
  71. package/source/js/composite-image.js +0 -174
  72. package/source/js/diva-global.js +0 -7
  73. package/source/js/diva.js +0 -1543
  74. package/source/js/document-handler.js +0 -180
  75. package/source/js/document-layout.js +0 -286
  76. package/source/js/exceptions.js +0 -26
  77. package/source/js/gesture-events.js +0 -190
  78. package/source/js/grid-handler.js +0 -122
  79. package/source/js/iiif-source-adapter.js +0 -63
  80. package/source/js/image-cache.js +0 -113
  81. package/source/js/image-manifest.js +0 -157
  82. package/source/js/image-request-handler.js +0 -76
  83. package/source/js/interpolate-animation.js +0 -122
  84. package/source/js/page-layouts/book-layout.js +0 -161
  85. package/source/js/page-layouts/grid-layout.js +0 -97
  86. package/source/js/page-layouts/index.js +0 -38
  87. package/source/js/page-layouts/page-dimensions.js +0 -9
  88. package/source/js/page-layouts/singles-layout.js +0 -27
  89. package/source/js/page-overlay-manager.js +0 -102
  90. package/source/js/page-tools-overlay.js +0 -95
  91. package/source/js/parse-iiif-manifest.js +0 -302
  92. package/source/js/plugins/_filters.js +0 -679
  93. package/source/js/plugins/download.js +0 -83
  94. package/source/js/plugins/manipulation.js +0 -837
  95. package/source/js/plugins/metadata.js +0 -190
  96. package/source/js/renderer.js +0 -584
  97. package/source/js/settings-view.js +0 -30
  98. package/source/js/tile-coverage-map.js +0 -25
  99. package/source/js/toolbar.js +0 -573
  100. package/source/js/utils/dragscroll.js +0 -106
  101. package/source/js/utils/elt.js +0 -94
  102. package/source/js/utils/events.js +0 -190
  103. package/source/js/utils/get-scrollbar-width.js +0 -29
  104. package/source/js/utils/hash-params.js +0 -86
  105. package/source/js/utils/parse-label-value.js +0 -34
  106. package/source/js/utils/vanilla.kinetic.js +0 -527
  107. package/source/js/validation-runner.js +0 -177
  108. package/source/js/viewer-core.js +0 -1514
  109. package/source/js/viewport.js +0 -143
  110. package/test/_setup.js +0 -13
  111. package/test/composite-image_test.js +0 -94
  112. package/test/diva_test.js +0 -43
  113. package/test/hash-params_test.js +0 -221
  114. package/test/image-cache_test.js +0 -106
  115. package/test/main.js +0 -6
  116. package/test/manifests/beromunsterManifest.json +0 -15514
  117. package/test/manifests/iiifv2.json +0 -11032
  118. package/test/manifests/iiifv2pages.json +0 -30437
  119. package/test/manifests/iiifv3.json +0 -10965
  120. package/test/navigation_test.js +0 -355
  121. package/test/parse-iiif-manifest_test.js +0 -68
  122. package/test/public_test.js +0 -881
  123. package/test/settings_test.js +0 -487
  124. package/test/utils/book-layout_test.js +0 -148
  125. package/test/utils/elt_test.js +0 -102
  126. package/test/utils/events_test.js +0 -245
  127. package/test/utils/hash-params_test.js +0 -79
  128. package/test/utils/parse-label-value_test.js +0 -45
  129. package/test/z_plugins_test.js +0 -180
  130. package/webpack.config.js +0 -58
  131. package/webpack.config.test.js +0 -45
@@ -1,573 +0,0 @@
1
- import diva from './diva-global';
2
- import { elt } from './utils/elt';
3
-
4
- export default class Toolbar
5
- {
6
- constructor (viewer)
7
- {
8
- this.viewer = viewer;
9
- this.settings = viewer.settings;
10
- }
11
-
12
- _elemAttrs (ident, base)
13
- {
14
- const attrs = {
15
- id: this.settings.ID + ident,
16
- class: 'diva-' + ident
17
- };
18
-
19
- if (base)
20
- return Object.assign(attrs, base);
21
- else
22
- return attrs;
23
- }
24
-
25
-
26
- /** Convenience function to subscribe to a Diva event */
27
- _subscribe (event, callback)
28
- {
29
- diva.Events.subscribe(event, callback, this.settings.ID);
30
- }
31
-
32
-
33
- createButton (name, label, callback, icon)
34
- {
35
- const button = elt('button', {
36
- type: 'button',
37
- id: this.settings.ID + name,
38
- class: 'diva-' + name + ' diva-button',
39
- title: label
40
- });
41
-
42
- if (icon)
43
- button.appendChild(icon);
44
-
45
- if (callback)
46
- button.addEventListener('click', callback);
47
-
48
- return button;
49
- }
50
-
51
- createLabel (name, id, label, innerName, innerValue)
52
- {
53
- return elt('div', { id: this.settings.ID + id, class: name + ' diva-label'},
54
- [ label, elt('span', { id: this.settings.ID + innerName }, innerValue)
55
- ]);
56
- }
57
-
58
- createZoomButtons ()
59
- {
60
- let zoomOutIcon = this._createZoomOutIcon();
61
- let zoomInIcon = this._createZoomInIcon();
62
-
63
- let zoomButtons = [
64
- this.createButton('zoom-out-button', 'Zoom Out', () => {
65
- this.viewer.setZoomLevel(this.settings.zoomLevel - 1);
66
- }, zoomOutIcon),
67
- this.createButton('zoom-in-button', 'Zoom In', () => {
68
- this.viewer.setZoomLevel(this.settings.zoomLevel + 1);
69
- }, zoomInIcon),
70
- this.createLabel('diva-zoom-label', 'zoom-label', 'Zoom level: ', 'zoom-level', this.settings.zoomLevel + 1)
71
- ];
72
-
73
- let zoomHandler = function ()
74
- {
75
- let labelEl = document.getElementById(this.settings.ID + 'zoom-level');
76
- labelEl.textContent = this.settings.zoomLevel + 1;
77
- };
78
-
79
- this._subscribe('ZoomLevelDidChange', zoomHandler);
80
- this._subscribe('ViewerDidLoad', zoomHandler);
81
-
82
- return elt('div', { id: this.settings.ID + "zoom-controls", style: "display: none"}, zoomButtons);
83
- }
84
-
85
- createGridControls ()
86
- {
87
- let gridMoreIcon = this._createGridMoreIcon();
88
- let gridFewerIcon = this._createGridFewerIcon();
89
-
90
- let gridButtons = [
91
- this.createButton('grid-out-button', 'Fewer', () => {
92
- this.viewer.setGridPagesPerRow(this.settings.pagesPerRow - 1);
93
- }, gridFewerIcon),
94
- this.createButton('grid-in-button', 'More', () => {
95
- this.viewer.setGridPagesPerRow(this.settings.pagesPerRow + 1);
96
- }, gridMoreIcon),
97
- this.createLabel('diva-grid-label', 'grid-label', 'Pages per row: ', 'pages-per-row', this.settings.pagesPerRow)
98
- ];
99
-
100
- let gridChangeHandler = function ()
101
- {
102
- let labelEl = document.getElementById(this.settings.ID + 'pages-per-row');
103
- labelEl.textContent = this.settings.pagesPerRow;
104
- };
105
-
106
- this._subscribe('GridRowNumberDidChange', gridChangeHandler);
107
-
108
- return elt('div', {id: this.settings.ID + "grid-controls", style: "display:none" }, gridButtons);
109
- }
110
-
111
- createPageLabel ()
112
- {
113
- // Current page
114
- const currentPage = elt('span', {
115
- id: this.settings.ID + 'current-page'
116
- });
117
-
118
- const updateCurrentPage = () =>
119
- {
120
- // get labels for index range
121
- let indices = this.viewer.getCurrentPageIndices();
122
- let startIndex = indices[0];
123
- let endIndex = indices[indices.length - 1];
124
- let startLabel = this.settings.manifest.pages[startIndex].l;
125
- let endLabel = this.settings.manifest.pages[endIndex].l;
126
-
127
- if (startIndex !== endIndex)
128
- {
129
- if (this.settings.enableIndexAsLabel)
130
- currentPage.textContent = startIndex + " - " + endIndex;
131
- else
132
- currentPage.textContent = startLabel + " - " + endLabel;
133
- }
134
- else
135
- {
136
- if (this.settings.enableIndexAsLabel)
137
- currentPage.textContent = startIndex;
138
- else
139
- currentPage.textContent = startLabel;
140
- }
141
- };
142
-
143
- this._subscribe('VisiblePageDidChange', updateCurrentPage);
144
- this._subscribe('ViewerDidLoad', updateCurrentPage);
145
- this._subscribe('ViewDidSwitch', updateCurrentPage);
146
-
147
- return elt('span', {
148
- class: 'diva-page-label diva-label'
149
- },
150
- currentPage
151
- );
152
- }
153
-
154
- createGotoPageForm ()
155
- {
156
- const gotoPageInput = elt('input', {
157
- id: this.settings.ID + 'goto-page-input',
158
- class: 'diva-input diva-goto-page-input',
159
- autocomplete: 'off',
160
- type: 'text'
161
- });
162
-
163
- const gotoPageSubmit = elt('input', {
164
- id: this.settings.ID + 'goto-page-submit',
165
- class: 'diva-button diva-button-text',
166
- type: 'submit',
167
- value: 'Go'
168
- });
169
-
170
- const inputSuggestions = elt('div', {
171
- id: this.settings.ID + 'input-suggestions',
172
- class: 'diva-input-suggestions'
173
- }
174
- );
175
-
176
- const gotoForm = elt('form', {
177
- id: this.settings.ID + 'goto-page',
178
- class: 'diva-goto-form'
179
- },
180
- gotoPageInput,
181
- gotoPageSubmit,
182
- inputSuggestions
183
- );
184
-
185
- gotoForm.addEventListener('submit', (e) =>
186
- {
187
- e.preventDefault();
188
-
189
- const desiredPageLabel = gotoPageInput.value;
190
-
191
- if (this.settings.onGotoSubmit && typeof this.settings.onGotoSubmit === "function")
192
- {
193
- const pageIndex = this.settings.onGotoSubmit(desiredPageLabel);
194
- if (!this.viewer.gotoPageByIndex(pageIndex))
195
- window.alert("No page could be found with that label or page number");
196
-
197
- }
198
- else // Default if no function is specified in the settings
199
- {
200
- if (!this.viewer.gotoPageByLabel(desiredPageLabel))
201
- window.alert("No page could be found with that label or page number");
202
- }
203
-
204
- // Hide the suggestions
205
- inputSuggestions.style.display = 'none';
206
-
207
- // Prevent the default action of reloading the page
208
- return false;
209
- });
210
-
211
- ['input', 'focus'].forEach(event =>
212
- {
213
- gotoPageInput.addEventListener(event, () => {
214
- inputSuggestions.innerHTML = ''; // Remove all previous suggestions
215
-
216
- const value = gotoPageInput.value;
217
- let numSuggestions = 0;
218
- if (this.settings.enableGotoSuggestions && value)
219
- {
220
- const pages = this.settings.manifest.pages;
221
- for (let i = 0, len = pages.length; i < len && numSuggestions < 10; i++)
222
- {
223
- if (pages[i].l.toLowerCase().indexOf(value.toLowerCase()) > -1)
224
- {
225
- const newInputSuggestion = elt('div', {
226
- class: 'diva-input-suggestion'
227
- },
228
- pages[i].l
229
- );
230
-
231
- inputSuggestions.appendChild(newInputSuggestion);
232
-
233
- numSuggestions++;
234
- }
235
- }
236
-
237
- // Show label suggestions
238
- if (numSuggestions > 0)
239
- inputSuggestions.style.display = 'block';
240
- }
241
- else
242
- inputSuggestions.style.display = 'none';
243
- });
244
- });
245
-
246
- gotoPageInput.addEventListener('keydown', e => {
247
- let el;
248
- if (e.keyCode === 13) // 'Enter' key
249
- {
250
- const active = document.getElementsByClassName('active')[0];
251
- if (typeof active !== 'undefined')
252
- gotoPageInput.value = active.innerText;
253
- }
254
- if (e.keyCode === 38) // Up arrow key
255
- {
256
- el = document.getElementsByClassName('active')[0];
257
- const prevEl = el ? el.previousSibling : undefined;
258
- if (typeof prevEl !== 'undefined')
259
- {
260
- el.classList.remove('active');
261
- if (prevEl !== null)
262
- prevEl.classList.add('active');
263
- }
264
- else
265
- {
266
- let last = document.getElementsByClassName('diva-input-suggestion').length - 1;
267
- document.getElementsByClassName('diva-input-suggestion')[last].classList.add('active');
268
- }
269
- }
270
- else if (e.keyCode === 40) // Down arrow key
271
- {
272
- el = document.getElementsByClassName('active')[0];
273
- const nextEl = el ? el.nextSibling : undefined;
274
- if (typeof nextEl !== 'undefined')
275
- {
276
- el.classList.remove('active');
277
- if (nextEl !== null)
278
- nextEl.classList.add('active');
279
- }
280
- else
281
- {
282
- document.getElementsByClassName('diva-input-suggestion')[0].classList.add('active');
283
- }
284
- }
285
- });
286
-
287
- onEvent(inputSuggestions, 'mousedown', '.diva-input-suggestion', function ()
288
- {
289
- gotoPageInput.value = this.textContent;
290
- inputSuggestions.style.display = 'none';
291
- let submitEvent = new Event('submit', {
292
- cancelable: true
293
- });
294
- gotoForm.dispatchEvent(submitEvent);
295
- });
296
-
297
- // javascript equivalent to jquery .on(event, selector, function)
298
- function onEvent (elem, evt, sel, handler)
299
- {
300
- elem.addEventListener(evt, function (event)
301
- {
302
- var t = event.target;
303
- while (t && t !== this)
304
- {
305
- if (t.matches(sel))
306
- handler.call(t, event);
307
- t = t.parentNode;
308
- }
309
- });
310
- }
311
-
312
- gotoPageInput.addEventListener('blur', () => {
313
- // Hide label suggestions
314
- inputSuggestions.style.display = 'none';
315
- });
316
-
317
- return gotoForm;
318
- }
319
-
320
- createViewMenu ()
321
- {
322
- const viewOptionsList = elt('div', this._elemAttrs('view-options'));
323
- const gridViewIcon = this._createGridViewIcon();
324
- const bookViewIcon = this._createBookViewIcon();
325
- const pageViewIcon = this._createPageViewIcon();
326
-
327
- const viewOptionsToggle = () =>
328
- {
329
- viewOptionsList.style.display = viewOptionsList.style.display === "none" ? "block" : "none";
330
- };
331
-
332
- const changeViewButton = this.createButton('view-icon', 'Change view', viewOptionsToggle);
333
-
334
- const selectView = (view) =>
335
- {
336
- this.viewer.changeView(view);
337
-
338
- //hide view menu
339
- viewOptionsList.style.display = "none";
340
- };
341
-
342
- const updateViewMenu = () =>
343
- {
344
- const viewIconClasses = ' diva-view-icon diva-button';
345
-
346
-
347
- // display the icon of the mode we're currently in (?)
348
- if (this.settings.inGrid)
349
- {
350
- changeViewButton.appendChild(gridViewIcon);
351
- changeViewButton.className = 'diva-grid-icon' + viewIconClasses;
352
- }
353
- else if (this.settings.inBookLayout)
354
- {
355
- changeViewButton.appendChild(bookViewIcon);
356
- changeViewButton.className = 'diva-book-icon' + viewIconClasses;
357
- }
358
- else
359
- {
360
- changeViewButton.appendChild(pageViewIcon);
361
- changeViewButton.className = 'diva-document-icon' + viewIconClasses;
362
- }
363
-
364
- const viewOptions = document.createDocumentFragment();
365
-
366
- // then display document, book, and grid buttons in that order, excluding the current view
367
- if (this.settings.inGrid || this.settings.inBookLayout)
368
- viewOptions.appendChild(this.createButton('document-icon', 'Document View', selectView.bind(null, 'document'), pageViewIcon));
369
-
370
- if (this.settings.inGrid || !this.settings.inBookLayout)
371
- viewOptions.appendChild(this.createButton('book-icon', 'Book View', selectView.bind(null, 'book'), bookViewIcon));
372
-
373
- if (!this.settings.inGrid)
374
- viewOptions.appendChild(this.createButton('grid-icon', 'Grid View', selectView.bind(null, 'grid'), gridViewIcon));
375
-
376
- // remove old menu
377
- while (viewOptionsList.firstChild)
378
- {
379
- viewOptionsList.removeChild(viewOptionsList.firstChild);
380
- }
381
-
382
- // insert new menu
383
- viewOptionsList.appendChild(viewOptions);
384
- };
385
-
386
- document.addEventListener('mouseup', event =>
387
- {
388
- if (viewOptionsList !== event.target)
389
- {
390
- viewOptionsList.style.display = 'none';
391
- }
392
- });
393
-
394
- this._subscribe('ViewDidSwitch', updateViewMenu);
395
- this._subscribe('ObjectDidLoad', updateViewMenu);
396
-
397
- return elt('div', this._elemAttrs('view-menu'),
398
- changeViewButton,
399
- viewOptionsList
400
- );
401
- }
402
-
403
- createFullscreenButton ()
404
- {
405
- let fullscreenIcon = this._createFullscreenIcon();
406
-
407
- return this.createButton('fullscreen-icon', 'Toggle fullscreen mode', () => {
408
- this.viewer.toggleFullscreenMode();
409
- }, fullscreenIcon);
410
- }
411
-
412
- toggleZoomGridControls ()
413
- {
414
- if (!this.settings.inGrid)
415
- {
416
- document.getElementById(this.settings.ID + "zoom-controls").style.display = "block";
417
- document.getElementById(this.settings.ID + "grid-controls").style.display = "none";
418
- }
419
- else
420
- {
421
- document.getElementById(this.settings.ID + "zoom-controls").style.display = "none";
422
- document.getElementById(this.settings.ID + "grid-controls").style.display = "block";
423
- }
424
-
425
- }
426
-
427
- render ()
428
- {
429
- this._subscribe("ViewDidSwitch", this.toggleZoomGridControls);
430
- this._subscribe("ObjectDidLoad", this.toggleZoomGridControls);
431
-
432
- let leftTools = [
433
- this.createZoomButtons(),
434
- this.createGridControls()
435
- ];
436
- let rightTools = [
437
- this.createPageLabel(),
438
- this.createViewMenu()
439
- ];
440
- if (this.settings.enableFullscreen)
441
- rightTools.push(this.createFullscreenButton());
442
- if (this.settings.enableGotoPage)
443
- rightTools.splice(1, 0, this.createGotoPageForm());
444
-
445
- // assign toolbar plugins to proper side
446
- let plugins = this.viewer.viewerState.pluginInstances;
447
- for (let i = 0, len = plugins.length; i < len; i++)
448
- {
449
- let plugin = plugins[i];
450
-
451
- if (!plugin.toolbarSide) // not a toolbar tool
452
- continue;
453
-
454
- plugin.toolbarIcon = plugin.createIcon();
455
- if (!plugin.toolbarIcon) // icon couldn't be created
456
- continue;
457
-
458
- // add plugin tools after the go-to-page and page-label tools
459
- if (plugin.toolbarSide === 'right')
460
- rightTools.splice(2, 0, plugin.toolbarIcon);
461
- else if (plugin.toolbarSide === 'left')
462
- leftTools.splice(2, 0, plugin.toolbarIcon);
463
-
464
- plugin.toolbarIcon.addEventListener('click', handlePluginClick.bind(this, plugin));
465
- }
466
-
467
- function handlePluginClick (plugin)
468
- {
469
- plugin.handleClick(this.viewer);
470
- }
471
-
472
- const tools = elt('div', this._elemAttrs('tools'),
473
- elt('div', this._elemAttrs('tools-left'), leftTools),
474
- elt('div', this._elemAttrs('tools-right'), rightTools)
475
- );
476
-
477
- this.settings.toolbarParentObject.insertBefore(
478
- tools,
479
- this.settings.toolbarParentObject.firstChild
480
- );
481
- }
482
-
483
- _createToolbarIcon (paths)
484
- {
485
- let icon = document.createElementNS("http://www.w3.org/2000/svg", "svg");
486
- icon.setAttributeNS(null, 'viewBox', "0 0 25 25");
487
- icon.setAttributeNS(null, 'x', '0px');
488
- icon.setAttributeNS(null, 'y', '0px');
489
- icon.setAttributeNS(null, 'style', "enable-background:new 0 0 48 48;");
490
-
491
- let glyph = document.createElementNS("http://www.w3.org/2000/svg", "g");
492
- glyph.setAttributeNS(null, "transform", "matrix(1, 0, 0, 1, -12, -12)");
493
-
494
- paths.forEach( (path) =>
495
- {
496
- let pEl = document.createElementNS("http://www.w3.org/2000/svg", "path");
497
- pEl.setAttributeNS(null, "d", path);
498
- glyph.appendChild(pEl);
499
- });
500
-
501
- icon.appendChild(glyph);
502
- return icon;
503
- }
504
-
505
- _createZoomOutIcon ()
506
- {
507
- let paths = [
508
- "M19.5,23c-0.275,0-0.5-0.225-0.5-0.5v-1c0-0.275,0.225-0.5,0.5-0.5h7c0.275,0,0.5,0.225,0.5,0.5v1c0,0.275-0.225,0.5-0.5,0.5H19.5z",
509
- "M37.219,34.257l-2.213,2.212c-0.202,0.202-0.534,0.202-0.736,0l-6.098-6.099c-1.537,0.993-3.362,1.577-5.323,1.577c-5.431,0-9.849-4.418-9.849-9.849c0-5.431,4.418-9.849,9.849-9.849c5.431,0,9.849,4.418,9.849,9.849c0,1.961-0.584,3.786-1.576,5.323l6.098,6.098C37.422,33.722,37.422,34.054,37.219,34.257z M29.568,22.099c0-3.706-3.014-6.72-6.72-6.72c-3.706,0-6.72,3.014-6.72,6.72c0,3.706,3.014,6.72,6.72,6.72C26.555,28.818,29.568,25.805,29.568,22.099z"
510
- ];
511
-
512
- return this._createToolbarIcon(paths);
513
- }
514
-
515
- _createZoomInIcon ()
516
- {
517
- let paths = [
518
- "M37.469,34.257l-2.213,2.212c-0.202,0.202-0.534,0.202-0.736,0l-6.098-6.099c-1.537,0.993-3.362,1.577-5.323,1.577c-5.431,0-9.849-4.418-9.849-9.849c0-5.431,4.418-9.849,9.849-9.849c5.431,0,9.849,4.418,9.849,9.849c0,1.961-0.584,3.786-1.576,5.323l6.098,6.098C37.672,33.722,37.672,34.054,37.469,34.257z M29.818,22.099c0-3.706-3.014-6.72-6.72-6.72c-3.706,0-6.72,3.014-6.72,6.72c0,3.706,3.014,6.72,6.72,6.72C26.805,28.818,29.818,25.805,29.818,22.099z M26.5,21H24v-2.5c0-0.275-0.225-0.5-0.5-0.5h-1c-0.275,0-0.5,0.225-0.5,0.5V21h-2.5c-0.275,0-0.5,0.225-0.5,0.5v1c0,0.275,0.225,0.5,0.5,0.5H22v2.5c0,0.275,0.225,0.5,0.5,0.5h1c0.275,0,0.5-0.225,0.5-0.5V23h2.5c0.275,0,0.5-0.225,0.5-0.5v-1C27,21.225,26.775,21,26.5,21z"
519
- ];
520
- return this._createToolbarIcon(paths);
521
- }
522
-
523
- _createGridMoreIcon ()
524
- {
525
- let paths = [
526
- "M29.5,35c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H29.5z M21.5,35c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H21.5z M13.5,35c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H13.5z M29.5,27c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H29.5z M21.5,27c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H21.5z M13.5,27c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H13.5z M29.5,19c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H29.5z M21.5,19c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H21.5z M13.5,19c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H13.5z"
527
- ];
528
- return this._createToolbarIcon(paths);
529
- }
530
-
531
- _createGridFewerIcon ()
532
- {
533
- let paths = [
534
- "M25.5,35c-0.275,0-0.5-0.225-0.5-0.5v-9c0-0.275,0.225-0.5,0.5-0.5h9c0.275,0,0.5,0.225,0.5,0.5v9c0,0.275-0.225,0.5-0.5,0.5H25.5z M22.5,35c0.275,0,0.5-0.225,0.5-0.5v-9c0-0.275-0.225-0.5-0.5-0.5h-9c-0.275,0-0.5,0.225-0.5,0.5v9c0,0.275,0.225,0.5,0.5,0.5H22.5z M34.5,23c0.275,0,0.5-0.225,0.5-0.5v-9c0-0.275-0.225-0.5-0.5-0.5h-9c-0.275,0-0.5,0.225-0.5,0.5v9c0,0.275,0.225,0.5,0.5,0.5H34.5z M22.5,23c0.275,0,0.5-0.225,0.5-0.5v-9c0-0.275-0.225-0.5-0.5-0.5h-9c-0.275,0-0.5,0.225-0.5,0.5v9c0,0.275,0.225,0.5,0.5,0.5H22.5z"
535
- ];
536
- return this._createToolbarIcon(paths);
537
- }
538
-
539
- _createGridViewIcon ()
540
- {
541
- let paths = [
542
- "M29.5,35c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H29.5z M21.5,35c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H21.5z M13.5,35c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H13.5z M29.5,27c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H29.5z M21.5,27c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H21.5z M13.5,27c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H13.5z M29.5,19c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H29.5z M21.5,19c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H21.5z M13.5,19c-0.275,0-0.5-0.225-0.5-0.5v-5c0-0.275,0.225-0.5,0.5-0.5h5c0.275,0,0.5,0.225,0.5,0.5v5c0,0.275-0.225,0.5-0.5,0.5H13.5z"
543
- ];
544
- return this._createToolbarIcon(paths);
545
- }
546
-
547
- _createBookViewIcon ()
548
- {
549
- let paths = [
550
- "M35,16.8v-1.323c0,0-2.292-1.328-5.74-1.328c-3.448,0-5.26,1.25-5.26,1.25s-1.813-1.25-5.26-1.25c-3.448,0-5.74,1.328-5.74,1.328V16.8l-1,0.531v0.021v15.687c0,0,4.531-1.578,6.999-1.578c2.468,0,5.001,0.885,5.001,0.885s2.532-0.885,5-0.885c0.306,0,0.643,0.024,1,0.066v4.325l1.531-2.016L33,35.852v-3.72c2,0.43,3,0.906,3,0.906V17.352v-0.021L35,16.8z M23,29.03c-1-0.292-2.584-0.679-3.981-0.679c-2.246,0-3.019,0.404-4.019,0.699V16.634c0,0,1.125-0.699,4.019-0.699c1.694,0,2.981,0.417,3.981,1.126V29.03z M33,29.051c-1-0.295-1.773-0.699-4.02-0.699c-1.396,0-2.981,0.387-3.98,0.679V17.06c1-0.709,2.286-1.126,3.98-1.126c2.895,0,4.02,0.699,4.02,0.699V29.051z"
551
- ];
552
- return this._createToolbarIcon(paths);
553
- }
554
-
555
- _createPageViewIcon ()
556
- {
557
- let paths = [
558
- "M29.425,29h4.47L29,33.934v-4.47C29,29.19,29.151,29,29.425,29z M34,14.563V28h-5.569C28.157,28,28,28.196,28,28.47V34H14.497C14.223,34,14,33.71,14,33.437V14.563C14,14.29,14.223,14,14.497,14h18.9C33.672,14,34,14.29,34,14.563z M25.497,26.497C25.497,26.223,25.275,26,25,26h-7c-0.275,0-0.497,0.223-0.497,0.497v1.006C17.503,27.777,17.725,28,18,28h7c0.275,0,0.497-0.223,0.497-0.497V26.497z M30.497,22.497C30.497,22.223,30.275,22,30,22H18c-0.275,0-0.497,0.223-0.497,0.497v1.006C17.503,23.777,17.725,24,18,24h12c0.275,0,0.497-0.223,0.497-0.497V22.497z M30.497,18.497C30.497,18.223,30.275,18,30,18H18c-0.275,0-0.497,0.223-0.497,0.497v1.006C17.503,19.777,17.725,20,18,20h12c0.275,0,0.497-0.223,0.497-0.497V18.497z"
559
- ];
560
-
561
- return this._createToolbarIcon(paths);
562
- }
563
-
564
- _createFullscreenIcon ()
565
- {
566
- let paths = [
567
- "M35,12H13c-0.55,0-1,0.45-1,1v22c0,0.55,0.45,1,1,1h22c0.55,0,1-0.45,1-1V13C36,12.45,35.55,12,35,12z M34,34H14V14h20V34z",
568
- "M17,21.75v-4.5c0-0.138,0.112-0.25,0.25-0.25h4.5c0.138,0,0.17,0.08,0.073,0.177l-1.616,1.616l1.823,1.823c0.097,0.097,0.097,0.256,0,0.354l-1.061,1.06c-0.097,0.097-0.256,0.097-0.354,0l-1.823-1.823l-1.616,1.616C17.08,21.92,17,21.888,17,21.75z M20.97,25.97c-0.097-0.097-0.256-0.097-0.354,0l-1.823,1.823l-1.616-1.616C17.08,26.08,17,26.112,17,26.25v4.5c0,0.138,0.112,0.25,0.25,0.25h4.5c0.138,0,0.17-0.08,0.073-0.177l-1.616-1.616l1.823-1.823c0.097-0.097,0.097-0.256,0-0.354L20.97,25.97z M30.75,17h-4.5c-0.138,0-0.17,0.08-0.073,0.177l1.616,1.616l-1.823,1.823c-0.097,0.097-0.097,0.256,0,0.354l1.061,1.06c0.097,0.097,0.256,0.097,0.354,0l1.823-1.823l1.616,1.616C30.92,21.92,31,21.888,31,21.75v-4.5C31,17.112,30.888,17,30.75,17z M30.823,26.177l-1.616,1.616l-1.823-1.823c-0.097-0.097-0.256-0.097-0.354,0l-1.061,1.06c-0.097,0.097-0.097,0.256,0,0.354l1.823,1.823l-1.616,1.616C26.08,30.92,26.112,31,26.25,31h4.5c0.138,0,0.25-0.112,0.25-0.25v-4.5C31,26.112,30.92,26.08,30.823,26.177z M26,22.5c0-0.275-0.225-0.5-0.5-0.5h-3c-0.275,0-0.5,0.225-0.5,0.5v3c0,0.275,0.225,0.5,0.5,0.5h3c0.275,0,0.5-0.225,0.5-0.5V22.5z"
569
- ];
570
-
571
- return this._createToolbarIcon(paths);
572
- }
573
- }
@@ -1,106 +0,0 @@
1
- /**
2
- * @fileoverview dragscroll - scroll area by dragging
3
- * @version 0.0.8
4
- *
5
- * @license MIT, see http://github.com/asvd/dragscroll
6
- * @copyright 2015 asvd <heliosframework@gmail.com>
7
- */
8
- (function (root, factory)
9
- {
10
- if (typeof define === 'function' && define.amd)
11
- {
12
- define(['exports'], factory);
13
- }
14
- else if (typeof exports !== 'undefined')
15
- {
16
- factory(exports);
17
- }
18
- else
19
- {
20
- factory((root.dragscroll = {}));
21
- }
22
- }(this, function (exports)
23
- {
24
- var _window = window;
25
- var _document = document;
26
- var mousemove = 'mousemove';
27
- var mouseup = 'mouseup';
28
- var mousedown = 'mousedown';
29
- var EventListener = 'EventListener';
30
- var addEventListener = 'add' + EventListener;
31
- var removeEventListener = 'remove' + EventListener;
32
- var newScrollX, newScrollY; // jshint ignore:line
33
-
34
- var dragged = [];
35
-
36
- var reset = function (i, el)
37
- {
38
- for (i = 0; i < dragged.length;)
39
- {
40
- el = dragged[i++];
41
- el = el.container || el;
42
- el[removeEventListener](mousedown, el.md, 0);
43
- _window[removeEventListener](mouseup, el.mu, 0);
44
- _window[removeEventListener](mousemove, el.mm, 0);
45
- }
46
-
47
- // suppress warning about functions in loops.
48
- /* jshint ignore:start */
49
- // cloning into array since HTMLCollection is updated dynamically
50
- dragged = [].slice.call(_document.getElementsByClassName('dragscroll'));
51
- for (i = 0; i < dragged.length;)
52
- {
53
- (function (el, lastClientX, lastClientY, pushed, scroller, cont)
54
- {
55
- (cont = el.container || el)[addEventListener](
56
- mousedown,
57
- cont.md = function (e)
58
- {
59
- if (!el.hasAttribute('nochilddrag') || _document.elementFromPoint(e.pageX, e.pageY) === cont)
60
- {
61
- pushed = 1;
62
- lastClientX = e.clientX;
63
- lastClientY = e.clientY;
64
-
65
- e.preventDefault();
66
- }
67
- }, 0
68
- );
69
-
70
- _window[addEventListener](mouseup, cont.mu = function ()
71
- {
72
- pushed = 0;
73
- }, 0);
74
-
75
- _window[addEventListener](mousemove, cont.mm = function (e)
76
- {
77
- if (pushed)
78
- {
79
- (scroller = el.scroller || el).scrollLeft -=
80
- newScrollX = (-lastClientX + (lastClientX = e.clientX));
81
- scroller.scrollTop -=
82
- newScrollY = (-lastClientY + (lastClientY = e.clientY));
83
- if (el === _document.body)
84
- {
85
- (scroller = _document.documentElement).scrollLeft -= newScrollX;
86
- scroller.scrollTop -= newScrollY;
87
- }
88
- }
89
- }, 0);
90
- })(dragged[i++]);
91
- }
92
- /* jshint ignore:end */
93
- };
94
-
95
- if (_document.readyState === 'complete')
96
- {
97
- reset();
98
- }
99
- else
100
- {
101
- _window[addEventListener]('load', reset, 0);
102
- }
103
-
104
- exports.reset = reset;
105
- window.resetDragscroll = reset;
106
- }));