Browse Source

PDF.js version 1.9.523 - See mozilla/pdf.js@1c9af00bee5070c43a4cf06ecd9a33307790aac7

master v1.9.523
pdfjsbot 8 years ago
parent
commit
e3950d1c6b
  1. 2
      bower.json
  2. 12
      build/pdf.combined.js
  3. 2
      build/pdf.combined.js.map
  4. 12
      build/pdf.js
  5. 2
      build/pdf.js.map
  6. 2
      build/pdf.min.js
  7. 4
      build/pdf.worker.js
  8. 2
      build/pdf.worker.js.map
  9. 4
      lib/display/api.js
  10. 4
      lib/display/global.js
  11. 4
      lib/pdf.js
  12. 4
      lib/pdf.worker.js
  13. 2
      lib/test/unit/jasmine-boot.js
  14. 56
      lib/test/unit/pdf_history_spec.js
  15. 92
      lib/test/unit/ui_utils_spec.js
  16. 61
      lib/web/app.js
  17. 23
      lib/web/interfaces.js
  18. 631
      lib/web/pdf_history.js
  19. 21
      lib/web/pdf_link_service.js
  20. 51
      lib/web/ui_utils.js
  21. 2
      package.json
  22. 697
      web/pdf_viewer.js
  23. 2
      web/pdf_viewer.js.map

