From 9e7bb75628ffbb51ffcc7cc2bfc106acb3ece8ef Mon Sep 17 00:00:00 2001 From: Benjamin Armintor Date: Wed, 14 Aug 2024 16:56:57 -0400 Subject: [PATCH] WIP icon changes in CUL plugins for XML and canvas nav --- __tests__/integration/mirador/cul.html | 2 +- src/culPlugins/index.js | 2 + .../components/PageIconViewerNavigation.js | 87 +++++++++++++++++++ .../mirador-pageIconViewerNavigation/index.js | 32 +++++++ .../mirador-viewXml/MiradorViewXmlPlugin.js | 4 +- 5 files changed, 124 insertions(+), 3 deletions(-) create mode 100644 src/culPlugins/mirador-pageIconViewerNavigation/components/PageIconViewerNavigation.js create mode 100644 src/culPlugins/mirador-pageIconViewerNavigation/index.js diff --git a/__tests__/integration/mirador/cul.html b/__tests__/integration/mirador/cul.html index 3dd4f17d69..539e46932d 100644 --- a/__tests__/integration/mirador/cul.html +++ b/__tests__/integration/mirador/cul.html @@ -37,7 +37,7 @@ { manifestId: 'https://iiif.harvardartmuseums.org/manifests/object/299843', provider: 'Other Organization' }, ], }, - [...Mirador.culPlugins.downloadDialogPlugin].concat([...Mirador.culPlugins.viewXmlPlugin]).concat([...Mirador.culPlugins.citationsSidebarPlugin]).concat([...Mirador.culPlugins.videojsPlugin]).concat([...Mirador.culPlugins.canvasRelatedLinksPlugin]).concat([...Mirador.culPlugins.hintingSideBar]) + [...Mirador.culPlugins.downloadDialogPlugin].concat([...Mirador.culPlugins.viewXmlPlugin]).concat([...Mirador.culPlugins.citationsSidebarPlugin]).concat([...Mirador.culPlugins.videojsPlugin]).concat([...Mirador.culPlugins.canvasRelatedLinksPlugin]).concat([...Mirador.culPlugins.hintingSideBar]).concat([...Mirador.culPlugins.viewerNavigation]) ); diff --git a/src/culPlugins/index.js b/src/culPlugins/index.js index a05837afdd..dff0f1aaa7 100644 --- a/src/culPlugins/index.js +++ b/src/culPlugins/index.js @@ -5,6 +5,7 @@ import downloadDialogPlugin from './mirador-downloaddialog'; import hintingSideBar from './mirador-hinting-sidebar'; import videojsPlugin from './mirador-videojs'; import viewXmlPlugin from './mirador-viewXml'; +import viewerNavigation from './mirador-pageIconViewerNavigation'; export default { canvasLinkPlugin, @@ -14,4 +15,5 @@ export default { hintingSideBar, videojsPlugin, viewXmlPlugin, + viewerNavigation, }; diff --git a/src/culPlugins/mirador-pageIconViewerNavigation/components/PageIconViewerNavigation.js b/src/culPlugins/mirador-pageIconViewerNavigation/components/PageIconViewerNavigation.js new file mode 100644 index 0000000000..2999ea26cc --- /dev/null +++ b/src/culPlugins/mirador-pageIconViewerNavigation/components/PageIconViewerNavigation.js @@ -0,0 +1,87 @@ +import { Component } from 'react'; +import LtrNextPage from '@mui/icons-material/AutoStories'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import MiradorMenuButton from '../../../containers/MiradorMenuButton'; +import ns from '../../../config/css-ns'; + +/** + */ +export class PageIconViewerNavigation extends Component { + /** + * Renders previous next canvas buttons, but only if there are such canvases + * The AutoStories icon appears to be a page turning, and is thus flipped + * via a scale transform rather than a 180deg rotation. Rotations + * for the reading direction can thus be applied uniformly to both but before + * the scale transform. + */ + render() { + const { + hasNextCanvas, hasPreviousCanvas, setNextCanvas, setPreviousCanvas, t, + viewingDirection, + } = this.props; + + if (!hasPreviousCanvas && !hasNextCanvas) return (null); + let htmlDir = 'ltr'; + let prevTransform = ['scale(-1, 1)']; + let nextTransform = []; + switch (viewingDirection) { + case 'top-to-bottom': + prevTransform.unshift('rotate(90deg)'); + nextTransform.unshift('rotate(90deg)'); + break; + case 'bottom-to-top': + prevTransform.unshift('rotate(270deg)'); + nextTransform.unshift('rotate(270deg)'); + break; + case 'right-to-left': + htmlDir = 'rtl'; + nextTransform.push(prevTransform.pop()); + break; + default: + break; + } + const previousIconStyle = (prevTransform.length > 0) ? { transform: prevTransform.join(' ') } : {}; + const nextIconStyle = (nextTransform.length > 0) ? { transform: nextTransform.join(' ') } : {}; + return ( +
+ { hasPreviousCanvas && setPreviousCanvas(); }} + > + + + { hasNextCanvas && setNextCanvas(); }} + > + + +
+ ); + } +} + +PageIconViewerNavigation.propTypes = { + hasNextCanvas: PropTypes.bool, + hasPreviousCanvas: PropTypes.bool, + setNextCanvas: PropTypes.func, + setPreviousCanvas: PropTypes.func, + t: PropTypes.func.isRequired, + viewingDirection: PropTypes.string, +}; + +PageIconViewerNavigation.defaultProps = { + hasNextCanvas: false, + hasPreviousCanvas: false, + setNextCanvas: () => {}, + setPreviousCanvas: () => {}, + viewingDirection: '', +}; diff --git a/src/culPlugins/mirador-pageIconViewerNavigation/index.js b/src/culPlugins/mirador-pageIconViewerNavigation/index.js new file mode 100644 index 0000000000..fef4391869 --- /dev/null +++ b/src/culPlugins/mirador-pageIconViewerNavigation/index.js @@ -0,0 +1,32 @@ +import { + getContainerId, + getSequenceViewingDirection, + getNextCanvasGrouping, + getPreviousCanvasGrouping, +} from '../../state/selectors'; +import { setNextCanvas, setPreviousCanvas } from '../../state/actions'; + +import { PageIconViewerNavigation } from './components/PageIconViewerNavigation'; + +export { + PageIconViewerNavigation, +}; + +export default [ + { + component: PageIconViewerNavigation, + config: {}, + mapDispatchToProps: (dispatch, { windowId }) => ({ + setNextCanvas: (...args) => dispatch(setNextCanvas(windowId)), + setPreviousCanvas: (...args) => dispatch(setPreviousCanvas(windowId)), + }), + mapStateToProps: (state, { windowId }) => ({ + hasNextCanvas: !!getNextCanvasGrouping(state, { windowId }), + hasPreviousCanvas: !!getPreviousCanvasGrouping(state, { windowId }), + viewingDirection: getSequenceViewingDirection(state, { windowId }), + }), + mode: 'wrap', + name: 'PageIconViewerNavigation', + target: 'ViewerNavigation', + }, +]; diff --git a/src/culPlugins/mirador-viewXml/MiradorViewXmlPlugin.js b/src/culPlugins/mirador-viewXml/MiradorViewXmlPlugin.js index 71caed8c8f..c1ce823fe9 100644 --- a/src/culPlugins/mirador-viewXml/MiradorViewXmlPlugin.js +++ b/src/culPlugins/mirador-viewXml/MiradorViewXmlPlugin.js @@ -1,5 +1,5 @@ import PropTypes from 'prop-types'; -import CodeIcon from '@mui/icons-material/Code'; +import DataObject from '@mui/icons-material/DataObject'; import MiradorMenuButton from '../../containers/MiradorMenuButton'; self.$RefreshReg$ = () => {}; /* eslint-disable-line no-restricted-globals */ @@ -23,7 +23,7 @@ const MiradorViewXml = ({ config, container, updateConfig }) => { dialogOpen: !dialogOpen, })} > - + ); };