@cu-mkp/editioncrafter 1.0.2 → 1.0.4-beta.1

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 (57) hide show
  1. package/README.md +7 -7
  2. package/dist/editioncrafter.js +65802 -0
  3. package/dist/editioncrafter.umd.cjs +553 -0
  4. package/dist/es/src/action/DiplomaticActions.js +9 -11
  5. package/dist/es/src/action/DocumentActions.js +164 -154
  6. package/dist/es/src/action/GlossaryActions.js +9 -11
  7. package/dist/es/src/action/initialState/diplomaticInitialState.js +2 -2
  8. package/dist/es/src/action/initialState/documentInitialState.js +9 -12
  9. package/dist/es/src/action/initialState/glossaryInitialState.js +3 -3
  10. package/dist/es/src/action/rootReducer.js +31 -29
  11. package/dist/es/src/component/AlphabetLinks.js +44 -66
  12. package/dist/es/src/component/CustomizedTooltops.js +101 -110
  13. package/dist/es/src/component/DiploMatic.js +64 -91
  14. package/dist/es/src/component/DocumentView.js +442 -366
  15. package/dist/es/src/component/EditorComment.js +51 -75
  16. package/dist/es/src/component/ErrorBoundary.js +37 -61
  17. package/dist/es/src/component/FigureImage.js +56 -67
  18. package/dist/es/src/component/GlossaryView.js +157 -149
  19. package/dist/es/src/component/HelpPopper.js +96 -78
  20. package/dist/es/src/component/ImageGridView.js +184 -249
  21. package/dist/es/src/component/ImageView.js +155 -165
  22. package/dist/es/src/component/ImageZoomControl.js +19 -38
  23. package/dist/es/src/component/JumpToFolio.js +56 -60
  24. package/dist/es/src/component/Navigation.js +374 -328
  25. package/dist/es/src/component/Pagination.js +73 -70
  26. package/dist/es/src/component/Parser.js +11 -32
  27. package/dist/es/src/component/RingSpinner.js +31 -32
  28. package/dist/es/src/component/RouteListener.js +30 -21
  29. package/dist/es/src/component/SeaDragonComponent.js +33 -56
  30. package/dist/es/src/component/SinglePaneView.js +15 -33
  31. package/dist/es/src/component/SplitPaneView.js +151 -170
  32. package/dist/es/src/component/TranscriptionView.js +190 -179
  33. package/dist/es/src/component/Watermark.js +21 -30
  34. package/dist/es/src/component/XMLView.js +60 -82
  35. package/dist/es/src/hooks/useIsWidthUp.js +9 -7
  36. package/dist/es/src/icons/ByIcon.js +16 -16
  37. package/dist/es/src/icons/CcIcon.js +16 -16
  38. package/dist/es/src/icons/NcIcon.js +16 -16
  39. package/dist/es/src/icons/SaIcon.js +16 -16
  40. package/dist/es/src/icons/SideMenuIconLeft.js +30 -38
  41. package/dist/es/src/icons/SideMenuIconRight.js +32 -38
  42. package/dist/es/src/index.js +21 -20
  43. package/dist/es/src/lib/copyObject.js +3 -2
  44. package/dist/es/src/lib/registerServiceWorker.js +77 -54
  45. package/dist/es/src/model/DocumentHelper.js +7 -6
  46. package/dist/es/src/model/Folio.js +64 -86
  47. package/dist/es/src/model/ReduxStore.js +32 -78
  48. package/dist/es/src/model/folioLayout.js +275 -280
  49. package/dist/es/src/saga/RouteListenerSaga.js +89 -193
  50. package/dist/es/src/saga/rootSaga.js +9 -16
  51. package/dist/es/src/scss/_imageView.scss +1 -1
  52. package/dist/es/src/scss/_navigation.scss +1 -1
  53. package/dist/es/src/scss/editioncrafter.scss +1 -1
  54. package/dist/style.css +1 -0
  55. package/package.json +36 -51
  56. package/dist/editioncrafter.min.js +0 -2
  57. package/dist/editioncrafter.min.js.LICENSE.txt +0 -144