2
bower.json

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
{
"name": "pdfjs-dist",
"version": "1.9.516",
"version": "1.9.523",
"main": [
"build/pdf.js",
"build/pdf.worker.js"

12
build/pdf.combined.js

@ -13446,8 +13446,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() { @@ -13446,8 +13446,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() {
}();
var version, build;
{
exports.version = version = '1.9.516';
exports.build = build = '336d26dd';
exports.version = version = '1.9.523';
exports.build = build = '1c9af00b';
}
exports.getDocument = getDocument;
exports.LoopbackPort = LoopbackPort;
@ -29210,8 +29210,8 @@ exports.SVGGraphics = SVGGraphics; @@ -29210,8 +29210,8 @@ exports.SVGGraphics = SVGGraphics;
"use strict";
var pdfjsVersion = '1.9.516';
var pdfjsBuild = '336d26dd';
var pdfjsVersion = '1.9.523';
var pdfjsBuild = '1c9af00b';
var pdfjsSharedUtil = __w_pdfjs_require__(0);
var pdfjsDisplayGlobal = __w_pdfjs_require__(98);
var pdfjsDisplayAPI = __w_pdfjs_require__(55);
@ -35073,8 +35073,8 @@ if (!_global_scope2.default.PDFJS) { @@ -35073,8 +35073,8 @@ if (!_global_scope2.default.PDFJS) {
}
var PDFJS = _global_scope2.default.PDFJS;
{
PDFJS.version = '1.9.516';
PDFJS.build = '336d26dd';
PDFJS.version = '1.9.523';
PDFJS.build = '1c9af00b';
}
PDFJS.pdfBug = false;
if (PDFJS.verbosity !== undefined) {

2
build/pdf.combined.js.map

File diff suppressed because one or more lines are too long

12
build/pdf.js

@ -4176,8 +4176,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() { @@ -4176,8 +4176,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() {
}();
var version, build;
{
exports.version = version = '1.9.516';
exports.build = build = '336d26dd';
exports.version = version = '1.9.523';
exports.build = build = '1c9af00b';
}
exports.getDocument = getDocument;
exports.LoopbackPort = LoopbackPort;
@ -7055,8 +7055,8 @@ exports.SVGGraphics = SVGGraphics; @@ -7055,8 +7055,8 @@ exports.SVGGraphics = SVGGraphics;
"use strict";
var pdfjsVersion = '1.9.516';
var pdfjsBuild = '336d26dd';
var pdfjsVersion = '1.9.523';
var pdfjsBuild = '1c9af00b';
var pdfjsSharedUtil = __w_pdfjs_require__(0);
var pdfjsDisplayGlobal = __w_pdfjs_require__(82);
var pdfjsDisplayAPI = __w_pdfjs_require__(48);
@ -12918,8 +12918,8 @@ if (!_global_scope2.default.PDFJS) { @@ -12918,8 +12918,8 @@ if (!_global_scope2.default.PDFJS) {
}
var PDFJS = _global_scope2.default.PDFJS;
{
PDFJS.version = '1.9.516';
PDFJS.build = '336d26dd';
PDFJS.version = '1.9.523';
PDFJS.build = '1c9af00b';
}
PDFJS.pdfBug = false;
if (PDFJS.verbosity !== undefined) {

2
build/pdf.js.map

File diff suppressed because one or more lines are too long

2
build/pdf.min.js vendored

File diff suppressed because one or more lines are too long

4
build/pdf.worker.js vendored

@ -24512,8 +24512,8 @@ exports.getUnicodeForGlyph = getUnicodeForGlyph; @@ -24512,8 +24512,8 @@ exports.getUnicodeForGlyph = getUnicodeForGlyph;
"use strict";
var pdfjsVersion = '1.9.516';
var pdfjsBuild = '336d26dd';
var pdfjsVersion = '1.9.523';
var pdfjsBuild = '1c9af00b';
var pdfjsCoreWorker = __w_pdfjs_require__(62);
exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler;

2
build/pdf.worker.js.map vendored

File diff suppressed because one or more lines are too long

4
lib/display/api.js

@ -1581,8 +1581,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() { @@ -1581,8 +1581,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() {
}();
var version, build;
{
exports.version = version = '1.9.516';
exports.build = build = '336d26dd';
exports.version = version = '1.9.523';
exports.build = build = '1c9af00b';
}
exports.getDocument = getDocument;
exports.LoopbackPort = LoopbackPort;

4
lib/display/global.js

@ -45,8 +45,8 @@ if (!_global_scope2.default.PDFJS) { @@ -45,8 +45,8 @@ if (!_global_scope2.default.PDFJS) {
}
var PDFJS = _global_scope2.default.PDFJS;
{
PDFJS.version = '1.9.516';
PDFJS.build = '336d26dd';
PDFJS.version = '1.9.523';
PDFJS.build = '1c9af00b';
}
PDFJS.pdfBug = false;
if (PDFJS.verbosity !== undefined) {

4
lib/pdf.js

@ -14,8 +14,8 @@ @@ -14,8 +14,8 @@
*/
'use strict';
var pdfjsVersion = '1.9.516';
var pdfjsBuild = '336d26dd';
var pdfjsVersion = '1.9.523';
var pdfjsBuild = '1c9af00b';
var pdfjsSharedUtil = require('./shared/util.js');
var pdfjsDisplayGlobal = require('./display/global.js');
var pdfjsDisplayAPI = require('./display/api.js');

4
lib/pdf.worker.js vendored

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
*/
'use strict';
var pdfjsVersion = '1.9.516';
var pdfjsBuild = '336d26dd';
var pdfjsVersion = '1.9.523';
var pdfjsBuild = '1c9af00b';
var pdfjsCoreWorker = require('./core/worker.js');
exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler;

2
lib/test/unit/jasmine-boot.js

@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
'use strict';
function initializePDFJS(callback) {
Promise.all(['pdfjs/display/global', 'pdfjs/display/api', 'pdfjs/display/network', 'pdfjs/display/fetch_stream', 'pdfjs-test/unit/annotation_spec', 'pdfjs-test/unit/api_spec', 'pdfjs-test/unit/bidi_spec', 'pdfjs-test/unit/cff_parser_spec', 'pdfjs-test/unit/cmap_spec', 'pdfjs-test/unit/colorspace_spec', 'pdfjs-test/unit/crypto_spec', 'pdfjs-test/unit/custom_spec', 'pdfjs-test/unit/display_svg_spec', 'pdfjs-test/unit/document_spec', 'pdfjs-test/unit/dom_utils_spec', 'pdfjs-test/unit/evaluator_spec', 'pdfjs-test/unit/fonts_spec', 'pdfjs-test/unit/function_spec', 'pdfjs-test/unit/metadata_spec', 'pdfjs-test/unit/murmurhash3_spec', 'pdfjs-test/unit/network_spec', 'pdfjs-test/unit/parser_spec', 'pdfjs-test/unit/primitives_spec', 'pdfjs-test/unit/stream_spec', 'pdfjs-test/unit/type1_parser_spec', 'pdfjs-test/unit/ui_utils_spec', 'pdfjs-test/unit/unicode_spec', 'pdfjs-test/unit/util_spec', 'pdfjs-test/unit/util_stream_spec'].map(function (moduleName) {
Promise.all(['pdfjs/display/global', 'pdfjs/display/api', 'pdfjs/display/network', 'pdfjs/display/fetch_stream', 'pdfjs-test/unit/annotation_spec', 'pdfjs-test/unit/api_spec', 'pdfjs-test/unit/bidi_spec', 'pdfjs-test/unit/cff_parser_spec', 'pdfjs-test/unit/cmap_spec', 'pdfjs-test/unit/colorspace_spec', 'pdfjs-test/unit/crypto_spec', 'pdfjs-test/unit/custom_spec', 'pdfjs-test/unit/display_svg_spec', 'pdfjs-test/unit/document_spec', 'pdfjs-test/unit/dom_utils_spec', 'pdfjs-test/unit/evaluator_spec', 'pdfjs-test/unit/fonts_spec', 'pdfjs-test/unit/function_spec', 'pdfjs-test/unit/metadata_spec', 'pdfjs-test/unit/murmurhash3_spec', 'pdfjs-test/unit/network_spec', 'pdfjs-test/unit/parser_spec', 'pdfjs-test/unit/pdf_history_spec', 'pdfjs-test/unit/primitives_spec', 'pdfjs-test/unit/stream_spec', 'pdfjs-test/unit/type1_parser_spec', 'pdfjs-test/unit/ui_utils_spec', 'pdfjs-test/unit/unicode_spec', 'pdfjs-test/unit/util_spec', 'pdfjs-test/unit/util_stream_spec'].map(function (moduleName) {
return SystemJS.import(moduleName);
})).then(function (modules) {
var displayGlobal = modules[0];

56
lib/test/unit/pdf_history_spec.js

@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
/* Copyright 2017 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
var _pdf_history = require('../../web/pdf_history');
describe('pdf_history', function () {
describe('isDestsEqual', function () {
var firstDest = [{
num: 1,
gen: 0
}, { name: 'XYZ' }, 0, 375, null];
var secondDest = [{
num: 5,
gen: 0
}, { name: 'XYZ' }, 0, 375, null];
var thirdDest = [{
num: 1,
gen: 0
}, { name: 'XYZ' }, 750, 0, null];
var fourthDest = [{
num: 1,
gen: 0
}, { name: 'XYZ' }, 0, 375, 1.0];
var fifthDest = [{
gen: 0,
num: 1
}, { name: 'XYZ' }, 0, 375, null];
it('should reject non-equal destination arrays', function () {
expect((0, _pdf_history.isDestsEqual)(firstDest, undefined)).toEqual(false);
expect((0, _pdf_history.isDestsEqual)(firstDest, [1, 2, 3, 4, 5])).toEqual(false);
expect((0, _pdf_history.isDestsEqual)(firstDest, secondDest)).toEqual(false);
expect((0, _pdf_history.isDestsEqual)(firstDest, thirdDest)).toEqual(false);
expect((0, _pdf_history.isDestsEqual)(firstDest, fourthDest)).toEqual(false);
});
it('should accept equal destination arrays', function () {
expect((0, _pdf_history.isDestsEqual)(firstDest, firstDest)).toEqual(true);
expect((0, _pdf_history.isDestsEqual)(firstDest, fifthDest)).toEqual(true);
var firstDestCopy = firstDest.slice();
expect(firstDest).not.toBe(firstDestCopy);
expect((0, _pdf_history.isDestsEqual)(firstDest, firstDestCopy)).toEqual(true);
});
});
});

92
lib/test/unit/ui_utils_spec.js

@ -193,4 +193,96 @@ describe('ui_utils', function () { @@ -193,4 +193,96 @@ describe('ui_utils', function () {
expect(count).toEqual(2);
});
});
describe('waitOnEventOrTimeout', function () {
var eventBus = void 0;
beforeAll(function (done) {
eventBus = new _ui_utils.EventBus();
done();
});
afterAll(function () {
eventBus = null;
});
it('should reject invalid parameters', function (done) {
var invalidTarget = (0, _ui_utils.waitOnEventOrTimeout)({
target: 'window',
name: 'DOMContentLoaded'
}).then(function () {
throw new Error('Should reject invalid parameters.');
}, function (reason) {
expect(reason instanceof Error).toEqual(true);
});
var invalidName = (0, _ui_utils.waitOnEventOrTimeout)({
target: eventBus,
name: ''
}).then(function () {
throw new Error('Should reject invalid parameters.');
}, function (reason) {
expect(reason instanceof Error).toEqual(true);
});
var invalidDelay = (0, _ui_utils.waitOnEventOrTimeout)({
target: eventBus,
name: 'pagerendered',
delay: -1000
}).then(function () {
throw new Error('Should reject invalid parameters.');
}, function (reason) {
expect(reason instanceof Error).toEqual(true);
});
Promise.all([invalidTarget, invalidName, invalidDelay]).then(done, done.fail);
});
it('should resolve on event, using the DOM', function (done) {
if ((0, _util.isNodeJS)()) {
pending('Document in not supported in Node.js.');
}
var button = document.createElement('button');
var buttonClicked = (0, _ui_utils.waitOnEventOrTimeout)({
target: button,
name: 'click',
delay: 10000
});
button.click();
buttonClicked.then(function (type) {
expect(type).toEqual(_ui_utils.WaitOnType.EVENT);
done();
}, done.fail);
});
it('should resolve on timeout, using the DOM', function (done) {
if ((0, _util.isNodeJS)()) {
pending('Document in not supported in Node.js.');
}
var button = document.createElement('button');
var buttonClicked = (0, _ui_utils.waitOnEventOrTimeout)({
target: button,
name: 'click',
delay: 10
});
buttonClicked.then(function (type) {
expect(type).toEqual(_ui_utils.WaitOnType.TIMEOUT);
done();
}, done.fail);
});
it('should resolve on event, using the EventBus', function (done) {
var pageRendered = (0, _ui_utils.waitOnEventOrTimeout)({
target: eventBus,
name: 'pagerendered',
delay: 10000
});
eventBus.dispatch('pagerendered');
pageRendered.then(function (type) {
expect(type).toEqual(_ui_utils.WaitOnType.EVENT);
done();
}, done.fail);
});
it('should resolve on timeout, using the EventBus', function (done) {
var pageRendered = (0, _ui_utils.waitOnEventOrTimeout)({
target: eventBus,
name: 'pagerendered',
delay: 10
});
pageRendered.then(function (type) {
expect(type).toEqual(_ui_utils.WaitOnType.TIMEOUT);
done();
}, done.fail);
});
});
});

61
lib/web/app.js

@ -96,7 +96,6 @@ var DefaultExternalServices = { @@ -96,7 +96,6 @@ var DefaultExternalServices = {
};
var PDFViewerApplication = {
initialBookmark: document.location.hash.substring(1),
initialDestination: null,
initialized: false,
fellback: false,
appConfig: null,
@ -649,19 +648,14 @@ var PDFViewerApplication = { @@ -649,19 +648,14 @@ var PDFViewerApplication = {
firstPagePromise.then(function (pdfPage) {
_this6.loadingBar.setWidth(_this6.appConfig.viewerContainer);
if (!_pdf.PDFJS.disableHistory && !_this6.isViewerEmbedded) {
if (!_this6.viewerPrefs['showPreviousViewOnLoad']) {
_this6.pdfHistory.clearHistoryState();
}
_this6.pdfHistory.initialize(_this6.documentFingerprint);
if (_this6.pdfHistory.initialDestination) {
_this6.initialDestination = _this6.pdfHistory.initialDestination;
} else if (_this6.pdfHistory.initialBookmark) {
var resetHistory = !_this6.viewerPrefs['showPreviousViewOnLoad'];
_this6.pdfHistory.initialize(id, resetHistory);
if (_this6.pdfHistory.initialBookmark) {
_this6.initialBookmark = _this6.pdfHistory.initialBookmark;
}
}
var initialParams = {
destination: _this6.initialDestination,
bookmark: _this6.initialBookmark,
bookmark: null,
hash: null
};
var storePromise = store.getMultiple({
@ -695,20 +689,20 @@ var PDFViewerApplication = { @@ -695,20 +689,20 @@ var PDFViewerApplication = {
var hash = _ref4.hash,
sidebarView = _ref4.sidebarView;
_this6.setInitialView(hash, { sidebarView: sidebarView });
initialParams.bookmark = _this6.initialBookmark;
initialParams.hash = hash;
_this6.setInitialView(hash, { sidebarView: sidebarView });
if (!_this6.isViewerEmbedded) {
pdfViewer.focus();
}
return pagesPromise;
}).then(function () {
if (!initialParams.destination && !initialParams.bookmark && !initialParams.hash) {
if (!initialParams.bookmark && !initialParams.hash) {
return;
}
if (pdfViewer.hasEqualPageSizes) {
return;
}
_this6.initialDestination = initialParams.destination;
_this6.initialBookmark = initialParams.bookmark;
pdfViewer.currentScaleValue = pdfViewer.currentScaleValue;
_this6.setInitialView(initialParams.hash);
@ -798,12 +792,8 @@ var PDFViewerApplication = { @@ -798,12 +792,8 @@ var PDFViewerApplication = {
this.isInitialViewSet = true;
this.pdfSidebar.setInitialView(sidebarView);
if (this.initialDestination) {
this.pdfLinkService.navigateTo(this.initialDestination);
this.initialDestination = null;
} else if (this.initialBookmark) {
if (this.initialBookmark) {
this.pdfLinkService.setHash(this.initialBookmark);
this.pdfHistory.push({ hash: this.initialBookmark }, true);
this.initialBookmark = null;
} else if (storedHash) {
this.pdfLinkService.setHash(storedHash);
@ -1265,7 +1255,6 @@ function webViewerUpdateViewarea(evt) { @@ -1265,7 +1255,6 @@ function webViewerUpdateViewarea(evt) {
var href = PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams);
PDFViewerApplication.appConfig.toolbar.viewBookmark.href = href;
PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href = href;
PDFViewerApplication.pdfHistory.updateCurrentBookmark(location.pdfOpenParams, location.pageNumber);
var currentPage = PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1);
var loading = currentPage.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED;
PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading);
@ -1284,16 +1273,14 @@ function webViewerResize() { @@ -1284,16 +1273,14 @@ function webViewerResize() {
pdfViewer.update();
}
function webViewerHashchange(evt) {
if (PDFViewerApplication.pdfHistory.isHashChangeUnlocked) {
var hash = evt.hash;
if (!hash) {
return;
}
if (!PDFViewerApplication.isInitialViewSet) {
PDFViewerApplication.initialBookmark = hash;
} else {
PDFViewerApplication.pdfLinkService.setHash(hash);
}
var hash = evt.hash;
if (!hash) {
return;
}
if (!PDFViewerApplication.isInitialViewSet) {
PDFViewerApplication.initialBookmark = hash;
} else if (!PDFViewerApplication.pdfHistory.popStateInProgress) {
PDFViewerApplication.pdfLinkService.setHash(hash);
}
}
var webViewerFileInputChange = void 0;
@ -1659,22 +1646,6 @@ function webViewerKeyDown(evt) { @@ -1659,22 +1646,6 @@ function webViewerKeyDown(evt) {
ensureViewerFocused = true;
}
}
if (cmd === 2) {
switch (evt.keyCode) {
case 37:
if (isViewerInPresentationMode) {
PDFViewerApplication.pdfHistory.back();
handled = true;
}
break;
case 39:
if (isViewerInPresentationMode) {
PDFViewerApplication.pdfHistory.forward();
handled = true;
}
break;
}
}
if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) {
pdfViewer.focus();
}

23
lib/web/interfaces.js

@ -63,17 +63,26 @@ var IPDFHistory = function () { @@ -63,17 +63,26 @@ var IPDFHistory = function () {
}
_createClass(IPDFHistory, [{
key: 'forward',
value: function forward() {}
key: 'initialize',
value: function initialize(fingerprint) {
var resetHistory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
}
}, {
key: 'push',
value: function push(_ref2) {
var namedDest = _ref2.namedDest,
explicitDest = _ref2.explicitDest,
pageNumber = _ref2.pageNumber;
}
}, {
key: 'pushCurrentPosition',
value: function pushCurrentPosition() {}
}, {
key: 'back',
value: function back() {}
}, {
key: 'push',
value: function push(params) {}
}, {
key: 'updateNextHashParam',
value: function updateNextHashParam(hash) {}
key: 'forward',
value: function forward() {}
}]);
return IPDFHistory;

631
lib/web/pdf_history.js

@ -17,299 +17,418 @@ @@ -17,299 +17,418 @@
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.PDFHistory = undefined;
exports.isDestsEqual = exports.PDFHistory = undefined;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _ui_utils = require('./ui_utils');
var _dom_events = require('./dom_events');
function PDFHistory(options) {
this.linkService = options.linkService;
this.eventBus = options.eventBus || (0, _dom_events.getGlobalEventBus)();
this.initialized = false;
this.initialDestination = null;
this.initialBookmark = null;
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var HASH_CHANGE_TIMEOUT = 1000;
var POSITION_UPDATED_THRESHOLD = 50;
var UPDATE_VIEWAREA_TIMEOUT = 2000;
function getCurrentHash() {
return document.location.hash;
}
PDFHistory.prototype = {
initialize: function pdfHistoryInitialize(fingerprint) {
this.initialized = true;
this.reInitialized = false;
this.allowHashChange = true;
this.historyUnlocked = true;
this.isViewerInPresentationMode = false;
this.previousHash = window.location.hash.substring(1);
this.currentBookmark = '';
this.currentPage = 0;
this.updatePreviousBookmark = false;
this.previousBookmark = '';
this.previousPage = 0;
this.nextHashParam = '';
this.fingerprint = fingerprint;
this.currentUid = this.uid = 0;
this.current = {};
var state = window.history.state;
if (this._isStateObjectDefined(state)) {
if (state.target.dest) {
this.initialDestination = state.target.dest;
} else {
this.initialBookmark = state.target.hash;
function parseCurrentHash(linkService) {
var hash = unescape(getCurrentHash()).substring(1);
var params = (0, _ui_utils.parseQueryString)(hash);
var page = params.page | 0;
if (!(Number.isInteger(page) && page > 0 && page <= linkService.pagesCount)) {
page = null;
}
return {
hash: hash,
page: page
};
}
var PDFHistory = function () {
function PDFHistory(_ref) {
var _this = this;
var linkService = _ref.linkService,
eventBus = _ref.eventBus;
_classCallCheck(this, PDFHistory);
this.linkService = linkService;
this.eventBus = eventBus || (0, _dom_events.getGlobalEventBus)();
this.initialized = false;
this.initialBookmark = null;
this._boundEvents = Object.create(null);
this._isViewerInPresentationMode = false;
this._isPagesLoaded = false;
this.eventBus.on('presentationmodechanged', function (evt) {
_this._isViewerInPresentationMode = evt.active || evt.switchInProgress;
});
this.eventBus.on('pagesloaded', function (evt) {
_this._isPagesLoaded = !!evt.pagesCount;
});
}
_createClass(PDFHistory, [{
key: 'initialize',
value: function initialize(fingerprint) {
var resetHistory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (!fingerprint || typeof fingerprint !== 'string') {
console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.');
return;
}
var reInitialized = this.initialized && this.fingerprint !== fingerprint;
this.fingerprint = fingerprint;
if (!this.initialized) {
this._bindEvents();
}
var state = window.history.state;
this.initialized = true;
this.initialBookmark = null;
this._popStateInProgress = false;
this._blockHashChange = 0;
this._currentHash = getCurrentHash();
this._numPositionUpdates = 0;
this._currentUid = this._uid = 0;
this._destination = null;
this._position = null;
if (!this._isValidState(state) || resetHistory) {
var _parseCurrentHash = parseCurrentHash(this.linkService),
hash = _parseCurrentHash.hash,
page = _parseCurrentHash.page;
if (!hash || reInitialized || resetHistory) {
this._pushOrReplaceState(null, true);
return;
}
this._pushOrReplaceState({
hash: hash,
page: page
}, true);
return;
}
this.currentUid = state.uid;
this.uid = state.uid + 1;
this.current = state.target;
} else {
if (state && state.fingerprint && this.fingerprint !== state.fingerprint) {
this.reInitialized = true;
var destination = state.destination;
this._updateInternalState(destination, state.uid, true);
if (destination.dest) {
this.initialBookmark = JSON.stringify(destination.dest);
this._destination.page = null;
} else if (destination.hash) {
this.initialBookmark = destination.hash;
} else if (destination.page) {
this.initialBookmark = 'page=' + destination.page;
}
this._pushOrReplaceState({ fingerprint: this.fingerprint }, true);
}
var self = this;
window.addEventListener('popstate', function pdfHistoryPopstate(evt) {
if (!self.historyUnlocked) {
}, {
key: 'push',
value: function push(_ref2) {
var namedDest = _ref2.namedDest,
explicitDest = _ref2.explicitDest,
pageNumber = _ref2.pageNumber;
if (!this.initialized) {
return;
}
if (evt.state) {
self._goTo(evt.state);
if (namedDest && typeof namedDest !== 'string' || !(explicitDest instanceof Array) || !(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.linkService.pagesCount)) {
console.error('PDFHistory.push: Invalid parameters.');
return;
}
if (self.uid === 0) {
var previousParams = self.previousHash && self.currentBookmark && self.previousHash !== self.currentBookmark ? {
hash: self.currentBookmark,
page: self.currentPage
} : { page: 1 };
replacePreviousHistoryState(previousParams, function () {
updateHistoryWithCurrentHash();
});
} else {
updateHistoryWithCurrentHash();
var hash = namedDest || JSON.stringify(explicitDest);
if (!hash) {
return;
}
});
function updateHistoryWithCurrentHash() {
self.previousHash = window.location.hash.slice(1);
self._pushToHistory({ hash: self.previousHash }, false, true);
self._updatePreviousBookmark();
}
function replacePreviousHistoryState(params, callback) {
self.historyUnlocked = false;
self.allowHashChange = false;
window.addEventListener('popstate', rewriteHistoryAfterBack);
history.back();
function rewriteHistoryAfterBack() {
window.removeEventListener('popstate', rewriteHistoryAfterBack);
window.addEventListener('popstate', rewriteHistoryAfterForward);
self._pushToHistory(params, false, true);
history.forward();
}
function rewriteHistoryAfterForward() {
window.removeEventListener('popstate', rewriteHistoryAfterForward);
self.allowHashChange = true;
self.historyUnlocked = true;
callback();
var forceReplace = false;
if (this._destination && (this._destination.hash === hash || isDestsEqual(this._destination.dest, explicitDest))) {
if (this._destination.page) {
return;
}
forceReplace = true;
}
if (this._popStateInProgress && !forceReplace) {
return;
}
this._pushOrReplaceState({
dest: explicitDest,
hash: hash,
page: pageNumber
}, forceReplace);
}
function pdfHistoryBeforeUnload() {
var previousParams = self._getPreviousParams(null, true);
if (previousParams) {
var replacePrevious = !self.current.dest && self.current.hash !== self.previousHash;
self._pushToHistory(previousParams, false, replacePrevious);
self._updatePreviousBookmark();
}
window.removeEventListener('beforeunload', pdfHistoryBeforeUnload);
}
window.addEventListener('beforeunload', pdfHistoryBeforeUnload);
window.addEventListener('pageshow', function pdfHistoryPageShow(evt) {
window.addEventListener('beforeunload', pdfHistoryBeforeUnload);
});
self.eventBus.on('presentationmodechanged', function (e) {
self.isViewerInPresentationMode = e.active;
});
},
clearHistoryState: function pdfHistory_clearHistoryState() {
this._pushOrReplaceState(null, true);
},
_isStateObjectDefined: function pdfHistory_isStateObjectDefined(state) {
return state && state.uid >= 0 && state.fingerprint && this.fingerprint === state.fingerprint && state.target && state.target.hash ? true : false;
},
_pushOrReplaceState: function pdfHistory_pushOrReplaceState(stateObj, replace) {
if (replace) {
window.history.replaceState(stateObj, '', document.URL);
} else {
window.history.pushState(stateObj, '', document.URL);
}
},
get isHashChangeUnlocked() {
if (!this.initialized) {
return true;
}
return this.allowHashChange;
},
_updatePreviousBookmark: function pdfHistory_updatePreviousBookmark() {
if (this.updatePreviousBookmark && this.currentBookmark && this.currentPage) {
this.previousBookmark = this.currentBookmark;
this.previousPage = this.currentPage;
this.updatePreviousBookmark = false;
}
},
updateCurrentBookmark: function pdfHistoryUpdateCurrentBookmark(bookmark, pageNum) {
if (this.initialized) {
this.currentBookmark = bookmark.substring(1);
this.currentPage = pageNum | 0;
this._updatePreviousBookmark();
}
},
updateNextHashParam: function pdfHistoryUpdateNextHashParam(param) {
if (this.initialized) {
this.nextHashParam = param;
}
},
push: function pdfHistoryPush(params, isInitialBookmark) {
if (!(this.initialized && this.historyUnlocked)) {
return;
}
if (params.dest && !params.hash) {
params.hash = this.current.hash && this.current.dest && this.current.dest === params.dest ? this.current.hash : this.linkService.getDestinationHash(params.dest).split('#')[1];
}
if (params.page) {
params.page |= 0;
}, {
key: 'pushCurrentPosition',
value: function pushCurrentPosition() {
if (!this.initialized || this._popStateInProgress) {
return;
}
this._tryPushCurrentPosition();
}
if (isInitialBookmark) {
var target = window.history.state.target;
if (!target) {
this._pushToHistory(params, false);
this.previousHash = window.location.hash.substring(1);
}, {
key: 'back',
value: function back() {
if (!this.initialized || this._popStateInProgress) {
return;
}
this.updatePreviousBookmark = this.nextHashParam ? false : true;
if (target) {
this._updatePreviousBookmark();
var state = window.history.state;
if (this._isValidState(state) && state.uid > 0) {
window.history.back();
}
return;
}
if (this.nextHashParam) {
if (this.nextHashParam === params.hash) {
this.nextHashParam = null;
this.updatePreviousBookmark = true;
}, {
key: 'forward',
value: function forward() {
if (!this.initialized || this._popStateInProgress) {
return;
}
this.nextHashParam = null;
var state = window.history.state;
if (this._isValidState(state) && state.uid < this._uid - 1) {
window.history.forward();
}
}
if (params.hash) {
if (this.current.hash) {
if (this.current.hash !== params.hash) {
this._pushToHistory(params, true);
} else {
if (!this.current.page && params.page) {
this._pushToHistory(params, false, true);
}
this.updatePreviousBookmark = true;
}
}, {
key: '_pushOrReplaceState',
value: function _pushOrReplaceState(destination) {
var forceReplace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var shouldReplace = forceReplace || !this._destination;
var newState = {
fingerprint: this.fingerprint,
uid: shouldReplace ? this._currentUid : this._uid,
destination: destination
};
this._updateInternalState(destination, newState.uid);
if (shouldReplace) {
window.history.replaceState(newState, '', document.URL);
} else {
this._pushToHistory(params, true);
window.history.pushState(newState, '', document.URL);
}
} else if (this.current.page && params.page && this.current.page !== params.page) {
this._pushToHistory(params, true);
}
},
_getPreviousParams: function pdfHistory_getPreviousParams(onlyCheckPage, beforeUnload) {
if (!(this.currentBookmark && this.currentPage)) {
return null;
} else if (this.updatePreviousBookmark) {
this.updatePreviousBookmark = false;
}
if (this.uid > 0 && !(this.previousBookmark && this.previousPage)) {
return null;
}
if (!this.current.dest && !onlyCheckPage || beforeUnload) {
if (this.previousBookmark === this.currentBookmark) {
return null;
}, {
key: '_tryPushCurrentPosition',
value: function _tryPushCurrentPosition() {
var temporary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (!this._position) {
return;
}
} else if (this.current.page || onlyCheckPage) {
if (this.previousPage === this.currentPage) {
return null;
var position = this._position;
if (temporary) {
position = (0, _ui_utils.cloneObj)(this._position);
position.temporary = true;
}
} else {
return null;
}
var params = {
hash: this.currentBookmark,
page: this.currentPage
};
if (this.isViewerInPresentationMode) {
params.hash = null;
}
return params;
},
_stateObj: function pdfHistory_stateObj(params) {
return {
fingerprint: this.fingerprint,
uid: this.uid,
target: params
};
},
_pushToHistory: function pdfHistory_pushToHistory(params, addPrevious, overwrite) {
if (!this.initialized) {
return;
if (!this._destination) {
this._pushOrReplaceState(position);
return;
}
if (this._destination.temporary) {
this._pushOrReplaceState(position, true);
return;
}
if (this._destination.hash === position.hash) {
return;
}
if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) {
return;
}
var forceReplace = false;
if (this._destination.page === position.first || this._destination.page === position.page) {
if (this._destination.dest || !this._destination.first) {
return;
}
forceReplace = true;
}
this._pushOrReplaceState(position, forceReplace);
}
if (!params.hash && params.page) {
params.hash = 'page=' + params.page;
}, {
key: '_isValidState',
value: function _isValidState(state) {
if (!state) {
return false;
}
if (state.fingerprint !== this.fingerprint) {
return false;
}
if (!Number.isInteger(state.uid) || state.uid < 0) {
return false;
}
if (state.destination === null || _typeof(state.destination) !== 'object') {
return false;
}
return true;
}
if (addPrevious && !overwrite) {
var previousParams = this._getPreviousParams();
if (previousParams) {
var replacePrevious = !this.current.dest && this.current.hash !== this.previousHash;
this._pushToHistory(previousParams, false, replacePrevious);
}, {
key: '_updateInternalState',
value: function _updateInternalState(destination, uid) {
var removeTemporary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (removeTemporary && destination && destination.temporary) {
delete destination.temporary;
}
this._destination = destination;
this._currentUid = uid;
this._uid = this._currentUid + 1;
this._numPositionUpdates = 0;
}
this._pushOrReplaceState(this._stateObj(params), overwrite || this.uid === 0);
this.currentUid = this.uid++;
this.current = params;
this.updatePreviousBookmark = true;
},
_goTo: function pdfHistory_goTo(state) {
if (!(this.initialized && this.historyUnlocked && this._isStateObjectDefined(state))) {
return;
}, {
key: '_updateViewarea',
value: function _updateViewarea(_ref3) {
var _this2 = this;
var location = _ref3.location;
if (this._updateViewareaTimeout) {
clearTimeout(this._updateViewareaTimeout);
this._updateViewareaTimeout = null;
}
this._position = {
hash: this._isViewerInPresentationMode ? 'page=' + location.pageNumber : location.pdfOpenParams.substring(1),
page: this.linkService.page,
first: location.pageNumber
};
if (this._popStateInProgress) {
return;
}
if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) {
this._numPositionUpdates++;
}
if (UPDATE_VIEWAREA_TIMEOUT > 0) {
this._updateViewareaTimeout = setTimeout(function () {
if (!_this2._popStateInProgress) {
_this2._tryPushCurrentPosition(true);
}
_this2._updateViewareaTimeout = null;
}, UPDATE_VIEWAREA_TIMEOUT);
}
}
if (!this.reInitialized && state.uid < this.currentUid) {
var previousParams = this._getPreviousParams(true);
if (previousParams) {
this._pushToHistory(this.current, false);
this._pushToHistory(previousParams, false);
this.currentUid = state.uid;
window.history.back();
}, {
key: '_popState',
value: function _popState(_ref4) {
var _this3 = this;
var state = _ref4.state;
var newHash = getCurrentHash(),
hashChanged = this._currentHash !== newHash;
this._currentHash = newHash;
if (!state || false) {
this._currentUid = this._uid;
var _parseCurrentHash2 = parseCurrentHash(this.linkService),
hash = _parseCurrentHash2.hash,
page = _parseCurrentHash2.page;
this._pushOrReplaceState({
hash: hash,
page: page
}, true);
return;
}
if (!this._isValidState(state)) {
return;
}
this._popStateInProgress = true;
if (hashChanged) {
this._blockHashChange++;
(0, _ui_utils.waitOnEventOrTimeout)({
target: window,
name: 'hashchange',
delay: HASH_CHANGE_TIMEOUT
}).then(function () {
_this3._blockHashChange--;
});
}
if (state.uid < this._currentUid && this._position && this._destination) {
var shouldGoBack = false;
if (this._destination.temporary) {
this._pushOrReplaceState(this._position);
shouldGoBack = true;
} else if (this._destination.page && this._destination.page !== this._position.first && this._destination.page !== this._position.page) {
this._pushOrReplaceState(this._destination);
this._pushOrReplaceState(this._position);
shouldGoBack = true;
}
if (shouldGoBack) {
this._currentUid = state.uid;
window.history.back();
return;
}
}
var destination = state.destination;
this._updateInternalState(destination, state.uid, true);
if (destination.dest) {
this.linkService.navigateTo(destination.dest);
} else if (destination.hash) {
this.linkService.setHash(destination.hash);
} else if (destination.page) {
this.linkService.page = destination.page;
}
Promise.resolve().then(function () {
_this3._popStateInProgress = false;
});
}
}, {
key: '_bindEvents',
value: function _bindEvents() {
var _this4 = this;
var _boundEvents = this._boundEvents,
eventBus = this.eventBus;
_boundEvents.updateViewarea = this._updateViewarea.bind(this);
_boundEvents.popState = this._popState.bind(this);
_boundEvents.pageHide = function (evt) {
if (!_this4._destination) {
_this4._tryPushCurrentPosition();
}
};
eventBus.on('updateviewarea', _boundEvents.updateViewarea);
window.addEventListener('popstate', _boundEvents.popState);
window.addEventListener('pagehide', _boundEvents.pageHide);
}
this.historyUnlocked = false;
if (state.target.dest) {
this.linkService.navigateTo(state.target.dest);
} else {
this.linkService.setHash(state.target.hash);
}, {
key: 'popStateInProgress',
get: function get() {
return this.initialized && (this._popStateInProgress || this._blockHashChange > 0);
}
this.currentUid = state.uid;
if (state.uid > this.uid) {
this.uid = state.uid;
}]);
return PDFHistory;
}();
function isDestsEqual(firstDest, secondDest) {
function isEntryEqual(first, second) {
if ((typeof first === 'undefined' ? 'undefined' : _typeof(first)) !== (typeof second === 'undefined' ? 'undefined' : _typeof(second))) {
return false;
}
this.current = state.target;
this.updatePreviousBookmark = true;
var currentHash = window.location.hash.substring(1);
if (this.previousHash !== currentHash) {
this.allowHashChange = false;
if (first instanceof Array || second instanceof Array) {
return false;
}
this.previousHash = currentHash;
this.historyUnlocked = true;
},
back: function pdfHistoryBack() {
this.go(-1);
},
forward: function pdfHistoryForward() {
this.go(1);
},
go: function pdfHistoryGo(direction) {
if (this.initialized && this.historyUnlocked) {
var state = window.history.state;
if (direction === -1 && state && state.uid > 0) {
window.history.back();
} else if (direction === 1 && state && state.uid < this.uid - 1) {
window.history.forward();
if (first !== null && (typeof first === 'undefined' ? 'undefined' : _typeof(first)) === 'object' && second !== null) {
if (Object.keys(first).length !== Object.keys(second).length) {
return false;
}
for (var key in first) {
if (!isEntryEqual(first[key], second[key])) {
return false;
}
}
return true;
}
return first === second || Number.isNaN(first) && Number.isNaN(second);
}
if (!(firstDest instanceof Array && secondDest instanceof Array)) {
return false;
}
if (firstDest.length !== secondDest.length) {
return false;
}
};
exports.PDFHistory = PDFHistory;
for (var i = 0, ii = firstDest.length; i < ii; i++) {
if (!isEntryEqual(firstDest[i], secondDest[i])) {
return false;
}
}
return true;
}
exports.PDFHistory = PDFHistory;
exports.isDestsEqual = isDestsEqual;

21
lib/web/pdf_link_service.js

@ -96,17 +96,18 @@ var PDFLinkService = function () { @@ -96,17 +96,18 @@ var PDFLinkService = function () {
console.error('PDFLinkService.navigateTo: "' + pageNumber + '" is not ' + ('a valid page number, for dest="' + dest + '".'));
return;
}
_this.pdfViewer.scrollPageIntoView({
pageNumber: pageNumber,
destArray: explicitDest
});
if (_this.pdfHistory) {
_this.pdfHistory.pushCurrentPosition();
_this.pdfHistory.push({
dest: explicitDest,
hash: namedDest,
page: pageNumber
namedDest: namedDest,
explicitDest: explicitDest,
pageNumber: pageNumber
});
}
_this.pdfViewer.scrollPageIntoView({
pageNumber: pageNumber,
destArray: explicitDest
});
};
new Promise(function (resolve, reject) {
if (typeof dest === 'string') {
@ -162,9 +163,6 @@ var PDFLinkService = function () { @@ -162,9 +163,6 @@ var PDFLinkService = function () {
});
}
if ('nameddest' in params) {
if (this.pdfHistory) {
this.pdfHistory.updateNextHashParam(params.nameddest);
}
this.navigateTo(params.nameddest);
return;
}
@ -221,9 +219,6 @@ var PDFLinkService = function () { @@ -221,9 +219,6 @@ var PDFLinkService = function () {
}
} catch (ex) {}
if (typeof dest === 'string' || isValidExplicitDestination(dest)) {
if (this.pdfHistory) {
this.pdfHistory.updateNextHashParam(dest);
}
this.navigateTo(dest);
return;
}

51
lib/web/ui_utils.js

@ -17,10 +17,12 @@ @@ -17,10 +17,12 @@
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.localized = exports.animationStarted = exports.normalizeWheelEventDelta = exports.binarySearchFirstItem = exports.watchScroll = exports.scrollIntoView = exports.getOutputScale = exports.approximateFraction = exports.roundToDivide = exports.getVisibleElements = exports.parseQueryString = exports.noContextMenuHandler = exports.getPDFFileNameFromURL = exports.ProgressBar = exports.EventBus = exports.NullL10n = exports.mozL10n = exports.RendererType = exports.cloneObj = exports.VERTICAL_PADDING = exports.SCROLLBAR_PADDING = exports.MAX_AUTO_SCALE = exports.UNKNOWN_SCALE = exports.MAX_SCALE = exports.MIN_SCALE = exports.DEFAULT_SCALE = exports.DEFAULT_SCALE_VALUE = exports.CSS_UNITS = undefined;
exports.waitOnEventOrTimeout = exports.WaitOnType = exports.localized = exports.animationStarted = exports.normalizeWheelEventDelta = exports.binarySearchFirstItem = exports.watchScroll = exports.scrollIntoView = exports.getOutputScale = exports.approximateFraction = exports.roundToDivide = exports.getVisibleElements = exports.parseQueryString = exports.noContextMenuHandler = exports.getPDFFileNameFromURL = exports.ProgressBar = exports.EventBus = exports.NullL10n = exports.mozL10n = exports.RendererType = exports.cloneObj = exports.VERTICAL_PADDING = exports.SCROLLBAR_PADDING = exports.MAX_AUTO_SCALE = exports.UNKNOWN_SCALE = exports.MAX_SCALE = exports.MIN_SCALE = exports.DEFAULT_SCALE = exports.DEFAULT_SCALE_VALUE = exports.CSS_UNITS = undefined;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _pdf = require('../pdf');
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@ -324,6 +326,41 @@ function cloneObj(obj) { @@ -324,6 +326,41 @@ function cloneObj(obj) {
}
return result;
}
var WaitOnType = {
EVENT: 'event',
TIMEOUT: 'timeout'
};
function waitOnEventOrTimeout(_ref) {
var target = _ref.target,
name = _ref.name,
_ref$delay = _ref.delay,
delay = _ref$delay === undefined ? 0 : _ref$delay;
if ((typeof target === 'undefined' ? 'undefined' : _typeof(target)) !== 'object' || !(name && typeof name === 'string') || !(Number.isInteger(delay) && delay >= 0)) {
return Promise.reject(new Error('waitOnEventOrTimeout - invalid paramaters.'));
}
var capability = (0, _pdf.createPromiseCapability)();
function handler(type) {
if (target instanceof EventBus) {
target.off(name, eventHandler);
} else {
target.removeEventListener(name, eventHandler);
}
if (timeout) {
clearTimeout(timeout);
}
capability.resolve(type);
}
var eventHandler = handler.bind(null, WaitOnType.EVENT);
if (target instanceof EventBus) {
target.on(name, eventHandler);
} else {
target.addEventListener(name, eventHandler);
}
var timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT);
var timeout = setTimeout(timeoutHandler, delay);
return capability.promise;
}
var animationStarted = new Promise(function (resolve) {
window.requestAnimationFrame(resolve);
});
@ -380,10 +417,10 @@ function clamp(v, min, max) { @@ -380,10 +417,10 @@ function clamp(v, min, max) {
var ProgressBar = function () {
function ProgressBar(id) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
height = _ref.height,
width = _ref.width,
units = _ref.units;
var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
height = _ref2.height,
width = _ref2.width,
units = _ref2.units;
_classCallCheck(this, ProgressBar);
@ -483,4 +520,6 @@ exports.watchScroll = watchScroll; @@ -483,4 +520,6 @@ exports.watchScroll = watchScroll;
exports.binarySearchFirstItem = binarySearchFirstItem;
exports.normalizeWheelEventDelta = normalizeWheelEventDelta;
exports.animationStarted = animationStarted;
exports.localized = localized;
exports.localized = localized;
exports.WaitOnType = WaitOnType;
exports.waitOnEventOrTimeout = waitOnEventOrTimeout;

2
package.json

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
{
"name": "pdfjs-dist",
"version": "1.9.516",
"version": "1.9.523",
"main": "build/pdf.js",
"description": "Generic build of Mozilla's PDF.js library.",
"keywords": [

697
web/pdf_viewer.js

@ -113,10 +113,12 @@ module.exports = pdfjsLib; @@ -113,10 +113,12 @@ module.exports = pdfjsLib;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.localized = exports.animationStarted = exports.normalizeWheelEventDelta = exports.binarySearchFirstItem = exports.watchScroll = exports.scrollIntoView = exports.getOutputScale = exports.approximateFraction = exports.roundToDivide = exports.getVisibleElements = exports.parseQueryString = exports.noContextMenuHandler = exports.getPDFFileNameFromURL = exports.ProgressBar = exports.EventBus = exports.NullL10n = exports.mozL10n = exports.RendererType = exports.cloneObj = exports.VERTICAL_PADDING = exports.SCROLLBAR_PADDING = exports.MAX_AUTO_SCALE = exports.UNKNOWN_SCALE = exports.MAX_SCALE = exports.MIN_SCALE = exports.DEFAULT_SCALE = exports.DEFAULT_SCALE_VALUE = exports.CSS_UNITS = undefined;
exports.waitOnEventOrTimeout = exports.WaitOnType = exports.localized = exports.animationStarted = exports.normalizeWheelEventDelta = exports.binarySearchFirstItem = exports.watchScroll = exports.scrollIntoView = exports.getOutputScale = exports.approximateFraction = exports.roundToDivide = exports.getVisibleElements = exports.parseQueryString = exports.noContextMenuHandler = exports.getPDFFileNameFromURL = exports.ProgressBar = exports.EventBus = exports.NullL10n = exports.mozL10n = exports.RendererType = exports.cloneObj = exports.VERTICAL_PADDING = exports.SCROLLBAR_PADDING = exports.MAX_AUTO_SCALE = exports.UNKNOWN_SCALE = exports.MAX_SCALE = exports.MIN_SCALE = exports.DEFAULT_SCALE = exports.DEFAULT_SCALE_VALUE = exports.CSS_UNITS = undefined;
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _pdfjsLib = __w_pdfjs_require__(0);
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@ -420,6 +422,41 @@ function cloneObj(obj) { @@ -420,6 +422,41 @@ function cloneObj(obj) {
}
return result;
}
var WaitOnType = {
EVENT: 'event',
TIMEOUT: 'timeout'
};
function waitOnEventOrTimeout(_ref) {
var target = _ref.target,
name = _ref.name,
_ref$delay = _ref.delay,
delay = _ref$delay === undefined ? 0 : _ref$delay;
if ((typeof target === 'undefined' ? 'undefined' : _typeof(target)) !== 'object' || !(name && typeof name === 'string') || !(Number.isInteger(delay) && delay >= 0)) {
return Promise.reject(new Error('waitOnEventOrTimeout - invalid paramaters.'));
}
var capability = (0, _pdfjsLib.createPromiseCapability)();
function handler(type) {
if (target instanceof EventBus) {
target.off(name, eventHandler);
} else {
target.removeEventListener(name, eventHandler);
}
if (timeout) {
clearTimeout(timeout);
}
capability.resolve(type);
}
var eventHandler = handler.bind(null, WaitOnType.EVENT);
if (target instanceof EventBus) {
target.on(name, eventHandler);
} else {
target.addEventListener(name, eventHandler);
}
var timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT);
var timeout = setTimeout(timeoutHandler, delay);
return capability.promise;
}
var animationStarted = new Promise(function (resolve) {
window.requestAnimationFrame(resolve);
});
@ -476,10 +513,10 @@ function clamp(v, min, max) { @@ -476,10 +513,10 @@ function clamp(v, min, max) {
var ProgressBar = function () {
function ProgressBar(id) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
height = _ref.height,
width = _ref.width,
units = _ref.units;
var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
height = _ref2.height,
width = _ref2.width,
units = _ref2.units;
_classCallCheck(this, ProgressBar);
@ -580,6 +617,8 @@ exports.binarySearchFirstItem = binarySearchFirstItem; @@ -580,6 +617,8 @@ exports.binarySearchFirstItem = binarySearchFirstItem;
exports.normalizeWheelEventDelta = normalizeWheelEventDelta;
exports.animationStarted = animationStarted;
exports.localized = localized;
exports.WaitOnType = WaitOnType;
exports.waitOnEventOrTimeout = waitOnEventOrTimeout;
/***/ }),
/* 2 */
@ -792,17 +831,18 @@ var PDFLinkService = function () { @@ -792,17 +831,18 @@ var PDFLinkService = function () {
console.error('PDFLinkService.navigateTo: "' + pageNumber + '" is not ' + ('a valid page number, for dest="' + dest + '".'));
return;
}
_this.pdfViewer.scrollPageIntoView({
pageNumber: pageNumber,
destArray: explicitDest
});
if (_this.pdfHistory) {
_this.pdfHistory.pushCurrentPosition();
_this.pdfHistory.push({
dest: explicitDest,
hash: namedDest,
page: pageNumber
namedDest: namedDest,
explicitDest: explicitDest,
pageNumber: pageNumber
});
}
_this.pdfViewer.scrollPageIntoView({
pageNumber: pageNumber,
destArray: explicitDest
});
};
new Promise(function (resolve, reject) {
if (typeof dest === 'string') {
@ -858,9 +898,6 @@ var PDFLinkService = function () { @@ -858,9 +898,6 @@ var PDFLinkService = function () {
});
}
if ('nameddest' in params) {
if (this.pdfHistory) {
this.pdfHistory.updateNextHashParam(params.nameddest);
}
this.navigateTo(params.nameddest);
return;
}
@ -917,9 +954,6 @@ var PDFLinkService = function () { @@ -917,9 +954,6 @@ var PDFLinkService = function () {
}
} catch (ex) {}
if (typeof dest === 'string' || isValidExplicitDestination(dest)) {
if (this.pdfHistory) {
this.pdfHistory.updateNextHashParam(dest);
}
this.navigateTo(dest);
return;
}
@ -3083,302 +3117,421 @@ exports.PDFViewer = PDFViewer; @@ -3083,302 +3117,421 @@ exports.PDFViewer = PDFViewer;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.PDFHistory = undefined;
exports.isDestsEqual = exports.PDFHistory = undefined;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _ui_utils = __w_pdfjs_require__(1);
var _dom_events = __w_pdfjs_require__(2);
function PDFHistory(options) {
this.linkService = options.linkService;
this.eventBus = options.eventBus || (0, _dom_events.getGlobalEventBus)();
this.initialized = false;
this.initialDestination = null;
this.initialBookmark = null;
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var HASH_CHANGE_TIMEOUT = 1000;
var POSITION_UPDATED_THRESHOLD = 50;
var UPDATE_VIEWAREA_TIMEOUT = 2000;
function getCurrentHash() {
return document.location.hash;
}
PDFHistory.prototype = {
initialize: function pdfHistoryInitialize(fingerprint) {
this.initialized = true;
this.reInitialized = false;
this.allowHashChange = true;
this.historyUnlocked = true;
this.isViewerInPresentationMode = false;
this.previousHash = window.location.hash.substring(1);
this.currentBookmark = '';
this.currentPage = 0;
this.updatePreviousBookmark = false;
this.previousBookmark = '';
this.previousPage = 0;
this.nextHashParam = '';
this.fingerprint = fingerprint;
this.currentUid = this.uid = 0;
this.current = {};
var state = window.history.state;
if (this._isStateObjectDefined(state)) {
if (state.target.dest) {
this.initialDestination = state.target.dest;
} else {
this.initialBookmark = state.target.hash;
function parseCurrentHash(linkService) {
var hash = unescape(getCurrentHash()).substring(1);
var params = (0, _ui_utils.parseQueryString)(hash);
var page = params.page | 0;
if (!(Number.isInteger(page) && page > 0 && page <= linkService.pagesCount)) {
page = null;
}
return {
hash: hash,
page: page
};
}
var PDFHistory = function () {
function PDFHistory(_ref) {
var _this = this;
var linkService = _ref.linkService,
eventBus = _ref.eventBus;
_classCallCheck(this, PDFHistory);
this.linkService = linkService;
this.eventBus = eventBus || (0, _dom_events.getGlobalEventBus)();
this.initialized = false;
this.initialBookmark = null;
this._boundEvents = Object.create(null);
this._isViewerInPresentationMode = false;
this._isPagesLoaded = false;
this.eventBus.on('presentationmodechanged', function (evt) {
_this._isViewerInPresentationMode = evt.active || evt.switchInProgress;
});
this.eventBus.on('pagesloaded', function (evt) {
_this._isPagesLoaded = !!evt.pagesCount;
});
}
_createClass(PDFHistory, [{
key: 'initialize',
value: function initialize(fingerprint) {
var resetHistory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
if (!fingerprint || typeof fingerprint !== 'string') {
console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.');
return;
}
this.currentUid = state.uid;
this.uid = state.uid + 1;
this.current = state.target;
} else {
if (state && state.fingerprint && this.fingerprint !== state.fingerprint) {
this.reInitialized = true;
var reInitialized = this.initialized && this.fingerprint !== fingerprint;
this.fingerprint = fingerprint;
if (!this.initialized) {
this._bindEvents();
}
var state = window.history.state;
this.initialized = true;
this.initialBookmark = null;
this._popStateInProgress = false;
this._blockHashChange = 0;
this._currentHash = getCurrentHash();
this._numPositionUpdates = 0;
this._currentUid = this._uid = 0;
this._destination = null;
this._position = null;
if (!this._isValidState(state) || resetHistory) {
var _parseCurrentHash = parseCurrentHash(this.linkService),
hash = _parseCurrentHash.hash,
page = _parseCurrentHash.page;
if (!hash || reInitialized || resetHistory) {
this._pushOrReplaceState(null, true);
return;
}
this._pushOrReplaceState({
hash: hash,
page: page
}, true);
return;
}
var destination = state.destination;
this._updateInternalState(destination, state.uid, true);
if (destination.dest) {
this.initialBookmark = JSON.stringify(destination.dest);
this._destination.page = null;
} else if (destination.hash) {
this.initialBookmark = destination.hash;
} else if (destination.page) {
this.initialBookmark = 'page=' + destination.page;
}
this._pushOrReplaceState({ fingerprint: this.fingerprint }, true);
}
var self = this;
window.addEventListener('popstate', function pdfHistoryPopstate(evt) {
if (!self.historyUnlocked) {
}, {
key: 'push',
value: function push(_ref2) {
var namedDest = _ref2.namedDest,
explicitDest = _ref2.explicitDest,
pageNumber = _ref2.pageNumber;
if (!this.initialized) {
return;
}
if (evt.state) {
self._goTo(evt.state);
if (namedDest && typeof namedDest !== 'string' || !(explicitDest instanceof Array) || !(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.linkService.pagesCount)) {
console.error('PDFHistory.push: Invalid parameters.');
return;
}
if (self.uid === 0) {
var previousParams = self.previousHash && self.currentBookmark && self.previousHash !== self.currentBookmark ? {
hash: self.currentBookmark,
page: self.currentPage
} : { page: 1 };
replacePreviousHistoryState(previousParams, function () {
updateHistoryWithCurrentHash();
});
} else {
updateHistoryWithCurrentHash();
var hash = namedDest || JSON.stringify(explicitDest);
if (!hash) {
return;
}
});
function updateHistoryWithCurrentHash() {
self.previousHash = window.location.hash.slice(1);
self._pushToHistory({ hash: self.previousHash }, false, true);
self._updatePreviousBookmark();
}
function replacePreviousHistoryState(params, callback) {
self.historyUnlocked = false;
self.allowHashChange = false;
window.addEventListener('popstate', rewriteHistoryAfterBack);
history.back();
function rewriteHistoryAfterBack() {
window.removeEventListener('popstate', rewriteHistoryAfterBack);
window.addEventListener('popstate', rewriteHistoryAfterForward);
self._pushToHistory(params, false, true);
history.forward();
}
function rewriteHistoryAfterForward() {
window.removeEventListener('popstate', rewriteHistoryAfterForward);
self.allowHashChange = true;
self.historyUnlocked = true;
callback();
var forceReplace = false;
if (this._destination && (this._destination.hash === hash || isDestsEqual(this._destination.dest, explicitDest))) {
if (this._destination.page) {
return;
}
forceReplace = true;
}
}
function pdfHistoryBeforeUnload() {
var previousParams = self._getPreviousParams(null, true);
if (previousParams) {
var replacePrevious = !self.current.dest && self.current.hash !== self.previousHash;
self._pushToHistory(previousParams, false, replacePrevious);
self._updatePreviousBookmark();
if (this._popStateInProgress && !forceReplace) {
return;
}
window.removeEventListener('beforeunload', pdfHistoryBeforeUnload);
}
window.addEventListener('beforeunload', pdfHistoryBeforeUnload);
window.addEventListener('pageshow', function pdfHistoryPageShow(evt) {
window.addEventListener('beforeunload', pdfHistoryBeforeUnload);
});
self.eventBus.on('presentationmodechanged', function (e) {
self.isViewerInPresentationMode = e.active;
});
},
clearHistoryState: function pdfHistory_clearHistoryState() {
this._pushOrReplaceState(null, true);
},
_isStateObjectDefined: function pdfHistory_isStateObjectDefined(state) {
return state && state.uid >= 0 && state.fingerprint && this.fingerprint === state.fingerprint && state.target && state.target.hash ? true : false;
},
_pushOrReplaceState: function pdfHistory_pushOrReplaceState(stateObj, replace) {
if (replace) {
window.history.replaceState(stateObj, '', document.URL);
} else {
window.history.pushState(stateObj, '', document.URL);
}
},
get isHashChangeUnlocked() {
if (!this.initialized) {
return true;
}
return this.allowHashChange;
},
_updatePreviousBookmark: function pdfHistory_updatePreviousBookmark() {
if (this.updatePreviousBookmark && this.currentBookmark && this.currentPage) {
this.previousBookmark = this.currentBookmark;
this.previousPage = this.currentPage;
this.updatePreviousBookmark = false;
}
},
updateCurrentBookmark: function pdfHistoryUpdateCurrentBookmark(bookmark, pageNum) {
if (this.initialized) {
this.currentBookmark = bookmark.substring(1);
this.currentPage = pageNum | 0;
this._updatePreviousBookmark();
this._pushOrReplaceState({
dest: explicitDest,
hash: hash,
page: pageNumber
}, forceReplace);
}
},
updateNextHashParam: function pdfHistoryUpdateNextHashParam(param) {
if (this.initialized) {
this.nextHashParam = param;
}
},
push: function pdfHistoryPush(params, isInitialBookmark) {
if (!(this.initialized && this.historyUnlocked)) {
return;
}
if (params.dest && !params.hash) {
params.hash = this.current.hash && this.current.dest && this.current.dest === params.dest ? this.current.hash : this.linkService.getDestinationHash(params.dest).split('#')[1];
}
if (params.page) {
params.page |= 0;
}, {
key: 'pushCurrentPosition',
value: function pushCurrentPosition() {
if (!this.initialized || this._popStateInProgress) {
return;
}
this._tryPushCurrentPosition();
}
if (isInitialBookmark) {
var target = window.history.state.target;
if (!target) {
this._pushToHistory(params, false);
this.previousHash = window.location.hash.substring(1);
}, {
key: 'back',
value: function back() {
if (!this.initialized || this._popStateInProgress) {
return;
}
this.updatePreviousBookmark = this.nextHashParam ? false : true;
if (target) {
this._updatePreviousBookmark();
var state = window.history.state;
if (this._isValidState(state) && state.uid > 0) {
window.history.back();
}
return;
}
if (this.nextHashParam) {
if (this.nextHashParam === params.hash) {
this.nextHashParam = null;
this.updatePreviousBookmark = true;
}, {
key: 'forward',
value: function forward() {
if (!this.initialized || this._popStateInProgress) {
return;
}
this.nextHashParam = null;
var state = window.history.state;
if (this._isValidState(state) && state.uid < this._uid - 1) {
window.history.forward();
}
}
if (params.hash) {
if (this.current.hash) {
if (this.current.hash !== params.hash) {
this._pushToHistory(params, true);
} else {
if (!this.current.page && params.page) {
this._pushToHistory(params, false, true);
}
this.updatePreviousBookmark = true;
}
}, {
key: '_pushOrReplaceState',
value: function _pushOrReplaceState(destination) {
var forceReplace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var shouldReplace = forceReplace || !this._destination;
var newState = {
fingerprint: this.fingerprint,
uid: shouldReplace ? this._currentUid : this._uid,
destination: destination
};
this._updateInternalState(destination, newState.uid);
if (shouldReplace) {
window.history.replaceState(newState, '', document.URL);
} else {
this._pushToHistory(params, true);
window.history.pushState(newState, '', document.URL);
}
} else if (this.current.page && params.page && this.current.page !== params.page) {
this._pushToHistory(params, true);
}
},
_getPreviousParams: function pdfHistory_getPreviousParams(onlyCheckPage, beforeUnload) {
if (!(this.currentBookmark && this.currentPage)) {
return null;
} else if (this.updatePreviousBookmark) {
this.updatePreviousBookmark = false;
}
if (this.uid > 0 && !(this.previousBookmark && this.previousPage)) {
return null;
}
if (!this.current.dest && !onlyCheckPage || beforeUnload) {
if (this.previousBookmark === this.currentBookmark) {
return null;
}, {
key: '_tryPushCurrentPosition',
value: function _tryPushCurrentPosition() {
var temporary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
if (!this._position) {
return;
}
} else if (this.current.page || onlyCheckPage) {
if (this.previousPage === this.currentPage) {
return null;
var position = this._position;
if (temporary) {
position = (0, _ui_utils.cloneObj)(this._position);
position.temporary = true;
}
} else {
return null;
}
var params = {
hash: this.currentBookmark,
page: this.currentPage
};
if (this.isViewerInPresentationMode) {
params.hash = null;
}
return params;
},
_stateObj: function pdfHistory_stateObj(params) {
return {
fingerprint: this.fingerprint,
uid: this.uid,
target: params
};
},
_pushToHistory: function pdfHistory_pushToHistory(params, addPrevious, overwrite) {
if (!this.initialized) {
return;
if (!this._destination) {
this._pushOrReplaceState(position);
return;
}
if (this._destination.temporary) {
this._pushOrReplaceState(position, true);
return;
}
if (this._destination.hash === position.hash) {
return;
}
if (!this._destination.page && (POSITION_UPDATED_THRESHOLD <= 0 || this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) {
return;
}
var forceReplace = false;
if (this._destination.page === position.first || this._destination.page === position.page) {
if (this._destination.dest || !this._destination.first) {
return;
}
forceReplace = true;
}
this._pushOrReplaceState(position, forceReplace);
}
if (!params.hash && params.page) {
params.hash = 'page=' + params.page;
}, {
key: '_isValidState',
value: function _isValidState(state) {
if (!state) {
return false;
}
if (state.fingerprint !== this.fingerprint) {
return false;
}
if (!Number.isInteger(state.uid) || state.uid < 0) {
return false;
}
if (state.destination === null || _typeof(state.destination) !== 'object') {
return false;
}
return true;
}
if (addPrevious && !overwrite) {
var previousParams = this._getPreviousParams();
if (previousParams) {
var replacePrevious = !this.current.dest && this.current.hash !== this.previousHash;
this._pushToHistory(previousParams, false, replacePrevious);
}, {
key: '_updateInternalState',
value: function _updateInternalState(destination, uid) {
var removeTemporary = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
if (removeTemporary && destination && destination.temporary) {
delete destination.temporary;
}
this._destination = destination;
this._currentUid = uid;
this._uid = this._currentUid + 1;
this._numPositionUpdates = 0;
}
this._pushOrReplaceState(this._stateObj(params), overwrite || this.uid === 0);
this.currentUid = this.uid++;
this.current = params;
this.updatePreviousBookmark = true;
},
_goTo: function pdfHistory_goTo(state) {
if (!(this.initialized && this.historyUnlocked && this._isStateObjectDefined(state))) {
return;
}, {
key: '_updateViewarea',
value: function _updateViewarea(_ref3) {
var _this2 = this;
var location = _ref3.location;
if (this._updateViewareaTimeout) {
clearTimeout(this._updateViewareaTimeout);
this._updateViewareaTimeout = null;
}
this._position = {
hash: this._isViewerInPresentationMode ? 'page=' + location.pageNumber : location.pdfOpenParams.substring(1),
page: this.linkService.page,
first: location.pageNumber
};
if (this._popStateInProgress) {
return;
}
if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded && this._destination && !this._destination.page) {
this._numPositionUpdates++;
}
if (UPDATE_VIEWAREA_TIMEOUT > 0) {
this._updateViewareaTimeout = setTimeout(function () {
if (!_this2._popStateInProgress) {
_this2._tryPushCurrentPosition(true);
}
_this2._updateViewareaTimeout = null;
}, UPDATE_VIEWAREA_TIMEOUT);
}
}
if (!this.reInitialized && state.uid < this.currentUid) {
var previousParams = this._getPreviousParams(true);
if (previousParams) {
this._pushToHistory(this.current, false);
this._pushToHistory(previousParams, false);
this.currentUid = state.uid;
window.history.back();
}, {
key: '_popState',
value: function _popState(_ref4) {
var _this3 = this;
var state = _ref4.state;
var newHash = getCurrentHash(),
hashChanged = this._currentHash !== newHash;
this._currentHash = newHash;
if (!state || false) {
this._currentUid = this._uid;
var _parseCurrentHash2 = parseCurrentHash(this.linkService),
hash = _parseCurrentHash2.hash,
page = _parseCurrentHash2.page;
this._pushOrReplaceState({
hash: hash,
page: page
}, true);
return;
}
if (!this._isValidState(state)) {
return;
}
this._popStateInProgress = true;
if (hashChanged) {
this._blockHashChange++;
(0, _ui_utils.waitOnEventOrTimeout)({
target: window,
name: 'hashchange',
delay: HASH_CHANGE_TIMEOUT
}).then(function () {
_this3._blockHashChange--;
});
}
if (state.uid < this._currentUid && this._position && this._destination) {
var shouldGoBack = false;
if (this._destination.temporary) {
this._pushOrReplaceState(this._position);
shouldGoBack = true;
} else if (this._destination.page && this._destination.page !== this._position.first && this._destination.page !== this._position.page) {
this._pushOrReplaceState(this._destination);
this._pushOrReplaceState(this._position);
shouldGoBack = true;
}
if (shouldGoBack) {
this._currentUid = state.uid;
window.history.back();
return;
}
}
var destination = state.destination;
this._updateInternalState(destination, state.uid, true);
if (destination.dest) {
this.linkService.navigateTo(destination.dest);
} else if (destination.hash) {
this.linkService.setHash(destination.hash);
} else if (destination.page) {
this.linkService.page = destination.page;
}
Promise.resolve().then(function () {
_this3._popStateInProgress = false;
});
}
this.historyUnlocked = false;
if (state.target.dest) {
this.linkService.navigateTo(state.target.dest);
} else {
this.linkService.setHash(state.target.hash);
}, {
key: '_bindEvents',
value: function _bindEvents() {
var _this4 = this;
var _boundEvents = this._boundEvents,
eventBus = this.eventBus;
_boundEvents.updateViewarea = this._updateViewarea.bind(this);
_boundEvents.popState = this._popState.bind(this);
_boundEvents.pageHide = function (evt) {
if (!_this4._destination) {
_this4._tryPushCurrentPosition();
}
};
eventBus.on('updateviewarea', _boundEvents.updateViewarea);
window.addEventListener('popstate', _boundEvents.popState);
window.addEventListener('pagehide', _boundEvents.pageHide);
}
this.currentUid = state.uid;
if (state.uid > this.uid) {
this.uid = state.uid;
}, {
key: 'popStateInProgress',
get: function get() {
return this.initialized && (this._popStateInProgress || this._blockHashChange > 0);
}
this.current = state.target;
this.updatePreviousBookmark = true;
var currentHash = window.location.hash.substring(1);
if (this.previousHash !== currentHash) {
this.allowHashChange = false;
}]);
return PDFHistory;
}();
function isDestsEqual(firstDest, secondDest) {
function isEntryEqual(first, second) {
if ((typeof first === 'undefined' ? 'undefined' : _typeof(first)) !== (typeof second === 'undefined' ? 'undefined' : _typeof(second))) {
return false;
}
this.previousHash = currentHash;
this.historyUnlocked = true;
},
back: function pdfHistoryBack() {
this.go(-1);
},
forward: function pdfHistoryForward() {
this.go(1);
},
go: function pdfHistoryGo(direction) {
if (this.initialized && this.historyUnlocked) {
var state = window.history.state;
if (direction === -1 && state && state.uid > 0) {
window.history.back();
} else if (direction === 1 && state && state.uid < this.uid - 1) {
window.history.forward();
if (first instanceof Array || second instanceof Array) {
return false;
}
if (first !== null && (typeof first === 'undefined' ? 'undefined' : _typeof(first)) === 'object' && second !== null) {
if (Object.keys(first).length !== Object.keys(second).length) {
return false;
}
for (var key in first) {
if (!isEntryEqual(first[key], second[key])) {
return false;
}
}
return true;
}
return first === second || Number.isNaN(first) && Number.isNaN(second);
}
};
if (!(firstDest instanceof Array && secondDest instanceof Array)) {
return false;
}
if (firstDest.length !== secondDest.length) {
return false;
}
for (var i = 0, ii = firstDest.length; i < ii; i++) {
if (!isEntryEqual(firstDest[i], secondDest[i])) {
return false;
}
}
return true;
}
exports.PDFHistory = PDFHistory;
exports.isDestsEqual = isDestsEqual;
/***/ }),
/* 11 */

2
web/pdf_viewer.js.map

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save