From f05059061d0296274d655454325cf980fcf56f7b Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Mon, 18 Jan 2021 11:54:42 +0100 Subject: [PATCH 01/35] Fix translations --- src/components/SearchPanel.js | 1 + src/locales/de/translation.json | 5 +++-- src/locales/en/translation.json | 5 +++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/SearchPanel.js b/src/components/SearchPanel.js index c3430660be..a5a56c9287 100644 --- a/src/components/SearchPanel.js +++ b/src/components/SearchPanel.js @@ -39,6 +39,7 @@ export class SearchPanel extends Component { { query && query !== '' && ( Date: Mon, 8 Feb 2021 10:31:05 +0100 Subject: [PATCH 02/35] Change h6 to div --- src/components/SearchHit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/SearchHit.js b/src/components/SearchHit.js index f27228fe15..24e19a6bec 100644 --- a/src/components/SearchHit.js +++ b/src/components/SearchHit.js @@ -115,7 +115,7 @@ export class SearchHit extends Component { selected={selected} > - + {canvasLabel} From 5b80716f1beaa28a9fc3c39306dc1aa402c86833 Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Wed, 10 Feb 2021 13:35:19 +0100 Subject: [PATCH 03/35] Fix translations --- src/components/WindowTopBar.js | 7 +++++-- src/containers/WindowTopBar.js | 3 ++- src/locales/de/translation.json | 4 +++- src/locales/en/translation.json | 4 +++- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/components/WindowTopBar.js b/src/components/WindowTopBar.js index 6bb4cbd62a..ac904c3374 100644 --- a/src/components/WindowTopBar.js +++ b/src/components/WindowTopBar.js @@ -27,7 +27,7 @@ export class WindowTopBar extends Component { const { removeWindow, windowId, classes, toggleWindowSideBar, t, windowDraggable, maximizeWindow, maximized, minimizeWindow, focused, allowClose, allowMaximize, - focusWindow, allowFullscreen, allowTopMenuButton, allowWindowSideBar, + focusWindow, allowFullscreen, allowTopMenuButton, allowWindowSideBar, sideBarOpen, } = this.props; return ( @@ -46,7 +46,8 @@ export class WindowTopBar extends Component { > {allowWindowSideBar && ( @@ -101,6 +102,7 @@ WindowTopBar.propTypes = { maximizeWindow: PropTypes.func, minimizeWindow: PropTypes.func, removeWindow: PropTypes.func.isRequired, + sideBarOpen: PropTypes.bool, t: PropTypes.func, toggleWindowSideBar: PropTypes.func.isRequired, windowDraggable: PropTypes.bool, @@ -118,6 +120,7 @@ WindowTopBar.defaultProps = { maximized: false, maximizeWindow: () => {}, minimizeWindow: () => {}, + sideBarOpen: false, t: key => key, windowDraggable: true, }; diff --git a/src/containers/WindowTopBar.js b/src/containers/WindowTopBar.js index 82148be2f4..1fee8d051f 100644 --- a/src/containers/WindowTopBar.js +++ b/src/containers/WindowTopBar.js @@ -4,7 +4,7 @@ import { withTranslation } from 'react-i18next'; import { withStyles } from '@material-ui/core'; import { withPlugins } from '../extend/withPlugins'; import * as actions from '../state/actions'; -import { getWindowConfig, isFocused } from '../state/selectors'; +import { getWindow, getWindowConfig, isFocused } from '../state/selectors'; import { WindowTopBar } from '../components/WindowTopBar'; /** mapStateToProps */ @@ -19,6 +19,7 @@ const mapStateToProps = (state, { windowId }) => { allowWindowSideBar: config.allowWindowSideBar, focused: isFocused(state, { windowId }), maximized: config.maximized, + sideBarOpen: (getWindow(state, { windowId }) || {}).sideBarOpen, }; }; diff --git a/src/locales/de/translation.json b/src/locales/de/translation.json index 3b3f145f32..9e2c88530f 100644 --- a/src/locales/de/translation.json +++ b/src/locales/de/translation.json @@ -55,6 +55,7 @@ "fetchManifest": "Hinzufügen", "fullScreen": "Vollbild", "gallery": "Galerie", + "hideWindowSideBar": "Seitenleiste ausblenden", "hideZoomControls": "Zoomsteuerung verbergen", "iiif_homepage": "Über diese Ressource", "iiif_manifest": "IIIF-Manifest", @@ -120,6 +121,7 @@ "searchTitle": "Suche", "selectWorkspaceMenu": "Wählen Sie einen Arbeitsflächentyp", "showingNumAnnotations": "{{number}} Annotationen werden angezeigt", + "showWindowSideBar": "Seitenleiste einblenden", "showZoomControls": "Zoomsteuerung anzeigen", "sidebarPanelsNavigation": "Hilfsfensternavigation", "single": "Einzeln", @@ -130,7 +132,7 @@ "thumbnailList": "Miniaturansicht", "thumbnailNavigation": "Miniaturansicht", "thumbnails": "Miniaturansicht", - "toggleWindowSideBar": "Seitenleiste ein-/ausblenden", + "toggleWindowSideBar": "Seitenleiste umschalten", "tryAgain": "Wiederholen", "untitled": "[Unbenannt]", "view": "Ansicht", diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index b589df0bca..01c41eac55 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -57,6 +57,7 @@ "fetchManifest": "Add", "fullScreen": "Full Screen", "gallery": "Gallery", + "hideWindowSideBar": "Hide sidebar", "hideZoomControls": "Hide zoom controls", "iiif_homepage": "About this resource", "iiif_manifest": "IIIF manifest", @@ -124,6 +125,7 @@ "selectWorkspaceMenu": "Select workspace type", "showingNumAnnotations": "Showing {{number}} annotations", "showCollection": "Show collection", + "showWindowSideBar": "Show sidebar", "showZoomControls": "Show zoom controls", "sidebarPanelsNavigation": "Sidebar panels navigation", "single": "Single", @@ -134,7 +136,7 @@ "thumbnailList": "Thumbnail list", "thumbnailNavigation": "Thumbnails", "thumbnails": "Thumbnails", - "toggleWindowSideBar": "Show / hide sidebar", + "toggleWindowSideBar": "Toggle sidebar", "totalCollections": "{{count}} collections", "totalManifests": "{{count}} manifests", "tryAgain": "Try again", From 276db0ebbbd6cf46d0848b46d0b322b40dda8154 Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Wed, 10 Feb 2021 14:37:30 +0100 Subject: [PATCH 04/35] Add more aria attributes --- src/components/WindowTopBar.js | 1 + src/components/WindowTopBarPluginMenu.js | 1 + src/components/WindowTopMenuButton.js | 1 + 3 files changed, 3 insertions(+) diff --git a/src/components/WindowTopBar.js b/src/components/WindowTopBar.js index ac904c3374..9c9d4c559f 100644 --- a/src/components/WindowTopBar.js +++ b/src/components/WindowTopBar.js @@ -47,6 +47,7 @@ export class WindowTopBar extends Component { {allowWindowSideBar && ( diff --git a/src/components/WindowTopBarPluginMenu.js b/src/components/WindowTopBarPluginMenu.js index b3e6e4b3c0..fd736b5b6e 100644 --- a/src/components/WindowTopBarPluginMenu.js +++ b/src/components/WindowTopBarPluginMenu.js @@ -54,6 +54,7 @@ export class WindowTopBarPluginMenu extends Component { return ( <> Date: Thu, 11 Feb 2021 11:29:17 +0100 Subject: [PATCH 05/35] Fix integration tests --- __tests__/integration/mirador/annotations.test.js | 2 +- __tests__/integration/mirador/sequence_switching.test.js | 4 ++-- __tests__/integration/mirador/window_sidebar.test.js | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/__tests__/integration/mirador/annotations.test.js b/__tests__/integration/mirador/annotations.test.js index f8135a6fbd..63665e71fb 100644 --- a/__tests__/integration/mirador/annotations.test.js +++ b/__tests__/integration/mirador/annotations.test.js @@ -21,7 +21,7 @@ describe('Annotations in Mirador', () => { .find(w => w.manifestId === 'https://iiif.harvardartmuseums.org/manifests/object/299843').id; }); - await expect(page).toClick(`#${windowId} button[aria-label="Toggle sidebar"]`); + await expect(page).toClick(`#${windowId} button[aria-label="Show sidebar"]`); await expect(page).toClick(`#${windowId} button[aria-label="Annotations"]`); await expect(page).toMatchElement(`#${windowId} h3`, { text: 'Annotations' }); diff --git a/__tests__/integration/mirador/sequence_switching.test.js b/__tests__/integration/mirador/sequence_switching.test.js index 1fdb850bc8..b3830a9b0d 100644 --- a/__tests__/integration/mirador/sequence_switching.test.js +++ b/__tests__/integration/mirador/sequence_switching.test.js @@ -22,8 +22,8 @@ describe('Window Sidebar Sequence Dropdown', () => { .find(window => window.manifestId === 'http://localhost:4488/__tests__/fixtures/version-2/multipleSequences.json') .id; - await expect(page).toMatchElement(`#${windowId} button[aria-label="Toggle sidebar"]`); - await expect(page).toClick(`#${windowId} button[aria-label="Toggle sidebar"]`); + await expect(page).toMatchElement(`#${windowId} button[aria-label="Show sidebar"]`); + await expect(page).toClick(`#${windowId} button[aria-label="Show sidebar"]`); await expect(page).toMatchElement(`#${windowId} button[aria-label="Index"]`); await expect(page).toClick(`#${windowId} button[aria-label="Index"]`); diff --git a/__tests__/integration/mirador/window_sidebar.test.js b/__tests__/integration/mirador/window_sidebar.test.js index 1774fe68cd..7c6b21d6ab 100644 --- a/__tests__/integration/mirador/window_sidebar.test.js +++ b/__tests__/integration/mirador/window_sidebar.test.js @@ -27,8 +27,8 @@ describe('Window Sidebars', () => { .find(window => window.manifestId === 'http://localhost:4488/__tests__/fixtures/version-2/001.json') .id; - await expect(page).toMatchElement(`#${windowId} button[aria-label="Toggle sidebar"]`); - await expect(page).toClick(`#${windowId} button[aria-label="Toggle sidebar"]`); + await expect(page).toMatchElement(`#${windowId} button[aria-label="Show sidebar"]`); + await expect(page).toClick(`#${windowId} button[aria-label="Show sidebar"]`); await expect(page).toMatchElement(`#${windowId} button[aria-label="Information"]`); }); @@ -42,8 +42,8 @@ describe('Window Sidebars', () => { .find(window => window.manifestId === 'http://localhost:4488/__tests__/fixtures/version-2/001.json') .id; - await expect(page).toMatchElement(`#${windowId} button[aria-label="Toggle sidebar"]`); - await expect(page).toClick(`#${windowId} button[aria-label="Toggle sidebar"]`); + await expect(page).toMatchElement(`#${windowId} button[aria-label="Show sidebar"]`); + await expect(page).toClick(`#${windowId} button[aria-label="Show sidebar"]`); await expect(page).toMatchElement(`#${windowId} button[aria-label="Index"]`); }); From 260ec19130bda0141f6253951b01d1031db12aac Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Mon, 22 Feb 2021 08:52:49 +0100 Subject: [PATCH 06/35] Change package name --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 525c624a61..baa01dd1c4 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "mirador", + "name": "@mdz/mirador", "version": "3.0.0", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/mirador.min.js", From 7cf4e68117918f04d590a051e2a057e84556ae2d Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Mon, 22 Feb 2021 08:53:51 +0100 Subject: [PATCH 07/35] Bump version to 3.0.0-mdz.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index baa01dd1c4..5b407c73b4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdz/mirador", - "version": "3.0.0", + "version": "3.0.0-mdz.1", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/mirador.min.js", "module": "dist/es/src/index.js", From c5624b94e1fb6c611ac0dbc0125574a299dcbee0 Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Tue, 23 Feb 2021 10:55:35 +0100 Subject: [PATCH 08/35] Fix aria-label syntax --- src/components/SearchPanel.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/SearchPanel.js b/src/components/SearchPanel.js index a5a56c9287..3b70bb5d27 100644 --- a/src/components/SearchPanel.js +++ b/src/components/SearchPanel.js @@ -39,7 +39,7 @@ export class SearchPanel extends Component { { query && query !== '' && ( Date: Tue, 23 Feb 2021 10:56:19 +0100 Subject: [PATCH 09/35] Bump version to 3.0.0-mdz.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5b407c73b4..f0f1c28960 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdz/mirador", - "version": "3.0.0-mdz.1", + "version": "3.0.0-mdz.2", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/mirador.min.js", "module": "dist/es/src/index.js", From 0900c0622c1e85c4ea4e866a56606baac8cd3ee2 Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Thu, 25 Feb 2021 09:47:12 +0100 Subject: [PATCH 10/35] Add extended translation --- src/locales/de/translation.json | 2 +- src/locales/en/translation.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/de/translation.json b/src/locales/de/translation.json index 9e2c88530f..223eb72d3f 100644 --- a/src/locales/de/translation.json +++ b/src/locales/de/translation.json @@ -84,7 +84,7 @@ "minimizeWindow": "Fenster minimieren", "mirador": "Mirador", "miradorResources": "Mirador-Ressourcen", - "miradorViewer": "Mirador", + "miradorViewer": "Mirador Viewer", "more": "mehr...", "moreResults": "Mehr Treffer", "mosaic": "Mosaik", diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 01c41eac55..a9db4fc6a2 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -86,7 +86,7 @@ "minimizeWindow": "Minimize window", "mirador": "Mirador", "miradorResources": "Mirador resources", - "miradorViewer": "Mirador viewer", + "miradorViewer": "Mirador Viewer", "more": "more...", "moreResults": "More results", "mosaic": "Mosaic", From d4f703c8420b524b8460143484da2e537e9a8a4e Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Thu, 25 Feb 2021 09:48:07 +0100 Subject: [PATCH 11/35] Bump version to 3.0.0-mdz.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f0f1c28960..e2a9cfc895 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdz/mirador", - "version": "3.0.0-mdz.2", + "version": "3.0.0-mdz.3", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/mirador.min.js", "module": "dist/es/src/index.js", From a3abc95d9f24c756f1420ca5c300afe184e3947a Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Thu, 25 Feb 2021 19:13:00 +0100 Subject: [PATCH 12/35] 3.0.0-mdz.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e2a9cfc895..a1cd676c06 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdz/mirador", - "version": "3.0.0-mdz.3", + "version": "3.0.0-mdz.4", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/mirador.min.js", "module": "dist/es/src/index.js", From 52081628ac36cfaa7abc0c71614dcbf121a80953 Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Fri, 26 Feb 2021 09:28:13 +0100 Subject: [PATCH 13/35] Better variable name --- src/components/SearchPanelNavigation.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/SearchPanelNavigation.js b/src/components/SearchPanelNavigation.js index 59f9eb65b7..277ece51c0 100644 --- a/src/components/SearchPanelNavigation.js +++ b/src/components/SearchPanelNavigation.js @@ -49,9 +49,9 @@ export class SearchPanelNavigation extends Component { const currentHitIndex = searchHits .findIndex(val => val.annotations.includes(selectedContentSearchAnnotation[0])); - let lengthText = searchHits.length; + let totalLengthText = searchHits.length; if (searchHits.length < numTotal) { - lengthText += '+'; + totalLengthText += '+'; } return ( <> @@ -65,7 +65,7 @@ export class SearchPanelNavigation extends Component { - {t('pagination', { current: currentHitIndex + 1, total: lengthText })} + {t('pagination', { current: currentHitIndex + 1, total: totalLengthText })} Date: Fri, 26 Feb 2021 14:37:20 +0100 Subject: [PATCH 14/35] 3.0.0-mdz.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a1cd676c06..4a34b7dc10 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdz/mirador", - "version": "3.0.0-mdz.4", + "version": "3.0.0-mdz.5", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/mirador.min.js", "module": "dist/es/src/index.js", From 6235322f9a9ba58416b63c6e86cdb7330f79846b Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Tue, 2 Mar 2021 14:58:46 +0100 Subject: [PATCH 15/35] Add status role --- src/components/SearchPanelNavigation.js | 2 +- src/components/ViewerInfo.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/SearchPanelNavigation.js b/src/components/SearchPanelNavigation.js index 277ece51c0..caa2752421 100644 --- a/src/components/SearchPanelNavigation.js +++ b/src/components/SearchPanelNavigation.js @@ -64,7 +64,7 @@ export class SearchPanelNavigation extends Component { > - + {t('pagination', { current: currentHitIndex + 1, total: totalLengthText })} - + { t('pagination', { current: canvasIndex + 1, total: canvasCount }) } - + {canvasLabel && ` • ${canvasLabel}`} From 4a49194979d0e95957b579310e89d78310293876 Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Tue, 2 Mar 2021 15:00:50 +0100 Subject: [PATCH 16/35] Bump version to 3.0.0-mdz.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4a34b7dc10..91af493a13 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdz/mirador", - "version": "3.0.0-mdz.5", + "version": "3.0.0-mdz.6", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/mirador.min.js", "module": "dist/es/src/index.js", From 61b8e2b287a4c3925a700f570890c8d3987e620f Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Fri, 24 Sep 2021 15:43:23 +0200 Subject: [PATCH 17/35] Add switch for shifting book view --- src/components/WindowViewSettings.js | 25 +++++++++++++++++++++---- src/containers/WindowViewSettings.js | 8 ++++++-- src/lib/CanvasGroupings.js | 22 ++++++++++++---------- src/locales/de/translation.json | 1 + src/locales/en/translation.json | 1 + src/locales/fr/translation.json | 1 + src/state/actions/action-types.js | 2 ++ src/state/actions/window.js | 8 ++++++++ src/state/reducers/viewers.js | 1 + src/state/reducers/windows.js | 8 ++++++++ src/state/sagas/windows.js | 8 +++++++- src/state/selectors/canvases.js | 6 ++++-- 12 files changed, 72 insertions(+), 19 deletions(-) diff --git a/src/components/WindowViewSettings.js b/src/components/WindowViewSettings.js index 547656f061..4088ff99e0 100644 --- a/src/components/WindowViewSettings.js +++ b/src/components/WindowViewSettings.js @@ -2,6 +2,7 @@ import React, { Component } from 'react'; import FormControlLabel from '@material-ui/core/FormControlLabel'; import MenuItem from '@material-ui/core/MenuItem'; import ListSubheader from '@material-ui/core/ListSubheader'; +import Switch from '@material-ui/core/Switch'; import SingleIcon from '@material-ui/icons/CropOriginalSharp'; import ScrollViewIcon from '@material-ui/icons/ViewColumn'; import PropTypes from 'prop-types'; @@ -24,9 +25,9 @@ export class WindowViewSettings extends Component { * @private */ handleChange(value) { - const { windowId, setWindowViewType } = this.props; + const { setWindowViewType } = this.props; - setWindowViewType(windowId, value); + setWindowViewType(value); } /** @@ -36,7 +37,7 @@ export class WindowViewSettings extends Component { */ render() { const { - classes, handleClose, t, windowViewType, viewTypes, + classes, setShiftBookView, handleClose, shiftBookView, t, windowViewType, viewTypes, } = this.props; const iconMap = { @@ -70,6 +71,19 @@ export class WindowViewSettings extends Component { <> {t('view')} { viewTypes.map(value => menuItem({ Icon: iconMap[value], value })) } + {windowViewType === 'book' && ( + + setShiftBookView(!shiftBookView)} + /> + )} + /> + + )} ); } @@ -78,14 +92,17 @@ export class WindowViewSettings extends Component { WindowViewSettings.propTypes = { classes: PropTypes.objectOf(PropTypes.string).isRequired, handleClose: PropTypes.func, + setShiftBookView: PropTypes.func, setWindowViewType: PropTypes.func.isRequired, + shiftBookView: PropTypes.bool, t: PropTypes.func, viewTypes: PropTypes.arrayOf(PropTypes.string), - windowId: PropTypes.string.isRequired, windowViewType: PropTypes.string.isRequired, }; WindowViewSettings.defaultProps = { handleClose: () => {}, + setShiftBookView: () => {}, + shiftBookView: false, t: key => key, viewTypes: [], }; diff --git a/src/containers/WindowViewSettings.js b/src/containers/WindowViewSettings.js index 6fc417f284..9c95a6e043 100644 --- a/src/containers/WindowViewSettings.js +++ b/src/containers/WindowViewSettings.js @@ -4,7 +4,7 @@ import { withTranslation } from 'react-i18next'; import { withStyles } from '@material-ui/core/styles'; import { withPlugins } from '../extend/withPlugins'; import * as actions from '../state/actions'; -import { getAllowedWindowViewTypes, getWindowViewType } from '../state/selectors'; +import { getAllowedWindowViewTypes, getWindowConfig, getWindowViewType } from '../state/selectors'; import { WindowViewSettings } from '../components/WindowViewSettings'; /** @@ -12,7 +12,10 @@ import { WindowViewSettings } from '../components/WindowViewSettings'; * @memberof ManifestListItem * @private */ -const mapDispatchToProps = { setWindowViewType: actions.setWindowViewType }; +const mapDispatchToProps = (dispatch, { windowId }) => ({ + setShiftBookView: (doShift) => dispatch(actions.shiftBookView(windowId, doShift)), + setWindowViewType: (viewType) => dispatch(actions.setWindowViewType(windowId, viewType)), +}); /** * mapStateToProps - to hook up connect @@ -23,6 +26,7 @@ const mapStateToProps = (state, { windowId }) => ( { viewTypes: getAllowedWindowViewTypes(state, { windowId }), windowViewType: getWindowViewType(state, { windowId }), + shiftBookView: getWindowConfig(state, { windowId }).shiftBookView ?? false, } ); diff --git a/src/lib/CanvasGroupings.js b/src/lib/CanvasGroupings.js index 9939e8622e..bf02bbdf0b 100644 --- a/src/lib/CanvasGroupings.js +++ b/src/lib/CanvasGroupings.js @@ -4,21 +4,21 @@ export default class CanvasGroupings { /** */ - constructor(canvases, viewType = 'single') { + constructor(canvases, viewType = 'single', shiftBookView = false) { this.canvases = canvases; this.viewType = viewType; + this.shiftBookView = shiftBookView; this._groupings = null; // eslint-disable-line no-underscore-dangle } /** */ getCanvases(index) { - switch (this.viewType) { - case 'book': - return this.groupings()[Math.ceil(index / 2)]; - default: - return this.groupings()[index]; + if (this.viewType === 'single') { + return this.groupings()[index]; } + const canvasId = this.canvases[index]; + return this.groupings().find(g => g.indexOf(canvasId) >= 0); } /** @@ -41,12 +41,14 @@ export default class CanvasGroupings { groupings.push([canvas]); return; } - // Odd page - if (i % 2 !== 0) { + const isOddPage = i % 2 !== 0; + const isEvenPage = !isOddPage; + if ((isOddPage && !this.shiftBookView) || (isEvenPage && this.shiftBookView)) { + // Odd page unshifted, or even page shifted groupings.push([canvas]); } else { - // Even page - groupings[Math.ceil(i / 2)].push(canvas); + // Odd page shifted, or even page unshifted + groupings[groupings.length - 1].push(canvas); } }); this._groupings = groupings; // eslint-disable-line no-underscore-dangle diff --git a/src/locales/de/translation.json b/src/locales/de/translation.json index b1d3ca8b74..90bdbc6a46 100644 --- a/src/locales/de/translation.json +++ b/src/locales/de/translation.json @@ -118,6 +118,7 @@ "searchSubmitAria": "Suchen", "searchTitle": "Suche", "selectWorkspaceMenu": "Wählen Sie einen Arbeitsflächentyp", + "shiftPages": "Buchansicht um eine Seite verschieben", "showingNumAnnotations": "{{number}} Annotationen werden angezeigt", "showZoomControls": "Zoomsteuerung anzeigen", "sidebarPanelsNavigation": "Hilfsfensternavigation", diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 4065408ec5..41b89cb029 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -122,6 +122,7 @@ "searchSubmitAria": "Submit search", "searchTitle": "Search", "selectWorkspaceMenu": "Select workspace type", + "shiftPages": "Shift book view by one page", "showingNumAnnotations": "Showing {{number}} annotation", "showingNumAnnotations_plural": "Showing {{number}} annotations", "showCollection": "Show collection", diff --git a/src/locales/fr/translation.json b/src/locales/fr/translation.json index 1f3ecccecd..04d303970d 100644 --- a/src/locales/fr/translation.json +++ b/src/locales/fr/translation.json @@ -119,6 +119,7 @@ "searchSubmitAria": "Lancer la recherche", "searchTitle": "Rechercher", "selectWorkspaceMenu": "Changer de type d'espace de travail", + "shiftPages": "Déplace le mode livre d'une page", "showingNumAnnotations": "{{number}} annotation affichée", "showingNumAnnotations_plural": "{{number}} annotations affichées", "showCollection": "Voir la collection", diff --git a/src/state/actions/action-types.js b/src/state/actions/action-types.js index c1f1244727..c24be238c9 100644 --- a/src/state/actions/action-types.js +++ b/src/state/actions/action-types.js @@ -72,6 +72,8 @@ const ActionTypes = { REMOVE_RESOURCE: 'mirador/REMOVE_RESOURCE', SHOW_COLLECTION_DIALOG: 'mirador/SHOW_COLLECTION_DIALOG', HIDE_COLLECTION_DIALOG: 'mirador/HIDE_COLLECTION_DIALOG', + + SHIFT_BOOK_VIEW: 'mirador/SHIFT_BOOK_VIEW', }; export default ActionTypes; diff --git a/src/state/actions/window.js b/src/state/actions/window.js index e4f840bbbf..71d35c7fb8 100644 --- a/src/state/actions/window.js +++ b/src/state/actions/window.js @@ -209,3 +209,11 @@ export function hideCollectionDialog(windowId) { windowId, }; } + +export function shiftBookView(windowId, doShift) { + return { + type: ActionTypes.SHIFT_BOOK_VIEW, + windowId, + doShift, + }; +} diff --git a/src/state/reducers/viewers.js b/src/state/reducers/viewers.js index 4191f1ee0d..e29f50da8c 100644 --- a/src/state/reducers/viewers.js +++ b/src/state/reducers/viewers.js @@ -18,6 +18,7 @@ export const viewersReducer = (state = {}, action) => { case ActionTypes.REMOVE_WINDOW: return omit(state, action.windowId); case ActionTypes.SET_WINDOW_VIEW_TYPE: + case ActionTypes.SHIFT_BOOK_VIEW: return set([action.windowId], null, state); case ActionTypes.SET_CANVAS: if (!action.preserveViewport) { diff --git a/src/state/reducers/windows.js b/src/state/reducers/windows.js index 33853fb8c7..c2a6cb4414 100644 --- a/src/state/reducers/windows.js +++ b/src/state/reducers/windows.js @@ -168,6 +168,14 @@ export const windowsReducer = (state = {}, action) => { collectionDialogOn: false, }, }; + case ActionTypes.SHIFT_BOOK_VIEW: + return { + ...state, + [action.windowId]: { + ...state[action.windowId], + shiftBookView: action.doShift ?? false, + }, + }; default: return state; } diff --git a/src/state/sagas/windows.js b/src/state/sagas/windows.js index bc63cdcbb9..5d2c72c720 100644 --- a/src/state/sagas/windows.js +++ b/src/state/sagas/windows.js @@ -198,7 +198,12 @@ export function* panToFocusedWindow({ pan, windowId }) { export function* updateVisibleCanvases({ windowId }) { const { canvasId } = yield select(getWindow, { windowId }); const visibleCanvases = yield select(getCanvasGrouping, { canvasId, windowId }); - yield put(updateWindow(windowId, { visibleCanvases: (visibleCanvases || []).map(c => c.id) })); + // Fetch info responses in case a previously unseen canvas has become visible through the new view + yield call(fetchInfoResponses, { visibleCanvases: visibleCanvases.map(c => c.id), windowId }); + yield put(updateWindow(windowId, { + canvasId: visibleCanvases[0].id, + visibleCanvases: (visibleCanvases || []).map(c => c.id), + })); } /** @private */ @@ -270,5 +275,6 @@ export default function* windowsSaga() { takeEvery(ActionTypes.RECEIVE_SEARCH, setCanvasOfFirstSearchResult), takeEvery(ActionTypes.SELECT_ANNOTATION, setCanvasforSelectedAnnotation), takeEvery(ActionTypes.FOCUS_WINDOW, panToFocusedWindow), + takeEvery(ActionTypes.SHIFT_BOOK_VIEW, updateVisibleCanvases), ]); } diff --git a/src/state/selectors/canvases.js b/src/state/selectors/canvases.js index 8078bf823c..89fbd1a1d1 100644 --- a/src/state/selectors/canvases.js +++ b/src/state/selectors/canvases.js @@ -5,7 +5,7 @@ import MiradorCanvas from '../../lib/MiradorCanvas'; import { miradorSlice } from './utils'; import { getWindow } from './getters'; import { getSequence } from './sequences'; -import { getWindowViewType } from './windows'; +import { getWindowConfig, getWindowViewType } from './windows'; /** */ export const selectInfoResponses = state => miradorSlice(state).infoResponses; @@ -74,11 +74,13 @@ export const getCanvasGroupings = createSelector( [ getCanvases, getWindowViewType, + getWindowConfig, ], - (canvases, view) => (canvases + (canvases, view, { shiftBookView = false }) => (canvases && new CanvasGroupings( canvases, view, + shiftBookView, ).groupings()), ); From 4fc5da0ee7372318870cfca95043972419c6710c Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Mon, 27 Sep 2021 18:22:45 +0200 Subject: [PATCH 18/35] Improve 'shift book view' option styling --- src/components/WindowTopBar.js | 6 ++-- src/components/WindowTopMenuButton.js | 9 ++++-- src/components/WindowViewSettings.js | 37 ++++++++++++++++------- src/components/icons/ShiftBookViewIcon.js | 23 ++++++++++++++ src/containers/WindowTopBar.js | 1 + src/containers/WindowTopMenu.js | 5 +-- src/containers/WindowTopMenuButton.js | 3 ++ src/containers/WindowViewSettings.js | 14 +++++++++ src/locales/de/translation.json | 1 + src/locales/en/translation.json | 1 + 10 files changed, 83 insertions(+), 17 deletions(-) create mode 100644 src/components/icons/ShiftBookViewIcon.js diff --git a/src/components/WindowTopBar.js b/src/components/WindowTopBar.js index 6bb4cbd62a..3f12983628 100644 --- a/src/components/WindowTopBar.js +++ b/src/components/WindowTopBar.js @@ -27,7 +27,7 @@ export class WindowTopBar extends Component { const { removeWindow, windowId, classes, toggleWindowSideBar, t, windowDraggable, maximizeWindow, maximized, minimizeWindow, focused, allowClose, allowMaximize, - focusWindow, allowFullscreen, allowTopMenuButton, allowWindowSideBar, + focusWindow, allowFullscreen, allowTopMenuButton, allowWindowSideBar, shiftBookView, } = this.props; return ( @@ -56,7 +56,7 @@ export class WindowTopBar extends Component { windowId={windowId} /> {allowTopMenuButton && ( - + )} @@ -101,6 +101,7 @@ WindowTopBar.propTypes = { maximizeWindow: PropTypes.func, minimizeWindow: PropTypes.func, removeWindow: PropTypes.func.isRequired, + shiftBookView: PropTypes.bool, t: PropTypes.func, toggleWindowSideBar: PropTypes.func.isRequired, windowDraggable: PropTypes.bool, @@ -118,6 +119,7 @@ WindowTopBar.defaultProps = { maximized: false, maximizeWindow: () => {}, minimizeWindow: () => {}, + shiftBookView: false, t: key => key, windowDraggable: true, }; diff --git a/src/components/WindowTopMenuButton.js b/src/components/WindowTopMenuButton.js index 1ff393ae74..2044b0ac02 100644 --- a/src/components/WindowTopMenuButton.js +++ b/src/components/WindowTopMenuButton.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import WindowTopMenu from '../containers/WindowTopMenu'; import MiradorMenuButton from '../containers/MiradorMenuButton'; import WindowOptionsIcon from './icons/WindowOptionsIcon'; +import { Badge } from '@material-ui/core'; /** */ @@ -42,7 +43,7 @@ export class WindowTopMenuButton extends Component { * @return */ render() { - const { classes, t, windowId } = this.props; + const { classes, shiftBookView, t, windowId } = this.props; const { anchorEl } = this.state; return ( @@ -54,7 +55,9 @@ export class WindowTopMenuButton extends Component { className={anchorEl ? classes.ctrlBtnSelected : null} onClick={this.handleMenuClick} > - + + + key, }; diff --git a/src/components/WindowViewSettings.js b/src/components/WindowViewSettings.js index 4088ff99e0..fd7a55ce4d 100644 --- a/src/components/WindowViewSettings.js +++ b/src/components/WindowViewSettings.js @@ -8,6 +8,7 @@ import ScrollViewIcon from '@material-ui/icons/ViewColumn'; import PropTypes from 'prop-types'; import BookViewIcon from './icons/BookViewIcon'; import GalleryViewIcon from './icons/GalleryViewIcon'; +import ShiftBookViewIcon from './icons/ShiftBookViewIcon'; /** * @@ -72,17 +73,31 @@ export class WindowViewSettings extends Component { {t('view')} { viewTypes.map(value => menuItem({ Icon: iconMap[value], value })) } {windowViewType === 'book' && ( - - setShiftBookView(!shiftBookView)} - /> - )} - /> - + <> + {t('viewOptions')} + setShiftBookView(!shiftBookView)} + > + + )} + /> + + )} ); diff --git a/src/components/icons/ShiftBookViewIcon.js b/src/components/icons/ShiftBookViewIcon.js new file mode 100644 index 0000000000..97789aaaba --- /dev/null +++ b/src/components/icons/ShiftBookViewIcon.js @@ -0,0 +1,23 @@ +import React from 'react'; +import SvgIcon from '@material-ui/core/SvgIcon'; + +/** + * ShiftBookViewIcon ~ + */ +export default function ShiftBookViewIcon(props) { + return ( + + + + + + + + + + + ); +} diff --git a/src/containers/WindowTopBar.js b/src/containers/WindowTopBar.js index 82148be2f4..f0e9e2ae93 100644 --- a/src/containers/WindowTopBar.js +++ b/src/containers/WindowTopBar.js @@ -19,6 +19,7 @@ const mapStateToProps = (state, { windowId }) => { allowWindowSideBar: config.allowWindowSideBar, focused: isFocused(state, { windowId }), maximized: config.maximized, + shiftBookView: config.shiftBookView, }; }; diff --git a/src/containers/WindowTopMenu.js b/src/containers/WindowTopMenu.js index f042c1f732..710dd86787 100644 --- a/src/containers/WindowTopMenu.js +++ b/src/containers/WindowTopMenu.js @@ -4,15 +4,16 @@ import { withTranslation } from 'react-i18next'; import { withPlugins } from '../extend/withPlugins'; import * as actions from '../state/actions'; import { WindowTopMenu } from '../components/WindowTopMenu'; -import { getConfig, getContainerId } from '../state/selectors'; +import { getConfig, getContainerId, getWindowConfig } from '../state/selectors'; /** * mapStateToProps - to hook up connect * @memberof WindowTopMenu * @private */ -const mapStateToProps = state => ({ +const mapStateToProps = (state, { windowId }) => ({ containerId: getContainerId(state), + shiftBookView: getWindowConfig(state, { windowId }).shiftBookView ?? false, showThumbnailNavigationSettings: getConfig(state).thumbnailNavigation.displaySettings, }); diff --git a/src/containers/WindowTopMenuButton.js b/src/containers/WindowTopMenuButton.js index 54d863e2b6..61a99e858d 100644 --- a/src/containers/WindowTopMenuButton.js +++ b/src/containers/WindowTopMenuButton.js @@ -10,6 +10,9 @@ import { WindowTopMenuButton } from '../components/WindowTopMenuButton'; * @returns {{ctrlBtn: {margin: (number|string)}}} */ const styles = theme => ({ + badge: { + backgroundColor: theme.palette.notification.main, + }, ctrlBtnSelected: { backgroundColor: theme.palette.action.selected, }, diff --git a/src/containers/WindowViewSettings.js b/src/containers/WindowViewSettings.js index 9c95a6e043..36f69f3e11 100644 --- a/src/containers/WindowViewSettings.js +++ b/src/containers/WindowViewSettings.js @@ -42,6 +42,20 @@ const styles = theme => ({ borderBottom: `2px solid ${theme.palette.secondary.main}`, color: theme.palette.secondary.main, }, + // FIXME: Yuck, isn't there a good way to compose these with MUI4? :-( + shiftToggle: { + padding: '0 1rem', + }, + shiftToggleEnabled: { + color: theme.palette.notification.main, + padding: '0 1rem', + }, + shiftToggleEnabledColor: { + color: theme.palette.notification.main, + }, + shiftToggleIcon: { + width: '6rem' + } }); const enhance = compose( diff --git a/src/locales/de/translation.json b/src/locales/de/translation.json index 90bdbc6a46..3ae7e2991e 100644 --- a/src/locales/de/translation.json +++ b/src/locales/de/translation.json @@ -134,6 +134,7 @@ "tryAgain": "Wiederholen", "untitled": "[Unbenannt]", "view": "Ansicht", + "viewOptions": "Ansichtsoptionen", "welcome": "Willkommen bei Mirador", "window": "Fenster: {{label}}", "windowMenu": "Fenstermenü und Miniaturansicht", diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index 41b89cb029..a94b4931bd 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -144,6 +144,7 @@ "tryAgain": "Try again", "untitled": "[Untitled]", "view": "View", + "viewOptions": "View options", "viewWorkspaceConfiguration": "View workspace configuration", "welcome": "Welcome to Mirador", "window": "Window: {{label}}", From d5e9987f22fe83468d3619e204df6281cd54c01c Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Mon, 27 Sep 2021 18:26:19 +0200 Subject: [PATCH 19/35] Bump version to 3.2.0-mdz.2 --- package.json | 2 +- src/components/WindowTopBar.js | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 779ee7e033..b4aa671e05 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdz/mirador", - "version": "3.2.0-mdz.1", + "version": "3.2.0-mdz.2", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/cjs/src/index.js", "module": "dist/es/src/index.js", diff --git a/src/components/WindowTopBar.js b/src/components/WindowTopBar.js index 8a2213ded8..e023fea103 100644 --- a/src/components/WindowTopBar.js +++ b/src/components/WindowTopBar.js @@ -27,11 +27,8 @@ export class WindowTopBar extends Component { const { removeWindow, windowId, classes, toggleWindowSideBar, t, windowDraggable, maximizeWindow, maximized, minimizeWindow, focused, allowClose, allowMaximize, -<<<<<<< HEAD focusWindow, allowFullscreen, allowTopMenuButton, allowWindowSideBar, sideBarOpen, -======= - focusWindow, allowFullscreen, allowTopMenuButton, allowWindowSideBar, shiftBookView, ->>>>>>> bookview-improvements + shiftBookView, } = this.props; return ( From 15d37937b991d9f46fef6044785410ee936be105 Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Tue, 28 Sep 2021 15:35:41 +0200 Subject: [PATCH 20/35] Update translations --- src/locales/de/translation.json | 2 +- src/locales/en/translation.json | 2 +- src/locales/fr/translation.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locales/de/translation.json b/src/locales/de/translation.json index 3ae7e2991e..69c0d21b0b 100644 --- a/src/locales/de/translation.json +++ b/src/locales/de/translation.json @@ -118,7 +118,7 @@ "searchSubmitAria": "Suchen", "searchTitle": "Suche", "selectWorkspaceMenu": "Wählen Sie einen Arbeitsflächentyp", - "shiftPages": "Buchansicht um eine Seite verschieben", + "shiftPages": "Buchansicht versetzen", "showingNumAnnotations": "{{number}} Annotationen werden angezeigt", "showZoomControls": "Zoomsteuerung anzeigen", "sidebarPanelsNavigation": "Hilfsfensternavigation", diff --git a/src/locales/en/translation.json b/src/locales/en/translation.json index a94b4931bd..aaaef2ca5f 100644 --- a/src/locales/en/translation.json +++ b/src/locales/en/translation.json @@ -122,7 +122,7 @@ "searchSubmitAria": "Submit search", "searchTitle": "Search", "selectWorkspaceMenu": "Select workspace type", - "shiftPages": "Shift book view by one page", + "shiftPages": "Shift book view", "showingNumAnnotations": "Showing {{number}} annotation", "showingNumAnnotations_plural": "Showing {{number}} annotations", "showCollection": "Show collection", diff --git a/src/locales/fr/translation.json b/src/locales/fr/translation.json index 04d303970d..b1c2d5ce07 100644 --- a/src/locales/fr/translation.json +++ b/src/locales/fr/translation.json @@ -119,7 +119,7 @@ "searchSubmitAria": "Lancer la recherche", "searchTitle": "Rechercher", "selectWorkspaceMenu": "Changer de type d'espace de travail", - "shiftPages": "Déplace le mode livre d'une page", + "shiftPages": "Décaler la vue du livre", "showingNumAnnotations": "{{number}} annotation affichée", "showingNumAnnotations_plural": "{{number}} annotations affichées", "showCollection": "Voir la collection", From 356d43edba922134ae27bc8d227a8fcd53a75018 Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Tue, 28 Sep 2021 15:36:18 +0200 Subject: [PATCH 21/35] Bump version to 3.2.0-mdz.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b4aa671e05..d5850fe636 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdz/mirador", - "version": "3.2.0-mdz.2", + "version": "3.2.0-mdz.3", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/cjs/src/index.js", "module": "dist/es/src/index.js", From 27ba516b1af297ac871b9902b42744ac81c43e9a Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Mon, 4 Oct 2021 12:47:18 +0200 Subject: [PATCH 22/35] A few visual touchups to the shifting button --- src/components/WindowViewSettings.js | 8 +++----- src/components/icons/ShiftBookViewIcon.js | 17 +++++------------ src/containers/WindowTopMenuButton.js | 2 +- src/containers/WindowViewSettings.js | 15 +++++---------- 4 files changed, 14 insertions(+), 28 deletions(-) diff --git a/src/components/WindowViewSettings.js b/src/components/WindowViewSettings.js index fd7a55ce4d..307cd4a084 100644 --- a/src/components/WindowViewSettings.js +++ b/src/components/WindowViewSettings.js @@ -80,18 +80,16 @@ export class WindowViewSettings extends Component { > )} diff --git a/src/components/icons/ShiftBookViewIcon.js b/src/components/icons/ShiftBookViewIcon.js index 97789aaaba..9925606ae1 100644 --- a/src/components/icons/ShiftBookViewIcon.js +++ b/src/components/icons/ShiftBookViewIcon.js @@ -6,18 +6,11 @@ import SvgIcon from '@material-ui/core/SvgIcon'; */ export default function ShiftBookViewIcon(props) { return ( - - - - - - - - - + + ); } diff --git a/src/containers/WindowTopMenuButton.js b/src/containers/WindowTopMenuButton.js index 61a99e858d..4e3c6e2f73 100644 --- a/src/containers/WindowTopMenuButton.js +++ b/src/containers/WindowTopMenuButton.js @@ -11,7 +11,7 @@ import { WindowTopMenuButton } from '../components/WindowTopMenuButton'; */ const styles = theme => ({ badge: { - backgroundColor: theme.palette.notification.main, + backgroundColor: theme.palette.secondary.main, }, ctrlBtnSelected: { backgroundColor: theme.palette.action.selected, diff --git a/src/containers/WindowViewSettings.js b/src/containers/WindowViewSettings.js index 36f69f3e11..d826d7c056 100644 --- a/src/containers/WindowViewSettings.js +++ b/src/containers/WindowViewSettings.js @@ -42,19 +42,14 @@ const styles = theme => ({ borderBottom: `2px solid ${theme.palette.secondary.main}`, color: theme.palette.secondary.main, }, - // FIXME: Yuck, isn't there a good way to compose these with MUI4? :-( shiftToggle: { - padding: '0 1rem', - }, - shiftToggleEnabled: { - color: theme.palette.notification.main, - padding: '0 1rem', - }, - shiftToggleEnabledColor: { - color: theme.palette.notification.main, + flexDirection: 'column', + whiteSpace: 'break-spaces', + marginLeft: '16px', }, shiftToggleIcon: { - width: '6rem' + height: '18px', + width: 'auto', } }); From f162fc29248524021e7f2cbcee003aab25327012 Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Mon, 4 Oct 2021 12:48:03 +0200 Subject: [PATCH 23/35] Bump version to 3.2.0-mdz.4 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d5850fe636..d1ec441a04 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdz/mirador", - "version": "3.2.0-mdz.3", + "version": "3.2.0-mdz.4", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/cjs/src/index.js", "module": "dist/es/src/index.js", @@ -24,7 +24,7 @@ "build:watch": "webpack --watch --mode=development", "prepublishOnly": "npm run clean && npm run build:es && npm run build:cjs && npm run build", "size": "bundlewatch --config bundlewatch.config.json", - "start": "NODE_ENV=development webpack serve --open" + "start": "NODE_ENV=development webpack serve" }, "license": "Apache-2.0", "contributors": [ From 04e023361ffba9a8458e629ab45fbc11f6653d00 Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Tue, 12 Oct 2021 14:52:54 +0200 Subject: [PATCH 24/35] Only show badge on view settings icon when book view is enabled and shifting is enabled at the same time --- src/components/WindowTopBar.js | 4 +++- src/components/WindowTopMenuButton.js | 6 +++--- src/containers/WindowTopBar.js | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/WindowTopBar.js b/src/components/WindowTopBar.js index 3f12983628..7eec714444 100644 --- a/src/components/WindowTopBar.js +++ b/src/components/WindowTopBar.js @@ -28,6 +28,7 @@ export class WindowTopBar extends Component { removeWindow, windowId, classes, toggleWindowSideBar, t, windowDraggable, maximizeWindow, maximized, minimizeWindow, focused, allowClose, allowMaximize, focusWindow, allowFullscreen, allowTopMenuButton, allowWindowSideBar, shiftBookView, + viewType, } = this.props; return ( @@ -56,7 +57,7 @@ export class WindowTopBar extends Component { windowId={windowId} /> {allowTopMenuButton && ( - + )} @@ -104,6 +105,7 @@ WindowTopBar.propTypes = { shiftBookView: PropTypes.bool, t: PropTypes.func, toggleWindowSideBar: PropTypes.func.isRequired, + viewType: PropTypes.oneOf('book', 'single', 'gallery').isRequired, windowDraggable: PropTypes.bool, windowId: PropTypes.string.isRequired, }; diff --git a/src/components/WindowTopMenuButton.js b/src/components/WindowTopMenuButton.js index 2044b0ac02..b1b36b122a 100644 --- a/src/components/WindowTopMenuButton.js +++ b/src/components/WindowTopMenuButton.js @@ -43,7 +43,7 @@ export class WindowTopMenuButton extends Component { * @return */ render() { - const { classes, shiftBookView, t, windowId } = this.props; + const { classes, viewIsModified, t, windowId } = this.props; const { anchorEl } = this.state; return ( @@ -55,7 +55,7 @@ export class WindowTopMenuButton extends Component { className={anchorEl ? classes.ctrlBtnSelected : null} onClick={this.handleMenuClick} > - + @@ -71,7 +71,7 @@ export class WindowTopMenuButton extends Component { WindowTopMenuButton.propTypes = { classes: PropTypes.objectOf(PropTypes.string).isRequired, - shiftBookView: PropTypes.bool, + viewIsModified: PropTypes.bool, t: PropTypes.func, windowId: PropTypes.string.isRequired, }; diff --git a/src/containers/WindowTopBar.js b/src/containers/WindowTopBar.js index f0e9e2ae93..fae4b339cb 100644 --- a/src/containers/WindowTopBar.js +++ b/src/containers/WindowTopBar.js @@ -20,6 +20,7 @@ const mapStateToProps = (state, { windowId }) => { focused: isFocused(state, { windowId }), maximized: config.maximized, shiftBookView: config.shiftBookView, + viewType: config.view, }; }; From b976aa9c52dd9e60bc8e48ef17bd20d4f685c620 Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Tue, 12 Oct 2021 14:54:42 +0200 Subject: [PATCH 25/35] Bump version to 3.2.0-mdz.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d1ec441a04..bf14e364e1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdz/mirador", - "version": "3.2.0-mdz.4", + "version": "3.2.0-mdz.5", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/cjs/src/index.js", "module": "dist/es/src/index.js", From 3d876d5fc0ed1867a2f26daccd24c53a4511274c Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Tue, 12 Oct 2021 15:19:53 +0200 Subject: [PATCH 26/35] Fix bug in view modification badge --- src/containers/WindowTopBar.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/containers/WindowTopBar.js b/src/containers/WindowTopBar.js index fae4b339cb..ecd386baee 100644 --- a/src/containers/WindowTopBar.js +++ b/src/containers/WindowTopBar.js @@ -4,7 +4,7 @@ import { withTranslation } from 'react-i18next'; import { withStyles } from '@material-ui/core'; import { withPlugins } from '../extend/withPlugins'; import * as actions from '../state/actions'; -import { getWindowConfig, isFocused } from '../state/selectors'; +import { getWindowConfig, getWindowViewType, isFocused } from '../state/selectors'; import { WindowTopBar } from '../components/WindowTopBar'; /** mapStateToProps */ @@ -20,7 +20,7 @@ const mapStateToProps = (state, { windowId }) => { focused: isFocused(state, { windowId }), maximized: config.maximized, shiftBookView: config.shiftBookView, - viewType: config.view, + viewType: getWindowViewType(state, { windowId }), }; }; From b5d67e8f0c4a0dc62f78e2b9127ff0964d7b9a2c Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Tue, 12 Oct 2021 15:21:04 +0200 Subject: [PATCH 27/35] Bump version to 3.2.0-mdz.6 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bf14e364e1..c1021bfbb7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdz/mirador", - "version": "3.2.0-mdz.5", + "version": "3.2.0-mdz.6", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/cjs/src/index.js", "module": "dist/es/src/index.js", From 0539fef9ccb9e31069fb024ae63b743e276bd768 Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Fri, 19 Nov 2021 15:50:18 +0100 Subject: [PATCH 28/35] Fix annotation rendering when OSD has viewport margin. When users configure a viewport margin for OSD (via `osdConfig.viewportMargins`), annotation rendering would be broken, since the `osd.viewport.getBoundsNoRottate()` call to get the viewport boundary would return the viewport *without* the margin, which would lead to wrong calculations down the line. The fix is to simply call `osd.viewport.getBoundsNoRotateWithMargins` instead to obtain the correct full viewport size. --- __tests__/src/lib/OpenSeadragonCanvasOverlay.test.js | 2 +- src/lib/OpenSeadragonCanvasOverlay.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/__tests__/src/lib/OpenSeadragonCanvasOverlay.test.js b/__tests__/src/lib/OpenSeadragonCanvasOverlay.test.js index 23a785b56d..ef569c611d 100644 --- a/__tests__/src/lib/OpenSeadragonCanvasOverlay.test.js +++ b/__tests__/src/lib/OpenSeadragonCanvasOverlay.test.js @@ -17,7 +17,7 @@ describe('OpenSeadragonCanvasOverlay', () => { clientWidth: 200, }, viewport: { - getBoundsNoRotate: jest.fn(() => ({ + getBoundsNoRotateWithMargins: jest.fn(() => ({ height: 300, width: 200, x: 40, diff --git a/src/lib/OpenSeadragonCanvasOverlay.js b/src/lib/OpenSeadragonCanvasOverlay.js index d10bd5014b..fd69cf31c9 100644 --- a/src/lib/OpenSeadragonCanvasOverlay.js +++ b/src/lib/OpenSeadragonCanvasOverlay.js @@ -58,7 +58,7 @@ export default class OpenSeadragonCanvasOverlay { } this.viewportOrigin = new OpenSeadragon.Point(0, 0); - const boundsRect = this.viewer.viewport.getBoundsNoRotate(true); + const boundsRect = this.viewer.viewport.getBoundsNoRotateWithMargins(true); this.viewportOrigin.x = boundsRect.x; this.viewportOrigin.y = boundsRect.y * this.imgAspectRatio; From 45cf4d3cb03d0dac674883f30bd90a4622cc41e6 Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Fri, 19 Nov 2021 16:08:21 +0100 Subject: [PATCH 29/35] Bump version to 3.3.0-mdz.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0e4bd168e2..b068d1f492 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdz/mirador", - "version": "3.3.0-mdz.0", + "version": "3.3.0-mdz.1", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/cjs/src/index.js", "module": "dist/es/src/index.js", From 7171daff3beb0f998d4acaa904e539972e7a5ba1 Mon Sep 17 00:00:00 2001 From: Priya Manalil Date: Tue, 11 Jan 2022 10:50:16 +0100 Subject: [PATCH 30/35] scroll the selected image to view in Gallery --- src/components/GalleryViewThumbnail.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/components/GalleryViewThumbnail.js b/src/components/GalleryViewThumbnail.js index 80ae8e1277..7e17695224 100644 --- a/src/components/GalleryViewThumbnail.js +++ b/src/components/GalleryViewThumbnail.js @@ -19,6 +19,7 @@ export class GalleryViewThumbnail extends Component { constructor(props) { super(props); + this.ref = React.createRef(); this.state = { requestedAnnotations: false }; this.handleSelect = this.handleSelect.bind(this); @@ -26,6 +27,14 @@ export class GalleryViewThumbnail extends Component { this.handleIntersection = this.handleIntersection.bind(this); } + // eslint-disable-next-line require-jsdoc + componentDidMount() { + const { selected } = this.props; + if (selected) { + this.ref.current?.scrollIntoView(true); + } + } + /** @private */ handleSelect() { const { @@ -112,6 +121,7 @@ export class GalleryViewThumbnail extends Component { } onClick={this.handleSelect} onKeyUp={this.handleKey} + ref={this.ref} role="button" tabIndex={0} > From c1693af4dcb898376f1f86d2773fca082ec66a65 Mon Sep 17 00:00:00 2001 From: Johannes Baiter Date: Mon, 24 Jan 2022 11:08:29 +0100 Subject: [PATCH 31/35] Version 3.3.0-mdz.2 - Update to latest upstream Mirador master branch - When navigating to gallery view, scroll to the currently active canvas --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bfb07d5c17..8c8b510cfe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdz/mirador", - "version": "3.3.0-mdz.1", + "version": "3.3.0-mdz.2", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/cjs/src/index.js", "module": "dist/es/src/index.js", From 09dfc7af29435742b50e72a4a89a8bab19a78e18 Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Thu, 17 Aug 2023 14:10:53 +0200 Subject: [PATCH 32/35] Update CI configuration --- .github/workflows/node.js.yml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index fce1892d58..87e7d6f261 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -5,21 +5,24 @@ name: Node.js CI on: push: - branches: [ master ] + branches: [ mdz-customized ] pull_request: - branches: [ master ] + branches: [ mdz-customized ] jobs: build: runs-on: ubuntu-latest + strategy: + matrix: + node-version: [16.x] steps: - - uses: actions/checkout@v2 - - name: Use Node.js 14.x - uses: actions/setup-node@v1 + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 with: - node-version: 14.x - - run: npm install -g codecov + node-version: ${{ matrix.node-version }} - run: npm install - run: npm test - - run: codecov + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 From 13454b707a207e694b68d69f568138da25489184 Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Thu, 17 Aug 2023 14:50:33 +0200 Subject: [PATCH 33/35] Fix npm test command --- .eslintrc | 13 ++++++++----- bundlewatch.config.json | 2 +- scripts/container-lint.js | 2 +- scripts/i18n-lint.js | 2 +- src/components/WindowTopMenuButton.js | 8 +++++--- src/components/WindowViewSettings.js | 1 - src/containers/WindowTopBar.js | 4 +++- src/containers/WindowViewSettings.js | 2 +- 8 files changed, 20 insertions(+), 14 deletions(-) diff --git a/.eslintrc b/.eslintrc index 35d9204247..6a384dabff 100644 --- a/.eslintrc +++ b/.eslintrc @@ -12,8 +12,14 @@ "rules": { "import/prefer-default-export": "off", "no-console": "off", + "react/default-props-match-prop-types": "warn", + "react/destructuring-assignment": "warn", + "react/forbid-prop-types": "warn", "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }], - "require-jsdoc": ["error", { + "react/no-this-in-sfc": "warn", + "react/prop-types": "warn", + "react/require-default-props": "warn", + "require-jsdoc": ["warn", { "require": { "FunctionDeclaration": true, "MethodDefinition": true, @@ -24,10 +30,7 @@ }], "no-underscore-dangle": "off", "react/prefer-stateless-function": "off", - "sort-keys": ["error", "asc", { - "caseSensitive": false, - "natural": false - }], + "sort-keys": "warn", "react/jsx-props-no-spreading": "off", "arrow-parens": "off", "import/no-anonymous-default-export": "off" diff --git a/bundlewatch.config.json b/bundlewatch.config.json index 64b09e019d..778a8a94a8 100644 --- a/bundlewatch.config.json +++ b/bundlewatch.config.json @@ -2,7 +2,7 @@ "files": [ { "path": "dist/mirador.min.js", - "maxSize": "525 KB" + "maxSize": "550 KB" } ] } diff --git a/scripts/container-lint.js b/scripts/container-lint.js index 7ef296ba57..233e4588b0 100644 --- a/scripts/container-lint.js +++ b/scripts/container-lint.js @@ -1,5 +1,5 @@ -const glob = require('glob'); // eslint-disable-line import/no-extraneous-dependencies const fs = require('fs'); +const glob = require('glob'); // eslint-disable-line import/no-extraneous-dependencies const chalk = require('chalk'); // eslint-disable-line import/no-extraneous-dependencies const { error } = console; diff --git a/scripts/i18n-lint.js b/scripts/i18n-lint.js index 6a407f3e32..a643dbdfb9 100644 --- a/scripts/i18n-lint.js +++ b/scripts/i18n-lint.js @@ -1,5 +1,5 @@ -const glob = require('glob'); // eslint-disable-line import/no-extraneous-dependencies const fs = require('fs'); +const glob = require('glob'); // eslint-disable-line import/no-extraneous-dependencies const chalk = require('chalk'); // eslint-disable-line import/no-extraneous-dependencies const { log } = console; diff --git a/src/components/WindowTopMenuButton.js b/src/components/WindowTopMenuButton.js index 26872eda26..5a1e87f4c3 100644 --- a/src/components/WindowTopMenuButton.js +++ b/src/components/WindowTopMenuButton.js @@ -1,9 +1,9 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; +import { Badge } from '@material-ui/core'; import WindowTopMenu from '../containers/WindowTopMenu'; import MiradorMenuButton from '../containers/MiradorMenuButton'; import WindowOptionsIcon from './icons/WindowOptionsIcon'; -import { Badge } from '@material-ui/core'; /** */ @@ -43,7 +43,9 @@ export class WindowTopMenuButton extends Component { * @return */ render() { - const { classes, viewIsModified, t, windowId } = this.props; + const { + classes, viewIsModified, t, windowId, + } = this.props; const { anchorEl } = this.state; return ( @@ -72,8 +74,8 @@ export class WindowTopMenuButton extends Component { WindowTopMenuButton.propTypes = { classes: PropTypes.objectOf(PropTypes.string).isRequired, - viewIsModified: PropTypes.bool, t: PropTypes.func, + viewIsModified: PropTypes.bool, windowId: PropTypes.string.isRequired, }; diff --git a/src/components/WindowViewSettings.js b/src/components/WindowViewSettings.js index 307cd4a084..8412b26261 100644 --- a/src/components/WindowViewSettings.js +++ b/src/components/WindowViewSettings.js @@ -2,7 +2,6 @@ import React, { Component } from 'react'; import FormControlLabel from '@material-ui/core/FormControlLabel'; import MenuItem from '@material-ui/core/MenuItem'; import ListSubheader from '@material-ui/core/ListSubheader'; -import Switch from '@material-ui/core/Switch'; import SingleIcon from '@material-ui/icons/CropOriginalSharp'; import ScrollViewIcon from '@material-ui/icons/ViewColumn'; import PropTypes from 'prop-types'; diff --git a/src/containers/WindowTopBar.js b/src/containers/WindowTopBar.js index 5c408d3836..fd77af1f1b 100644 --- a/src/containers/WindowTopBar.js +++ b/src/containers/WindowTopBar.js @@ -4,7 +4,9 @@ import { withTranslation } from 'react-i18next'; import { withStyles } from '@material-ui/core'; import { withPlugins } from '../extend/withPlugins'; import * as actions from '../state/actions'; -import { getWindow, getWindowConfig, getWindowViewType, isFocused } from '../state/selectors'; +import { + getWindow, getWindowConfig, getWindowViewType, isFocused, +} from '../state/selectors'; import { WindowTopBar } from '../components/WindowTopBar'; /** mapStateToProps */ diff --git a/src/containers/WindowViewSettings.js b/src/containers/WindowViewSettings.js index d826d7c056..06c40b7a82 100644 --- a/src/containers/WindowViewSettings.js +++ b/src/containers/WindowViewSettings.js @@ -50,7 +50,7 @@ const styles = theme => ({ shiftToggleIcon: { height: '18px', width: 'auto', - } + }, }); const enhance = compose( From 1e80ca66373b71f11569794d2855db8a366f04d7 Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Thu, 17 Aug 2023 12:56:33 +0200 Subject: [PATCH 34/35] Fix selector for the manifest description by considering the current language --- src/state/selectors/manifests.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/state/selectors/manifests.js b/src/state/selectors/manifests.js index 44abe04352..b42eb27396 100644 --- a/src/state/selectors/manifests.js +++ b/src/state/selectors/manifests.js @@ -258,9 +258,9 @@ export const getManifestTitle = createSelector( * @return {String} */ export const getManifestDescription = createSelector( - [getManifestoInstance], - manifest => manifest - && manifest.getDescription().getValue(), + [getLocale, getManifestoInstance], + (locale, manifest) => manifest + && manifest.getDescription().getValue(locale), ); /** From 8faddcc23bd7d21a55ad35fbe83201021bbacf8e Mon Sep 17 00:00:00 2001 From: Matthias Lindinger Date: Thu, 17 Aug 2023 15:22:20 +0200 Subject: [PATCH 35/35] Bump version to 3.3.0-mdz.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8c8b510cfe..529e52c006 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@mdz/mirador", - "version": "3.3.0-mdz.2", + "version": "3.3.0-mdz.3", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/cjs/src/index.js", "module": "dist/es/src/index.js",