@@ -1,194 +1,184 @@
1
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == typeof h && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(typeof e + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
2
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
3
- function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
4
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
5
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
6
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
7
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
8
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
9
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
10
- /* eslint-disable react-hooks/exhaustive-deps */
11
- import OpenSeadragon from 'openseadragon';
12
- import { connect } from 'react-redux';
13
- import React, { useEffect, useState } from 'react';
14
- import { createSearchParams, useLocation, useNavigate, useSearchParams } from 'react-router-dom';
15
- import * as Annotorious from '@recogito/annotorious-openseadragon';
16
- import Navigation from './Navigation';
17
- import ImageZoomControl from './ImageZoomControl';
18
- import SeaDragonComponent from './SeaDragonComponent';
19
- import '@recogito/annotorious-openseadragon/dist/annotorious.min.css';
20
- import { BigRingSpinner } from './RingSpinner';
21
- var ImageView = function ImageView(props) {
22
- var _ref;
23
- var _useState = useState(null),
24
- _useState2 = _slicedToArray(_useState, 2),
25
- viewer = _useState2[0],
26
- setViewer = _useState2[1];
27
- var _useState3 = useState(null),
28
- _useState4 = _slicedToArray(_useState3, 2),
29
- anno = _useState4[0],
30
- setAnno = _useState4[1];
31
-
32
- // const [onZoomFixed_1, setOnZoomFixed_1] = useState(() => null);
33
- // const [onZoomFixed_2, setOnZoomFixed_2] = useState(() => null);
34
- // const [onZoomFixed_3, setOnZoomFixed_3] = useState(() => null);
35
- // const [onZoomOut, setOnZoomOut] = useState(() => null);
36
- // const [onZoomIn, setOnZoomIn] = useState(() => null);
37
-
38
- var location = useLocation();
39
- var navigate = useNavigate();
40
- var _useSearchParams = useSearchParams(),
41
- _useSearchParams2 = _slicedToArray(_useSearchParams, 1),
42
- searchParams = _useSearchParams2[0];
43
- var _useState5 = useState(false),
44
- _useState6 = _slicedToArray(_useState5, 2),
45
- loading = _useState6[0],
46
- setLoading = _useState6[1];
47
- useEffect(function () {
1
+ import Annotorious from '@recogito/annotorious-openseadragon'
2
+ import OpenSeadragon from 'openseadragon'
3
+ import React, { useEffect, useState } from 'react'
4
+ import { connect } from 'react-redux'
5
+
6
+ import {
7
+ createSearchParams,
8
+ useLocation,
9
+ useNavigate,
10
+ useSearchParams,
11
+ } from 'react-router-dom'
12
+ import ImageZoomControl from './ImageZoomControl'
13
+ import Navigation from './Navigation'
14
+ import { BigRingSpinner } from './RingSpinner'
15
+
16
+ import SeaDragonComponent from './SeaDragonComponent'
17
+ import '@recogito/annotorious-openseadragon/dist/annotorious.min.css'
18
+
19
+ function ImageView(props) {
20
+ const [viewer, setViewer] = useState(null)
21
+ const [anno, setAnno] = useState(null)
22
+
23
+ const location = useLocation()
24
+ const navigate = useNavigate()
25
+
26
+ const [searchParams] = useSearchParams()
27
+ const [loading, setLoading] = useState(false)
28
+
29
+ useEffect(() => {
48
30
  if (anno && searchParams.get('zone')) {
49
31
  // TODO: Figure out why annotations are an empty list
50
32
  // unless I wait for > 20 ms.
51
- setTimeout(function () {
52
- return anno.selectAnnotation(searchParams.get('zone'));
53
- }, 50);
33
+ setTimeout(() => anno.selectAnnotation(searchParams.get('zone')), 50)
54
34
  }
55
- }, [anno]);
56
- var onZoomGrid = function onZoomGrid(e) {
57
- props.documentViewActions.changeTranscriptionType(props.side, 'g');
58
- };
59
- var onZoomFixed_1 = function onZoomFixed_1(e) {
60
- viewer.viewport.zoomTo(viewer.viewport.getMaxZoom());
61
- };
62
- var onZoomFixed_2 = function onZoomFixed_2(e) {
63
- viewer.viewport.zoomTo(viewer.viewport.getMaxZoom() / 2);
64
- };
65
- var onZoomFixed_3 = function onZoomFixed_3(e) {
66
- viewer.viewport.fitVertically();
67
- };
68
- var onZoomIn = function onZoomIn(e) {
69
- console.log(viewer.viewport.fitVertically());
70
- viewer.viewport.zoomBy(2);
71
- };
72
- var onZoomOut = function onZoomOut(e) {
73
- viewer.viewport.zoomBy(0.5);
74
- };
75
- useEffect(function () {
35
+ }, [anno])
36
+
37
+ const onZoomGrid = (e) => {
38
+ props.documentViewActions.changeTranscriptionType(props.side, 'g')
39
+ }
40
+
41
+ const onZoomFixed_1 = (e) => {
42
+ viewer.viewport.zoomTo(viewer.viewport.getMaxZoom())
43
+ }
44
+
45
+ const onZoomFixed_2 = (e) => {
46
+ viewer.viewport.zoomTo((viewer.viewport.getMaxZoom() / 2))
47
+ }
48
+
49
+ const onZoomFixed_3 = (e) => {
50
+ viewer.viewport.fitVertically()
51
+ }
52
+
53
+ const onZoomIn = (e) => {
54
+ viewer.viewport.zoomBy(2)
55
+ }
56
+
57
+ const onZoomOut = (e) => {
58
+ viewer.viewport.zoomBy(0.5)
59
+ }
60
+
61
+ useEffect(() => {
76
62
  if (anno) {
77
63
  // Note: The `on` method does NOT overwrite any previous handlers,
78
64
  // it just adds more! Debugging this took forever. Please do not
79
65
  // remove the `off` calls because otherwise the `on` callbacks
80
66
  // will just stack up forever!
81
- anno.off('selectAnnotation');
82
- anno.off('cancelSelected');
67
+ anno.off('selectAnnotation')
68
+ anno.off('cancelSelected')
83
69
 
84
70
  // Another note for future developers: `location.pathname` is CACHED
85
71
  // when these callbacks are created. So if you create the callback,
86
72
  // changed the route, and then run the callback, it'll run with the
87
73
  // old path. So we need to watch the pathname and reset the callbacks
88
74
  // every time it changes!
89
- anno.on('selectAnnotation', function (annotation) {
90
- searchParams.set('zone', annotation.id);
91
- navigate("".concat(location.pathname, "?").concat(createSearchParams(searchParams.toString())));
92
- });
93
- anno.on('cancelSelected', function () {
94
- navigate(location.pathname);
95
- });
75
+ anno.on('selectAnnotation', (annotation) => {
76
+ searchParams.set('zone', annotation.id)
77
+ navigate(`${location.pathname}?${createSearchParams(searchParams.toString())}`)
78
+ })
79
+
80
+ anno.on('cancelSelected', () => {
81
+ navigate(location.pathname)
82
+ })
83
+ }
84
+ }, [location.pathname, anno])
85
+
86
+ const initViewer = async (el, tileSource) => {
87
+ if (!el) {
88
+ setViewer(null)
89
+ setAnno(null)
90
+ }
91
+ else {
92
+ const newViewer = OpenSeadragon({
93
+ element: el,
94
+ showNavigationControl: false,
95
+ zoomPerClick: 2,
96
+ gestureSettingsMouse: {
97
+ clickToZoom: false,
98
+ },
99
+ })
100
+
101
+ setViewer(newViewer)
102
+
103
+ const newAnno = Annotorious(newViewer, {})
104
+ newAnno.disableEditor = true
105
+ newAnno.readOnly = true
106
+
107
+ setAnno(newAnno)
108
+
109
+ newViewer.addTiledImage({
110
+ tileSource,
111
+ })
96
112
  }
97
- }, [location.pathname, anno]);
98
- var initViewer = function initViewer(_x, _x2) {
99
- return (_ref = _ref || _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(el, tileSource) {
100
- var newViewer, newAnno;
101
- return _regeneratorRuntime().wrap(function _callee$(_context) {
102
- while (1) switch (_context.prev = _context.next) {
103
- case 0:
104
- if (!el) {
105
- setViewer(null);
106
- setAnno(null);
107
- } else {
108
- newViewer = OpenSeadragon({
109
- element: el,
110
- showNavigationControl: false,
111
- zoomPerClick: 2,
112
- gestureSettingsMouse: {
113
- clickToZoom: false
114
- }
115
- });
116
- setViewer(newViewer);
117
- newAnno = Annotorious(newViewer, {});
118
- newAnno.disableEditor = true;
119
- newAnno.readOnly = true;
120
- setAnno(newAnno);
121
- newViewer.addTiledImage({
122
- tileSource: tileSource
123
- });
124
- }
125
- case 1:
126
- case "end":
127
- return _context.stop();
128
- }
129
- }, _callee);
130
- }))).apply(this, arguments);
131
- };
113
+ }
132
114
 
133
115
  // Cleanup callback to destroy the viewer on unmount
134
- useEffect(function () {
135
- return function () {
136
- if (viewer) {
137
- viewer.destroy();
138
- }
139
- // eslint-disable-next-line react-hooks/exhaustive-deps
140
- };
141
- }, []);
142
- var tileSource = props.document.folioIndex[props.folioID].tileSource;
143
- useEffect(function () {
144
- var folio = props.document.folioIndex[props.folioID];
116
+ useEffect(() => () => {
117
+ if (viewer) {
118
+ viewer.destroy()
119
+ }
120
+ }, [])
121
+
122
+ const { tileSource } = props.document.folioIndex[props.folioID]
123
+
124
+ useEffect(() => {
125
+ const folio = props.document.folioIndex[props.folioID]
145
126
  if (folio.loading) {
146
- setLoading(true);
127
+ setLoading(true)
147
128
  }
148
129
  if (folio.tileSource && viewer) {
149
- viewer.open(folio.tileSource);
130
+ viewer.open(folio.tileSource)
150
131
  if (folio.annotations && anno) {
151
- anno.setAnnotations(folio.annotations);
132
+ anno.setAnnotations(folio.annotations)
152
133
  }
153
134
  }
154
135
  if (!folio.loading) {
155
- setLoading(false);
136
+ setLoading(false)
156
137
  }
157
- }, [anno, viewer, props.folioID, props.document.folioIndex]);
158
- return /*#__PURE__*/React.createElement("div", null, tileSource ? /*#__PURE__*/React.createElement("div", {
159
- className: "image-view imageViewComponent ".concat(props.side),
160
- style: {
161
- position: "relative"
162
- }
163
- }, /*#__PURE__*/React.createElement(Navigation, {
164
- side: props.side,
165
- documentView: props.documentView,
166
- documentViewActions: props.documentViewActions,
167
- documentName: props.document.variorum && props.document.folioIndex[props.folioID].doc_id
168
- }), /*#__PURE__*/React.createElement(ImageZoomControl, {
169
- side: props.side,
170
- documentView: props.documentView,
171
- onZoomFixed_1: onZoomFixed_1,
172
- onZoomFixed_2: onZoomFixed_2,
173
- onZoomFixed_3: onZoomFixed_3,
174
- onZoomGrid: onZoomGrid,
175
- onZoomIn: onZoomIn,
176
- onZoomOut: onZoomOut,
177
- viewer: viewer
178
- }), /*#__PURE__*/React.createElement(SeaDragonComponent, {
179
- key: props.folioID,
180
- side: props.side,
181
- tileSource: tileSource,
182
- initViewer: initViewer,
183
- loading: loading
184
- })) : /*#__PURE__*/React.createElement(BigRingSpinner, {
185
- color: "dark",
186
- delay: 300
187
- }));
188
- };
138
+ }, [anno, viewer, props.folioID, props.document.folioIndex])
139
+
140
+ return (
141
+ <div>
142
+ { tileSource
143
+ ? (
144
+ <div className={`image-view imageViewComponent ${props.side}`} style={{ position: 'relative' }}>
145
+ <Navigation
146
+ side={props.side}
147
+ documentView={props.documentView}
148
+ documentViewActions={props.documentViewActions}
149
+ documentName={props.document.variorum && props.document.folioIndex[props.folioID].doc_id}
150
+ />
151
+ <ImageZoomControl
152
+ side={props.side}
153
+ documentView={props.documentView}
154
+ onZoomFixed_1={onZoomFixed_1}
155
+ onZoomFixed_2={onZoomFixed_2}
156
+ onZoomFixed_3={onZoomFixed_3}
157
+ onZoomGrid={onZoomGrid}
158
+ onZoomIn={onZoomIn}
159
+ onZoomOut={onZoomOut}
160
+ viewer={viewer}
161
+ />
162
+ <SeaDragonComponent
163
+ key={props.folioID}
164
+ side={props.side}
165
+ tileSource={tileSource}
166
+ initViewer={initViewer}
167
+ loading={loading}
168
+ />
169
+ </div>
170
+ )
171
+ : (
172
+ <BigRingSpinner color="dark" delay={300} />
173
+ )}
174
+ </div>
175
+ )
176
+ }
177
+
189
178
  function mapStateToProps(state) {
190
179
  return {
191
- document: state.document
192
- };
180
+ document: state.document,
181
+ }
193
182
  }
