Bug 1398810 - Update pdf.js to version 1.9.554. r=bdahl

This commit is contained in:
Ryan VanderMeulen 2017-09-11 10:37:45 -04:00
parent 018c7a6e79
commit 89f1957239
5 changed files with 277 additions and 133 deletions

View File

@ -1,5 +1,5 @@
This is the PDF.js project output, https://github.com/mozilla/pdf.js
Current extension version is: 1.9.530
Current extension version is: 1.9.554
Taken from upstream commit: d1089a28
Taken from upstream commit: ba219965

View File

@ -1462,7 +1462,7 @@ exports.unreachable = unreachable;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.getDefaultSetting = exports.LinkTarget = exports.getFilenameFromUrl = exports.isValidUrl = exports.isExternalLinkTargetSet = exports.addLinkAttributes = exports.RenderingCancelledException = exports.CustomStyle = undefined;
exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.getDefaultSetting = exports.LinkTarget = exports.getFilenameFromUrl = exports.isValidUrl = exports.isExternalLinkTargetSet = exports.addLinkAttributes = exports.RenderingCancelledException = exports.CustomStyle = undefined;
var _util = __w_pdfjs_require__(0);
@ -1472,7 +1472,8 @@ var _global_scope2 = _interopRequireDefault(_global_scope);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var DEFAULT_LINK_REL = 'noopener noreferrer nofollow';
const DEFAULT_LINK_REL = 'noopener noreferrer nofollow';
const SVG_NS = 'http://www.w3.org/2000/svg';
class DOMCanvasFactory {
create(width, height) {
if (width <= 0 || height <= 0) {
@ -1548,6 +1549,22 @@ class DOMCMapReaderFactory {
});
}
}
class DOMSVGFactory {
create(width, height) {
(0, _util.assert)(width > 0 && height > 0, 'Invalid SVG dimensions');
let svg = document.createElementNS(SVG_NS, 'svg:svg');
svg.setAttribute('version', '1.1');
svg.setAttribute('width', width + 'px');
svg.setAttribute('height', height + 'px');
svg.setAttribute('preserveAspectRatio', 'none');
svg.setAttribute('viewBox', '0 0 ' + width + ' ' + height);
return svg;
}
createElement(type) {
(0, _util.assert)(typeof type === 'string', 'Invalid SVG element type');
return document.createElementNS(SVG_NS, type);
}
}
var CustomStyle = function CustomStyleClosure() {
var prefixes = ['ms', 'Moz', 'Webkit', 'O'];
var _cache = Object.create(null);
@ -1708,6 +1725,7 @@ exports.getDefaultSetting = getDefaultSetting;
exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL;
exports.DOMCanvasFactory = DOMCanvasFactory;
exports.DOMCMapReaderFactory = DOMCMapReaderFactory;
exports.DOMSVGFactory = DOMSVGFactory;
/***/ }),
/* 2 */
@ -1763,6 +1781,10 @@ class AnnotationElementFactory {
return new PopupAnnotationElement(parameters);
case _util.AnnotationType.LINE:
return new LineAnnotationElement(parameters);
case _util.AnnotationType.SQUARE:
return new SquareAnnotationElement(parameters);
case _util.AnnotationType.CIRCLE:
return new CircleAnnotationElement(parameters);
case _util.AnnotationType.HIGHLIGHT:
return new HighlightAnnotationElement(parameters);
case _util.AnnotationType.UNDERLINE:
@ -1789,6 +1811,7 @@ class AnnotationElement {
this.downloadManager = parameters.downloadManager;
this.imageResourcesPath = parameters.imageResourcesPath;
this.renderInteractiveForms = parameters.renderInteractiveForms;
this.svgFactory = parameters.svgFactory;
if (isRenderable) {
this.container = this._createContainer(ignoreBorder);
}
@ -1872,7 +1895,8 @@ class AnnotationElement {
}
class LinkAnnotationElement extends AnnotationElement {
constructor(parameters) {
super(parameters, true);
let isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action);
super(parameters, isRenderable);
}
render() {
this.container.className = 'linkAnnotation';
@ -2064,7 +2088,7 @@ class PopupAnnotationElement extends AnnotationElement {
super(parameters, isRenderable);
}
render() {
const IGNORE_TYPES = ['Line'];
const IGNORE_TYPES = ['Line', 'Square', 'Circle'];
this.container.className = 'popupAnnotation';
if (IGNORE_TYPES.indexOf(this.data.parentType) >= 0) {
return this.container;
@ -2170,27 +2194,73 @@ class LineAnnotationElement extends AnnotationElement {
super(parameters, isRenderable, true);
}
render() {
const SVG_NS = 'http://www.w3.org/2000/svg';
this.container.className = 'lineAnnotation';
let data = this.data;
let width = data.rect[2] - data.rect[0];
let height = data.rect[3] - data.rect[1];
let svg = document.createElementNS(SVG_NS, 'svg:svg');
svg.setAttributeNS(null, 'version', '1.1');
svg.setAttributeNS(null, 'width', width + 'px');
svg.setAttributeNS(null, 'height', height + 'px');
svg.setAttributeNS(null, 'preserveAspectRatio', 'none');
svg.setAttributeNS(null, 'viewBox', '0 0 ' + width + ' ' + height);
let line = document.createElementNS(SVG_NS, 'svg:line');
line.setAttributeNS(null, 'x1', data.rect[2] - data.lineCoordinates[0]);
line.setAttributeNS(null, 'y1', data.rect[3] - data.lineCoordinates[1]);
line.setAttributeNS(null, 'x2', data.rect[2] - data.lineCoordinates[2]);
line.setAttributeNS(null, 'y2', data.rect[3] - data.lineCoordinates[3]);
line.setAttributeNS(null, 'stroke-width', data.borderStyle.width);
line.setAttributeNS(null, 'stroke', 'transparent');
let svg = this.svgFactory.create(width, height);
let line = this.svgFactory.createElement('svg:line');
line.setAttribute('x1', data.rect[2] - data.lineCoordinates[0]);
line.setAttribute('y1', data.rect[3] - data.lineCoordinates[1]);
line.setAttribute('x2', data.rect[2] - data.lineCoordinates[2]);
line.setAttribute('y2', data.rect[3] - data.lineCoordinates[3]);
line.setAttribute('stroke-width', data.borderStyle.width);
line.setAttribute('stroke', 'transparent');
svg.appendChild(line);
this.container.append(svg);
this._createPopup(this.container, line, this.data);
this._createPopup(this.container, line, data);
return this.container;
}
}
class SquareAnnotationElement extends AnnotationElement {
constructor(parameters) {
let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
super(parameters, isRenderable, true);
}
render() {
this.container.className = 'squareAnnotation';
let data = this.data;
let width = data.rect[2] - data.rect[0];
let height = data.rect[3] - data.rect[1];
let svg = this.svgFactory.create(width, height);
let borderWidth = data.borderStyle.width;
let square = this.svgFactory.createElement('svg:rect');
square.setAttribute('x', borderWidth / 2);
square.setAttribute('y', borderWidth / 2);
square.setAttribute('width', width - borderWidth);
square.setAttribute('height', height - borderWidth);
square.setAttribute('stroke-width', borderWidth);
square.setAttribute('stroke', 'transparent');
square.setAttribute('fill', 'none');
svg.appendChild(square);
this.container.append(svg);
this._createPopup(this.container, square, data);
return this.container;
}
}
class CircleAnnotationElement extends AnnotationElement {
constructor(parameters) {
let isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
super(parameters, isRenderable, true);
}
render() {
this.container.className = 'circleAnnotation';
let data = this.data;
let width = data.rect[2] - data.rect[0];
let height = data.rect[3] - data.rect[1];
let svg = this.svgFactory.create(width, height);
let borderWidth = data.borderStyle.width;
let circle = this.svgFactory.createElement('svg:ellipse');
circle.setAttribute('cx', width / 2);
circle.setAttribute('cy', height / 2);
circle.setAttribute('rx', width / 2 - borderWidth / 2);
circle.setAttribute('ry', height / 2 - borderWidth / 2);
circle.setAttribute('stroke-width', borderWidth);
circle.setAttribute('stroke', 'transparent');
circle.setAttribute('fill', 'none');
svg.appendChild(circle);
this.container.append(svg);
this._createPopup(this.container, circle, data);
return this.container;
}
}
@ -2293,7 +2363,8 @@ class AnnotationLayer {
linkService: parameters.linkService,
downloadManager: parameters.downloadManager,
imageResourcesPath: parameters.imageResourcesPath || (0, _dom_utils.getDefaultSetting)('imageResourcesPath'),
renderInteractiveForms: parameters.renderInteractiveForms || false
renderInteractiveForms: parameters.renderInteractiveForms || false,
svgFactory: new _dom_utils.DOMSVGFactory()
});
if (element.isRenderable) {
parameters.div.appendChild(element.render());
@ -3786,8 +3857,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() {
}();
var version, build;
{
exports.version = version = '1.9.530';
exports.build = build = 'd1089a28';
exports.version = version = '1.9.554';
exports.build = build = 'ba219965';
}
exports.getDocument = getDocument;
exports.LoopbackPort = LoopbackPort;
@ -3814,6 +3885,8 @@ exports.SVGGraphics = undefined;
var _util = __w_pdfjs_require__(0);
var _dom_utils = __w_pdfjs_require__(1);
var SVGGraphics = function () {
throw new Error('Not implemented: SVGGraphics');
};
@ -4843,8 +4916,8 @@ if (!_global_scope2.default.PDFJS) {
}
var PDFJS = _global_scope2.default.PDFJS;
{
PDFJS.version = '1.9.530';
PDFJS.build = 'd1089a28';
PDFJS.version = '1.9.554';
PDFJS.build = 'ba219965';
}
PDFJS.pdfBug = false;
if (PDFJS.verbosity !== undefined) {
@ -10410,8 +10483,8 @@ exports.PDFDataTransportStream = PDFDataTransportStream;
"use strict";
var pdfjsVersion = '1.9.530';
var pdfjsBuild = 'd1089a28';
var pdfjsVersion = '1.9.554';
var pdfjsBuild = 'ba219965';
var pdfjsSharedUtil = __w_pdfjs_require__(0);
var pdfjsDisplayGlobal = __w_pdfjs_require__(9);
var pdfjsDisplayAPI = __w_pdfjs_require__(4);

View File

@ -10731,7 +10731,7 @@ var PostScriptCompiler = function PostScriptCompilerClosure() {
return null;
}
n = num1.number;
if (n < 0 || (n | 0) !== n || stack.length < n) {
if (n < 0 || !Number.isInteger(n) || stack.length < n) {
return null;
}
ast1 = stack[stack.length - n - 1];
@ -10775,7 +10775,7 @@ var PostScriptCompiler = function PostScriptCompilerClosure() {
}
j = num2.number;
n = num1.number;
if (n <= 0 || (n | 0) !== n || (j | 0) !== j || stack.length < n) {
if (n <= 0 || !Number.isInteger(n) || !Number.isInteger(j) || stack.length < n) {
return null;
}
j = (j % n + n) % n;
@ -27350,6 +27350,10 @@ class AnnotationFactory {
return new PopupAnnotation(parameters);
case 'Line':
return new LineAnnotation(parameters);
case 'Square':
return new SquareAnnotation(parameters);
case 'Circle':
return new CircleAnnotation(parameters);
case 'Highlight':
return new HighlightAnnotation(parameters);
case 'Underline':
@ -27563,7 +27567,7 @@ class AnnotationBorderStyle {
this.verticalCornerRadius = 0;
}
setWidth(width) {
if (width === (width | 0)) {
if (Number.isInteger(width)) {
this.width = width;
}
}
@ -27615,12 +27619,12 @@ class AnnotationBorderStyle {
}
}
setHorizontalCornerRadius(radius) {
if (radius === (radius | 0)) {
if (Number.isInteger(radius)) {
this.horizontalCornerRadius = radius;
}
}
setVerticalCornerRadius(radius) {
if (radius === (radius | 0)) {
if (Number.isInteger(radius)) {
this.verticalCornerRadius = radius;
}
}
@ -27842,6 +27846,20 @@ class LineAnnotation extends Annotation {
this._preparePopup(dict);
}
}
class SquareAnnotation extends Annotation {
constructor(parameters) {
super(parameters);
this.data.annotationType = _util.AnnotationType.SQUARE;
this._preparePopup(parameters.dict);
}
}
class CircleAnnotation extends Annotation {
constructor(parameters) {
super(parameters);
this.data.annotationType = _util.AnnotationType.CIRCLE;
this._preparePopup(parameters.dict);
}
}
class HighlightAnnotation extends Annotation {
constructor(parameters) {
super(parameters);
@ -39688,7 +39706,7 @@ var Type1CharString = function Type1CharStringClosure() {
var start = stackLength - howManyArgs;
for (var i = start; i < stackLength; i++) {
var value = this.stack[i];
if (value === (value | 0)) {
if (Number.isInteger(value)) {
this.output.push(28, value >> 8 & 0xff, value & 0xff);
} else {
value = 65536 * value | 0;
@ -40008,8 +40026,8 @@ exports.Type1Parser = Type1Parser;
"use strict";
var pdfjsVersion = '1.9.530';
var pdfjsBuild = 'd1089a28';
var pdfjsVersion = '1.9.554';
var pdfjsBuild = 'ba219965';
var pdfjsCoreWorker = __w_pdfjs_require__(17);
exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler;

View File

@ -239,6 +239,8 @@
.annotationLayer .squigglyAnnotation,
.annotationLayer .strikeoutAnnotation,
.annotationLayer .lineAnnotation svg line,
.annotationLayer .squareAnnotation svg rect,
.annotationLayer .circleAnnotation svg ellipse,
.annotationLayer .fileAttachmentAnnotation {
cursor: pointer;
}

View File

@ -91,7 +91,7 @@
Object.defineProperty(exports, "__esModule", {
value: true
});
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;
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.isValidRotation = 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 _pdfjsLib = __webpack_require__(1);
@ -373,6 +373,9 @@ function normalizeWheelEventDelta(evt) {
}
return delta;
}
function isValidRotation(angle) {
return Number.isInteger(angle) && angle % 90 === 0;
}
function cloneObj(obj) {
let result = Object.create(null);
for (let i in obj) {
@ -516,6 +519,7 @@ exports.UNKNOWN_SCALE = UNKNOWN_SCALE;
exports.MAX_AUTO_SCALE = MAX_AUTO_SCALE;
exports.SCROLLBAR_PADDING = SCROLLBAR_PADDING;
exports.VERTICAL_PADDING = VERTICAL_PADDING;
exports.isValidRotation = isValidRotation;
exports.cloneObj = cloneObj;
exports.RendererType = RendererType;
exports.mozL10n = mozL10n;
@ -1411,6 +1415,7 @@ let PDFViewerApplication = {
this.pdfHistory.initialize(id, resetHistory);
if (this.pdfHistory.initialBookmark) {
this.initialBookmark = this.pdfHistory.initialBookmark;
this.initialRotation = this.pdfHistory.initialRotation;
}
}
let initialParams = {
@ -1423,13 +1428,16 @@ let PDFViewerApplication = {
zoom: _ui_utils.DEFAULT_SCALE_VALUE,
scrollLeft: '0',
scrollTop: '0',
rotation: null,
sidebarView: _pdf_sidebar.SidebarView.NONE
}).catch(() => {});
Promise.all([storePromise, pageModePromise]).then(([values = {}, pageMode]) => {
let hash = this.viewerPrefs['defaultZoomValue'] ? 'zoom=' + this.viewerPrefs['defaultZoomValue'] : null;
let rotation = null;
let sidebarView = this.viewerPrefs['sidebarViewOnLoad'];
if (values.exists && this.viewerPrefs['showPreviousViewOnLoad']) {
hash = 'page=' + values.page + '&zoom=' + (this.viewerPrefs['defaultZoomValue'] || values.zoom) + ',' + values.scrollLeft + ',' + values.scrollTop;
rotation = parseInt(values.rotation, 10);
sidebarView = sidebarView || values.sidebarView | 0;
}
if (pageMode && !this.viewerPrefs['disablePageMode']) {
@ -1437,12 +1445,16 @@ let PDFViewerApplication = {
}
return {
hash,
rotation,
sidebarView
};
}).then(({ hash, sidebarView }) => {
}).then(({ hash, rotation, sidebarView }) => {
initialParams.bookmark = this.initialBookmark;
initialParams.hash = hash;
this.setInitialView(hash, { sidebarView });
this.setInitialView(hash, {
rotation,
sidebarView
});
if (!this.isViewerEmbedded) {
pdfViewer.focus();
}
@ -1553,13 +1565,21 @@ let PDFViewerApplication = {
});
});
},
setInitialView(storedHash, { sidebarView } = {}) {
setInitialView(storedHash, { rotation, sidebarView } = {}) {
let setRotation = angle => {
if ((0, _ui_utils.isValidRotation)(angle)) {
this.pdfViewer.pagesRotation = angle;
}
};
this.isInitialViewSet = true;
this.pdfSidebar.setInitialView(sidebarView);
if (this.initialBookmark) {
setRotation(this.initialRotation);
delete this.initialRotation;
this.pdfLinkService.setHash(this.initialBookmark);
this.initialBookmark = null;
} else if (storedHash) {
setRotation(rotation);
this.pdfLinkService.setHash(storedHash);
}
this.toolbar.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel);
@ -1618,13 +1638,8 @@ let PDFViewerApplication = {
if (!this.pdfDocument) {
return;
}
let { pdfViewer, pdfThumbnailViewer } = this;
let pageNumber = pdfViewer.currentPageNumber;
let newRotation = (pdfViewer.pagesRotation + 360 + delta) % 360;
pdfViewer.pagesRotation = newRotation;
pdfThumbnailViewer.pagesRotation = newRotation;
this.forceRendering();
pdfViewer.currentPageNumber = pageNumber;
let newRotation = (this.pdfViewer.pagesRotation + 360 + delta) % 360;
this.pdfViewer.pagesRotation = newRotation;
},
requestPresentationMode() {
if (!this.pdfPresentationMode) {
@ -1645,6 +1660,7 @@ let PDFViewerApplication = {
eventBus.on('updateviewarea', webViewerUpdateViewarea);
eventBus.on('pagechanging', webViewerPageChanging);
eventBus.on('scalechanging', webViewerScaleChanging);
eventBus.on('rotationchanging', webViewerRotationChanging);
eventBus.on('sidebarviewchanged', webViewerSidebarViewChanged);
eventBus.on('pagemode', webViewerPageMode);
eventBus.on('namedaction', webViewerNamedAction);
@ -1700,6 +1716,7 @@ let PDFViewerApplication = {
eventBus.off('updateviewarea', webViewerUpdateViewarea);
eventBus.off('pagechanging', webViewerPageChanging);
eventBus.off('scalechanging', webViewerScaleChanging);
eventBus.off('rotationchanging', webViewerRotationChanging);
eventBus.off('sidebarviewchanged', webViewerSidebarViewChanged);
eventBus.off('pagemode', webViewerPageMode);
eventBus.off('namedaction', webViewerNamedAction);
@ -1954,7 +1971,8 @@ function webViewerUpdateViewarea(evt) {
'page': location.pageNumber,
'zoom': location.scale,
'scrollLeft': location.left,
'scrollTop': location.top
'scrollTop': location.top,
'rotation': location.rotation
}).catch(function () {});
}
let href = PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams);
@ -2064,6 +2082,11 @@ function webViewerScaleChanging(evt) {
PDFViewerApplication.toolbar.setPageScale(evt.presetValue, evt.scale);
PDFViewerApplication.pdfViewer.update();
}
function webViewerRotationChanging(evt) {
PDFViewerApplication.pdfThumbnailViewer.pagesRotation = evt.pagesRotation;
PDFViewerApplication.forceRendering();
PDFViewerApplication.pdfViewer.currentPageNumber = evt.pageNumber;
}
function webViewerPageChanging(evt) {
let page = evt.pageNumber;
PDFViewerApplication.toolbar.setPageNumber(page, evt.pageLabel || null);
@ -2399,6 +2422,12 @@ class PDFLinkService {
set page(value) {
this.pdfViewer.currentPageNumber = value;
}
get rotation() {
return this.pdfViewer.pagesRotation;
}
set rotation(value) {
this.pdfViewer.pagesRotation = value;
}
navigateTo(dest) {
let goToDestination = ({ namedDest, explicitDest }) => {
let destRef = explicitDest[0],
@ -2417,7 +2446,7 @@ class PDFLinkService {
});
return;
}
} else if ((destRef | 0) === destRef) {
} else if (Number.isInteger(destRef)) {
pageNumber = destRef + 1;
} else {
console.error(`PDFLinkService.navigateTo: "${destRef}" is not ` + `a valid destination reference, for dest="${dest}".`);
@ -2608,7 +2637,7 @@ function isValidExplicitDestination(dest) {
return false;
}
let page = dest[0];
if (!(typeof page === 'object' && typeof page.num === 'number' && (page.num | 0) === page.num && typeof page.gen === 'number' && (page.gen | 0) === page.gen) && !(typeof page === 'number' && (page | 0) === page && page >= 0)) {
if (!(typeof page === 'object' && Number.isInteger(page.num) && Number.isInteger(page.gen)) && !(Number.isInteger(page) && page >= 0)) {
return false;
}
let zoom = dest[1];
@ -2654,6 +2683,10 @@ class SimpleLinkService {
return 0;
}
set page(value) {}
get rotation() {
return 0;
}
set rotation(value) {}
navigateTo(dest) {}
getDestinationHash(dest) {
return '#';
@ -3244,35 +3277,35 @@ var _preferences = __webpack_require__(26);
var _app = __webpack_require__(4);
;
var FirefoxCom = function FirefoxComClosure() {
let FirefoxCom = function FirefoxComClosure() {
return {
requestSync(action, data) {
var request = document.createTextNode('');
let request = document.createTextNode('');
document.documentElement.appendChild(request);
var sender = document.createEvent('CustomEvent');
let sender = document.createEvent('CustomEvent');
sender.initCustomEvent('pdf.js.message', true, false, {
action,
data,
sync: true
});
request.dispatchEvent(sender);
var response = sender.detail.response;
let response = sender.detail.response;
document.documentElement.removeChild(request);
return response;
},
request(action, data, callback) {
var request = document.createTextNode('');
let request = document.createTextNode('');
if (callback) {
document.addEventListener('pdf.js.response', function listener(event) {
var node = event.target;
var response = event.detail.response;
let node = event.target;
let response = event.detail.response;
document.documentElement.removeChild(node);
document.removeEventListener('pdf.js.response', listener);
return callback(response);
});
}
document.documentElement.appendChild(request);
var sender = document.createEvent('CustomEvent');
let sender = document.createEvent('CustomEvent');
sender.initCustomEvent('pdf.js.message', true, false, {
action,
data,
@ -3283,31 +3316,29 @@ var FirefoxCom = function FirefoxComClosure() {
}
};
}();
var DownloadManager = function DownloadManagerClosure() {
function DownloadManager() {}
DownloadManager.prototype = {
downloadUrl: function DownloadManager_downloadUrl(url, filename) {
class DownloadManager {
downloadUrl(url, filename) {
FirefoxCom.request('download', {
originalUrl: url,
filename
});
},
downloadData: function DownloadManager_downloadData(data, filename, contentType) {
var blobUrl = (0, _pdfjsLib.createObjectURL)(data, contentType, false);
}
downloadData(data, filename, contentType) {
let blobUrl = (0, _pdfjsLib.createObjectURL)(data, contentType, false);
FirefoxCom.request('download', {
blobUrl,
originalUrl: blobUrl,
filename,
isAttachment: true
});
},
download: function DownloadManager_download(blob, url, filename) {
let blobUrl = window.URL.createObjectURL(blob);
}
download(blob, url, filename) {
let blobUrl = URL.createObjectURL(blob);
let onResponse = err => {
if (err && this.onerror) {
this.onerror(err);
}
window.URL.revokeObjectURL(blobUrl);
URL.revokeObjectURL(blobUrl);
};
FirefoxCom.request('download', {
blobUrl,
@ -3315,9 +3346,7 @@ var DownloadManager = function DownloadManagerClosure() {
filename
}, onResponse);
}
};
return DownloadManager;
}();
}
class FirefoxPreferences extends _preferences.BasePreferences {
_writeToStorage(prefObj) {
return new Promise(function (resolve) {
@ -3327,7 +3356,7 @@ class FirefoxPreferences extends _preferences.BasePreferences {
_readFromStorage(prefObj) {
return new Promise(function (resolve) {
FirefoxCom.request('getPreferences', prefObj, function (prefStr) {
var readPrefs = JSON.parse(prefStr);
let readPrefs = JSON.parse(prefStr);
resolve(readPrefs);
});
});
@ -3349,8 +3378,8 @@ class MozL10n {
}
}
(function listenFindEvents() {
var events = ['find', 'findagain', 'findhighlightallchange', 'findcasesensitivitychange'];
var handleEvent = function (evt) {
const events = ['find', 'findagain', 'findhighlightallchange', 'findcasesensitivitychange'];
let handleEvent = function (evt) {
if (!_app.PDFViewerApplication.initialized) {
return;
}
@ -3364,7 +3393,7 @@ class MozL10n {
findPrevious: !!evt.detail.findPrevious
});
};
for (var i = 0, len = events.length; i < len; i++) {
for (let i = 0, len = events.length; i < len; i++) {
window.addEventListener(events[i], handleEvent);
}
})();
@ -3386,13 +3415,13 @@ _app.PDFViewerApplication.externalServices = {
FirefoxCom.request('updateFindControlState', data);
},
initPassiveLoading(callbacks) {
var pdfDataRangeTransport;
let pdfDataRangeTransport;
window.addEventListener('message', function windowMessage(e) {
if (e.source !== null) {
console.warn('Rejected untrusted message from ' + e.origin);
return;
}
var args = e.data;
let args = e.data;
if (typeof args !== 'object' || !('pdfjsLoadAction' in args)) {
return;
}
@ -3437,23 +3466,23 @@ _app.PDFViewerApplication.externalServices = {
return new FirefoxPreferences();
},
createL10n() {
var mozL10n = document.mozL10n;
let mozL10n = document.mozL10n;
return new MozL10n(mozL10n);
},
get supportsIntegratedFind() {
var support = FirefoxCom.requestSync('supportsIntegratedFind');
let support = FirefoxCom.requestSync('supportsIntegratedFind');
return (0, _pdfjsLib.shadow)(this, 'supportsIntegratedFind', support);
},
get supportsDocumentFonts() {
var support = FirefoxCom.requestSync('supportsDocumentFonts');
let support = FirefoxCom.requestSync('supportsDocumentFonts');
return (0, _pdfjsLib.shadow)(this, 'supportsDocumentFonts', support);
},
get supportsDocumentColors() {
var support = FirefoxCom.requestSync('supportsDocumentColors');
let support = FirefoxCom.requestSync('supportsDocumentColors');
return (0, _pdfjsLib.shadow)(this, 'supportsDocumentColors', support);
},
get supportedMouseWheelZoomModifierKeys() {
var support = FirefoxCom.requestSync('supportedMouseWheelZoomModifierKeys');
let support = FirefoxCom.requestSync('supportedMouseWheelZoomModifierKeys');
return (0, _pdfjsLib.shadow)(this, 'supportedMouseWheelZoomModifierKeys', support);
}
};
@ -4416,7 +4445,7 @@ var _dom_events = __webpack_require__(2);
const HASH_CHANGE_TIMEOUT = 1000;
const POSITION_UPDATED_THRESHOLD = 50;
const UPDATE_VIEWAREA_TIMEOUT = 2000;
const UPDATE_VIEWAREA_TIMEOUT = 1000;
function getCurrentHash() {
return document.location.hash;
}
@ -4429,7 +4458,8 @@ function parseCurrentHash(linkService) {
}
return {
hash,
page
page,
rotation: linkService.rotation
};
}
class PDFHistory {
@ -4438,6 +4468,7 @@ class PDFHistory {
this.eventBus = eventBus || (0, _dom_events.getGlobalEventBus)();
this.initialized = false;
this.initialBookmark = null;
this.initialRotation = null;
this._boundEvents = Object.create(null);
this._isViewerInPresentationMode = false;
this._isPagesLoaded = false;
@ -4461,6 +4492,7 @@ class PDFHistory {
let state = window.history.state;
this.initialized = true;
this.initialBookmark = null;
this.initialRotation = null;
this._popStateInProgress = false;
this._blockHashChange = 0;
this._currentHash = getCurrentHash();
@ -4469,19 +4501,23 @@ class PDFHistory {
this._destination = null;
this._position = null;
if (!this._isValidState(state) || resetHistory) {
let { hash, page } = parseCurrentHash(this.linkService);
let { hash, page, rotation } = parseCurrentHash(this.linkService);
if (!hash || reInitialized || resetHistory) {
this._pushOrReplaceState(null, true);
return;
}
this._pushOrReplaceState({
hash,
page
page,
rotation
}, true);
return;
}
let destination = state.destination;
this._updateInternalState(destination, state.uid, true);
if (destination.rotation !== undefined) {
this.initialRotation = destination.rotation;
}
if (destination.dest) {
this.initialBookmark = JSON.stringify(destination.dest);
this._destination.page = null;
@ -4516,8 +4552,15 @@ class PDFHistory {
this._pushOrReplaceState({
dest: explicitDest,
hash,
page: pageNumber
page: pageNumber,
rotation: this.linkService.rotation
}, forceReplace);
if (!this._popStateInProgress) {
this._popStateInProgress = true;
Promise.resolve().then(() => {
this._popStateInProgress = false;
});
}
}
pushCurrentPosition() {
if (!this.initialized || this._popStateInProgress) {
@ -4608,6 +4651,10 @@ class PDFHistory {
return true;
}
_updateInternalState(destination, uid, removeTemporary = false) {
if (this._updateViewareaTimeout) {
clearTimeout(this._updateViewareaTimeout);
this._updateViewareaTimeout = null;
}
if (removeTemporary && destination && destination.temporary) {
delete destination.temporary;
}
@ -4624,7 +4671,8 @@ class PDFHistory {
this._position = {
hash: this._isViewerInPresentationMode ? `page=${location.pageNumber}` : location.pdfOpenParams.substring(1),
page: this.linkService.page,
first: location.pageNumber
first: location.pageNumber,
rotation: location.rotation
};
if (this._popStateInProgress) {
return;
@ -4647,10 +4695,11 @@ class PDFHistory {
this._currentHash = newHash;
if (!state || false) {
this._currentUid = this._uid;
let { hash, page } = parseCurrentHash(this.linkService);
let { hash, page, rotation } = parseCurrentHash(this.linkService);
this._pushOrReplaceState({
hash,
page
page,
rotation
}, true);
return;
}
@ -4668,24 +4717,11 @@ class PDFHistory {
this._blockHashChange--;
});
}
if (state.uid < this._currentUid && this._position && this._destination) {
let 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;
}
}
let destination = state.destination;
this._updateInternalState(destination, state.uid, true);
if ((0, _ui_utils.isValidRotation)(destination.rotation)) {
this.linkService.rotation = destination.rotation;
}
if (destination.dest) {
this.linkService.navigateTo(destination.dest);
} else if (destination.hash) {
@ -6319,12 +6355,15 @@ class PDFThumbnailViewer {
return this._pagesRotation;
}
set pagesRotation(rotation) {
if (!(typeof rotation === 'number' && rotation % 90 === 0)) {
if (!(0, _ui_utils.isValidRotation)(rotation)) {
throw new Error('Invalid thumbnails rotation angle.');
}
if (!this.pdfDocument) {
return;
}
if (this._pagesRotation === rotation) {
return;
}
this._pagesRotation = rotation;
for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {
this._thumbnails[i].update(rotation);
@ -6531,7 +6570,7 @@ class PDFViewer {
return this._currentPageNumber;
}
set currentPageNumber(val) {
if ((val | 0) !== val) {
if (!Number.isInteger(val)) {
throw new Error('Invalid page number.');
}
if (!this.pdfDocument) {
@ -6600,18 +6639,29 @@ class PDFViewer {
return this._pagesRotation;
}
set pagesRotation(rotation) {
if (!(typeof rotation === 'number' && rotation % 90 === 0)) {
if (!(0, _ui_utils.isValidRotation)(rotation)) {
throw new Error('Invalid pages rotation angle.');
}
if (!this.pdfDocument) {
return;
}
if (this._pagesRotation === rotation) {
return;
}
this._pagesRotation = rotation;
let pageNumber = this._currentPageNumber;
for (let i = 0, ii = this._pages.length; i < ii; i++) {
let pageView = this._pages[i];
pageView.update(pageView.scale, rotation);
}
if (this._currentScaleValue) {
this._setScale(this._currentScaleValue, true);
}
this.eventBus.dispatch('rotationchanging', {
source: this,
pagesRotation: rotation,
pageNumber
});
if (this.defaultRenderingQueue) {
this.update();
}
@ -6940,6 +6990,7 @@ class PDFViewer {
scale: normalizedScaleValue,
top: intTop,
left: intLeft,
rotation: this._pagesRotation,
pdfOpenParams
};
}
@ -7220,7 +7271,7 @@ class BasePreferences {
throw new Error(`Set preference: "${value}" is a ${valueType}, ` + `expected a ${defaultType}.`);
}
} else {
if (valueType === 'number' && (value | 0) !== value) {
if (valueType === 'number' && !Number.isInteger(value)) {
throw new Error(`Set preference: "${value}" must be an integer.`);
}
}