Skip to content
Snippets Groups Projects
Unverified Commit 24c97b73 authored by Shaun Ellis's avatar Shaun Ellis Committed by GitHub
Browse files

Merge pull request #2183 from ProjectMirador/2114-add-a-canvas-page-counter

2114 add a canvas page counter
parents b1571222 1b883ec4
Branches
Tags
No related merge requests found
import React from 'react';
import { shallow } from 'enzyme';
import { Typography } from '@material-ui/core';
import { ViewerInfo } from '../../../src/components/ViewerInfo';
/** create wrapper */
function createWrapper(props) {
return shallow(
<ViewerInfo
canvasCount={8}
canvasIndex={2}
canvasLabel="testLabel"
t={k => k}
{...props}
/>,
);
}
describe('ViewerNavigation', () => {
let wrapper;
it('renders the component', () => {
wrapper = createWrapper();
expect(wrapper.find(Typography).length).toBe(1);
expect(wrapper.find(Typography).at(0)
.matchesElement(<Typography>3 of 8 testLabel</Typography>)).toBe(true);
});
});
import React from 'react'; import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import Typography from '@material-ui/core/Typography';
import { WindowCanvasNavigationControls } from '../../../src/components/WindowCanvasNavigationControls'; import { WindowCanvasNavigationControls } from '../../../src/components/WindowCanvasNavigationControls';
import ViewerInfo from '../../../src/containers/ViewerInfo';
import ViewerNavigation from '../../../src/containers/ViewerNavigation'; import ViewerNavigation from '../../../src/containers/ViewerNavigation';
import ZoomControls from '../../../src/containers/ZoomControls'; import ZoomControls from '../../../src/containers/ZoomControls';
...@@ -26,7 +26,7 @@ describe('WindowCanvasNavigationControls', () => { ...@@ -26,7 +26,7 @@ describe('WindowCanvasNavigationControls', () => {
<div> <div>
<ZoomControls /> <ZoomControls />
<ViewerNavigation /> <ViewerNavigation />
<Typography>label</Typography> <ViewerInfo />
</div>, </div>,
)).toBe(true); )).toBe(true);
}); });
......
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
"mosaic": "Mosaik", "mosaic": "Mosaik",
"nextCanvas": "Nächstes Objekt", "nextCanvas": "Nächstes Objekt",
"numItems": "{{number}} Elemente", "numItems": "{{number}} Elemente",
"of": "von",
"off": "Keine", "off": "Keine",
"openAnnotationCompanionWindow": "Annotationsfenster öffnen", "openAnnotationCompanionWindow": "Annotationsfenster öffnen",
"openCanvasNavigationCompanionWindow": "Hilfsfenster für die Leinwandnavigation schließen", "openCanvasNavigationCompanionWindow": "Hilfsfenster für die Leinwandnavigation schließen",
......
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
"moveCompanionWindowToRight": "Move to right", "moveCompanionWindowToRight": "Move to right",
"nextCanvas": "Next item", "nextCanvas": "Next item",
"numItems": "{{number}} items", "numItems": "{{number}} items",
"of": "of",
"off": "Off", "off": "Off",
"openAnnotationCompanionWindow": "Open annotation companion window", "openAnnotationCompanionWindow": "Open annotation companion window",
"openCanvasNavigationCompanionWindow": "Open canvas navigation companion window", "openCanvasNavigationCompanionWindow": "Open canvas navigation companion window",
...@@ -69,7 +70,6 @@ ...@@ -69,7 +70,6 @@
"tryAgain": "Try again", "tryAgain": "Try again",
"untitled": "[Untitled]", "untitled": "[Untitled]",
"view": "View", "view": "View",
"window": "Window: {{label}}",
"windowMenu": "Window menu", "windowMenu": "Window menu",
"workspace": "Workspace", "workspace": "Workspace",
"workspaceFullScreen": "Full Screen", "workspaceFullScreen": "Full Screen",
......
import React, { Component } from 'react';
import Typography from '@material-ui/core/Typography';
import PropTypes from 'prop-types';
import ns from '../config/css-ns';
/**
*
*/
export class ViewerInfo extends Component {
/** */
render() {
const {
canvasCount,
canvasIndex,
canvasLabel,
t,
} = this.props;
return (
<div className={ns('osd-info')}>
<Typography variant="caption" className={ns('canvas-label')}>
{`${canvasIndex + 1} ${t('of')} ${canvasCount}`}
{canvasLabel && ` ${String.fromCharCode(8226)} ${canvasLabel}`}
</Typography>
</div>
);
}
}
ViewerInfo.defaultProps = {
canvasLabel: undefined,
t: () => {},
};
ViewerInfo.propTypes = {
canvasCount: PropTypes.number.isRequired,
canvasIndex: PropTypes.number.isRequired,
canvasLabel: PropTypes.string,
t: PropTypes.func,
};
import React, { Component } from 'react'; import React, { Component } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Typography from '@material-ui/core/Typography';
import ZoomControls from '../containers/ZoomControls'; import ZoomControls from '../containers/ZoomControls';
import ViewerInfo from '../containers/ViewerInfo';
import ViewerNavigation from '../containers/ViewerNavigation'; import ViewerNavigation from '../containers/ViewerNavigation';
import ns from '../config/css-ns'; import ns from '../config/css-ns';
...@@ -12,7 +12,7 @@ export class WindowCanvasNavigationControls extends Component { ...@@ -12,7 +12,7 @@ export class WindowCanvasNavigationControls extends Component {
/** */ /** */
render() { render() {
const { const {
canvases, canvasLabel, visible, window, canvases, visible, window,
} = this.props; } = this.props;
if (!visible) return (<></>); if (!visible) return (<></>);
...@@ -21,11 +21,7 @@ export class WindowCanvasNavigationControls extends Component { ...@@ -21,11 +21,7 @@ export class WindowCanvasNavigationControls extends Component {
<div className={ns('canvas-nav')}> <div className={ns('canvas-nav')}>
<ZoomControls windowId={window.id} /> <ZoomControls windowId={window.id} />
<ViewerNavigation window={window} canvases={canvases} /> <ViewerNavigation window={window} canvases={canvases} />
{ <ViewerInfo windowId={window.id} />
canvasLabel && (
<Typography variant="caption" className={ns('canvas-label')}>{canvasLabel}</Typography>
)
}
</div> </div>
); );
} }
...@@ -35,11 +31,9 @@ export class WindowCanvasNavigationControls extends Component { ...@@ -35,11 +31,9 @@ export class WindowCanvasNavigationControls extends Component {
WindowCanvasNavigationControls.propTypes = { WindowCanvasNavigationControls.propTypes = {
canvases: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types canvases: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types
window: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types window: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
canvasLabel: PropTypes.string,
visible: PropTypes.bool, visible: PropTypes.bool,
}; };
WindowCanvasNavigationControls.defaultProps = { WindowCanvasNavigationControls.defaultProps = {
canvasLabel: undefined,
visible: true, visible: true,
}; };
...@@ -10,6 +10,7 @@ export * from './NestedMenu'; ...@@ -10,6 +10,7 @@ export * from './NestedMenu';
export * from './OpenSeadragonViewer'; export * from './OpenSeadragonViewer';
export * from './SanitizedHtml'; export * from './SanitizedHtml';
export * from './ThumbnailNavigation'; export * from './ThumbnailNavigation';
export * from './ViewerInfo';
export * from './ViewerNavigation'; export * from './ViewerNavigation';
export * from './Window'; export * from './Window';
export * from './WindowList'; export * from './WindowList';
......
import { compose } from 'redux';
import { connect } from 'react-redux';
import { withTranslation } from 'react-i18next';
import { ViewerInfo } from '../components/ViewerInfo';
import { getCanvasLabel, getWindowManifest, getManifestCanvases } from '../state/selectors';
/**
* mapStateToProps - to hook up connect
* @memberof Window
* @private
*/
const mapStateToProps = (state, props) => {
const { windowId } = props;
const manifest = getWindowManifest(state, windowId);
const canvases = getManifestCanvases(manifest);
const { canvasIndex } = state.windows[windowId];
return {
canvasCount: canvases.length,
canvasIndex,
canvasLabel: getCanvasLabel(canvases[canvasIndex], canvasIndex),
};
};
const enhance = compose(
withTranslation(),
connect(mapStateToProps, null),
// further HOC go here
);
export default enhance(ViewerInfo);
...@@ -111,10 +111,19 @@ ...@@ -111,10 +111,19 @@
top: 12px; top: 12px;
} }
&-osd-navigation {
order: 1;
}
&-osd-info {
order: 2
}
&-canvas-nav { &-canvas-nav {
display: flex; display: flex;
justify-content: center;
flex-wrap: wrap; flex-wrap: wrap;
flex-direction: column;
justify-content: center;
text-align: center; text-align: center;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment