Remember last used scroll and spread modes

This commit is contained in:
Ryan Hendrickson 2018-05-14 23:10:33 -04:00
parent eaf14e5d47
commit c24bc29757

View File

@ -1029,6 +1029,8 @@ let PDFViewerApplication = {
scrollTop: '0', scrollTop: '0',
rotation: null, rotation: null,
sidebarView: SidebarView.NONE, sidebarView: SidebarView.NONE,
scrollMode: null,
spreadMode: null,
}).catch(() => { /* Unable to read from storage; ignoring errors. */ }); }).catch(() => { /* Unable to read from storage; ignoring errors. */ });
Promise.all([storePromise, pageModePromise]).then( Promise.all([storePromise, pageModePromise]).then(
@ -1038,6 +1040,8 @@ let PDFViewerApplication = {
('zoom=' + AppOptions.get('defaultZoomValue')) : null; ('zoom=' + AppOptions.get('defaultZoomValue')) : null;
let rotation = null; let rotation = null;
let sidebarView = AppOptions.get('sidebarViewOnLoad'); let sidebarView = AppOptions.get('sidebarViewOnLoad');
let scrollMode = null;
let spreadMode = null;
if (values.exists && AppOptions.get('showPreviousViewOnLoad')) { if (values.exists && AppOptions.get('showPreviousViewOnLoad')) {
hash = 'page=' + values.page + hash = 'page=' + values.page +
@ -1045,6 +1049,12 @@ let PDFViewerApplication = {
',' + values.scrollLeft + ',' + values.scrollTop; ',' + values.scrollLeft + ',' + values.scrollTop;
rotation = parseInt(values.rotation, 10); rotation = parseInt(values.rotation, 10);
sidebarView = sidebarView || (values.sidebarView | 0); sidebarView = sidebarView || (values.sidebarView | 0);
if (values.scrollMode !== null) {
scrollMode = values.scrollMode;
}
if (values.spreadMode !== null) {
spreadMode = values.spreadMode;
}
} }
if (pageMode && !AppOptions.get('disablePageMode')) { if (pageMode && !AppOptions.get('disablePageMode')) {
// Always let the user preference/history take precedence. // Always let the user preference/history take precedence.
@ -1054,12 +1064,16 @@ let PDFViewerApplication = {
hash, hash,
rotation, rotation,
sidebarView, sidebarView,
scrollMode,
spreadMode,
}; };
}).then(({ hash, rotation, sidebarView, }) => { }).then(({ hash, rotation, sidebarView, scrollMode, spreadMode, }) => {
initialParams.bookmark = this.initialBookmark; initialParams.bookmark = this.initialBookmark;
initialParams.hash = hash; initialParams.hash = hash;
this.setInitialView(hash, { rotation, sidebarView, }); this.setInitialView(hash, {
rotation, sidebarView, scrollMode, spreadMode,
});
// Make all navigation keys work on document load, // Make all navigation keys work on document load,
// unless the viewer is embedded in a web page. // unless the viewer is embedded in a web page.
@ -1227,12 +1241,20 @@ let PDFViewerApplication = {
}); });
}, },
setInitialView(storedHash, { rotation, sidebarView, } = {}) { setInitialView(storedHash, values = {}) {
let { rotation, sidebarView, scrollMode, spreadMode, } = values;
let setRotation = (angle) => { let setRotation = (angle) => {
if (isValidRotation(angle)) { if (isValidRotation(angle)) {
this.pdfViewer.pagesRotation = angle; this.pdfViewer.pagesRotation = angle;
} }
}; };
if (Number.isInteger(scrollMode)) {
this.pdfViewer.setScrollMode(scrollMode);
}
if (Number.isInteger(spreadMode)) {
this.pdfViewer.setSpreadMode(spreadMode);
}
this.isInitialViewSet = true; this.isInitialViewSet = true;
this.pdfSidebar.setInitialView(sidebarView); this.pdfSidebar.setInitialView(sidebarView);
@ -1386,7 +1408,9 @@ let PDFViewerApplication = {
eventBus.on('rotatecw', webViewerRotateCw); eventBus.on('rotatecw', webViewerRotateCw);
eventBus.on('rotateccw', webViewerRotateCcw); eventBus.on('rotateccw', webViewerRotateCcw);
eventBus.on('switchscrollmode', webViewerSwitchScrollMode); eventBus.on('switchscrollmode', webViewerSwitchScrollMode);
eventBus.on('scrollmodechanged', webViewerScrollModeChanged);
eventBus.on('switchspreadmode', webViewerSwitchSpreadMode); eventBus.on('switchspreadmode', webViewerSwitchSpreadMode);
eventBus.on('spreadmodechanged', webViewerSpreadModeChanged);
eventBus.on('documentproperties', webViewerDocumentProperties); eventBus.on('documentproperties', webViewerDocumentProperties);
eventBus.on('find', webViewerFind); eventBus.on('find', webViewerFind);
eventBus.on('findfromurlhash', webViewerFindFromUrlHash); eventBus.on('findfromurlhash', webViewerFindFromUrlHash);
@ -1454,7 +1478,9 @@ let PDFViewerApplication = {
eventBus.off('rotatecw', webViewerRotateCw); eventBus.off('rotatecw', webViewerRotateCw);
eventBus.off('rotateccw', webViewerRotateCcw); eventBus.off('rotateccw', webViewerRotateCcw);
eventBus.off('switchscrollmode', webViewerSwitchScrollMode); eventBus.off('switchscrollmode', webViewerSwitchScrollMode);
eventBus.off('scrollmodechanged', webViewerScrollModeChanged);
eventBus.off('switchspreadmode', webViewerSwitchSpreadMode); eventBus.off('switchspreadmode', webViewerSwitchSpreadMode);
eventBus.off('spreadmodechanged', webViewerSpreadModeChanged);
eventBus.off('documentproperties', webViewerDocumentProperties); eventBus.off('documentproperties', webViewerDocumentProperties);
eventBus.off('find', webViewerFind); eventBus.off('find', webViewerFind);
eventBus.off('findfromurlhash', webViewerFindFromUrlHash); eventBus.off('findfromurlhash', webViewerFindFromUrlHash);
@ -1850,6 +1876,22 @@ function webViewerUpdateViewarea(evt) {
PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading); PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading);
} }
function webViewerScrollModeChanged(evt) {
let store = PDFViewerApplication.store;
if (store && PDFViewerApplication.isInitialViewSet) {
// Only update the storage when the document has been loaded *and* rendered.
store.set('scrollMode', evt.mode).catch(function() { });
}
}
function webViewerSpreadModeChanged(evt) {
let store = PDFViewerApplication.store;
if (store && PDFViewerApplication.isInitialViewSet) {
// Only update the storage when the document has been loaded *and* rendered.
store.set('spreadMode', evt.mode).catch(function() { });
}
}
function webViewerResize() { function webViewerResize() {
let { pdfDocument, pdfViewer, } = PDFViewerApplication; let { pdfDocument, pdfViewer, } = PDFViewerApplication;
if (!pdfDocument) { if (!pdfDocument) {