194
- export default connect(mapStateToProps)(ImageView);
183
+
184
+ export default connect(mapStateToProps)(ImageView)
@@ -1,38 +1,19 @@
1
- import React from 'react';
2
- var ImageZoomControl = function ImageZoomControl(props) {
3
- var in_id = "os-zoom-in ".concat(props.side);
4
- var out_id = "os-zoom-out ".concat(props.side);
5
- var onZoomGrid = props.documentView.bookMode ? null : props.onZoomGrid;
6
- return /*#__PURE__*/React.createElement("ul", {
7
- className: "ImageZoomControl"
8
- }, /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("i", {
9
- title: "Zoom In",
10
- id: in_id,
11
- onClick: props.onZoomIn,
12
- className: "zoom-in fas fa-plus-circle fa-2x"
13
- })), /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("i", {
14
- title: "Fixed Zoom 1",
15
- onClick: props.onZoomFixed_1,
16
- className: "zoom-3 fas fa-circle fa-2x"
17
- })), /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("i", {
18
- title: "Fixed Zoom 2",
19
- onClick: props.onZoomFixed_2,
20
- className: "zoom-2 fas fa-circle fa-lg"
21
- })), /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("i", {
22
- title: "Fixed Zoom 3",
23
- onClick: props.onZoomFixed_3,
24
- className: "zoom-1 fas fa-circle"
25
- })), /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement("i", {
26
- title: "Zoom Out",
27
- id: out_id,
28
- onClick: props.onZoomOut,
29
- className: "zoom-out fas fa-minus-circle fa-2x"
30
- })), /*#__PURE__*/React.createElement("li", {
31
- className: props.documentView.bookMode ? 'disabled' : ''
32
- }, /*#__PURE__*/React.createElement("i", {
33
- title: "Return to grid mode (not available in book mode)",
34
- onClick: onZoomGrid,
35
- className: "zoom-grid fas fa-th fa-2x"
36
- })));
37
- };
38
- export default ImageZoomControl;
1
+ import React from 'react'
2
+
3
+ function ImageZoomControl(props) {
4
+ const in_id = `os-zoom-in ${props.side}`
5
+ const out_id = `os-zoom-out ${props.side}`
6
+ const onZoomGrid = (props.documentView.bookMode ? null : props.onZoomGrid)
7
+ return (
8
+ <ul className="ImageZoomControl">
9
+ <li><i title="Zoom In" id={in_id} onClick={props.onZoomIn} className="zoom-in fas fa-plus-circle fa-2x" /></li>
10
+ <li><i title="Fixed Zoom 1" onClick={props.onZoomFixed_1} className="zoom-3 fas fa-circle fa-2x" /></li>
11
+ <li><i title="Fixed Zoom 2" onClick={props.onZoomFixed_2} className="zoom-2 fas fa-circle fa-lg" /></li>
12
+ <li><i title="Fixed Zoom 3" onClick={props.onZoomFixed_3} className="zoom-1 fas fa-circle" /></li>
13
+ <li><i title="Zoom Out" id={out_id} onClick={props.onZoomOut} className="zoom-out fas fa-minus-circle fa-2x" /></li>
14
+ <li className={props.documentView.bookMode ? 'disabled' : ''}><i title="Return to grid mode (not available in book mode)" onClick={onZoomGrid} className="zoom-grid fas fa-th fa-2x" /></li>
15
+ </ul>
16
+ )
17
+ }
18
+
19
+ export default ImageZoomControl
@@ -1,69 +1,65 @@
1
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
- import { Popover } from '@material-ui/core';
8
- import React, { useEffect, useState, useRef } from 'react';
9
- var JumpToFolio = function JumpToFolio(props) {
10
- var _useState = useState(''),
11
- _useState2 = _slicedToArray(_useState, 2),
12
- textInput = _useState2[0],
13
- setTextInput = _useState2[1];
14
- var open = Boolean(props.anchorEl);
15
- var id = open ? "".concat(props.side, "_jumpInput") : undefined;
16
- var handleSubmit = function handleSubmit(event) {
1
+ import { Popover } from '@material-ui/core'
2
+ import React, { useEffect, useRef, useState } from 'react'
3
+
4
+ function JumpToFolio(props) {
5
+ const [textInput, setTextInput] = useState('')
6
+
7
+ const open = Boolean(props.anchorEl)
8
+ const id = open ? `${props.side}_jumpInput` : undefined
9
+
10
+ const handleSubmit = (event) => {
17
11
  // Consume the event
18
- event.preventDefault();
12
+ event.preventDefault()
19
13
 
20
14
  // Parse out the target
21
- var data = new FormData(event.target);
22
- var folioID = data.get('folioID');
15
+ const data = new FormData(event.target)
16
+ const folioID = data.get('folioID')
23
17
 
24
18
  // Submit the request
25
- props.submitHandler(folioID, props.side);
19
+ props.submitHandler(folioID, props.side)
26
20
 
27
21
  // Hide and clear
28
- props.blurHandler();
29
- setTextInput('');
30
- };
31
- var handleChange = function handleChange(event) {
32
- setTextInput(event.target.value);
33
- };
34
- var inputRef = useRef(null);
35
- useEffect(function () {
22
+ props.blurHandler()
23
+ setTextInput('')
24
+ }
25
+
26
+ const handleChange = (event) => {
27
+ setTextInput(event.target.value)
28
+ }
29
+
30
+ const inputRef = useRef(null)
31
+
32
+ useEffect(() => {
36
33
  if (inputRef.current) {
37
- inputRef.current.focus();
38
- }
39
- }, [inputRef, open]);
40
- var divStyle = {
41
- position: 'fixed',
42
- zIndex: 1,
43
- top: props.positionY,
44
- left: props.positionX,
45
- display: open ? 'inline' : 'none'
46
- };
47
- return /*#__PURE__*/React.createElement(Popover, {
48
- id: id,
49
- open: open,
50
- anchorEl: props.anchorEl,
51
- onClose: props.blurHandler,
52
- anchorOrigin: {
53
- vertical: 'bottom',
54
- horizontal: 'right'
34
+ inputRef.current.focus()
55
35
  }
56
- }, /*#__PURE__*/React.createElement("form", {
57
- onSubmit: handleSubmit
58
- }, /*#__PURE__*/React.createElement("input", {
59
- id: id,
60
- name: "folioID",
61
- onBlur: props.blurHandler,
62
- onChange: handleChange,
63
- placeholder: "Page Name (e.g. '3r')",
64
- ref: inputRef,
65
- type: "text",
66
- value: textInput
67
- })));
68
- };
69
- export default JumpToFolio;
36
+ }, [inputRef, open])
37
+
38
+ return (
39
+ <Popover
40
+ id={id}
41
+ open={open}
42
+ anchorEl={props.anchorEl}
43
+ onClose={props.blurHandler}
44
+ anchorOrigin={{
45
+ vertical: 'bottom',
46
+ horizontal: 'right',
47
+ }}
48
+ >
49
+ <form onSubmit={handleSubmit}>
50
+ <input
51
+ id={id}
52
+ name="folioID"
53
+ onBlur={props.blurHandler}
54
+ onChange={handleChange}
55
+ placeholder="Page Name (e.g. '3r')"
56
+ ref={inputRef}
57
+ type="text"
58
+ value={textInput}
59
+ />
60
+ </form>
61
+ </Popover>
62
+ )
63
+ }
64
+
65
+ export default JumpToFolio