From 6e6bd7ea0ea28cd1d510eb5906ca2d2c6ad3ce64 Mon Sep 17 00:00:00 2001 From: pdfjsbot Date: Thu, 13 Apr 2017 16:58:06 +0000 Subject: [PATCH] PDF.js version 1.8.199 - See mozilla/pdf.js@74b31ab18f1a368963f7337e2b7313a5f335e618 --- bower.json | 2 +- build/pdf.combined.js | 12 +- build/pdf.js | 12 +- build/pdf.min.js | 4 +- build/pdf.worker.js | 4 +- lib/display/api.js | 4 +- lib/display/global.js | 4 +- lib/pdf.js | 4 +- lib/pdf.worker.js | 4 +- lib/web/annotation_layer_builder.js | 26 +- lib/web/app.js | 510 +- lib/web/chromecom.js | 265 +- lib/web/dom_events.js | 11 +- lib/web/download_manager.js | 22 +- lib/web/firefox_print_service.js | 24 +- lib/web/firefoxcom.js | 216 +- lib/web/grab_to_pan.js | 3 + lib/web/hand_tool.js | 21 +- lib/web/overlay_manager.js | 3 + lib/web/password_prompt.js | 28 +- lib/web/pdf_attachment_viewer.js | 17 +- lib/web/pdf_document_properties.js | 30 +- lib/web/pdf_find_bar.js | 27 +- lib/web/pdf_find_controller.js | 11 +- lib/web/pdf_history.js | 10 +- lib/web/pdf_link_service.js | 16 +- lib/web/pdf_outline_viewer.js | 15 +- lib/web/pdf_page_view.js | 98 +- lib/web/pdf_presentation_mode.js | 11 +- lib/web/pdf_print_service.js | 43 +- lib/web/pdf_rendering_queue.js | 5 +- lib/web/pdf_sidebar.js | 19 +- lib/web/pdf_thumbnail_view.js | 46 +- lib/web/pdf_thumbnail_viewer.js | 27 +- lib/web/pdf_viewer.js | 110 +- lib/web/preferences.js | 31 +- lib/web/secondary_toolbar.js | 20 +- lib/web/text_layer_builder.js | 15 +- lib/web/toolbar.js | 36 +- lib/web/ui_utils.js | 25 +- lib/web/view_history.js | 3 + package.json | 2 +- web/pdf_viewer.js | 7922 ++++++++++++++++++++------- 43 files changed, 7266 insertions(+), 2452 deletions(-) diff --git a/bower.json b/bower.json index 951c7a585..ab44de35a 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "pdfjs-dist", - "version": "1.8.195", + "version": "1.8.199", "main": [ "build/pdf.js", "build/pdf.worker.js" diff --git a/build/pdf.combined.js b/build/pdf.combined.js index d4f62fb42..4eba7c778 100644 --- a/build/pdf.combined.js +++ b/build/pdf.combined.js @@ -12778,8 +12778,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() { } }; }(); -exports.version = '1.8.195'; -exports.build = 'c4c44c1b'; +exports.version = '1.8.199'; +exports.build = '74b31ab1'; exports.getDocument = getDocument; exports.PDFDataRangeTransport = PDFDataRangeTransport; exports.PDFWorker = PDFWorker; @@ -28040,8 +28040,8 @@ if (!globalScope.PDFJS) { globalScope.PDFJS = {}; } var PDFJS = globalScope.PDFJS; -PDFJS.version = '1.8.195'; -PDFJS.build = 'c4c44c1b'; +PDFJS.version = '1.8.199'; +PDFJS.build = '74b31ab1'; PDFJS.pdfBug = false; if (PDFJS.verbosity !== undefined) { sharedUtil.setVerbosityLevel(PDFJS.verbosity); @@ -43578,8 +43578,8 @@ exports.TilingPattern = TilingPattern; "use strict"; -var pdfjsVersion = '1.8.195'; -var pdfjsBuild = 'c4c44c1b'; +var pdfjsVersion = '1.8.199'; +var pdfjsBuild = '74b31ab1'; var pdfjsSharedUtil = __w_pdfjs_require__(0); var pdfjsDisplayGlobal = __w_pdfjs_require__(26); var pdfjsDisplayAPI = __w_pdfjs_require__(10); diff --git a/build/pdf.js b/build/pdf.js index bb084e10a..b8cec61f9 100644 --- a/build/pdf.js +++ b/build/pdf.js @@ -3492,8 +3492,8 @@ var _UnsupportedManager = function UnsupportedManagerClosure() { } }; }(); -exports.version = '1.8.195'; -exports.build = 'c4c44c1b'; +exports.version = '1.8.199'; +exports.build = '74b31ab1'; exports.getDocument = getDocument; exports.PDFDataRangeTransport = PDFDataRangeTransport; exports.PDFWorker = PDFWorker; @@ -5432,8 +5432,8 @@ if (!globalScope.PDFJS) { globalScope.PDFJS = {}; } var PDFJS = globalScope.PDFJS; -PDFJS.version = '1.8.195'; -PDFJS.build = 'c4c44c1b'; +PDFJS.version = '1.8.199'; +PDFJS.build = '74b31ab1'; PDFJS.pdfBug = false; if (PDFJS.verbosity !== undefined) { sharedUtil.setVerbosityLevel(PDFJS.verbosity); @@ -7934,8 +7934,8 @@ exports.TilingPattern = TilingPattern; "use strict"; -var pdfjsVersion = '1.8.195'; -var pdfjsBuild = 'c4c44c1b'; +var pdfjsVersion = '1.8.199'; +var pdfjsBuild = '74b31ab1'; var pdfjsSharedUtil = __w_pdfjs_require__(0); var pdfjsDisplayGlobal = __w_pdfjs_require__(9); var pdfjsDisplayAPI = __w_pdfjs_require__(3); diff --git a/build/pdf.min.js b/build/pdf.min.js index 272624884..f7001a6e7 100644 --- a/build/pdf.min.js +++ b/build/pdf.min.js @@ -1,6 +1,6 @@ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("pdfjs-dist/build/pdf",[],e):"object"==typeof exports?exports["pdfjs-dist/build/pdf"]=e():t["pdfjs-dist/build/pdf"]=t.pdfjsDistBuildPdf=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=13)}([function(t,e,n){"use strict";(function(t){function r(t){nt=t}function i(){return nt}function a(t){nt>=$.infos&&console.log("Info: "+t)}function s(t){nt>=$.warnings&&console.log("Warning: "+t)}function o(t){console.log("Deprecated API usage: "+t)}function c(t){throw nt>=$.errors&&(console.log("Error: "+t),console.log(l())),new Error(t)}function l(){try{throw new Error}catch(t){return t.stack?t.stack.split("\n").slice(2).join("\n"):""}}function h(t,e){t||c(e)}function u(t,e){try{var n=new URL(t);if(!n.origin||"null"===n.origin)return!1}catch(t){return!1}var r=new URL(e,n);return n.origin===r.origin}function d(t){if(!t)return!1;switch(t.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}function f(t,e){if(!t)return null;try{var n=e?new URL(t,e):new URL(t);if(d(n))return n}catch(t){}return null}function p(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!1}),n}function g(t){var e;return function(){return t&&(e=Object.create(null),t(e),t=null),e}}function m(t){return"string"!=typeof t?(s("The argument for removeNullCharacters must be a string."),t):t.replace(ft,"")}function A(t){h(null!==t&&"object"==typeof t&&void 0!==t.length,"Invalid argument for bytesToString");var e=t.length;if(e<8192)return String.fromCharCode.apply(null,t);for(var n=[],r=0;r>24&255,t>>16&255,t>>8&255,255&t)}function S(t){for(var e=1,n=0;t>e;)e<<=1,n++;return n}function w(t,e){return t[e]<<24>>24}function k(t,e){return t[e]<<8|t[e+1]}function C(t,e){return(t[e]<<24|t[e+1]<<16|t[e+2]<<8|t[e+3])>>>0}function _(){var t=new Uint8Array(2);return t[0]=1,1===new Uint16Array(t.buffer)[0]}function T(){try{return new Function(""),!0}catch(t){return!1}}function P(t){var e,n=t.length,r=[];if("þ"===t[0]&&"ÿ"===t[1])for(e=2;e>2:e,n(this.length)}function e(t){return{get:function(){var e=this.buffer,n=t<<2;return(e[n]|e[n+1]<<8|e[n+2]<<16|e[n+3]<<24)>>>0},set:function(e){var n=this.buffer,r=t<<2;n[r]=255&e,n[r+1]=e>>8&255,n[r+2]=e>>16&255,n[r+3]=e>>>24&255}}}function n(n){for(;rt[2]&&(e[0]=t[2],e[2]=t[0]),t[1]>t[3]&&(e[1]=t[3],e[3]=t[1]),e},t.intersect=function(e,n){function r(t,e){return t-e}var i=[e[0],e[2],n[0],n[2]].sort(r),a=[e[1],e[3],n[1],n[3]].sort(r),s=[];return e=t.normalizeRect(e),n=t.normalizeRect(n),(i[0]===e[0]&&i[1]===n[0]||i[0]===n[0]&&i[1]===e[0])&&(s[0]=i[1],s[2]=i[2],(a[0]===e[1]&&a[1]===n[1]||a[0]===n[1]&&a[1]===e[1])&&(s[1]=a[1],s[3]=a[2],s))},t.sign=function(t){return t<0?-1:1};var n=["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM","","X","XX","XXX","XL","L","LX","LXX","LXXX","XC","","I","II","III","IV","V","VI","VII","VIII","IX"];return t.toRoman=function(t,e){h(F(t)&&t>0,"The number should be a positive integer.");for(var r,i=[];t>=1e3;)t-=1e3,i.push("M");r=t/100|0,t%=100,i.push(n[r]),r=t/10|0,t%=10,i.push(n[10+r]),i.push(n[20+t]);var a=i.join("");return e?a.toLowerCase():a},t.appendToArray=function(t,e){Array.prototype.push.apply(t,e)},t.prependToArray=function(t,e){Array.prototype.unshift.apply(t,e)},t.extendObj=function(t,e){for(var n in e)t[n]=e[n]},t.getInheritableProperty=function(t,e,n){for(;t&&!t.has(e);)t=t.get("Parent");return t?n?t.getArray(e):t.get(e):null},t.inherit=function(t,e,n){t.prototype=Object.create(e.prototype),t.prototype.constructor=t;for(var r in n)t.prototype[r]=n[r]},t.loadScript=function(t,e){var n=document.createElement("script"),r=!1;n.setAttribute("src",t),e&&(n.onload=function(){r||e(),r=!0}),document.getElementsByTagName("head")[0].appendChild(n)},t}(),At=function(){function t(t,e,n,r,i,a){this.viewBox=t,this.scale=e,this.rotation=n,this.offsetX=r,this.offsetY=i;var s,o,c,l,h=(t[2]+t[0])/2,u=(t[3]+t[1])/2;switch(n%=360,n=n<0?n+360:n){case 180:s=-1,o=0,c=0,l=1;break;case 90:s=0,o=1,c=1,l=0;break;case 270:s=0,o=-1,c=-1,l=0;break;default:s=1,o=0,c=0,l=-1}a&&(c=-c,l=-l);var d,f,p,g;0===s?(d=Math.abs(u-t[1])*e+r,f=Math.abs(h-t[0])*e+i,p=Math.abs(t[3]-t[1])*e,g=Math.abs(t[2]-t[0])*e):(d=Math.abs(h-t[0])*e+r,f=Math.abs(u-t[1])*e+i,p=Math.abs(t[2]-t[0])*e,g=Math.abs(t[3]-t[1])*e),this.transform=[s*e,o*e,c*e,l*e,d-s*e*h-c*e*u,f-o*e*h-l*e*u],this.width=p,this.height=g,this.fontScale=e}return t.prototype={clone:function(e){e=e||{};var n="scale"in e?e.scale:this.scale,r="rotation"in e?e.rotation:this.rotation;return new t(this.viewBox.slice(),n,r,this.offsetX,this.offsetY,e.dontFlip)},convertToViewportPoint:function(t,e){return mt.applyTransform([t,e],this.transform)},convertToViewportRectangle:function(t){var e=mt.applyTransform([t[0],t[1]],this.transform),n=mt.applyTransform([t[2],t[3]],this.transform);return[e[0],e[1],n[0],n[1]]},convertToPdfPoint:function(t,e){return mt.applyInverseTransform([t,e],this.transform)}},t}(),vt=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364],bt=function(){function t(t,e,n){for(;t.lengtha&&(a=s.length)}for(e=0,n=r.length;e>2]+t[(3&c)<<4|l>>4]+t[s+1>6:64]+t[s+20?e:t.length,n>0?n:t.length);return t.substring(t.lastIndexOf("/",r)+1,r)}function s(t){var e=l.globalScope.PDFJS;switch(t){case"pdfBug":return!!e&&e.pdfBug;case"disableAutoFetch":return!!e&&e.disableAutoFetch;case"disableStream":return!!e&&e.disableStream;case"disableRange":return!!e&&e.disableRange;case"disableFontFace":return!!e&&e.disableFontFace;case"disableCreateObjectURL":return!!e&&e.disableCreateObjectURL;case"disableWebGL":return!e||e.disableWebGL;case"cMapUrl":return e?e.cMapUrl:null;case"cMapPacked":return!!e&&e.cMapPacked;case"postMessageTransfers":return!e||e.postMessageTransfers;case"workerPort":return e?e.workerPort:null;case"workerSrc":return e?e.workerSrc:null;case"disableWorker":return!!e&&e.disableWorker;case"maxImageSize":return e?e.maxImageSize:-1;case"imageResourcesPath":return e?e.imageResourcesPath:"";case"isEvalSupported":return!e||e.isEvalSupported;case"externalLinkTarget":if(!e)return S.NONE;switch(e.externalLinkTarget){case S.NONE:case S.SELF:case S.BLANK:case S.PARENT:case S.TOP:return e.externalLinkTarget}return d("PDFJS.externalLinkTarget is invalid: "+e.externalLinkTarget),e.externalLinkTarget=S.NONE,S.NONE;case"externalLinkRel":return e?e.externalLinkRel:A;case"enableStats":return!(!e||!e.enableStats);case"pdfjsNext":return!(!e||!e.pdfjsNext);default:throw new Error("Unknown default setting: "+t)}}function o(){switch(s("externalLinkTarget")){case S.NONE:return!1;case S.SELF:case S.BLANK:case S.PARENT:case S.TOP:return!0}}function c(t,e){return f("isValidUrl(), please use createValidAbsoluteUrl() instead."),null!==p(t,e?"http://example.com":null)}var l=n(0),h=l.assert,u=l.removeNullCharacters,d=l.warn,f=l.deprecated,p=l.createValidAbsoluteUrl,g=l.stringToBytes,m=l.CMapCompressionType,A="noopener noreferrer nofollow";r.prototype={create:function(t,e){h(t>0&&e>0,"invalid canvas size");var n=document.createElement("canvas"),r=n.getContext("2d");return n.width=t,n.height=e,{canvas:n,context:r}},reset:function(t,e,n){h(t.canvas,"canvas is not specified"),h(e>0&&n>0,"invalid canvas size"),t.canvas.width=e,t.canvas.height=n},destroy:function(t){h(t.canvas,"canvas is not specified"),t.canvas.width=0,t.canvas.height=0,t.canvas=null,t.context=null}};var v,b=function(){function t(t){this.baseUrl=t.baseUrl||null,this.isCompressed=t.isCompressed||!1}return t.prototype={fetch:function(t){var e=t.name;return e?new Promise(function(t,n){var r=this.baseUrl+e+(this.isCompressed?".bcmap":""),i=new XMLHttpRequest;i.open("GET",r,!0),this.isCompressed&&(i.responseType="arraybuffer"),i.onreadystatechange=function(){if(i.readyState===XMLHttpRequest.DONE){if(200===i.status||0===i.status){var e;if(this.isCompressed&&i.response?e=new Uint8Array(i.response):!this.isCompressed&&i.responseText&&(e=g(i.responseText)),e)return void t({cMapData:e,compressionType:this.isCompressed?m.BINARY:m.NONE})}n(new Error("Unable to load "+(this.isCompressed?"binary ":"")+"CMap at: "+r))}}.bind(this),i.send(null)}.bind(this)):Promise.reject(new Error("CMap name must be specified."))}},t}(),y=function(){function t(){}var e=["ms","Moz","Webkit","O"],n=Object.create(null);return t.getProp=function(t,r){if(1===arguments.length&&"string"==typeof n[t])return n[t];r=r||document.documentElement;var i,a,s=r.style;if("string"==typeof s[t])return n[t]=t;a=t.charAt(0).toUpperCase()+t.slice(1);for(var o=0,c=e.length;o0){i.style.borderWidth=e.borderStyle.width+"px",e.borderStyle.style!==s.UNDERLINE&&(a-=2*e.borderStyle.width,o-=2*e.borderStyle.width);var h=e.borderStyle.horizontalCornerRadius,u=e.borderStyle.verticalCornerRadius;if(h>0||u>0){var d=h+"px / "+u+"px";p.setProp("borderRadius",i,d)}switch(e.borderStyle.style){case s.SOLID:i.style.borderStyle="solid";break;case s.DASHED:i.style.borderStyle="dashed";break;case s.BEVELED:f("Unimplemented border style: beveled");break;case s.INSET:f("Unimplemented border style: inset");break;case s.UNDERLINE:i.style.borderBottomStyle="solid"}e.color?i.style.borderColor=l.makeCssRgb(0|e.color[0],0|e.color[1],0|e.color[2]):i.style.borderWidth=0}return i.style.left=c[0]+"px",i.style.top=c[1]+"px",i.style.width=a+"px",i.style.height=o+"px",i},_createPopup:function(t,e,n){e||(e=document.createElement("div"),e.style.height=t.style.height,e.style.width=t.style.width,t.appendChild(e));var r=new C({container:t,trigger:e,color:n.color,title:n.title,contents:n.contents,hideWrapper:!0}),i=r.render();i.style.left=t.style.width,t.appendChild(i)},render:function(){throw new Error("Abstract method AnnotationElement.render called")}},t}(),A=function(){function t(t){m.call(this,t,!0)}return l.inherit(t,m,{render:function(){this.container.className="linkAnnotation";var t=document.createElement("a");return h(t,{url:this.data.url,target:this.data.newWindow?u.BLANK:void 0}),this.data.url||(this.data.action?this._bindNamedAction(t,this.data.action):this._bindLink(t,this.data.dest)),this.container.appendChild(t),this.container},_bindLink:function(t,e){var n=this;t.href=this.linkService.getDestinationHash(e),t.onclick=function(){return e&&n.linkService.navigateTo(e),!1},e&&(t.className="internalLink")},_bindNamedAction:function(t,e){var n=this;t.href=this.linkService.getAnchorUrl(""),t.onclick=function(){return n.linkService.executeNamedAction(e),!1},t.className="internalLink"}}),t}(),v=function(){function t(t){var e=!!(t.data.hasPopup||t.data.title||t.data.contents);m.call(this,t,e)}return l.inherit(t,m,{render:function(){this.container.className="textAnnotation";var t=document.createElement("img");return t.style.height=this.container.style.height,t.style.width=this.container.style.width,t.src=this.imageResourcesPath+"annotation-"+this.data.name.toLowerCase()+".svg",t.alt="[{{type}} Annotation]",t.dataset.l10nId="text_annotation_type",t.dataset.l10nArgs=JSON.stringify({type:this.data.name}),this.data.hasPopup||this._createPopup(this.container,t,this.data),this.container.appendChild(t),this.container}}),t}(),b=function(){function t(t,e){m.call(this,t,e)}return l.inherit(t,m,{render:function(){return this.container}}),t}(),y=function(){function t(t){var e=t.renderInteractiveForms||!t.data.hasAppearance&&!!t.data.fieldValue;b.call(this,t,e)}var e=["left","center","right"];return l.inherit(t,b,{render:function(){this.container.className="textWidgetAnnotation";var t=null;if(this.renderInteractiveForms){if(this.data.multiLine?(t=document.createElement("textarea"),t.textContent=this.data.fieldValue):(t=document.createElement("input"),t.type="text",t.setAttribute("value",this.data.fieldValue)),t.disabled=this.data.readOnly,null!==this.data.maxLen&&(t.maxLength=this.data.maxLen),this.data.comb){var n=this.data.rect[2]-this.data.rect[0],r=n/this.data.maxLen;t.classList.add("comb"),t.style.letterSpacing="calc("+r+"px - 1ch)"}}else{t=document.createElement("div"),t.textContent=this.data.fieldValue,t.style.verticalAlign="middle",t.style.display="table-cell";var i=null;this.data.fontRefName&&(i=this.page.commonObjs.getData(this.data.fontRefName)),this._setTextStyle(t,i)}return null!==this.data.textAlignment&&(t.style.textAlign=e[this.data.textAlignment]),this.container.appendChild(t),this.container},_setTextStyle:function(t,e){var n=t.style;if(n.fontSize=this.data.fontSize+"px",n.direction=this.data.fontDirection<0?"rtl":"ltr",e){n.fontWeight=e.black?e.bold?"900":"bold":e.bold?"bold":"normal",n.fontStyle=e.italic?"italic":"normal";var r=e.loadedName?'"'+e.loadedName+'", ':"",i=e.fallbackName||"Helvetica, sans-serif";n.fontFamily=r+i}}}),t}(),x=function(){function t(t){b.call(this,t,t.renderInteractiveForms)}return l.inherit(t,b,{render:function(){this.container.className="buttonWidgetAnnotation checkBox";var t=document.createElement("input");return t.disabled=this.data.readOnly,t.type="checkbox",this.data.fieldValue&&"Off"!==this.data.fieldValue&&t.setAttribute("checked",!0),this.container.appendChild(t),this.container}}),t}(),S=function(){function t(t){b.call(this,t,t.renderInteractiveForms)}return l.inherit(t,b,{render:function(){this.container.className="buttonWidgetAnnotation radioButton";var t=document.createElement("input");return t.disabled=this.data.readOnly,t.type="radio",t.name=this.data.fieldName,this.data.fieldValue===this.data.buttonValue&&t.setAttribute("checked",!0),this.container.appendChild(t),this.container}}),t}(),w=function(){function t(t){b.call(this,t,t.renderInteractiveForms)}return l.inherit(t,b,{render:function(){this.container.className="choiceWidgetAnnotation";var t=document.createElement("select");t.disabled=this.data.readOnly,this.data.combo||(t.size=this.data.options.length,this.data.multiSelect&&(t.multiple=!0));for(var e=0,n=this.data.options.length;e=0&&i.setAttribute("selected",!0),t.appendChild(i)}return this.container.appendChild(t),this.container}}),t}(),k=function(){function t(t){var e=!(!t.data.title&&!t.data.contents);m.call(this,t,e)}var e=["Line"];return l.inherit(t,m,{render:function(){if(this.container.className="popupAnnotation",e.indexOf(this.data.parentType)>=0)return this.container;var t='[data-annotation-id="'+this.data.parentId+'"]',n=this.layer.querySelector(t);if(!n)return this.container;var r=new C({container:this.container,trigger:n,color:this.data.color,title:this.data.title,contents:this.data.contents}),i=parseFloat(n.style.left),a=parseFloat(n.style.width);return p.setProp("transformOrigin",this.container,-(i+a)+"px -"+n.style.top),this.container.style.left=i+a+"px",this.container.appendChild(r.render()),this.container}}),t}(),C=function(){function t(t){this.container=t.container,this.trigger=t.trigger,this.color=t.color,this.title=t.title,this.contents=t.contents,this.hideWrapper=t.hideWrapper||!1,this.pinned=!1}return t.prototype={render:function(){var t=document.createElement("div");t.className="popupWrapper",this.hideElement=this.hideWrapper?t:this.container,this.hideElement.setAttribute("hidden",!0);var e=document.createElement("div");e.className="popup";var n=this.color;if(n){var r=.7*(255-n[0])+n[0],i=.7*(255-n[1])+n[1],a=.7*(255-n[2])+n[2];e.style.backgroundColor=l.makeCssRgb(0|r,0|i,0|a)}var s=this._formatContents(this.contents),o=document.createElement("h1");return o.textContent=this.title,this.trigger.addEventListener("click",this._toggle.bind(this)),this.trigger.addEventListener("mouseover",this._show.bind(this,!1)),this.trigger.addEventListener("mouseout",this._hide.bind(this,!1)),e.addEventListener("click",this._hide.bind(this,!0)),e.appendChild(o),e.appendChild(s),t.appendChild(e),t},_formatContents:function(t){for(var e=document.createElement("p"),n=t.split(/(?:\r\n?|\n)/),r=0,i=n.length;r1&&S("getDocument is called with pdfDataRangeTransport, passwordCallback or progressCallback argument"),e&&(e instanceof J||(e=Object.create(e),e.length=t.length,e.initialData=t.initialData,e.abort||(e.abort=function(){})),t=Object.create(t),t.range=e),a.onPassword=n||null,a.onProgress=r||null;var s;"string"==typeof t?s={url:t}:T(t)?s={data:t}:t instanceof J?s={range:t}:("object"!=typeof t&&x("Invalid parameter in getDocument, need either Uint8Array, string or a parameter object"),t.url||t.data||t.range||x("Invalid parameter object: need either .data, .range or .url"),s=t);var o={},c=null,l=null;for(var h in s)if("url"!==h||"undefined"==typeof window)if("range"!==h)if("worker"!==h)if("data"!==h||s[h]instanceof Uint8Array)o[h]=s[h];else{var u=s[h];"string"==typeof u?o[h]=E(u):"object"!=typeof u||null===u||isNaN(u.length)?T(u)?o[h]=new Uint8Array(u):x("Invalid PDF binary data: either typed array, string or array-like object is expected in the data property."):o[h]=new Uint8Array(u)}else l=s[h];else c=s[h];else o[h]=new URL(s[h],window.location).href;o.rangeChunkSize=o.rangeChunkSize||W,o.disableNativeImageDecoder=!0===o.disableNativeImageDecoder,o.ignoreErrors=!0!==o.stopAtErrors;var f=o.CMapReaderFactory||B;if(!l){var p=j("workerPort");l=p?new Z(null,p):new Z,a._worker=l}var g=a.docId;return l.promise.then(function(){if(a.destroyed)throw new Error("Loading aborted");return i(l,o,c,g).then(function(t){if(a.destroyed)throw new Error("Loading aborted");var e=new d(g,t,l.port),n=new $(e,a,c,f);a._transport=n,e.send("Ready",null)})}).catch(a._capability.reject),a}function i(t,e,n,r){return t.destroyed?Promise.reject(new Error("Worker was destroyed")):(e.disableAutoFetch=j("disableAutoFetch"),e.disableStream=j("disableStream"),e.chunkedViewerLoading=!!n,n&&(e.length=n.length,e.initialData=n.initialData),t.messageHandler.sendWithPromise("GetDocRequest",{docId:r,source:e,disableRange:j("disableRange"),maxImageSize:j("maxImageSize"),disableFontFace:j("disableFontFace"),disableCreateObjectURL:j("disableCreateObjectURL"),postMessageTransfers:j("postMessageTransfers")&&!X,docBaseUrl:e.docBaseUrl,disableNativeImageDecoder:e.disableNativeImageDecoder,ignoreErrors:e.ignoreErrors}).then(function(e){if(t.destroyed)throw new Error("Worker was destroyed");return e}))}var a,s=n(0),o=n(11),c=n(10),l=n(7),h=n(1),u=s.InvalidPDFException,d=s.MessageHandler,f=s.MissingPDFException,p=s.PageViewport,g=s.PasswordException,m=s.StatTimer,A=s.UnexpectedResponseException,v=s.UnknownErrorException,b=s.Util,y=s.createPromiseCapability,x=s.error,S=s.deprecated,w=s.getVerbosityLevel,k=s.info,C=s.isInt,_=s.isArray,T=s.isArrayBuffer,P=s.isSameOrigin,L=s.loadJpegStream,E=s.stringToBytes,R=s.globalScope,I=s.warn,F=o.FontFaceObject,O=o.FontLoader,N=c.CanvasGraphics,M=l.Metadata,D=h.RenderingCancelledException,j=h.getDefaultSetting,U=h.DOMCanvasFactory,B=h.DOMCMapReaderFactory,W=65536,G=!1,X=!1,H="undefined"!=typeof document&&document.currentScript?document.currentScript.src:null,z=null,Y=!1;if("undefined"==typeof __pdfjsdev_webpack__){"undefined"==typeof window?(G=!0,void 0===require.ensure&&(require.ensure=require("node-ensure")),Y=!0):"undefined"!=typeof require&&"function"==typeof require.ensure&&(Y=!0),"undefined"!=typeof requirejs&&requirejs.toUrl&&(a=requirejs.toUrl("pdfjs-dist/build/pdf.worker.js"));var q="undefined"!=typeof requirejs&&requirejs.load;z=Y?function(t){require.ensure([],function(){var e=require("./pdf.worker.js");t(e.WorkerMessageHandler)})}:q?function(t){requirejs(["pdfjs-dist/build/pdf.worker"],function(e){t(e.WorkerMessageHandler)})}:null}var V=function(){function t(){this._capability=y(),this._transport=null,this._worker=null,this.docId="d"+e++,this.destroyed=!1,this.onPassword=null,this.onProgress=null,this.onUnsupportedFeature=null}var e=0;return t.prototype={get promise(){return this._capability.promise},destroy:function(){return this.destroyed=!0,(this._transport?this._transport.destroy():Promise.resolve()).then(function(){this._transport=null,this._worker&&(this._worker.destroy(),this._worker=null)}.bind(this))},then:function(t,e){return this.promise.then.apply(this.promise,arguments)}},t}(),J=function(){function t(t,e){this.length=t,this.initialData=e,this._rangeListeners=[],this._progressListeners=[],this._progressiveReadListeners=[],this._readyCapability=y()}return t.prototype={addRangeListener:function(t){this._rangeListeners.push(t)},addProgressListener:function(t){this._progressListeners.push(t)},addProgressiveReadListener:function(t){this._progressiveReadListeners.push(t)},onDataRange:function(t,e){for(var n=this._rangeListeners,r=0,i=n.length;r=0&&a.renderTasks.splice(e,1),c.cleanupAfterRender&&(c.pendingCleanup=!0),c._tryCleanup(),t?s.capability.reject(t):s.capability.resolve(),n.timeEnd("Rendering"),n.timeEnd("Overall")}var n=this.stats;n.time("Overall"),this.pendingCleanup=!1;var r="print"===t.intent?"print":"display",i=t.canvasFactory||new U;this.intentStates[r]||(this.intentStates[r]=Object.create(null));var a=this.intentStates[r];a.displayReadyCapability||(a.receivingOperatorList=!0,a.displayReadyCapability=y(),a.operatorList={fnArray:[],argsArray:[],lastChunk:!1},this.stats.time("Page Request"),this.transport.messageHandler.send("RenderPageRequest",{pageIndex:this.pageNumber-1,intent:r,renderInteractiveForms:!0===t.renderInteractiveForms}));var s=new nt(e,t,this.objs,this.commonObjs,a.operatorList,this.pageNumber,i);s.useRequestAnimationFrame="print"!==r,a.renderTasks||(a.renderTasks=[]),a.renderTasks.push(s);var o=s.task;t.continueCallback&&(S("render is used with continueCallback parameter"),o.onContinue=t.continueCallback);var c=this;return a.displayReadyCapability.promise.then(function(t){if(c.pendingCleanup)return void e();n.time("Rendering"),s.initializeGraphics(t),s.operatorListChanged()},function(t){e(t)}),o},getOperatorList:function(){function t(){if(n.operatorList.lastChunk){n.opListReadCapability.resolve(n.operatorList);var t=n.renderTasks.indexOf(e);t>=0&&n.renderTasks.splice(t,1)}}this.intentStates.oplist||(this.intentStates.oplist=Object.create(null));var e,n=this.intentStates.oplist;return n.opListReadCapability||(e={},e.operatorListChanged=t,n.receivingOperatorList=!0,n.opListReadCapability=y(),n.renderTasks=[],n.renderTasks.push(e),n.operatorList={fnArray:[],argsArray:[],lastChunk:!1},this.transport.messageHandler.send("RenderPageRequest",{pageIndex:this.pageIndex,intent:"oplist"})),n.opListReadCapability.promise},getTextContent:function(t){return t=t||{},this.transport.messageHandler.sendWithPromise("GetTextContent",{pageIndex:this.pageNumber-1,normalizeWhitespace:!0===t.normalizeWhitespace,combineTextItems:!0!==t.disableCombineTextItems})},_destroy:function(){this.destroyed=!0,this.transport.pageCache[this.pageIndex]=null;var t=[];return Object.keys(this.intentStates).forEach(function(e){if("oplist"!==e){this.intentStates[e].renderTasks.forEach(function(e){var n=e.capability.promise.catch(function(){});t.push(n),e.cancel()})}},this),this.objs.clear(),this.annotationsPromise=null,this.pendingCleanup=!1,Promise.all(t)},destroy:function(){S("page destroy method, use cleanup() instead"),this.cleanup()},cleanup:function(){this.pendingCleanup=!0,this._tryCleanup()},_tryCleanup:function(){this.pendingCleanup&&!Object.keys(this.intentStates).some(function(t){var e=this.intentStates[t];return 0!==e.renderTasks.length||e.receivingOperatorList},this)&&(Object.keys(this.intentStates).forEach(function(t){delete this.intentStates[t]},this),this.objs.clear(),this.annotationsPromise=null,this.pendingCleanup=!1)},_startRenderPage:function(t,e){var n=this.intentStates[e];n.displayReadyCapability&&n.displayReadyCapability.resolve(t)},_renderPageChunk:function(t,e){var n,r,i=this.intentStates[e];for(n=0,r=t.length;n=0;return i=t===a?t:s?new t.constructor(a,t.byteOffset,t.byteLength):new t.constructor(t),r.set(t,i),i}i=_(t)?[]:{},r.set(t,i);for(var o in t){for(var c,l=t;!(c=Object.getOwnPropertyDescriptor(l,o));)l=Object.getPrototypeOf(l);void 0!==c.value&&"function"!=typeof c.value&&(i[o]=n(c.value))}return i}if(!this._defer)return void this._listeners.forEach(function(e){e.call(this,{data:t})},this);var r=new WeakMap,i={data:n(t)};this._deferred.then(function(){this._listeners.forEach(function(t){t.call(this,i)},this)}.bind(this))},addEventListener:function(t,e){this._listeners.push(e)},removeEventListener:function(t,e){var n=this._listeners.indexOf(e);this._listeners.splice(n,1)},terminate:function(){this._listeners=[]}},i.prototype={get promise(){return this._readyCapability.promise},get port(){return this._port},get messageHandler(){return this._messageHandler},_initializeFromPort:function(t){this._port=t,this._messageHandler=new d("main","worker",t),this._messageHandler.on("ready",function(){}),this._readyCapability.resolve()},_initialize:function(){if(!G&&!j("disableWorker")&&"undefined"!=typeof Worker){var e=t();try{P(window.location.href,e)||(e=r(new URL(e,window.location).href));var n=new Worker(e),i=new d("main","worker",n),a=function(){n.removeEventListener("error",s),i.destroy(),n.terminate(),this.destroyed?this._readyCapability.reject(new Error("Worker was destroyed")):this._setupFakeWorker()}.bind(this),s=function(t){this._webWorker||a()}.bind(this);n.addEventListener("error",s),i.on("test",function(t){if(n.removeEventListener("error",s),this.destroyed)return void a();t&&t.supportTypedArray?(this._messageHandler=i,this._port=n,this._webWorker=n,t.supportTransfers||(X=!0),this._readyCapability.resolve(),i.send("configure",{verbosity:w()})):(this._setupFakeWorker(),i.destroy(),n.terminate())}.bind(this)),i.on("console_log",function(t){console.log.apply(console,t)}),i.on("console_error",function(t){console.error.apply(console,t)}),i.on("ready",function(t){if(n.removeEventListener("error",s),this.destroyed)return void a();try{o()}catch(t){this._setupFakeWorker()}}.bind(this));var o=function(){var t=j("postMessageTransfers")&&!X,e=new Uint8Array([t?255:0]);try{i.send("test",e,[e.buffer])}catch(t){k("Cannot use postMessage transfers"),e[0]=0,i.send("test",e)}};return void o()}catch(t){k("The worker has been disabled.")}}this._setupFakeWorker()},_setupFakeWorker:function(){G||j("disableWorker")||(I("Setting up fake worker."),G=!0),e().then(function(t){if(this.destroyed)return void this._readyCapability.reject(new Error("Worker was destroyed"));var e=Uint8Array!==Float32Array,r=new n(e);this._port=r;var i="fake"+o++,a=new d(i+"_worker",i,r);t.setup(a,r);var s=new d(i,i+"_worker",r);this._messageHandler=s,this._readyCapability.resolve()}.bind(this))},destroy:function(){this.destroyed=!0,this._webWorker&&(this._webWorker.terminate(),this._webWorker=null),this._port=null,this._messageHandler&&(this._messageHandler.destroy(),this._messageHandler=null)}},i}(),$=function(){function t(t,e,n,r){this.messageHandler=t,this.loadingTask=e,this.pdfDataRangeTransport=n,this.commonObjs=new tt,this.fontLoader=new O(e.docId),this.CMapReaderFactory=new r({baseUrl:j("cMapUrl"),isCompressed:j("cMapPacked")}),this.destroyed=!1,this.destroyCapability=null,this._passwordCapability=null,this.pageCache=[],this.pagePromises=[],this.downloadInfoCapability=y(),this.setupMessageHandler()}return t.prototype={destroy:function(){if(this.destroyCapability)return this.destroyCapability.promise;this.destroyed=!0,this.destroyCapability=y(),this._passwordCapability&&this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback"));var t=[];this.pageCache.forEach(function(e){e&&t.push(e._destroy())}),this.pageCache=[],this.pagePromises=[];var e=this,n=this.messageHandler.sendWithPromise("Terminate",null);return t.push(n),Promise.all(t).then(function(){e.fontLoader.clear(),e.pdfDataRangeTransport&&(e.pdfDataRangeTransport.abort(),e.pdfDataRangeTransport=null),e.messageHandler&&(e.messageHandler.destroy(),e.messageHandler=null),e.destroyCapability.resolve()},this.destroyCapability.reject),this.destroyCapability.promise},setupMessageHandler:function(){var t=this.messageHandler,e=this.loadingTask,n=this.pdfDataRangeTransport;n&&(n.addRangeListener(function(e,n){t.send("OnDataRange",{begin:e,chunk:n})}),n.addProgressListener(function(e){t.send("OnDataProgress",{loaded:e})}),n.addProgressiveReadListener(function(e){t.send("OnDataRange",{chunk:e})}),t.on("RequestDataRange",function(t){n.requestDataRange(t.begin,t.end)},this)),t.on("GetDoc",function(t){var e=t.pdfInfo;this.numPages=t.pdfInfo.numPages;var n=this.loadingTask,r=new Q(e,this,n);this.pdfDocument=r,n._capability.resolve(r)},this),t.on("PasswordRequest",function(t){if(this._passwordCapability=y(),e.onPassword){var n=function(t){this._passwordCapability.resolve({password:t})}.bind(this);e.onPassword(n,t.code)}else this._passwordCapability.reject(new g(t.message,t.code));return this._passwordCapability.promise},this),t.on("PasswordException",function(t){e._capability.reject(new g(t.message,t.code))},this),t.on("InvalidPDF",function(t){this.loadingTask._capability.reject(new u(t.message))},this),t.on("MissingPDF",function(t){this.loadingTask._capability.reject(new f(t.message))},this),t.on("UnexpectedResponse",function(t){this.loadingTask._capability.reject(new A(t.message,t.status))},this),t.on("UnknownError",function(t){this.loadingTask._capability.reject(new v(t.message,t.details))},this),t.on("DataLoaded",function(t){this.downloadInfoCapability.resolve(t)},this),t.on("PDFManagerReady",function(t){this.pdfDataRangeTransport&&this.pdfDataRangeTransport.transportReady()},this),t.on("StartRenderPage",function(t){if(!this.destroyed){var e=this.pageCache[t.pageIndex];e.stats.timeEnd("Page Request"),e._startRenderPage(t.transparency,t.intent)}},this),t.on("RenderPageChunk",function(t){if(!this.destroyed){this.pageCache[t.pageIndex]._renderPageChunk(t.operatorList,t.intent)}},this),t.on("commonobj",function(t){if(!this.destroyed){var e=t[0],n=t[1];if(!this.commonObjs.hasData(e))switch(n){case"Font":var r=t[2];if("error"in r){var i=r.error;I("Error during font loading: "+i),this.commonObjs.resolve(e,i);break}var a=null;j("pdfBug")&&R.FontInspector&&R.FontInspector.enabled&&(a={registerFont:function(t,e){R.FontInspector.fontAdded(t,e)}});var s=new F(r,{isEvalSuported:j("isEvalSupported"),disableFontFace:j("disableFontFace"),fontRegistry:a});this.fontLoader.bind([s],function(t){this.commonObjs.resolve(e,s)}.bind(this));break;case"FontPath":this.commonObjs.resolve(e,t[2]);break;default:x("Got unknown common object type "+n)}}},this),t.on("obj",function(t){if(!this.destroyed){var e,n=t[0],r=t[1],i=t[2],a=this.pageCache[r];if(!a.objs.hasData(n))switch(i){case"JpegStream":e=t[3],L(n,e,a.objs);break;case"Image":e=t[3],a.objs.resolve(n,e);e&&"data"in e&&e.data.length>8e6&&(a.cleanupAfterRender=!0);break;default:x("Got unknown object type "+i)}}},this),t.on("DocProgress",function(t){if(!this.destroyed){var e=this.loadingTask;e.onProgress&&e.onProgress({loaded:t.loaded,total:t.total})}},this),t.on("PageError",function(t){if(!this.destroyed){var e=this.pageCache[t.pageNum-1],n=e.intentStates[t.intent];if(n.displayReadyCapability?n.displayReadyCapability.reject(t.error):x(t.error),n.operatorList){n.operatorList.lastChunk=!0;for(var r=0;rthis.numPages)return Promise.reject(new Error("Invalid page request"));var n=t-1;if(n in this.pagePromises)return this.pagePromises[n];var r=this.messageHandler.sendWithPromise("GetPage",{pageIndex:n}).then(function(t){if(this.destroyed)throw new Error("Transport destroyed");var e=new K(n,t,this);return this.pageCache[n]=e,e}.bind(this));return this.pagePromises[n]=r,r},getPageIndex:function(t){return this.messageHandler.sendWithPromise("GetPageIndex",{ref:t}).catch(function(t){return Promise.reject(new Error(t))})},getAnnotations:function(t,e){return this.messageHandler.sendWithPromise("GetAnnotations",{pageIndex:t,intent:e})},getDestinations:function(){return this.messageHandler.sendWithPromise("GetDestinations",null)},getDestination:function(t){return this.messageHandler.sendWithPromise("GetDestination",{id:t})},getPageLabels:function(){return this.messageHandler.sendWithPromise("GetPageLabels",null)},getAttachments:function(){return this.messageHandler.sendWithPromise("GetAttachments",null)},getJavaScript:function(){return this.messageHandler.sendWithPromise("GetJavaScript",null)},getOutline:function(){return this.messageHandler.sendWithPromise("GetOutline",null)},getMetadata:function(){return this.messageHandler.sendWithPromise("GetMetadata",null).then(function(t){return{info:t[0],metadata:t[1]?new M(t[1]):null}})},getStats:function(){return this.messageHandler.sendWithPromise("GetStats",null)},startCleanup:function(){this.messageHandler.sendWithPromise("Cleanup",null).then(function(){for(var t=0,e=this.pageCache.length;t>>8^o[a]}return-1^r}function e(e,n,r,i){var a=i,s=n.length;r[a]=s>>24&255,r[a+1]=s>>16&255,r[a+2]=s>>8&255,r[a+3]=255&s,a+=4,r[a]=255&e.charCodeAt(0),r[a+1]=255&e.charCodeAt(1),r[a+2]=255&e.charCodeAt(2),r[a+3]=255&e.charCodeAt(3),a+=4,r.set(n,a),a+=n.length;var o=t(r,i+4,a);r[a]=o>>24&255,r[a+1]=o>>16&255,r[a+2]=o>>8&255,r[a+3]=255&o}function n(t,e,n){for(var r=1,i=0,a=e;a>3;break;case s.RGB_24BPP:l=2,c=8,h=3*u;break;case s.RGBA_32BPP:l=6,c=8,h=4*u;break;default:throw new Error("invalid format")}var g,m,A=new Uint8Array((1+h)*f),v=0,b=0;for(g=0;g>24&255,u>>16&255,u>>8&255,255&u,f>>24&255,f>>16&255,f>>8&255,255&f,c,l,0,0,0]),x=A.length,S=Math.ceil(x/65535),w=new Uint8Array(2+x+5*S+4),k=0;w[k++]=120,w[k++]=156;for(var C=0;x>65535;)w[k++]=0,w[k++]=255,w[k++]=255,w[k++]=0,w[k++]=0,w.set(A.subarray(C,C+65535),k),k+=65535,C+=65535,x-=65535;w[k++]=1,w[k++]=255&x,w[k++]=x>>8&255,w[k++]=255&~x,w[k++]=(65535&~x)>>8&255,w.set(A.subarray(C),k),k+=A.length-C;var _=n(A,0,A.length);w[k++]=_>>24&255,w[k++]=_>>16&255,w[k++]=_>>8&255,w[k++]=255&_;var T=i.length+3*a+y.length+w.length,P=new Uint8Array(T),L=0;return P.set(i,L),L+=i.length,e("IHDR",y,P,L),L+=a+y.length,e("IDATA",w,P,L),L+=a+w.length,e("IEND",new Uint8Array(0),P,L),d(P,"image/png",o)}for(var i=new Uint8Array([137,80,78,71,13,10,26,10]),a=12,o=new Int32Array(256),c=0;c<256;c++){for(var l=c,h=0;h<8;h++)l=1&l?3988292384^l>>1&2147483647:l>>1&2147483647;o[c]=l}return function(t,e){return r(t,void 0===t.kind?s.GRAYSCALE_1BPP:t.kind,e)}}(),g=function(){function t(){this.fontSizeScale=1,this.fontWeight=f.fontWeight,this.fontSize=0,this.textMatrix=a,this.fontMatrix=i,this.leading=0,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRise=0,this.fillColor=f.fillColor,this.strokeColor="#000000",this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.lineJoin="",this.lineCap="",this.miterLimit=0,this.dashArray=[],this.dashPhase=0,this.dependencies=[],this.activeClipUrl=null,this.clipGroup=null,this.maskId=""}return t.prototype={clone:function(){return Object.create(this)},setCurrentPoint:function(t,e){this.x=t,this.y=e}},t}(),m=function(){function t(t){for(var e=[],n=[],r=t.length,i=0;i1&&S("getDocument is called with pdfDataRangeTransport, passwordCallback or progressCallback argument"),e&&(e instanceof J||(e=Object.create(e),e.length=t.length,e.initialData=t.initialData,e.abort||(e.abort=function(){})),t=Object.create(t),t.range=e),a.onPassword=n||null,a.onProgress=r||null;var s;"string"==typeof t?s={url:t}:T(t)?s={data:t}:t instanceof J?s={range:t}:("object"!=typeof t&&x("Invalid parameter in getDocument, need either Uint8Array, string or a parameter object"),t.url||t.data||t.range||x("Invalid parameter object: need either .data, .range or .url"),s=t);var o={},c=null,l=null;for(var h in s)if("url"!==h||"undefined"==typeof window)if("range"!==h)if("worker"!==h)if("data"!==h||s[h]instanceof Uint8Array)o[h]=s[h];else{var u=s[h];"string"==typeof u?o[h]=E(u):"object"!=typeof u||null===u||isNaN(u.length)?T(u)?o[h]=new Uint8Array(u):x("Invalid PDF binary data: either typed array, string or array-like object is expected in the data property."):o[h]=new Uint8Array(u)}else l=s[h];else c=s[h];else o[h]=new URL(s[h],window.location).href;o.rangeChunkSize=o.rangeChunkSize||W,o.disableNativeImageDecoder=!0===o.disableNativeImageDecoder,o.ignoreErrors=!0!==o.stopAtErrors;var f=o.CMapReaderFactory||B;if(!l){var p=j("workerPort");l=p?new Z(null,p):new Z,a._worker=l}var g=a.docId;return l.promise.then(function(){if(a.destroyed)throw new Error("Loading aborted");return i(l,o,c,g).then(function(t){if(a.destroyed)throw new Error("Loading aborted");var e=new d(g,t,l.port),n=new $(e,a,c,f);a._transport=n,e.send("Ready",null)})}).catch(a._capability.reject),a}function i(t,e,n,r){return t.destroyed?Promise.reject(new Error("Worker was destroyed")):(e.disableAutoFetch=j("disableAutoFetch"),e.disableStream=j("disableStream"),e.chunkedViewerLoading=!!n,n&&(e.length=n.length,e.initialData=n.initialData),t.messageHandler.sendWithPromise("GetDocRequest",{docId:r,source:e,disableRange:j("disableRange"),maxImageSize:j("maxImageSize"),disableFontFace:j("disableFontFace"),disableCreateObjectURL:j("disableCreateObjectURL"),postMessageTransfers:j("postMessageTransfers")&&!X,docBaseUrl:e.docBaseUrl,disableNativeImageDecoder:e.disableNativeImageDecoder,ignoreErrors:e.ignoreErrors}).then(function(e){if(t.destroyed)throw new Error("Worker was destroyed");return e}))}var a,s=n(0),o=n(11),c=n(10),l=n(7),h=n(1),u=s.InvalidPDFException,d=s.MessageHandler,f=s.MissingPDFException,p=s.PageViewport,g=s.PasswordException,m=s.StatTimer,A=s.UnexpectedResponseException,v=s.UnknownErrorException,b=s.Util,y=s.createPromiseCapability,x=s.error,S=s.deprecated,w=s.getVerbosityLevel,k=s.info,C=s.isInt,_=s.isArray,T=s.isArrayBuffer,P=s.isSameOrigin,L=s.loadJpegStream,E=s.stringToBytes,R=s.globalScope,I=s.warn,F=o.FontFaceObject,O=o.FontLoader,N=c.CanvasGraphics,M=l.Metadata,D=h.RenderingCancelledException,j=h.getDefaultSetting,U=h.DOMCanvasFactory,B=h.DOMCMapReaderFactory,W=65536,G=!1,X=!1,H="undefined"!=typeof document&&document.currentScript?document.currentScript.src:null,z=null,Y=!1;if("undefined"==typeof __pdfjsdev_webpack__){"undefined"==typeof window?(G=!0,void 0===require.ensure&&(require.ensure=require("node-ensure")),Y=!0):"undefined"!=typeof require&&"function"==typeof require.ensure&&(Y=!0),"undefined"!=typeof requirejs&&requirejs.toUrl&&(a=requirejs.toUrl("pdfjs-dist/build/pdf.worker.js"));var q="undefined"!=typeof requirejs&&requirejs.load;z=Y?function(t){require.ensure([],function(){var e=require("./pdf.worker.js");t(e.WorkerMessageHandler)})}:q?function(t){requirejs(["pdfjs-dist/build/pdf.worker"],function(e){t(e.WorkerMessageHandler)})}:null}var V=function(){function t(){this._capability=y(),this._transport=null,this._worker=null,this.docId="d"+e++,this.destroyed=!1,this.onPassword=null,this.onProgress=null,this.onUnsupportedFeature=null}var e=0;return t.prototype={get promise(){return this._capability.promise},destroy:function(){return this.destroyed=!0,(this._transport?this._transport.destroy():Promise.resolve()).then(function(){this._transport=null,this._worker&&(this._worker.destroy(),this._worker=null)}.bind(this))},then:function(t,e){return this.promise.then.apply(this.promise,arguments)}},t}(),J=function(){function t(t,e){this.length=t,this.initialData=e,this._rangeListeners=[],this._progressListeners=[],this._progressiveReadListeners=[],this._readyCapability=y()}return t.prototype={addRangeListener:function(t){this._rangeListeners.push(t)},addProgressListener:function(t){this._progressListeners.push(t)},addProgressiveReadListener:function(t){this._progressiveReadListeners.push(t)},onDataRange:function(t,e){for(var n=this._rangeListeners,r=0,i=n.length;r=0&&a.renderTasks.splice(e,1),c.cleanupAfterRender&&(c.pendingCleanup=!0),c._tryCleanup(),t?s.capability.reject(t):s.capability.resolve(),n.timeEnd("Rendering"),n.timeEnd("Overall")}var n=this.stats;n.time("Overall"),this.pendingCleanup=!1;var r="print"===t.intent?"print":"display",i=t.canvasFactory||new U;this.intentStates[r]||(this.intentStates[r]=Object.create(null));var a=this.intentStates[r];a.displayReadyCapability||(a.receivingOperatorList=!0,a.displayReadyCapability=y(),a.operatorList={fnArray:[],argsArray:[],lastChunk:!1},this.stats.time("Page Request"),this.transport.messageHandler.send("RenderPageRequest",{pageIndex:this.pageNumber-1,intent:r,renderInteractiveForms:!0===t.renderInteractiveForms}));var s=new nt(e,t,this.objs,this.commonObjs,a.operatorList,this.pageNumber,i);s.useRequestAnimationFrame="print"!==r,a.renderTasks||(a.renderTasks=[]),a.renderTasks.push(s);var o=s.task;t.continueCallback&&(S("render is used with continueCallback parameter"),o.onContinue=t.continueCallback);var c=this;return a.displayReadyCapability.promise.then(function(t){if(c.pendingCleanup)return void e();n.time("Rendering"),s.initializeGraphics(t),s.operatorListChanged()},function(t){e(t)}),o},getOperatorList:function(){function t(){if(n.operatorList.lastChunk){n.opListReadCapability.resolve(n.operatorList);var t=n.renderTasks.indexOf(e);t>=0&&n.renderTasks.splice(t,1)}}this.intentStates.oplist||(this.intentStates.oplist=Object.create(null));var e,n=this.intentStates.oplist;return n.opListReadCapability||(e={},e.operatorListChanged=t,n.receivingOperatorList=!0,n.opListReadCapability=y(),n.renderTasks=[],n.renderTasks.push(e),n.operatorList={fnArray:[],argsArray:[],lastChunk:!1},this.transport.messageHandler.send("RenderPageRequest",{pageIndex:this.pageIndex,intent:"oplist"})),n.opListReadCapability.promise},getTextContent:function(t){return t=t||{},this.transport.messageHandler.sendWithPromise("GetTextContent",{pageIndex:this.pageNumber-1,normalizeWhitespace:!0===t.normalizeWhitespace,combineTextItems:!0!==t.disableCombineTextItems})},_destroy:function(){this.destroyed=!0,this.transport.pageCache[this.pageIndex]=null;var t=[];return Object.keys(this.intentStates).forEach(function(e){if("oplist"!==e){this.intentStates[e].renderTasks.forEach(function(e){var n=e.capability.promise.catch(function(){});t.push(n),e.cancel()})}},this),this.objs.clear(),this.annotationsPromise=null,this.pendingCleanup=!1,Promise.all(t)},destroy:function(){S("page destroy method, use cleanup() instead"),this.cleanup()},cleanup:function(){this.pendingCleanup=!0,this._tryCleanup()},_tryCleanup:function(){this.pendingCleanup&&!Object.keys(this.intentStates).some(function(t){var e=this.intentStates[t];return 0!==e.renderTasks.length||e.receivingOperatorList},this)&&(Object.keys(this.intentStates).forEach(function(t){delete this.intentStates[t]},this),this.objs.clear(),this.annotationsPromise=null,this.pendingCleanup=!1)},_startRenderPage:function(t,e){var n=this.intentStates[e];n.displayReadyCapability&&n.displayReadyCapability.resolve(t)},_renderPageChunk:function(t,e){var n,r,i=this.intentStates[e];for(n=0,r=t.length;n=0;return i=t===a?t:s?new t.constructor(a,t.byteOffset,t.byteLength):new t.constructor(t),r.set(t,i),i}i=_(t)?[]:{},r.set(t,i);for(var o in t){for(var c,l=t;!(c=Object.getOwnPropertyDescriptor(l,o));)l=Object.getPrototypeOf(l);void 0!==c.value&&"function"!=typeof c.value&&(i[o]=n(c.value))}return i}if(!this._defer)return void this._listeners.forEach(function(e){e.call(this,{data:t})},this);var r=new WeakMap,i={data:n(t)};this._deferred.then(function(){this._listeners.forEach(function(t){t.call(this,i)},this)}.bind(this))},addEventListener:function(t,e){this._listeners.push(e)},removeEventListener:function(t,e){var n=this._listeners.indexOf(e);this._listeners.splice(n,1)},terminate:function(){this._listeners=[]}},i.prototype={get promise(){return this._readyCapability.promise},get port(){return this._port},get messageHandler(){return this._messageHandler},_initializeFromPort:function(t){this._port=t,this._messageHandler=new d("main","worker",t),this._messageHandler.on("ready",function(){}),this._readyCapability.resolve()},_initialize:function(){if(!G&&!j("disableWorker")&&"undefined"!=typeof Worker){var e=t();try{P(window.location.href,e)||(e=r(new URL(e,window.location).href));var n=new Worker(e),i=new d("main","worker",n),a=function(){n.removeEventListener("error",s),i.destroy(),n.terminate(),this.destroyed?this._readyCapability.reject(new Error("Worker was destroyed")):this._setupFakeWorker()}.bind(this),s=function(t){this._webWorker||a()}.bind(this);n.addEventListener("error",s),i.on("test",function(t){if(n.removeEventListener("error",s),this.destroyed)return void a();t&&t.supportTypedArray?(this._messageHandler=i,this._port=n,this._webWorker=n,t.supportTransfers||(X=!0),this._readyCapability.resolve(),i.send("configure",{verbosity:w()})):(this._setupFakeWorker(),i.destroy(),n.terminate())}.bind(this)),i.on("console_log",function(t){console.log.apply(console,t)}),i.on("console_error",function(t){console.error.apply(console,t)}),i.on("ready",function(t){if(n.removeEventListener("error",s),this.destroyed)return void a();try{o()}catch(t){this._setupFakeWorker()}}.bind(this));var o=function(){var t=j("postMessageTransfers")&&!X,e=new Uint8Array([t?255:0]);try{i.send("test",e,[e.buffer])}catch(t){k("Cannot use postMessage transfers"),e[0]=0,i.send("test",e)}};return void o()}catch(t){k("The worker has been disabled.")}}this._setupFakeWorker()},_setupFakeWorker:function(){G||j("disableWorker")||(I("Setting up fake worker."),G=!0),e().then(function(t){if(this.destroyed)return void this._readyCapability.reject(new Error("Worker was destroyed"));var e=Uint8Array!==Float32Array,r=new n(e);this._port=r;var i="fake"+o++,a=new d(i+"_worker",i,r);t.setup(a,r);var s=new d(i,i+"_worker",r);this._messageHandler=s,this._readyCapability.resolve()}.bind(this))},destroy:function(){this.destroyed=!0,this._webWorker&&(this._webWorker.terminate(),this._webWorker=null),this._port=null,this._messageHandler&&(this._messageHandler.destroy(),this._messageHandler=null)}},i}(),$=function(){function t(t,e,n,r){this.messageHandler=t,this.loadingTask=e,this.pdfDataRangeTransport=n,this.commonObjs=new tt,this.fontLoader=new O(e.docId),this.CMapReaderFactory=new r({baseUrl:j("cMapUrl"),isCompressed:j("cMapPacked")}),this.destroyed=!1,this.destroyCapability=null,this._passwordCapability=null,this.pageCache=[],this.pagePromises=[],this.downloadInfoCapability=y(),this.setupMessageHandler()}return t.prototype={destroy:function(){if(this.destroyCapability)return this.destroyCapability.promise;this.destroyed=!0,this.destroyCapability=y(),this._passwordCapability&&this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback"));var t=[];this.pageCache.forEach(function(e){e&&t.push(e._destroy())}),this.pageCache=[],this.pagePromises=[];var e=this,n=this.messageHandler.sendWithPromise("Terminate",null);return t.push(n),Promise.all(t).then(function(){e.fontLoader.clear(),e.pdfDataRangeTransport&&(e.pdfDataRangeTransport.abort(),e.pdfDataRangeTransport=null),e.messageHandler&&(e.messageHandler.destroy(),e.messageHandler=null),e.destroyCapability.resolve()},this.destroyCapability.reject),this.destroyCapability.promise},setupMessageHandler:function(){var t=this.messageHandler,e=this.loadingTask,n=this.pdfDataRangeTransport;n&&(n.addRangeListener(function(e,n){t.send("OnDataRange",{begin:e,chunk:n})}),n.addProgressListener(function(e){t.send("OnDataProgress",{loaded:e})}),n.addProgressiveReadListener(function(e){t.send("OnDataRange",{chunk:e})}),t.on("RequestDataRange",function(t){n.requestDataRange(t.begin,t.end)},this)),t.on("GetDoc",function(t){var e=t.pdfInfo;this.numPages=t.pdfInfo.numPages;var n=this.loadingTask,r=new Q(e,this,n);this.pdfDocument=r,n._capability.resolve(r)},this),t.on("PasswordRequest",function(t){if(this._passwordCapability=y(),e.onPassword){var n=function(t){this._passwordCapability.resolve({password:t})}.bind(this);e.onPassword(n,t.code)}else this._passwordCapability.reject(new g(t.message,t.code));return this._passwordCapability.promise},this),t.on("PasswordException",function(t){e._capability.reject(new g(t.message,t.code))},this),t.on("InvalidPDF",function(t){this.loadingTask._capability.reject(new u(t.message))},this),t.on("MissingPDF",function(t){this.loadingTask._capability.reject(new f(t.message))},this),t.on("UnexpectedResponse",function(t){this.loadingTask._capability.reject(new A(t.message,t.status))},this),t.on("UnknownError",function(t){this.loadingTask._capability.reject(new v(t.message,t.details))},this),t.on("DataLoaded",function(t){this.downloadInfoCapability.resolve(t)},this),t.on("PDFManagerReady",function(t){this.pdfDataRangeTransport&&this.pdfDataRangeTransport.transportReady()},this),t.on("StartRenderPage",function(t){if(!this.destroyed){var e=this.pageCache[t.pageIndex];e.stats.timeEnd("Page Request"),e._startRenderPage(t.transparency,t.intent)}},this),t.on("RenderPageChunk",function(t){if(!this.destroyed){this.pageCache[t.pageIndex]._renderPageChunk(t.operatorList,t.intent)}},this),t.on("commonobj",function(t){if(!this.destroyed){var e=t[0],n=t[1];if(!this.commonObjs.hasData(e))switch(n){case"Font":var r=t[2];if("error"in r){var i=r.error;I("Error during font loading: "+i),this.commonObjs.resolve(e,i);break}var a=null;j("pdfBug")&&R.FontInspector&&R.FontInspector.enabled&&(a={registerFont:function(t,e){R.FontInspector.fontAdded(t,e)}});var s=new F(r,{isEvalSuported:j("isEvalSupported"),disableFontFace:j("disableFontFace"),fontRegistry:a});this.fontLoader.bind([s],function(t){this.commonObjs.resolve(e,s)}.bind(this));break;case"FontPath":this.commonObjs.resolve(e,t[2]);break;default:x("Got unknown common object type "+n)}}},this),t.on("obj",function(t){if(!this.destroyed){var e,n=t[0],r=t[1],i=t[2],a=this.pageCache[r];if(!a.objs.hasData(n))switch(i){case"JpegStream":e=t[3],L(n,e,a.objs);break;case"Image":e=t[3],a.objs.resolve(n,e);e&&"data"in e&&e.data.length>8e6&&(a.cleanupAfterRender=!0);break;default:x("Got unknown object type "+i)}}},this),t.on("DocProgress",function(t){if(!this.destroyed){var e=this.loadingTask;e.onProgress&&e.onProgress({loaded:t.loaded,total:t.total})}},this),t.on("PageError",function(t){if(!this.destroyed){var e=this.pageCache[t.pageNum-1],n=e.intentStates[t.intent];if(n.displayReadyCapability?n.displayReadyCapability.reject(t.error):x(t.error),n.operatorList){n.operatorList.lastChunk=!0;for(var r=0;rthis.numPages)return Promise.reject(new Error("Invalid page request"));var n=t-1;if(n in this.pagePromises)return this.pagePromises[n];var r=this.messageHandler.sendWithPromise("GetPage",{pageIndex:n}).then(function(t){if(this.destroyed)throw new Error("Transport destroyed");var e=new K(n,t,this);return this.pageCache[n]=e,e}.bind(this));return this.pagePromises[n]=r,r},getPageIndex:function(t){return this.messageHandler.sendWithPromise("GetPageIndex",{ref:t}).catch(function(t){return Promise.reject(new Error(t))})},getAnnotations:function(t,e){return this.messageHandler.sendWithPromise("GetAnnotations",{pageIndex:t,intent:e})},getDestinations:function(){return this.messageHandler.sendWithPromise("GetDestinations",null)},getDestination:function(t){return this.messageHandler.sendWithPromise("GetDestination",{id:t})},getPageLabels:function(){return this.messageHandler.sendWithPromise("GetPageLabels",null)},getAttachments:function(){return this.messageHandler.sendWithPromise("GetAttachments",null)},getJavaScript:function(){return this.messageHandler.sendWithPromise("GetJavaScript",null)},getOutline:function(){return this.messageHandler.sendWithPromise("GetOutline",null)},getMetadata:function(){return this.messageHandler.sendWithPromise("GetMetadata",null).then(function(t){return{info:t[0],metadata:t[1]?new M(t[1]):null}})},getStats:function(){return this.messageHandler.sendWithPromise("GetStats",null)},startCleanup:function(){this.messageHandler.sendWithPromise("Cleanup",null).then(function(){for(var t=0,e=this.pageCache.length;t>>8^o[a]}return-1^r}function e(e,n,r,i){var a=i,s=n.length;r[a]=s>>24&255,r[a+1]=s>>16&255,r[a+2]=s>>8&255,r[a+3]=255&s,a+=4,r[a]=255&e.charCodeAt(0),r[a+1]=255&e.charCodeAt(1),r[a+2]=255&e.charCodeAt(2),r[a+3]=255&e.charCodeAt(3),a+=4,r.set(n,a),a+=n.length;var o=t(r,i+4,a);r[a]=o>>24&255,r[a+1]=o>>16&255,r[a+2]=o>>8&255,r[a+3]=255&o}function n(t,e,n){for(var r=1,i=0,a=e;a>3;break;case s.RGB_24BPP:l=2,c=8,h=3*u;break;case s.RGBA_32BPP:l=6,c=8,h=4*u;break;default:throw new Error("invalid format")}var g,m,A=new Uint8Array((1+h)*f),v=0,b=0;for(g=0;g>24&255,u>>16&255,u>>8&255,255&u,f>>24&255,f>>16&255,f>>8&255,255&f,c,l,0,0,0]),x=A.length,S=Math.ceil(x/65535),w=new Uint8Array(2+x+5*S+4),k=0;w[k++]=120,w[k++]=156;for(var C=0;x>65535;)w[k++]=0,w[k++]=255,w[k++]=255,w[k++]=0,w[k++]=0,w.set(A.subarray(C,C+65535),k),k+=65535,C+=65535,x-=65535;w[k++]=1,w[k++]=255&x,w[k++]=x>>8&255,w[k++]=255&~x,w[k++]=(65535&~x)>>8&255,w.set(A.subarray(C),k),k+=A.length-C;var _=n(A,0,A.length);w[k++]=_>>24&255,w[k++]=_>>16&255,w[k++]=_>>8&255,w[k++]=255&_;var T=i.length+3*a+y.length+w.length,P=new Uint8Array(T),L=0;return P.set(i,L),L+=i.length,e("IHDR",y,P,L),L+=a+y.length,e("IDATA",w,P,L),L+=a+w.length,e("IEND",new Uint8Array(0),P,L),d(P,"image/png",o)}for(var i=new Uint8Array([137,80,78,71,13,10,26,10]),a=12,o=new Int32Array(256),c=0;c<256;c++){for(var l=c,h=0;h<8;h++)l=1&l?3988292384^l>>1&2147483647:l>>1&2147483647;o[c]=l}return function(t,e){return r(t,void 0===t.kind?s.GRAYSCALE_1BPP:t.kind,e)}}(),g=function(){function t(){this.fontSizeScale=1,this.fontWeight=f.fontWeight,this.fontSize=0,this.textMatrix=a,this.fontMatrix=i,this.leading=0,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRise=0,this.fillColor=f.fillColor,this.strokeColor="#000000",this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.lineJoin="",this.lineCap="",this.miterLimit=0,this.dashArray=[],this.dashPhase=0,this.dependencies=[],this.activeClipUrl=null,this.clipGroup=null,this.maskId=""}return t.prototype={clone:function(){return Object.create(this)},setCurrentPoint:function(t,e){this.x=t,this.y=e}},t}(),m=function(){function t(t){for(var e=[],n=[],r=t.length,i=0;i1&&(h.vertical?s.canvasWidth=n.height*e._viewport.scale:s.canvasWidth=n.width*e._viewport.scale),e._textDivProperties.set(i,s),e._enhanceTextSelection){var m=1,A=0;0!==l&&(m=Math.cos(l),A=Math.sin(l));var v,b,y=(h.vertical?n.height:n.width)*e._viewport.scale,x=u;0!==l?(v=[m,A,-A,m,f,g],b=a.getAxialAlignedBoundingBox([0,0,y,x],v)):b=[f,g,f+y,g+x],e._bounds.push({left:b[0],top:b[1],right:b[2],bottom:b[3],div:i,size:[y,x],m:v})}}function n(t){if(!t._canceled){var e=t._container,n=t._textDivs,r=t._capability,i=n.length;if(i>d)return t._renderingDone=!0,void r.resolve();var a=document.createElement("canvas");a.mozOpaque=!0;for(var s,c,l=a.getContext("2d",{alpha:!1}),h=0;h0&&(f.scale=f.canvasWidth/m,A="scaleX("+f.scale+")"),0!==f.angle&&(A="rotate("+f.angle+"deg) "+A),""!==A&&(f.originalTransform=A,o.setProp("transform",u,A)),t._textDivProperties.set(u,f)}}t._renderingDone=!0,r.resolve()}}function r(t){for(var e=t._bounds,n=t._viewport,r=i(n.width,n.height,e),s=0;s0&&(r=r?Math.min(a,r):a)}return r},A=1+Math.min(Math.abs(d),Math.abs(f));c.paddingLeft=m(g,32,16)/A,c.paddingTop=m(g,48,16)/A,c.paddingRight=m(g,0,16)/A,c.paddingBottom=m(g,16,16)/A,t._textDivProperties.set(o,c)}else c.paddingLeft=e[s].left-r[s].left,c.paddingTop=e[s].top-r[s].top,c.paddingRight=r[s].right-e[s].right,c.paddingBottom=r[s].bottom-e[s].bottom,t._textDivProperties.set(o,c)}}function i(t,e,n){var r=n.map(function(t,e){return{x1:t.left,y1:t.top,x2:t.right,y2:t.bottom,index:e,x1New:void 0,x2New:void 0}});l(t,r);var i=new Array(n.length);return r.forEach(function(t){var e=t.index;i[e]={left:t.x1New,top:0,right:t.x2New,bottom:0}}),n.map(function(e,n){var a=i[n],s=r[n];s.x1=e.top,s.y1=t-a.right,s.x2=e.bottom,s.y2=t-a.left,s.index=n,s.x1New=void 0,s.x2New=void 0}),l(e,r),r.forEach(function(t){var e=t.index;i[e].top=t.x1New,i[e].bottom=t.x2New}),i}function l(t,e){e.sort(function(t,e){return t.x1-e.x1||t.index-e.index});var n={x1:-1/0,y1:-1/0,x2:0,y2:1/0,index:-1,x1New:0,x2New:0},r=[{start:-1/0,end:1/0,boundary:n}];e.forEach(function(t){for(var e=0;e=0&&r[n].start>=t.y2;)n--;var i,a,s,o,c=-1/0;for(s=e;s<=n;s++){i=r[s],a=i.boundary;var l;l=a.x2>t.x1?a.index>t.index?a.x1New:t.x1:void 0===a.x2New?(a.x2+t.x1)/2:a.x2New,l>c&&(c=l)}for(t.x1New=c,s=e;s<=n;s++)i=r[s],a=i.boundary,void 0===a.x2New?a.x2>t.x1?a.index>t.index&&(a.x2New=a.x2):a.x2New=c:a.x2New>c&&(a.x2New=Math.max(c,a.x2));var h=[],u=null;for(s=e;s<=n;s++){i=r[s],a=i.boundary;var d=a.x2>t.x2?a:t;u===d?h[h.length-1].end=i.end:(h.push({start:i.start,end:i.end,boundary:d}),u=d)}for(r[e].start=0&&r[o].start>=a.y1;o--)f=r[o].boundary===a;for(o=n+1;!f&&o\\376\\377([^<]+)/g,function(t,e){for(var n=e.replace(/\\([0-3])([0-7])([0-7])/g,function(t,e,n,r){return String.fromCharCode(64*e+8*n+1*r)}),r="",i=0;i=32&&a<127&&60!==a&&62!==a&&38!==a?String.fromCharCode(a):"&#x"+(65536+a).toString(16).substring(1)+";"}return">"+r})}function i(t){if("string"==typeof t){t=r(t);t=(new DOMParser).parseFromString(t,"application/xml")}else t instanceof Document||s("Metadata: Invalid metadata object");this.metaDocument=t,this.metadata=Object.create(null),this.parse()}var a=n(0),s=a.error;i.prototype={parse:function(){var t=this.metaDocument,e=t.documentElement;if("rdf:rdf"!==e.nodeName.toLowerCase())for(e=e.firstChild;e&&"rdf:rdf"!==e.nodeName.toLowerCase();)e=e.nextSibling;var n=e?e.nodeName.toLowerCase():null;if(e&&"rdf:rdf"===n&&e.hasChildNodes()){var r,i,a,s,o,c,l,h=e.childNodes;for(s=0,c=h.length;s0;)d[f++]=g&p?0:255,p>>=1;var m=0;for(f=0,0!==d[f]&&(c[0]=1,++m),n=1;n>2)+(d[f+1]?4:0)+(d[f-h+1]?8:0),l[A]&&(c[r+n]=l[A],++m),f++;if(d[f-h]!==d[f]&&(c[r+n]=d[f]?2:4,++m),m>1e3)return null}for(f=h*(s-1),r=e*o,0!==d[f]&&(c[r]=8,++m),n=1;n1e3)return null;var v=new Int32Array([0,o,-1,0,-o,0,0,0,1]),b=[];for(e=0;m&&e<=s;e++){for(var y=e*o,x=y+a;y>4,c[y]&=k>>2|k<<2),w.push(y%o),w.push(y/o|0),--m}while(C!==y);b.push(w),--e}}return function(t){t.save(),t.scale(1/a,-1/s),t.translate(0,-s),t.beginPath();for(var e=0,n=b.length;e>3,w=4294967295,k=E.value||!L.value?4278190080:255;for(r=0;rS?c:8*C-7,R=-8&T,I=0,F=0;_>=1}for(;n=h&&(a=l,s=c*a),n=0,i=s;i--;)A[n++]=m[g++],A[n++]=m[g++],A[n++]=m[g++],A[n++]=255;t.putImageData(f,0,r*P)}else x("bad image kind: "+e.kind)}function n(t,e){for(var n=e.height,r=e.width,i=n%P,a=(n-i)/P,s=0===i?a:a+1,o=t.createImageData(r,P),c=0,l=e.data,h=o.data,u=0;u>=1}t.putImageData(o,0,u*P)}}function a(t,e){for(var n=["strokeStyle","fillStyle","fillRule","globalAlpha","lineWidth","lineCap","lineJoin","miterLimit","globalCompositeOperation","font"],r=0,i=n.length;r>8,t[a-2]=t[a-2]*s+n*o>>8,t[a-1]=t[a-1]*s+r*o>>8}}}function o(t,e,n){for(var r=t.length,i=3;i>8]>>8:e[i]*a>>16}}function y(t,e,n,r,i,a,l){var h,u=!!a,d=u?a[0]:0,f=u?a[1]:0,p=u?a[2]:0;h="Luminosity"===i?c:o;for(var g=Math.min(r,Math.ceil(1048576/n)),m=0;m10&&"function"==typeof n,h=l?Date.now()+15:0,u=0,f=this.commonObjs,p=this.objs;;){if(void 0!==r&&s===r.nextBreakPoint)return r.breakIt(s,n),s;if((c=a[s])!==d.dependency)this[c].apply(this,i[s]);else for(var g=i[s],m=0,A=g.length;m10){if(Date.now()>h)return n(),s;u=0}}},endDrawing:function(){null!==this.current.activeSMask&&this.endSMaskGroup(),this.ctx.restore(),this.transparentCanvas&&(this.ctx=this.compositeCtx,this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.drawImage(this.transparentCanvas,0,0),this.ctx.restore(),this.transparentCanvas=null),this.cachedCanvases.clear(),_.clear(),this.imageLayer&&this.imageLayer.endLayout()},setLineWidth:function(t){this.current.lineWidth=t,this.ctx.lineWidth=t},setLineCap:function(t){this.ctx.lineCap=F[t]},setLineJoin:function(t){this.ctx.lineJoin=O[t]},setMiterLimit:function(t){this.ctx.miterLimit=t},setDash:function(t,e){var n=this.ctx;void 0!==n.setLineDash&&(n.setLineDash(t),n.lineDashOffset=e)},setRenderingIntent:function(t){},setFlatness:function(t){},setGState:function(t){for(var e=0,n=t.length;e0&&this.stateStack[this.stateStack.length-1].activeSMask===this.current.activeSMask?this.suspendSMaskGroup():this.endSMaskGroup()),this.current.activeSMask=a?this.tempSMask:null,this.current.activeSMask&&this.beginSMaskGroup(),this.tempSMask=null}}},beginSMaskGroup:function(){var t=this.current.activeSMask,e=t.canvas.width,n=t.canvas.height,r="smaskGroupAt"+this.groupLevel,i=this.cachedCanvases.getCanvas(r,e,n,!0),s=this.ctx,o=s.mozCurrentTransform;this.ctx.save();var c=i.context;c.scale(1/t.scaleX,1/t.scaleY),c.translate(-t.offsetX,-t.offsetY),c.transform.apply(c,o),t.startTransformInverse=c.mozCurrentTransformInverse,a(s,c),this.ctx=c,this.setGState([["BM","source-over"],["ca",1],["CA",1]]),this.groupStack.push(s),this.groupLevel++},suspendSMaskGroup:function(){var t=this.ctx;this.groupLevel--,this.ctx=this.groupStack.pop(),T(this.ctx,this.current.activeSMask,t),this.ctx.restore(),this.ctx.save(),a(t,this.ctx),this.current.resumeSMaskCtx=t;var e=g.transform(this.current.activeSMask.startTransformInverse,t.mozCurrentTransform);this.ctx.transform.apply(this.ctx,e),t.save(),t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.restore()},resumeSMaskGroup:function(){var t=this.current.resumeSMaskCtx,e=this.ctx;this.ctx=t,this.groupStack.push(e),this.groupLevel++},endSMaskGroup:function(){var t=this.ctx;this.groupLevel--,this.ctx=this.groupStack.pop(),T(this.ctx,this.current.activeSMask,t),this.ctx.restore(),a(t,this.ctx);var e=g.transform(this.current.activeSMask.startTransformInverse,t.mozCurrentTransform);this.ctx.transform.apply(this.ctx,e)},save:function(){this.ctx.save();var t=this.current;this.stateStack.push(t),this.current=t.clone(),this.current.resumeSMaskCtx=null},restore:function(){this.current.resumeSMaskCtx&&this.resumeSMaskGroup(),null===this.current.activeSMask||0!==this.stateStack.length&&this.stateStack[this.stateStack.length-1].activeSMask===this.current.activeSMask||this.endSMaskGroup(),0!==this.stateStack.length&&(this.current=this.stateStack.pop(),this.ctx.restore(),this.pendingClip=null,this.cachedGetSinglePixelWidth=null)},transform:function(t,e,n,r,i,a){this.ctx.transform(t,e,n,r,i,a),this.cachedGetSinglePixelWidth=null},constructPath:function(t,e){for(var n=this.ctx,r=this.current,i=r.x,a=r.y,s=0,o=0,c=t.length;s100?100:e;this.current.fontSizeScale=e/c;var h=s+" "+a+" "+c+"px "+o;this.ctx.font=h}},setTextRenderingMode:function(t){this.current.textRenderingMode=t},setTextRise:function(t){this.current.textRise=t},moveText:function(t,e){this.current.x=this.current.lineX+=t,this.current.y=this.current.lineY+=e},setLeadingMoveText:function(t,e){this.setLeading(-e),this.moveText(t,e)},setTextMatrix:function(t,e,n,r,i,a){this.current.textMatrix=[t,e,n,r,i,a],this.current.textMatrixScale=Math.sqrt(t*t+e*e),this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0},nextLine:function(){this.moveText(0,this.current.leading)},paintChar:function(t,e,n){var r,i=this.ctx,a=this.current,s=a.font,o=a.textRenderingMode,c=a.fontSize/a.fontSizeScale,l=o&f.FILL_STROKE_MASK,h=!!(o&f.ADD_TO_PATH_FLAG);if((s.disableFontFace||h)&&(r=s.getPathGenerator(this.commonObjs,t)),s.disableFontFace?(i.save(),i.translate(e,n),i.beginPath(),r(i,c),l!==f.FILL&&l!==f.FILL_STROKE||i.fill(),l!==f.STROKE&&l!==f.FILL_STROKE||i.stroke(),i.restore()):(l!==f.FILL&&l!==f.FILL_STROKE||i.fillText(t,e,n),l!==f.STROKE&&l!==f.FILL_STROKE||i.strokeText(t,e,n)),h){(this.pendingTextPaths||(this.pendingTextPaths=[])).push({transform:i.mozCurrentTransform,x:e,y:n,fontSize:c,addToPath:r})}},get isFontSubpixelAAEnabled(){var t=this.canvasFactory.create(10,10).context;t.scale(1.5,1),t.fillText("I",0,10);for(var e=t.getImageData(0,0,10,10).data,n=!1,r=3;r0&&e[r]<255){n=!0;break}return S(this,"isFontSubpixelAAEnabled",n)},showText:function(t){var e=this.current,n=e.font;if(n.isType3Font)return this.showType3Text(t);var r=e.fontSize;if(0!==r){var i=this.ctx,a=e.fontSizeScale,s=e.charSpacing,o=e.wordSpacing,c=e.fontDirection,l=e.textHScale*c,h=t.length,u=n.vertical,d=u?1:-1,p=n.defaultVMetrics,g=r*e.fontMatrix[0],m=e.textRenderingMode===f.FILL&&!n.disableFontFace;i.save(),i.transform.apply(i,e.textMatrix),i.translate(e.x,e.y+e.textRise),e.patternFill&&(i.fillStyle=e.fillColor.getPattern(i,this)),c>0?i.scale(l,-1):i.scale(l,1);var A=e.lineWidth,b=e.textMatrixScale;if(0===b||0===A){var y=e.textRenderingMode&f.FILL_STROKE_MASK;y!==f.STROKE&&y!==f.FILL_STROKE||(this.cachedGetSinglePixelWidth=null,A=.65*this.getSinglePixelWidth())}else A/=b;1!==a&&(i.scale(a,a),A/=a),i.lineWidth=A;var x,S=0;for(x=0;x0){var M=1e3*i.measureText(E).width/r*a;if(I4096&&(h=c/4096,c=4096),l>4096&&(u=l/4096,l=4096);var d="groupAt"+this.groupLevel;t.smask&&(d+="_smask_"+this.smaskCounter++%2);var f=this.cachedCanvases.getCanvas(d,c,l,!0),p=f.context;p.scale(1/h,1/u),p.translate(-s,-o),p.transform.apply(p,n),t.smask?this.smaskStack.push({canvas:f.canvas,context:p,offsetX:s,offsetY:o,scaleX:h,scaleY:u,subtype:t.smask.subtype,backdrop:t.smask.backdrop,transferMap:t.smask.transferMap||null,startTransformInverse:null}):(e.setTransform(1,0,0,1,0,0),e.translate(s,o),e.scale(h,u)),a(e,p),this.ctx=p,this.setGState([["BM","source-over"],["ca",1],["CA",1]]),this.groupStack.push(e),this.groupLevel++,this.current.activeSMask=null},endGroup:function(t){this.groupLevel--;var e=this.ctx;this.ctx=this.groupStack.pop(),void 0!==this.ctx.imageSmoothingEnabled?this.ctx.imageSmoothingEnabled=!1:this.ctx.mozImageSmoothingEnabled=!1,t.smask?this.tempSMask=this.smaskStack.pop():this.ctx.drawImage(e.canvas,0,0),this.restore()},beginAnnotations:function(){this.save(),this.current=new I,this.baseTransform&&this.ctx.setTransform.apply(this.ctx,this.baseTransform)},endAnnotations:function(){this.restore()},beginAnnotation:function(t,e,n){if(this.save(),b(t)&&4===t.length){var r=t[2]-t[0],i=t[3]-t[1];this.ctx.rect(t[0],t[1],r,i),this.clip(),this.endPath()}this.transform.apply(this,e),this.transform.apply(this,n)},endAnnotation:function(){this.restore()},paintJpegXObject:function(t,e,n){var r=this.objs.get(t);if(!r)return void w("Dependent image isn't ready yet");this.save();var i=this.ctx;if(i.scale(1/e,-1/n),i.drawImage(r,0,0,r.width,r.height,0,-n,e,n),this.imageLayer){var a=i.mozCurrentTransformInverse,s=this.getCanvasPosition(0,0);this.imageLayer.appendImage({objId:t,left:s[0],top:s[1],width:e/a[0],height:n/a[3]})}this.restore()},paintImageMaskXObject:function(t){var e=this.ctx,r=t.width,a=t.height,s=this.current.fillColor,o=this.current.patternFill,c=this.processingType3;if(c&&void 0===c.compiled&&(c.compiled=r<=1e3&&a<=1e3?i({data:t.data,width:r,height:a}):null),c&&c.compiled)return void c.compiled(e);var l=this.cachedCanvases.getCanvas("maskCanvas",r,a),h=l.context;h.save(),n(h,t),h.globalCompositeOperation="source-in",h.fillStyle=o?s.getPattern(h,this):s,h.fillRect(0,0,r,a),h.restore(),this.paintInlineImageXObject(l.canvas)},paintImageMaskXObjectRepeat:function(t,e,r,i){ +var f,p,g=" attribute vec2 a_position; attribute vec2 a_texCoord; uniform vec2 u_resolution; varying vec2 v_texCoord; void main() { vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0; gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); v_texCoord = a_texCoord; } ",m=" precision mediump float; uniform vec4 u_backdrop; uniform int u_subtype; uniform sampler2D u_image; uniform sampler2D u_mask; varying vec2 v_texCoord; void main() { vec4 imageColor = texture2D(u_image, v_texCoord); vec4 maskColor = texture2D(u_mask, v_texCoord); if (u_backdrop.a > 0.0) { maskColor.rgb = maskColor.rgb * maskColor.a + u_backdrop.rgb * (1.0 - maskColor.a); } float lum; if (u_subtype == 0) { lum = maskColor.a; } else { lum = maskColor.r * 0.3 + maskColor.g * 0.59 + maskColor.b * 0.11; } imageColor.a *= lum; imageColor.rgb *= imageColor.a; gl_FragColor = imageColor; } ",A=null,v=" attribute vec2 a_position; attribute vec3 a_color; uniform vec2 u_resolution; uniform vec2 u_scale; uniform vec2 u_offset; varying vec4 v_color; void main() { vec2 position = (a_position + u_offset) * u_scale; vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0; gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); v_color = vec4(a_color / 255.0, 1.0); } ",b=" precision mediump float; varying vec4 v_color; void main() { gl_FragColor = v_color; } ",y=null;return{get isEnabled(){if(s("disableWebGL"))return!1;var t=!1;try{o(),t=!!f}catch(t){}return a(this,"isEnabled",t)},composeSMask:l,drawFigures:u,clear:d}}();e.WebGLUtils=o},function(t,e,n){"use strict";var r=n(0),i=n(1),a=n(3),s=n(2),o=n(5),c=n(7),l=n(4),h=r.globalScope,u=r.deprecated,d=r.warn,f=i.LinkTarget,p=i.DEFAULT_LINK_REL,g="undefined"==typeof window;h.PDFJS||(h.PDFJS={});var m=h.PDFJS;m.version="1.8.199",m.build="74b31ab1",m.pdfBug=!1,void 0!==m.verbosity&&r.setVerbosityLevel(m.verbosity),delete m.verbosity,Object.defineProperty(m,"verbosity",{get:function(){return r.getVerbosityLevel()},set:function(t){r.setVerbosityLevel(t)},enumerable:!0,configurable:!0}),m.VERBOSITY_LEVELS=r.VERBOSITY_LEVELS,m.OPS=r.OPS,m.UNSUPPORTED_FEATURES=r.UNSUPPORTED_FEATURES,m.isValidUrl=i.isValidUrl,m.shadow=r.shadow,m.createBlob=r.createBlob,m.createObjectURL=function(t,e){return r.createObjectURL(t,e,m.disableCreateObjectURL)},Object.defineProperty(m,"isLittleEndian",{configurable:!0,get:function(){var t=r.isLittleEndian();return r.shadow(m,"isLittleEndian",t)}}),m.removeNullCharacters=r.removeNullCharacters,m.PasswordResponses=r.PasswordResponses,m.PasswordException=r.PasswordException,m.UnknownErrorException=r.UnknownErrorException,m.InvalidPDFException=r.InvalidPDFException,m.MissingPDFException=r.MissingPDFException,m.UnexpectedResponseException=r.UnexpectedResponseException,m.Util=r.Util,m.PageViewport=r.PageViewport,m.createPromiseCapability=r.createPromiseCapability,m.maxImageSize=void 0===m.maxImageSize?-1:m.maxImageSize,m.cMapUrl=void 0===m.cMapUrl?null:m.cMapUrl,m.cMapPacked=void 0!==m.cMapPacked&&m.cMapPacked,m.disableFontFace=void 0!==m.disableFontFace&&m.disableFontFace,m.imageResourcesPath=void 0===m.imageResourcesPath?"":m.imageResourcesPath,m.disableWorker=void 0!==m.disableWorker&&m.disableWorker,m.workerSrc=void 0===m.workerSrc?null:m.workerSrc,m.workerPort=void 0===m.workerPort?null:m.workerPort,m.disableRange=void 0!==m.disableRange&&m.disableRange,m.disableStream=void 0!==m.disableStream&&m.disableStream,m.disableAutoFetch=void 0!==m.disableAutoFetch&&m.disableAutoFetch,m.pdfBug=void 0!==m.pdfBug&&m.pdfBug,m.postMessageTransfers=void 0===m.postMessageTransfers||m.postMessageTransfers,m.disableCreateObjectURL=void 0!==m.disableCreateObjectURL&&m.disableCreateObjectURL,m.disableWebGL=void 0===m.disableWebGL||m.disableWebGL,m.externalLinkTarget=void 0===m.externalLinkTarget?f.NONE:m.externalLinkTarget,m.externalLinkRel=void 0===m.externalLinkRel?p:m.externalLinkRel,m.isEvalSupported=void 0===m.isEvalSupported||m.isEvalSupported,m.pdfjsNext=void 0!==m.pdfjsNext&&m.pdfjsNext;var A=m.openExternalLinksInNewWindow;delete m.openExternalLinksInNewWindow,Object.defineProperty(m,"openExternalLinksInNewWindow",{get:function(){return m.externalLinkTarget===f.BLANK},set:function(t){if(t&&u('PDFJS.openExternalLinksInNewWindow, please use "PDFJS.externalLinkTarget = PDFJS.LinkTarget.BLANK" instead.'),m.externalLinkTarget!==f.NONE)return void d("PDFJS.externalLinkTarget is already initialized");m.externalLinkTarget=t?f.BLANK:f.NONE},enumerable:!0,configurable:!0}),A&&(m.openExternalLinksInNewWindow=A),m.getDocument=a.getDocument,m.PDFDataRangeTransport=a.PDFDataRangeTransport,m.PDFWorker=a.PDFWorker,Object.defineProperty(m,"hasCanvasTypedArrays",{configurable:!0,get:function(){var t=i.hasCanvasTypedArrays();return r.shadow(m,"hasCanvasTypedArrays",t)}}),m.CustomStyle=i.CustomStyle,m.LinkTarget=f,m.addLinkAttributes=i.addLinkAttributes,m.getFilenameFromUrl=i.getFilenameFromUrl,m.isExternalLinkTargetSet=i.isExternalLinkTargetSet,m.AnnotationLayer=s.AnnotationLayer,m.renderTextLayer=o.renderTextLayer,m.Metadata=c.Metadata,m.SVGGraphics=l.SVGGraphics,m.UnsupportedManager=a._UnsupportedManager,e.globalScope=h,e.isWorker=g,e.PDFJS=h.PDFJS},function(t,e,n){"use strict";function r(t){t.mozCurrentTransform||(t._originalSave=t.save,t._originalRestore=t.restore,t._originalRotate=t.rotate,t._originalScale=t.scale,t._originalTranslate=t.translate,t._originalTransform=t.transform,t._originalSetTransform=t.setTransform,t._transformMatrix=t._transformMatrix||[1,0,0,1,0,0],t._transformStack=[],Object.defineProperty(t,"mozCurrentTransform",{get:function(){return this._transformMatrix}}),Object.defineProperty(t,"mozCurrentTransformInverse",{get:function(){var t=this._transformMatrix,e=t[0],n=t[1],r=t[2],i=t[3],a=t[4],s=t[5],o=e*i-n*r,c=n*r-e*i;return[i/o,n/c,r/c,e/o,(i*a-r*s)/c,(n*a-e*s)/o]}}),t.save=function(){var t=this._transformMatrix;this._transformStack.push(t),this._transformMatrix=t.slice(0,6),this._originalSave()},t.restore=function(){var t=this._transformStack.pop();t&&(this._transformMatrix=t,this._originalRestore())},t.translate=function(t,e){var n=this._transformMatrix;n[4]=n[0]*t+n[2]*e+n[4],n[5]=n[1]*t+n[3]*e+n[5],this._originalTranslate(t,e)},t.scale=function(t,e){var n=this._transformMatrix;n[0]=n[0]*t,n[1]=n[1]*t,n[2]=n[2]*e,n[3]=n[3]*e,this._originalScale(t,e)},t.transform=function(e,n,r,i,a,s){var o=this._transformMatrix;this._transformMatrix=[o[0]*e+o[2]*n,o[1]*e+o[3]*n,o[0]*r+o[2]*i,o[1]*r+o[3]*i,o[0]*a+o[2]*s+o[4],o[1]*a+o[3]*s+o[5]],t._originalTransform(e,n,r,i,a,s)},t.setTransform=function(e,n,r,i,a,s){this._transformMatrix=[e,n,r,i,a,s],t._originalSetTransform(e,n,r,i,a,s)},t.rotate=function(t){var e=Math.cos(t),n=Math.sin(t),r=this._transformMatrix;this._transformMatrix=[r[0]*e+r[2]*n,r[1]*e+r[3]*n,r[0]*-n+r[2]*e,r[1]*-n+r[3]*e,r[4],r[5]],this._originalRotate(t)})}function i(t){var e,n,r,i,a=t.width,s=t.height,o=a+1,c=new Uint8Array(o*(s+1)),l=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),h=a+7&-8,u=t.data,d=new Uint8Array(h*s),f=0;for(e=0,i=u.length;e0;)d[f++]=g&p?0:255,p>>=1;var m=0;for(f=0,0!==d[f]&&(c[0]=1,++m),n=1;n>2)+(d[f+1]?4:0)+(d[f-h+1]?8:0),l[A]&&(c[r+n]=l[A],++m),f++;if(d[f-h]!==d[f]&&(c[r+n]=d[f]?2:4,++m),m>1e3)return null}for(f=h*(s-1),r=e*o,0!==d[f]&&(c[r]=8,++m),n=1;n1e3)return null;var v=new Int32Array([0,o,-1,0,-o,0,0,0,1]),b=[];for(e=0;m&&e<=s;e++){for(var y=e*o,x=y+a;y>4,c[y]&=k>>2|k<<2),w.push(y%o),w.push(y/o|0),--m}while(C!==y);b.push(w),--e}}return function(t){t.save(),t.scale(1/a,-1/s),t.translate(0,-s),t.beginPath();for(var e=0,n=b.length;e>3,w=4294967295,k=E.value||!L.value?4278190080:255;for(r=0;rS?c:8*C-7,R=-8&T,I=0,F=0;_>=1}for(;n=h&&(a=l,s=c*a),n=0,i=s;i--;)A[n++]=m[g++],A[n++]=m[g++],A[n++]=m[g++],A[n++]=255;t.putImageData(f,0,r*P)}else x("bad image kind: "+e.kind)}function n(t,e){for(var n=e.height,r=e.width,i=n%P,a=(n-i)/P,s=0===i?a:a+1,o=t.createImageData(r,P),c=0,l=e.data,h=o.data,u=0;u>=1}t.putImageData(o,0,u*P)}}function a(t,e){for(var n=["strokeStyle","fillStyle","fillRule","globalAlpha","lineWidth","lineCap","lineJoin","miterLimit","globalCompositeOperation","font"],r=0,i=n.length;r>8,t[a-2]=t[a-2]*s+n*o>>8,t[a-1]=t[a-1]*s+r*o>>8}}}function o(t,e,n){for(var r=t.length,i=3;i>8]>>8:e[i]*a>>16}}function y(t,e,n,r,i,a,l){var h,u=!!a,d=u?a[0]:0,f=u?a[1]:0,p=u?a[2]:0;h="Luminosity"===i?c:o;for(var g=Math.min(r,Math.ceil(1048576/n)),m=0;m10&&"function"==typeof n,h=l?Date.now()+15:0,u=0,f=this.commonObjs,p=this.objs;;){if(void 0!==r&&s===r.nextBreakPoint)return r.breakIt(s,n),s;if((c=a[s])!==d.dependency)this[c].apply(this,i[s]);else for(var g=i[s],m=0,A=g.length;m10){if(Date.now()>h)return n(),s;u=0}}},endDrawing:function(){null!==this.current.activeSMask&&this.endSMaskGroup(),this.ctx.restore(),this.transparentCanvas&&(this.ctx=this.compositeCtx,this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.drawImage(this.transparentCanvas,0,0),this.ctx.restore(),this.transparentCanvas=null),this.cachedCanvases.clear(),_.clear(),this.imageLayer&&this.imageLayer.endLayout()},setLineWidth:function(t){this.current.lineWidth=t,this.ctx.lineWidth=t},setLineCap:function(t){this.ctx.lineCap=F[t]},setLineJoin:function(t){this.ctx.lineJoin=O[t]},setMiterLimit:function(t){this.ctx.miterLimit=t},setDash:function(t,e){var n=this.ctx;void 0!==n.setLineDash&&(n.setLineDash(t),n.lineDashOffset=e)},setRenderingIntent:function(t){},setFlatness:function(t){},setGState:function(t){for(var e=0,n=t.length;e0&&this.stateStack[this.stateStack.length-1].activeSMask===this.current.activeSMask?this.suspendSMaskGroup():this.endSMaskGroup()),this.current.activeSMask=a?this.tempSMask:null,this.current.activeSMask&&this.beginSMaskGroup(),this.tempSMask=null}}},beginSMaskGroup:function(){var t=this.current.activeSMask,e=t.canvas.width,n=t.canvas.height,r="smaskGroupAt"+this.groupLevel,i=this.cachedCanvases.getCanvas(r,e,n,!0),s=this.ctx,o=s.mozCurrentTransform;this.ctx.save();var c=i.context;c.scale(1/t.scaleX,1/t.scaleY),c.translate(-t.offsetX,-t.offsetY),c.transform.apply(c,o),t.startTransformInverse=c.mozCurrentTransformInverse,a(s,c),this.ctx=c,this.setGState([["BM","source-over"],["ca",1],["CA",1]]),this.groupStack.push(s),this.groupLevel++},suspendSMaskGroup:function(){var t=this.ctx;this.groupLevel--,this.ctx=this.groupStack.pop(),T(this.ctx,this.current.activeSMask,t),this.ctx.restore(),this.ctx.save(),a(t,this.ctx),this.current.resumeSMaskCtx=t;var e=g.transform(this.current.activeSMask.startTransformInverse,t.mozCurrentTransform);this.ctx.transform.apply(this.ctx,e),t.save(),t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,t.canvas.width,t.canvas.height),t.restore()},resumeSMaskGroup:function(){var t=this.current.resumeSMaskCtx,e=this.ctx;this.ctx=t,this.groupStack.push(e),this.groupLevel++},endSMaskGroup:function(){var t=this.ctx;this.groupLevel--,this.ctx=this.groupStack.pop(),T(this.ctx,this.current.activeSMask,t),this.ctx.restore(),a(t,this.ctx);var e=g.transform(this.current.activeSMask.startTransformInverse,t.mozCurrentTransform);this.ctx.transform.apply(this.ctx,e)},save:function(){this.ctx.save();var t=this.current;this.stateStack.push(t),this.current=t.clone(),this.current.resumeSMaskCtx=null},restore:function(){this.current.resumeSMaskCtx&&this.resumeSMaskGroup(),null===this.current.activeSMask||0!==this.stateStack.length&&this.stateStack[this.stateStack.length-1].activeSMask===this.current.activeSMask||this.endSMaskGroup(),0!==this.stateStack.length&&(this.current=this.stateStack.pop(),this.ctx.restore(),this.pendingClip=null,this.cachedGetSinglePixelWidth=null)},transform:function(t,e,n,r,i,a){this.ctx.transform(t,e,n,r,i,a),this.cachedGetSinglePixelWidth=null},constructPath:function(t,e){for(var n=this.ctx,r=this.current,i=r.x,a=r.y,s=0,o=0,c=t.length;s100?100:e;this.current.fontSizeScale=e/c;var h=s+" "+a+" "+c+"px "+o;this.ctx.font=h}},setTextRenderingMode:function(t){this.current.textRenderingMode=t},setTextRise:function(t){this.current.textRise=t},moveText:function(t,e){this.current.x=this.current.lineX+=t,this.current.y=this.current.lineY+=e},setLeadingMoveText:function(t,e){this.setLeading(-e),this.moveText(t,e)},setTextMatrix:function(t,e,n,r,i,a){this.current.textMatrix=[t,e,n,r,i,a],this.current.textMatrixScale=Math.sqrt(t*t+e*e),this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0},nextLine:function(){this.moveText(0,this.current.leading)},paintChar:function(t,e,n){var r,i=this.ctx,a=this.current,s=a.font,o=a.textRenderingMode,c=a.fontSize/a.fontSizeScale,l=o&f.FILL_STROKE_MASK,h=!!(o&f.ADD_TO_PATH_FLAG);if((s.disableFontFace||h)&&(r=s.getPathGenerator(this.commonObjs,t)),s.disableFontFace?(i.save(),i.translate(e,n),i.beginPath(),r(i,c),l!==f.FILL&&l!==f.FILL_STROKE||i.fill(),l!==f.STROKE&&l!==f.FILL_STROKE||i.stroke(),i.restore()):(l!==f.FILL&&l!==f.FILL_STROKE||i.fillText(t,e,n),l!==f.STROKE&&l!==f.FILL_STROKE||i.strokeText(t,e,n)),h){(this.pendingTextPaths||(this.pendingTextPaths=[])).push({transform:i.mozCurrentTransform,x:e,y:n,fontSize:c,addToPath:r})}},get isFontSubpixelAAEnabled(){var t=this.canvasFactory.create(10,10).context;t.scale(1.5,1),t.fillText("I",0,10);for(var e=t.getImageData(0,0,10,10).data,n=!1,r=3;r0&&e[r]<255){n=!0;break}return S(this,"isFontSubpixelAAEnabled",n)},showText:function(t){var e=this.current,n=e.font;if(n.isType3Font)return this.showType3Text(t);var r=e.fontSize;if(0!==r){var i=this.ctx,a=e.fontSizeScale,s=e.charSpacing,o=e.wordSpacing,c=e.fontDirection,l=e.textHScale*c,h=t.length,u=n.vertical,d=u?1:-1,p=n.defaultVMetrics,g=r*e.fontMatrix[0],m=e.textRenderingMode===f.FILL&&!n.disableFontFace;i.save(),i.transform.apply(i,e.textMatrix),i.translate(e.x,e.y+e.textRise),e.patternFill&&(i.fillStyle=e.fillColor.getPattern(i,this)),c>0?i.scale(l,-1):i.scale(l,1);var A=e.lineWidth,b=e.textMatrixScale;if(0===b||0===A){var y=e.textRenderingMode&f.FILL_STROKE_MASK;y!==f.STROKE&&y!==f.FILL_STROKE||(this.cachedGetSinglePixelWidth=null,A=.65*this.getSinglePixelWidth())}else A/=b;1!==a&&(i.scale(a,a),A/=a),i.lineWidth=A;var x,S=0;for(x=0;x0){var M=1e3*i.measureText(E).width/r*a;if(I4096&&(h=c/4096,c=4096),l>4096&&(u=l/4096,l=4096);var d="groupAt"+this.groupLevel;t.smask&&(d+="_smask_"+this.smaskCounter++%2);var f=this.cachedCanvases.getCanvas(d,c,l,!0),p=f.context;p.scale(1/h,1/u),p.translate(-s,-o),p.transform.apply(p,n),t.smask?this.smaskStack.push({canvas:f.canvas,context:p,offsetX:s,offsetY:o,scaleX:h,scaleY:u,subtype:t.smask.subtype,backdrop:t.smask.backdrop,transferMap:t.smask.transferMap||null,startTransformInverse:null}):(e.setTransform(1,0,0,1,0,0),e.translate(s,o),e.scale(h,u)),a(e,p),this.ctx=p,this.setGState([["BM","source-over"],["ca",1],["CA",1]]),this.groupStack.push(e),this.groupLevel++,this.current.activeSMask=null},endGroup:function(t){this.groupLevel--;var e=this.ctx;this.ctx=this.groupStack.pop(),void 0!==this.ctx.imageSmoothingEnabled?this.ctx.imageSmoothingEnabled=!1:this.ctx.mozImageSmoothingEnabled=!1,t.smask?this.tempSMask=this.smaskStack.pop():this.ctx.drawImage(e.canvas,0,0),this.restore()},beginAnnotations:function(){this.save(),this.current=new I,this.baseTransform&&this.ctx.setTransform.apply(this.ctx,this.baseTransform)},endAnnotations:function(){this.restore()},beginAnnotation:function(t,e,n){if(this.save(),b(t)&&4===t.length){var r=t[2]-t[0],i=t[3]-t[1];this.ctx.rect(t[0],t[1],r,i),this.clip(),this.endPath()}this.transform.apply(this,e),this.transform.apply(this,n)},endAnnotation:function(){this.restore()},paintJpegXObject:function(t,e,n){var r=this.objs.get(t);if(!r)return void w("Dependent image isn't ready yet");this.save();var i=this.ctx;if(i.scale(1/e,-1/n),i.drawImage(r,0,0,r.width,r.height,0,-n,e,n),this.imageLayer){var a=i.mozCurrentTransformInverse,s=this.getCanvasPosition(0,0);this.imageLayer.appendImage({objId:t,left:s[0],top:s[1],width:e/a[0],height:n/a[3]})}this.restore()},paintImageMaskXObject:function(t){var e=this.ctx,r=t.width,a=t.height,s=this.current.fillColor,o=this.current.patternFill,c=this.processingType3;if(c&&void 0===c.compiled&&(c.compiled=r<=1e3&&a<=1e3?i({data:t.data,width:r,height:a}):null),c&&c.compiled)return void c.compiled(e);var l=this.cachedCanvases.getCanvas("maskCanvas",r,a),h=l.context;h.save(),n(h,t),h.globalCompositeOperation="source-in",h.fillStyle=o?s.getPattern(h,this):s,h.fillRect(0,0,r,a),h.restore(),this.paintInlineImageXObject(l.canvas)},paintImageMaskXObjectRepeat:function(t,e,r,i){ var a=t.width,s=t.height,o=this.current.fillColor,c=this.current.patternFill,l=this.cachedCanvases.getCanvas("maskCanvas",a,s),h=l.context;h.save(),n(h,t),h.globalCompositeOperation="source-in",h.fillStyle=c?o.getPattern(h,this):o,h.fillRect(0,0,a,s),h.restore();for(var u=this.ctx,d=0,f=i.length;d2&&g>1||f>2&&m>1;){var v=g,b=m;h>2&&g>1&&(v=Math.ceil(g/2),h/=g/v),f>2&&m>1&&(b=Math.ceil(m/2),f/=m/b),s=this.cachedCanvases.getCanvas(A,v,b),p=s.context,p.clearRect(0,0,v,b),p.drawImage(a,0,0,g,m,0,0,v,b),a=s.canvas,g=v,m=b,A="prescale1"===A?"prescale2":"prescale1"}if(i.drawImage(a,0,0,g,m,0,-r,n,r),this.imageLayer){var y=this.getCanvasPosition(0,-r);this.imageLayer.appendImage({imgData:t,left:y[0],top:y[1],width:n/o[0],height:r/o[3]})}this.restore()},paintInlineImageXObjectGroup:function(t,n){var r=this.ctx,i=t.width,a=t.height,s=this.cachedCanvases.getCanvas("inlineImage",i,a);e(s.context,t);for(var o=0,c=n.length;o0&&!r.isSyncFontLoadingSupported?this.prepareFontLoadEvent(n,i,f):f.complete()},r.prototype.queueLoadingCallback=function(t){function e(){for(a(!i.end,"completeRequest() cannot be called twice"),i.end=Date.now();n.requests.length>0&&n.requests[0].end;){var t=n.requests.shift();setTimeout(t.callback,0)}}var n=this.loadingContext,r="pdfjs-font-loading-"+n.nextRequestId++,i={id:r,complete:e,callback:t,started:Date.now()};return n.requests.push(i),i},r.prototype.prepareFontLoadEvent=function(t,e,n){function r(t,e){return t.charCodeAt(e)<<24|t.charCodeAt(e+1)<<16|t.charCodeAt(e+2)<<8|255&t.charCodeAt(e+3)}function i(t,e,n,r){return t.substr(0,e)+r+t.substr(e+n)}function a(t,e){return++d>30?(l("Load test font never loaded."),void e()):(u.font="30px "+t,u.fillText(".",0,20),u.getImageData(0,0,1,1).data[3]>0?void e():void setTimeout(a.bind(null,t,e)))}var s,c,h=document.createElement("canvas");h.width=1,h.height=1;var u=h.getContext("2d"),d=0,f="lt"+Date.now()+this.loadTestFontId++,p=this.loadTestFont;p=i(p,976,f.length,f);var g=r(p,16);for(s=0,c=f.length-3;s=14&&(t=!0),t};Object.defineProperty(r,"isSyncFontLoadingSupported",{get:function(){return c(r,"isSyncFontLoadingSupported",u())},enumerable:!0,configurable:!0});var d={get value(){return c(this,"value",i.isEvalSupported())}},f=function(){function t(t,e){this.compiledGlyphs=Object.create(null);for(var n in t)this[n]=t[n];this.options=e}return t.prototype={createNativeFontFace:function(){if(!this.data)return null;if(this.options.disableFontFace)return this.disableFontFace=!0,null;var t=new FontFace(this.loadedName,this.data,{});return this.options.fontRegistry&&this.options.fontRegistry.registerFont(this),t},createFontFaceRule:function(){if(!this.data)return null;if(this.options.disableFontFace)return this.disableFontFace=!0,null;var t=s(new Uint8Array(this.data)),e=this.loadedName,n="url(data:"+this.mimetype+";base64,"+btoa(t)+");",r='@font-face { font-family:"'+e+'";src:'+n+"}";return this.options.fontRegistry&&this.options.fontRegistry.registerFont(this,n),r},getPathGenerator:function(t,e){if(!(e in this.compiledGlyphs)){var n,r,i,a=t.get(this.loadedName+"_path_"+e);if(this.options.isEvalSupported&&d.value){var s,o="";for(r=0,i=a.length;rl[r+1]&&(c=n,n=r,r=c,c=a,a=s,s=c),l[r+1]>l[i+1]&&(c=r,r=i,i=c,c=s,s=o,o=c),l[n+1]>l[r+1]&&(c=n,n=r,r=c,c=a,a=s,s=c);var f=(l[n]+e.offsetX)*e.scaleX,p=(l[n+1]+e.offsetY)*e.scaleY,g=(l[r]+e.offsetX)*e.scaleX,m=(l[r+1]+e.offsetY)*e.scaleY,A=(l[i]+e.offsetX)*e.scaleX,v=(l[i+1]+e.offsetY)*e.scaleY;if(!(p>=v))for(var b,y,x,S,w,k,C,_,T,P=h[a],L=h[a+1],E=h[a+2],R=h[s],I=h[s+1],F=h[s+2],O=h[o],N=h[o+1],M=h[o+2],D=Math.round(p),j=Math.round(v),U=D;U<=j;U++){Uv?1:m===v?0:(m-U)/(m-v),b=g-(g-A)*T,y=R-(R-O)*T,x=I-(I-N)*T,S=F-(F-M)*T),T=Uv?1:(p-U)/(p-v),w=f-(f-A)*T,k=P-(P-O)*T,C=L-(L-N)*T,_=E-(E-M)*T;for(var B=Math.round(Math.min(b,w)),W=Math.round(Math.max(b,w)),G=d*U+4*B,X=B;X<=W;X++)T=(b-X)/(b-w),T=T<0?0:T>1?1:T,u[G++]=y-(y-k)*T|0,u[G++]=x-(x-C)*T|0,u[G++]=S-(S-_)*T|0,u[G++]=255}}function e(e,n,r){var i,a,s=n.coords,o=n.colors;switch(n.type){case"lattice":var c=n.verticesPerRow,h=Math.floor(s.length/c)-1,u=c-1;for(i=0;i=0,o=/Chrome\/(39|40)\./.test(n),c=n.indexOf("CriOS")>=0,l=n.indexOf("Trident")>=0,h=/\b(iPad|iPhone|iPod)(?=;)/.test(n),u=n.indexOf("Opera")>=0,d=/Safari\//.test(n)&&!/(Chrome\/|Android\s)/.test(n),f="object"==typeof window&&"object"==typeof document;"undefined"==typeof PDFJS&&(e.PDFJS={}),PDFJS.compatibilityChecked=!0,function(){function t(t,e){return new r(this.slice(t,e))}function n(t,e){arguments.length<2&&(e=0);for(var n=0,r=t.length;n>2,l=(3&a)<<4|s>>4,h=n+1>6:64,u=n+2>(-2*r&6)):0)n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(n);return a}}}(),function(){void 0===Function.prototype.bind&&(Function.prototype.bind=function(t){var e=this,n=Array.prototype.slice.call(arguments,1);return function(){var r=n.concat(Array.prototype.slice.call(arguments));return e.apply(t,r)}})}(),function(){if(f){"dataset"in document.createElement("div")||Object.defineProperty(HTMLElement.prototype,"dataset",{get:function(){if(this._dataset)return this._dataset;for(var t={},e=0,n=this.attributes.length;e=0&&r&&a.splice(s,1),t.className=a.join(" "),s>=0}if(f){if(!("classList"in document.createElement("div"))){var e={add:function(e){t(this.element,e,!0,!1)},contains:function(e){return t(this.element,e,!1,!1)},remove:function(e){t(this.element,e,!1,!0)},toggle:function(e){t(this.element,e,!0,!0)}};Object.defineProperty(HTMLElement.prototype,"classList",{get:function(){if(this._classList)return this._classList;var t=Object.create(e,{element:{value:this,writable:!1,enumerable:!0}});return Object.defineProperty(this,"_classList",{value:t,writable:!1,enumerable:!1}),t},enumerable:!0})}}}(),function(){if(!("undefined"==typeof importScripts||"console"in e)){var t={},n={log:function(){var t=Array.prototype.slice.call(arguments);e.postMessage({targetName:"main",action:"console_log",data:t})},error:function(){var t=Array.prototype.slice.call(arguments);e.postMessage({targetName:"main",action:"console_error",data:t})},time:function(e){t[e]=Date.now()},timeEnd:function(e){var n=t[e];if(!n)throw new Error("Unknown timer name "+e);this.log("Timer:",e,Date.now()-n)}};e.console=n}}(),function(){if(f)"console"in window?"bind"in console.log||(console.log=function(t){return function(e){return t(e)}}(console.log),console.error=function(t){return function(e){return t(e)}}(console.error),console.warn=function(t){return function(e){return t(e)}}(console.warn)):window.console={log:function(){},error:function(){},warn:function(){}}}(),function(){function t(t){e(t.target)&&t.stopPropagation()}function e(t){return t.disabled||t.parentNode&&e(t.parentNode)}u&&document.addEventListener("click",t,!0)}(),function(){(l||c)&&(PDFJS.disableCreateObjectURL=!0)}(),function(){"undefined"!=typeof navigator&&("language"in navigator||(PDFJS.locale=navigator.userLanguage||"en-US"))}(),function(){(d||i||o||h)&&(PDFJS.disableRange=!0,PDFJS.disableStream=!0)}(),function(){f&&(history.pushState&&!i||(PDFJS.disableHistory=!0))}(),function(){if(f)if(window.CanvasPixelArray)"function"!=typeof window.CanvasPixelArray.prototype.set&&(window.CanvasPixelArray.prototype.set=function(t){for(var e=0,n=this.length;e0;){var n=this.handlers.shift(),r=n.thisPromise._status,i=n.thisPromise._value;try{1===r?"function"==typeof n.onResolve&&(i=n.onResolve(i)):"function"==typeof n.onReject&&(i=n.onReject(i),r=1,n.thisPromise._unhandledRejection&&this.removeUnhandeledRejection(n.thisPromise))}catch(e){r=t,i=e}if(n.nextPromise._updateStatus(r,i),Date.now()>=e)break}if(this.handlers.length>0)return void setTimeout(this.runHandlers.bind(this),0);this.running=!1},addUnhandledRejection:function(t){this.unhandledRejections.push({promise:t,time:Date.now()}),this.scheduleRejectionCheck()},removeUnhandeledRejection:function(t){t._unhandledRejection=!1;for(var e=0;e500){var n=this.unhandledRejections[e].promise._value,r="Unhandled rejection: "+n;n.stack&&(r+="\n"+n.stack);try{throw new Error(r)}catch(t){console.warn(r)}this.unhandledRejections.splice(e),e--}this.unhandledRejections.length&&this.scheduleRejectionCheck()}.bind(this),500))}},r=function(t){this._status=0,this._handlers=[];try{t.call(this,this._resolve.bind(this),this._reject.bind(this))}catch(t){this._reject(t)}};r.all=function(e){function n(e){s._status!==t&&(c=[],a(e))}var i,a,s=new r(function(t,e){i=t,a=e}),o=e.length,c=[];if(0===o)return i(c),s;for(var l=0,h=e.length;l32&&e<127&&-1===[34,35,60,62,63,96].indexOf(e)?t:encodeURIComponent(t)}function a(t){var e=t.charCodeAt(0);return e>32&&e<127&&-1===[34,35,60,62,96].indexOf(e)?t:encodeURIComponent(t)}function s(e,s,o){function c(t){b.push(t)}var l=s||"scheme start",h=0,m="",A=!1,v=!1,b=[];t:for(;(e[h-1]!==f||0===h)&&!this._isInvalid;){var y=e[h];switch(l){case"scheme start":if(!y||!p.test(y)){if(s){c("Invalid scheme.");break t}m="",l="no scheme";continue}m+=y.toLowerCase(),l="scheme";break;case"scheme":if(y&&g.test(y))m+=y.toLowerCase();else{if(":"!==y){if(s){if(y===f)break t;c("Code point not allowed in scheme: "+y);break t}m="",h=0,l="no scheme";continue}if(this._scheme=m,m="",s)break t;t(this._scheme)&&(this._isRelative=!0),l="file"===this._scheme?"relative":this._isRelative&&o&&o._scheme===this._scheme?"relative or authority":this._isRelative?"authority first slash":"scheme data"}break;case"scheme data":"?"===y?(this._query="?",l="query"):"#"===y?(this._fragment="#",l="fragment"):y!==f&&"\t"!==y&&"\n"!==y&&"\r"!==y&&(this._schemeData+=i(y));break;case"no scheme":if(o&&t(o._scheme)){l="relative";continue}c("Missing scheme."),n.call(this);break;case"relative or authority":if("/"!==y||"/"!==e[h+1]){c("Expected /, got: "+y),l="relative";continue}l="authority ignore slashes";break;case"relative":if(this._isRelative=!0,"file"!==this._scheme&&(this._scheme=o._scheme),y===f){this._host=o._host,this._port=o._port,this._path=o._path.slice(),this._query=o._query,this._username=o._username,this._password=o._password;break t}if("/"===y||"\\"===y)"\\"===y&&c("\\ is an invalid code point."),l="relative slash";else if("?"===y)this._host=o._host,this._port=o._port,this._path=o._path.slice(),this._query="?",this._username=o._username,this._password=o._password,l="query";else{if("#"!==y){var x=e[h+1],S=e[h+2];("file"!==this._scheme||!p.test(y)||":"!==x&&"|"!==x||S!==f&&"/"!==S&&"\\"!==S&&"?"!==S&&"#"!==S)&&(this._host=o._host,this._port=o._port,this._username=o._username,this._password=o._password,this._path=o._path.slice(),this._path.pop()),l="relative path";continue}this._host=o._host,this._port=o._port,this._path=o._path.slice(),this._query=o._query,this._fragment="#",this._username=o._username,this._password=o._password,l="fragment"}break;case"relative slash":if("/"!==y&&"\\"!==y){"file"!==this._scheme&&(this._host=o._host,this._port=o._port,this._username=o._username,this._password=o._password),l="relative path";continue}"\\"===y&&c("\\ is an invalid code point."),l="file"===this._scheme?"file host":"authority ignore slashes";break;case"authority first slash":if("/"!==y){c("Expected '/', got: "+y),l="authority ignore slashes";continue}l="authority second slash";break;case"authority second slash":if(l="authority ignore slashes","/"!==y){c("Expected '/', got: "+y);continue}break;case"authority ignore slashes":if("/"!==y&&"\\"!==y){l="authority";continue}c("Expected authority, got: "+y);break;case"authority":if("@"===y){A&&(c("@ already seen."),m+="%40"),A=!0;for(var w=0;w 0 && newScale < MAX_SCALE); + newScale = Math.min(_ui_utils.MAX_SCALE, newScale); + } while (--ticks > 0 && newScale < _ui_utils.MAX_SCALE); this.pdfViewer.currentScaleValue = newScale; }, zoomOut: function pdfViewZoomOut(ticks) { @@ -331,8 +319,8 @@ var PDFViewerApplication = { do { newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2); newScale = Math.floor(newScale * 10) / 10; - newScale = Math.max(MIN_SCALE, newScale); - } while (--ticks > 0 && newScale > MIN_SCALE); + newScale = Math.max(_ui_utils.MIN_SCALE, newScale); + } while (--ticks > 0 && newScale > _ui_utils.MIN_SCALE); this.pdfViewer.currentScaleValue = newScale; }, get pagesCount() { @@ -357,10 +345,10 @@ var PDFViewerApplication = { if (document.fullscreenEnabled === false || document.mozFullScreenEnabled === false || document.webkitFullscreenEnabled === false || document.msFullscreenEnabled === false) { support = false; } - if (support && pdfjsLib.PDFJS.disableFullscreen === true) { + if (support && _pdfjs.PDFJS.disableFullscreen === true) { support = false; } - return pdfjsLib.shadow(this, 'supportsFullscreen', support); + return (0, _pdfjs.shadow)(this, 'supportsFullscreen', support); }, get supportsIntegratedFind() { return this.externalServices.supportsIntegratedFind; @@ -372,8 +360,8 @@ var PDFViewerApplication = { return this.externalServices.supportsDocumentColors; }, get loadingBar() { - var bar = new ProgressBar('#loadingBar', {}); - return pdfjsLib.shadow(this, 'loadingBar', bar); + var bar = new _ui_utils.ProgressBar('#loadingBar', {}); + return (0, _pdfjs.shadow)(this, 'loadingBar', bar); }, get supportedMouseWheelZoomModifierKeys() { return this.externalServices.supportedMouseWheelZoomModifierKeys; @@ -384,10 +372,10 @@ var PDFViewerApplication = { setTitleUsingUrl: function pdfViewSetTitleUsingUrl(url) { this.url = url; this.baseUrl = url.split('#')[0]; - var title = getPDFFileNameFromURL(url, ''); + var title = (0, _ui_utils.getPDFFileNameFromURL)(url, ''); if (!title) { try { - title = decodeURIComponent(pdfjsLib.getFilenameFromUrl(url)) || url; + title = decodeURIComponent((0, _pdfjs.getFilenameFromUrl)(url)) || url; } catch (e) { title = url; } @@ -434,7 +422,7 @@ var PDFViewerApplication = { } if (this.pdfLoadingTask) { return this.close().then(function () { - Preferences.reload(); + _preferences.Preferences.reload(); return this.open(file, args); }.bind(this)); } @@ -462,7 +450,7 @@ var PDFViewerApplication = { } var self = this; self.downloadComplete = false; - var loadingTask = pdfjsLib.getDocument(parameters); + var loadingTask = (0, _pdfjs.getDocument)(parameters); this.pdfLoadingTask = loadingTask; loadingTask.onPassword = function passwordNeeded(updateCallback, reason) { self.passwordPrompt.setUpdateCallback(updateCallback, reason); @@ -476,13 +464,13 @@ var PDFViewerApplication = { self.load(pdfDocument, scale); }, function getDocumentError(exception) { var message = exception && exception.message; - var loadingErrorMessage = mozL10n.get('loading_error', null, 'An error occurred while loading the PDF.'); - if (exception instanceof pdfjsLib.InvalidPDFException) { - loadingErrorMessage = mozL10n.get('invalid_file_error', null, 'Invalid or corrupted PDF file.'); - } else if (exception instanceof pdfjsLib.MissingPDFException) { - loadingErrorMessage = mozL10n.get('missing_file_error', null, 'Missing PDF file.'); - } else if (exception instanceof pdfjsLib.UnexpectedResponseException) { - loadingErrorMessage = mozL10n.get('unexpected_response_error', null, 'Unexpected server response.'); + var loadingErrorMessage = _ui_utils.mozL10n.get('loading_error', null, 'An error occurred while loading the PDF.'); + if (exception instanceof _pdfjs.InvalidPDFException) { + loadingErrorMessage = _ui_utils.mozL10n.get('invalid_file_error', null, 'Invalid or corrupted PDF file.'); + } else if (exception instanceof _pdfjs.MissingPDFException) { + loadingErrorMessage = _ui_utils.mozL10n.get('missing_file_error', null, 'Missing PDF file.'); + } else if (exception instanceof _pdfjs.UnexpectedResponseException) { + loadingErrorMessage = _ui_utils.mozL10n.get('unexpected_response_error', null, 'Unexpected server response.'); } var moreInfo = { message: message }; self.error(loadingErrorMessage, moreInfo); @@ -494,7 +482,7 @@ var PDFViewerApplication = { downloadManager.downloadUrl(url, filename); } var url = this.baseUrl; - var filename = getPDFFileNameFromURL(this.url); + var filename = (0, _ui_utils.getPDFFileNameFromURL)(this.url); var downloadManager = this.downloadManager; downloadManager.onerror = function (err) { PDFViewerApplication.error('PDF failed to download.'); @@ -508,26 +496,26 @@ var PDFViewerApplication = { return; } this.pdfDocument.getData().then(function getDataSuccess(data) { - var blob = pdfjsLib.createBlob(data, 'application/pdf'); + var blob = (0, _pdfjs.createBlob)(data, 'application/pdf'); downloadManager.download(blob, url, filename); }, downloadByUrl).then(null, downloadByUrl); }, fallback: function pdfViewFallback(featureId) {}, error: function pdfViewError(message, moreInfo) { - var moreInfoText = mozL10n.get('error_version_info', { - version: pdfjsLib.version || '?', - build: pdfjsLib.build || '?' + var moreInfoText = _ui_utils.mozL10n.get('error_version_info', { + version: _pdfjs.version || '?', + build: _pdfjs.build || '?' }, 'PDF.js v{{version}} (build: {{build}})') + '\n'; if (moreInfo) { - moreInfoText += mozL10n.get('error_message', { message: moreInfo.message }, 'Message: {{message}}'); + moreInfoText += _ui_utils.mozL10n.get('error_message', { message: moreInfo.message }, 'Message: {{message}}'); if (moreInfo.stack) { - moreInfoText += '\n' + mozL10n.get('error_stack', { stack: moreInfo.stack }, 'Stack: {{stack}}'); + moreInfoText += '\n' + _ui_utils.mozL10n.get('error_stack', { stack: moreInfo.stack }, 'Stack: {{stack}}'); } else { if (moreInfo.filename) { - moreInfoText += '\n' + mozL10n.get('error_file', { file: moreInfo.filename }, 'File: {{file}}'); + moreInfoText += '\n' + _ui_utils.mozL10n.get('error_file', { file: moreInfo.filename }, 'File: {{file}}'); } if (moreInfo.lineNumber) { - moreInfoText += '\n' + mozL10n.get('error_line', { line: moreInfo.lineNumber }, 'Line: {{line}}'); + moreInfoText += '\n' + _ui_utils.mozL10n.get('error_line', { line: moreInfo.lineNumber }, 'Line: {{line}}'); } } } @@ -554,9 +542,9 @@ var PDFViewerApplication = { moreInfoButton.removeAttribute('hidden'); lessInfoButton.setAttribute('hidden', 'true'); }; - moreInfoButton.oncontextmenu = noContextMenuHandler; - lessInfoButton.oncontextmenu = noContextMenuHandler; - closeButton.oncontextmenu = noContextMenuHandler; + moreInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler; + lessInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler; + closeButton.oncontextmenu = _ui_utils.noContextMenuHandler; moreInfoButton.removeAttribute('hidden'); lessInfoButton.setAttribute('hidden', 'true'); errorMoreInfo.value = moreInfoText; @@ -565,7 +553,7 @@ var PDFViewerApplication = { var percent = Math.round(level * 100); if (percent > this.loadingBar.percent || isNaN(percent)) { this.loadingBar.percent = percent; - if (pdfjsLib.PDFJS.disableAutoFetch && percent) { + if (_pdfjs.PDFJS.disableAutoFetch && percent) { if (this.disableAutoFetchLoadingBarTimeout) { clearTimeout(this.disableAutoFetchLoadingBarTimeout); this.disableAutoFetchLoadingBarTimeout = null; @@ -580,7 +568,7 @@ var PDFViewerApplication = { }, load: function pdfViewLoad(pdfDocument, scale) { var self = this; - scale = scale || UNKNOWN_SCALE; + scale = scale || _ui_utils.UNKNOWN_SCALE; this.pdfDocument = pdfDocument; this.pdfDocumentProperties.setDocumentAndUrl(pdfDocument, this.url); var downloadedPromise = pdfDocument.getDownloadInfo().then(function () { @@ -590,7 +578,7 @@ var PDFViewerApplication = { this.toolbar.setPagesCount(pdfDocument.numPages, false); this.secondaryToolbar.setPagesCount(pdfDocument.numPages); var id = this.documentFingerprint = pdfDocument.fingerprint; - var store = this.store = new ViewHistory(id); + var store = this.store = new _view_history.ViewHistory(id); var baseDocumentUrl; baseDocumentUrl = null; this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl); @@ -608,7 +596,7 @@ var PDFViewerApplication = { self.eventBus.dispatch('documentload', { source: self }); }); self.loadingBar.setWidth(self.appConfig.viewerContainer); - if (!pdfjsLib.PDFJS.disableHistory && !self.isViewerEmbedded) { + if (!_pdfjs.PDFJS.disableHistory && !self.isViewerEmbedded) { if (!self.viewerPrefs['showPreviousViewOnLoad']) { self.pdfHistory.clearHistoryState(); } @@ -629,11 +617,11 @@ var PDFViewerApplication = { sidebarView = null; if (self.viewerPrefs['showPreviousViewOnLoad'] && store.get('exists', false)) { var pageNum = store.get('page', '1'); - var zoom = self.viewerPrefs['defaultZoomValue'] || store.get('zoom', DEFAULT_SCALE_VALUE); + var zoom = self.viewerPrefs['defaultZoomValue'] || store.get('zoom', _ui_utils.DEFAULT_SCALE_VALUE); var left = store.get('scrollLeft', '0'); var top = store.get('scrollTop', '0'); storedHash = 'page=' + pageNum + '&zoom=' + zoom + ',' + left + ',' + top; - sidebarView = store.get('sidebarView', SidebarView.NONE); + sidebarView = store.get('sidebarView', _pdf_sidebar.SidebarView.NONE); } else if (self.viewerPrefs['defaultZoomValue']) { storedHash = 'page=1&zoom=' + self.viewerPrefs['defaultZoomValue']; } @@ -688,7 +676,7 @@ var PDFViewerApplication = { pdfDocument.getJavaScript().then(function (javaScript) { if (javaScript.length) { console.warn('Warning: JavaScript is not supported'); - self.fallback(pdfjsLib.UNSUPPORTED_FEATURES.javaScript); + self.fallback(_pdfjs.UNSUPPORTED_FEATURES.javaScript); } var regex = /\bprint\s*\(/; for (var i = 0, ii = javaScript.length; i < ii; i++) { @@ -703,7 +691,7 @@ var PDFViewerApplication = { }); } }); - Promise.all([onePageRendered, animationStarted]).then(function () { + Promise.all([onePageRendered, _ui_utils.animationStarted]).then(function () { pdfDocument.getOutline().then(function (outline) { self.pdfOutlineViewer.render({ outline: outline }); }); @@ -716,7 +704,7 @@ var PDFViewerApplication = { metadata = data.metadata; self.documentInfo = info; self.metadata = metadata; - console.log('PDF ' + pdfDocument.fingerprint + ' [' + info.PDFFormatVersion + ' ' + (info.Producer || '-').trim() + ' / ' + (info.Creator || '-').trim() + ']' + ' (PDF.js: ' + (pdfjsLib.version || '-') + (!pdfjsLib.PDFJS.disableWebGL ? ' [WebGL]' : '') + ')'); + console.log('PDF ' + pdfDocument.fingerprint + ' [' + info.PDFFormatVersion + ' ' + (info.Producer || '-').trim() + ' / ' + (info.Creator || '-').trim() + ']' + ' (PDF.js: ' + (_pdfjs.version || '-') + (!_pdfjs.PDFJS.disableWebGL ? ' [WebGL]' : '') + ')'); var pdfTitle; if (metadata && metadata.has('dc:title')) { var title = metadata.get('dc:title'); @@ -732,7 +720,7 @@ var PDFViewerApplication = { } if (info.IsAcroFormPresent) { console.warn('Warning: AcroForm/XFA is not supported'); - self.fallback(pdfjsLib.UNSUPPORTED_FEATURES.forms); + self.fallback(_pdfjs.UNSUPPORTED_FEATURES.forms); } }); }, @@ -757,7 +745,7 @@ var PDFViewerApplication = { this.toolbar.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel); this.secondaryToolbar.setPageNumber(this.pdfViewer.currentPageNumber); if (!this.pdfViewer.currentScaleValue) { - this.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE; + this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; } }, cleanup: function pdfViewCleanup() { @@ -766,7 +754,7 @@ var PDFViewerApplication = { } this.pdfViewer.cleanup(); this.pdfThumbnailViewer.cleanup(); - if (this.pdfViewer.renderer !== RendererType.SVG) { + if (this.pdfViewer.renderer !== _ui_utils.RendererType.SVG) { this.pdfDocument.cleanup(); } }, @@ -780,12 +768,12 @@ var PDFViewerApplication = { return; } if (!this.supportsPrinting) { - var printMessage = mozL10n.get('printing_not_supported', null, 'Warning: Printing is not fully supported by this browser.'); + var printMessage = _ui_utils.mozL10n.get('printing_not_supported', null, 'Warning: Printing is not fully supported by this browser.'); this.error(printMessage); return; } if (!this.pdfViewer.pageViewsReady) { - var notReadyMessage = mozL10n.get('printing_not_ready', null, 'Warning: The PDF is not fully loaded for printing.'); + var notReadyMessage = _ui_utils.mozL10n.get('printing_not_ready', null, 'Warning: The PDF is not fully loaded for printing.'); window.alert(notReadyMessage); return; } @@ -888,25 +876,27 @@ var PDFViewerApplication = { } }; var validateFileURL; -var HOSTED_VIEWER_ORIGINS = ['null', 'http://mozilla.github.io', 'https://mozilla.github.io']; -validateFileURL = function validateFileURL(file) { - try { - var viewerOrigin = new URL(window.location.href).origin || 'null'; - if (HOSTED_VIEWER_ORIGINS.indexOf(viewerOrigin) >= 0) { - return; - } - var fileOrigin = new URL(file, window.location.href).origin; - if (fileOrigin !== viewerOrigin) { - throw new Error('file origin does not match viewer\'s'); +{ + var HOSTED_VIEWER_ORIGINS = ['null', 'http://mozilla.github.io', 'https://mozilla.github.io']; + validateFileURL = function validateFileURL(file) { + try { + var viewerOrigin = new URL(window.location.href).origin || 'null'; + if (HOSTED_VIEWER_ORIGINS.indexOf(viewerOrigin) >= 0) { + return; + } + var fileOrigin = new URL(file, window.location.href).origin; + if (fileOrigin !== viewerOrigin) { + throw new Error('file origin does not match viewer\'s'); + } + } catch (e) { + var message = e && e.message; + var loadingErrorMessage = _ui_utils.mozL10n.get('loading_error', null, 'An error occurred while loading the PDF.'); + var moreInfo = { message: message }; + PDFViewerApplication.error(loadingErrorMessage, moreInfo); + throw e; } - } catch (e) { - var message = e && e.message; - var loadingErrorMessage = mozL10n.get('loading_error', null, 'An error occurred while loading the PDF.'); - var moreInfo = { message: message }; - PDFViewerApplication.error(loadingErrorMessage, moreInfo); - throw e; - } -}; + }; +} function loadAndEnablePDFBug(enabledTabs) { return new Promise(function (resolve, reject) { var appConfig = PDFViewerApplication.appConfig; @@ -914,7 +904,10 @@ function loadAndEnablePDFBug(enabledTabs) { script.src = appConfig.debuggerScriptPath; script.onload = function () { PDFBug.enable(enabledTabs); - PDFBug.init(pdfjsLib, appConfig.mainContainer); + PDFBug.init({ + PDFJS: _pdfjs.PDFJS, + OPS: _pdfjs.OPS + }, appConfig.mainContainer); resolve(); }; script.onerror = function () { @@ -927,7 +920,7 @@ function webViewerInitialized() { var appConfig = PDFViewerApplication.appConfig; var file; var queryString = document.location.search.substring(1); - var params = parseQueryString(queryString); + var params = (0, _ui_utils.parseQueryString)(queryString); file = 'file' in params ? params.file : appConfig.defaultUrl; validateFileURL(file); var waitForBeforeOpening = []; @@ -935,7 +928,7 @@ function webViewerInitialized() { fileInput.id = appConfig.openFileInputName; fileInput.className = 'fileInput'; fileInput.setAttribute('type', 'file'); - fileInput.oncontextmenu = noContextMenuHandler; + fileInput.oncontextmenu = _ui_utils.noContextMenuHandler; document.body.appendChild(fileInput); if (!window.File || !window.FileReader || !window.FileList || !window.Blob) { appConfig.toolbar.openFile.setAttribute('hidden', 'true'); @@ -943,47 +936,46 @@ function webViewerInitialized() { } else { fileInput.value = null; } - var PDFJS = pdfjsLib.PDFJS; if (PDFViewerApplication.viewerPrefs['pdfBugEnabled']) { var hash = document.location.hash.substring(1); - var hashParams = parseQueryString(hash); + var hashParams = (0, _ui_utils.parseQueryString)(hash); if ('disableworker' in hashParams) { - PDFJS.disableWorker = hashParams['disableworker'] === 'true'; + _pdfjs.PDFJS.disableWorker = hashParams['disableworker'] === 'true'; } if ('disablerange' in hashParams) { - PDFJS.disableRange = hashParams['disablerange'] === 'true'; + _pdfjs.PDFJS.disableRange = hashParams['disablerange'] === 'true'; } if ('disablestream' in hashParams) { - PDFJS.disableStream = hashParams['disablestream'] === 'true'; + _pdfjs.PDFJS.disableStream = hashParams['disablestream'] === 'true'; } if ('disableautofetch' in hashParams) { - PDFJS.disableAutoFetch = hashParams['disableautofetch'] === 'true'; + _pdfjs.PDFJS.disableAutoFetch = hashParams['disableautofetch'] === 'true'; } if ('disablefontface' in hashParams) { - PDFJS.disableFontFace = hashParams['disablefontface'] === 'true'; + _pdfjs.PDFJS.disableFontFace = hashParams['disablefontface'] === 'true'; } if ('disablehistory' in hashParams) { - PDFJS.disableHistory = hashParams['disablehistory'] === 'true'; + _pdfjs.PDFJS.disableHistory = hashParams['disablehistory'] === 'true'; } if ('webgl' in hashParams) { - PDFJS.disableWebGL = hashParams['webgl'] !== 'true'; + _pdfjs.PDFJS.disableWebGL = hashParams['webgl'] !== 'true'; } if ('useonlycsszoom' in hashParams) { - PDFJS.useOnlyCssZoom = hashParams['useonlycsszoom'] === 'true'; + _pdfjs.PDFJS.useOnlyCssZoom = hashParams['useonlycsszoom'] === 'true'; } if ('verbosity' in hashParams) { - PDFJS.verbosity = hashParams['verbosity'] | 0; + _pdfjs.PDFJS.verbosity = hashParams['verbosity'] | 0; } if ('ignorecurrentpositiononzoom' in hashParams) { - PDFJS.ignoreCurrentPositionOnZoom = hashParams['ignorecurrentpositiononzoom'] === 'true'; + _pdfjs.PDFJS.ignoreCurrentPositionOnZoom = hashParams['ignorecurrentpositiononzoom'] === 'true'; } if ('locale' in hashParams) { - PDFJS.locale = hashParams['locale']; + _pdfjs.PDFJS.locale = hashParams['locale']; } if ('textlayer' in hashParams) { switch (hashParams['textlayer']) { case 'off': - PDFJS.disableTextLayer = true; + _pdfjs.PDFJS.disableTextLayer = true; break; case 'visible': case 'shadow': @@ -994,13 +986,13 @@ function webViewerInitialized() { } } if ('pdfbug' in hashParams) { - PDFJS.pdfBug = true; + _pdfjs.PDFJS.pdfBug = true; var pdfBug = hashParams['pdfbug']; var enabled = pdfBug.split(','); waitForBeforeOpening.push(loadAndEnablePDFBug(enabled)); } } - mozL10n.setLanguage(PDFJS.locale); + _ui_utils.mozL10n.setLanguage(_pdfjs.PDFJS.locale); if (!PDFViewerApplication.supportsPrinting) { appConfig.toolbar.print.classList.add('hidden'); appConfig.secondaryToolbar.printButton.classList.add('hidden'); @@ -1023,30 +1015,32 @@ function webViewerInitialized() { Promise.all(waitForBeforeOpening).then(function () { webViewerOpenFileViaURL(file); }).catch(function (reason) { - PDFViewerApplication.error(mozL10n.get('loading_error', null, 'An error occurred while opening.'), reason); + PDFViewerApplication.error(_ui_utils.mozL10n.get('loading_error', null, 'An error occurred while opening.'), reason); }); } var webViewerOpenFileViaURL; -webViewerOpenFileViaURL = function webViewerOpenFileViaURL(file) { - if (file && file.lastIndexOf('file:', 0) === 0) { - PDFViewerApplication.setTitleUsingUrl(file); - var xhr = new XMLHttpRequest(); - xhr.onload = function () { - PDFViewerApplication.open(new Uint8Array(xhr.response)); - }; - try { - xhr.open('GET', file); - xhr.responseType = 'arraybuffer'; - xhr.send(); - } catch (e) { - PDFViewerApplication.error(mozL10n.get('loading_error', null, 'An error occurred while loading the PDF.'), e); +{ + webViewerOpenFileViaURL = function webViewerOpenFileViaURL(file) { + if (file && file.lastIndexOf('file:', 0) === 0) { + PDFViewerApplication.setTitleUsingUrl(file); + var xhr = new XMLHttpRequest(); + xhr.onload = function () { + PDFViewerApplication.open(new Uint8Array(xhr.response)); + }; + try { + xhr.open('GET', file); + xhr.responseType = 'arraybuffer'; + xhr.send(); + } catch (e) { + PDFViewerApplication.error(_ui_utils.mozL10n.get('loading_error', null, 'An error occurred while loading the PDF.'), e); + } + return; } - return; - } - if (file) { - PDFViewerApplication.open(file); - } -}; + if (file) { + PDFViewerApplication.open(file); + } + }; +} function webViewerPageRendered(e) { var pageNumber = e.pageNumber; var pageIndex = pageNumber - 1; @@ -1061,11 +1055,11 @@ function webViewerPageRendered(e) { var thumbnailView = PDFViewerApplication.pdfThumbnailViewer.getThumbnail(pageIndex); thumbnailView.setImage(pageView); } - if (pdfjsLib.PDFJS.pdfBug && Stats.enabled && pageView.stats) { + if (_pdfjs.PDFJS.pdfBug && Stats.enabled && pageView.stats) { Stats.add(pageNumber, pageView.stats); } if (pageView.error) { - PDFViewerApplication.error(mozL10n.get('rendering_error', null, 'An error occurred while rendering the page.'), pageView.error); + PDFViewerApplication.error(_ui_utils.mozL10n.get('rendering_error', null, 'An error occurred while rendering the page.'), pageView.error); } } function webViewerTextLayerRendered(e) {} @@ -1074,17 +1068,17 @@ function webViewerPageMode(e) { view; switch (mode) { case 'thumbs': - view = SidebarView.THUMBS; + view = _pdf_sidebar.SidebarView.THUMBS; break; case 'bookmarks': case 'outline': - view = SidebarView.OUTLINE; + view = _pdf_sidebar.SidebarView.OUTLINE; break; case 'attachments': - view = SidebarView.ATTACHMENTS; + view = _pdf_sidebar.SidebarView.ATTACHMENTS; break; case 'none': - view = SidebarView.NONE; + view = _pdf_sidebar.SidebarView.NONE; break; default: console.error('Invalid "pagemode" hash parameter: ' + mode); @@ -1108,7 +1102,7 @@ function webViewerNamedAction(e) { function webViewerPresentationModeChanged(e) { var active = e.active; var switchInProgress = e.switchInProgress; - PDFViewerApplication.pdfViewer.presentationModeState = switchInProgress ? PresentationModeState.CHANGING : active ? PresentationModeState.FULLSCREEN : PresentationModeState.NORMAL; + PDFViewerApplication.pdfViewer.presentationModeState = switchInProgress ? _pdf_viewer.PresentationModeState.CHANGING : active ? _pdf_viewer.PresentationModeState.FULLSCREEN : _pdf_viewer.PresentationModeState.NORMAL; } function webViewerSidebarViewChanged(e) { PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = PDFViewerApplication.pdfSidebar.isThumbnailViewVisible; @@ -1139,7 +1133,7 @@ function webViewerUpdateViewarea(e) { 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 !== RenderingStates.FINISHED; + var loading = currentPage.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED; PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading); } function webViewerResize() { @@ -1147,7 +1141,7 @@ function webViewerResize() { if (currentScaleValue === 'auto' || currentScaleValue === 'page-fit' || currentScaleValue === 'page-width') { PDFViewerApplication.pdfViewer.currentScaleValue = currentScaleValue; } else if (!currentScaleValue) { - PDFViewerApplication.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE; + PDFViewerApplication.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; } PDFViewerApplication.pdfViewer.update(); } @@ -1165,26 +1159,28 @@ function webViewerHashchange(e) { } } var webViewerFileInputChange; -webViewerFileInputChange = function webViewerFileInputChange(e) { - var file = e.fileInput.files[0]; - if (!pdfjsLib.PDFJS.disableCreateObjectURL && typeof URL !== 'undefined' && URL.createObjectURL) { - PDFViewerApplication.open(URL.createObjectURL(file)); - } else { - var fileReader = new FileReader(); - fileReader.onload = function webViewerChangeFileReaderOnload(evt) { - var buffer = evt.target.result; - var uint8Array = new Uint8Array(buffer); - PDFViewerApplication.open(uint8Array); - }; - fileReader.readAsArrayBuffer(file); - } - PDFViewerApplication.setTitleUsingUrl(file.name); - var appConfig = PDFViewerApplication.appConfig; - appConfig.toolbar.viewBookmark.setAttribute('hidden', 'true'); - appConfig.secondaryToolbar.viewBookmarkButton.setAttribute('hidden', 'true'); - appConfig.toolbar.download.setAttribute('hidden', 'true'); - appConfig.secondaryToolbar.downloadButton.setAttribute('hidden', 'true'); -}; +{ + webViewerFileInputChange = function webViewerFileInputChange(e) { + var file = e.fileInput.files[0]; + if (!_pdfjs.PDFJS.disableCreateObjectURL && typeof URL !== 'undefined' && URL.createObjectURL) { + PDFViewerApplication.open(URL.createObjectURL(file)); + } else { + var fileReader = new FileReader(); + fileReader.onload = function webViewerChangeFileReaderOnload(evt) { + var buffer = evt.target.result; + var uint8Array = new Uint8Array(buffer); + PDFViewerApplication.open(uint8Array); + }; + fileReader.readAsArrayBuffer(file); + } + PDFViewerApplication.setTitleUsingUrl(file.name); + var appConfig = PDFViewerApplication.appConfig; + appConfig.toolbar.viewBookmark.setAttribute('hidden', 'true'); + appConfig.secondaryToolbar.viewBookmarkButton.setAttribute('hidden', 'true'); + appConfig.toolbar.download.setAttribute('hidden', 'true'); + appConfig.secondaryToolbar.downloadButton.setAttribute('hidden', 'true'); + }; +} function webViewerPresentationMode() { PDFViewerApplication.requestPresentationMode(); } @@ -1268,7 +1264,7 @@ function webViewerPageChanging(e) { if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(page); } - if (pdfjsLib.PDFJS.pdfBug && Stats.enabled) { + if (_pdfjs.PDFJS.pdfBug && Stats.enabled) { var pageView = PDFViewerApplication.pdfViewer.getPageView(page - 1); if (pageView.stats) { Stats.add(page, pageView.stats); @@ -1292,7 +1288,7 @@ function webViewerWheel(evt) { return; } var previousScale = pdfViewer.currentScale; - var delta = normalizeWheelEventDelta(evt); + var delta = (0, _ui_utils.normalizeWheelEventDelta)(evt); var MOUSE_WHEEL_DELTA_PER_PAGE_SCALE = 3.0; var ticks = delta * MOUSE_WHEEL_DELTA_PER_PAGE_SCALE; if (ticks < 0) { @@ -1327,7 +1323,7 @@ function webViewerClick(evt) { } } function webViewerKeyDown(evt) { - if (OverlayManager.active) { + if (_overlay_manager.OverlayManager.active) { return; } var handled = false, @@ -1379,7 +1375,7 @@ function webViewerKeyDown(evt) { case 96: if (!isViewerInPresentationMode) { setTimeout(function () { - pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE; + pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; }); handled = false; } @@ -1548,8 +1544,8 @@ function webViewerKeyDown(evt) { evt.preventDefault(); } } -localized.then(function webViewerLocalized() { - document.getElementsByTagName('html')[0].dir = mozL10n.getDirection(); +_ui_utils.localized.then(function webViewerLocalized() { + document.getElementsByTagName('html')[0].dir = _ui_utils.mozL10n.getDirection(); }); var PDFPrintServiceFactory = { instance: { @@ -1560,5 +1556,5 @@ var PDFPrintServiceFactory = { } }; exports.PDFViewerApplication = PDFViewerApplication; -exports.DefaultExernalServices = DefaultExernalServices; +exports.DefaultExternalServices = DefaultExternalServices; exports.PDFPrintServiceFactory = PDFPrintServiceFactory; \ No newline at end of file diff --git a/lib/web/chromecom.js b/lib/web/chromecom.js index 5e2d024dc..4b3cf43d2 100644 --- a/lib/web/chromecom.js +++ b/lib/web/chromecom.js @@ -14,8 +14,263 @@ */ 'use strict'; -var app = require('./app.js'); -var overlayManager = require('./overlay_manager.js'); -var preferences = require('./preferences.js'); -var pdfjsLib = require('./pdfjs.js'); -throw new Error('Module "pdfjs-web/chromecom" shall not be used outside ' + 'CHROME build.'); \ No newline at end of file +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ChromeCom = undefined; + +var _app = require('pdfjs-web/app'); + +var _overlay_manager = require('pdfjs-web/overlay_manager'); + +var _pdfjs = require('pdfjs-web/pdfjs'); + +var _preferences = require('pdfjs-web/preferences'); + +{ + throw new Error('Module "pdfjs-web/chromecom" shall not be used outside ' + 'CHROME build.'); +} +var ChromeCom = {}; +ChromeCom.request = function ChromeCom_request(action, data, callback) { + var message = { + action: action, + data: data + }; + if (!chrome.runtime) { + console.error('chrome.runtime is undefined.'); + if (callback) { + callback(); + } + } else if (callback) { + chrome.runtime.sendMessage(message, callback); + } else { + chrome.runtime.sendMessage(message); + } +}; +ChromeCom.resolvePDFFile = function ChromeCom_resolvePDFFile(file, callback) { + file = file.replace(/^drive:/i, 'filesystem:' + location.origin + '/external/'); + if (/^filesystem:/.test(file) && !_pdfjs.PDFJS.disableWorker) { + var resolveLocalFileSystemURL = window.resolveLocalFileSystemURL || window.webkitResolveLocalFileSystemURL; + resolveLocalFileSystemURL(file, function onResolvedFSURL(fileEntry) { + fileEntry.file(function (fileObject) { + var blobUrl = URL.createObjectURL(fileObject); + callback(blobUrl, fileObject.size); + }); + }, function onFileSystemError(error) { + console.warn('Cannot resolve file ' + file + ', ' + error.name + ' ' + error.message); + callback(file); + }); + return; + } + if (/^https?:/.test(file)) { + setReferer(file, function () { + callback(file); + }); + return; + } + if (/^file?:/.test(file)) { + getEmbedderOrigin(function (origin) { + if (origin && !/^file:|^chrome-extension:/.test(origin)) { + _app.PDFViewerApplication.error('Blocked ' + origin + ' from loading ' + file + '. Refused to load a local file in a non-local page ' + 'for security reasons.'); + return; + } + isAllowedFileSchemeAccess(function (isAllowedAccess) { + if (isAllowedAccess) { + callback(file); + } else { + requestAccessToLocalFile(file); + } + }); + }); + return; + } + callback(file); +}; +function getEmbedderOrigin(callback) { + var origin = window === top ? location.origin : location.ancestorOrigins[0]; + if (origin === 'null') { + getParentOrigin(callback); + } else { + callback(origin); + } +} +function getParentOrigin(callback) { + ChromeCom.request('getParentOrigin', null, callback); +} +function isAllowedFileSchemeAccess(callback) { + ChromeCom.request('isAllowedFileSchemeAccess', null, callback); +} +function isRuntimeAvailable() { + try { + if (chrome.runtime && chrome.runtime.getManifest()) { + return true; + } + } catch (e) {} + return false; +} +function reloadIfRuntimeIsUnavailable() { + if (!isRuntimeAvailable()) { + location.reload(); + } +} +var chromeFileAccessOverlayPromise; +function requestAccessToLocalFile(fileUrl) { + var onCloseOverlay = null; + if (top !== window) { + window.addEventListener('focus', reloadIfRuntimeIsUnavailable); + onCloseOverlay = function () { + window.removeEventListener('focus', reloadIfRuntimeIsUnavailable); + reloadIfRuntimeIsUnavailable(); + _overlay_manager.OverlayManager.close('chromeFileAccessOverlay'); + }; + } + if (!chromeFileAccessOverlayPromise) { + chromeFileAccessOverlayPromise = _overlay_manager.OverlayManager.register('chromeFileAccessOverlay', document.getElementById('chromeFileAccessOverlay'), onCloseOverlay, true); + } + chromeFileAccessOverlayPromise.then(function () { + var iconPath = chrome.runtime.getManifest().icons[48]; + document.getElementById('chrome-pdfjs-logo-bg').style.backgroundImage = 'url(' + chrome.runtime.getURL(iconPath) + ')'; + var i18nFileAccessLabel = { + "am": "\u1208\u134b\u12ed\u120d \u12e9\u12a0\u122d\u12a4\u120d\u12ce\u127d \u1218\u12f3\u1228\u123b \u134d\u1240\u12f5", + "ar": "\u200f\u0627\u0644\u0633\u0645\u0627\u062d \u0628\u0627\u0644\u062f\u062e\u0648\u0644 \u0625\u0644\u0649 \u0639\u0646\u0627\u0648\u064a\u0646 URL \u0644\u0644\u0645\u0644\u0641\u0627\u062a", + "bg": "\u0414\u0430 \u0441\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0438 \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e URL \u0430\u0434\u0440\u0435\u0441\u0438\u0442\u0435 \u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u0435\u0442\u0435", + "bn": "\u09ab\u09be\u0987\u09b2 URL\u0997\u09c1\u09b2\u09bf\u09a4\u09c7 \u0985\u09cd\u09af\u09be\u0995\u09cd\u09b8\u09c7\u09b8 \u09ae\u099e\u09cd\u099c\u09c1\u09b0 \u0995\u09b0\u09c1\u09a8", + "ca": "Permet l'acc\u00e9s als URL de fitxer", + "cs": "Umo\u017enit p\u0159\u00edstup k adres\u00e1m URL soubor\u016f", + "da": "Tillad adgang til webadresser p\u00e5 filer", + "de": "Zugriff auf Datei-URLs zulassen", + "el": "\u039d\u03b1 \u03b5\u03c0\u03b9\u03c4\u03c1\u03ad\u03c0\u03b5\u03c4\u03b1\u03b9 \u03b7 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03b5 \u03b4\u03b9\u03b5\u03c5\u03b8\u03cd\u03bd\u03c3\u03b5\u03b9\u03c2 URL \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd", + "en-GB": "Allow access to file URLs", + "es": "Permitir acceso a URL de archivo", + "es-419": "Permitir el acceso a las URL del archivo", + "et": "Luba juurdep\u00e4\u00e4s failide URL-idele", + "fa": "\u200f\u0627\u062c\u0627\u0632\u0647\u0654 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 URL \u0647\u0627\u06cc \u0641\u0627\u06cc\u0644", + "fi": "Salli tiedostojen URL-osoitteiden k\u00e4ytt\u00f6", + "fil": "Payagan ang access na mag-file ng mga URL", + "fr": "Autoriser l'acc\u00e8s aux URL de fichier", + "gu": "URL \u0aab\u0abe\u0a87\u0ab2 \u0a95\u0ab0\u0ab5\u0abe \u0a8d\u0a95\u0acd\u0ab8\u0ac7\u0ab8\u0aa8\u0ac0 \u0aae\u0a82\u0a9c\u0ac2\u0ab0\u0ac0 \u0a86\u0aaa\u0acb", + "hi": "\u092b\u093c\u093e\u0907\u0932 URL \u0924\u0915 \u092a\u0939\u0941\u0902\u091a\u0928\u0947 \u0915\u0940 \u0905\u0928\u0941\u092e\u0924\u093f \u0926\u0947\u0902", + "hr": "Dozvoli pristup URL-ovima datoteke", + "hu": "F\u00e1jl URL-ekhez val\u00f3 hozz\u00e1f\u00e9r\u00e9s enged\u00e9lyez\u00e9se", + "id": "Izinkan akses ke URL file", + "it": "Consenti l'accesso agli URL dei file", + "iw": "\u05d0\u05e4\u05e9\u05e8 \u05d2\u05d9\u05e9\u05d4 \u05dc\u05db\u05ea\u05d5\u05d1\u05d5\u05ea \u05d0\u05ea\u05e8\u05d9\u05dd \u05e9\u05dc \u05e7\u05d1\u05e6\u05d9\u05dd", + "ja": "\u30d5\u30a1\u30a4\u30eb\u306e URL \u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u8a31\u53ef\u3059\u308b", + "kn": "URL \u0c97\u0cb3\u0ca8\u0ccd\u0ca8\u0cc1 \u0cab\u0cc8\u0cb2\u0ccd\u200c\u0c97\u0cb3\u0cbf\u0c97\u0cc6 \u0caa\u0ccd\u0cb0\u0cb5\u0cc7\u0cb6\u0cbf\u0cb8\u0cb2\u0cc1 \u0c85\u0ca8\u0cc1\u0cae\u0ca4\u0cbf\u0cb8\u0cbf", + "ko": "\ud30c\uc77c URL\uc5d0 \ub300\ud55c \uc561\uc138\uc2a4 \ud5c8\uc6a9", + "lt": "Leisti pasiekti failo URL", + "lv": "At\u013caut piek\u013cuvi faila vietr\u0101\u017eiem URL", + "ml": "URL \u0d15\u0d33\u0d4d\u200d\u200c \u0d2b\u0d2f\u0d32\u0d4d\u200d\u200c \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d28\u0d4d\u0d28\u0d24\u0d3f\u0d28\u0d4d \u0d06\u0d15\u0d4d\u200d\u0d38\u0d38\u0d4d\u0d38\u0d4d \u0d05\u0d28\u0d41\u0d35\u0d26\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "mr": "\u092b\u093e\u0907\u0932 URL \u092e\u0927\u094d\u092f\u0947 \u092a\u094d\u0930\u0935\u0947\u0936\u093e\u0938 \u0905\u0928\u0941\u092e\u0924\u0940 \u0926\u094d\u092f\u093e", + "ms": "Membenarkan akses ke URL fail", + "nl": "Toegang tot bestand-URL's toestaan", + "no": "Tillat tilgang til filnettadresser", + "pl": "Zezwalaj na dost\u0119p do adres\u00f3w URL plik\u00f3w", + "pt-BR": "Permitir acesso aos URLs do arquivo", + "pt-PT": "Permitir acesso a URLs de ficheiro", + "ro": "Permite accesul la adresele URL de fi\u0219iere", + "ru": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c", + "sk": "Povoli\u0165 pr\u00edstup k webov\u00fdm adres\u00e1m s\u00faboru", + "sl": "Dovoli dostop do URL-jev datoteke", + "sr": "\u0414\u043e\u0437\u0432\u043e\u043b\u0438 \u043f\u0440\u0438\u0441\u0442\u0443\u043f URL \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0430 \u0434\u0430\u0442\u043e\u0442\u0435\u043a\u0430", + "sv": "Till\u00e5t \u00e5tkomst till webbadresser i filen", + "sw": "Ruhusu kufikia URL za faili", + "ta": "\u0b95\u0bcb\u0baa\u0bcd\u0baa\u0bc1 URL\u0b95\u0bb3\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0b85\u0ba3\u0bc1\u0b95\u0bb2\u0bc8 \u0b85\u0ba9\u0bc1\u0bae\u0ba4\u0bbf", + "te": "\u0c2b\u0c48\u0c32\u0c4d URL\u0c32\u0c15\u0c41 \u0c2a\u0c4d\u0c30\u0c3e\u0c2a\u0c4d\u0c24\u0c3f\u0c28\u0c3f \u0c05\u0c28\u0c41\u0c2e\u0c24\u0c3f\u0c02\u0c1a\u0c41", + "th": "\u0e2d\u0e19\u0e38\u0e0d\u0e32\u0e15\u0e43\u0e2b\u0e49\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07\u0e44\u0e1f\u0e25\u0e4c URL", + "tr": "Dosya URL'lerine eri\u015fime izin ver", + "uk": "\u041d\u0430\u0434\u0430\u0432\u0430\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e URL-\u0430\u0434\u0440\u0435\u0441 \u0444\u0430\u0439\u043b\u0443", + "vi": "Cho ph\u00e9p truy c\u1eadp v\u00e0o c\u00e1c URL c\u1ee7a t\u1ec7p", + "zh-CN": "\u5141\u8bb8\u8bbf\u95ee\u6587\u4ef6\u7f51\u5740", + "zh-TW": "\u5141\u8a31\u5b58\u53d6\u6a94\u6848\u7db2\u5740" + }[chrome.i18n.getUILanguage && chrome.i18n.getUILanguage()]; + if (i18nFileAccessLabel) { + document.getElementById('chrome-file-access-label').textContent = i18nFileAccessLabel; + } + var link = document.getElementById('chrome-link-to-extensions-page'); + link.href = 'chrome://extensions/?id=' + chrome.runtime.id; + link.onclick = function (e) { + e.preventDefault(); + ChromeCom.request('openExtensionsPageForFileAccess', { newTab: e.ctrlKey || e.metaKey || e.button === 1 || window !== top }); + }; + document.getElementById('chrome-url-of-local-file').textContent = fileUrl; + _overlay_manager.OverlayManager.open('chromeFileAccessOverlay'); + }); +} +if (window === top) { + addEventListener('unload', function () { + if (!isRuntimeAvailable()) { + localStorage.setItem('unload-' + Date.now() + '-' + document.hidden + '-' + location.href, JSON.stringify(history.state)); + } + }); +} +var port; +function setReferer(url, callback) { + if (!port) { + port = chrome.runtime.connect({ name: 'chromecom-referrer' }); + } + port.onDisconnect.addListener(onDisconnect); + port.onMessage.addListener(onMessage); + port.postMessage({ + referer: window.history.state && window.history.state.chromecomState, + requestUrl: url + }); + function onMessage(referer) { + if (referer) { + var state = window.history.state || {}; + state.chromecomState = referer; + window.history.replaceState(state, ''); + } + onCompleted(); + } + function onDisconnect() { + port = null; + callback(); + } + function onCompleted() { + port.onDisconnect.removeListener(onDisconnect); + port.onMessage.removeListener(onMessage); + callback(); + } +} +var storageArea = chrome.storage.sync || chrome.storage.local; +_preferences.Preferences._writeToStorage = function (prefObj) { + return new Promise(function (resolve) { + if (prefObj === _preferences.Preferences.defaults) { + var keysToRemove = Object.keys(_preferences.Preferences.defaults); + storageArea.remove(keysToRemove, function () { + resolve(); + }); + } else { + storageArea.set(prefObj, function () { + resolve(); + }); + } + }); +}; +_preferences.Preferences._readFromStorage = function (prefObj) { + return new Promise(function (resolve) { + if (chrome.storage.managed) { + chrome.storage.managed.get(_preferences.Preferences.defaults, getPreferences); + } else { + getPreferences(_preferences.Preferences.defaults); + } + function getPreferences(defaultPrefs) { + if (chrome.runtime.lastError) { + defaultPrefs = _preferences.Preferences.defaults; + } + storageArea.get(defaultPrefs, function (readPrefs) { + resolve(readPrefs); + }); + } + }); +}; +var ChromeExternalServices = Object.create(_app.DefaultExternalServices); +ChromeExternalServices.initPassiveLoading = function (callbacks) { + var appConfig = _app.PDFViewerApplication.appConfig; + ChromeCom.resolvePDFFile(appConfig.defaultUrl, function (url, length, originalURL) { + callbacks.onOpenWithURL(url, length, originalURL); + }); +}; +_app.PDFViewerApplication.externalServices = ChromeExternalServices; +exports.ChromeCom = ChromeCom; \ No newline at end of file diff --git a/lib/web/dom_events.js b/lib/web/dom_events.js index 09ca656ce..c1b4be88f 100644 --- a/lib/web/dom_events.js +++ b/lib/web/dom_events.js @@ -14,8 +14,13 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var EventBus = uiUtils.EventBus; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getGlobalEventBus = exports.attachDOMEventsToEventBus = undefined; + +var _ui_utils = require('pdfjs-web/ui_utils'); + function attachDOMEventsToEventBus(eventBus) { eventBus.on('documentload', function () { var event = document.createEvent('CustomEvent'); @@ -117,7 +122,7 @@ function getGlobalEventBus() { if (globalEventBus) { return globalEventBus; } - globalEventBus = new EventBus(); + globalEventBus = new _ui_utils.EventBus(); attachDOMEventsToEventBus(globalEventBus); return globalEventBus; } diff --git a/lib/web/download_manager.js b/lib/web/download_manager.js index 1c56d4062..a8f1ff310 100644 --- a/lib/web/download_manager.js +++ b/lib/web/download_manager.js @@ -14,7 +14,16 @@ */ 'use strict'; -var pdfjsLib = require('./pdfjs.js'); +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.DownloadManager = undefined; + +var _pdfjs = require('pdfjs-web/pdfjs'); + +var _app = require('pdfjs-web/app'); + +; function download(blobUrl, filename) { var a = document.createElement('a'); if (a.click) { @@ -37,7 +46,7 @@ function download(blobUrl, filename) { function DownloadManager() {} DownloadManager.prototype = { downloadUrl: function DownloadManager_downloadUrl(url, filename) { - if (!pdfjsLib.createValidAbsoluteUrl(url, 'http://example.com')) { + if (!(0, _pdfjs.createValidAbsoluteUrl)(url, 'http://example.com')) { return; } download(url + '#pdfjs.action=download', filename); @@ -46,7 +55,7 @@ DownloadManager.prototype = { if (navigator.msSaveBlob) { return navigator.msSaveBlob(new Blob([data], { type: contentType }), filename); } - var blobUrl = pdfjsLib.createObjectURL(data, contentType, pdfjsLib.PDFJS.disableCreateObjectURL); + var blobUrl = (0, _pdfjs.createObjectURL)(data, contentType, _pdfjs.PDFJS.disableCreateObjectURL); download(blobUrl, filename); }, download: function DownloadManager_download(blob, url, filename) { @@ -56,7 +65,7 @@ DownloadManager.prototype = { } return; } - if (pdfjsLib.PDFJS.disableCreateObjectURL) { + if (_pdfjs.PDFJS.disableCreateObjectURL) { this.downloadUrl(url, filename); return; } @@ -64,4 +73,9 @@ DownloadManager.prototype = { download(blobUrl, filename); } }; +var GenericExternalServices = Object.create(_app.DefaultExternalServices); +GenericExternalServices.createDownloadManager = function () { + return new DownloadManager(); +}; +_app.PDFViewerApplication.externalServices = GenericExternalServices; exports.DownloadManager = DownloadManager; \ No newline at end of file diff --git a/lib/web/firefox_print_service.js b/lib/web/firefox_print_service.js index ca9da74a5..f196d4119 100644 --- a/lib/web/firefox_print_service.js +++ b/lib/web/firefox_print_service.js @@ -14,19 +14,25 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var app = require('./app.js'); -var pdfjsLib = require('./pdfjs.js'); -var CSS_UNITS = uiUtils.CSS_UNITS; -var PDFPrintServiceFactory = app.PDFPrintServiceFactory; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.FirefoxPrintService = undefined; + +var _ui_utils = require('pdfjs-web/ui_utils'); + +var _app = require('pdfjs-web/app'); + +var _pdfjs = require('pdfjs-web/pdfjs'); + function composePage(pdfDocument, pageNumber, size, printContainer) { var canvas = document.createElement('canvas'); var PRINT_RESOLUTION = 150; var PRINT_UNITS = PRINT_RESOLUTION / 72.0; canvas.width = Math.floor(size.width * PRINT_UNITS); canvas.height = Math.floor(size.height * PRINT_UNITS); - canvas.style.width = Math.floor(size.width * CSS_UNITS) + 'px'; - canvas.style.height = Math.floor(size.height * CSS_UNITS) + 'px'; + canvas.style.width = Math.floor(size.width * _ui_utils.CSS_UNITS) + 'px'; + canvas.style.height = Math.floor(size.height * _ui_utils.CSS_UNITS) + 'px'; var canvasWrapper = document.createElement('div'); canvasWrapper.appendChild(canvas); printContainer.appendChild(canvasWrapper); @@ -75,11 +81,11 @@ FirefoxPrintService.prototype = { this.printContainer.textContent = ''; } }; -PDFPrintServiceFactory.instance = { +_app.PDFPrintServiceFactory.instance = { get supportsPrinting() { var canvas = document.createElement('canvas'); var value = 'mozPrintCallback' in canvas; - return pdfjsLib.shadow(this, 'supportsPrinting', value); + return (0, _pdfjs.shadow)(this, 'supportsPrinting', value); }, createPrintService: function (pdfDocument, pagesOverview, printContainer) { return new FirefoxPrintService(pdfDocument, pagesOverview, printContainer); diff --git a/lib/web/firefoxcom.js b/lib/web/firefoxcom.js index aab17c773..7db4d3e79 100644 --- a/lib/web/firefoxcom.js +++ b/lib/web/firefoxcom.js @@ -14,7 +14,215 @@ */ 'use strict'; -var preferences = require('./preferences.js'); -var app = require('./app.js'); -var pdfjsLib = require('./pdfjs.js'); -throw new Error('Module "pdfjs-web/firefoxcom" shall not be used outside ' + 'FIREFOX and MOZCENTRAL builds.'); \ No newline at end of file +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.FirefoxCom = exports.DownloadManager = undefined; + +var _pdfjs = require('pdfjs-web/pdfjs'); + +var _app = require('pdfjs-web/app'); + +var _preferences = require('pdfjs-web/preferences'); + +{ + throw new Error('Module "pdfjs-web/firefoxcom" shall not be used outside ' + 'FIREFOX and MOZCENTRAL builds.'); +} +var FirefoxCom = function FirefoxComClosure() { + return { + requestSync: function (action, data) { + var request = document.createTextNode(''); + document.documentElement.appendChild(request); + var sender = document.createEvent('CustomEvent'); + sender.initCustomEvent('pdf.js.message', true, false, { + action: action, + data: data, + sync: true + }); + request.dispatchEvent(sender); + var response = sender.detail.response; + document.documentElement.removeChild(request); + return response; + }, + request: function (action, data, callback) { + var request = document.createTextNode(''); + if (callback) { + document.addEventListener('pdf.js.response', function listener(event) { + var node = event.target; + var 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'); + sender.initCustomEvent('pdf.js.message', true, false, { + action: action, + data: data, + sync: false, + responseExpected: !!callback + }); + return request.dispatchEvent(sender); + } + }; +}(); +var DownloadManager = function DownloadManagerClosure() { + function DownloadManager() {} + DownloadManager.prototype = { + downloadUrl: function DownloadManager_downloadUrl(url, filename) { + FirefoxCom.request('download', { + originalUrl: url, + filename: filename + }); + }, + downloadData: function DownloadManager_downloadData(data, filename, contentType) { + var blobUrl = (0, _pdfjs.createObjectURL)(data, contentType, false); + FirefoxCom.request('download', { + blobUrl: blobUrl, + originalUrl: blobUrl, + filename: filename, + isAttachment: true + }); + }, + download: function DownloadManager_download(blob, url, filename) { + var blobUrl = window.URL.createObjectURL(blob); + FirefoxCom.request('download', { + blobUrl: blobUrl, + originalUrl: url, + filename: filename + }, function response(err) { + if (err && this.onerror) { + this.onerror(err); + } + window.URL.revokeObjectURL(blobUrl); + }.bind(this)); + } + }; + return DownloadManager; +}(); +_preferences.Preferences._writeToStorage = function (prefObj) { + return new Promise(function (resolve) { + FirefoxCom.request('setPreferences', prefObj, resolve); + }); +}; +_preferences.Preferences._readFromStorage = function (prefObj) { + return new Promise(function (resolve) { + FirefoxCom.request('getPreferences', prefObj, function (prefStr) { + var readPrefs = JSON.parse(prefStr); + resolve(readPrefs); + }); + }); +}; +(function listenFindEvents() { + var events = ['find', 'findagain', 'findhighlightallchange', 'findcasesensitivitychange']; + var handleEvent = function (evt) { + if (!_app.PDFViewerApplication.initialized) { + return; + } + _app.PDFViewerApplication.eventBus.dispatch('find', { + source: window, + type: evt.type.substring('find'.length), + query: evt.detail.query, + phraseSearch: true, + caseSensitive: !!evt.detail.caseSensitive, + highlightAll: !!evt.detail.highlightAll, + findPrevious: !!evt.detail.findPrevious + }); + }; + for (var i = 0, len = events.length; i < len; i++) { + window.addEventListener(events[i], handleEvent); + } +})(); +function FirefoxComDataRangeTransport(length, initialData) { + _pdfjs.PDFDataRangeTransport.call(this, length, initialData); +} +FirefoxComDataRangeTransport.prototype = Object.create(_pdfjs.PDFDataRangeTransport.prototype); +FirefoxComDataRangeTransport.prototype.requestDataRange = function FirefoxComDataRangeTransport_requestDataRange(begin, end) { + FirefoxCom.request('requestDataRange', { + begin: begin, + end: end + }); +}; +FirefoxComDataRangeTransport.prototype.abort = function FirefoxComDataRangeTransport_abort() { + FirefoxCom.requestSync('abortLoading', null); +}; +_app.PDFViewerApplication.externalServices = { + updateFindControlState: function (data) { + FirefoxCom.request('updateFindControlState', data); + }, + initPassiveLoading: function (callbacks) { + var pdfDataRangeTransport; + window.addEventListener('message', function windowMessage(e) { + if (e.source !== null) { + console.warn('Rejected untrusted message from ' + e.origin); + return; + } + var args = e.data; + if (typeof args !== 'object' || !('pdfjsLoadAction' in args)) { + return; + } + switch (args.pdfjsLoadAction) { + case 'supportsRangedLoading': + pdfDataRangeTransport = new FirefoxComDataRangeTransport(args.length, args.data); + callbacks.onOpenWithTransport(args.pdfUrl, args.length, pdfDataRangeTransport); + break; + case 'range': + pdfDataRangeTransport.onDataRange(args.begin, args.chunk); + break; + case 'rangeProgress': + pdfDataRangeTransport.onDataProgress(args.loaded); + break; + case 'progressiveRead': + pdfDataRangeTransport.onDataProgressiveRead(args.chunk); + break; + case 'progress': + callbacks.onProgress(args.loaded, args.total); + break; + case 'complete': + if (!args.data) { + callbacks.onError(args.errorCode); + break; + } + callbacks.onOpenWithData(args.data); + break; + } + }); + FirefoxCom.requestSync('initPassiveLoading', null); + }, + fallback: function (data, callback) { + FirefoxCom.request('fallback', data, callback); + }, + reportTelemetry: function (data) { + FirefoxCom.request('reportTelemetry', JSON.stringify(data)); + }, + createDownloadManager: function () { + return new DownloadManager(); + }, + get supportsIntegratedFind() { + var support = FirefoxCom.requestSync('supportsIntegratedFind'); + return (0, _pdfjs.shadow)(this, 'supportsIntegratedFind', support); + }, + get supportsDocumentFonts() { + var support = FirefoxCom.requestSync('supportsDocumentFonts'); + return (0, _pdfjs.shadow)(this, 'supportsDocumentFonts', support); + }, + get supportsDocumentColors() { + var support = FirefoxCom.requestSync('supportsDocumentColors'); + return (0, _pdfjs.shadow)(this, 'supportsDocumentColors', support); + }, + get supportedMouseWheelZoomModifierKeys() { + var support = FirefoxCom.requestSync('supportedMouseWheelZoomModifierKeys'); + return (0, _pdfjs.shadow)(this, 'supportedMouseWheelZoomModifierKeys', support); + } +}; +document.mozL10n.setExternalLocalizerServices({ + getLocale: function () { + return FirefoxCom.requestSync('getLocale', null); + }, + getStrings: function (key) { + return FirefoxCom.requestSync('getStrings', key); + } +}); +exports.DownloadManager = DownloadManager; +exports.FirefoxCom = FirefoxCom; \ No newline at end of file diff --git a/lib/web/grab_to_pan.js b/lib/web/grab_to_pan.js index 641beefb8..c3411527a 100644 --- a/lib/web/grab_to_pan.js +++ b/lib/web/grab_to_pan.js @@ -14,6 +14,9 @@ */ 'use strict'; +Object.defineProperty(exports, "__esModule", { + value: true +}); function GrabToPan(options) { this.element = options.element; this.document = options.element.ownerDocument; diff --git a/lib/web/hand_tool.js b/lib/web/hand_tool.js index e4559ff7e..c3f8cf732 100644 --- a/lib/web/hand_tool.js +++ b/lib/web/hand_tool.js @@ -14,25 +14,30 @@ */ 'use strict'; -var grabToPan = require('./grab_to_pan.js'); -var preferences = require('./preferences.js'); -var uiUtils = require('./ui_utils.js'); -var GrabToPan = grabToPan.GrabToPan; -var Preferences = preferences.Preferences; -var localized = uiUtils.localized; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.HandTool = undefined; + +var _grab_to_pan = require('pdfjs-web/grab_to_pan'); + +var _ui_utils = require('pdfjs-web/ui_utils'); + +var _preferences = require('pdfjs-web/preferences'); + var HandTool = function HandToolClosure() { function HandTool(options) { this.container = options.container; this.eventBus = options.eventBus; this.wasActive = false; - this.handTool = new GrabToPan({ + this.handTool = new _grab_to_pan.GrabToPan({ element: this.container, onActiveChanged: function (isActive) { this.eventBus.dispatch('handtoolchanged', { isActive: isActive }); }.bind(this) }); this.eventBus.on('togglehandtool', this.toggle.bind(this)); - Promise.all([localized, Preferences.get('enableHandToolOnLoad')]).then(function resolved(values) { + Promise.all([_ui_utils.localized, _preferences.Preferences.get('enableHandToolOnLoad')]).then(function resolved(values) { if (values[1] === true) { this.handTool.activate(); } diff --git a/lib/web/overlay_manager.js b/lib/web/overlay_manager.js index 855dbce94..09d2909b7 100644 --- a/lib/web/overlay_manager.js +++ b/lib/web/overlay_manager.js @@ -14,6 +14,9 @@ */ 'use strict'; +Object.defineProperty(exports, "__esModule", { + value: true +}); var OverlayManager = { overlays: {}, active: null, diff --git a/lib/web/password_prompt.js b/lib/web/password_prompt.js index 01be9372c..944f0fb0e 100644 --- a/lib/web/password_prompt.js +++ b/lib/web/password_prompt.js @@ -14,11 +14,17 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var overlayManager = require('./overlay_manager.js'); -var pdfjsLib = require('./pdfjs.js'); -var mozL10n = uiUtils.mozL10n; -var OverlayManager = overlayManager.OverlayManager; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PasswordPrompt = undefined; + +var _ui_utils = require('pdfjs-web/ui_utils'); + +var _overlay_manager = require('pdfjs-web/overlay_manager'); + +var _pdfjs = require('pdfjs-web/pdfjs'); + var PasswordPrompt = function PasswordPromptClosure() { function PasswordPrompt(options) { this.overlayName = options.overlayName; @@ -36,22 +42,22 @@ var PasswordPrompt = function PasswordPromptClosure() { this.verify(); } }.bind(this)); - OverlayManager.register(this.overlayName, this.container, this.close.bind(this), true); + _overlay_manager.OverlayManager.register(this.overlayName, this.container, this.close.bind(this), true); } PasswordPrompt.prototype = { open: function PasswordPrompt_open() { - OverlayManager.open(this.overlayName).then(function () { + _overlay_manager.OverlayManager.open(this.overlayName).then(function () { this.input.type = 'password'; this.input.focus(); - var promptString = mozL10n.get('password_label', null, 'Enter the password to open this PDF file.'); - if (this.reason === pdfjsLib.PasswordResponses.INCORRECT_PASSWORD) { - promptString = mozL10n.get('password_invalid', null, 'Invalid password. Please try again.'); + var promptString = _ui_utils.mozL10n.get('password_label', null, 'Enter the password to open this PDF file.'); + if (this.reason === _pdfjs.PasswordResponses.INCORRECT_PASSWORD) { + promptString = _ui_utils.mozL10n.get('password_invalid', null, 'Invalid password. Please try again.'); } this.label.textContent = promptString; }.bind(this)); }, close: function PasswordPrompt_close() { - OverlayManager.close(this.overlayName).then(function () { + _overlay_manager.OverlayManager.close(this.overlayName).then(function () { this.input.value = ''; this.input.type = ''; }.bind(this)); diff --git a/lib/web/pdf_attachment_viewer.js b/lib/web/pdf_attachment_viewer.js index 6dc0d5063..529498636 100644 --- a/lib/web/pdf_attachment_viewer.js +++ b/lib/web/pdf_attachment_viewer.js @@ -14,14 +14,20 @@ */ 'use strict'; -var pdfjsLib = require('./pdfjs.js'); +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFAttachmentViewer = undefined; + +var _pdfjs = require('pdfjs-web/pdfjs'); + var PDFAttachmentViewer = function PDFAttachmentViewerClosure() { function PDFAttachmentViewer(options) { this.attachments = null; this.container = options.container; this.eventBus = options.eventBus; this.downloadManager = options.downloadManager; - this._renderedCapability = pdfjsLib.createPromiseCapability(); + this._renderedCapability = (0, _pdfjs.createPromiseCapability)(); this.eventBus.on('fileattachmentannotation', this._appendAttachment.bind(this)); } PDFAttachmentViewer.prototype = { @@ -29,7 +35,7 @@ var PDFAttachmentViewer = function PDFAttachmentViewerClosure() { this.attachments = null; this.container.textContent = ''; if (!keepRenderedCapability) { - this._renderedCapability = pdfjsLib.createPromiseCapability(); + this._renderedCapability = (0, _pdfjs.createPromiseCapability)(); } }, _dispatchEvent: function PDFAttachmentViewer_dispatchEvent(attachmentsCount) { @@ -43,7 +49,7 @@ var PDFAttachmentViewer = function PDFAttachmentViewerClosure() { var blobUrl; button.onclick = function () { if (!blobUrl) { - blobUrl = pdfjsLib.createObjectURL(content, 'application/pdf', pdfjsLib.PDFJS.disableCreateObjectURL); + blobUrl = (0, _pdfjs.createObjectURL)(content, 'application/pdf', _pdfjs.PDFJS.disableCreateObjectURL); } var viewerUrl; viewerUrl = '?file=' + encodeURIComponent(blobUrl + '#' + filename); @@ -76,8 +82,7 @@ var PDFAttachmentViewer = function PDFAttachmentViewerClosure() { attachmentsCount = names.length; for (var i = 0; i < attachmentsCount; i++) { var item = attachments[names[i]]; - var filename = pdfjsLib.getFilenameFromUrl(item.filename); - filename = pdfjsLib.removeNullCharacters(filename); + var filename = (0, _pdfjs.removeNullCharacters)((0, _pdfjs.getFilenameFromUrl)(item.filename)); var div = document.createElement('div'); div.className = 'attachmentsItem'; var button = document.createElement('button'); diff --git a/lib/web/pdf_document_properties.js b/lib/web/pdf_document_properties.js index 8e17573e9..113e6febf 100644 --- a/lib/web/pdf_document_properties.js +++ b/lib/web/pdf_document_properties.js @@ -14,11 +14,15 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var overlayManager = require('./overlay_manager.js'); -var getPDFFileNameFromURL = uiUtils.getPDFFileNameFromURL; -var mozL10n = uiUtils.mozL10n; -var OverlayManager = overlayManager.OverlayManager; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFDocumentProperties = undefined; + +var _ui_utils = require('pdfjs-web/ui_utils'); + +var _overlay_manager = require('pdfjs-web/overlay_manager'); + var PDFDocumentProperties = function PDFDocumentPropertiesClosure() { function PDFDocumentProperties(options) { this.fields = options.fields; @@ -33,16 +37,16 @@ var PDFDocumentProperties = function PDFDocumentPropertiesClosure() { this.dataAvailablePromise = new Promise(function (resolve) { this.resolveDataAvailable = resolve; }.bind(this)); - OverlayManager.register(this.overlayName, this.container, this.close.bind(this)); + _overlay_manager.OverlayManager.register(this.overlayName, this.container, this.close.bind(this)); } PDFDocumentProperties.prototype = { open: function PDFDocumentProperties_open() { - Promise.all([OverlayManager.open(this.overlayName), this.dataAvailablePromise]).then(function () { + Promise.all([_overlay_manager.OverlayManager.open(this.overlayName), this.dataAvailablePromise]).then(function () { this._getProperties(); }.bind(this)); }, close: function PDFDocumentProperties_close() { - OverlayManager.close(this.overlayName); + _overlay_manager.OverlayManager.close(this.overlayName); }, setFileSize: function PDFDocumentProperties_setFileSize(fileSize) { if (fileSize > 0) { @@ -55,7 +59,7 @@ var PDFDocumentProperties = function PDFDocumentPropertiesClosure() { this.resolveDataAvailable(); }, _getProperties: function PDFDocumentProperties_getProperties() { - if (!OverlayManager.active) { + if (!_overlay_manager.OverlayManager.active) { return; } this.pdfDocument.getDownloadInfo().then(function (data) { @@ -67,7 +71,7 @@ var PDFDocumentProperties = function PDFDocumentPropertiesClosure() { }.bind(this)); this.pdfDocument.getMetadata().then(function (data) { var content = { - 'fileName': getPDFFileNameFromURL(this.url), + 'fileName': (0, _ui_utils.getPDFFileNameFromURL)(this.url), 'fileSize': this._parseFileSize(), 'title': data.info.Title, 'author': data.info.Author, @@ -96,12 +100,12 @@ var PDFDocumentProperties = function PDFDocumentPropertiesClosure() { if (!kb) { return; } else if (kb < 1024) { - return mozL10n.get('document_properties_kb', { + return _ui_utils.mozL10n.get('document_properties_kb', { size_kb: (+kb.toPrecision(3)).toLocaleString(), size_b: fileSize.toLocaleString() }, '{{size_kb}} KB ({{size_b}} bytes)'); } - return mozL10n.get('document_properties_mb', { + return _ui_utils.mozL10n.get('document_properties_mb', { size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(), size_b: fileSize.toLocaleString() }, '{{size_mb}} MB ({{size_b}} bytes)'); @@ -133,7 +137,7 @@ var PDFDocumentProperties = function PDFDocumentPropertiesClosure() { var date = new Date(Date.UTC(year, month, day, hours, minutes, seconds)); var dateString = date.toLocaleDateString(); var timeString = date.toLocaleTimeString(); - return mozL10n.get('document_properties_date_string', { + return _ui_utils.mozL10n.get('document_properties_date_string', { date: dateString, time: timeString }, '{{date}}, {{time}}'); diff --git a/lib/web/pdf_find_bar.js b/lib/web/pdf_find_bar.js index 813ea207f..0c279240e 100644 --- a/lib/web/pdf_find_bar.js +++ b/lib/web/pdf_find_bar.js @@ -14,10 +14,15 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var pdfFindController = require('./pdf_find_controller.js'); -var mozL10n = uiUtils.mozL10n; -var FindStates = pdfFindController.FindStates; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFFindBar = undefined; + +var _pdf_find_controller = require('pdfjs-web/pdf_find_controller'); + +var _ui_utils = require('pdfjs-web/ui_utils'); + var PDFFindBar = function PDFFindBarClosure() { function PDFFindBar(options) { this.opened = false; @@ -89,20 +94,20 @@ var PDFFindBar = function PDFFindBarClosure() { var findMsg = ''; var status = ''; switch (state) { - case FindStates.FIND_FOUND: + case _pdf_find_controller.FindStates.FIND_FOUND: break; - case FindStates.FIND_PENDING: + case _pdf_find_controller.FindStates.FIND_PENDING: status = 'pending'; break; - case FindStates.FIND_NOTFOUND: - findMsg = mozL10n.get('find_not_found', null, 'Phrase not found'); + case _pdf_find_controller.FindStates.FIND_NOTFOUND: + findMsg = _ui_utils.mozL10n.get('find_not_found', null, 'Phrase not found'); notFound = true; break; - case FindStates.FIND_WRAPPED: + case _pdf_find_controller.FindStates.FIND_WRAPPED: if (previous) { - findMsg = mozL10n.get('find_reached_top', null, 'Reached top of document, continued from bottom'); + findMsg = _ui_utils.mozL10n.get('find_reached_top', null, 'Reached top of document, continued from bottom'); } else { - findMsg = mozL10n.get('find_reached_bottom', null, 'Reached end of document, continued from top'); + findMsg = _ui_utils.mozL10n.get('find_reached_bottom', null, 'Reached end of document, continued from top'); } break; } diff --git a/lib/web/pdf_find_controller.js b/lib/web/pdf_find_controller.js index 3de850ba5..75c15ba46 100644 --- a/lib/web/pdf_find_controller.js +++ b/lib/web/pdf_find_controller.js @@ -14,8 +14,13 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var scrollIntoView = uiUtils.scrollIntoView; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFFindController = exports.FindStates = undefined; + +var _ui_utils = require('pdfjs-web/ui_utils'); + var FindStates = { FIND_FOUND: 0, FIND_NOTFOUND: 1, @@ -311,7 +316,7 @@ var PDFFindController = function PDFFindControllerClosure() { top: FIND_SCROLL_OFFSET_TOP, left: FIND_SCROLL_OFFSET_LEFT }; - scrollIntoView(elements[beginIdx], spot, true); + (0, _ui_utils.scrollIntoView)(elements[beginIdx], spot, true); } }, nextPageMatch: function PDFFindController_nextPageMatch() { diff --git a/lib/web/pdf_history.js b/lib/web/pdf_history.js index c980127ed..dbab59ae4 100644 --- a/lib/web/pdf_history.js +++ b/lib/web/pdf_history.js @@ -14,10 +14,16 @@ */ 'use strict'; -var domEvents = require('./dom_events.js'); +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFHistory = undefined; + +var _dom_events = require('pdfjs-web/dom_events'); + function PDFHistory(options) { this.linkService = options.linkService; - this.eventBus = options.eventBus || domEvents.getGlobalEventBus(); + this.eventBus = options.eventBus || _dom_events.domEvents.getGlobalEventBus(); this.initialized = false; this.initialDestination = null; this.initialBookmark = null; diff --git a/lib/web/pdf_link_service.js b/lib/web/pdf_link_service.js index 44c59f9d6..6f30f8346 100644 --- a/lib/web/pdf_link_service.js +++ b/lib/web/pdf_link_service.js @@ -14,9 +14,15 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var domEvents = require('./dom_events.js'); -var parseQueryString = uiUtils.parseQueryString; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.SimpleLinkService = exports.PDFLinkService = undefined; + +var _dom_events = require('pdfjs-web/dom_events'); + +var _ui_utils = require('pdfjs-web/ui_utils'); + var PageNumberRegExp = /^\d+$/; function isPageNumber(str) { return PageNumberRegExp.test(str); @@ -24,7 +30,7 @@ function isPageNumber(str) { var PDFLinkService = function PDFLinkServiceClosure() { function PDFLinkService(options) { options = options || {}; - this.eventBus = options.eventBus || domEvents.getGlobalEventBus(); + this.eventBus = options.eventBus || _dom_events.domEvents.getGlobalEventBus(); this.baseUrl = null; this.pdfDocument = null; this.pdfViewer = null; @@ -122,7 +128,7 @@ var PDFLinkService = function PDFLinkServiceClosure() { setHash: function PDFLinkService_setHash(hash) { var pageNumber, dest; if (hash.indexOf('=') >= 0) { - var params = parseQueryString(hash); + var params = (0, _ui_utils.parseQueryString)(hash); if ('search' in params) { this.eventBus.dispatch('findfromurlhash', { source: this, diff --git a/lib/web/pdf_outline_viewer.js b/lib/web/pdf_outline_viewer.js index 7a60ef9ff..103d5ac1a 100644 --- a/lib/web/pdf_outline_viewer.js +++ b/lib/web/pdf_outline_viewer.js @@ -14,8 +14,13 @@ */ 'use strict'; -var pdfjsLib = require('./pdfjs.js'); -var PDFJS = pdfjsLib.PDFJS; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFOutlineViewer = undefined; + +var _pdfjs = require('pdfjs-web/pdfjs'); + var DEFAULT_TITLE = '\u2013'; var PDFOutlineViewer = function PDFOutlineViewerClosure() { function PDFOutlineViewer(options) { @@ -40,9 +45,9 @@ var PDFOutlineViewer = function PDFOutlineViewerClosure() { }, _bindLink: function PDFOutlineViewer_bindLink(element, item) { if (item.url) { - pdfjsLib.addLinkAttributes(element, { + (0, _pdfjs.addLinkAttributes)(element, { url: item.url, - target: item.newWindow ? PDFJS.LinkTarget.BLANK : undefined + target: item.newWindow ? _pdfjs.PDFJS.LinkTarget.BLANK : undefined }); return; } @@ -120,7 +125,7 @@ var PDFOutlineViewer = function PDFOutlineViewerClosure() { var element = document.createElement('a'); this._bindLink(element, item); this._setStyles(element, item); - element.textContent = pdfjsLib.removeNullCharacters(item.title) || DEFAULT_TITLE; + element.textContent = (0, _pdfjs.removeNullCharacters)(item.title) || DEFAULT_TITLE; div.appendChild(element); if (item.items.length > 0) { hasAnyNesting = true; diff --git a/lib/web/pdf_page_view.js b/lib/web/pdf_page_view.js index 303c0ff6c..5c23b5812 100644 --- a/lib/web/pdf_page_view.js +++ b/lib/web/pdf_page_view.js @@ -14,17 +14,19 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var pdfRenderingQueue = require('./pdf_rendering_queue.js'); -var domEvents = require('./dom_events.js'); -var pdfjsLib = require('./pdfjs.js'); -var CSS_UNITS = uiUtils.CSS_UNITS; -var DEFAULT_SCALE = uiUtils.DEFAULT_SCALE; -var getOutputScale = uiUtils.getOutputScale; -var approximateFraction = uiUtils.approximateFraction; -var roundToDivide = uiUtils.roundToDivide; -var RendererType = uiUtils.RendererType; -var RenderingStates = pdfRenderingQueue.RenderingStates; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFPageView = undefined; + +var _ui_utils = require('pdfjs-web/ui_utils'); + +var _pdfjs = require('pdfjs-web/pdfjs'); + +var _dom_events = require('pdfjs-web/dom_events'); + +var _pdf_rendering_queue = require('pdfjs-web/pdf_rendering_queue'); + var TEXT_LAYER_RENDER_DELAY = 200; var PDFPageView = function PDFPageViewClosure() { function PDFPageView(options) { @@ -41,20 +43,20 @@ var PDFPageView = function PDFPageViewClosure() { this.renderingId = 'page' + id; this.pageLabel = null; this.rotation = 0; - this.scale = scale || DEFAULT_SCALE; + this.scale = scale || _ui_utils.DEFAULT_SCALE; this.viewport = defaultViewport; this.pdfPageRotate = defaultViewport.rotation; this.hasRestrictedScaling = false; this.enhanceTextSelection = enhanceTextSelection; this.renderInteractiveForms = renderInteractiveForms; - this.eventBus = options.eventBus || domEvents.getGlobalEventBus(); + this.eventBus = options.eventBus || _dom_events.domEvents.getGlobalEventBus(); this.renderingQueue = renderingQueue; this.textLayerFactory = textLayerFactory; this.annotationLayerFactory = annotationLayerFactory; - this.renderer = options.renderer || RendererType.CANVAS; + this.renderer = options.renderer || _ui_utils.RendererType.CANVAS; this.paintTask = null; this.paintedViewportMap = new WeakMap(); - this.renderingState = RenderingStates.INITIAL; + this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; this.resume = null; this.error = null; this.onBeforeDraw = null; @@ -75,7 +77,7 @@ var PDFPageView = function PDFPageViewClosure() { this.pdfPage = pdfPage; this.pdfPageRotate = pdfPage.rotate; var totalRotation = (this.rotation + this.pdfPageRotate) % 360; - this.viewport = pdfPage.getViewport(this.scale * CSS_UNITS, totalRotation); + this.viewport = pdfPage.getViewport(this.scale * _ui_utils.CSS_UNITS, totalRotation); this.stats = pdfPage.stats; this.reset(); }, @@ -143,7 +145,7 @@ var PDFPageView = function PDFPageViewClosure() { } var totalRotation = (this.rotation + this.pdfPageRotate) % 360; this.viewport = this.viewport.clone({ - scale: this.scale * CSS_UNITS, + scale: this.scale * _ui_utils.CSS_UNITS, rotation: totalRotation }); if (this.svg) { @@ -156,14 +158,14 @@ var PDFPageView = function PDFPageViewClosure() { return; } var isScalingRestricted = false; - if (this.canvas && pdfjsLib.PDFJS.maxCanvasPixels > 0) { + if (this.canvas && _pdfjs.PDFJS.maxCanvasPixels > 0) { var outputScale = this.outputScale; - if ((Math.floor(this.viewport.width) * outputScale.sx | 0) * (Math.floor(this.viewport.height) * outputScale.sy | 0) > pdfjsLib.PDFJS.maxCanvasPixels) { + if ((Math.floor(this.viewport.width) * outputScale.sx | 0) * (Math.floor(this.viewport.height) * outputScale.sy | 0) > _pdfjs.PDFJS.maxCanvasPixels) { isScalingRestricted = true; } } if (this.canvas) { - if (pdfjsLib.PDFJS.useOnlyCssZoom || this.hasRestrictedScaling && isScalingRestricted) { + if (_pdfjs.PDFJS.useOnlyCssZoom || this.hasRestrictedScaling && isScalingRestricted) { this.cssTransform(this.canvas, true); this.eventBus.dispatch('pagerendered', { source: this, @@ -187,7 +189,7 @@ var PDFPageView = function PDFPageViewClosure() { this.paintTask.cancel(); this.paintTask = null; } - this.renderingState = RenderingStates.INITIAL; + this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; this.resume = null; if (this.textLayer) { this.textLayer.cancel(); @@ -200,7 +202,6 @@ var PDFPageView = function PDFPageViewClosure() { } }, cssTransform: function PDFPageView_transform(target, redrawAnnotations) { - var CustomStyle = pdfjsLib.CustomStyle; var width = this.viewport.width; var height = this.viewport.height; var div = this.div; @@ -215,7 +216,7 @@ var PDFPageView = function PDFPageViewClosure() { scaleY = width / height; } var cssTransform = 'rotate(' + relativeRotation + 'deg) ' + 'scale(' + scaleX + ',' + scaleY + ')'; - CustomStyle.setProp('transform', target, cssTransform); + _pdfjs.CustomStyle.setProp('transform', target, cssTransform); if (this.textLayer) { var textLayerViewport = this.textLayer.viewport; var textRelativeRotation = this.viewport.rotation - textLayerViewport.rotation; @@ -246,8 +247,8 @@ var PDFPageView = function PDFPageViewClosure() { console.error('Bad rotation value.'); break; } - CustomStyle.setProp('transform', textLayerDiv, 'rotate(' + textAbsRotation + 'deg) ' + 'scale(' + scale + ', ' + scale + ') ' + 'translate(' + transX + ', ' + transY + ')'); - CustomStyle.setProp('transformOrigin', textLayerDiv, '0% 0%'); + _pdfjs.CustomStyle.setProp('transform', textLayerDiv, 'rotate(' + textAbsRotation + 'deg) ' + 'scale(' + scale + ', ' + scale + ') ' + 'translate(' + transX + ', ' + transY + ')'); + _pdfjs.CustomStyle.setProp('transformOrigin', textLayerDiv, '0% 0%'); } if (redrawAnnotations && this.annotationLayer) { this.annotationLayer.render(this.viewport, 'display'); @@ -263,11 +264,11 @@ var PDFPageView = function PDFPageViewClosure() { return this.viewport.convertToPdfPoint(x, y); }, draw: function PDFPageView_draw() { - if (this.renderingState !== RenderingStates.INITIAL) { + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { console.error('Must be in new state before drawing'); this.reset(); } - this.renderingState = RenderingStates.RUNNING; + this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; var self = this; var pdfPage = this.pdfPage; var div = this.div; @@ -299,9 +300,9 @@ var PDFPageView = function PDFPageViewClosure() { if (this.renderingQueue) { renderContinueCallback = function renderContinueCallback(cont) { if (!self.renderingQueue.isHighestPriority(self)) { - self.renderingState = RenderingStates.PAUSED; + self.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED; self.resume = function resumeCallback() { - self.renderingState = RenderingStates.RUNNING; + self.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; cont(); }; return; @@ -313,11 +314,11 @@ var PDFPageView = function PDFPageViewClosure() { if (paintTask === self.paintTask) { self.paintTask = null; } - if (error === 'cancelled' || error instanceof pdfjsLib.RenderingCancelledException) { + if (error === 'cancelled' || error instanceof _pdfjs.RenderingCancelledException) { self.error = null; return Promise.resolve(undefined); } - self.renderingState = RenderingStates.FINISHED; + self.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; if (self.loadingIconDiv) { div.removeChild(self.loadingIconDiv); delete self.loadingIconDiv; @@ -338,7 +339,7 @@ var PDFPageView = function PDFPageViewClosure() { } return Promise.resolve(undefined); }; - var paintTask = this.renderer === RendererType.SVG ? this.paintOnSvg(canvasWrapper) : this.paintOnCanvas(canvasWrapper); + var paintTask = this.renderer === _ui_utils.RendererType.SVG ? this.paintOnSvg(canvasWrapper) : this.paintOnCanvas(canvasWrapper); paintTask.onRenderContinue = renderContinueCallback; this.paintTask = paintTask; var resultPromise = paintTask.promise.then(function () { @@ -395,17 +396,17 @@ var PDFPageView = function PDFPageViewClosure() { this.canvas = canvas; canvas.mozOpaque = true; var ctx = canvas.getContext('2d', { alpha: false }); - var outputScale = getOutputScale(ctx); + var outputScale = (0, _ui_utils.getOutputScale)(ctx); this.outputScale = outputScale; - if (pdfjsLib.PDFJS.useOnlyCssZoom) { - var actualSizeViewport = viewport.clone({ scale: CSS_UNITS }); + if (_pdfjs.PDFJS.useOnlyCssZoom) { + var actualSizeViewport = viewport.clone({ scale: _ui_utils.CSS_UNITS }); outputScale.sx *= actualSizeViewport.width / viewport.width; outputScale.sy *= actualSizeViewport.height / viewport.height; outputScale.scaled = true; } - if (pdfjsLib.PDFJS.maxCanvasPixels > 0) { + if (_pdfjs.PDFJS.maxCanvasPixels > 0) { var pixelsInViewport = viewport.width * viewport.height; - var maxScale = Math.sqrt(pdfjsLib.PDFJS.maxCanvasPixels / pixelsInViewport); + var maxScale = Math.sqrt(_pdfjs.PDFJS.maxCanvasPixels / pixelsInViewport); if (outputScale.sx > maxScale || outputScale.sy > maxScale) { outputScale.sx = maxScale; outputScale.sy = maxScale; @@ -415,12 +416,12 @@ var PDFPageView = function PDFPageViewClosure() { this.hasRestrictedScaling = false; } } - var sfx = approximateFraction(outputScale.sx); - var sfy = approximateFraction(outputScale.sy); - canvas.width = roundToDivide(viewport.width * outputScale.sx, sfx[0]); - canvas.height = roundToDivide(viewport.height * outputScale.sy, sfy[0]); - canvas.style.width = roundToDivide(viewport.width, sfx[1]) + 'px'; - canvas.style.height = roundToDivide(viewport.height, sfy[1]) + 'px'; + var sfx = (0, _ui_utils.approximateFraction)(outputScale.sx); + var sfy = (0, _ui_utils.approximateFraction)(outputScale.sy); + canvas.width = (0, _ui_utils.roundToDivide)(viewport.width * outputScale.sx, sfx[0]); + canvas.height = (0, _ui_utils.roundToDivide)(viewport.height * outputScale.sy, sfy[0]); + canvas.style.width = (0, _ui_utils.roundToDivide)(viewport.width, sfx[1]) + 'px'; + canvas.style.height = (0, _ui_utils.roundToDivide)(viewport.height, sfy[1]) + 'px'; this.paintedViewportMap.set(canvas, viewport); var transform = !outputScale.scaled ? null : [outputScale.sx, 0, 0, outputScale.sy, 0, 0]; var renderContext = { @@ -451,8 +452,8 @@ var PDFPageView = function PDFPageViewClosure() { var cancelled = false; var ensureNotCancelled = function () { if (cancelled) { - if (pdfjsLib.PDFJS.pdfjsNext) { - throw new pdfjsLib.RenderingCancelledException('Rendering cancelled, page ' + self.id, 'svg'); + if (_pdfjs.PDFJS.pdfjsNext) { + throw new _pdfjs.RenderingCancelledException('Rendering cancelled, page ' + self.id, 'svg'); } else { throw 'cancelled'; } @@ -460,18 +461,17 @@ var PDFPageView = function PDFPageViewClosure() { }; var self = this; var pdfPage = this.pdfPage; - var SVGGraphics = pdfjsLib.SVGGraphics; - var actualSizeViewport = this.viewport.clone({ scale: CSS_UNITS }); + var actualSizeViewport = this.viewport.clone({ scale: _ui_utils.CSS_UNITS }); var promise = pdfPage.getOperatorList().then(function (opList) { ensureNotCancelled(); - var svgGfx = new SVGGraphics(pdfPage.commonObjs, pdfPage.objs); + var svgGfx = new _pdfjs.SVGGraphics(pdfPage.commonObjs, pdfPage.objs); return svgGfx.getSVG(opList, actualSizeViewport).then(function (svg) { ensureNotCancelled(); self.svg = svg; self.paintedViewportMap.set(svg, actualSizeViewport); svg.style.width = wrapper.style.width; svg.style.height = wrapper.style.height; - self.renderingState = RenderingStates.FINISHED; + self.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; wrapper.appendChild(svg); }); }); diff --git a/lib/web/pdf_presentation_mode.js b/lib/web/pdf_presentation_mode.js index 4bae488fe..89a5768fb 100644 --- a/lib/web/pdf_presentation_mode.js +++ b/lib/web/pdf_presentation_mode.js @@ -14,8 +14,13 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var normalizeWheelEventDelta = uiUtils.normalizeWheelEventDelta; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFPresentationMode = undefined; + +var _ui_utils = require('pdfjs-web/ui_utils'); + var DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS = 1500; var DELAY_BEFORE_HIDING_CONTROLS = 3000; var ACTIVE_SELECTOR = 'pdfPresentationMode'; @@ -82,7 +87,7 @@ var PDFPresentationMode = function PDFPresentationModeClosure() { return; } evt.preventDefault(); - var delta = normalizeWheelEventDelta(evt); + var delta = (0, _ui_utils.normalizeWheelEventDelta)(evt); var MOUSE_SCROLL_COOLDOWN_TIME = 50; var PAGE_SWITCH_THRESHOLD = 0.1; var currentTime = new Date().getTime(); diff --git a/lib/web/pdf_print_service.js b/lib/web/pdf_print_service.js index 414835108..3ec028f85 100644 --- a/lib/web/pdf_print_service.js +++ b/lib/web/pdf_print_service.js @@ -14,14 +14,19 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var overlayManager = require('./overlay_manager.js'); -var app = require('./app.js'); -var pdfjsLib = require('./pdfjs.js'); -var mozL10n = uiUtils.mozL10n; -var CSS_UNITS = uiUtils.CSS_UNITS; -var PDFPrintServiceFactory = app.PDFPrintServiceFactory; -var OverlayManager = overlayManager.OverlayManager; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFPrintService = undefined; + +var _ui_utils = require('pdfjs-web/ui_utils'); + +var _overlay_manager = require('pdfjs-web/overlay_manager'); + +var _pdfjs = require('pdfjs-web/pdfjs'); + +var _app = require('pdfjs-web/app'); + var activeService = null; function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) { var scratchCanvas = activeService.scratchCanvas; @@ -29,8 +34,8 @@ function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) { var PRINT_UNITS = PRINT_RESOLUTION / 72.0; scratchCanvas.width = Math.floor(size.width * PRINT_UNITS); scratchCanvas.height = Math.floor(size.height * PRINT_UNITS); - var width = Math.floor(size.width * CSS_UNITS) + 'px'; - var height = Math.floor(size.height * CSS_UNITS) + 'px'; + var width = Math.floor(size.width * _ui_utils.CSS_UNITS) + 'px'; + var height = Math.floor(size.height * _ui_utils.CSS_UNITS) + 'px'; var ctx = scratchCanvas.getContext('2d'); ctx.save(); ctx.fillStyle = 'rgb(255, 255, 255)'; @@ -87,10 +92,10 @@ PDFPrintService.prototype = { this.scratchCanvas = null; activeService = null; ensureOverlay().then(function () { - if (OverlayManager.active !== 'printServiceOverlay') { + if (_overlay_manager.OverlayManager.active !== 'printServiceOverlay') { return; } - OverlayManager.close('printServiceOverlay'); + _overlay_manager.OverlayManager.close('printServiceOverlay'); }); }, renderPages: function () { @@ -116,7 +121,7 @@ PDFPrintService.prototype = { img.style.width = printItem.width; img.style.height = printItem.height; var scratchCanvas = this.scratchCanvas; - if ('toBlob' in scratchCanvas && !pdfjsLib.PDFJS.disableCreateObjectURL) { + if ('toBlob' in scratchCanvas && !_pdfjs.PDFJS.disableCreateObjectURL) { scratchCanvas.toBlob(function (blob) { img.src = URL.createObjectURL(blob); }); @@ -161,7 +166,7 @@ window.print = function print() { } ensureOverlay().then(function () { if (activeService) { - OverlayManager.open('printServiceOverlay'); + _overlay_manager.OverlayManager.open('printServiceOverlay'); } }); try { @@ -169,8 +174,8 @@ window.print = function print() { } finally { if (!activeService) { console.error('Expected print service to be initialized.'); - if (OverlayManager.active === 'printServiceOverlay') { - OverlayManager.close('printServiceOverlay'); + if (_overlay_manager.OverlayManager.active === 'printServiceOverlay') { + _overlay_manager.OverlayManager.close('printServiceOverlay'); } return; } @@ -201,7 +206,7 @@ function renderProgress(index, total) { var progressBar = progressContainer.querySelector('progress'); var progressPerc = progressContainer.querySelector('.relative-progress'); progressBar.value = progress; - progressPerc.textContent = mozL10n.get('print_progress_percent', { progress: progress }, progress + '%'); + progressPerc.textContent = _ui_utils.mozL10n.get('print_progress_percent', { progress: progress }, progress + '%'); } var hasAttachEvent = !!document.attachEvent; window.addEventListener('keydown', function (event) { @@ -240,12 +245,12 @@ if ('onbeforeprint' in window) { var overlayPromise; function ensureOverlay() { if (!overlayPromise) { - overlayPromise = OverlayManager.register('printServiceOverlay', document.getElementById('printServiceOverlay'), abort, true); + overlayPromise = _overlay_manager.OverlayManager.register('printServiceOverlay', document.getElementById('printServiceOverlay'), abort, true); document.getElementById('printCancel').onclick = abort; } return overlayPromise; } -PDFPrintServiceFactory.instance = { +_app.PDFPrintServiceFactory.instance = { supportsPrinting: true, createPrintService: function (pdfDocument, pagesOverview, printContainer) { if (activeService) { diff --git a/lib/web/pdf_rendering_queue.js b/lib/web/pdf_rendering_queue.js index 0ab2d35c5..77814093c 100644 --- a/lib/web/pdf_rendering_queue.js +++ b/lib/web/pdf_rendering_queue.js @@ -12,8 +12,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -'use strict'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); var CLEANUP_TIMEOUT = 30000; var RenderingStates = { INITIAL: 0, diff --git a/lib/web/pdf_sidebar.js b/lib/web/pdf_sidebar.js index 77f0e3c09..8639bf8fc 100644 --- a/lib/web/pdf_sidebar.js +++ b/lib/web/pdf_sidebar.js @@ -14,10 +14,15 @@ */ 'use strict'; -var pdfRenderingQueue = require('./pdf_rendering_queue.js'); -var uiUtils = require('./ui_utils.js'); -var RenderingStates = pdfRenderingQueue.RenderingStates; -var mozL10n = uiUtils.mozL10n; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFSidebar = exports.SidebarView = undefined; + +var _ui_utils = require('pdfjs-web/ui_utils'); + +var _pdf_rendering_queue = require('pdfjs-web/pdf_rendering_queue'); + var UI_NOTIFICATION_CLASS = 'pdfSidebarNotification'; var SidebarView = { NONE: 0, @@ -194,7 +199,7 @@ var PDFSidebar = function PDFSidebarClosure() { var pagesCount = pdfViewer.pagesCount; for (var pageIndex = 0; pageIndex < pagesCount; pageIndex++) { var pageView = pdfViewer.getPageView(pageIndex); - if (pageView && pageView.renderingState === RenderingStates.FINISHED) { + if (pageView && pageView.renderingState === _pdf_rendering_queue.RenderingStates.FINISHED) { var thumbnailView = thumbnailViewer.getThumbnail(pageIndex); thumbnailView.setImage(pageView); } @@ -205,7 +210,7 @@ var PDFSidebar = function PDFSidebarClosure() { if (this.disableNotification) { return; } - this.toggleButton.title = mozL10n.get('toggle_sidebar_notification.title', null, 'Toggle Sidebar (document contains outline/attachments)'); + this.toggleButton.title = _ui_utils.mozL10n.get('toggle_sidebar_notification.title', null, 'Toggle Sidebar (document contains outline/attachments)'); if (!this.isOpen) { this.toggleButton.classList.add(UI_NOTIFICATION_CLASS); } else if (view === this.active) { @@ -245,7 +250,7 @@ var PDFSidebar = function PDFSidebarClosure() { for (view in SidebarView) { removeNotification(SidebarView[view]); } - this.toggleButton.title = mozL10n.get('toggle_sidebar.title', null, 'Toggle Sidebar'); + this.toggleButton.title = _ui_utils.mozL10n.get('toggle_sidebar.title', null, 'Toggle Sidebar'); }, _addEventListeners: function PDFSidebar_addEventListeners() { var self = this; diff --git a/lib/web/pdf_thumbnail_view.js b/lib/web/pdf_thumbnail_view.js index 7f18b65f8..4d1fe1eda 100644 --- a/lib/web/pdf_thumbnail_view.js +++ b/lib/web/pdf_thumbnail_view.js @@ -14,11 +14,15 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var pdfRenderingQueue = require('./pdf_rendering_queue.js'); -var mozL10n = uiUtils.mozL10n; -var getOutputScale = uiUtils.getOutputScale; -var RenderingStates = pdfRenderingQueue.RenderingStates; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFThumbnailView = undefined; + +var _ui_utils = require('pdfjs-web/ui_utils'); + +var _pdf_rendering_queue = require('pdfjs-web/pdf_rendering_queue'); + var THUMBNAIL_WIDTH = 98; var THUMBNAIL_CANVAS_BORDER_WIDTH = 1; var PDFThumbnailView = function PDFThumbnailViewClosure() { @@ -55,7 +59,7 @@ var PDFThumbnailView = function PDFThumbnailViewClosure() { this.linkService = linkService; this.renderingQueue = renderingQueue; this.renderTask = null; - this.renderingState = RenderingStates.INITIAL; + this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; this.resume = null; this.disableCanvasToImageConversion = disableCanvasToImageConversion; this.pageWidth = this.viewport.width; @@ -66,7 +70,7 @@ var PDFThumbnailView = function PDFThumbnailViewClosure() { this.scale = this.canvasWidth / this.pageWidth; var anchor = document.createElement('a'); anchor.href = linkService.getAnchorUrl('#page=' + id); - anchor.title = mozL10n.get('thumb_page_title', { page: id }, 'Page {{page}}'); + anchor.title = _ui_utils.mozL10n.get('thumb_page_title', { page: id }, 'Page {{page}}'); anchor.onclick = function stopNavigation() { linkService.page = id; return false; @@ -139,7 +143,7 @@ var PDFThumbnailView = function PDFThumbnailViewClosure() { this.renderTask.cancel(); this.renderTask = null; } - this.renderingState = RenderingStates.INITIAL; + this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; this.resume = null; }, _getPageDrawContext: function PDFThumbnailView_getPageDrawContext(noCtxScale) { @@ -147,7 +151,7 @@ var PDFThumbnailView = function PDFThumbnailViewClosure() { this.canvas = canvas; canvas.mozOpaque = true; var ctx = canvas.getContext('2d', { alpha: false }); - var outputScale = getOutputScale(ctx); + var outputScale = (0, _ui_utils.getOutputScale)(ctx); canvas.width = this.canvasWidth * outputScale.sx | 0; canvas.height = this.canvasHeight * outputScale.sy | 0; canvas.style.width = this.canvasWidth + 'px'; @@ -161,12 +165,12 @@ var PDFThumbnailView = function PDFThumbnailViewClosure() { if (!this.canvas) { return; } - if (this.renderingState !== RenderingStates.FINISHED) { + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { return; } var id = this.renderingId; var className = 'thumbnailImage'; - var ariaLabel = mozL10n.get('thumb_page_canvas', { page: this.pageId }, 'Thumbnail of Page {{page}}'); + var ariaLabel = _ui_utils.mozL10n.get('thumb_page_canvas', { page: this.pageId }, 'Thumbnail of Page {{page}}'); if (this.disableCanvasToImageConversion) { this.canvas.id = id; this.canvas.className = className; @@ -190,11 +194,11 @@ var PDFThumbnailView = function PDFThumbnailViewClosure() { delete this.canvas; }, draw: function PDFThumbnailView_draw() { - if (this.renderingState !== RenderingStates.INITIAL) { + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { console.error('Must be in new state before drawing'); return Promise.resolve(undefined); } - this.renderingState = RenderingStates.RUNNING; + this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; var resolveRenderPromise, rejectRenderPromise; var promise = new Promise(function (resolve, reject) { resolveRenderPromise = resolve; @@ -209,7 +213,7 @@ var PDFThumbnailView = function PDFThumbnailViewClosure() { rejectRenderPromise(error); return; } - self.renderingState = RenderingStates.FINISHED; + self.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; self._convertCanvasToImage(); if (!error) { resolveRenderPromise(undefined); @@ -221,9 +225,9 @@ var PDFThumbnailView = function PDFThumbnailViewClosure() { var drawViewport = this.viewport.clone({ scale: this.scale }); var renderContinueCallback = function renderContinueCallback(cont) { if (!self.renderingQueue.isHighestPriority(self)) { - self.renderingState = RenderingStates.PAUSED; + self.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED; self.resume = function resumeCallback() { - self.renderingState = RenderingStates.RUNNING; + self.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; cont(); }; return; @@ -244,7 +248,7 @@ var PDFThumbnailView = function PDFThumbnailViewClosure() { return promise; }, setImage: function PDFThumbnailView_setImage(pageView) { - if (this.renderingState !== RenderingStates.INITIAL) { + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { return; } var img = pageView.canvas; @@ -254,7 +258,7 @@ var PDFThumbnailView = function PDFThumbnailViewClosure() { if (!this.pdfPage) { this.setPdfPage(pageView.pdfPage); } - this.renderingState = RenderingStates.FINISHED; + this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; var ctx = this._getPageDrawContext(true); var canvas = ctx.canvas; if (img.width <= 2 * canvas.width) { @@ -285,11 +289,11 @@ var PDFThumbnailView = function PDFThumbnailViewClosure() { }, setPageLabel: function PDFThumbnailView_setPageLabel(label) { this.pageLabel = typeof label === 'string' ? label : null; - this.anchor.title = mozL10n.get('thumb_page_title', { page: this.pageId }, 'Page {{page}}'); - if (this.renderingState !== RenderingStates.FINISHED) { + this.anchor.title = _ui_utils.mozL10n.get('thumb_page_title', { page: this.pageId }, 'Page {{page}}'); + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { return; } - var ariaLabel = mozL10n.get('thumb_page_canvas', { page: this.pageId }, 'Thumbnail of Page {{page}}'); + var ariaLabel = _ui_utils.mozL10n.get('thumb_page_canvas', { page: this.pageId }, 'Thumbnail of Page {{page}}'); if (this.image) { this.image.setAttribute('aria-label', ariaLabel); } else if (this.disableCanvasToImageConversion && this.canvas) { diff --git a/lib/web/pdf_thumbnail_viewer.js b/lib/web/pdf_thumbnail_viewer.js index 9a4cef46a..afdcff967 100644 --- a/lib/web/pdf_thumbnail_viewer.js +++ b/lib/web/pdf_thumbnail_viewer.js @@ -14,19 +14,22 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var pdfThumbnailView = require('./pdf_thumbnail_view.js'); -var watchScroll = uiUtils.watchScroll; -var getVisibleElements = uiUtils.getVisibleElements; -var scrollIntoView = uiUtils.scrollIntoView; -var PDFThumbnailView = pdfThumbnailView.PDFThumbnailView; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFThumbnailViewer = undefined; + +var _ui_utils = require('pdfjs-web/ui_utils'); + +var _pdf_thumbnail_view = require('pdfjs-web/pdf_thumbnail_view'); + var THUMBNAIL_SCROLL_MARGIN = -19; var PDFThumbnailViewer = function PDFThumbnailViewerClosure() { function PDFThumbnailViewer(options) { this.container = options.container; this.renderingQueue = options.renderingQueue; this.linkService = options.linkService; - this.scroll = watchScroll(this.container, this._scrollUpdated.bind(this)); + this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdated.bind(this)); this._resetView(); } PDFThumbnailViewer.prototype = { @@ -37,7 +40,7 @@ var PDFThumbnailViewer = function PDFThumbnailViewerClosure() { return this.thumbnails[index]; }, _getVisibleThumbs: function PDFThumbnailViewer_getVisibleThumbs() { - return getVisibleElements(this.container, this.thumbnails); + return (0, _ui_utils.getVisibleElements)(this.container, this.thumbnails); }, scrollThumbnailIntoView: function PDFThumbnailViewer_scrollThumbnailIntoView(page) { var selected = document.querySelector('.thumbnail.selected'); @@ -54,7 +57,7 @@ var PDFThumbnailViewer = function PDFThumbnailViewerClosure() { var first = visibleThumbs.first.id; var last = numVisibleThumbs > 1 ? visibleThumbs.last.id : first; if (page <= first || page >= last) { - scrollIntoView(thumbnail, { top: THUMBNAIL_SCROLL_MARGIN }); + (0, _ui_utils.scrollIntoView)(thumbnail, { top: THUMBNAIL_SCROLL_MARGIN }); } } }, @@ -69,12 +72,12 @@ var PDFThumbnailViewer = function PDFThumbnailViewerClosure() { } }, cleanup: function PDFThumbnailViewer_cleanup() { - var tempCanvas = PDFThumbnailView.tempImageCache; + var tempCanvas = _pdf_thumbnail_view.PDFThumbnailView.tempImageCache; if (tempCanvas) { tempCanvas.width = 0; tempCanvas.height = 0; } - PDFThumbnailView.tempImageCache = null; + _pdf_thumbnail_view.PDFThumbnailView.tempImageCache = null; }, _resetView: function PDFThumbnailViewer_resetView() { this.thumbnails = []; @@ -96,7 +99,7 @@ var PDFThumbnailViewer = function PDFThumbnailViewerClosure() { var pagesCount = pdfDocument.numPages; var viewport = firstPage.getViewport(1.0); for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { - var thumbnail = new PDFThumbnailView({ + var thumbnail = new _pdf_thumbnail_view.PDFThumbnailView({ container: this.container, id: pageNum, defaultViewport: viewport.clone(), diff --git a/lib/web/pdf_viewer.js b/lib/web/pdf_viewer.js index 4b619a800..3d194d7c8 100644 --- a/lib/web/pdf_viewer.js +++ b/lib/web/pdf_viewer.js @@ -14,31 +14,27 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var pdfPageView = require('./pdf_page_view.js'); -var pdfRenderingQueue = require('./pdf_rendering_queue.js'); -var textLayerBuilder = require('./text_layer_builder.js'); -var annotationLayerBuilder = require('./annotation_layer_builder.js'); -var pdfLinkService = require('./pdf_link_service.js'); -var domEvents = require('./dom_events.js'); -var pdfjsLib = require('./pdfjs.js'); -var UNKNOWN_SCALE = uiUtils.UNKNOWN_SCALE; -var SCROLLBAR_PADDING = uiUtils.SCROLLBAR_PADDING; -var VERTICAL_PADDING = uiUtils.VERTICAL_PADDING; -var MAX_AUTO_SCALE = uiUtils.MAX_AUTO_SCALE; -var CSS_UNITS = uiUtils.CSS_UNITS; -var DEFAULT_SCALE = uiUtils.DEFAULT_SCALE; -var DEFAULT_SCALE_VALUE = uiUtils.DEFAULT_SCALE_VALUE; -var RendererType = uiUtils.RendererType; -var scrollIntoView = uiUtils.scrollIntoView; -var watchScroll = uiUtils.watchScroll; -var getVisibleElements = uiUtils.getVisibleElements; -var PDFPageView = pdfPageView.PDFPageView; -var RenderingStates = pdfRenderingQueue.RenderingStates; -var PDFRenderingQueue = pdfRenderingQueue.PDFRenderingQueue; -var TextLayerBuilder = textLayerBuilder.TextLayerBuilder; -var AnnotationLayerBuilder = annotationLayerBuilder.AnnotationLayerBuilder; -var SimpleLinkService = pdfLinkService.SimpleLinkService; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFViewer = exports.PresentationModeState = undefined; + +var _ui_utils = require('pdfjs-web/ui_utils'); + +var _pdf_rendering_queue = require('pdfjs-web/pdf_rendering_queue'); + +var _annotation_layer_builder = require('pdfjs-web/annotation_layer_builder'); + +var _dom_events = require('pdfjs-web/dom_events'); + +var _pdfjs = require('pdfjs-web/pdfjs'); + +var _pdf_page_view = require('pdfjs-web/pdf_page_view'); + +var _pdf_link_service = require('pdfjs-web/pdf_link_service'); + +var _text_layer_builder = require('pdfjs-web/text_layer_builder'); + var PresentationModeState = { UNKNOWN: 0, NORMAL: 1, @@ -81,22 +77,22 @@ var PDFViewer = function pdfViewer() { function PDFViewer(options) { this.container = options.container; this.viewer = options.viewer || options.container.firstElementChild; - this.eventBus = options.eventBus || domEvents.getGlobalEventBus(); - this.linkService = options.linkService || new SimpleLinkService(); + this.eventBus = options.eventBus || _dom_events.domEvents.getGlobalEventBus(); + this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService(); this.downloadManager = options.downloadManager || null; this.removePageBorders = options.removePageBorders || false; this.enhanceTextSelection = options.enhanceTextSelection || false; this.renderInteractiveForms = options.renderInteractiveForms || false; this.enablePrintAutoRotate = options.enablePrintAutoRotate || false; - this.renderer = options.renderer || RendererType.CANVAS; + this.renderer = options.renderer || _ui_utils.RendererType.CANVAS; this.defaultRenderingQueue = !options.renderingQueue; if (this.defaultRenderingQueue) { - this.renderingQueue = new PDFRenderingQueue(); + this.renderingQueue = new _pdf_rendering_queue.PDFRenderingQueue(); this.renderingQueue.setViewer(this); } else { this.renderingQueue = options.renderingQueue; } - this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this)); + this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdate.bind(this)); this.presentationModeState = PresentationModeState.UNKNOWN; this._resetView(); if (this.removePageBorders) { @@ -163,7 +159,7 @@ var PDFViewer = function pdfViewer() { this.currentPageNumber = pageNumber; }, get currentScale() { - return this._currentScale !== UNKNOWN_SCALE ? this._currentScale : DEFAULT_SCALE; + return this._currentScale !== _ui_utils.UNKNOWN_SCALE ? this._currentScale : _ui_utils.DEFAULT_SCALE; }, set currentScale(val) { if (isNaN(val)) { @@ -171,7 +167,7 @@ var PDFViewer = function pdfViewer() { } if (!this.pdfDocument) { this._currentScale = val; - this._currentScaleValue = val !== UNKNOWN_SCALE ? val.toString() : null; + this._currentScaleValue = val !== _ui_utils.UNKNOWN_SCALE ? val.toString() : null; return; } this._setScale(val, false); @@ -181,7 +177,7 @@ var PDFViewer = function pdfViewer() { }, set currentScaleValue(val) { if (!this.pdfDocument) { - this._currentScale = isNaN(val) ? UNKNOWN_SCALE : val; + this._currentScale = isNaN(val) ? _ui_utils.UNKNOWN_SCALE : val; this._currentScaleValue = val.toString(); return; } @@ -251,13 +247,13 @@ var PDFViewer = function pdfViewer() { this.firstPagePromise = firstPagePromise; return firstPagePromise.then(function (pdfPage) { var scale = this.currentScale; - var viewport = pdfPage.getViewport(scale * CSS_UNITS); + var viewport = pdfPage.getViewport(scale * _ui_utils.CSS_UNITS); for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { var textLayerFactory = null; - if (!pdfjsLib.PDFJS.disableTextLayer) { + if (!_pdfjs.PDFJS.disableTextLayer) { textLayerFactory = this; } - var pageView = new PDFPageView({ + var pageView = new _pdf_page_view.PDFPageView({ container: this.viewer, eventBus: this.eventBus, id: pageNum, @@ -275,7 +271,7 @@ var PDFViewer = function pdfViewer() { } var linkService = this.linkService; onePageRendered.then(function () { - if (!pdfjsLib.PDFJS.disableAutoFetch) { + if (!_pdfjs.PDFJS.disableAutoFetch) { var getPagesLeft = pagesCount; for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { pdfDocument.getPage(pageNum).then(function (pageNum, pdfPage) { @@ -324,7 +320,7 @@ var PDFViewer = function pdfViewer() { _resetView: function () { this._pages = []; this._currentPageNumber = 1; - this._currentScale = UNKNOWN_SCALE; + this._currentScale = _ui_utils.UNKNOWN_SCALE; this._currentScaleValue = null; this._pageLabels = null; this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE); @@ -367,7 +363,7 @@ var PDFViewer = function pdfViewer() { if (!noScroll) { var page = this._currentPageNumber, dest; - if (this._location && !pdfjsLib.PDFJS.ignoreCurrentPositionOnZoom && !(this.isInPresentationMode || this.isChangingPresentationMode)) { + if (this._location && !_pdfjs.PDFJS.ignoreCurrentPositionOnZoom && !(this.isInPresentationMode || this.isChangingPresentationMode)) { page = this._location.pageNumber; dest = [null, { name: 'XYZ' }, this._location.left, this._location.top, null]; } @@ -391,8 +387,8 @@ var PDFViewer = function pdfViewer() { if (!currentPage) { return; } - var hPadding = this.isInPresentationMode || this.removePageBorders ? 0 : SCROLLBAR_PADDING; - var vPadding = this.isInPresentationMode || this.removePageBorders ? 0 : VERTICAL_PADDING; + var hPadding = this.isInPresentationMode || this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING; + var vPadding = this.isInPresentationMode || this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING; var pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale; var pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale; switch (value) { @@ -411,7 +407,7 @@ var PDFViewer = function pdfViewer() { case 'auto': var isLandscape = currentPage.width > currentPage.height; var horizontalScale = isLandscape ? Math.min(pageHeightScale, pageWidthScale) : pageWidthScale; - scale = Math.min(MAX_AUTO_SCALE, horizontalScale); + scale = Math.min(_ui_utils.MAX_AUTO_SCALE, horizontalScale); break; default: console.error('PDFViewer_setScale: "' + value + '" is an unknown zoom value.'); @@ -425,7 +421,7 @@ var PDFViewer = function pdfViewer() { this._setScale(this._currentScaleValue, true); } var pageView = this._pages[this._currentPageNumber - 1]; - scrollIntoView(pageView.div); + (0, _ui_utils.scrollIntoView)(pageView.div); }, scrollPageIntoView: function PDFViewer_scrollPageIntoView(params) { if (!this.pdfDocument) { @@ -461,8 +457,8 @@ var PDFViewer = function pdfViewer() { widthScale, heightScale; var changeOrientation = pageView.rotation % 180 === 0 ? false : true; - var pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / CSS_UNITS; - var pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / CSS_UNITS; + var pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / _ui_utils.CSS_UNITS; + var pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / _ui_utils.CSS_UNITS; var scale = 0; switch (dest[1].name) { case 'XYZ': @@ -497,10 +493,10 @@ var PDFViewer = function pdfViewer() { y = dest[3]; width = dest[4] - x; height = dest[5] - y; - var hPadding = this.removePageBorders ? 0 : SCROLLBAR_PADDING; - var vPadding = this.removePageBorders ? 0 : VERTICAL_PADDING; - widthScale = (this.container.clientWidth - hPadding) / width / CSS_UNITS; - heightScale = (this.container.clientHeight - vPadding) / height / CSS_UNITS; + var hPadding = this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING; + var vPadding = this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING; + widthScale = (this.container.clientWidth - hPadding) / width / _ui_utils.CSS_UNITS; + heightScale = (this.container.clientHeight - vPadding) / height / _ui_utils.CSS_UNITS; scale = Math.min(Math.abs(widthScale), Math.abs(heightScale)); break; default: @@ -509,11 +505,11 @@ var PDFViewer = function pdfViewer() { } if (scale && scale !== this._currentScale) { this.currentScaleValue = scale; - } else if (this._currentScale === UNKNOWN_SCALE) { - this.currentScaleValue = DEFAULT_SCALE_VALUE; + } else if (this._currentScale === _ui_utils.UNKNOWN_SCALE) { + this.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; } if (scale === 'page-fit' && !dest[4]) { - scrollIntoView(pageView.div); + (0, _ui_utils.scrollIntoView)(pageView.div); return; } var boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)]; @@ -523,7 +519,7 @@ var PDFViewer = function pdfViewer() { left = Math.max(left, 0); top = Math.max(top, 0); } - scrollIntoView(pageView.div, { + (0, _ui_utils.scrollIntoView)(pageView.div, { left: left, top: top }); @@ -599,7 +595,7 @@ var PDFViewer = function pdfViewer() { }, _getVisiblePages: function () { if (!this.isInPresentationMode) { - return getVisibleElements(this.container, this._pages, true); + return (0, _ui_utils.getVisibleElements)(this.container, this._pages, true); } var visible = []; var currentPage = this._pages[this._currentPageNumber - 1]; @@ -615,7 +611,7 @@ var PDFViewer = function pdfViewer() { }, cleanup: function () { for (var i = 0, ii = this._pages.length; i < ii; i++) { - if (this._pages[i] && this._pages[i].renderingState !== RenderingStates.FINISHED) { + if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { this._pages[i].reset(); } } @@ -660,7 +656,7 @@ var PDFViewer = function pdfViewer() { }); }, createTextLayerBuilder: function (textLayerDiv, pageIndex, viewport, enhanceTextSelection) { - return new TextLayerBuilder({ + return new _text_layer_builder.TextLayerBuilder({ textLayerDiv: textLayerDiv, eventBus: this.eventBus, pageIndex: pageIndex, @@ -670,7 +666,7 @@ var PDFViewer = function pdfViewer() { }); }, createAnnotationLayerBuilder: function (pageDiv, pdfPage, renderInteractiveForms) { - return new AnnotationLayerBuilder({ + return new _annotation_layer_builder.AnnotationLayerBuilder({ pageDiv: pageDiv, pdfPage: pdfPage, renderInteractiveForms: renderInteractiveForms, diff --git a/lib/web/preferences.js b/lib/web/preferences.js index 65e5ee64b..d7c2d1747 100644 --- a/lib/web/preferences.js +++ b/lib/web/preferences.js @@ -12,8 +12,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -'use strict'; +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); var defaultPreferences = null; function getDefaultPreferences() { if (!defaultPreferences) { @@ -130,16 +133,18 @@ var Preferences = { }.bind(this)); } }; -Preferences._writeToStorage = function (prefObj) { - return new Promise(function (resolve) { - localStorage.setItem('pdfjs.preferences', JSON.stringify(prefObj)); - resolve(); - }); -}; -Preferences._readFromStorage = function (prefObj) { - return new Promise(function (resolve) { - var readPrefs = JSON.parse(localStorage.getItem('pdfjs.preferences')); - resolve(readPrefs); - }); -}; +{ + Preferences._writeToStorage = function (prefObj) { + return new Promise(function (resolve) { + localStorage.setItem('pdfjs.preferences', JSON.stringify(prefObj)); + resolve(); + }); + }; + Preferences._readFromStorage = function (prefObj) { + return new Promise(function (resolve) { + var readPrefs = JSON.parse(localStorage.getItem('pdfjs.preferences')); + resolve(readPrefs); + }); + }; +} exports.Preferences = Preferences; \ No newline at end of file diff --git a/lib/web/secondary_toolbar.js b/lib/web/secondary_toolbar.js index d3c44cf44..9a9481b46 100644 --- a/lib/web/secondary_toolbar.js +++ b/lib/web/secondary_toolbar.js @@ -14,9 +14,13 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var SCROLLBAR_PADDING = uiUtils.SCROLLBAR_PADDING; -var mozL10n = uiUtils.mozL10n; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.SecondaryToolbar = undefined; + +var _ui_utils = require('pdfjs-web/ui_utils'); + var SecondaryToolbar = function SecondaryToolbarClosure() { function SecondaryToolbar(options, mainContainer, eventBus) { this.toolbar = options.toolbar; @@ -131,11 +135,11 @@ var SecondaryToolbar = function SecondaryToolbarClosure() { } isHandToolActive = e.isActive; if (isHandToolActive) { - toggleHandToolButton.title = mozL10n.get('hand_tool_disable.title', null, 'Disable hand tool'); - toggleHandToolButton.firstElementChild.textContent = mozL10n.get('hand_tool_disable_label', null, 'Disable hand tool'); + toggleHandToolButton.title = _ui_utils.mozL10n.get('hand_tool_disable.title', null, 'Disable hand tool'); + toggleHandToolButton.firstElementChild.textContent = _ui_utils.mozL10n.get('hand_tool_disable_label', null, 'Disable hand tool'); } else { - toggleHandToolButton.title = mozL10n.get('hand_tool_enable.title', null, 'Enable hand tool'); - toggleHandToolButton.firstElementChild.textContent = mozL10n.get('hand_tool_enable_label', null, 'Enable hand tool'); + toggleHandToolButton.title = _ui_utils.mozL10n.get('hand_tool_enable.title', null, 'Enable hand tool'); + toggleHandToolButton.firstElementChild.textContent = _ui_utils.mozL10n.get('hand_tool_enable_label', null, 'Enable hand tool'); } }); }, @@ -171,7 +175,7 @@ var SecondaryToolbar = function SecondaryToolbarClosure() { if (this.containerHeight === this.previousContainerHeight) { return; } - this.toolbarButtonContainer.setAttribute('style', 'max-height: ' + (this.containerHeight - SCROLLBAR_PADDING) + 'px;'); + this.toolbarButtonContainer.setAttribute('style', 'max-height: ' + (this.containerHeight - _ui_utils.SCROLLBAR_PADDING) + 'px;'); this.previousContainerHeight = this.containerHeight; } }; diff --git a/lib/web/text_layer_builder.js b/lib/web/text_layer_builder.js index fe2411d0e..b9dc4c756 100644 --- a/lib/web/text_layer_builder.js +++ b/lib/web/text_layer_builder.js @@ -14,13 +14,20 @@ */ 'use strict'; -var domEvents = require('./dom_events.js'); -var pdfjsLib = require('./pdfjs.js'); +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.DefaultTextLayerFactory = exports.TextLayerBuilder = undefined; + +var _dom_events = require('pdfjs-web/dom_events'); + +var _pdfjs = require('pdfjs-web/pdfjs'); + var EXPAND_DIVS_TIMEOUT = 300; var TextLayerBuilder = function TextLayerBuilderClosure() { function TextLayerBuilder(options) { this.textLayerDiv = options.textLayerDiv; - this.eventBus = options.eventBus || domEvents.getGlobalEventBus(); + this.eventBus = options.eventBus || _dom_events.domEvents.getGlobalEventBus(); this.textContent = null; this.renderingDone = false; this.pageIdx = options.pageIndex; @@ -54,7 +61,7 @@ var TextLayerBuilder = function TextLayerBuilderClosure() { this.cancel(); this.textDivs = []; var textLayerFrag = document.createDocumentFragment(); - this.textLayerRenderTask = pdfjsLib.renderTextLayer({ + this.textLayerRenderTask = (0, _pdfjs.renderTextLayer)({ textContent: this.textContent, container: textLayerFrag, viewport: this.viewport, diff --git a/lib/web/toolbar.js b/lib/web/toolbar.js index c772622a3..78b8ee942 100644 --- a/lib/web/toolbar.js +++ b/lib/web/toolbar.js @@ -14,15 +14,13 @@ */ 'use strict'; -var uiUtils = require('./ui_utils.js'); -var mozL10n = uiUtils.mozL10n; -var noContextMenuHandler = uiUtils.noContextMenuHandler; -var animationStarted = uiUtils.animationStarted; -var localized = uiUtils.localized; -var DEFAULT_SCALE_VALUE = uiUtils.DEFAULT_SCALE_VALUE; -var DEFAULT_SCALE = uiUtils.DEFAULT_SCALE; -var MIN_SCALE = uiUtils.MIN_SCALE; -var MAX_SCALE = uiUtils.MAX_SCALE; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Toolbar = undefined; + +var _ui_utils = require('pdfjs-web/ui_utils'); + var PAGE_NUMBER_LOADING_INDICATOR = 'visiblePageIsLoading'; var SCALE_SELECT_CONTAINER_PADDING = 8; var SCALE_SELECT_PADDING = 22; @@ -57,8 +55,8 @@ var Toolbar = function ToolbarClosure() { this.pageLabel = null; this.hasPageLabels = false; this.pagesCount = 0; - this.pageScaleValue = DEFAULT_SCALE_VALUE; - this.pageScale = DEFAULT_SCALE; + this.pageScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; + this.pageScale = _ui_utils.DEFAULT_SCALE; this._updateUIState(true); }, _bindListeners: function Toolbar_bindClickListeners() { @@ -107,8 +105,8 @@ var Toolbar = function ToolbarClosure() { items.download.addEventListener('click', function (e) { eventBus.dispatch('download'); }); - items.scaleSelect.oncontextmenu = noContextMenuHandler; - localized.then(this._localized.bind(this)); + items.scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler; + _ui_utils.localized.then(this._localized.bind(this)); }, _localized: function Toolbar_localized() { this._wasLocalized = true; @@ -130,7 +128,7 @@ var Toolbar = function ToolbarClosure() { } if (!predefinedValueFound) { var customScale = Math.round(scale * 10000) / 100; - items.customScaleOption.textContent = mozL10n.get('page_scale_percent', { scale: customScale }, '{{scale}}%'); + items.customScaleOption.textContent = _ui_utils.mozL10n.get('page_scale_percent', { scale: customScale }, '{{scale}}%'); items.customScaleOption.selected = true; } } @@ -147,13 +145,13 @@ var Toolbar = function ToolbarClosure() { items.pageNumber.type = 'text'; } else { items.pageNumber.type = 'number'; - items.numPages.textContent = mozL10n.get('of_pages', { pagesCount: pagesCount }, 'of {{pagesCount}}'); + items.numPages.textContent = _ui_utils.mozL10n.get('of_pages', { pagesCount: pagesCount }, 'of {{pagesCount}}'); } items.pageNumber.max = pagesCount; } if (this.hasPageLabels) { items.pageNumber.value = this.pageLabel; - items.numPages.textContent = mozL10n.get('page_of_pages', { + items.numPages.textContent = _ui_utils.mozL10n.get('page_of_pages', { pageNumber: pageNumber, pagesCount: pagesCount }, '({{pageNumber}} of {{pagesCount}})'); @@ -162,8 +160,8 @@ var Toolbar = function ToolbarClosure() { } items.previous.disabled = pageNumber <= 1; items.next.disabled = pageNumber >= pagesCount; - items.zoomOut.disabled = scale <= MIN_SCALE; - items.zoomIn.disabled = scale >= MAX_SCALE; + items.zoomOut.disabled = scale <= _ui_utils.MIN_SCALE; + items.zoomIn.disabled = scale >= _ui_utils.MAX_SCALE; selectScaleOption(scaleValue, scale); }, updateLoadingIndicatorState: function Toolbar_updateLoadingIndicatorState(loading) { @@ -177,7 +175,7 @@ var Toolbar = function ToolbarClosure() { _adjustScaleWidth: function Toolbar_adjustScaleWidth() { var container = this.items.scaleSelectContainer; var select = this.items.scaleSelect; - animationStarted.then(function () { + _ui_utils.animationStarted.then(function () { if (container.clientWidth === 0) { container.setAttribute('style', 'display: inherit;'); } diff --git a/lib/web/ui_utils.js b/lib/web/ui_utils.js index 79bc03ecb..9d51efd76 100644 --- a/lib/web/ui_utils.js +++ b/lib/web/ui_utils.js @@ -14,7 +14,13 @@ */ 'use strict'; -var pdfjsLib = require('./pdfjs.js'); +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.mozL10n = exports.RendererType = 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 _pdfjs = require('pdfjs-web/pdfjs'); + var CSS_UNITS = 96.0 / 72.0; var DEFAULT_SCALE_VALUE = 'auto'; var DEFAULT_SCALE = 1.0; @@ -29,14 +35,15 @@ var RendererType = { SVG: 'svg' }; var mozL10n = document.mozL10n || document.webL10n; -var PDFJS = pdfjsLib.PDFJS; -PDFJS.disableFullscreen = PDFJS.disableFullscreen === undefined ? false : PDFJS.disableFullscreen; -PDFJS.useOnlyCssZoom = PDFJS.useOnlyCssZoom === undefined ? false : PDFJS.useOnlyCssZoom; -PDFJS.maxCanvasPixels = PDFJS.maxCanvasPixels === undefined ? 16777216 : PDFJS.maxCanvasPixels; -PDFJS.disableHistory = PDFJS.disableHistory === undefined ? false : PDFJS.disableHistory; -PDFJS.disableTextLayer = PDFJS.disableTextLayer === undefined ? false : PDFJS.disableTextLayer; -PDFJS.ignoreCurrentPositionOnZoom = PDFJS.ignoreCurrentPositionOnZoom === undefined ? false : PDFJS.ignoreCurrentPositionOnZoom; -PDFJS.locale = PDFJS.locale === undefined ? navigator.language : PDFJS.locale; +_pdfjs.PDFJS.disableFullscreen = _pdfjs.PDFJS.disableFullscreen === undefined ? false : _pdfjs.PDFJS.disableFullscreen; +_pdfjs.PDFJS.useOnlyCssZoom = _pdfjs.PDFJS.useOnlyCssZoom === undefined ? false : _pdfjs.PDFJS.useOnlyCssZoom; +_pdfjs.PDFJS.maxCanvasPixels = _pdfjs.PDFJS.maxCanvasPixels === undefined ? 16777216 : _pdfjs.PDFJS.maxCanvasPixels; +_pdfjs.PDFJS.disableHistory = _pdfjs.PDFJS.disableHistory === undefined ? false : _pdfjs.PDFJS.disableHistory; +_pdfjs.PDFJS.disableTextLayer = _pdfjs.PDFJS.disableTextLayer === undefined ? false : _pdfjs.PDFJS.disableTextLayer; +_pdfjs.PDFJS.ignoreCurrentPositionOnZoom = _pdfjs.PDFJS.ignoreCurrentPositionOnZoom === undefined ? false : _pdfjs.PDFJS.ignoreCurrentPositionOnZoom; +{ + _pdfjs.PDFJS.locale = _pdfjs.PDFJS.locale === undefined ? navigator.language : _pdfjs.PDFJS.locale; +} function getOutputScale(ctx) { var devicePixelRatio = window.devicePixelRatio || 1; var backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1; diff --git a/lib/web/view_history.js b/lib/web/view_history.js index 7bba10c46..147557499 100644 --- a/lib/web/view_history.js +++ b/lib/web/view_history.js @@ -14,6 +14,9 @@ */ 'use strict'; +Object.defineProperty(exports, "__esModule", { + value: true +}); var DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20; var ViewHistory = function ViewHistoryClosure() { function ViewHistory(fingerprint, cacheSize) { diff --git a/package.json b/package.json index 3fe7604ea..a2e0258b8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pdfjs-dist", - "version": "1.8.195", + "version": "1.8.199", "main": "build/pdf.js", "description": "Generic build of Mozilla's PDF.js library.", "keywords": [ diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js index 0c933f948..a6c0d93f6 100644 --- a/web/pdf_viewer.js +++ b/web/pdf_viewer.js @@ -88,7 +88,7 @@ return /******/ (function(modules) { // webpackBootstrap /******/ __w_pdfjs_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __w_pdfjs_require__(__w_pdfjs_require__.s = 12); +/******/ return __w_pdfjs_require__(__w_pdfjs_require__.s = 26); /******/ }) /************************************************************************/ /******/ ([ @@ -98,28 +98,13 @@ return /******/ (function(modules) { // webpackBootstrap "use strict"; -{ - var pdfjsLib; - if (typeof __pdfjsdev_webpack__ === 'undefined') { - if (typeof window !== 'undefined' && window['pdfjs-dist/build/pdf']) { - pdfjsLib = window['pdfjs-dist/build/pdf']; - } else if (typeof require === 'function') { - pdfjsLib = require('../build/pdf.js'); - } else { - throw new Error('Neither `require` nor `window` found'); - } - } - module.exports = pdfjsLib; -} - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __w_pdfjs_require__) { - -"use strict"; +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.mozL10n = exports.RendererType = 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 _pdfjs = __w_pdfjs_require__(1); -var pdfjsLib = __w_pdfjs_require__(0); var CSS_UNITS = 96.0 / 72.0; var DEFAULT_SCALE_VALUE = 'auto'; var DEFAULT_SCALE = 1.0; @@ -134,14 +119,15 @@ var RendererType = { SVG: 'svg' }; var mozL10n = document.mozL10n || document.webL10n; -var PDFJS = pdfjsLib.PDFJS; -PDFJS.disableFullscreen = PDFJS.disableFullscreen === undefined ? false : PDFJS.disableFullscreen; -PDFJS.useOnlyCssZoom = PDFJS.useOnlyCssZoom === undefined ? false : PDFJS.useOnlyCssZoom; -PDFJS.maxCanvasPixels = PDFJS.maxCanvasPixels === undefined ? 16777216 : PDFJS.maxCanvasPixels; -PDFJS.disableHistory = PDFJS.disableHistory === undefined ? false : PDFJS.disableHistory; -PDFJS.disableTextLayer = PDFJS.disableTextLayer === undefined ? false : PDFJS.disableTextLayer; -PDFJS.ignoreCurrentPositionOnZoom = PDFJS.ignoreCurrentPositionOnZoom === undefined ? false : PDFJS.ignoreCurrentPositionOnZoom; -PDFJS.locale = PDFJS.locale === undefined ? navigator.language : PDFJS.locale; +_pdfjs.PDFJS.disableFullscreen = _pdfjs.PDFJS.disableFullscreen === undefined ? false : _pdfjs.PDFJS.disableFullscreen; +_pdfjs.PDFJS.useOnlyCssZoom = _pdfjs.PDFJS.useOnlyCssZoom === undefined ? false : _pdfjs.PDFJS.useOnlyCssZoom; +_pdfjs.PDFJS.maxCanvasPixels = _pdfjs.PDFJS.maxCanvasPixels === undefined ? 16777216 : _pdfjs.PDFJS.maxCanvasPixels; +_pdfjs.PDFJS.disableHistory = _pdfjs.PDFJS.disableHistory === undefined ? false : _pdfjs.PDFJS.disableHistory; +_pdfjs.PDFJS.disableTextLayer = _pdfjs.PDFJS.disableTextLayer === undefined ? false : _pdfjs.PDFJS.disableTextLayer; +_pdfjs.PDFJS.ignoreCurrentPositionOnZoom = _pdfjs.PDFJS.ignoreCurrentPositionOnZoom === undefined ? false : _pdfjs.PDFJS.ignoreCurrentPositionOnZoom; +{ + _pdfjs.PDFJS.locale = _pdfjs.PDFJS.locale === undefined ? navigator.language : _pdfjs.PDFJS.locale; +} function getOutputScale(ctx) { var devicePixelRatio = window.devicePixelRatio || 1; var backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1; @@ -514,6 +500,27 @@ exports.normalizeWheelEventDelta = normalizeWheelEventDelta; exports.animationStarted = animationStarted; exports.localized = localized; +/***/ }), +/* 1 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +{ + var pdfjsLib; + if (typeof __pdfjsdev_webpack__ === 'undefined') { + if (typeof window !== 'undefined' && window['pdfjs-dist/build/pdf']) { + pdfjsLib = window['pdfjs-dist/build/pdf']; + } else if (typeof require === 'function') { + pdfjsLib = require('../build/pdf.js'); + } else { + throw new Error('Neither `require` nor `window` found'); + } + } + module.exports = pdfjsLib; +} + /***/ }), /* 2 */ /***/ (function(module, exports, __w_pdfjs_require__) { @@ -521,8 +528,13 @@ exports.localized = localized; "use strict"; -var uiUtils = __w_pdfjs_require__(1); -var EventBus = uiUtils.EventBus; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getGlobalEventBus = exports.attachDOMEventsToEventBus = undefined; + +var _ui_utils = __w_pdfjs_require__(0); + function attachDOMEventsToEventBus(eventBus) { eventBus.on('documentload', function () { var event = document.createEvent('CustomEvent'); @@ -624,7 +636,7 @@ function getGlobalEventBus() { if (globalEventBus) { return globalEventBus; } - globalEventBus = new EventBus(); + globalEventBus = new _ui_utils.EventBus(); attachDOMEventsToEventBus(globalEventBus); return globalEventBus; } @@ -638,9 +650,128 @@ exports.getGlobalEventBus = getGlobalEventBus; "use strict"; -var uiUtils = __w_pdfjs_require__(1); -var domEvents = __w_pdfjs_require__(2); -var parseQueryString = uiUtils.parseQueryString; +Object.defineProperty(exports, "__esModule", { + value: true +}); +var CLEANUP_TIMEOUT = 30000; +var RenderingStates = { + INITIAL: 0, + RUNNING: 1, + PAUSED: 2, + FINISHED: 3 +}; +var PDFRenderingQueue = function PDFRenderingQueueClosure() { + function PDFRenderingQueue() { + this.pdfViewer = null; + this.pdfThumbnailViewer = null; + this.onIdle = null; + this.highestPriorityPage = null; + this.idleTimeout = null; + this.printing = false; + this.isThumbnailViewEnabled = false; + } + PDFRenderingQueue.prototype = { + setViewer: function PDFRenderingQueue_setViewer(pdfViewer) { + this.pdfViewer = pdfViewer; + }, + setThumbnailViewer: function PDFRenderingQueue_setThumbnailViewer(pdfThumbnailViewer) { + this.pdfThumbnailViewer = pdfThumbnailViewer; + }, + isHighestPriority: function PDFRenderingQueue_isHighestPriority(view) { + return this.highestPriorityPage === view.renderingId; + }, + renderHighestPriority: function PDFRenderingQueue_renderHighestPriority(currentlyVisiblePages) { + if (this.idleTimeout) { + clearTimeout(this.idleTimeout); + this.idleTimeout = null; + } + if (this.pdfViewer.forceRendering(currentlyVisiblePages)) { + return; + } + if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) { + if (this.pdfThumbnailViewer.forceRendering()) { + return; + } + } + if (this.printing) { + return; + } + if (this.onIdle) { + this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT); + } + }, + getHighestPriority: function PDFRenderingQueue_getHighestPriority(visible, views, scrolledDown) { + var visibleViews = visible.views; + var numVisible = visibleViews.length; + if (numVisible === 0) { + return false; + } + for (var i = 0; i < numVisible; ++i) { + var view = visibleViews[i].view; + if (!this.isViewFinished(view)) { + return view; + } + } + if (scrolledDown) { + var nextPageIndex = visible.last.id; + if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) { + return views[nextPageIndex]; + } + } else { + var previousPageIndex = visible.first.id - 2; + if (views[previousPageIndex] && !this.isViewFinished(views[previousPageIndex])) { + return views[previousPageIndex]; + } + } + return null; + }, + isViewFinished: function PDFRenderingQueue_isViewFinished(view) { + return view.renderingState === RenderingStates.FINISHED; + }, + renderView: function PDFRenderingQueue_renderView(view) { + var state = view.renderingState; + switch (state) { + case RenderingStates.FINISHED: + return false; + case RenderingStates.PAUSED: + this.highestPriorityPage = view.renderingId; + view.resume(); + break; + case RenderingStates.RUNNING: + this.highestPriorityPage = view.renderingId; + break; + case RenderingStates.INITIAL: + this.highestPriorityPage = view.renderingId; + var continueRendering = function () { + this.renderHighestPriority(); + }.bind(this); + view.draw().then(continueRendering, continueRendering); + break; + } + return true; + } + }; + return PDFRenderingQueue; +}(); +exports.RenderingStates = RenderingStates; +exports.PDFRenderingQueue = PDFRenderingQueue; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.SimpleLinkService = exports.PDFLinkService = undefined; + +var _dom_events = __w_pdfjs_require__(2); + +var _ui_utils = __w_pdfjs_require__(0); + var PageNumberRegExp = /^\d+$/; function isPageNumber(str) { return PageNumberRegExp.test(str); @@ -648,7 +779,7 @@ function isPageNumber(str) { var PDFLinkService = function PDFLinkServiceClosure() { function PDFLinkService(options) { options = options || {}; - this.eventBus = options.eventBus || domEvents.getGlobalEventBus(); + this.eventBus = options.eventBus || _dom_events.domEvents.getGlobalEventBus(); this.baseUrl = null; this.pdfDocument = null; this.pdfViewer = null; @@ -746,7 +877,7 @@ var PDFLinkService = function PDFLinkServiceClosure() { setHash: function PDFLinkService_setHash(hash) { var pageNumber, dest; if (hash.indexOf('=') >= 0) { - var params = parseQueryString(hash); + var params = (0, _ui_utils.parseQueryString)(hash); if ('search' in params) { this.eventBus.dispatch('findfromurlhash', { source: this, @@ -954,586 +1085,2071 @@ exports.PDFLinkService = PDFLinkService; exports.SimpleLinkService = SimpleLinkService; /***/ }), -/* 4 */ +/* 5 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; -var uiUtils = __w_pdfjs_require__(1); -var pdfLinkService = __w_pdfjs_require__(3); -var pdfjsLib = __w_pdfjs_require__(0); -var mozL10n = uiUtils.mozL10n; -var SimpleLinkService = pdfLinkService.SimpleLinkService; -var AnnotationLayerBuilder = function AnnotationLayerBuilderClosure() { - function AnnotationLayerBuilder(options) { - this.pageDiv = options.pageDiv; - this.pdfPage = options.pdfPage; - this.renderInteractiveForms = options.renderInteractiveForms; - this.linkService = options.linkService; - this.downloadManager = options.downloadManager; - this.div = null; - } - AnnotationLayerBuilder.prototype = { - render: function AnnotationLayerBuilder_render(viewport, intent) { - var self = this; - var parameters = { intent: intent === undefined ? 'display' : intent }; - this.pdfPage.getAnnotations(parameters).then(function (annotations) { - viewport = viewport.clone({ dontFlip: true }); - parameters = { - viewport: viewport, - div: self.div, - annotations: annotations, - page: self.pdfPage, - renderInteractiveForms: self.renderInteractiveForms, - linkService: self.linkService, - downloadManager: self.downloadManager - }; - if (self.div) { - pdfjsLib.AnnotationLayer.update(parameters); - } else { - if (annotations.length === 0) { - return; - } - self.div = document.createElement('div'); - self.div.className = 'annotationLayer'; - self.pageDiv.appendChild(self.div); - parameters.div = self.div; - pdfjsLib.AnnotationLayer.render(parameters); - if (typeof mozL10n !== 'undefined') { - mozL10n.translate(self.div); - } - } - }); - }, - hide: function AnnotationLayerBuilder_hide() { - if (!this.div) { - return; - } - this.div.setAttribute('hidden', 'true'); - } - }; - return AnnotationLayerBuilder; -}(); -function DefaultAnnotationLayerFactory() {} -DefaultAnnotationLayerFactory.prototype = { - createAnnotationLayerBuilder: function (pageDiv, pdfPage, renderInteractiveForms) { - return new AnnotationLayerBuilder({ - pageDiv: pageDiv, - pdfPage: pdfPage, - renderInteractiveForms: renderInteractiveForms, - linkService: new SimpleLinkService() - }); - } -}; -exports.AnnotationLayerBuilder = AnnotationLayerBuilder; -exports.DefaultAnnotationLayerFactory = DefaultAnnotationLayerFactory; - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __w_pdfjs_require__) { - -"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFFindController = exports.FindStates = undefined; +var _ui_utils = __w_pdfjs_require__(0); -var uiUtils = __w_pdfjs_require__(1); -var pdfRenderingQueue = __w_pdfjs_require__(7); -var domEvents = __w_pdfjs_require__(2); -var pdfjsLib = __w_pdfjs_require__(0); -var CSS_UNITS = uiUtils.CSS_UNITS; -var DEFAULT_SCALE = uiUtils.DEFAULT_SCALE; -var getOutputScale = uiUtils.getOutputScale; -var approximateFraction = uiUtils.approximateFraction; -var roundToDivide = uiUtils.roundToDivide; -var RendererType = uiUtils.RendererType; -var RenderingStates = pdfRenderingQueue.RenderingStates; -var TEXT_LAYER_RENDER_DELAY = 200; -var PDFPageView = function PDFPageViewClosure() { - function PDFPageView(options) { - var container = options.container; - var id = options.id; - var scale = options.scale; - var defaultViewport = options.defaultViewport; - var renderingQueue = options.renderingQueue; - var textLayerFactory = options.textLayerFactory; - var annotationLayerFactory = options.annotationLayerFactory; - var enhanceTextSelection = options.enhanceTextSelection || false; - var renderInteractiveForms = options.renderInteractiveForms || false; - this.id = id; - this.renderingId = 'page' + id; - this.pageLabel = null; - this.rotation = 0; - this.scale = scale || DEFAULT_SCALE; - this.viewport = defaultViewport; - this.pdfPageRotate = defaultViewport.rotation; - this.hasRestrictedScaling = false; - this.enhanceTextSelection = enhanceTextSelection; - this.renderInteractiveForms = renderInteractiveForms; - this.eventBus = options.eventBus || domEvents.getGlobalEventBus(); - this.renderingQueue = renderingQueue; - this.textLayerFactory = textLayerFactory; - this.annotationLayerFactory = annotationLayerFactory; - this.renderer = options.renderer || RendererType.CANVAS; - this.paintTask = null; - this.paintedViewportMap = new WeakMap(); - this.renderingState = RenderingStates.INITIAL; - this.resume = null; - this.error = null; - this.onBeforeDraw = null; - this.onAfterDraw = null; - this.textLayer = null; - this.zoomLayer = null; - this.annotationLayer = null; - var div = document.createElement('div'); - div.className = 'page'; - div.style.width = Math.floor(this.viewport.width) + 'px'; - div.style.height = Math.floor(this.viewport.height) + 'px'; - div.setAttribute('data-page-number', this.id); - this.div = div; - container.appendChild(div); +var FindStates = { + FIND_FOUND: 0, + FIND_NOTFOUND: 1, + FIND_WRAPPED: 2, + FIND_PENDING: 3 +}; +var FIND_SCROLL_OFFSET_TOP = -50; +var FIND_SCROLL_OFFSET_LEFT = -400; +var CHARACTERS_TO_NORMALIZE = { + '\u2018': '\'', + '\u2019': '\'', + '\u201A': '\'', + '\u201B': '\'', + '\u201C': '"', + '\u201D': '"', + '\u201E': '"', + '\u201F': '"', + '\u00BC': '1/4', + '\u00BD': '1/2', + '\u00BE': '3/4' +}; +var PDFFindController = function PDFFindControllerClosure() { + function PDFFindController(options) { + this.pdfViewer = options.pdfViewer || null; + this.onUpdateResultsCount = null; + this.onUpdateState = null; + this.reset(); + var replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(''); + this.normalizationRegex = new RegExp('[' + replace + ']', 'g'); } - PDFPageView.prototype = { - setPdfPage: function PDFPageView_setPdfPage(pdfPage) { - this.pdfPage = pdfPage; - this.pdfPageRotate = pdfPage.rotate; - var totalRotation = (this.rotation + this.pdfPageRotate) % 360; - this.viewport = pdfPage.getViewport(this.scale * CSS_UNITS, totalRotation); - this.stats = pdfPage.stats; - this.reset(); - }, - destroy: function PDFPageView_destroy() { - this.reset(); - if (this.pdfPage) { - this.pdfPage.cleanup(); - } + PDFFindController.prototype = { + reset: function PDFFindController_reset() { + this.startedTextExtraction = false; + this.extractTextPromises = []; + this.pendingFindMatches = Object.create(null); + this.active = false; + this.pageContents = []; + this.pageMatches = []; + this.pageMatchesLength = null; + this.matchCount = 0; + this.selected = { + pageIdx: -1, + matchIdx: -1 + }; + this.offset = { + pageIdx: null, + matchIdx: null + }; + this.pagesToSearch = null; + this.resumePageIdx = null; + this.state = null; + this.dirtyMatch = false; + this.findTimeout = null; + this.firstPagePromise = new Promise(function (resolve) { + this.resolveFirstPage = resolve; + }.bind(this)); }, - _resetZoomLayer: function (removeFromDOM) { - if (!this.zoomLayer) { - return; - } - var zoomLayerCanvas = this.zoomLayer.firstChild; - this.paintedViewportMap.delete(zoomLayerCanvas); - zoomLayerCanvas.width = 0; - zoomLayerCanvas.height = 0; - if (removeFromDOM) { - this.zoomLayer.remove(); - } - this.zoomLayer = null; + normalize: function PDFFindController_normalize(text) { + return text.replace(this.normalizationRegex, function (ch) { + return CHARACTERS_TO_NORMALIZE[ch]; + }); }, - reset: function PDFPageView_reset(keepZoomLayer, keepAnnotations) { - this.cancelRendering(); - var div = this.div; - div.style.width = Math.floor(this.viewport.width) + 'px'; - div.style.height = Math.floor(this.viewport.height) + 'px'; - var childNodes = div.childNodes; - var currentZoomLayerNode = keepZoomLayer && this.zoomLayer || null; - var currentAnnotationNode = keepAnnotations && this.annotationLayer && this.annotationLayer.div || null; - for (var i = childNodes.length - 1; i >= 0; i--) { - var node = childNodes[i]; - if (currentZoomLayerNode === node || currentAnnotationNode === node) { - continue; + _prepareMatches: function PDFFindController_prepareMatches(matchesWithLength, matches, matchesLength) { + function isSubTerm(matchesWithLength, currentIndex) { + var currentElem, prevElem, nextElem; + currentElem = matchesWithLength[currentIndex]; + nextElem = matchesWithLength[currentIndex + 1]; + if (currentIndex < matchesWithLength.length - 1 && currentElem.match === nextElem.match) { + currentElem.skipped = true; + return true; } - div.removeChild(node); - } - div.removeAttribute('data-loaded'); - if (currentAnnotationNode) { - this.annotationLayer.hide(); - } else { - this.annotationLayer = null; - } - if (!currentZoomLayerNode) { - if (this.canvas) { - this.paintedViewportMap.delete(this.canvas); - this.canvas.width = 0; - this.canvas.height = 0; - delete this.canvas; + for (var i = currentIndex - 1; i >= 0; i--) { + prevElem = matchesWithLength[i]; + if (prevElem.skipped) { + continue; + } + if (prevElem.match + prevElem.matchLength < currentElem.match) { + break; + } + if (prevElem.match + prevElem.matchLength >= currentElem.match + currentElem.matchLength) { + currentElem.skipped = true; + return true; + } } - this._resetZoomLayer(); - } - if (this.svg) { - this.paintedViewportMap.delete(this.svg); - delete this.svg; - } - this.loadingIconDiv = document.createElement('div'); - this.loadingIconDiv.className = 'loadingIcon'; - div.appendChild(this.loadingIconDiv); - }, - update: function PDFPageView_update(scale, rotation) { - this.scale = scale || this.scale; - if (typeof rotation !== 'undefined') { - this.rotation = rotation; + return false; } - var totalRotation = (this.rotation + this.pdfPageRotate) % 360; - this.viewport = this.viewport.clone({ - scale: this.scale * CSS_UNITS, - rotation: totalRotation + var i, len; + matchesWithLength.sort(function (a, b) { + return a.match === b.match ? a.matchLength - b.matchLength : a.match - b.match; }); - if (this.svg) { - this.cssTransform(this.svg, true); - this.eventBus.dispatch('pagerendered', { - source: this, - pageNumber: this.id, - cssTransform: true - }); - return; + for (i = 0, len = matchesWithLength.length; i < len; i++) { + if (isSubTerm(matchesWithLength, i)) { + continue; + } + matches.push(matchesWithLength[i].match); + matchesLength.push(matchesWithLength[i].matchLength); } - var isScalingRestricted = false; - if (this.canvas && pdfjsLib.PDFJS.maxCanvasPixels > 0) { - var outputScale = this.outputScale; - if ((Math.floor(this.viewport.width) * outputScale.sx | 0) * (Math.floor(this.viewport.height) * outputScale.sy | 0) > pdfjsLib.PDFJS.maxCanvasPixels) { - isScalingRestricted = true; + }, + calcFindPhraseMatch: function PDFFindController_calcFindPhraseMatch(query, pageIndex, pageContent) { + var matches = []; + var queryLen = query.length; + var matchIdx = -queryLen; + while (true) { + matchIdx = pageContent.indexOf(query, matchIdx + queryLen); + if (matchIdx === -1) { + break; } + matches.push(matchIdx); } - if (this.canvas) { - if (pdfjsLib.PDFJS.useOnlyCssZoom || this.hasRestrictedScaling && isScalingRestricted) { - this.cssTransform(this.canvas, true); - this.eventBus.dispatch('pagerendered', { - source: this, - pageNumber: this.id, - cssTransform: true + this.pageMatches[pageIndex] = matches; + }, + calcFindWordMatch: function PDFFindController_calcFindWordMatch(query, pageIndex, pageContent) { + var matchesWithLength = []; + var queryArray = query.match(/\S+/g); + var subquery, subqueryLen, matchIdx; + for (var i = 0, len = queryArray.length; i < len; i++) { + subquery = queryArray[i]; + subqueryLen = subquery.length; + matchIdx = -subqueryLen; + while (true) { + matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen); + if (matchIdx === -1) { + break; + } + matchesWithLength.push({ + match: matchIdx, + matchLength: subqueryLen, + skipped: false }); - return; - } - if (!this.zoomLayer) { - this.zoomLayer = this.canvas.parentNode; - this.zoomLayer.style.position = 'absolute'; } } - if (this.zoomLayer) { - this.cssTransform(this.zoomLayer.firstChild); + if (!this.pageMatchesLength) { + this.pageMatchesLength = []; } - this.reset(true, true); + this.pageMatchesLength[pageIndex] = []; + this.pageMatches[pageIndex] = []; + this._prepareMatches(matchesWithLength, this.pageMatches[pageIndex], this.pageMatchesLength[pageIndex]); }, - cancelRendering: function PDFPageView_cancelRendering() { - if (this.paintTask) { - this.paintTask.cancel(); - this.paintTask = null; + calcFindMatch: function PDFFindController_calcFindMatch(pageIndex) { + var pageContent = this.normalize(this.pageContents[pageIndex]); + var query = this.normalize(this.state.query); + var caseSensitive = this.state.caseSensitive; + var phraseSearch = this.state.phraseSearch; + var queryLen = query.length; + if (queryLen === 0) { + return; } - this.renderingState = RenderingStates.INITIAL; - this.resume = null; - if (this.textLayer) { - this.textLayer.cancel(); - this.textLayer = null; + if (!caseSensitive) { + pageContent = pageContent.toLowerCase(); + query = query.toLowerCase(); } - }, - updatePosition: function PDFPageView_updatePosition() { - if (this.textLayer) { - this.textLayer.render(TEXT_LAYER_RENDER_DELAY); + if (phraseSearch) { + this.calcFindPhraseMatch(query, pageIndex, pageContent); + } else { + this.calcFindWordMatch(query, pageIndex, pageContent); } - }, - cssTransform: function PDFPageView_transform(target, redrawAnnotations) { - var CustomStyle = pdfjsLib.CustomStyle; - var width = this.viewport.width; - var height = this.viewport.height; - var div = this.div; - target.style.width = target.parentNode.style.width = div.style.width = Math.floor(width) + 'px'; - target.style.height = target.parentNode.style.height = div.style.height = Math.floor(height) + 'px'; - var relativeRotation = this.viewport.rotation - this.paintedViewportMap.get(target).rotation; - var absRotation = Math.abs(relativeRotation); - var scaleX = 1, - scaleY = 1; - if (absRotation === 90 || absRotation === 270) { - scaleX = height / width; - scaleY = width / height; - } - var cssTransform = 'rotate(' + relativeRotation + 'deg) ' + 'scale(' + scaleX + ',' + scaleY + ')'; - CustomStyle.setProp('transform', target, cssTransform); - if (this.textLayer) { - var textLayerViewport = this.textLayer.viewport; - var textRelativeRotation = this.viewport.rotation - textLayerViewport.rotation; - var textAbsRotation = Math.abs(textRelativeRotation); - var scale = width / textLayerViewport.width; - if (textAbsRotation === 90 || textAbsRotation === 270) { - scale = width / textLayerViewport.height; - } - var textLayerDiv = this.textLayer.textLayerDiv; - var transX, transY; - switch (textAbsRotation) { - case 0: - transX = transY = 0; - break; - case 90: - transX = 0; - transY = '-' + textLayerDiv.style.height; - break; - case 180: - transX = '-' + textLayerDiv.style.width; - transY = '-' + textLayerDiv.style.height; - break; - case 270: - transX = '-' + textLayerDiv.style.width; - transY = 0; - break; - default: - console.error('Bad rotation value.'); - break; - } - CustomStyle.setProp('transform', textLayerDiv, 'rotate(' + textAbsRotation + 'deg) ' + 'scale(' + scale + ', ' + scale + ') ' + 'translate(' + transX + ', ' + transY + ')'); - CustomStyle.setProp('transformOrigin', textLayerDiv, '0% 0%'); + this.updatePage(pageIndex); + if (this.resumePageIdx === pageIndex) { + this.resumePageIdx = null; + this.nextPageMatch(); } - if (redrawAnnotations && this.annotationLayer) { - this.annotationLayer.render(this.viewport, 'display'); + if (this.pageMatches[pageIndex].length > 0) { + this.matchCount += this.pageMatches[pageIndex].length; + this.updateUIResultsCount(); } }, - get width() { - return this.viewport.width; - }, - get height() { - return this.viewport.height; - }, - getPagePoint: function PDFPageView_getPagePoint(x, y) { - return this.viewport.convertToPdfPoint(x, y); - }, - draw: function PDFPageView_draw() { - if (this.renderingState !== RenderingStates.INITIAL) { - console.error('Must be in new state before drawing'); - this.reset(); + extractText: function PDFFindController_extractText() { + if (this.startedTextExtraction) { + return; + } + this.startedTextExtraction = true; + this.pageContents = []; + var extractTextPromisesResolves = []; + var numPages = this.pdfViewer.pagesCount; + for (var i = 0; i < numPages; i++) { + this.extractTextPromises.push(new Promise(function (resolve) { + extractTextPromisesResolves.push(resolve); + })); } - this.renderingState = RenderingStates.RUNNING; var self = this; - var pdfPage = this.pdfPage; - var div = this.div; - var canvasWrapper = document.createElement('div'); - canvasWrapper.style.width = div.style.width; - canvasWrapper.style.height = div.style.height; - canvasWrapper.classList.add('canvasWrapper'); - if (this.annotationLayer && this.annotationLayer.div) { - div.insertBefore(canvasWrapper, this.annotationLayer.div); - } else { - div.appendChild(canvasWrapper); + function extractPageText(pageIndex) { + self.pdfViewer.getPageTextContent(pageIndex).then(function textContentResolved(textContent) { + var textItems = textContent.items; + var str = []; + for (var i = 0, len = textItems.length; i < len; i++) { + str.push(textItems[i].str); + } + self.pageContents.push(str.join('')); + extractTextPromisesResolves[pageIndex](pageIndex); + if (pageIndex + 1 < self.pdfViewer.pagesCount) { + extractPageText(pageIndex + 1); + } + }); } - var textLayerDiv = null; - var textLayer = null; - if (this.textLayerFactory) { - textLayerDiv = document.createElement('div'); - textLayerDiv.className = 'textLayer'; - textLayerDiv.style.width = canvasWrapper.style.width; - textLayerDiv.style.height = canvasWrapper.style.height; - if (this.annotationLayer && this.annotationLayer.div) { - div.insertBefore(textLayerDiv, this.annotationLayer.div); + extractPageText(0); + }, + executeCommand: function PDFFindController_executeCommand(cmd, state) { + if (this.state === null || cmd !== 'findagain') { + this.dirtyMatch = true; + } + this.state = state; + this.updateUIState(FindStates.FIND_PENDING); + this.firstPagePromise.then(function () { + this.extractText(); + clearTimeout(this.findTimeout); + if (cmd === 'find') { + this.findTimeout = setTimeout(this.nextMatch.bind(this), 250); } else { - div.appendChild(textLayerDiv); + this.nextMatch(); } - textLayer = this.textLayerFactory.createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport, this.enhanceTextSelection); + }.bind(this)); + }, + updatePage: function PDFFindController_updatePage(index) { + if (this.selected.pageIdx === index) { + this.pdfViewer.currentPageNumber = index + 1; } - this.textLayer = textLayer; - var renderContinueCallback = null; - if (this.renderingQueue) { - renderContinueCallback = function renderContinueCallback(cont) { - if (!self.renderingQueue.isHighestPriority(self)) { - self.renderingState = RenderingStates.PAUSED; - self.resume = function resumeCallback() { - self.renderingState = RenderingStates.RUNNING; - cont(); - }; - return; - } - cont(); - }; + var page = this.pdfViewer.getPageView(index); + if (page.textLayer) { + page.textLayer.updateMatches(); } - var finishPaintTask = function finishPaintTask(error) { - if (paintTask === self.paintTask) { - self.paintTask = null; - } - if (error === 'cancelled' || error instanceof pdfjsLib.RenderingCancelledException) { - self.error = null; - return Promise.resolve(undefined); - } - self.renderingState = RenderingStates.FINISHED; - if (self.loadingIconDiv) { - div.removeChild(self.loadingIconDiv); - delete self.loadingIconDiv; - } - self._resetZoomLayer(true); - self.error = error; - self.stats = pdfPage.stats; - if (self.onAfterDraw) { - self.onAfterDraw(); - } - self.eventBus.dispatch('pagerendered', { - source: self, - pageNumber: self.id, - cssTransform: false - }); - if (error) { - return Promise.reject(error); - } - return Promise.resolve(undefined); - }; - var paintTask = this.renderer === RendererType.SVG ? this.paintOnSvg(canvasWrapper) : this.paintOnCanvas(canvasWrapper); - paintTask.onRenderContinue = renderContinueCallback; - this.paintTask = paintTask; - var resultPromise = paintTask.promise.then(function () { - return finishPaintTask(null).then(function () { - if (textLayer) { - pdfPage.getTextContent({ normalizeWhitespace: true }).then(function textContentResolved(textContent) { - textLayer.setTextContent(textContent); - textLayer.render(TEXT_LAYER_RENDER_DELAY); + }, + nextMatch: function PDFFindController_nextMatch() { + var previous = this.state.findPrevious; + var currentPageIndex = this.pdfViewer.currentPageNumber - 1; + var numPages = this.pdfViewer.pagesCount; + this.active = true; + if (this.dirtyMatch) { + this.dirtyMatch = false; + this.selected.pageIdx = this.selected.matchIdx = -1; + this.offset.pageIdx = currentPageIndex; + this.offset.matchIdx = null; + this.hadMatch = false; + this.resumePageIdx = null; + this.pageMatches = []; + this.matchCount = 0; + this.pageMatchesLength = null; + var self = this; + for (var i = 0; i < numPages; i++) { + this.updatePage(i); + if (!(i in this.pendingFindMatches)) { + this.pendingFindMatches[i] = true; + this.extractTextPromises[i].then(function (pageIdx) { + delete self.pendingFindMatches[pageIdx]; + self.calcFindMatch(pageIdx); }); } - }); - }, function (reason) { - return finishPaintTask(reason); - }); - if (this.annotationLayerFactory) { - if (!this.annotationLayer) { - this.annotationLayer = this.annotationLayerFactory.createAnnotationLayerBuilder(div, pdfPage, this.renderInteractiveForms); } - this.annotationLayer.render(this.viewport, 'display'); } - div.setAttribute('data-loaded', true); - if (this.onBeforeDraw) { - this.onBeforeDraw(); + if (this.state.query === '') { + this.updateUIState(FindStates.FIND_FOUND); + return; } - return resultPromise; - }, - paintOnCanvas: function (canvasWrapper) { - var resolveRenderPromise, rejectRenderPromise; - var promise = new Promise(function (resolve, reject) { - resolveRenderPromise = resolve; - rejectRenderPromise = reject; - }); - var result = { - promise: promise, - onRenderContinue: function (cont) { - cont(); - }, - cancel: function () { - renderTask.cancel(); + if (this.resumePageIdx) { + return; + } + var offset = this.offset; + this.pagesToSearch = numPages; + if (offset.matchIdx !== null) { + var numPageMatches = this.pageMatches[offset.pageIdx].length; + if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) { + this.hadMatch = true; + offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1; + this.updateMatch(true); + return; } - }; - var viewport = this.viewport; - var canvas = document.createElement('canvas'); - canvas.id = 'page' + this.id; - canvas.setAttribute('hidden', 'hidden'); - var isCanvasHidden = true; - var showCanvas = function () { - if (isCanvasHidden) { - canvas.removeAttribute('hidden'); - isCanvasHidden = false; + this.advanceOffsetPage(previous); + } + this.nextPageMatch(); + }, + matchesReady: function PDFFindController_matchesReady(matches) { + var offset = this.offset; + var numMatches = matches.length; + var previous = this.state.findPrevious; + if (numMatches) { + this.hadMatch = true; + offset.matchIdx = previous ? numMatches - 1 : 0; + this.updateMatch(true); + return true; + } + this.advanceOffsetPage(previous); + if (offset.wrapped) { + offset.matchIdx = null; + if (this.pagesToSearch < 0) { + this.updateMatch(false); + return true; } - }; - canvasWrapper.appendChild(canvas); - this.canvas = canvas; - canvas.mozOpaque = true; - var ctx = canvas.getContext('2d', { alpha: false }); - var outputScale = getOutputScale(ctx); - this.outputScale = outputScale; - if (pdfjsLib.PDFJS.useOnlyCssZoom) { - var actualSizeViewport = viewport.clone({ scale: CSS_UNITS }); - outputScale.sx *= actualSizeViewport.width / viewport.width; - outputScale.sy *= actualSizeViewport.height / viewport.height; - outputScale.scaled = true; } - if (pdfjsLib.PDFJS.maxCanvasPixels > 0) { - var pixelsInViewport = viewport.width * viewport.height; - var maxScale = Math.sqrt(pdfjsLib.PDFJS.maxCanvasPixels / pixelsInViewport); - if (outputScale.sx > maxScale || outputScale.sy > maxScale) { - outputScale.sx = maxScale; - outputScale.sy = maxScale; - outputScale.scaled = true; - this.hasRestrictedScaling = true; - } else { - this.hasRestrictedScaling = false; + return false; + }, + updateMatchPosition: function PDFFindController_updateMatchPosition(pageIndex, index, elements, beginIdx) { + if (this.selected.matchIdx === index && this.selected.pageIdx === pageIndex) { + var spot = { + top: FIND_SCROLL_OFFSET_TOP, + left: FIND_SCROLL_OFFSET_LEFT + }; + (0, _ui_utils.scrollIntoView)(elements[beginIdx], spot, true); + } + }, + nextPageMatch: function PDFFindController_nextPageMatch() { + if (this.resumePageIdx !== null) { + console.error('There can only be one pending page.'); + } + do { + var pageIdx = this.offset.pageIdx; + var matches = this.pageMatches[pageIdx]; + if (!matches) { + this.resumePageIdx = pageIdx; + break; + } + } while (!this.matchesReady(matches)); + }, + advanceOffsetPage: function PDFFindController_advanceOffsetPage(previous) { + var offset = this.offset; + var numPages = this.extractTextPromises.length; + offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1; + offset.matchIdx = null; + this.pagesToSearch--; + if (offset.pageIdx >= numPages || offset.pageIdx < 0) { + offset.pageIdx = previous ? numPages - 1 : 0; + offset.wrapped = true; + } + }, + updateMatch: function PDFFindController_updateMatch(found) { + var state = FindStates.FIND_NOTFOUND; + var wrapped = this.offset.wrapped; + this.offset.wrapped = false; + if (found) { + var previousPage = this.selected.pageIdx; + this.selected.pageIdx = this.offset.pageIdx; + this.selected.matchIdx = this.offset.matchIdx; + state = wrapped ? FindStates.FIND_WRAPPED : FindStates.FIND_FOUND; + if (previousPage !== -1 && previousPage !== this.selected.pageIdx) { + this.updatePage(previousPage); } } - var sfx = approximateFraction(outputScale.sx); - var sfy = approximateFraction(outputScale.sy); - canvas.width = roundToDivide(viewport.width * outputScale.sx, sfx[0]); - canvas.height = roundToDivide(viewport.height * outputScale.sy, sfy[0]); - canvas.style.width = roundToDivide(viewport.width, sfx[1]) + 'px'; - canvas.style.height = roundToDivide(viewport.height, sfy[1]) + 'px'; - this.paintedViewportMap.set(canvas, viewport); - var transform = !outputScale.scaled ? null : [outputScale.sx, 0, 0, outputScale.sy, 0, 0]; - var renderContext = { - canvasContext: ctx, - transform: transform, - viewport: this.viewport, - renderInteractiveForms: this.renderInteractiveForms + this.updateUIState(state, this.state.findPrevious); + if (this.selected.pageIdx !== -1) { + this.updatePage(this.selected.pageIdx); + } + }, + updateUIResultsCount: function PDFFindController_updateUIResultsCount() { + if (this.onUpdateResultsCount) { + this.onUpdateResultsCount(this.matchCount); + } + }, + updateUIState: function PDFFindController_updateUIState(state, previous) { + if (this.onUpdateState) { + this.onUpdateState(state, previous, this.matchCount); + } + } + }; + return PDFFindController; +}(); +exports.FindStates = FindStates; +exports.PDFFindController = PDFFindController; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var OverlayManager = { + overlays: {}, + active: null, + register: function overlayManagerRegister(name, element, callerCloseMethod, canForceClose) { + return new Promise(function (resolve) { + var container; + if (!name || !element || !(container = element.parentNode)) { + throw new Error('Not enough parameters.'); + } else if (this.overlays[name]) { + throw new Error('The overlay is already registered.'); + } + this.overlays[name] = { + element: element, + container: container, + callerCloseMethod: callerCloseMethod || null, + canForceClose: canForceClose || false }; - var renderTask = this.pdfPage.render(renderContext); - renderTask.onContinue = function (cont) { - showCanvas(); - if (result.onRenderContinue) { - result.onRenderContinue(cont); + resolve(); + }.bind(this)); + }, + unregister: function overlayManagerUnregister(name) { + return new Promise(function (resolve) { + if (!this.overlays[name]) { + throw new Error('The overlay does not exist.'); + } else if (this.active === name) { + throw new Error('The overlay cannot be removed while it is active.'); + } + delete this.overlays[name]; + resolve(); + }.bind(this)); + }, + open: function overlayManagerOpen(name) { + return new Promise(function (resolve) { + if (!this.overlays[name]) { + throw new Error('The overlay does not exist.'); + } else if (this.active) { + if (this.overlays[name].canForceClose) { + this._closeThroughCaller(); + } else if (this.active === name) { + throw new Error('The overlay is already active.'); } else { - cont(); + throw new Error('Another overlay is currently active.'); } - }; - renderTask.promise.then(function pdfPageRenderCallback() { - showCanvas(); - resolveRenderPromise(undefined); - }, function pdfPageRenderError(error) { - showCanvas(); - rejectRenderPromise(error); - }); - return result; - }, - paintOnSvg: function PDFPageView_paintOnSvg(wrapper) { - var cancelled = false; - var ensureNotCancelled = function () { - if (cancelled) { - if (pdfjsLib.PDFJS.pdfjsNext) { - throw new pdfjsLib.RenderingCancelledException('Rendering cancelled, page ' + self.id, 'svg'); - } else { - throw 'cancelled'; + } + this.active = name; + this.overlays[this.active].element.classList.remove('hidden'); + this.overlays[this.active].container.classList.remove('hidden'); + window.addEventListener('keydown', this._keyDown); + resolve(); + }.bind(this)); + }, + close: function overlayManagerClose(name) { + return new Promise(function (resolve) { + if (!this.overlays[name]) { + throw new Error('The overlay does not exist.'); + } else if (!this.active) { + throw new Error('The overlay is currently not active.'); + } else if (this.active !== name) { + throw new Error('Another overlay is currently active.'); + } + this.overlays[this.active].container.classList.add('hidden'); + this.overlays[this.active].element.classList.add('hidden'); + this.active = null; + window.removeEventListener('keydown', this._keyDown); + resolve(); + }.bind(this)); + }, + _keyDown: function overlayManager_keyDown(evt) { + var self = OverlayManager; + if (self.active && evt.keyCode === 27) { + self._closeThroughCaller(); + evt.preventDefault(); + } + }, + _closeThroughCaller: function overlayManager_closeThroughCaller() { + if (this.overlays[this.active].callerCloseMethod) { + this.overlays[this.active].callerCloseMethod(); + } + if (this.active) { + this.close(this.active); + } + } +}; +exports.OverlayManager = OverlayManager; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.DefaultAnnotationLayerFactory = exports.AnnotationLayerBuilder = undefined; + +var _pdfjs = __w_pdfjs_require__(1); + +var _ui_utils = __w_pdfjs_require__(0); + +var _pdf_link_service = __w_pdfjs_require__(4); + +var AnnotationLayerBuilder = function AnnotationLayerBuilderClosure() { + function AnnotationLayerBuilder(options) { + this.pageDiv = options.pageDiv; + this.pdfPage = options.pdfPage; + this.renderInteractiveForms = options.renderInteractiveForms; + this.linkService = options.linkService; + this.downloadManager = options.downloadManager; + this.div = null; + } + AnnotationLayerBuilder.prototype = { + render: function AnnotationLayerBuilder_render(viewport, intent) { + var self = this; + var parameters = { intent: intent === undefined ? 'display' : intent }; + this.pdfPage.getAnnotations(parameters).then(function (annotations) { + viewport = viewport.clone({ dontFlip: true }); + parameters = { + viewport: viewport, + div: self.div, + annotations: annotations, + page: self.pdfPage, + renderInteractiveForms: self.renderInteractiveForms, + linkService: self.linkService, + downloadManager: self.downloadManager + }; + if (self.div) { + _pdfjs.AnnotationLayer.update(parameters); + } else { + if (annotations.length === 0) { + return; + } + self.div = document.createElement('div'); + self.div.className = 'annotationLayer'; + self.pageDiv.appendChild(self.div); + parameters.div = self.div; + _pdfjs.AnnotationLayer.render(parameters); + if (typeof _ui_utils.mozL10n !== 'undefined') { + _ui_utils.mozL10n.translate(self.div); } } - }; - var self = this; - var pdfPage = this.pdfPage; - var SVGGraphics = pdfjsLib.SVGGraphics; - var actualSizeViewport = this.viewport.clone({ scale: CSS_UNITS }); - var promise = pdfPage.getOperatorList().then(function (opList) { - ensureNotCancelled(); - var svgGfx = new SVGGraphics(pdfPage.commonObjs, pdfPage.objs); - return svgGfx.getSVG(opList, actualSizeViewport).then(function (svg) { - ensureNotCancelled(); - self.svg = svg; - self.paintedViewportMap.set(svg, actualSizeViewport); - svg.style.width = wrapper.style.width; - svg.style.height = wrapper.style.height; - self.renderingState = RenderingStates.FINISHED; - wrapper.appendChild(svg); - }); }); - return { - promise: promise, - onRenderContinue: function (cont) { - cont(); - }, - cancel: function () { - cancelled = true; - } - }; }, - setPageLabel: function PDFView_setPageLabel(label) { - this.pageLabel = typeof label === 'string' ? label : null; - if (this.pageLabel !== null) { - this.div.setAttribute('data-page-label', this.pageLabel); - } else { - this.div.removeAttribute('data-page-label'); + hide: function AnnotationLayerBuilder_hide() { + if (!this.div) { + return; + } + this.div.setAttribute('hidden', 'true'); + } + }; + return AnnotationLayerBuilder; +}(); +function DefaultAnnotationLayerFactory() {} +DefaultAnnotationLayerFactory.prototype = { + createAnnotationLayerBuilder: function (pageDiv, pdfPage, renderInteractiveForms) { + return new AnnotationLayerBuilder({ + pageDiv: pageDiv, + pdfPage: pdfPage, + renderInteractiveForms: renderInteractiveForms, + linkService: new _pdf_link_service.SimpleLinkService() + }); + } +}; +exports.AnnotationLayerBuilder = AnnotationLayerBuilder; +exports.DefaultAnnotationLayerFactory = DefaultAnnotationLayerFactory; + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFHistory = undefined; + +var _dom_events = __w_pdfjs_require__(2); + +function PDFHistory(options) { + this.linkService = options.linkService; + this.eventBus = options.eventBus || _dom_events.domEvents.getGlobalEventBus(); + this.initialized = false; + this.initialDestination = null; + this.initialBookmark = null; +} +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; + } + 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; + } + this._pushOrReplaceState({ fingerprint: this.fingerprint }, true); + } + var self = this; + window.addEventListener('popstate', function pdfHistoryPopstate(evt) { + if (!self.historyUnlocked) { + return; + } + if (evt.state) { + self._goTo(evt.state); + 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(); + } + }); + 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(); + } + } + 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; + } + if (isInitialBookmark) { + var target = window.history.state.target; + if (!target) { + this._pushToHistory(params, false); + this.previousHash = window.location.hash.substring(1); + } + this.updatePreviousBookmark = this.nextHashParam ? false : true; + if (target) { + this._updatePreviousBookmark(); + } + return; + } + if (this.nextHashParam) { + if (this.nextHashParam === params.hash) { + this.nextHashParam = null; + this.updatePreviousBookmark = true; + return; + } + this.nextHashParam = null; + } + 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; + } + } else { + this._pushToHistory(params, true); + } + } 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; + } + } else if (this.current.page || onlyCheckPage) { + if (this.previousPage === this.currentPage) { + return null; + } + } 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 (!params.hash && params.page) { + params.hash = 'page=' + params.page; + } + if (addPrevious && !overwrite) { + var previousParams = this._getPreviousParams(); + if (previousParams) { + var replacePrevious = !this.current.dest && this.current.hash !== this.previousHash; + this._pushToHistory(previousParams, false, replacePrevious); + } + } + 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; + } + 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(); + return; + } + } + this.historyUnlocked = false; + if (state.target.dest) { + this.linkService.navigateTo(state.target.dest); + } else { + this.linkService.setHash(state.target.hash); + } + this.currentUid = state.uid; + if (state.uid > this.uid) { + this.uid = state.uid; + } + this.current = state.target; + this.updatePreviousBookmark = true; + var currentHash = window.location.hash.substring(1); + if (this.previousHash !== currentHash) { + this.allowHashChange = 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(); + } + } + } +}; +exports.PDFHistory = PDFHistory; + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFPageView = undefined; + +var _ui_utils = __w_pdfjs_require__(0); + +var _pdfjs = __w_pdfjs_require__(1); + +var _dom_events = __w_pdfjs_require__(2); + +var _pdf_rendering_queue = __w_pdfjs_require__(3); + +var TEXT_LAYER_RENDER_DELAY = 200; +var PDFPageView = function PDFPageViewClosure() { + function PDFPageView(options) { + var container = options.container; + var id = options.id; + var scale = options.scale; + var defaultViewport = options.defaultViewport; + var renderingQueue = options.renderingQueue; + var textLayerFactory = options.textLayerFactory; + var annotationLayerFactory = options.annotationLayerFactory; + var enhanceTextSelection = options.enhanceTextSelection || false; + var renderInteractiveForms = options.renderInteractiveForms || false; + this.id = id; + this.renderingId = 'page' + id; + this.pageLabel = null; + this.rotation = 0; + this.scale = scale || _ui_utils.DEFAULT_SCALE; + this.viewport = defaultViewport; + this.pdfPageRotate = defaultViewport.rotation; + this.hasRestrictedScaling = false; + this.enhanceTextSelection = enhanceTextSelection; + this.renderInteractiveForms = renderInteractiveForms; + this.eventBus = options.eventBus || _dom_events.domEvents.getGlobalEventBus(); + this.renderingQueue = renderingQueue; + this.textLayerFactory = textLayerFactory; + this.annotationLayerFactory = annotationLayerFactory; + this.renderer = options.renderer || _ui_utils.RendererType.CANVAS; + this.paintTask = null; + this.paintedViewportMap = new WeakMap(); + this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; + this.resume = null; + this.error = null; + this.onBeforeDraw = null; + this.onAfterDraw = null; + this.textLayer = null; + this.zoomLayer = null; + this.annotationLayer = null; + var div = document.createElement('div'); + div.className = 'page'; + div.style.width = Math.floor(this.viewport.width) + 'px'; + div.style.height = Math.floor(this.viewport.height) + 'px'; + div.setAttribute('data-page-number', this.id); + this.div = div; + container.appendChild(div); + } + PDFPageView.prototype = { + setPdfPage: function PDFPageView_setPdfPage(pdfPage) { + this.pdfPage = pdfPage; + this.pdfPageRotate = pdfPage.rotate; + var totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = pdfPage.getViewport(this.scale * _ui_utils.CSS_UNITS, totalRotation); + this.stats = pdfPage.stats; + this.reset(); + }, + destroy: function PDFPageView_destroy() { + this.reset(); + if (this.pdfPage) { + this.pdfPage.cleanup(); + } + }, + _resetZoomLayer: function (removeFromDOM) { + if (!this.zoomLayer) { + return; + } + var zoomLayerCanvas = this.zoomLayer.firstChild; + this.paintedViewportMap.delete(zoomLayerCanvas); + zoomLayerCanvas.width = 0; + zoomLayerCanvas.height = 0; + if (removeFromDOM) { + this.zoomLayer.remove(); + } + this.zoomLayer = null; + }, + reset: function PDFPageView_reset(keepZoomLayer, keepAnnotations) { + this.cancelRendering(); + var div = this.div; + div.style.width = Math.floor(this.viewport.width) + 'px'; + div.style.height = Math.floor(this.viewport.height) + 'px'; + var childNodes = div.childNodes; + var currentZoomLayerNode = keepZoomLayer && this.zoomLayer || null; + var currentAnnotationNode = keepAnnotations && this.annotationLayer && this.annotationLayer.div || null; + for (var i = childNodes.length - 1; i >= 0; i--) { + var node = childNodes[i]; + if (currentZoomLayerNode === node || currentAnnotationNode === node) { + continue; + } + div.removeChild(node); + } + div.removeAttribute('data-loaded'); + if (currentAnnotationNode) { + this.annotationLayer.hide(); + } else { + this.annotationLayer = null; + } + if (!currentZoomLayerNode) { + if (this.canvas) { + this.paintedViewportMap.delete(this.canvas); + this.canvas.width = 0; + this.canvas.height = 0; + delete this.canvas; + } + this._resetZoomLayer(); + } + if (this.svg) { + this.paintedViewportMap.delete(this.svg); + delete this.svg; + } + this.loadingIconDiv = document.createElement('div'); + this.loadingIconDiv.className = 'loadingIcon'; + div.appendChild(this.loadingIconDiv); + }, + update: function PDFPageView_update(scale, rotation) { + this.scale = scale || this.scale; + if (typeof rotation !== 'undefined') { + this.rotation = rotation; + } + var totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = this.viewport.clone({ + scale: this.scale * _ui_utils.CSS_UNITS, + rotation: totalRotation + }); + if (this.svg) { + this.cssTransform(this.svg, true); + this.eventBus.dispatch('pagerendered', { + source: this, + pageNumber: this.id, + cssTransform: true + }); + return; + } + var isScalingRestricted = false; + if (this.canvas && _pdfjs.PDFJS.maxCanvasPixels > 0) { + var outputScale = this.outputScale; + if ((Math.floor(this.viewport.width) * outputScale.sx | 0) * (Math.floor(this.viewport.height) * outputScale.sy | 0) > _pdfjs.PDFJS.maxCanvasPixels) { + isScalingRestricted = true; + } + } + if (this.canvas) { + if (_pdfjs.PDFJS.useOnlyCssZoom || this.hasRestrictedScaling && isScalingRestricted) { + this.cssTransform(this.canvas, true); + this.eventBus.dispatch('pagerendered', { + source: this, + pageNumber: this.id, + cssTransform: true + }); + return; + } + if (!this.zoomLayer) { + this.zoomLayer = this.canvas.parentNode; + this.zoomLayer.style.position = 'absolute'; + } + } + if (this.zoomLayer) { + this.cssTransform(this.zoomLayer.firstChild); + } + this.reset(true, true); + }, + cancelRendering: function PDFPageView_cancelRendering() { + if (this.paintTask) { + this.paintTask.cancel(); + this.paintTask = null; + } + this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; + this.resume = null; + if (this.textLayer) { + this.textLayer.cancel(); + this.textLayer = null; + } + }, + updatePosition: function PDFPageView_updatePosition() { + if (this.textLayer) { + this.textLayer.render(TEXT_LAYER_RENDER_DELAY); + } + }, + cssTransform: function PDFPageView_transform(target, redrawAnnotations) { + var width = this.viewport.width; + var height = this.viewport.height; + var div = this.div; + target.style.width = target.parentNode.style.width = div.style.width = Math.floor(width) + 'px'; + target.style.height = target.parentNode.style.height = div.style.height = Math.floor(height) + 'px'; + var relativeRotation = this.viewport.rotation - this.paintedViewportMap.get(target).rotation; + var absRotation = Math.abs(relativeRotation); + var scaleX = 1, + scaleY = 1; + if (absRotation === 90 || absRotation === 270) { + scaleX = height / width; + scaleY = width / height; + } + var cssTransform = 'rotate(' + relativeRotation + 'deg) ' + 'scale(' + scaleX + ',' + scaleY + ')'; + _pdfjs.CustomStyle.setProp('transform', target, cssTransform); + if (this.textLayer) { + var textLayerViewport = this.textLayer.viewport; + var textRelativeRotation = this.viewport.rotation - textLayerViewport.rotation; + var textAbsRotation = Math.abs(textRelativeRotation); + var scale = width / textLayerViewport.width; + if (textAbsRotation === 90 || textAbsRotation === 270) { + scale = width / textLayerViewport.height; + } + var textLayerDiv = this.textLayer.textLayerDiv; + var transX, transY; + switch (textAbsRotation) { + case 0: + transX = transY = 0; + break; + case 90: + transX = 0; + transY = '-' + textLayerDiv.style.height; + break; + case 180: + transX = '-' + textLayerDiv.style.width; + transY = '-' + textLayerDiv.style.height; + break; + case 270: + transX = '-' + textLayerDiv.style.width; + transY = 0; + break; + default: + console.error('Bad rotation value.'); + break; + } + _pdfjs.CustomStyle.setProp('transform', textLayerDiv, 'rotate(' + textAbsRotation + 'deg) ' + 'scale(' + scale + ', ' + scale + ') ' + 'translate(' + transX + ', ' + transY + ')'); + _pdfjs.CustomStyle.setProp('transformOrigin', textLayerDiv, '0% 0%'); + } + if (redrawAnnotations && this.annotationLayer) { + this.annotationLayer.render(this.viewport, 'display'); + } + }, + get width() { + return this.viewport.width; + }, + get height() { + return this.viewport.height; + }, + getPagePoint: function PDFPageView_getPagePoint(x, y) { + return this.viewport.convertToPdfPoint(x, y); + }, + draw: function PDFPageView_draw() { + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { + console.error('Must be in new state before drawing'); + this.reset(); + } + this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; + var self = this; + var pdfPage = this.pdfPage; + var div = this.div; + var canvasWrapper = document.createElement('div'); + canvasWrapper.style.width = div.style.width; + canvasWrapper.style.height = div.style.height; + canvasWrapper.classList.add('canvasWrapper'); + if (this.annotationLayer && this.annotationLayer.div) { + div.insertBefore(canvasWrapper, this.annotationLayer.div); + } else { + div.appendChild(canvasWrapper); + } + var textLayerDiv = null; + var textLayer = null; + if (this.textLayerFactory) { + textLayerDiv = document.createElement('div'); + textLayerDiv.className = 'textLayer'; + textLayerDiv.style.width = canvasWrapper.style.width; + textLayerDiv.style.height = canvasWrapper.style.height; + if (this.annotationLayer && this.annotationLayer.div) { + div.insertBefore(textLayerDiv, this.annotationLayer.div); + } else { + div.appendChild(textLayerDiv); + } + textLayer = this.textLayerFactory.createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport, this.enhanceTextSelection); + } + this.textLayer = textLayer; + var renderContinueCallback = null; + if (this.renderingQueue) { + renderContinueCallback = function renderContinueCallback(cont) { + if (!self.renderingQueue.isHighestPriority(self)) { + self.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED; + self.resume = function resumeCallback() { + self.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; + cont(); + }; + return; + } + cont(); + }; + } + var finishPaintTask = function finishPaintTask(error) { + if (paintTask === self.paintTask) { + self.paintTask = null; + } + if (error === 'cancelled' || error instanceof _pdfjs.RenderingCancelledException) { + self.error = null; + return Promise.resolve(undefined); + } + self.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; + if (self.loadingIconDiv) { + div.removeChild(self.loadingIconDiv); + delete self.loadingIconDiv; + } + self._resetZoomLayer(true); + self.error = error; + self.stats = pdfPage.stats; + if (self.onAfterDraw) { + self.onAfterDraw(); + } + self.eventBus.dispatch('pagerendered', { + source: self, + pageNumber: self.id, + cssTransform: false + }); + if (error) { + return Promise.reject(error); + } + return Promise.resolve(undefined); + }; + var paintTask = this.renderer === _ui_utils.RendererType.SVG ? this.paintOnSvg(canvasWrapper) : this.paintOnCanvas(canvasWrapper); + paintTask.onRenderContinue = renderContinueCallback; + this.paintTask = paintTask; + var resultPromise = paintTask.promise.then(function () { + return finishPaintTask(null).then(function () { + if (textLayer) { + pdfPage.getTextContent({ normalizeWhitespace: true }).then(function textContentResolved(textContent) { + textLayer.setTextContent(textContent); + textLayer.render(TEXT_LAYER_RENDER_DELAY); + }); + } + }); + }, function (reason) { + return finishPaintTask(reason); + }); + if (this.annotationLayerFactory) { + if (!this.annotationLayer) { + this.annotationLayer = this.annotationLayerFactory.createAnnotationLayerBuilder(div, pdfPage, this.renderInteractiveForms); + } + this.annotationLayer.render(this.viewport, 'display'); + } + div.setAttribute('data-loaded', true); + if (this.onBeforeDraw) { + this.onBeforeDraw(); + } + return resultPromise; + }, + paintOnCanvas: function (canvasWrapper) { + var resolveRenderPromise, rejectRenderPromise; + var promise = new Promise(function (resolve, reject) { + resolveRenderPromise = resolve; + rejectRenderPromise = reject; + }); + var result = { + promise: promise, + onRenderContinue: function (cont) { + cont(); + }, + cancel: function () { + renderTask.cancel(); + } + }; + var viewport = this.viewport; + var canvas = document.createElement('canvas'); + canvas.id = 'page' + this.id; + canvas.setAttribute('hidden', 'hidden'); + var isCanvasHidden = true; + var showCanvas = function () { + if (isCanvasHidden) { + canvas.removeAttribute('hidden'); + isCanvasHidden = false; + } + }; + canvasWrapper.appendChild(canvas); + this.canvas = canvas; + canvas.mozOpaque = true; + var ctx = canvas.getContext('2d', { alpha: false }); + var outputScale = (0, _ui_utils.getOutputScale)(ctx); + this.outputScale = outputScale; + if (_pdfjs.PDFJS.useOnlyCssZoom) { + var actualSizeViewport = viewport.clone({ scale: _ui_utils.CSS_UNITS }); + outputScale.sx *= actualSizeViewport.width / viewport.width; + outputScale.sy *= actualSizeViewport.height / viewport.height; + outputScale.scaled = true; + } + if (_pdfjs.PDFJS.maxCanvasPixels > 0) { + var pixelsInViewport = viewport.width * viewport.height; + var maxScale = Math.sqrt(_pdfjs.PDFJS.maxCanvasPixels / pixelsInViewport); + if (outputScale.sx > maxScale || outputScale.sy > maxScale) { + outputScale.sx = maxScale; + outputScale.sy = maxScale; + outputScale.scaled = true; + this.hasRestrictedScaling = true; + } else { + this.hasRestrictedScaling = false; + } + } + var sfx = (0, _ui_utils.approximateFraction)(outputScale.sx); + var sfy = (0, _ui_utils.approximateFraction)(outputScale.sy); + canvas.width = (0, _ui_utils.roundToDivide)(viewport.width * outputScale.sx, sfx[0]); + canvas.height = (0, _ui_utils.roundToDivide)(viewport.height * outputScale.sy, sfy[0]); + canvas.style.width = (0, _ui_utils.roundToDivide)(viewport.width, sfx[1]) + 'px'; + canvas.style.height = (0, _ui_utils.roundToDivide)(viewport.height, sfy[1]) + 'px'; + this.paintedViewportMap.set(canvas, viewport); + var transform = !outputScale.scaled ? null : [outputScale.sx, 0, 0, outputScale.sy, 0, 0]; + var renderContext = { + canvasContext: ctx, + transform: transform, + viewport: this.viewport, + renderInteractiveForms: this.renderInteractiveForms + }; + var renderTask = this.pdfPage.render(renderContext); + renderTask.onContinue = function (cont) { + showCanvas(); + if (result.onRenderContinue) { + result.onRenderContinue(cont); + } else { + cont(); + } + }; + renderTask.promise.then(function pdfPageRenderCallback() { + showCanvas(); + resolveRenderPromise(undefined); + }, function pdfPageRenderError(error) { + showCanvas(); + rejectRenderPromise(error); + }); + return result; + }, + paintOnSvg: function PDFPageView_paintOnSvg(wrapper) { + var cancelled = false; + var ensureNotCancelled = function () { + if (cancelled) { + if (_pdfjs.PDFJS.pdfjsNext) { + throw new _pdfjs.RenderingCancelledException('Rendering cancelled, page ' + self.id, 'svg'); + } else { + throw 'cancelled'; + } + } + }; + var self = this; + var pdfPage = this.pdfPage; + var actualSizeViewport = this.viewport.clone({ scale: _ui_utils.CSS_UNITS }); + var promise = pdfPage.getOperatorList().then(function (opList) { + ensureNotCancelled(); + var svgGfx = new _pdfjs.SVGGraphics(pdfPage.commonObjs, pdfPage.objs); + return svgGfx.getSVG(opList, actualSizeViewport).then(function (svg) { + ensureNotCancelled(); + self.svg = svg; + self.paintedViewportMap.set(svg, actualSizeViewport); + svg.style.width = wrapper.style.width; + svg.style.height = wrapper.style.height; + self.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; + wrapper.appendChild(svg); + }); + }); + return { + promise: promise, + onRenderContinue: function (cont) { + cont(); + }, + cancel: function () { + cancelled = true; + } + }; + }, + setPageLabel: function PDFView_setPageLabel(label) { + this.pageLabel = typeof label === 'string' ? label : null; + if (this.pageLabel !== null) { + this.div.setAttribute('data-page-label', this.pageLabel); + } else { + this.div.removeAttribute('data-page-label'); + } + } + }; + return PDFPageView; +}(); +exports.PDFPageView = PDFPageView; + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFViewer = exports.PresentationModeState = undefined; + +var _ui_utils = __w_pdfjs_require__(0); + +var _pdf_rendering_queue = __w_pdfjs_require__(3); + +var _annotation_layer_builder = __w_pdfjs_require__(7); + +var _dom_events = __w_pdfjs_require__(2); + +var _pdfjs = __w_pdfjs_require__(1); + +var _pdf_page_view = __w_pdfjs_require__(9); + +var _pdf_link_service = __w_pdfjs_require__(4); + +var _text_layer_builder = __w_pdfjs_require__(11); + +var PresentationModeState = { + UNKNOWN: 0, + NORMAL: 1, + CHANGING: 2, + FULLSCREEN: 3 +}; +var DEFAULT_CACHE_SIZE = 10; +var PDFViewer = function pdfViewer() { + function PDFPageViewBuffer(size) { + var data = []; + this.push = function cachePush(view) { + var i = data.indexOf(view); + if (i >= 0) { + data.splice(i, 1); + } + data.push(view); + if (data.length > size) { + data.shift().destroy(); + } + }; + this.resize = function (newSize) { + size = newSize; + while (data.length > size) { + data.shift().destroy(); + } + }; + } + function isSameScale(oldScale, newScale) { + if (newScale === oldScale) { + return true; + } + if (Math.abs(newScale - oldScale) < 1e-15) { + return true; + } + return false; + } + function isPortraitOrientation(size) { + return size.width <= size.height; + } + function PDFViewer(options) { + this.container = options.container; + this.viewer = options.viewer || options.container.firstElementChild; + this.eventBus = options.eventBus || _dom_events.domEvents.getGlobalEventBus(); + this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService(); + this.downloadManager = options.downloadManager || null; + this.removePageBorders = options.removePageBorders || false; + this.enhanceTextSelection = options.enhanceTextSelection || false; + this.renderInteractiveForms = options.renderInteractiveForms || false; + this.enablePrintAutoRotate = options.enablePrintAutoRotate || false; + this.renderer = options.renderer || _ui_utils.RendererType.CANVAS; + this.defaultRenderingQueue = !options.renderingQueue; + if (this.defaultRenderingQueue) { + this.renderingQueue = new _pdf_rendering_queue.PDFRenderingQueue(); + this.renderingQueue.setViewer(this); + } else { + this.renderingQueue = options.renderingQueue; + } + this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdate.bind(this)); + this.presentationModeState = PresentationModeState.UNKNOWN; + this._resetView(); + if (this.removePageBorders) { + this.viewer.classList.add('removePageBorders'); + } + } + PDFViewer.prototype = { + get pagesCount() { + return this._pages.length; + }, + getPageView: function (index) { + return this._pages[index]; + }, + get pageViewsReady() { + return this._pageViewsReady; + }, + get currentPageNumber() { + return this._currentPageNumber; + }, + set currentPageNumber(val) { + if ((val | 0) !== val) { + throw new Error('Invalid page number.'); + } + if (!this.pdfDocument) { + this._currentPageNumber = val; + return; + } + this._setCurrentPageNumber(val, true); + }, + _setCurrentPageNumber: function PDFViewer_setCurrentPageNumber(val, resetCurrentPageView) { + if (this._currentPageNumber === val) { + if (resetCurrentPageView) { + this._resetCurrentPageView(); + } + return; + } + if (!(0 < val && val <= this.pagesCount)) { + console.error('PDFViewer_setCurrentPageNumber: "' + val + '" is out of bounds.'); + return; + } + var arg = { + source: this, + pageNumber: val, + pageLabel: this._pageLabels && this._pageLabels[val - 1] + }; + this._currentPageNumber = val; + this.eventBus.dispatch('pagechanging', arg); + this.eventBus.dispatch('pagechange', arg); + if (resetCurrentPageView) { + this._resetCurrentPageView(); + } + }, + get currentPageLabel() { + return this._pageLabels && this._pageLabels[this._currentPageNumber - 1]; + }, + set currentPageLabel(val) { + var pageNumber = val | 0; + if (this._pageLabels) { + var i = this._pageLabels.indexOf(val); + if (i >= 0) { + pageNumber = i + 1; + } + } + this.currentPageNumber = pageNumber; + }, + get currentScale() { + return this._currentScale !== _ui_utils.UNKNOWN_SCALE ? this._currentScale : _ui_utils.DEFAULT_SCALE; + }, + set currentScale(val) { + if (isNaN(val)) { + throw new Error('Invalid numeric scale'); + } + if (!this.pdfDocument) { + this._currentScale = val; + this._currentScaleValue = val !== _ui_utils.UNKNOWN_SCALE ? val.toString() : null; + return; + } + this._setScale(val, false); + }, + get currentScaleValue() { + return this._currentScaleValue; + }, + set currentScaleValue(val) { + if (!this.pdfDocument) { + this._currentScale = isNaN(val) ? _ui_utils.UNKNOWN_SCALE : val; + this._currentScaleValue = val.toString(); + return; + } + this._setScale(val, false); + }, + get pagesRotation() { + return this._pagesRotation; + }, + set pagesRotation(rotation) { + if (!(typeof rotation === 'number' && rotation % 90 === 0)) { + throw new Error('Invalid pages rotation angle.'); + } + this._pagesRotation = rotation; + if (!this.pdfDocument) { + return; + } + for (var i = 0, l = this._pages.length; i < l; i++) { + var pageView = this._pages[i]; + pageView.update(pageView.scale, rotation); + } + this._setScale(this._currentScaleValue, true); + if (this.defaultRenderingQueue) { + this.update(); + } + }, + setDocument: function (pdfDocument) { + if (this.pdfDocument) { + this._cancelRendering(); + this._resetView(); + } + this.pdfDocument = pdfDocument; + if (!pdfDocument) { + return; + } + var pagesCount = pdfDocument.numPages; + var self = this; + var resolvePagesPromise; + var pagesPromise = new Promise(function (resolve) { + resolvePagesPromise = resolve; + }); + this.pagesPromise = pagesPromise; + pagesPromise.then(function () { + self._pageViewsReady = true; + self.eventBus.dispatch('pagesloaded', { + source: self, + pagesCount: pagesCount + }); + }); + var isOnePageRenderedResolved = false; + var resolveOnePageRendered = null; + var onePageRendered = new Promise(function (resolve) { + resolveOnePageRendered = resolve; + }); + this.onePageRendered = onePageRendered; + var bindOnAfterAndBeforeDraw = function (pageView) { + pageView.onBeforeDraw = function pdfViewLoadOnBeforeDraw() { + self._buffer.push(this); + }; + pageView.onAfterDraw = function pdfViewLoadOnAfterDraw() { + if (!isOnePageRenderedResolved) { + isOnePageRenderedResolved = true; + resolveOnePageRendered(); + } + }; + }; + var firstPagePromise = pdfDocument.getPage(1); + this.firstPagePromise = firstPagePromise; + return firstPagePromise.then(function (pdfPage) { + var scale = this.currentScale; + var viewport = pdfPage.getViewport(scale * _ui_utils.CSS_UNITS); + for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { + var textLayerFactory = null; + if (!_pdfjs.PDFJS.disableTextLayer) { + textLayerFactory = this; + } + var pageView = new _pdf_page_view.PDFPageView({ + container: this.viewer, + eventBus: this.eventBus, + id: pageNum, + scale: scale, + defaultViewport: viewport.clone(), + renderingQueue: this.renderingQueue, + textLayerFactory: textLayerFactory, + annotationLayerFactory: this, + enhanceTextSelection: this.enhanceTextSelection, + renderInteractiveForms: this.renderInteractiveForms, + renderer: this.renderer + }); + bindOnAfterAndBeforeDraw(pageView); + this._pages.push(pageView); + } + var linkService = this.linkService; + onePageRendered.then(function () { + if (!_pdfjs.PDFJS.disableAutoFetch) { + var getPagesLeft = pagesCount; + for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { + pdfDocument.getPage(pageNum).then(function (pageNum, pdfPage) { + var pageView = self._pages[pageNum - 1]; + if (!pageView.pdfPage) { + pageView.setPdfPage(pdfPage); + } + linkService.cachePageRef(pageNum, pdfPage.ref); + getPagesLeft--; + if (!getPagesLeft) { + resolvePagesPromise(); + } + }.bind(null, pageNum)); + } + } else { + resolvePagesPromise(); + } + }); + self.eventBus.dispatch('pagesinit', { source: self }); + if (this.defaultRenderingQueue) { + this.update(); + } + if (this.findController) { + this.findController.resolveFirstPage(); + } + }.bind(this)); + }, + setPageLabels: function PDFViewer_setPageLabels(labels) { + if (!this.pdfDocument) { + return; + } + if (!labels) { + this._pageLabels = null; + } else if (!(labels instanceof Array && this.pdfDocument.numPages === labels.length)) { + this._pageLabels = null; + console.error('PDFViewer_setPageLabels: Invalid page labels.'); + } else { + this._pageLabels = labels; + } + for (var i = 0, ii = this._pages.length; i < ii; i++) { + var pageView = this._pages[i]; + var label = this._pageLabels && this._pageLabels[i]; + pageView.setPageLabel(label); + } + }, + _resetView: function () { + this._pages = []; + this._currentPageNumber = 1; + this._currentScale = _ui_utils.UNKNOWN_SCALE; + this._currentScaleValue = null; + this._pageLabels = null; + this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE); + this._location = null; + this._pagesRotation = 0; + this._pagesRequests = []; + this._pageViewsReady = false; + this.viewer.textContent = ''; + }, + _scrollUpdate: function PDFViewer_scrollUpdate() { + if (this.pagesCount === 0) { + return; + } + this.update(); + for (var i = 0, ii = this._pages.length; i < ii; i++) { + this._pages[i].updatePosition(); + } + }, + _setScaleDispatchEvent: function pdfViewer_setScaleDispatchEvent(newScale, newValue, preset) { + var arg = { + source: this, + scale: newScale, + presetValue: preset ? newValue : undefined + }; + this.eventBus.dispatch('scalechanging', arg); + this.eventBus.dispatch('scalechange', arg); + }, + _setScaleUpdatePages: function pdfViewer_setScaleUpdatePages(newScale, newValue, noScroll, preset) { + this._currentScaleValue = newValue.toString(); + if (isSameScale(this._currentScale, newScale)) { + if (preset) { + this._setScaleDispatchEvent(newScale, newValue, true); + } + return; + } + for (var i = 0, ii = this._pages.length; i < ii; i++) { + this._pages[i].update(newScale); + } + this._currentScale = newScale; + if (!noScroll) { + var page = this._currentPageNumber, + dest; + if (this._location && !_pdfjs.PDFJS.ignoreCurrentPositionOnZoom && !(this.isInPresentationMode || this.isChangingPresentationMode)) { + page = this._location.pageNumber; + dest = [null, { name: 'XYZ' }, this._location.left, this._location.top, null]; + } + this.scrollPageIntoView({ + pageNumber: page, + destArray: dest, + allowNegativeOffset: true + }); + } + this._setScaleDispatchEvent(newScale, newValue, preset); + if (this.defaultRenderingQueue) { + this.update(); + } + }, + _setScale: function PDFViewer_setScale(value, noScroll) { + var scale = parseFloat(value); + if (scale > 0) { + this._setScaleUpdatePages(scale, value, noScroll, false); + } else { + var currentPage = this._pages[this._currentPageNumber - 1]; + if (!currentPage) { + return; + } + var hPadding = this.isInPresentationMode || this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING; + var vPadding = this.isInPresentationMode || this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING; + var pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale; + var pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale; + switch (value) { + case 'page-actual': + scale = 1; + break; + case 'page-width': + scale = pageWidthScale; + break; + case 'page-height': + scale = pageHeightScale; + break; + case 'page-fit': + scale = Math.min(pageWidthScale, pageHeightScale); + break; + case 'auto': + var isLandscape = currentPage.width > currentPage.height; + var horizontalScale = isLandscape ? Math.min(pageHeightScale, pageWidthScale) : pageWidthScale; + scale = Math.min(_ui_utils.MAX_AUTO_SCALE, horizontalScale); + break; + default: + console.error('PDFViewer_setScale: "' + value + '" is an unknown zoom value.'); + return; + } + this._setScaleUpdatePages(scale, value, noScroll, true); + } + }, + _resetCurrentPageView: function () { + if (this.isInPresentationMode) { + this._setScale(this._currentScaleValue, true); + } + var pageView = this._pages[this._currentPageNumber - 1]; + (0, _ui_utils.scrollIntoView)(pageView.div); + }, + scrollPageIntoView: function PDFViewer_scrollPageIntoView(params) { + if (!this.pdfDocument) { + return; + } + if (arguments.length > 1 || typeof params === 'number') { + console.warn('Call of scrollPageIntoView() with obsolete signature.'); + var paramObj = {}; + if (typeof params === 'number') { + paramObj.pageNumber = params; + } + if (arguments[1] instanceof Array) { + paramObj.destArray = arguments[1]; + } + params = paramObj; + } + var pageNumber = params.pageNumber || 0; + var dest = params.destArray || null; + var allowNegativeOffset = params.allowNegativeOffset || false; + if (this.isInPresentationMode || !dest) { + this._setCurrentPageNumber(pageNumber, true); + return; + } + var pageView = this._pages[pageNumber - 1]; + if (!pageView) { + console.error('PDFViewer_scrollPageIntoView: ' + 'Invalid "pageNumber" parameter.'); + return; + } + var x = 0, + y = 0; + var width = 0, + height = 0, + widthScale, + heightScale; + var changeOrientation = pageView.rotation % 180 === 0 ? false : true; + var pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / _ui_utils.CSS_UNITS; + var pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / _ui_utils.CSS_UNITS; + var scale = 0; + switch (dest[1].name) { + case 'XYZ': + x = dest[2]; + y = dest[3]; + scale = dest[4]; + x = x !== null ? x : 0; + y = y !== null ? y : pageHeight; + break; + case 'Fit': + case 'FitB': + scale = 'page-fit'; + break; + case 'FitH': + case 'FitBH': + y = dest[2]; + scale = 'page-width'; + if (y === null && this._location) { + x = this._location.left; + y = this._location.top; + } + break; + case 'FitV': + case 'FitBV': + x = dest[2]; + width = pageWidth; + height = pageHeight; + scale = 'page-height'; + break; + case 'FitR': + x = dest[2]; + y = dest[3]; + width = dest[4] - x; + height = dest[5] - y; + var hPadding = this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING; + var vPadding = this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING; + widthScale = (this.container.clientWidth - hPadding) / width / _ui_utils.CSS_UNITS; + heightScale = (this.container.clientHeight - vPadding) / height / _ui_utils.CSS_UNITS; + scale = Math.min(Math.abs(widthScale), Math.abs(heightScale)); + break; + default: + console.error('PDFViewer_scrollPageIntoView: \'' + dest[1].name + '\' is not a valid destination type.'); + return; + } + if (scale && scale !== this._currentScale) { + this.currentScaleValue = scale; + } else if (this._currentScale === _ui_utils.UNKNOWN_SCALE) { + this.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; + } + if (scale === 'page-fit' && !dest[4]) { + (0, _ui_utils.scrollIntoView)(pageView.div); + return; + } + var boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)]; + var left = Math.min(boundingRect[0][0], boundingRect[1][0]); + var top = Math.min(boundingRect[0][1], boundingRect[1][1]); + if (!allowNegativeOffset) { + left = Math.max(left, 0); + top = Math.max(top, 0); + } + (0, _ui_utils.scrollIntoView)(pageView.div, { + left: left, + top: top + }); + }, + _updateLocation: function (firstPage) { + var currentScale = this._currentScale; + var currentScaleValue = this._currentScaleValue; + var normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue; + var pageNumber = firstPage.id; + var pdfOpenParams = '#page=' + pageNumber; + pdfOpenParams += '&zoom=' + normalizedScaleValue; + var currentPageView = this._pages[pageNumber - 1]; + var container = this.container; + var topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y); + var intLeft = Math.round(topLeft[0]); + var intTop = Math.round(topLeft[1]); + pdfOpenParams += ',' + intLeft + ',' + intTop; + this._location = { + pageNumber: pageNumber, + scale: normalizedScaleValue, + top: intTop, + left: intLeft, + pdfOpenParams: pdfOpenParams + }; + }, + update: function PDFViewer_update() { + var visible = this._getVisiblePages(); + var visiblePages = visible.views; + if (visiblePages.length === 0) { + return; + } + var suggestedCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * visiblePages.length + 1); + this._buffer.resize(suggestedCacheSize); + this.renderingQueue.renderHighestPriority(visible); + var currentId = this._currentPageNumber; + var firstPage = visible.first; + for (var i = 0, ii = visiblePages.length, stillFullyVisible = false; i < ii; ++i) { + var page = visiblePages[i]; + if (page.percent < 100) { + break; + } + if (page.id === currentId) { + stillFullyVisible = true; + break; + } + } + if (!stillFullyVisible) { + currentId = visiblePages[0].id; + } + if (!this.isInPresentationMode) { + this._setCurrentPageNumber(currentId); + } + this._updateLocation(firstPage); + this.eventBus.dispatch('updateviewarea', { + source: this, + location: this._location + }); + }, + containsElement: function (element) { + return this.container.contains(element); + }, + focus: function () { + this.container.focus(); + }, + get isInPresentationMode() { + return this.presentationModeState === PresentationModeState.FULLSCREEN; + }, + get isChangingPresentationMode() { + return this.presentationModeState === PresentationModeState.CHANGING; + }, + get isHorizontalScrollbarEnabled() { + return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth; + }, + _getVisiblePages: function () { + if (!this.isInPresentationMode) { + return (0, _ui_utils.getVisibleElements)(this.container, this._pages, true); + } + var visible = []; + var currentPage = this._pages[this._currentPageNumber - 1]; + visible.push({ + id: currentPage.id, + view: currentPage + }); + return { + first: currentPage, + last: currentPage, + views: visible + }; + }, + cleanup: function () { + for (var i = 0, ii = this._pages.length; i < ii; i++) { + if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { + this._pages[i].reset(); + } + } + }, + _cancelRendering: function PDFViewer_cancelRendering() { + for (var i = 0, ii = this._pages.length; i < ii; i++) { + if (this._pages[i]) { + this._pages[i].cancelRendering(); + } + } + }, + _ensurePdfPageLoaded: function (pageView) { + if (pageView.pdfPage) { + return Promise.resolve(pageView.pdfPage); + } + var pageNumber = pageView.id; + if (this._pagesRequests[pageNumber]) { + return this._pagesRequests[pageNumber]; + } + var promise = this.pdfDocument.getPage(pageNumber).then(function (pdfPage) { + pageView.setPdfPage(pdfPage); + this._pagesRequests[pageNumber] = null; + return pdfPage; + }.bind(this)); + this._pagesRequests[pageNumber] = promise; + return promise; + }, + forceRendering: function (currentlyVisiblePages) { + var visiblePages = currentlyVisiblePages || this._getVisiblePages(); + var pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, this.scroll.down); + if (pageView) { + this._ensurePdfPageLoaded(pageView).then(function () { + this.renderingQueue.renderView(pageView); + }.bind(this)); + return true; + } + return false; + }, + getPageTextContent: function (pageIndex) { + return this.pdfDocument.getPage(pageIndex + 1).then(function (page) { + return page.getTextContent({ normalizeWhitespace: true }); + }); + }, + createTextLayerBuilder: function (textLayerDiv, pageIndex, viewport, enhanceTextSelection) { + return new _text_layer_builder.TextLayerBuilder({ + textLayerDiv: textLayerDiv, + eventBus: this.eventBus, + pageIndex: pageIndex, + viewport: viewport, + findController: this.isInPresentationMode ? null : this.findController, + enhanceTextSelection: this.isInPresentationMode ? false : enhanceTextSelection + }); + }, + createAnnotationLayerBuilder: function (pageDiv, pdfPage, renderInteractiveForms) { + return new _annotation_layer_builder.AnnotationLayerBuilder({ + pageDiv: pageDiv, + pdfPage: pdfPage, + renderInteractiveForms: renderInteractiveForms, + linkService: this.linkService, + downloadManager: this.downloadManager + }); + }, + setFindController: function (findController) { + this.findController = findController; + }, + getPagesOverview: function () { + var pagesOverview = this._pages.map(function (pageView) { + var viewport = pageView.pdfPage.getViewport(1); + return { + width: viewport.width, + height: viewport.height, + rotation: viewport.rotation + }; + }); + if (!this.enablePrintAutoRotate) { + return pagesOverview; } + var isFirstPagePortrait = isPortraitOrientation(pagesOverview[0]); + return pagesOverview.map(function (size) { + if (isFirstPagePortrait === isPortraitOrientation(size)) { + return size; + } + return { + width: size.height, + height: size.width, + rotation: (size.rotation + 90) % 360 + }; + }); } }; - return PDFPageView; + return PDFViewer; }(); -exports.PDFPageView = PDFPageView; +exports.PresentationModeState = PresentationModeState; +exports.PDFViewer = PDFViewer; /***/ }), -/* 6 */ +/* 11 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; -var domEvents = __w_pdfjs_require__(2); -var pdfjsLib = __w_pdfjs_require__(0); +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.DefaultTextLayerFactory = exports.TextLayerBuilder = undefined; + +var _dom_events = __w_pdfjs_require__(2); + +var _pdfjs = __w_pdfjs_require__(1); + var EXPAND_DIVS_TIMEOUT = 300; var TextLayerBuilder = function TextLayerBuilderClosure() { function TextLayerBuilder(options) { this.textLayerDiv = options.textLayerDiv; - this.eventBus = options.eventBus || domEvents.getGlobalEventBus(); + this.eventBus = options.eventBus || _dom_events.domEvents.getGlobalEventBus(); this.textContent = null; this.renderingDone = false; this.pageIdx = options.pageIndex; @@ -1567,7 +3183,7 @@ var TextLayerBuilder = function TextLayerBuilderClosure() { this.cancel(); this.textDivs = []; var textLayerFrag = document.createDocumentFragment(); - this.textLayerRenderTask = pdfjsLib.renderTextLayer({ + this.textLayerRenderTask = (0, _pdfjs.renderTextLayer)({ textContent: this.textContent, container: textLayerFrag, viewport: this.viewport, @@ -1797,123 +3413,164 @@ exports.TextLayerBuilder = TextLayerBuilder; exports.DefaultTextLayerFactory = DefaultTextLayerFactory; /***/ }), -/* 7 */ +/* 12 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; -var CLEANUP_TIMEOUT = 30000; -var RenderingStates = { - INITIAL: 0, - RUNNING: 1, - PAUSED: 2, - FINISHED: 3 -}; -var PDFRenderingQueue = function PDFRenderingQueueClosure() { - function PDFRenderingQueue() { - this.pdfViewer = null; - this.pdfThumbnailViewer = null; - this.onIdle = null; - this.highestPriorityPage = null; - this.idleTimeout = null; - this.printing = false; - this.isThumbnailViewEnabled = false; +Object.defineProperty(exports, "__esModule", { + value: true +}); +var defaultPreferences = null; +function getDefaultPreferences() { + if (!defaultPreferences) { + defaultPreferences = Promise.resolve({ + "showPreviousViewOnLoad": true, + "defaultZoomValue": "", + "sidebarViewOnLoad": 0, + "enableHandToolOnLoad": false, + "enableWebGL": false, + "pdfBugEnabled": false, + "disableRange": false, + "disableStream": false, + "disableAutoFetch": false, + "disableFontFace": false, + "disableTextLayer": false, + "useOnlyCssZoom": false, + "externalLinkTarget": 0, + "enhanceTextSelection": false, + "renderer": "canvas", + "renderInteractiveForms": false, + "enablePrintAutoRotate": false, + "disablePageLabels": false + }); } - PDFRenderingQueue.prototype = { - setViewer: function PDFRenderingQueue_setViewer(pdfViewer) { - this.pdfViewer = pdfViewer; - }, - setThumbnailViewer: function PDFRenderingQueue_setThumbnailViewer(pdfThumbnailViewer) { - this.pdfThumbnailViewer = pdfThumbnailViewer; - }, - isHighestPriority: function PDFRenderingQueue_isHighestPriority(view) { - return this.highestPriorityPage === view.renderingId; - }, - renderHighestPriority: function PDFRenderingQueue_renderHighestPriority(currentlyVisiblePages) { - if (this.idleTimeout) { - clearTimeout(this.idleTimeout); - this.idleTimeout = null; - } - if (this.pdfViewer.forceRendering(currentlyVisiblePages)) { - return; - } - if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) { - if (this.pdfThumbnailViewer.forceRendering()) { - return; - } - } - if (this.printing) { - return; - } - if (this.onIdle) { - this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT); - } - }, - getHighestPriority: function PDFRenderingQueue_getHighestPriority(visible, views, scrolledDown) { - var visibleViews = visible.views; - var numVisible = visibleViews.length; - if (numVisible === 0) { - return false; - } - for (var i = 0; i < numVisible; ++i) { - var view = visibleViews[i].view; - if (!this.isViewFinished(view)) { - return view; + return defaultPreferences; +} +function cloneObj(obj) { + var result = {}; + for (var i in obj) { + if (Object.prototype.hasOwnProperty.call(obj, i)) { + result[i] = obj[i]; + } + } + return result; +} +var Preferences = { + prefs: null, + isInitializedPromiseResolved: false, + initializedPromise: null, + initialize: function preferencesInitialize() { + return this.initializedPromise = getDefaultPreferences().then(function (defaults) { + Object.defineProperty(this, 'defaults', { + value: Object.freeze(defaults), + writable: false, + enumerable: true, + configurable: false + }); + this.prefs = cloneObj(defaults); + return this._readFromStorage(defaults); + }.bind(this)).then(function (prefObj) { + this.isInitializedPromiseResolved = true; + if (prefObj) { + this.prefs = prefObj; + } + }.bind(this)); + }, + _writeToStorage: function preferences_writeToStorage(prefObj) { + return Promise.resolve(); + }, + _readFromStorage: function preferences_readFromStorage(prefObj) { + return Promise.resolve(); + }, + reset: function preferencesReset() { + return this.initializedPromise.then(function () { + this.prefs = cloneObj(this.defaults); + return this._writeToStorage(this.defaults); + }.bind(this)); + }, + reload: function preferencesReload() { + return this.initializedPromise.then(function () { + this._readFromStorage(this.defaults).then(function (prefObj) { + if (prefObj) { + this.prefs = prefObj; } - } - if (scrolledDown) { - var nextPageIndex = visible.last.id; - if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) { - return views[nextPageIndex]; + }.bind(this)); + }.bind(this)); + }, + set: function preferencesSet(name, value) { + return this.initializedPromise.then(function () { + if (this.defaults[name] === undefined) { + throw new Error('preferencesSet: \'' + name + '\' is undefined.'); + } else if (value === undefined) { + throw new Error('preferencesSet: no value is specified.'); + } + var valueType = typeof value; + var defaultType = typeof this.defaults[name]; + if (valueType !== defaultType) { + if (valueType === 'number' && defaultType === 'string') { + value = value.toString(); + } else { + throw new Error('Preferences_set: \'' + value + '\' is a \"' + valueType + '\", expected \"' + defaultType + '\".'); } } else { - var previousPageIndex = visible.first.id - 2; - if (views[previousPageIndex] && !this.isViewFinished(views[previousPageIndex])) { - return views[previousPageIndex]; + if (valueType === 'number' && (value | 0) !== value) { + throw new Error('Preferences_set: \'' + value + '\' must be an \"integer\".'); } } - return null; - }, - isViewFinished: function PDFRenderingQueue_isViewFinished(view) { - return view.renderingState === RenderingStates.FINISHED; - }, - renderView: function PDFRenderingQueue_renderView(view) { - var state = view.renderingState; - switch (state) { - case RenderingStates.FINISHED: - return false; - case RenderingStates.PAUSED: - this.highestPriorityPage = view.renderingId; - view.resume(); - break; - case RenderingStates.RUNNING: - this.highestPriorityPage = view.renderingId; - break; - case RenderingStates.INITIAL: - this.highestPriorityPage = view.renderingId; - var continueRendering = function () { - this.renderHighestPriority(); - }.bind(this); - view.draw().then(continueRendering, continueRendering); - break; + this.prefs[name] = value; + return this._writeToStorage(this.prefs); + }.bind(this)); + }, + get: function preferencesGet(name) { + return this.initializedPromise.then(function () { + var defaultValue = this.defaults[name]; + if (defaultValue === undefined) { + throw new Error('preferencesGet: \'' + name + '\' is undefined.'); + } else { + var prefValue = this.prefs[name]; + if (prefValue !== undefined) { + return prefValue; + } } - return true; - } + return defaultValue; + }.bind(this)); + } +}; +{ + Preferences._writeToStorage = function (prefObj) { + return new Promise(function (resolve) { + localStorage.setItem('pdfjs.preferences', JSON.stringify(prefObj)); + resolve(); + }); }; - return PDFRenderingQueue; -}(); -exports.RenderingStates = RenderingStates; -exports.PDFRenderingQueue = PDFRenderingQueue; + Preferences._readFromStorage = function (prefObj) { + return new Promise(function (resolve) { + var readPrefs = JSON.parse(localStorage.getItem('pdfjs.preferences')); + resolve(readPrefs); + }); + }; +} +exports.Preferences = Preferences; /***/ }), -/* 8 */ +/* 13 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; -var pdfjsLib = __w_pdfjs_require__(0); +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.DownloadManager = undefined; + +var _pdfjs = __w_pdfjs_require__(1); + +var _app = __w_pdfjs_require__(14); + +; function download(blobUrl, filename) { var a = document.createElement('a'); if (a.click) { @@ -1936,7 +3593,7 @@ function download(blobUrl, filename) { function DownloadManager() {} DownloadManager.prototype = { downloadUrl: function DownloadManager_downloadUrl(url, filename) { - if (!pdfjsLib.createValidAbsoluteUrl(url, 'http://example.com')) { + if (!(0, _pdfjs.createValidAbsoluteUrl)(url, 'http://example.com')) { return; } download(url + '#pdfjs.action=download', filename); @@ -1945,1413 +3602,3527 @@ DownloadManager.prototype = { if (navigator.msSaveBlob) { return navigator.msSaveBlob(new Blob([data], { type: contentType }), filename); } - var blobUrl = pdfjsLib.createObjectURL(data, contentType, pdfjsLib.PDFJS.disableCreateObjectURL); + var blobUrl = (0, _pdfjs.createObjectURL)(data, contentType, _pdfjs.PDFJS.disableCreateObjectURL); download(blobUrl, filename); }, download: function DownloadManager_download(blob, url, filename) { if (navigator.msSaveBlob) { - if (!navigator.msSaveBlob(blob, filename)) { - this.downloadUrl(url, filename); - } - return; - } - if (pdfjsLib.PDFJS.disableCreateObjectURL) { - this.downloadUrl(url, filename); - return; - } - var blobUrl = URL.createObjectURL(blob); - download(blobUrl, filename); - } -}; -exports.DownloadManager = DownloadManager; - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __w_pdfjs_require__) { - -"use strict"; - - -var uiUtils = __w_pdfjs_require__(1); -var scrollIntoView = uiUtils.scrollIntoView; -var FindStates = { - FIND_FOUND: 0, - FIND_NOTFOUND: 1, - FIND_WRAPPED: 2, - FIND_PENDING: 3 -}; -var FIND_SCROLL_OFFSET_TOP = -50; -var FIND_SCROLL_OFFSET_LEFT = -400; -var CHARACTERS_TO_NORMALIZE = { - '\u2018': '\'', - '\u2019': '\'', - '\u201A': '\'', - '\u201B': '\'', - '\u201C': '"', - '\u201D': '"', - '\u201E': '"', - '\u201F': '"', - '\u00BC': '1/4', - '\u00BD': '1/2', - '\u00BE': '3/4' -}; -var PDFFindController = function PDFFindControllerClosure() { - function PDFFindController(options) { - this.pdfViewer = options.pdfViewer || null; - this.onUpdateResultsCount = null; - this.onUpdateState = null; - this.reset(); - var replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(''); - this.normalizationRegex = new RegExp('[' + replace + ']', 'g'); - } - PDFFindController.prototype = { - reset: function PDFFindController_reset() { - this.startedTextExtraction = false; - this.extractTextPromises = []; - this.pendingFindMatches = Object.create(null); - this.active = false; - this.pageContents = []; - this.pageMatches = []; - this.pageMatchesLength = null; - this.matchCount = 0; - this.selected = { - pageIdx: -1, - matchIdx: -1 - }; - this.offset = { - pageIdx: null, - matchIdx: null - }; - this.pagesToSearch = null; - this.resumePageIdx = null; - this.state = null; - this.dirtyMatch = false; - this.findTimeout = null; - this.firstPagePromise = new Promise(function (resolve) { - this.resolveFirstPage = resolve; - }.bind(this)); - }, - normalize: function PDFFindController_normalize(text) { - return text.replace(this.normalizationRegex, function (ch) { - return CHARACTERS_TO_NORMALIZE[ch]; - }); - }, - _prepareMatches: function PDFFindController_prepareMatches(matchesWithLength, matches, matchesLength) { - function isSubTerm(matchesWithLength, currentIndex) { - var currentElem, prevElem, nextElem; - currentElem = matchesWithLength[currentIndex]; - nextElem = matchesWithLength[currentIndex + 1]; - if (currentIndex < matchesWithLength.length - 1 && currentElem.match === nextElem.match) { - currentElem.skipped = true; - return true; - } - for (var i = currentIndex - 1; i >= 0; i--) { - prevElem = matchesWithLength[i]; - if (prevElem.skipped) { - continue; - } - if (prevElem.match + prevElem.matchLength < currentElem.match) { - break; - } - if (prevElem.match + prevElem.matchLength >= currentElem.match + currentElem.matchLength) { - currentElem.skipped = true; - return true; - } - } - return false; + if (!navigator.msSaveBlob(blob, filename)) { + this.downloadUrl(url, filename); } - var i, len; - matchesWithLength.sort(function (a, b) { - return a.match === b.match ? a.matchLength - b.matchLength : a.match - b.match; + return; + } + if (_pdfjs.PDFJS.disableCreateObjectURL) { + this.downloadUrl(url, filename); + return; + } + var blobUrl = URL.createObjectURL(blob); + download(blobUrl, filename); + } +}; +var GenericExternalServices = Object.create(_app.DefaultExternalServices); +GenericExternalServices.createDownloadManager = function () { + return new DownloadManager(); +}; +_app.PDFViewerApplication.externalServices = GenericExternalServices; +exports.DownloadManager = DownloadManager; + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFPrintServiceFactory = exports.DefaultExternalServices = exports.PDFViewerApplication = undefined; + +var _ui_utils = __w_pdfjs_require__(0); + +var _pdfjs = __w_pdfjs_require__(1); + +var _pdf_rendering_queue = __w_pdfjs_require__(3); + +var _pdf_sidebar = __w_pdfjs_require__(23); + +var _pdf_viewer = __w_pdfjs_require__(10); + +var _dom_events = __w_pdfjs_require__(2); + +var _hand_tool = __w_pdfjs_require__(16); + +var _overlay_manager = __w_pdfjs_require__(6); + +var _password_prompt = __w_pdfjs_require__(17); + +var _pdf_attachment_viewer = __w_pdfjs_require__(18); + +var _pdf_document_properties = __w_pdfjs_require__(19); + +var _pdf_find_bar = __w_pdfjs_require__(20); + +var _pdf_find_controller = __w_pdfjs_require__(5); + +var _pdf_history = __w_pdfjs_require__(8); + +var _pdf_link_service = __w_pdfjs_require__(4); + +var _pdf_outline_viewer = __w_pdfjs_require__(21); + +var _pdf_presentation_mode = __w_pdfjs_require__(22); + +var _pdf_thumbnail_viewer = __w_pdfjs_require__(25); + +var _preferences = __w_pdfjs_require__(12); + +var _secondary_toolbar = __w_pdfjs_require__(27); + +var _toolbar = __w_pdfjs_require__(28); + +var _view_history = __w_pdfjs_require__(29); + +var DEFAULT_SCALE_DELTA = 1.1; +var DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000; +function configure(PDFJS) { + PDFJS.imageResourcesPath = './images/'; + PDFJS.workerSrc = '../build/pdf.worker.js'; + PDFJS.cMapUrl = '../web/cmaps/'; + PDFJS.cMapPacked = true; +} +var DefaultExternalServices = { + updateFindControlState: function (data) {}, + initPassiveLoading: function (callbacks) {}, + fallback: function (data, callback) {}, + reportTelemetry: function (data) {}, + createDownloadManager: function () { + throw new Error('Not implemented: createDownloadManager'); + }, + supportsIntegratedFind: false, + supportsDocumentFonts: true, + supportsDocumentColors: true, + supportedMouseWheelZoomModifierKeys: { + ctrlKey: true, + metaKey: true + } +}; +var PDFViewerApplication = { + initialBookmark: document.location.hash.substring(1), + initialDestination: null, + initialized: false, + fellback: false, + appConfig: null, + pdfDocument: null, + pdfLoadingTask: null, + printService: null, + pdfViewer: null, + pdfThumbnailViewer: null, + pdfRenderingQueue: null, + pdfPresentationMode: null, + pdfDocumentProperties: null, + pdfLinkService: null, + pdfHistory: null, + pdfSidebar: null, + pdfOutlineViewer: null, + pdfAttachmentViewer: null, + store: null, + downloadManager: null, + toolbar: null, + secondaryToolbar: null, + eventBus: null, + pageRotation: 0, + isInitialViewSet: false, + viewerPrefs: { + sidebarViewOnLoad: _pdf_sidebar.SidebarView.NONE, + pdfBugEnabled: false, + showPreviousViewOnLoad: true, + defaultZoomValue: '', + disablePageLabels: false, + renderer: 'canvas', + enhanceTextSelection: false, + renderInteractiveForms: false, + enablePrintAutoRotate: false + }, + isViewerEmbedded: window.parent !== window, + url: '', + baseUrl: '', + externalServices: DefaultExternalServices, + initialize: function pdfViewInitialize(appConfig) { + var self = this; + _preferences.Preferences.initialize(); + this.preferences = _preferences.Preferences; + configure(_pdfjs.PDFJS); + this.appConfig = appConfig; + return this._readPreferences().then(function () { + return self._initializeViewerComponents(); + }).then(function () { + self.bindEvents(); + self.bindWindowEvents(); + _ui_utils.localized.then(function () { + self.eventBus.dispatch('localized'); }); - for (i = 0, len = matchesWithLength.length; i < len; i++) { - if (isSubTerm(matchesWithLength, i)) { - continue; - } - matches.push(matchesWithLength[i].match); - matchesLength.push(matchesWithLength[i].matchLength); - } - }, - calcFindPhraseMatch: function PDFFindController_calcFindPhraseMatch(query, pageIndex, pageContent) { - var matches = []; - var queryLen = query.length; - var matchIdx = -queryLen; - while (true) { - matchIdx = pageContent.indexOf(query, matchIdx + queryLen); - if (matchIdx === -1) { - break; - } - matches.push(matchIdx); - } - this.pageMatches[pageIndex] = matches; - }, - calcFindWordMatch: function PDFFindController_calcFindWordMatch(query, pageIndex, pageContent) { - var matchesWithLength = []; - var queryArray = query.match(/\S+/g); - var subquery, subqueryLen, matchIdx; - for (var i = 0, len = queryArray.length; i < len; i++) { - subquery = queryArray[i]; - subqueryLen = subquery.length; - matchIdx = -subqueryLen; - while (true) { - matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen); - if (matchIdx === -1) { - break; - } - matchesWithLength.push({ - match: matchIdx, - matchLength: subqueryLen, - skipped: false - }); - } - } - if (!this.pageMatchesLength) { - this.pageMatchesLength = []; + if (self.isViewerEmbedded && !_pdfjs.PDFJS.isExternalLinkTargetSet()) { + _pdfjs.PDFJS.externalLinkTarget = _pdfjs.PDFJS.LinkTarget.TOP; } - this.pageMatchesLength[pageIndex] = []; - this.pageMatches[pageIndex] = []; - this._prepareMatches(matchesWithLength, this.pageMatches[pageIndex], this.pageMatchesLength[pageIndex]); - }, - calcFindMatch: function PDFFindController_calcFindMatch(pageIndex) { - var pageContent = this.normalize(this.pageContents[pageIndex]); - var query = this.normalize(this.state.query); - var caseSensitive = this.state.caseSensitive; - var phraseSearch = this.state.phraseSearch; - var queryLen = query.length; - if (queryLen === 0) { + self.initialized = true; + }); + }, + _readPreferences: function () { + var self = this; + return Promise.all([_preferences.Preferences.get('enableWebGL').then(function resolved(value) { + _pdfjs.PDFJS.disableWebGL = !value; + }), _preferences.Preferences.get('sidebarViewOnLoad').then(function resolved(value) { + self.viewerPrefs['sidebarViewOnLoad'] = value; + }), _preferences.Preferences.get('pdfBugEnabled').then(function resolved(value) { + self.viewerPrefs['pdfBugEnabled'] = value; + }), _preferences.Preferences.get('showPreviousViewOnLoad').then(function resolved(value) { + self.viewerPrefs['showPreviousViewOnLoad'] = value; + }), _preferences.Preferences.get('defaultZoomValue').then(function resolved(value) { + self.viewerPrefs['defaultZoomValue'] = value; + }), _preferences.Preferences.get('enhanceTextSelection').then(function resolved(value) { + self.viewerPrefs['enhanceTextSelection'] = value; + }), _preferences.Preferences.get('disableTextLayer').then(function resolved(value) { + if (_pdfjs.PDFJS.disableTextLayer === true) { return; } - if (!caseSensitive) { - pageContent = pageContent.toLowerCase(); - query = query.toLowerCase(); - } - if (phraseSearch) { - this.calcFindPhraseMatch(query, pageIndex, pageContent); - } else { - this.calcFindWordMatch(query, pageIndex, pageContent); - } - this.updatePage(pageIndex); - if (this.resumePageIdx === pageIndex) { - this.resumePageIdx = null; - this.nextPageMatch(); + _pdfjs.PDFJS.disableTextLayer = value; + }), _preferences.Preferences.get('disableRange').then(function resolved(value) { + if (_pdfjs.PDFJS.disableRange === true) { + return; } - if (this.pageMatches[pageIndex].length > 0) { - this.matchCount += this.pageMatches[pageIndex].length; - this.updateUIResultsCount(); + _pdfjs.PDFJS.disableRange = value; + }), _preferences.Preferences.get('disableStream').then(function resolved(value) { + if (_pdfjs.PDFJS.disableStream === true) { + return; } - }, - extractText: function PDFFindController_extractText() { - if (this.startedTextExtraction) { + _pdfjs.PDFJS.disableStream = value; + }), _preferences.Preferences.get('disableAutoFetch').then(function resolved(value) { + _pdfjs.PDFJS.disableAutoFetch = value; + }), _preferences.Preferences.get('disableFontFace').then(function resolved(value) { + if (_pdfjs.PDFJS.disableFontFace === true) { return; } - this.startedTextExtraction = true; - this.pageContents = []; - var extractTextPromisesResolves = []; - var numPages = this.pdfViewer.pagesCount; - for (var i = 0; i < numPages; i++) { - this.extractTextPromises.push(new Promise(function (resolve) { - extractTextPromisesResolves.push(resolve); - })); + _pdfjs.PDFJS.disableFontFace = value; + }), _preferences.Preferences.get('useOnlyCssZoom').then(function resolved(value) { + _pdfjs.PDFJS.useOnlyCssZoom = value; + }), _preferences.Preferences.get('externalLinkTarget').then(function resolved(value) { + if (_pdfjs.PDFJS.isExternalLinkTargetSet()) { + return; } - var self = this; - function extractPageText(pageIndex) { - self.pdfViewer.getPageTextContent(pageIndex).then(function textContentResolved(textContent) { - var textItems = textContent.items; - var str = []; - for (var i = 0, len = textItems.length; i < len; i++) { - str.push(textItems[i].str); - } - self.pageContents.push(str.join('')); - extractTextPromisesResolves[pageIndex](pageIndex); - if (pageIndex + 1 < self.pdfViewer.pagesCount) { - extractPageText(pageIndex + 1); - } + _pdfjs.PDFJS.externalLinkTarget = value; + }), _preferences.Preferences.get('renderer').then(function resolved(value) { + self.viewerPrefs['renderer'] = value; + }), _preferences.Preferences.get('renderInteractiveForms').then(function resolved(value) { + self.viewerPrefs['renderInteractiveForms'] = value; + }), _preferences.Preferences.get('disablePageLabels').then(function resolved(value) { + self.viewerPrefs['disablePageLabels'] = value; + }), _preferences.Preferences.get('enablePrintAutoRotate').then(function resolved(value) { + self.viewerPrefs['enablePrintAutoRotate'] = value; + })]).catch(function (reason) {}); + }, + _initializeViewerComponents: function () { + var self = this; + var appConfig = this.appConfig; + return new Promise(function (resolve, reject) { + var eventBus = appConfig.eventBus || (0, _dom_events.getGlobalEventBus)(); + self.eventBus = eventBus; + var pdfRenderingQueue = new _pdf_rendering_queue.PDFRenderingQueue(); + pdfRenderingQueue.onIdle = self.cleanup.bind(self); + self.pdfRenderingQueue = pdfRenderingQueue; + var pdfLinkService = new _pdf_link_service.PDFLinkService({ eventBus: eventBus }); + self.pdfLinkService = pdfLinkService; + var downloadManager = self.externalServices.createDownloadManager(); + self.downloadManager = downloadManager; + var container = appConfig.mainContainer; + var viewer = appConfig.viewerContainer; + self.pdfViewer = new _pdf_viewer.PDFViewer({ + container: container, + viewer: viewer, + eventBus: eventBus, + renderingQueue: pdfRenderingQueue, + linkService: pdfLinkService, + downloadManager: downloadManager, + renderer: self.viewerPrefs['renderer'], + enhanceTextSelection: self.viewerPrefs['enhanceTextSelection'], + renderInteractiveForms: self.viewerPrefs['renderInteractiveForms'], + enablePrintAutoRotate: self.viewerPrefs['enablePrintAutoRotate'] + }); + pdfRenderingQueue.setViewer(self.pdfViewer); + pdfLinkService.setViewer(self.pdfViewer); + var thumbnailContainer = appConfig.sidebar.thumbnailView; + self.pdfThumbnailViewer = new _pdf_thumbnail_viewer.PDFThumbnailViewer({ + container: thumbnailContainer, + renderingQueue: pdfRenderingQueue, + linkService: pdfLinkService + }); + pdfRenderingQueue.setThumbnailViewer(self.pdfThumbnailViewer); + self.pdfHistory = new _pdf_history.PDFHistory({ + linkService: pdfLinkService, + eventBus: eventBus + }); + pdfLinkService.setHistory(self.pdfHistory); + self.findController = new _pdf_find_controller.PDFFindController({ pdfViewer: self.pdfViewer }); + self.findController.onUpdateResultsCount = function (matchCount) { + if (self.supportsIntegratedFind) { + return; + } + self.findBar.updateResultsCount(matchCount); + }; + self.findController.onUpdateState = function (state, previous, matchCount) { + if (self.supportsIntegratedFind) { + self.externalServices.updateFindControlState({ + result: state, + findPrevious: previous + }); + } else { + self.findBar.updateUIState(state, previous, matchCount); + } + }; + self.pdfViewer.setFindController(self.findController); + var findBarConfig = Object.create(appConfig.findBar); + findBarConfig.findController = self.findController; + findBarConfig.eventBus = eventBus; + self.findBar = new _pdf_find_bar.PDFFindBar(findBarConfig); + self.overlayManager = _overlay_manager.OverlayManager; + self.handTool = new _hand_tool.HandTool({ + container: container, + eventBus: eventBus + }); + self.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties); + self.toolbar = new _toolbar.Toolbar(appConfig.toolbar, container, eventBus); + self.secondaryToolbar = new _secondary_toolbar.SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus); + if (self.supportsFullscreen) { + self.pdfPresentationMode = new _pdf_presentation_mode.PDFPresentationMode({ + container: container, + viewer: viewer, + pdfViewer: self.pdfViewer, + eventBus: eventBus, + contextMenuItems: appConfig.fullscreen }); } - extractPageText(0); - }, - executeCommand: function PDFFindController_executeCommand(cmd, state) { - if (this.state === null || cmd !== 'findagain') { - this.dirtyMatch = true; + self.passwordPrompt = new _password_prompt.PasswordPrompt(appConfig.passwordOverlay); + self.pdfOutlineViewer = new _pdf_outline_viewer.PDFOutlineViewer({ + container: appConfig.sidebar.outlineView, + eventBus: eventBus, + linkService: pdfLinkService + }); + self.pdfAttachmentViewer = new _pdf_attachment_viewer.PDFAttachmentViewer({ + container: appConfig.sidebar.attachmentsView, + eventBus: eventBus, + downloadManager: downloadManager + }); + var sidebarConfig = Object.create(appConfig.sidebar); + sidebarConfig.pdfViewer = self.pdfViewer; + sidebarConfig.pdfThumbnailViewer = self.pdfThumbnailViewer; + sidebarConfig.pdfOutlineViewer = self.pdfOutlineViewer; + sidebarConfig.eventBus = eventBus; + self.pdfSidebar = new _pdf_sidebar.PDFSidebar(sidebarConfig); + self.pdfSidebar.onToggled = self.forceRendering.bind(self); + resolve(undefined); + }); + }, + run: function pdfViewRun(config) { + this.initialize(config).then(webViewerInitialized); + }, + zoomIn: function pdfViewZoomIn(ticks) { + var newScale = this.pdfViewer.currentScale; + do { + newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2); + newScale = Math.ceil(newScale * 10) / 10; + newScale = Math.min(_ui_utils.MAX_SCALE, newScale); + } while (--ticks > 0 && newScale < _ui_utils.MAX_SCALE); + this.pdfViewer.currentScaleValue = newScale; + }, + zoomOut: function pdfViewZoomOut(ticks) { + var newScale = this.pdfViewer.currentScale; + do { + newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2); + newScale = Math.floor(newScale * 10) / 10; + newScale = Math.max(_ui_utils.MIN_SCALE, newScale); + } while (--ticks > 0 && newScale > _ui_utils.MIN_SCALE); + this.pdfViewer.currentScaleValue = newScale; + }, + get pagesCount() { + return this.pdfDocument ? this.pdfDocument.numPages : 0; + }, + set page(val) { + this.pdfViewer.currentPageNumber = val; + }, + get page() { + return this.pdfViewer.currentPageNumber; + }, + get printing() { + return !!this.printService; + }, + get supportsPrinting() { + return PDFPrintServiceFactory.instance.supportsPrinting; + }, + get supportsFullscreen() { + var support; + var doc = document.documentElement; + support = !!(doc.requestFullscreen || doc.mozRequestFullScreen || doc.webkitRequestFullScreen || doc.msRequestFullscreen); + if (document.fullscreenEnabled === false || document.mozFullScreenEnabled === false || document.webkitFullscreenEnabled === false || document.msFullscreenEnabled === false) { + support = false; + } + if (support && _pdfjs.PDFJS.disableFullscreen === true) { + support = false; + } + return (0, _pdfjs.shadow)(this, 'supportsFullscreen', support); + }, + get supportsIntegratedFind() { + return this.externalServices.supportsIntegratedFind; + }, + get supportsDocumentFonts() { + return this.externalServices.supportsDocumentFonts; + }, + get supportsDocumentColors() { + return this.externalServices.supportsDocumentColors; + }, + get loadingBar() { + var bar = new _ui_utils.ProgressBar('#loadingBar', {}); + return (0, _pdfjs.shadow)(this, 'loadingBar', bar); + }, + get supportedMouseWheelZoomModifierKeys() { + return this.externalServices.supportedMouseWheelZoomModifierKeys; + }, + initPassiveLoading: function pdfViewInitPassiveLoading() { + throw new Error('Not implemented: initPassiveLoading'); + }, + setTitleUsingUrl: function pdfViewSetTitleUsingUrl(url) { + this.url = url; + this.baseUrl = url.split('#')[0]; + var title = (0, _ui_utils.getPDFFileNameFromURL)(url, ''); + if (!title) { + try { + title = decodeURIComponent((0, _pdfjs.getFilenameFromUrl)(url)) || url; + } catch (e) { + title = url; } - this.state = state; - this.updateUIState(FindStates.FIND_PENDING); - this.firstPagePromise.then(function () { - this.extractText(); - clearTimeout(this.findTimeout); - if (cmd === 'find') { - this.findTimeout = setTimeout(this.nextMatch.bind(this), 250); - } else { - this.nextMatch(); - } + } + this.setTitle(title); + }, + setTitle: function pdfViewSetTitle(title) { + if (this.isViewerEmbedded) { + return; + } + document.title = title; + }, + close: function pdfViewClose() { + var errorWrapper = this.appConfig.errorWrapper.container; + errorWrapper.setAttribute('hidden', 'true'); + if (!this.pdfLoadingTask) { + return Promise.resolve(); + } + var promise = this.pdfLoadingTask.destroy(); + this.pdfLoadingTask = null; + if (this.pdfDocument) { + this.pdfDocument = null; + this.pdfThumbnailViewer.setDocument(null); + this.pdfViewer.setDocument(null); + this.pdfLinkService.setDocument(null, null); + } + this.store = null; + this.isInitialViewSet = false; + this.pdfSidebar.reset(); + this.pdfOutlineViewer.reset(); + this.pdfAttachmentViewer.reset(); + this.findController.reset(); + this.findBar.reset(); + this.toolbar.reset(); + this.secondaryToolbar.reset(); + if (typeof PDFBug !== 'undefined') { + PDFBug.cleanup(); + } + return promise; + }, + open: function pdfViewOpen(file, args) { + if (arguments.length > 2 || typeof args === 'number') { + return Promise.reject(new Error('Call of open() with obsolete signature.')); + } + if (this.pdfLoadingTask) { + return this.close().then(function () { + _preferences.Preferences.reload(); + return this.open(file, args); }.bind(this)); - }, - updatePage: function PDFFindController_updatePage(index) { - if (this.selected.pageIdx === index) { - this.pdfViewer.currentPageNumber = index + 1; + } + var parameters = Object.create(null), + scale; + if (typeof file === 'string') { + this.setTitleUsingUrl(file); + parameters.url = file; + } else if (file && 'byteLength' in file) { + parameters.data = file; + } else if (file.url && file.originalUrl) { + this.setTitleUsingUrl(file.originalUrl); + parameters.url = file.url; + } + if (args) { + for (var prop in args) { + parameters[prop] = args[prop]; } - var page = this.pdfViewer.getPageView(index); - if (page.textLayer) { - page.textLayer.updateMatches(); + if (args.scale) { + scale = args.scale; } - }, - nextMatch: function PDFFindController_nextMatch() { - var previous = this.state.findPrevious; - var currentPageIndex = this.pdfViewer.currentPageNumber - 1; - var numPages = this.pdfViewer.pagesCount; - this.active = true; - if (this.dirtyMatch) { - this.dirtyMatch = false; - this.selected.pageIdx = this.selected.matchIdx = -1; - this.offset.pageIdx = currentPageIndex; - this.offset.matchIdx = null; - this.hadMatch = false; - this.resumePageIdx = null; - this.pageMatches = []; - this.matchCount = 0; - this.pageMatchesLength = null; - var self = this; - for (var i = 0; i < numPages; i++) { - this.updatePage(i); - if (!(i in this.pendingFindMatches)) { - this.pendingFindMatches[i] = true; - this.extractTextPromises[i].then(function (pageIdx) { - delete self.pendingFindMatches[pageIdx]; - self.calcFindMatch(pageIdx); - }); - } + if (args.length) { + this.pdfDocumentProperties.setFileSize(args.length); + } + } + var self = this; + self.downloadComplete = false; + var loadingTask = (0, _pdfjs.getDocument)(parameters); + this.pdfLoadingTask = loadingTask; + loadingTask.onPassword = function passwordNeeded(updateCallback, reason) { + self.passwordPrompt.setUpdateCallback(updateCallback, reason); + self.passwordPrompt.open(); + }; + loadingTask.onProgress = function getDocumentProgress(progressData) { + self.progress(progressData.loaded / progressData.total); + }; + loadingTask.onUnsupportedFeature = this.fallback.bind(this); + return loadingTask.promise.then(function getDocumentCallback(pdfDocument) { + self.load(pdfDocument, scale); + }, function getDocumentError(exception) { + var message = exception && exception.message; + var loadingErrorMessage = _ui_utils.mozL10n.get('loading_error', null, 'An error occurred while loading the PDF.'); + if (exception instanceof _pdfjs.InvalidPDFException) { + loadingErrorMessage = _ui_utils.mozL10n.get('invalid_file_error', null, 'Invalid or corrupted PDF file.'); + } else if (exception instanceof _pdfjs.MissingPDFException) { + loadingErrorMessage = _ui_utils.mozL10n.get('missing_file_error', null, 'Missing PDF file.'); + } else if (exception instanceof _pdfjs.UnexpectedResponseException) { + loadingErrorMessage = _ui_utils.mozL10n.get('unexpected_response_error', null, 'Unexpected server response.'); + } + var moreInfo = { message: message }; + self.error(loadingErrorMessage, moreInfo); + throw new Error(loadingErrorMessage); + }); + }, + download: function pdfViewDownload() { + function downloadByUrl() { + downloadManager.downloadUrl(url, filename); + } + var url = this.baseUrl; + var filename = (0, _ui_utils.getPDFFileNameFromURL)(this.url); + var downloadManager = this.downloadManager; + downloadManager.onerror = function (err) { + PDFViewerApplication.error('PDF failed to download.'); + }; + if (!this.pdfDocument) { + downloadByUrl(); + return; + } + if (!this.downloadComplete) { + downloadByUrl(); + return; + } + this.pdfDocument.getData().then(function getDataSuccess(data) { + var blob = (0, _pdfjs.createBlob)(data, 'application/pdf'); + downloadManager.download(blob, url, filename); + }, downloadByUrl).then(null, downloadByUrl); + }, + fallback: function pdfViewFallback(featureId) {}, + error: function pdfViewError(message, moreInfo) { + var moreInfoText = _ui_utils.mozL10n.get('error_version_info', { + version: _pdfjs.version || '?', + build: _pdfjs.build || '?' + }, 'PDF.js v{{version}} (build: {{build}})') + '\n'; + if (moreInfo) { + moreInfoText += _ui_utils.mozL10n.get('error_message', { message: moreInfo.message }, 'Message: {{message}}'); + if (moreInfo.stack) { + moreInfoText += '\n' + _ui_utils.mozL10n.get('error_stack', { stack: moreInfo.stack }, 'Stack: {{stack}}'); + } else { + if (moreInfo.filename) { + moreInfoText += '\n' + _ui_utils.mozL10n.get('error_file', { file: moreInfo.filename }, 'File: {{file}}'); + } + if (moreInfo.lineNumber) { + moreInfoText += '\n' + _ui_utils.mozL10n.get('error_line', { line: moreInfo.lineNumber }, 'Line: {{line}}'); } } - if (this.state.query === '') { - this.updateUIState(FindStates.FIND_FOUND); - return; + } + var errorWrapperConfig = this.appConfig.errorWrapper; + var errorWrapper = errorWrapperConfig.container; + errorWrapper.removeAttribute('hidden'); + var errorMessage = errorWrapperConfig.errorMessage; + errorMessage.textContent = message; + var closeButton = errorWrapperConfig.closeButton; + closeButton.onclick = function () { + errorWrapper.setAttribute('hidden', 'true'); + }; + var errorMoreInfo = errorWrapperConfig.errorMoreInfo; + var moreInfoButton = errorWrapperConfig.moreInfoButton; + var lessInfoButton = errorWrapperConfig.lessInfoButton; + moreInfoButton.onclick = function () { + errorMoreInfo.removeAttribute('hidden'); + moreInfoButton.setAttribute('hidden', 'true'); + lessInfoButton.removeAttribute('hidden'); + errorMoreInfo.style.height = errorMoreInfo.scrollHeight + 'px'; + }; + lessInfoButton.onclick = function () { + errorMoreInfo.setAttribute('hidden', 'true'); + moreInfoButton.removeAttribute('hidden'); + lessInfoButton.setAttribute('hidden', 'true'); + }; + moreInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler; + lessInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler; + closeButton.oncontextmenu = _ui_utils.noContextMenuHandler; + moreInfoButton.removeAttribute('hidden'); + lessInfoButton.setAttribute('hidden', 'true'); + errorMoreInfo.value = moreInfoText; + }, + progress: function pdfViewProgress(level) { + var percent = Math.round(level * 100); + if (percent > this.loadingBar.percent || isNaN(percent)) { + this.loadingBar.percent = percent; + if (_pdfjs.PDFJS.disableAutoFetch && percent) { + if (this.disableAutoFetchLoadingBarTimeout) { + clearTimeout(this.disableAutoFetchLoadingBarTimeout); + this.disableAutoFetchLoadingBarTimeout = null; + } + this.loadingBar.show(); + this.disableAutoFetchLoadingBarTimeout = setTimeout(function () { + this.loadingBar.hide(); + this.disableAutoFetchLoadingBarTimeout = null; + }.bind(this), DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT); } - if (this.resumePageIdx) { - return; + } + }, + load: function pdfViewLoad(pdfDocument, scale) { + var self = this; + scale = scale || _ui_utils.UNKNOWN_SCALE; + this.pdfDocument = pdfDocument; + this.pdfDocumentProperties.setDocumentAndUrl(pdfDocument, this.url); + var downloadedPromise = pdfDocument.getDownloadInfo().then(function () { + self.downloadComplete = true; + self.loadingBar.hide(); + }); + this.toolbar.setPagesCount(pdfDocument.numPages, false); + this.secondaryToolbar.setPagesCount(pdfDocument.numPages); + var id = this.documentFingerprint = pdfDocument.fingerprint; + var store = this.store = new _view_history.ViewHistory(id); + var baseDocumentUrl; + baseDocumentUrl = null; + this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl); + var pdfViewer = this.pdfViewer; + pdfViewer.currentScale = scale; + pdfViewer.setDocument(pdfDocument); + var firstPagePromise = pdfViewer.firstPagePromise; + var pagesPromise = pdfViewer.pagesPromise; + var onePageRendered = pdfViewer.onePageRendered; + this.pageRotation = 0; + var pdfThumbnailViewer = this.pdfThumbnailViewer; + pdfThumbnailViewer.setDocument(pdfDocument); + firstPagePromise.then(function (pdfPage) { + downloadedPromise.then(function () { + self.eventBus.dispatch('documentload', { source: self }); + }); + self.loadingBar.setWidth(self.appConfig.viewerContainer); + if (!_pdfjs.PDFJS.disableHistory && !self.isViewerEmbedded) { + if (!self.viewerPrefs['showPreviousViewOnLoad']) { + self.pdfHistory.clearHistoryState(); + } + self.pdfHistory.initialize(self.documentFingerprint); + if (self.pdfHistory.initialDestination) { + self.initialDestination = self.pdfHistory.initialDestination; + } else if (self.pdfHistory.initialBookmark) { + self.initialBookmark = self.pdfHistory.initialBookmark; + } } - var offset = this.offset; - this.pagesToSearch = numPages; - if (offset.matchIdx !== null) { - var numPageMatches = this.pageMatches[offset.pageIdx].length; - if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) { - this.hadMatch = true; - offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1; - this.updateMatch(true); + var initialParams = { + destination: self.initialDestination, + bookmark: self.initialBookmark, + hash: null + }; + store.initializedPromise.then(function resolved() { + var storedHash = null, + sidebarView = null; + if (self.viewerPrefs['showPreviousViewOnLoad'] && store.get('exists', false)) { + var pageNum = store.get('page', '1'); + var zoom = self.viewerPrefs['defaultZoomValue'] || store.get('zoom', _ui_utils.DEFAULT_SCALE_VALUE); + var left = store.get('scrollLeft', '0'); + var top = store.get('scrollTop', '0'); + storedHash = 'page=' + pageNum + '&zoom=' + zoom + ',' + left + ',' + top; + sidebarView = store.get('sidebarView', _pdf_sidebar.SidebarView.NONE); + } else if (self.viewerPrefs['defaultZoomValue']) { + storedHash = 'page=1&zoom=' + self.viewerPrefs['defaultZoomValue']; + } + self.setInitialView(storedHash, { + scale: scale, + sidebarView: sidebarView + }); + initialParams.hash = storedHash; + if (!self.isViewerEmbedded) { + self.pdfViewer.focus(); + } + }, function rejected(reason) { + console.error(reason); + self.setInitialView(null, { scale: scale }); + }); + pagesPromise.then(function resolved() { + if (!initialParams.destination && !initialParams.bookmark && !initialParams.hash) { return; } - this.advanceOffsetPage(previous); - } - this.nextPageMatch(); - }, - matchesReady: function PDFFindController_matchesReady(matches) { - var offset = this.offset; - var numMatches = matches.length; - var previous = this.state.findPrevious; - if (numMatches) { - this.hadMatch = true; - offset.matchIdx = previous ? numMatches - 1 : 0; - this.updateMatch(true); - return true; - } - this.advanceOffsetPage(previous); - if (offset.wrapped) { - offset.matchIdx = null; - if (this.pagesToSearch < 0) { - this.updateMatch(false); - return true; + if (self.hasEqualPageSizes) { + return; } + self.initialDestination = initialParams.destination; + self.initialBookmark = initialParams.bookmark; + self.pdfViewer.currentScaleValue = self.pdfViewer.currentScaleValue; + self.setInitialView(initialParams.hash); + }); + }); + pdfDocument.getPageLabels().then(function (labels) { + if (!labels || self.viewerPrefs['disablePageLabels']) { + return; } - return false; - }, - updateMatchPosition: function PDFFindController_updateMatchPosition(pageIndex, index, elements, beginIdx) { - if (this.selected.matchIdx === index && this.selected.pageIdx === pageIndex) { - var spot = { - top: FIND_SCROLL_OFFSET_TOP, - left: FIND_SCROLL_OFFSET_LEFT - }; - scrollIntoView(elements[beginIdx], spot, true); + var i = 0, + numLabels = labels.length; + if (numLabels !== self.pagesCount) { + console.error('The number of Page Labels does not match ' + 'the number of pages in the document.'); + return; } - }, - nextPageMatch: function PDFFindController_nextPageMatch() { - if (this.resumePageIdx !== null) { - console.error('There can only be one pending page.'); + while (i < numLabels && labels[i] === (i + 1).toString()) { + i++; } - do { - var pageIdx = this.offset.pageIdx; - var matches = this.pageMatches[pageIdx]; - if (!matches) { - this.resumePageIdx = pageIdx; - break; - } - } while (!this.matchesReady(matches)); - }, - advanceOffsetPage: function PDFFindController_advanceOffsetPage(previous) { - var offset = this.offset; - var numPages = this.extractTextPromises.length; - offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1; - offset.matchIdx = null; - this.pagesToSearch--; - if (offset.pageIdx >= numPages || offset.pageIdx < 0) { - offset.pageIdx = previous ? numPages - 1 : 0; - offset.wrapped = true; + if (i === numLabels) { + return; } - }, - updateMatch: function PDFFindController_updateMatch(found) { - var state = FindStates.FIND_NOTFOUND; - var wrapped = this.offset.wrapped; - this.offset.wrapped = false; - if (found) { - var previousPage = this.selected.pageIdx; - this.selected.pageIdx = this.offset.pageIdx; - this.selected.matchIdx = this.offset.matchIdx; - state = wrapped ? FindStates.FIND_WRAPPED : FindStates.FIND_FOUND; - if (previousPage !== -1 && previousPage !== this.selected.pageIdx) { - this.updatePage(previousPage); + pdfViewer.setPageLabels(labels); + pdfThumbnailViewer.setPageLabels(labels); + self.toolbar.setPagesCount(pdfDocument.numPages, true); + self.toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel); + }); + pagesPromise.then(function () { + if (self.supportsPrinting) { + pdfDocument.getJavaScript().then(function (javaScript) { + if (javaScript.length) { + console.warn('Warning: JavaScript is not supported'); + self.fallback(_pdfjs.UNSUPPORTED_FEATURES.javaScript); + } + var regex = /\bprint\s*\(/; + for (var i = 0, ii = javaScript.length; i < ii; i++) { + var js = javaScript[i]; + if (js && regex.test(js)) { + setTimeout(function () { + window.print(); + }); + return; + } + } + }); + } + }); + Promise.all([onePageRendered, _ui_utils.animationStarted]).then(function () { + pdfDocument.getOutline().then(function (outline) { + self.pdfOutlineViewer.render({ outline: outline }); + }); + pdfDocument.getAttachments().then(function (attachments) { + self.pdfAttachmentViewer.render({ attachments: attachments }); + }); + }); + pdfDocument.getMetadata().then(function (data) { + var info = data.info, + metadata = data.metadata; + self.documentInfo = info; + self.metadata = metadata; + console.log('PDF ' + pdfDocument.fingerprint + ' [' + info.PDFFormatVersion + ' ' + (info.Producer || '-').trim() + ' / ' + (info.Creator || '-').trim() + ']' + ' (PDF.js: ' + (_pdfjs.version || '-') + (!_pdfjs.PDFJS.disableWebGL ? ' [WebGL]' : '') + ')'); + var pdfTitle; + if (metadata && metadata.has('dc:title')) { + var title = metadata.get('dc:title'); + if (title !== 'Untitled') { + pdfTitle = title; } } - this.updateUIState(state, this.state.findPrevious); - if (this.selected.pageIdx !== -1) { - this.updatePage(this.selected.pageIdx); + if (!pdfTitle && info && info['Title']) { + pdfTitle = info['Title']; } - }, - updateUIResultsCount: function PDFFindController_updateUIResultsCount() { - if (this.onUpdateResultsCount) { - this.onUpdateResultsCount(this.matchCount); + if (pdfTitle) { + self.setTitle(pdfTitle + ' - ' + document.title); } - }, - updateUIState: function PDFFindController_updateUIState(state, previous) { - if (this.onUpdateState) { - this.onUpdateState(state, previous, this.matchCount); + if (info.IsAcroFormPresent) { + console.warn('Warning: AcroForm/XFA is not supported'); + self.fallback(_pdfjs.UNSUPPORTED_FEATURES.forms); } + }); + }, + setInitialView: function pdfViewSetInitialView(storedHash, options) { + var scale = options && options.scale; + var sidebarView = options && options.sidebarView; + this.isInitialViewSet = true; + this.pdfSidebar.setInitialView(this.viewerPrefs['sidebarViewOnLoad'] || sidebarView | 0); + if (this.initialDestination) { + this.pdfLinkService.navigateTo(this.initialDestination); + this.initialDestination = null; + } else 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); + } else if (scale) { + this.pdfViewer.currentScaleValue = scale; + this.page = 1; } - }; - return PDFFindController; -}(); -exports.FindStates = FindStates; -exports.PDFFindController = PDFFindController; - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __w_pdfjs_require__) { - -"use strict"; - - -var domEvents = __w_pdfjs_require__(2); -function PDFHistory(options) { - this.linkService = options.linkService; - this.eventBus = options.eventBus || domEvents.getGlobalEventBus(); - this.initialized = false; - this.initialDestination = null; - this.initialBookmark = null; -} -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; - } - 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; + this.toolbar.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel); + this.secondaryToolbar.setPageNumber(this.pdfViewer.currentPageNumber); + if (!this.pdfViewer.currentScaleValue) { + this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; + } + }, + cleanup: function pdfViewCleanup() { + if (!this.pdfDocument) { + return; + } + this.pdfViewer.cleanup(); + this.pdfThumbnailViewer.cleanup(); + if (this.pdfViewer.renderer !== _ui_utils.RendererType.SVG) { + this.pdfDocument.cleanup(); + } + }, + forceRendering: function pdfViewForceRendering() { + this.pdfRenderingQueue.printing = this.printing; + this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar.isThumbnailViewVisible; + this.pdfRenderingQueue.renderHighestPriority(); + }, + beforePrint: function pdfViewSetupBeforePrint() { + if (this.printService) { + return; + } + if (!this.supportsPrinting) { + var printMessage = _ui_utils.mozL10n.get('printing_not_supported', null, 'Warning: Printing is not fully supported by this browser.'); + this.error(printMessage); + return; + } + if (!this.pdfViewer.pageViewsReady) { + var notReadyMessage = _ui_utils.mozL10n.get('printing_not_ready', null, 'Warning: The PDF is not fully loaded for printing.'); + window.alert(notReadyMessage); + return; + } + var pagesOverview = this.pdfViewer.getPagesOverview(); + var printContainer = this.appConfig.printContainer; + var printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer); + this.printService = printService; + this.forceRendering(); + printService.layout(); + }, + get hasEqualPageSizes() { + var firstPage = this.pdfViewer.getPageView(0); + for (var i = 1, ii = this.pagesCount; i < ii; ++i) { + var pageView = this.pdfViewer.getPageView(i); + if (pageView.width !== firstPage.width || pageView.height !== firstPage.height) { + return false; } - this._pushOrReplaceState({ fingerprint: this.fingerprint }, true); } - var self = this; - window.addEventListener('popstate', function pdfHistoryPopstate(evt) { - if (!self.historyUnlocked) { + return true; + }, + afterPrint: function pdfViewSetupAfterPrint() { + if (this.printService) { + this.printService.destroy(); + this.printService = null; + } + this.forceRendering(); + }, + rotatePages: function pdfViewRotatePages(delta) { + var pageNumber = this.page; + this.pageRotation = (this.pageRotation + 360 + delta) % 360; + this.pdfViewer.pagesRotation = this.pageRotation; + this.pdfThumbnailViewer.pagesRotation = this.pageRotation; + this.forceRendering(); + this.pdfViewer.currentPageNumber = pageNumber; + }, + requestPresentationMode: function pdfViewRequestPresentationMode() { + if (!this.pdfPresentationMode) { + return; + } + this.pdfPresentationMode.request(); + }, + bindEvents: function pdfViewBindEvents() { + var eventBus = this.eventBus; + eventBus.on('resize', webViewerResize); + eventBus.on('hashchange', webViewerHashchange); + eventBus.on('beforeprint', this.beforePrint.bind(this)); + eventBus.on('afterprint', this.afterPrint.bind(this)); + eventBus.on('pagerendered', webViewerPageRendered); + eventBus.on('textlayerrendered', webViewerTextLayerRendered); + eventBus.on('updateviewarea', webViewerUpdateViewarea); + eventBus.on('pagechanging', webViewerPageChanging); + eventBus.on('scalechanging', webViewerScaleChanging); + eventBus.on('sidebarviewchanged', webViewerSidebarViewChanged); + eventBus.on('pagemode', webViewerPageMode); + eventBus.on('namedaction', webViewerNamedAction); + eventBus.on('presentationmodechanged', webViewerPresentationModeChanged); + eventBus.on('presentationmode', webViewerPresentationMode); + eventBus.on('openfile', webViewerOpenFile); + eventBus.on('print', webViewerPrint); + eventBus.on('download', webViewerDownload); + eventBus.on('firstpage', webViewerFirstPage); + eventBus.on('lastpage', webViewerLastPage); + eventBus.on('nextpage', webViewerNextPage); + eventBus.on('previouspage', webViewerPreviousPage); + eventBus.on('zoomin', webViewerZoomIn); + eventBus.on('zoomout', webViewerZoomOut); + eventBus.on('pagenumberchanged', webViewerPageNumberChanged); + eventBus.on('scalechanged', webViewerScaleChanged); + eventBus.on('rotatecw', webViewerRotateCw); + eventBus.on('rotateccw', webViewerRotateCcw); + eventBus.on('documentproperties', webViewerDocumentProperties); + eventBus.on('find', webViewerFind); + eventBus.on('findfromurlhash', webViewerFindFromUrlHash); + eventBus.on('fileinputchange', webViewerFileInputChange); + }, + bindWindowEvents: function pdfViewBindWindowEvents() { + var eventBus = this.eventBus; + window.addEventListener('wheel', webViewerWheel); + window.addEventListener('click', webViewerClick); + window.addEventListener('keydown', webViewerKeyDown); + window.addEventListener('resize', function windowResize() { + eventBus.dispatch('resize'); + }); + window.addEventListener('hashchange', function windowHashChange() { + eventBus.dispatch('hashchange', { hash: document.location.hash.substring(1) }); + }); + window.addEventListener('beforeprint', function windowBeforePrint() { + eventBus.dispatch('beforeprint'); + }); + window.addEventListener('afterprint', function windowAfterPrint() { + eventBus.dispatch('afterprint'); + }); + window.addEventListener('change', function windowChange(evt) { + var files = evt.target.files; + if (!files || files.length === 0) { return; } - if (evt.state) { - self._goTo(evt.state); + eventBus.dispatch('fileinputchange', { fileInput: evt.target }); + }); + } +}; +var validateFileURL; +{ + var HOSTED_VIEWER_ORIGINS = ['null', 'http://mozilla.github.io', 'https://mozilla.github.io']; + validateFileURL = function validateFileURL(file) { + try { + var viewerOrigin = new URL(window.location.href).origin || 'null'; + if (HOSTED_VIEWER_ORIGINS.indexOf(viewerOrigin) >= 0) { 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 fileOrigin = new URL(file, window.location.href).origin; + if (fileOrigin !== viewerOrigin) { + throw new Error('file origin does not match viewer\'s'); } - }); - function updateHistoryWithCurrentHash() { - self.previousHash = window.location.hash.slice(1); - self._pushToHistory({ hash: self.previousHash }, false, true); - self._updatePreviousBookmark(); + } catch (e) { + var message = e && e.message; + var loadingErrorMessage = _ui_utils.mozL10n.get('loading_error', null, 'An error occurred while loading the PDF.'); + var moreInfo = { message: message }; + PDFViewerApplication.error(loadingErrorMessage, moreInfo); + throw e; } - 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(); + }; +} +function loadAndEnablePDFBug(enabledTabs) { + return new Promise(function (resolve, reject) { + var appConfig = PDFViewerApplication.appConfig; + var script = document.createElement('script'); + script.src = appConfig.debuggerScriptPath; + script.onload = function () { + PDFBug.enable(enabledTabs); + PDFBug.init({ + PDFJS: _pdfjs.PDFJS, + OPS: _pdfjs.OPS + }, appConfig.mainContainer); + resolve(); + }; + script.onerror = function () { + reject(new Error('Cannot load debugger at ' + script.src)); + }; + (document.getElementsByTagName('head')[0] || document.body).appendChild(script); + }); +} +function webViewerInitialized() { + var appConfig = PDFViewerApplication.appConfig; + var file; + var queryString = document.location.search.substring(1); + var params = (0, _ui_utils.parseQueryString)(queryString); + file = 'file' in params ? params.file : appConfig.defaultUrl; + validateFileURL(file); + var waitForBeforeOpening = []; + var fileInput = document.createElement('input'); + fileInput.id = appConfig.openFileInputName; + fileInput.className = 'fileInput'; + fileInput.setAttribute('type', 'file'); + fileInput.oncontextmenu = _ui_utils.noContextMenuHandler; + document.body.appendChild(fileInput); + if (!window.File || !window.FileReader || !window.FileList || !window.Blob) { + appConfig.toolbar.openFile.setAttribute('hidden', 'true'); + appConfig.secondaryToolbar.openFileButton.setAttribute('hidden', 'true'); + } else { + fileInput.value = null; + } + if (PDFViewerApplication.viewerPrefs['pdfBugEnabled']) { + var hash = document.location.hash.substring(1); + var hashParams = (0, _ui_utils.parseQueryString)(hash); + if ('disableworker' in hashParams) { + _pdfjs.PDFJS.disableWorker = hashParams['disableworker'] === 'true'; + } + if ('disablerange' in hashParams) { + _pdfjs.PDFJS.disableRange = hashParams['disablerange'] === 'true'; + } + if ('disablestream' in hashParams) { + _pdfjs.PDFJS.disableStream = hashParams['disablestream'] === 'true'; + } + if ('disableautofetch' in hashParams) { + _pdfjs.PDFJS.disableAutoFetch = hashParams['disableautofetch'] === 'true'; + } + if ('disablefontface' in hashParams) { + _pdfjs.PDFJS.disableFontFace = hashParams['disablefontface'] === 'true'; + } + if ('disablehistory' in hashParams) { + _pdfjs.PDFJS.disableHistory = hashParams['disablehistory'] === 'true'; + } + if ('webgl' in hashParams) { + _pdfjs.PDFJS.disableWebGL = hashParams['webgl'] !== 'true'; + } + if ('useonlycsszoom' in hashParams) { + _pdfjs.PDFJS.useOnlyCssZoom = hashParams['useonlycsszoom'] === 'true'; + } + if ('verbosity' in hashParams) { + _pdfjs.PDFJS.verbosity = hashParams['verbosity'] | 0; + } + if ('ignorecurrentpositiononzoom' in hashParams) { + _pdfjs.PDFJS.ignoreCurrentPositionOnZoom = hashParams['ignorecurrentpositiononzoom'] === 'true'; + } + if ('locale' in hashParams) { + _pdfjs.PDFJS.locale = hashParams['locale']; + } + if ('textlayer' in hashParams) { + switch (hashParams['textlayer']) { + case 'off': + _pdfjs.PDFJS.disableTextLayer = true; + break; + case 'visible': + case 'shadow': + case 'hover': + var viewer = appConfig.viewerContainer; + viewer.classList.add('textLayer-' + hashParams['textlayer']); + break; } } - 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 ('pdfbug' in hashParams) { + _pdfjs.PDFJS.pdfBug = true; + var pdfBug = hashParams['pdfbug']; + var enabled = pdfBug.split(','); + waitForBeforeOpening.push(loadAndEnablePDFBug(enabled)); + } + } + _ui_utils.mozL10n.setLanguage(_pdfjs.PDFJS.locale); + if (!PDFViewerApplication.supportsPrinting) { + appConfig.toolbar.print.classList.add('hidden'); + appConfig.secondaryToolbar.printButton.classList.add('hidden'); + } + if (!PDFViewerApplication.supportsFullscreen) { + appConfig.toolbar.presentationModeButton.classList.add('hidden'); + appConfig.secondaryToolbar.presentationModeButton.classList.add('hidden'); + } + if (PDFViewerApplication.supportsIntegratedFind) { + appConfig.toolbar.viewFind.classList.add('hidden'); + } + appConfig.sidebar.mainContainer.addEventListener('transitionend', function (e) { + if (e.target === this) { + PDFViewerApplication.eventBus.dispatch('resize'); + } + }, true); + appConfig.sidebar.toggleButton.addEventListener('click', function () { + PDFViewerApplication.pdfSidebar.toggle(); + }); + Promise.all(waitForBeforeOpening).then(function () { + webViewerOpenFileViaURL(file); + }).catch(function (reason) { + PDFViewerApplication.error(_ui_utils.mozL10n.get('loading_error', null, 'An error occurred while opening.'), reason); + }); +} +var webViewerOpenFileViaURL; +{ + webViewerOpenFileViaURL = function webViewerOpenFileViaURL(file) { + if (file && file.lastIndexOf('file:', 0) === 0) { + PDFViewerApplication.setTitleUsingUrl(file); + var xhr = new XMLHttpRequest(); + xhr.onload = function () { + PDFViewerApplication.open(new Uint8Array(xhr.response)); + }; + try { + xhr.open('GET', file); + xhr.responseType = 'arraybuffer'; + xhr.send(); + } catch (e) { + PDFViewerApplication.error(_ui_utils.mozL10n.get('loading_error', null, 'An error occurred while loading the PDF.'), e); } - window.removeEventListener('beforeunload', pdfHistoryBeforeUnload); + return; } - window.addEventListener('beforeunload', pdfHistoryBeforeUnload); - window.addEventListener('pageshow', function pdfHistoryPageShow(evt) { - window.addEventListener('beforeunload', pdfHistoryBeforeUnload); - }); - self.eventBus.on('presentationmodechanged', function (e) { - self.isViewerInPresentationMode = e.active; + if (file) { + PDFViewerApplication.open(file); + } + }; +} +function webViewerPageRendered(e) { + var pageNumber = e.pageNumber; + var pageIndex = pageNumber - 1; + var pageView = PDFViewerApplication.pdfViewer.getPageView(pageIndex); + if (pageNumber === PDFViewerApplication.page) { + PDFViewerApplication.toolbar.updateLoadingIndicatorState(false); + } + if (!pageView) { + return; + } + if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { + var thumbnailView = PDFViewerApplication.pdfThumbnailViewer.getThumbnail(pageIndex); + thumbnailView.setImage(pageView); + } + if (_pdfjs.PDFJS.pdfBug && Stats.enabled && pageView.stats) { + Stats.add(pageNumber, pageView.stats); + } + if (pageView.error) { + PDFViewerApplication.error(_ui_utils.mozL10n.get('rendering_error', null, 'An error occurred while rendering the page.'), pageView.error); + } +} +function webViewerTextLayerRendered(e) {} +function webViewerPageMode(e) { + var mode = e.mode, + view; + switch (mode) { + case 'thumbs': + view = _pdf_sidebar.SidebarView.THUMBS; + break; + case 'bookmarks': + case 'outline': + view = _pdf_sidebar.SidebarView.OUTLINE; + break; + case 'attachments': + view = _pdf_sidebar.SidebarView.ATTACHMENTS; + break; + case 'none': + view = _pdf_sidebar.SidebarView.NONE; + break; + default: + console.error('Invalid "pagemode" hash parameter: ' + mode); + return; + } + PDFViewerApplication.pdfSidebar.switchView(view, true); +} +function webViewerNamedAction(e) { + var action = e.action; + switch (action) { + case 'GoToPage': + PDFViewerApplication.appConfig.toolbar.pageNumber.select(); + break; + case 'Find': + if (!PDFViewerApplication.supportsIntegratedFind) { + PDFViewerApplication.findBar.toggle(); + } + break; + } +} +function webViewerPresentationModeChanged(e) { + var active = e.active; + var switchInProgress = e.switchInProgress; + PDFViewerApplication.pdfViewer.presentationModeState = switchInProgress ? _pdf_viewer.PresentationModeState.CHANGING : active ? _pdf_viewer.PresentationModeState.FULLSCREEN : _pdf_viewer.PresentationModeState.NORMAL; +} +function webViewerSidebarViewChanged(e) { + PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = PDFViewerApplication.pdfSidebar.isThumbnailViewVisible; + var store = PDFViewerApplication.store; + if (!store || !PDFViewerApplication.isInitialViewSet) { + return; + } + store.initializedPromise.then(function () { + store.set('sidebarView', e.view).catch(function () {}); + }); +} +function webViewerUpdateViewarea(e) { + var location = e.location, + store = PDFViewerApplication.store; + if (store) { + store.initializedPromise.then(function () { + store.setMultiple({ + 'exists': true, + 'page': location.pageNumber, + 'zoom': location.scale, + 'scrollLeft': location.left, + 'scrollTop': location.top + }).catch(function () {}); }); - }, - 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); + } + 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); +} +function webViewerResize() { + var currentScaleValue = PDFViewerApplication.pdfViewer.currentScaleValue; + if (currentScaleValue === 'auto' || currentScaleValue === 'page-fit' || currentScaleValue === 'page-width') { + PDFViewerApplication.pdfViewer.currentScaleValue = currentScaleValue; + } else if (!currentScaleValue) { + PDFViewerApplication.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; + } + PDFViewerApplication.pdfViewer.update(); +} +function webViewerHashchange(e) { + if (PDFViewerApplication.pdfHistory.isHashChangeUnlocked) { + var hash = e.hash; + if (!hash) { + return; + } + if (!PDFViewerApplication.isInitialViewSet) { + PDFViewerApplication.initialBookmark = hash; } else { - window.history.pushState(stateObj, '', document.URL); + PDFViewerApplication.pdfLinkService.setHash(hash); } - }, - get isHashChangeUnlocked() { - if (!this.initialized) { - return true; + } +} +var webViewerFileInputChange; +{ + webViewerFileInputChange = function webViewerFileInputChange(e) { + var file = e.fileInput.files[0]; + if (!_pdfjs.PDFJS.disableCreateObjectURL && typeof URL !== 'undefined' && URL.createObjectURL) { + PDFViewerApplication.open(URL.createObjectURL(file)); + } else { + var fileReader = new FileReader(); + fileReader.onload = function webViewerChangeFileReaderOnload(evt) { + var buffer = evt.target.result; + var uint8Array = new Uint8Array(buffer); + PDFViewerApplication.open(uint8Array); + }; + fileReader.readAsArrayBuffer(file); } - 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; + PDFViewerApplication.setTitleUsingUrl(file.name); + var appConfig = PDFViewerApplication.appConfig; + appConfig.toolbar.viewBookmark.setAttribute('hidden', 'true'); + appConfig.secondaryToolbar.viewBookmarkButton.setAttribute('hidden', 'true'); + appConfig.toolbar.download.setAttribute('hidden', 'true'); + appConfig.secondaryToolbar.downloadButton.setAttribute('hidden', 'true'); + }; +} +function webViewerPresentationMode() { + PDFViewerApplication.requestPresentationMode(); +} +function webViewerOpenFile() { + var openFileInputName = PDFViewerApplication.appConfig.openFileInputName; + document.getElementById(openFileInputName).click(); +} +function webViewerPrint() { + window.print(); +} +function webViewerDownload() { + PDFViewerApplication.download(); +} +function webViewerFirstPage() { + if (PDFViewerApplication.pdfDocument) { + PDFViewerApplication.page = 1; + } +} +function webViewerLastPage() { + if (PDFViewerApplication.pdfDocument) { + PDFViewerApplication.page = PDFViewerApplication.pagesCount; + } +} +function webViewerNextPage() { + PDFViewerApplication.page++; +} +function webViewerPreviousPage() { + PDFViewerApplication.page--; +} +function webViewerZoomIn() { + PDFViewerApplication.zoomIn(); +} +function webViewerZoomOut() { + PDFViewerApplication.zoomOut(); +} +function webViewerPageNumberChanged(e) { + var pdfViewer = PDFViewerApplication.pdfViewer; + pdfViewer.currentPageLabel = e.value; + if (e.value !== pdfViewer.currentPageNumber.toString() && e.value !== pdfViewer.currentPageLabel) { + PDFViewerApplication.toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel); + } +} +function webViewerScaleChanged(e) { + PDFViewerApplication.pdfViewer.currentScaleValue = e.value; +} +function webViewerRotateCw() { + PDFViewerApplication.rotatePages(90); +} +function webViewerRotateCcw() { + PDFViewerApplication.rotatePages(-90); +} +function webViewerDocumentProperties() { + PDFViewerApplication.pdfDocumentProperties.open(); +} +function webViewerFind(e) { + PDFViewerApplication.findController.executeCommand('find' + e.type, { + query: e.query, + phraseSearch: e.phraseSearch, + caseSensitive: e.caseSensitive, + highlightAll: e.highlightAll, + findPrevious: e.findPrevious + }); +} +function webViewerFindFromUrlHash(e) { + PDFViewerApplication.findController.executeCommand('find', { + query: e.query, + phraseSearch: e.phraseSearch, + caseSensitive: false, + highlightAll: true, + findPrevious: false + }); +} +function webViewerScaleChanging(e) { + PDFViewerApplication.toolbar.setPageScale(e.presetValue, e.scale); + PDFViewerApplication.pdfViewer.update(); +} +function webViewerPageChanging(e) { + var page = e.pageNumber; + PDFViewerApplication.toolbar.setPageNumber(page, e.pageLabel || null); + PDFViewerApplication.secondaryToolbar.setPageNumber(page); + if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { + PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(page); + } + if (_pdfjs.PDFJS.pdfBug && Stats.enabled) { + var pageView = PDFViewerApplication.pdfViewer.getPageView(page - 1); + if (pageView.stats) { + Stats.add(page, pageView.stats); } - }, - updateCurrentBookmark: function pdfHistoryUpdateCurrentBookmark(bookmark, pageNum) { - if (this.initialized) { - this.currentBookmark = bookmark.substring(1); - this.currentPage = pageNum | 0; - this._updatePreviousBookmark(); + } +} +var zoomDisabled = false, + zoomDisabledTimeout; +function webViewerWheel(evt) { + var pdfViewer = PDFViewerApplication.pdfViewer; + if (pdfViewer.isInPresentationMode) { + return; + } + if (evt.ctrlKey || evt.metaKey) { + var support = PDFViewerApplication.supportedMouseWheelZoomModifierKeys; + if (evt.ctrlKey && !support.ctrlKey || evt.metaKey && !support.metaKey) { + return; } - }, - updateNextHashParam: function pdfHistoryUpdateNextHashParam(param) { - if (this.initialized) { - this.nextHashParam = param; + evt.preventDefault(); + if (zoomDisabled) { + return; } - }, - push: function pdfHistoryPush(params, isInitialBookmark) { - if (!(this.initialized && this.historyUnlocked)) { + var previousScale = pdfViewer.currentScale; + var delta = (0, _ui_utils.normalizeWheelEventDelta)(evt); + var MOUSE_WHEEL_DELTA_PER_PAGE_SCALE = 3.0; + var ticks = delta * MOUSE_WHEEL_DELTA_PER_PAGE_SCALE; + if (ticks < 0) { + PDFViewerApplication.zoomOut(-ticks); + } else { + PDFViewerApplication.zoomIn(ticks); + } + var currentScale = pdfViewer.currentScale; + if (previousScale !== currentScale) { + var scaleCorrectionFactor = currentScale / previousScale - 1; + var rect = pdfViewer.container.getBoundingClientRect(); + var dx = evt.clientX - rect.left; + var dy = evt.clientY - rect.top; + pdfViewer.container.scrollLeft += dx * scaleCorrectionFactor; + pdfViewer.container.scrollTop += dy * scaleCorrectionFactor; + } + } else { + zoomDisabled = true; + clearTimeout(zoomDisabledTimeout); + zoomDisabledTimeout = setTimeout(function () { + zoomDisabled = false; + }, 1000); + } +} +function webViewerClick(evt) { + if (!PDFViewerApplication.secondaryToolbar.isOpen) { + return; + } + var appConfig = PDFViewerApplication.appConfig; + if (PDFViewerApplication.pdfViewer.containsElement(evt.target) || appConfig.toolbar.container.contains(evt.target) && evt.target !== appConfig.secondaryToolbar.toggleButton) { + PDFViewerApplication.secondaryToolbar.close(); + } +} +function webViewerKeyDown(evt) { + if (_overlay_manager.OverlayManager.active) { + return; + } + var handled = false, + ensureViewerFocused = false; + var cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0); + var pdfViewer = PDFViewerApplication.pdfViewer; + var isViewerInPresentationMode = pdfViewer && pdfViewer.isInPresentationMode; + if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) { + switch (evt.keyCode) { + case 70: + if (!PDFViewerApplication.supportsIntegratedFind) { + PDFViewerApplication.findBar.open(); + handled = true; + } + break; + case 71: + if (!PDFViewerApplication.supportsIntegratedFind) { + var findState = PDFViewerApplication.findController.state; + if (findState) { + PDFViewerApplication.findController.executeCommand('findagain', { + query: findState.query, + phraseSearch: findState.phraseSearch, + caseSensitive: findState.caseSensitive, + highlightAll: findState.highlightAll, + findPrevious: cmd === 5 || cmd === 12 + }); + } + handled = true; + } + break; + case 61: + case 107: + case 187: + case 171: + if (!isViewerInPresentationMode) { + PDFViewerApplication.zoomIn(); + } + handled = true; + break; + case 173: + case 109: + case 189: + if (!isViewerInPresentationMode) { + PDFViewerApplication.zoomOut(); + } + handled = true; + break; + case 48: + case 96: + if (!isViewerInPresentationMode) { + setTimeout(function () { + pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; + }); + handled = false; + } + break; + case 38: + if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { + PDFViewerApplication.page = 1; + handled = true; + ensureViewerFocused = true; + } + break; + case 40: + if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) { + PDFViewerApplication.page = PDFViewerApplication.pagesCount; + handled = true; + ensureViewerFocused = true; + } + break; + } + } + if (cmd === 1 || cmd === 8) { + switch (evt.keyCode) { + case 83: + PDFViewerApplication.download(); + handled = true; + break; + } + } + if (cmd === 3 || cmd === 10) { + switch (evt.keyCode) { + case 80: + PDFViewerApplication.requestPresentationMode(); + handled = true; + break; + case 71: + PDFViewerApplication.appConfig.toolbar.pageNumber.select(); + handled = true; + break; + } + } + if (handled) { + if (ensureViewerFocused && !isViewerInPresentationMode) { + pdfViewer.focus(); + } + evt.preventDefault(); + return; + } + var curElement = document.activeElement || document.querySelector(':focus'); + var curElementTagName = curElement && curElement.tagName.toUpperCase(); + if (curElementTagName === 'INPUT' || curElementTagName === 'TEXTAREA' || curElementTagName === 'SELECT') { + if (evt.keyCode !== 27) { 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 (cmd === 0) { + switch (evt.keyCode) { + case 38: + case 33: + case 8: + if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== 'page-fit') { + break; + } + case 37: + if (pdfViewer.isHorizontalScrollbarEnabled) { + break; + } + case 75: + case 80: + if (PDFViewerApplication.page > 1) { + PDFViewerApplication.page--; + } + handled = true; + break; + case 27: + if (PDFViewerApplication.secondaryToolbar.isOpen) { + PDFViewerApplication.secondaryToolbar.close(); + handled = true; + } + if (!PDFViewerApplication.supportsIntegratedFind && PDFViewerApplication.findBar.opened) { + PDFViewerApplication.findBar.close(); + handled = true; + } + break; + case 40: + case 34: + case 32: + if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== 'page-fit') { + break; + } + case 39: + if (pdfViewer.isHorizontalScrollbarEnabled) { + break; + } + case 74: + case 78: + if (PDFViewerApplication.page < PDFViewerApplication.pagesCount) { + PDFViewerApplication.page++; + } + handled = true; + break; + case 36: + if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { + PDFViewerApplication.page = 1; + handled = true; + ensureViewerFocused = true; + } + break; + case 35: + if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) { + PDFViewerApplication.page = PDFViewerApplication.pagesCount; + handled = true; + ensureViewerFocused = true; + } + break; + case 72: + if (!isViewerInPresentationMode) { + PDFViewerApplication.handTool.toggle(); + } + break; + case 82: + PDFViewerApplication.rotatePages(90); + break; } - if (params.page) { - params.page |= 0; + } + if (cmd === 4) { + switch (evt.keyCode) { + case 32: + if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== 'page-fit') { + break; + } + if (PDFViewerApplication.page > 1) { + PDFViewerApplication.page--; + } + handled = true; + break; + case 82: + PDFViewerApplication.rotatePages(-90); + break; } - if (isInitialBookmark) { - var target = window.history.state.target; - if (!target) { - this._pushToHistory(params, false); - this.previousHash = window.location.hash.substring(1); + } + if (!handled && !isViewerInPresentationMode) { + if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== 'BUTTON') { + 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(); + } + if (handled) { + evt.preventDefault(); + } +} +_ui_utils.localized.then(function webViewerLocalized() { + document.getElementsByTagName('html')[0].dir = _ui_utils.mozL10n.getDirection(); +}); +var PDFPrintServiceFactory = { + instance: { + supportsPrinting: false, + createPrintService: function () { + throw new Error('Not implemented: createPrintService'); + } + } +}; +exports.PDFViewerApplication = PDFViewerApplication; +exports.DefaultExternalServices = DefaultExternalServices; +exports.PDFPrintServiceFactory = PDFPrintServiceFactory; + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +function GrabToPan(options) { + this.element = options.element; + this.document = options.element.ownerDocument; + if (typeof options.ignoreTarget === 'function') { + this.ignoreTarget = options.ignoreTarget; + } + this.onActiveChanged = options.onActiveChanged; + this.activate = this.activate.bind(this); + this.deactivate = this.deactivate.bind(this); + this.toggle = this.toggle.bind(this); + this._onmousedown = this._onmousedown.bind(this); + this._onmousemove = this._onmousemove.bind(this); + this._endPan = this._endPan.bind(this); + var overlay = this.overlay = document.createElement('div'); + overlay.className = 'grab-to-pan-grabbing'; +} +GrabToPan.prototype = { + CSS_CLASS_GRAB: 'grab-to-pan-grab', + activate: function GrabToPan_activate() { + if (!this.active) { + this.active = true; + this.element.addEventListener('mousedown', this._onmousedown, true); + this.element.classList.add(this.CSS_CLASS_GRAB); + if (this.onActiveChanged) { + this.onActiveChanged(true); } - this.updatePreviousBookmark = this.nextHashParam ? false : true; - if (target) { - this._updatePreviousBookmark(); + } + }, + deactivate: function GrabToPan_deactivate() { + if (this.active) { + this.active = false; + this.element.removeEventListener('mousedown', this._onmousedown, true); + this._endPan(); + this.element.classList.remove(this.CSS_CLASS_GRAB); + if (this.onActiveChanged) { + this.onActiveChanged(false); } + } + }, + toggle: function GrabToPan_toggle() { + if (this.active) { + this.deactivate(); + } else { + this.activate(); + } + }, + ignoreTarget: function GrabToPan_ignoreTarget(node) { + return node[matchesSelector]('a[href], a[href] *, input, textarea, button, button *, select, option'); + }, + _onmousedown: function GrabToPan__onmousedown(event) { + if (event.button !== 0 || this.ignoreTarget(event.target)) { return; } - if (this.nextHashParam) { - if (this.nextHashParam === params.hash) { - this.nextHashParam = null; - this.updatePreviousBookmark = true; + if (event.originalTarget) { + try { + event.originalTarget.tagName; + } catch (e) { return; } - this.nextHashParam = null; } - 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; - } - } else { - this._pushToHistory(params, true); - } - } else if (this.current.page && params.page && this.current.page !== params.page) { - this._pushToHistory(params, true); + this.scrollLeftStart = this.element.scrollLeft; + this.scrollTopStart = this.element.scrollTop; + this.clientXStart = event.clientX; + this.clientYStart = event.clientY; + this.document.addEventListener('mousemove', this._onmousemove, true); + this.document.addEventListener('mouseup', this._endPan, true); + this.element.addEventListener('scroll', this._endPan, true); + event.preventDefault(); + event.stopPropagation(); + var focusedElement = document.activeElement; + if (focusedElement && !focusedElement.contains(event.target)) { + focusedElement.blur(); } }, - _getPreviousParams: function pdfHistory_getPreviousParams(onlyCheckPage, beforeUnload) { - if (!(this.currentBookmark && this.currentPage)) { - return null; - } else if (this.updatePreviousBookmark) { - this.updatePreviousBookmark = false; + _onmousemove: function GrabToPan__onmousemove(event) { + this.element.removeEventListener('scroll', this._endPan, true); + if (isLeftMouseReleased(event)) { + this._endPan(); + return; } - if (this.uid > 0 && !(this.previousBookmark && this.previousPage)) { - return null; + var xDiff = event.clientX - this.clientXStart; + var yDiff = event.clientY - this.clientYStart; + var scrollTop = this.scrollTopStart - yDiff; + var scrollLeft = this.scrollLeftStart - xDiff; + if (this.element.scrollTo) { + this.element.scrollTo({ + top: scrollTop, + left: scrollLeft, + behavior: 'instant' + }); + } else { + this.element.scrollTop = scrollTop; + this.element.scrollLeft = scrollLeft; } - if (!this.current.dest && !onlyCheckPage || beforeUnload) { - if (this.previousBookmark === this.currentBookmark) { - return null; + if (!this.overlay.parentNode) { + document.body.appendChild(this.overlay); + } + }, + _endPan: function GrabToPan__endPan() { + this.element.removeEventListener('scroll', this._endPan, true); + this.document.removeEventListener('mousemove', this._onmousemove, true); + this.document.removeEventListener('mouseup', this._endPan, true); + this.overlay.remove(); + } +}; +var matchesSelector; +['webkitM', 'mozM', 'msM', 'oM', 'm'].some(function (prefix) { + var name = prefix + 'atches'; + if (name in document.documentElement) { + matchesSelector = name; + } + name += 'Selector'; + if (name in document.documentElement) { + matchesSelector = name; + } + return matchesSelector; +}); +var isNotIEorIsIE10plus = !document.documentMode || document.documentMode > 9; +var chrome = window.chrome; +var isChrome15OrOpera15plus = chrome && (chrome.webstore || chrome.app); +var isSafari6plus = /Apple/.test(navigator.vendor) && /Version\/([6-9]\d*|[1-5]\d+)/.test(navigator.userAgent); +function isLeftMouseReleased(event) { + if ('buttons' in event && isNotIEorIsIE10plus) { + return !(event.buttons & 1); + } + if (isChrome15OrOpera15plus || isSafari6plus) { + return event.which === 0; + } +} +exports.GrabToPan = GrabToPan; + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.HandTool = undefined; + +var _grab_to_pan = __w_pdfjs_require__(15); + +var _ui_utils = __w_pdfjs_require__(0); + +var _preferences = __w_pdfjs_require__(12); + +var HandTool = function HandToolClosure() { + function HandTool(options) { + this.container = options.container; + this.eventBus = options.eventBus; + this.wasActive = false; + this.handTool = new _grab_to_pan.GrabToPan({ + element: this.container, + onActiveChanged: function (isActive) { + this.eventBus.dispatch('handtoolchanged', { isActive: isActive }); + }.bind(this) + }); + this.eventBus.on('togglehandtool', this.toggle.bind(this)); + Promise.all([_ui_utils.localized, _preferences.Preferences.get('enableHandToolOnLoad')]).then(function resolved(values) { + if (values[1] === true) { + this.handTool.activate(); + } + }.bind(this)).catch(function rejected(reason) {}); + this.eventBus.on('presentationmodechanged', function (e) { + if (e.switchInProgress) { + return; } - } else if (this.current.page || onlyCheckPage) { - if (this.previousPage === this.currentPage) { - return null; + if (e.active) { + this.enterPresentationMode(); + } else { + this.exitPresentationMode(); + } + }.bind(this)); + } + HandTool.prototype = { + get isActive() { + return !!this.handTool.active; + }, + toggle: function HandTool_toggle() { + this.handTool.toggle(); + }, + enterPresentationMode: function HandTool_enterPresentationMode() { + if (this.isActive) { + this.wasActive = true; + this.handTool.deactivate(); + } + }, + exitPresentationMode: function HandTool_exitPresentationMode() { + if (this.wasActive) { + this.wasActive = false; + this.handTool.activate(); } - } else { - return null; } - var params = { - hash: this.currentBookmark, - page: this.currentPage - }; - if (this.isViewerInPresentationMode) { - params.hash = null; + }; + return HandTool; +}(); +exports.HandTool = HandTool; + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PasswordPrompt = undefined; + +var _ui_utils = __w_pdfjs_require__(0); + +var _overlay_manager = __w_pdfjs_require__(6); + +var _pdfjs = __w_pdfjs_require__(1); + +var PasswordPrompt = function PasswordPromptClosure() { + function PasswordPrompt(options) { + this.overlayName = options.overlayName; + this.container = options.container; + this.label = options.label; + this.input = options.input; + this.submitButton = options.submitButton; + this.cancelButton = options.cancelButton; + this.updateCallback = null; + this.reason = null; + this.submitButton.addEventListener('click', this.verify.bind(this)); + this.cancelButton.addEventListener('click', this.close.bind(this)); + this.input.addEventListener('keydown', function (e) { + if (e.keyCode === 13) { + this.verify(); + } + }.bind(this)); + _overlay_manager.OverlayManager.register(this.overlayName, this.container, this.close.bind(this), true); + } + PasswordPrompt.prototype = { + open: function PasswordPrompt_open() { + _overlay_manager.OverlayManager.open(this.overlayName).then(function () { + this.input.type = 'password'; + this.input.focus(); + var promptString = _ui_utils.mozL10n.get('password_label', null, 'Enter the password to open this PDF file.'); + if (this.reason === _pdfjs.PasswordResponses.INCORRECT_PASSWORD) { + promptString = _ui_utils.mozL10n.get('password_invalid', null, 'Invalid password. Please try again.'); + } + this.label.textContent = promptString; + }.bind(this)); + }, + close: function PasswordPrompt_close() { + _overlay_manager.OverlayManager.close(this.overlayName).then(function () { + this.input.value = ''; + this.input.type = ''; + }.bind(this)); + }, + verify: function PasswordPrompt_verify() { + var password = this.input.value; + if (password && password.length > 0) { + this.close(); + return this.updateCallback(password); + } + }, + setUpdateCallback: function PasswordPrompt_setUpdateCallback(updateCallback, reason) { + this.updateCallback = updateCallback; + this.reason = reason; } - 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; + }; + return PasswordPrompt; +}(); +exports.PasswordPrompt = PasswordPrompt; + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFAttachmentViewer = undefined; + +var _pdfjs = __w_pdfjs_require__(1); + +var PDFAttachmentViewer = function PDFAttachmentViewerClosure() { + function PDFAttachmentViewer(options) { + this.attachments = null; + this.container = options.container; + this.eventBus = options.eventBus; + this.downloadManager = options.downloadManager; + this._renderedCapability = (0, _pdfjs.createPromiseCapability)(); + this.eventBus.on('fileattachmentannotation', this._appendAttachment.bind(this)); + } + PDFAttachmentViewer.prototype = { + reset: function PDFAttachmentViewer_reset(keepRenderedCapability) { + this.attachments = null; + this.container.textContent = ''; + if (!keepRenderedCapability) { + this._renderedCapability = (0, _pdfjs.createPromiseCapability)(); + } + }, + _dispatchEvent: function PDFAttachmentViewer_dispatchEvent(attachmentsCount) { + this.eventBus.dispatch('attachmentsloaded', { + source: this, + attachmentsCount: attachmentsCount + }); + this._renderedCapability.resolve(); + }, + _bindPdfLink: function PDFAttachmentViewer_bindPdfLink(button, content, filename) { + var blobUrl; + button.onclick = function () { + if (!blobUrl) { + blobUrl = (0, _pdfjs.createObjectURL)(content, 'application/pdf', _pdfjs.PDFJS.disableCreateObjectURL); + } + var viewerUrl; + viewerUrl = '?file=' + encodeURIComponent(blobUrl + '#' + filename); + window.open(viewerUrl); + return false; + }; + }, + _bindLink: function PDFAttachmentViewer_bindLink(button, content, filename) { + button.onclick = function downloadFile(e) { + this.downloadManager.downloadData(content, filename, ''); + return false; + }.bind(this); + }, + render: function PDFAttachmentViewer_render(params) { + params = params || {}; + var attachments = params.attachments || null; + var attachmentsCount = 0; + if (this.attachments) { + var keepRenderedCapability = params.keepRenderedCapability === true; + this.reset(keepRenderedCapability); + } + this.attachments = attachments; + if (!attachments) { + this._dispatchEvent(attachmentsCount); + return; + } + var names = Object.keys(attachments).sort(function (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()); + }); + attachmentsCount = names.length; + for (var i = 0; i < attachmentsCount; i++) { + var item = attachments[names[i]]; + var filename = (0, _pdfjs.removeNullCharacters)((0, _pdfjs.getFilenameFromUrl)(item.filename)); + var div = document.createElement('div'); + div.className = 'attachmentsItem'; + var button = document.createElement('button'); + button.textContent = filename; + if (/\.pdf$/i.test(filename)) { + this._bindPdfLink(button, item.content, filename); + } else { + this._bindLink(button, item.content, filename); + } + div.appendChild(button); + this.container.appendChild(div); + } + this._dispatchEvent(attachmentsCount); + }, + _appendAttachment: function PDFAttachmentViewer_appendAttachment(item) { + this._renderedCapability.promise.then(function (id, filename, content) { + var attachments = this.attachments; + if (!attachments) { + attachments = Object.create(null); + } else { + for (var name in attachments) { + if (id === name) { + return; + } + } + } + attachments[id] = { + filename: filename, + content: content + }; + this.render({ + attachments: attachments, + keepRenderedCapability: true + }); + }.bind(this, item.id, item.filename, item.content)); } - if (!params.hash && params.page) { - params.hash = 'page=' + params.page; + }; + return PDFAttachmentViewer; +}(); +exports.PDFAttachmentViewer = PDFAttachmentViewer; + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFDocumentProperties = undefined; + +var _ui_utils = __w_pdfjs_require__(0); + +var _overlay_manager = __w_pdfjs_require__(6); + +var PDFDocumentProperties = function PDFDocumentPropertiesClosure() { + function PDFDocumentProperties(options) { + this.fields = options.fields; + this.overlayName = options.overlayName; + this.container = options.container; + this.rawFileSize = 0; + this.url = null; + this.pdfDocument = null; + if (options.closeButton) { + options.closeButton.addEventListener('click', this.close.bind(this)); } - if (addPrevious && !overwrite) { - var previousParams = this._getPreviousParams(); - if (previousParams) { - var replacePrevious = !this.current.dest && this.current.hash !== this.previousHash; - this._pushToHistory(previousParams, false, replacePrevious); + this.dataAvailablePromise = new Promise(function (resolve) { + this.resolveDataAvailable = resolve; + }.bind(this)); + _overlay_manager.OverlayManager.register(this.overlayName, this.container, this.close.bind(this)); + } + PDFDocumentProperties.prototype = { + open: function PDFDocumentProperties_open() { + Promise.all([_overlay_manager.OverlayManager.open(this.overlayName), this.dataAvailablePromise]).then(function () { + this._getProperties(); + }.bind(this)); + }, + close: function PDFDocumentProperties_close() { + _overlay_manager.OverlayManager.close(this.overlayName); + }, + setFileSize: function PDFDocumentProperties_setFileSize(fileSize) { + if (fileSize > 0) { + this.rawFileSize = fileSize; + } + }, + setDocumentAndUrl: function PDFDocumentProperties_setDocumentAndUrl(pdfDocument, url) { + this.pdfDocument = pdfDocument; + this.url = url; + this.resolveDataAvailable(); + }, + _getProperties: function PDFDocumentProperties_getProperties() { + if (!_overlay_manager.OverlayManager.active) { + return; + } + this.pdfDocument.getDownloadInfo().then(function (data) { + if (data.length === this.rawFileSize) { + return; + } + this.setFileSize(data.length); + this._updateUI(this.fields['fileSize'], this._parseFileSize()); + }.bind(this)); + this.pdfDocument.getMetadata().then(function (data) { + var content = { + 'fileName': (0, _ui_utils.getPDFFileNameFromURL)(this.url), + 'fileSize': this._parseFileSize(), + 'title': data.info.Title, + 'author': data.info.Author, + 'subject': data.info.Subject, + 'keywords': data.info.Keywords, + 'creationDate': this._parseDate(data.info.CreationDate), + 'modificationDate': this._parseDate(data.info.ModDate), + 'creator': data.info.Creator, + 'producer': data.info.Producer, + 'version': data.info.PDFFormatVersion, + 'pageCount': this.pdfDocument.numPages + }; + for (var identifier in content) { + this._updateUI(this.fields[identifier], content[identifier]); + } + }.bind(this)); + }, + _updateUI: function PDFDocumentProperties_updateUI(field, content) { + if (field && content !== undefined && content !== '') { + field.textContent = content; } + }, + _parseFileSize: function PDFDocumentProperties_parseFileSize() { + var fileSize = this.rawFileSize, + kb = fileSize / 1024; + if (!kb) { + return; + } else if (kb < 1024) { + return _ui_utils.mozL10n.get('document_properties_kb', { + size_kb: (+kb.toPrecision(3)).toLocaleString(), + size_b: fileSize.toLocaleString() + }, '{{size_kb}} KB ({{size_b}} bytes)'); + } + return _ui_utils.mozL10n.get('document_properties_mb', { + size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(), + size_b: fileSize.toLocaleString() + }, '{{size_mb}} MB ({{size_b}} bytes)'); + }, + _parseDate: function PDFDocumentProperties_parseDate(inputDate) { + var dateToParse = inputDate; + if (dateToParse === undefined) { + return ''; + } + if (dateToParse.substring(0, 2) === 'D:') { + dateToParse = dateToParse.substring(2); + } + var year = parseInt(dateToParse.substring(0, 4), 10); + var month = parseInt(dateToParse.substring(4, 6), 10) - 1; + var day = parseInt(dateToParse.substring(6, 8), 10); + var hours = parseInt(dateToParse.substring(8, 10), 10); + var minutes = parseInt(dateToParse.substring(10, 12), 10); + var seconds = parseInt(dateToParse.substring(12, 14), 10); + var utRel = dateToParse.substring(14, 15); + var offsetHours = parseInt(dateToParse.substring(15, 17), 10); + var offsetMinutes = parseInt(dateToParse.substring(18, 20), 10); + if (utRel === '-') { + hours += offsetHours; + minutes += offsetMinutes; + } else if (utRel === '+') { + hours -= offsetHours; + minutes -= offsetMinutes; + } + var date = new Date(Date.UTC(year, month, day, hours, minutes, seconds)); + var dateString = date.toLocaleDateString(); + var timeString = date.toLocaleTimeString(); + return _ui_utils.mozL10n.get('document_properties_date_string', { + date: dateString, + time: timeString + }, '{{date}}, {{time}}'); } - 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; + }; + return PDFDocumentProperties; +}(); +exports.PDFDocumentProperties = PDFDocumentProperties; + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFFindBar = undefined; + +var _pdf_find_controller = __w_pdfjs_require__(5); + +var _ui_utils = __w_pdfjs_require__(0); + +var PDFFindBar = function PDFFindBarClosure() { + function PDFFindBar(options) { + this.opened = false; + this.bar = options.bar || null; + this.toggleButton = options.toggleButton || null; + this.findField = options.findField || null; + this.highlightAll = options.highlightAllCheckbox || null; + this.caseSensitive = options.caseSensitiveCheckbox || null; + this.findMsg = options.findMsg || null; + this.findResultsCount = options.findResultsCount || null; + this.findStatusIcon = options.findStatusIcon || null; + this.findPreviousButton = options.findPreviousButton || null; + this.findNextButton = options.findNextButton || null; + this.findController = options.findController || null; + this.eventBus = options.eventBus; + if (this.findController === null) { + throw new Error('PDFFindBar cannot be used without a ' + 'PDFFindController instance.'); } - 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(); + var self = this; + this.toggleButton.addEventListener('click', function () { + self.toggle(); + }); + this.findField.addEventListener('input', function () { + self.dispatchEvent(''); + }); + this.bar.addEventListener('keydown', function (evt) { + switch (evt.keyCode) { + case 13: + if (evt.target === self.findField) { + self.dispatchEvent('again', evt.shiftKey); + } + break; + case 27: + self.close(); + break; + } + }); + this.findPreviousButton.addEventListener('click', function () { + self.dispatchEvent('again', true); + }); + this.findNextButton.addEventListener('click', function () { + self.dispatchEvent('again', false); + }); + this.highlightAll.addEventListener('click', function () { + self.dispatchEvent('highlightallchange'); + }); + this.caseSensitive.addEventListener('click', function () { + self.dispatchEvent('casesensitivitychange'); + }); + this.eventBus.on('resize', this._adjustWidth.bind(this)); + } + PDFFindBar.prototype = { + reset: function PDFFindBar_reset() { + this.updateUIState(); + }, + dispatchEvent: function PDFFindBar_dispatchEvent(type, findPrev) { + this.eventBus.dispatch('find', { + source: this, + type: type, + query: this.findField.value, + caseSensitive: this.caseSensitive.checked, + phraseSearch: true, + highlightAll: this.highlightAll.checked, + findPrevious: findPrev + }); + }, + updateUIState: function PDFFindBar_updateUIState(state, previous, matchCount) { + var notFound = false; + var findMsg = ''; + var status = ''; + switch (state) { + case _pdf_find_controller.FindStates.FIND_FOUND: + break; + case _pdf_find_controller.FindStates.FIND_PENDING: + status = 'pending'; + break; + case _pdf_find_controller.FindStates.FIND_NOTFOUND: + findMsg = _ui_utils.mozL10n.get('find_not_found', null, 'Phrase not found'); + notFound = true; + break; + case _pdf_find_controller.FindStates.FIND_WRAPPED: + if (previous) { + findMsg = _ui_utils.mozL10n.get('find_reached_top', null, 'Reached top of document, continued from bottom'); + } else { + findMsg = _ui_utils.mozL10n.get('find_reached_bottom', null, 'Reached end of document, continued from top'); + } + break; + } + if (notFound) { + this.findField.classList.add('notFound'); + } else { + this.findField.classList.remove('notFound'); + } + this.findField.setAttribute('data-status', status); + this.findMsg.textContent = findMsg; + this.updateResultsCount(matchCount); + this._adjustWidth(); + }, + updateResultsCount: function (matchCount) { + if (!this.findResultsCount) { return; } - } - this.historyUnlocked = false; - if (state.target.dest) { - this.linkService.navigateTo(state.target.dest); - } else { - this.linkService.setHash(state.target.hash); - } - this.currentUid = state.uid; - if (state.uid > this.uid) { - this.uid = state.uid; - } - this.current = state.target; - this.updatePreviousBookmark = true; - var currentHash = window.location.hash.substring(1); - if (this.previousHash !== currentHash) { - this.allowHashChange = 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 (!matchCount) { + this.findResultsCount.classList.add('hidden'); + return; + } + this.findResultsCount.textContent = matchCount.toLocaleString(); + this.findResultsCount.classList.remove('hidden'); + }, + open: function PDFFindBar_open() { + if (!this.opened) { + this.opened = true; + this.toggleButton.classList.add('toggled'); + this.bar.classList.remove('hidden'); + } + this.findField.select(); + this.findField.focus(); + this._adjustWidth(); + }, + close: function PDFFindBar_close() { + if (!this.opened) { + return; + } + this.opened = false; + this.toggleButton.classList.remove('toggled'); + this.bar.classList.add('hidden'); + this.findController.active = false; + }, + toggle: function PDFFindBar_toggle() { + if (this.opened) { + this.close(); + } else { + this.open(); + } + }, + _adjustWidth: function PDFFindBar_adjustWidth() { + if (!this.opened) { + return; + } + this.bar.classList.remove('wrapContainers'); + var findbarHeight = this.bar.clientHeight; + var inputContainerHeight = this.bar.firstElementChild.clientHeight; + if (findbarHeight > inputContainerHeight) { + this.bar.classList.add('wrapContainers'); } } - } -}; -exports.PDFHistory = PDFHistory; + }; + return PDFFindBar; +}(); +exports.PDFFindBar = PDFFindBar; /***/ }), -/* 11 */ +/* 21 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; -var uiUtils = __w_pdfjs_require__(1); -var pdfPageView = __w_pdfjs_require__(5); -var pdfRenderingQueue = __w_pdfjs_require__(7); -var textLayerBuilder = __w_pdfjs_require__(6); -var annotationLayerBuilder = __w_pdfjs_require__(4); -var pdfLinkService = __w_pdfjs_require__(3); -var domEvents = __w_pdfjs_require__(2); -var pdfjsLib = __w_pdfjs_require__(0); -var UNKNOWN_SCALE = uiUtils.UNKNOWN_SCALE; -var SCROLLBAR_PADDING = uiUtils.SCROLLBAR_PADDING; -var VERTICAL_PADDING = uiUtils.VERTICAL_PADDING; -var MAX_AUTO_SCALE = uiUtils.MAX_AUTO_SCALE; -var CSS_UNITS = uiUtils.CSS_UNITS; -var DEFAULT_SCALE = uiUtils.DEFAULT_SCALE; -var DEFAULT_SCALE_VALUE = uiUtils.DEFAULT_SCALE_VALUE; -var RendererType = uiUtils.RendererType; -var scrollIntoView = uiUtils.scrollIntoView; -var watchScroll = uiUtils.watchScroll; -var getVisibleElements = uiUtils.getVisibleElements; -var PDFPageView = pdfPageView.PDFPageView; -var RenderingStates = pdfRenderingQueue.RenderingStates; -var PDFRenderingQueue = pdfRenderingQueue.PDFRenderingQueue; -var TextLayerBuilder = textLayerBuilder.TextLayerBuilder; -var AnnotationLayerBuilder = annotationLayerBuilder.AnnotationLayerBuilder; -var SimpleLinkService = pdfLinkService.SimpleLinkService; -var PresentationModeState = { - UNKNOWN: 0, - NORMAL: 1, - CHANGING: 2, - FULLSCREEN: 3 -}; -var DEFAULT_CACHE_SIZE = 10; -var PDFViewer = function pdfViewer() { - function PDFPageViewBuffer(size) { - var data = []; - this.push = function cachePush(view) { - var i = data.indexOf(view); - if (i >= 0) { - data.splice(i, 1); +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFOutlineViewer = undefined; + +var _pdfjs = __w_pdfjs_require__(1); + +var DEFAULT_TITLE = '\u2013'; +var PDFOutlineViewer = function PDFOutlineViewerClosure() { + function PDFOutlineViewer(options) { + this.outline = null; + this.lastToggleIsShow = true; + this.container = options.container; + this.linkService = options.linkService; + this.eventBus = options.eventBus; + } + PDFOutlineViewer.prototype = { + reset: function PDFOutlineViewer_reset() { + this.outline = null; + this.lastToggleIsShow = true; + this.container.textContent = ''; + this.container.classList.remove('outlineWithDeepNesting'); + }, + _dispatchEvent: function PDFOutlineViewer_dispatchEvent(outlineCount) { + this.eventBus.dispatch('outlineloaded', { + source: this, + outlineCount: outlineCount + }); + }, + _bindLink: function PDFOutlineViewer_bindLink(element, item) { + if (item.url) { + (0, _pdfjs.addLinkAttributes)(element, { + url: item.url, + target: item.newWindow ? _pdfjs.PDFJS.LinkTarget.BLANK : undefined + }); + return; } - data.push(view); - if (data.length > size) { - data.shift().destroy(); + var self = this, + destination = item.dest; + element.href = self.linkService.getDestinationHash(destination); + element.onclick = function () { + if (destination) { + self.linkService.navigateTo(destination); + } + return false; + }; + }, + _setStyles: function PDFOutlineViewer_setStyles(element, item) { + var styleStr = ''; + if (item.bold) { + styleStr += 'font-weight: bold;'; } - }; - this.resize = function (newSize) { - size = newSize; - while (data.length > size) { - data.shift().destroy(); + if (item.italic) { + styleStr += 'font-style: italic;'; } - }; - } - function isSameScale(oldScale, newScale) { - if (newScale === oldScale) { - return true; - } - if (Math.abs(newScale - oldScale) < 1e-15) { - return true; + if (styleStr) { + element.setAttribute('style', styleStr); + } + }, + _addToggleButton: function PDFOutlineViewer_addToggleButton(div) { + var toggler = document.createElement('div'); + toggler.className = 'outlineItemToggler'; + toggler.onclick = function (event) { + event.stopPropagation(); + toggler.classList.toggle('outlineItemsHidden'); + if (event.shiftKey) { + var shouldShowAll = !toggler.classList.contains('outlineItemsHidden'); + this._toggleOutlineItem(div, shouldShowAll); + } + }.bind(this); + div.insertBefore(toggler, div.firstChild); + }, + _toggleOutlineItem: function PDFOutlineViewer_toggleOutlineItem(root, show) { + this.lastToggleIsShow = show; + var togglers = root.querySelectorAll('.outlineItemToggler'); + for (var i = 0, ii = togglers.length; i < ii; ++i) { + togglers[i].classList[show ? 'remove' : 'add']('outlineItemsHidden'); + } + }, + toggleOutlineTree: function PDFOutlineViewer_toggleOutlineTree() { + if (!this.outline) { + return; + } + this._toggleOutlineItem(this.container, !this.lastToggleIsShow); + }, + render: function PDFOutlineViewer_render(params) { + var outline = params && params.outline || null; + var outlineCount = 0; + if (this.outline) { + this.reset(); + } + this.outline = outline; + if (!outline) { + this._dispatchEvent(outlineCount); + return; + } + var fragment = document.createDocumentFragment(); + var queue = [{ + parent: fragment, + items: this.outline + }]; + var hasAnyNesting = false; + while (queue.length > 0) { + var levelData = queue.shift(); + for (var i = 0, len = levelData.items.length; i < len; i++) { + var item = levelData.items[i]; + var div = document.createElement('div'); + div.className = 'outlineItem'; + var element = document.createElement('a'); + this._bindLink(element, item); + this._setStyles(element, item); + element.textContent = (0, _pdfjs.removeNullCharacters)(item.title) || DEFAULT_TITLE; + div.appendChild(element); + if (item.items.length > 0) { + hasAnyNesting = true; + this._addToggleButton(div); + var itemsDiv = document.createElement('div'); + itemsDiv.className = 'outlineItems'; + div.appendChild(itemsDiv); + queue.push({ + parent: itemsDiv, + items: item.items + }); + } + levelData.parent.appendChild(div); + outlineCount++; + } + } + if (hasAnyNesting) { + this.container.classList.add('outlineWithDeepNesting'); + } + this.container.appendChild(fragment); + this._dispatchEvent(outlineCount); } - return false; - } - function isPortraitOrientation(size) { - return size.width <= size.height; - } - function PDFViewer(options) { + }; + return PDFOutlineViewer; +}(); +exports.PDFOutlineViewer = PDFOutlineViewer; + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFPresentationMode = undefined; + +var _ui_utils = __w_pdfjs_require__(0); + +var DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS = 1500; +var DELAY_BEFORE_HIDING_CONTROLS = 3000; +var ACTIVE_SELECTOR = 'pdfPresentationMode'; +var CONTROLS_SELECTOR = 'pdfPresentationModeControls'; +var PDFPresentationMode = function PDFPresentationModeClosure() { + function PDFPresentationMode(options) { this.container = options.container; this.viewer = options.viewer || options.container.firstElementChild; - this.eventBus = options.eventBus || domEvents.getGlobalEventBus(); - this.linkService = options.linkService || new SimpleLinkService(); - this.downloadManager = options.downloadManager || null; - this.removePageBorders = options.removePageBorders || false; - this.enhanceTextSelection = options.enhanceTextSelection || false; - this.renderInteractiveForms = options.renderInteractiveForms || false; - this.enablePrintAutoRotate = options.enablePrintAutoRotate || false; - this.renderer = options.renderer || RendererType.CANVAS; - this.defaultRenderingQueue = !options.renderingQueue; - if (this.defaultRenderingQueue) { - this.renderingQueue = new PDFRenderingQueue(); - this.renderingQueue.setViewer(this); - } else { - this.renderingQueue = options.renderingQueue; - } - this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this)); - this.presentationModeState = PresentationModeState.UNKNOWN; - this._resetView(); - if (this.removePageBorders) { - this.viewer.classList.add('removePageBorders'); + this.pdfViewer = options.pdfViewer; + this.eventBus = options.eventBus; + var contextMenuItems = options.contextMenuItems || null; + this.active = false; + this.args = null; + this.contextMenuOpen = false; + this.mouseScrollTimeStamp = 0; + this.mouseScrollDelta = 0; + this.touchSwipeState = null; + if (contextMenuItems) { + contextMenuItems.contextFirstPage.addEventListener('click', function PDFPresentationMode_contextFirstPageClick(e) { + this.contextMenuOpen = false; + this.eventBus.dispatch('firstpage'); + }.bind(this)); + contextMenuItems.contextLastPage.addEventListener('click', function PDFPresentationMode_contextLastPageClick(e) { + this.contextMenuOpen = false; + this.eventBus.dispatch('lastpage'); + }.bind(this)); + contextMenuItems.contextPageRotateCw.addEventListener('click', function PDFPresentationMode_contextPageRotateCwClick(e) { + this.contextMenuOpen = false; + this.eventBus.dispatch('rotatecw'); + }.bind(this)); + contextMenuItems.contextPageRotateCcw.addEventListener('click', function PDFPresentationMode_contextPageRotateCcwClick(e) { + this.contextMenuOpen = false; + this.eventBus.dispatch('rotateccw'); + }.bind(this)); } } - PDFViewer.prototype = { - get pagesCount() { - return this._pages.length; + PDFPresentationMode.prototype = { + request: function PDFPresentationMode_request() { + if (this.switchInProgress || this.active || !this.viewer.hasChildNodes()) { + return false; + } + this._addFullscreenChangeListeners(); + this._setSwitchInProgress(); + this._notifyStateChange(); + if (this.container.requestFullscreen) { + this.container.requestFullscreen(); + } else if (this.container.mozRequestFullScreen) { + this.container.mozRequestFullScreen(); + } else if (this.container.webkitRequestFullscreen) { + this.container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); + } else if (this.container.msRequestFullscreen) { + this.container.msRequestFullscreen(); + } else { + return false; + } + this.args = { + page: this.pdfViewer.currentPageNumber, + previousScale: this.pdfViewer.currentScaleValue + }; + return true; }, - getPageView: function (index) { - return this._pages[index]; + _mouseWheel: function PDFPresentationMode_mouseWheel(evt) { + if (!this.active) { + return; + } + evt.preventDefault(); + var delta = (0, _ui_utils.normalizeWheelEventDelta)(evt); + var MOUSE_SCROLL_COOLDOWN_TIME = 50; + var PAGE_SWITCH_THRESHOLD = 0.1; + var currentTime = new Date().getTime(); + var storedTime = this.mouseScrollTimeStamp; + if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) { + return; + } + if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) { + this._resetMouseScrollState(); + } + this.mouseScrollDelta += delta; + if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) { + var totalDelta = this.mouseScrollDelta; + this._resetMouseScrollState(); + var success = totalDelta > 0 ? this._goToPreviousPage() : this._goToNextPage(); + if (success) { + this.mouseScrollTimeStamp = currentTime; + } + } }, - get pageViewsReady() { - return this._pageViewsReady; + get isFullscreen() { + return !!(document.fullscreenElement || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement); }, - get currentPageNumber() { - return this._currentPageNumber; + _goToPreviousPage: function PDFPresentationMode_goToPreviousPage() { + var page = this.pdfViewer.currentPageNumber; + if (page <= 1) { + return false; + } + this.pdfViewer.currentPageNumber = page - 1; + return true; }, - set currentPageNumber(val) { - if ((val | 0) !== val) { - throw new Error('Invalid page number.'); + _goToNextPage: function PDFPresentationMode_goToNextPage() { + var page = this.pdfViewer.currentPageNumber; + if (page >= this.pdfViewer.pagesCount) { + return false; } - if (!this.pdfDocument) { - this._currentPageNumber = val; - return; + this.pdfViewer.currentPageNumber = page + 1; + return true; + }, + _notifyStateChange: function PDFPresentationMode_notifyStateChange() { + this.eventBus.dispatch('presentationmodechanged', { + source: this, + active: this.active, + switchInProgress: !!this.switchInProgress + }); + }, + _setSwitchInProgress: function PDFPresentationMode_setSwitchInProgress() { + if (this.switchInProgress) { + clearTimeout(this.switchInProgress); + } + this.switchInProgress = setTimeout(function switchInProgressTimeout() { + this._removeFullscreenChangeListeners(); + delete this.switchInProgress; + this._notifyStateChange(); + }.bind(this), DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS); + }, + _resetSwitchInProgress: function PDFPresentationMode_resetSwitchInProgress() { + if (this.switchInProgress) { + clearTimeout(this.switchInProgress); + delete this.switchInProgress; } - this._setCurrentPageNumber(val, true); }, - _setCurrentPageNumber: function PDFViewer_setCurrentPageNumber(val, resetCurrentPageView) { - if (this._currentPageNumber === val) { - if (resetCurrentPageView) { - this._resetCurrentPageView(); + _enter: function PDFPresentationMode_enter() { + this.active = true; + this._resetSwitchInProgress(); + this._notifyStateChange(); + this.container.classList.add(ACTIVE_SELECTOR); + setTimeout(function enterPresentationModeTimeout() { + this.pdfViewer.currentPageNumber = this.args.page; + this.pdfViewer.currentScaleValue = 'page-fit'; + }.bind(this), 0); + this._addWindowListeners(); + this._showControls(); + this.contextMenuOpen = false; + this.container.setAttribute('contextmenu', 'viewerContextMenu'); + window.getSelection().removeAllRanges(); + }, + _exit: function PDFPresentationMode_exit() { + var page = this.pdfViewer.currentPageNumber; + this.container.classList.remove(ACTIVE_SELECTOR); + setTimeout(function exitPresentationModeTimeout() { + this.active = false; + this._removeFullscreenChangeListeners(); + this._notifyStateChange(); + this.pdfViewer.currentScaleValue = this.args.previousScale; + this.pdfViewer.currentPageNumber = page; + this.args = null; + }.bind(this), 0); + this._removeWindowListeners(); + this._hideControls(); + this._resetMouseScrollState(); + this.container.removeAttribute('contextmenu'); + this.contextMenuOpen = false; + }, + _mouseDown: function PDFPresentationMode_mouseDown(evt) { + if (this.contextMenuOpen) { + this.contextMenuOpen = false; + evt.preventDefault(); + return; + } + if (evt.button === 0) { + var isInternalLink = evt.target.href && evt.target.classList.contains('internalLink'); + if (!isInternalLink) { + evt.preventDefault(); + this.pdfViewer.currentPageNumber += evt.shiftKey ? -1 : 1; } + } + }, + _contextMenu: function PDFPresentationMode_contextMenu() { + this.contextMenuOpen = true; + }, + _showControls: function PDFPresentationMode_showControls() { + if (this.controlsTimeout) { + clearTimeout(this.controlsTimeout); + } else { + this.container.classList.add(CONTROLS_SELECTOR); + } + this.controlsTimeout = setTimeout(function showControlsTimeout() { + this.container.classList.remove(CONTROLS_SELECTOR); + delete this.controlsTimeout; + }.bind(this), DELAY_BEFORE_HIDING_CONTROLS); + }, + _hideControls: function PDFPresentationMode_hideControls() { + if (!this.controlsTimeout) { return; } - if (!(0 < val && val <= this.pagesCount)) { - console.error('PDFViewer_setCurrentPageNumber: "' + val + '" is out of bounds.'); + clearTimeout(this.controlsTimeout); + this.container.classList.remove(CONTROLS_SELECTOR); + delete this.controlsTimeout; + }, + _resetMouseScrollState: function PDFPresentationMode_resetMouseScrollState() { + this.mouseScrollTimeStamp = 0; + this.mouseScrollDelta = 0; + }, + _touchSwipe: function PDFPresentationMode_touchSwipe(evt) { + if (!this.active) { return; } - var arg = { - source: this, - pageNumber: val, - pageLabel: this._pageLabels && this._pageLabels[val - 1] - }; - this._currentPageNumber = val; - this.eventBus.dispatch('pagechanging', arg); - this.eventBus.dispatch('pagechange', arg); - if (resetCurrentPageView) { - this._resetCurrentPageView(); + var SWIPE_MIN_DISTANCE_THRESHOLD = 50; + var SWIPE_ANGLE_THRESHOLD = Math.PI / 6; + if (evt.touches.length > 1) { + this.touchSwipeState = null; + return; + } + switch (evt.type) { + case 'touchstart': + this.touchSwipeState = { + startX: evt.touches[0].pageX, + startY: evt.touches[0].pageY, + endX: evt.touches[0].pageX, + endY: evt.touches[0].pageY + }; + break; + case 'touchmove': + if (this.touchSwipeState === null) { + return; + } + this.touchSwipeState.endX = evt.touches[0].pageX; + this.touchSwipeState.endY = evt.touches[0].pageY; + evt.preventDefault(); + break; + case 'touchend': + if (this.touchSwipeState === null) { + return; + } + var delta = 0; + var dx = this.touchSwipeState.endX - this.touchSwipeState.startX; + var dy = this.touchSwipeState.endY - this.touchSwipeState.startY; + var absAngle = Math.abs(Math.atan2(dy, dx)); + if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)) { + delta = dx; + } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD) { + delta = dy; + } + if (delta > 0) { + this._goToPreviousPage(); + } else if (delta < 0) { + this._goToNextPage(); + } + break; + } + }, + _addWindowListeners: function PDFPresentationMode_addWindowListeners() { + this.showControlsBind = this._showControls.bind(this); + this.mouseDownBind = this._mouseDown.bind(this); + this.mouseWheelBind = this._mouseWheel.bind(this); + this.resetMouseScrollStateBind = this._resetMouseScrollState.bind(this); + this.contextMenuBind = this._contextMenu.bind(this); + this.touchSwipeBind = this._touchSwipe.bind(this); + window.addEventListener('mousemove', this.showControlsBind); + window.addEventListener('mousedown', this.mouseDownBind); + window.addEventListener('wheel', this.mouseWheelBind); + window.addEventListener('keydown', this.resetMouseScrollStateBind); + window.addEventListener('contextmenu', this.contextMenuBind); + window.addEventListener('touchstart', this.touchSwipeBind); + window.addEventListener('touchmove', this.touchSwipeBind); + window.addEventListener('touchend', this.touchSwipeBind); + }, + _removeWindowListeners: function PDFPresentationMode_removeWindowListeners() { + window.removeEventListener('mousemove', this.showControlsBind); + window.removeEventListener('mousedown', this.mouseDownBind); + window.removeEventListener('wheel', this.mouseWheelBind); + window.removeEventListener('keydown', this.resetMouseScrollStateBind); + window.removeEventListener('contextmenu', this.contextMenuBind); + window.removeEventListener('touchstart', this.touchSwipeBind); + window.removeEventListener('touchmove', this.touchSwipeBind); + window.removeEventListener('touchend', this.touchSwipeBind); + delete this.showControlsBind; + delete this.mouseDownBind; + delete this.mouseWheelBind; + delete this.resetMouseScrollStateBind; + delete this.contextMenuBind; + delete this.touchSwipeBind; + }, + _fullscreenChange: function PDFPresentationMode_fullscreenChange() { + if (this.isFullscreen) { + this._enter(); + } else { + this._exit(); } }, - get currentPageLabel() { - return this._pageLabels && this._pageLabels[this._currentPageNumber - 1]; + _addFullscreenChangeListeners: function PDFPresentationMode_addFullscreenChangeListeners() { + this.fullscreenChangeBind = this._fullscreenChange.bind(this); + window.addEventListener('fullscreenchange', this.fullscreenChangeBind); + window.addEventListener('mozfullscreenchange', this.fullscreenChangeBind); + window.addEventListener('webkitfullscreenchange', this.fullscreenChangeBind); + window.addEventListener('MSFullscreenChange', this.fullscreenChangeBind); + }, + _removeFullscreenChangeListeners: function PDFPresentationMode_removeFullscreenChangeListeners() { + window.removeEventListener('fullscreenchange', this.fullscreenChangeBind); + window.removeEventListener('mozfullscreenchange', this.fullscreenChangeBind); + window.removeEventListener('webkitfullscreenchange', this.fullscreenChangeBind); + window.removeEventListener('MSFullscreenChange', this.fullscreenChangeBind); + delete this.fullscreenChangeBind; + } + }; + return PDFPresentationMode; +}(); +exports.PDFPresentationMode = PDFPresentationMode; + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFSidebar = exports.SidebarView = undefined; + +var _ui_utils = __w_pdfjs_require__(0); + +var _pdf_rendering_queue = __w_pdfjs_require__(3); + +var UI_NOTIFICATION_CLASS = 'pdfSidebarNotification'; +var SidebarView = { + NONE: 0, + THUMBS: 1, + OUTLINE: 2, + ATTACHMENTS: 3 +}; +var PDFSidebar = function PDFSidebarClosure() { + function PDFSidebar(options) { + this.isOpen = false; + this.active = SidebarView.THUMBS; + this.isInitialViewSet = false; + this.onToggled = null; + this.pdfViewer = options.pdfViewer; + this.pdfThumbnailViewer = options.pdfThumbnailViewer; + this.pdfOutlineViewer = options.pdfOutlineViewer; + this.mainContainer = options.mainContainer; + this.outerContainer = options.outerContainer; + this.eventBus = options.eventBus; + this.toggleButton = options.toggleButton; + this.thumbnailButton = options.thumbnailButton; + this.outlineButton = options.outlineButton; + this.attachmentsButton = options.attachmentsButton; + this.thumbnailView = options.thumbnailView; + this.outlineView = options.outlineView; + this.attachmentsView = options.attachmentsView; + this.disableNotification = options.disableNotification || false; + this._addEventListeners(); + } + PDFSidebar.prototype = { + reset: function PDFSidebar_reset() { + this.isInitialViewSet = false; + this._hideUINotification(null); + this.switchView(SidebarView.THUMBS); + this.outlineButton.disabled = false; + this.attachmentsButton.disabled = false; + }, + get visibleView() { + return this.isOpen ? this.active : SidebarView.NONE; }, - set currentPageLabel(val) { - var pageNumber = val | 0; - if (this._pageLabels) { - var i = this._pageLabels.indexOf(val); - if (i >= 0) { - pageNumber = i + 1; - } - } - this.currentPageNumber = pageNumber; + get isThumbnailViewVisible() { + return this.isOpen && this.active === SidebarView.THUMBS; }, - get currentScale() { - return this._currentScale !== UNKNOWN_SCALE ? this._currentScale : DEFAULT_SCALE; + get isOutlineViewVisible() { + return this.isOpen && this.active === SidebarView.OUTLINE; }, - set currentScale(val) { - if (isNaN(val)) { - throw new Error('Invalid numeric scale'); + get isAttachmentsViewVisible() { + return this.isOpen && this.active === SidebarView.ATTACHMENTS; + }, + setInitialView: function PDFSidebar_setInitialView(view) { + if (this.isInitialViewSet) { + return; } - if (!this.pdfDocument) { - this._currentScale = val; - this._currentScaleValue = val !== UNKNOWN_SCALE ? val.toString() : null; + this.isInitialViewSet = true; + if (this.isOpen && view === SidebarView.NONE) { + this._dispatchEvent(); return; } - this._setScale(val, false); - }, - get currentScaleValue() { - return this._currentScaleValue; + var isViewPreserved = view === this.visibleView; + this.switchView(view, true); + if (isViewPreserved) { + this._dispatchEvent(); + } }, - set currentScaleValue(val) { - if (!this.pdfDocument) { - this._currentScale = isNaN(val) ? UNKNOWN_SCALE : val; - this._currentScaleValue = val.toString(); + switchView: function PDFSidebar_switchView(view, forceOpen) { + if (view === SidebarView.NONE) { + this.close(); return; } - this._setScale(val, false); - }, - get pagesRotation() { - return this._pagesRotation; - }, - set pagesRotation(rotation) { - if (!(typeof rotation === 'number' && rotation % 90 === 0)) { - throw new Error('Invalid pages rotation angle.'); + var isViewChanged = view !== this.active; + var shouldForceRendering = false; + switch (view) { + case SidebarView.THUMBS: + this.thumbnailButton.classList.add('toggled'); + this.outlineButton.classList.remove('toggled'); + this.attachmentsButton.classList.remove('toggled'); + this.thumbnailView.classList.remove('hidden'); + this.outlineView.classList.add('hidden'); + this.attachmentsView.classList.add('hidden'); + if (this.isOpen && isViewChanged) { + this._updateThumbnailViewer(); + shouldForceRendering = true; + } + break; + case SidebarView.OUTLINE: + if (this.outlineButton.disabled) { + return; + } + this.thumbnailButton.classList.remove('toggled'); + this.outlineButton.classList.add('toggled'); + this.attachmentsButton.classList.remove('toggled'); + this.thumbnailView.classList.add('hidden'); + this.outlineView.classList.remove('hidden'); + this.attachmentsView.classList.add('hidden'); + break; + case SidebarView.ATTACHMENTS: + if (this.attachmentsButton.disabled) { + return; + } + this.thumbnailButton.classList.remove('toggled'); + this.outlineButton.classList.remove('toggled'); + this.attachmentsButton.classList.add('toggled'); + this.thumbnailView.classList.add('hidden'); + this.outlineView.classList.add('hidden'); + this.attachmentsView.classList.remove('hidden'); + break; + default: + console.error('PDFSidebar_switchView: "' + view + '" is an unsupported value.'); + return; } - this._pagesRotation = rotation; - if (!this.pdfDocument) { + this.active = view | 0; + if (forceOpen && !this.isOpen) { + this.open(); return; } - for (var i = 0, l = this._pages.length; i < l; i++) { - var pageView = this._pages[i]; - pageView.update(pageView.scale, rotation); + if (shouldForceRendering) { + this._forceRendering(); } - this._setScale(this._currentScaleValue, true); - if (this.defaultRenderingQueue) { - this.update(); + if (isViewChanged) { + this._dispatchEvent(); } + this._hideUINotification(this.active); }, - setDocument: function (pdfDocument) { - if (this.pdfDocument) { - this._cancelRendering(); - this._resetView(); - } - this.pdfDocument = pdfDocument; - if (!pdfDocument) { + open: function PDFSidebar_open() { + if (this.isOpen) { return; } - var pagesCount = pdfDocument.numPages; - var self = this; - var resolvePagesPromise; - var pagesPromise = new Promise(function (resolve) { - resolvePagesPromise = resolve; - }); - this.pagesPromise = pagesPromise; - pagesPromise.then(function () { - self._pageViewsReady = true; - self.eventBus.dispatch('pagesloaded', { - source: self, - pagesCount: pagesCount - }); - }); - var isOnePageRenderedResolved = false; - var resolveOnePageRendered = null; - var onePageRendered = new Promise(function (resolve) { - resolveOnePageRendered = resolve; - }); - this.onePageRendered = onePageRendered; - var bindOnAfterAndBeforeDraw = function (pageView) { - pageView.onBeforeDraw = function pdfViewLoadOnBeforeDraw() { - self._buffer.push(this); - }; - pageView.onAfterDraw = function pdfViewLoadOnAfterDraw() { - if (!isOnePageRenderedResolved) { - isOnePageRenderedResolved = true; - resolveOnePageRendered(); - } - }; - }; - var firstPagePromise = pdfDocument.getPage(1); - this.firstPagePromise = firstPagePromise; - return firstPagePromise.then(function (pdfPage) { - var scale = this.currentScale; - var viewport = pdfPage.getViewport(scale * CSS_UNITS); - for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { - var textLayerFactory = null; - if (!pdfjsLib.PDFJS.disableTextLayer) { - textLayerFactory = this; - } - var pageView = new PDFPageView({ - container: this.viewer, - eventBus: this.eventBus, - id: pageNum, - scale: scale, - defaultViewport: viewport.clone(), - renderingQueue: this.renderingQueue, - textLayerFactory: textLayerFactory, - annotationLayerFactory: this, - enhanceTextSelection: this.enhanceTextSelection, - renderInteractiveForms: this.renderInteractiveForms, - renderer: this.renderer - }); - bindOnAfterAndBeforeDraw(pageView); - this._pages.push(pageView); - } - var linkService = this.linkService; - onePageRendered.then(function () { - if (!pdfjsLib.PDFJS.disableAutoFetch) { - var getPagesLeft = pagesCount; - for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { - pdfDocument.getPage(pageNum).then(function (pageNum, pdfPage) { - var pageView = self._pages[pageNum - 1]; - if (!pageView.pdfPage) { - pageView.setPdfPage(pdfPage); - } - linkService.cachePageRef(pageNum, pdfPage.ref); - getPagesLeft--; - if (!getPagesLeft) { - resolvePagesPromise(); - } - }.bind(null, pageNum)); - } - } else { - resolvePagesPromise(); - } - }); - self.eventBus.dispatch('pagesinit', { source: self }); - if (this.defaultRenderingQueue) { - this.update(); - } - if (this.findController) { - this.findController.resolveFirstPage(); - } - }.bind(this)); + this.isOpen = true; + this.toggleButton.classList.add('toggled'); + this.outerContainer.classList.add('sidebarMoving'); + this.outerContainer.classList.add('sidebarOpen'); + if (this.active === SidebarView.THUMBS) { + this._updateThumbnailViewer(); + } + this._forceRendering(); + this._dispatchEvent(); + this._hideUINotification(this.active); }, - setPageLabels: function PDFViewer_setPageLabels(labels) { - if (!this.pdfDocument) { + close: function PDFSidebar_close() { + if (!this.isOpen) { return; } - if (!labels) { - this._pageLabels = null; - } else if (!(labels instanceof Array && this.pdfDocument.numPages === labels.length)) { - this._pageLabels = null; - console.error('PDFViewer_setPageLabels: Invalid page labels.'); + this.isOpen = false; + this.toggleButton.classList.remove('toggled'); + this.outerContainer.classList.add('sidebarMoving'); + this.outerContainer.classList.remove('sidebarOpen'); + this._forceRendering(); + this._dispatchEvent(); + }, + toggle: function PDFSidebar_toggle() { + if (this.isOpen) { + this.close(); } else { - this._pageLabels = labels; + this.open(); } - for (var i = 0, ii = this._pages.length; i < ii; i++) { - var pageView = this._pages[i]; - var label = this._pageLabels && this._pageLabels[i]; - pageView.setPageLabel(label); + }, + _dispatchEvent: function PDFSidebar_dispatchEvent() { + this.eventBus.dispatch('sidebarviewchanged', { + source: this, + view: this.visibleView + }); + }, + _forceRendering: function PDFSidebar_forceRendering() { + if (this.onToggled) { + this.onToggled(); + } else { + this.pdfViewer.forceRendering(); + this.pdfThumbnailViewer.forceRendering(); } }, - _resetView: function () { - this._pages = []; - this._currentPageNumber = 1; - this._currentScale = UNKNOWN_SCALE; - this._currentScaleValue = null; - this._pageLabels = null; - this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE); - this._location = null; - this._pagesRotation = 0; - this._pagesRequests = []; - this._pageViewsReady = false; - this.viewer.textContent = ''; + _updateThumbnailViewer: function PDFSidebar_updateThumbnailViewer() { + var pdfViewer = this.pdfViewer; + var thumbnailViewer = this.pdfThumbnailViewer; + var pagesCount = pdfViewer.pagesCount; + for (var pageIndex = 0; pageIndex < pagesCount; pageIndex++) { + var pageView = pdfViewer.getPageView(pageIndex); + if (pageView && pageView.renderingState === _pdf_rendering_queue.RenderingStates.FINISHED) { + var thumbnailView = thumbnailViewer.getThumbnail(pageIndex); + thumbnailView.setImage(pageView); + } + } + thumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber); }, - _scrollUpdate: function PDFViewer_scrollUpdate() { - if (this.pagesCount === 0) { + _showUINotification: function (view) { + if (this.disableNotification) { return; } - this.update(); - for (var i = 0, ii = this._pages.length; i < ii; i++) { - this._pages[i].updatePosition(); + this.toggleButton.title = _ui_utils.mozL10n.get('toggle_sidebar_notification.title', null, 'Toggle Sidebar (document contains outline/attachments)'); + if (!this.isOpen) { + this.toggleButton.classList.add(UI_NOTIFICATION_CLASS); + } else if (view === this.active) { + return; + } + switch (view) { + case SidebarView.OUTLINE: + this.outlineButton.classList.add(UI_NOTIFICATION_CLASS); + break; + case SidebarView.ATTACHMENTS: + this.attachmentsButton.classList.add(UI_NOTIFICATION_CLASS); + break; } }, - _setScaleDispatchEvent: function pdfViewer_setScaleDispatchEvent(newScale, newValue, preset) { - var arg = { - source: this, - scale: newScale, - presetValue: preset ? newValue : undefined - }; - this.eventBus.dispatch('scalechanging', arg); - this.eventBus.dispatch('scalechange', arg); - }, - _setScaleUpdatePages: function pdfViewer_setScaleUpdatePages(newScale, newValue, noScroll, preset) { - this._currentScaleValue = newValue.toString(); - if (isSameScale(this._currentScale, newScale)) { - if (preset) { - this._setScaleDispatchEvent(newScale, newValue, true); + _hideUINotification: function (view) { + if (this.disableNotification) { + return; + } + var removeNotification = function (view) { + switch (view) { + case SidebarView.OUTLINE: + this.outlineButton.classList.remove(UI_NOTIFICATION_CLASS); + break; + case SidebarView.ATTACHMENTS: + this.attachmentsButton.classList.remove(UI_NOTIFICATION_CLASS); + break; } + }.bind(this); + if (!this.isOpen && view !== null) { return; } - for (var i = 0, ii = this._pages.length; i < ii; i++) { - this._pages[i].update(newScale); + this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS); + if (view !== null) { + removeNotification(view); + return; + } + for (view in SidebarView) { + removeNotification(SidebarView[view]); + } + this.toggleButton.title = _ui_utils.mozL10n.get('toggle_sidebar.title', null, 'Toggle Sidebar'); + }, + _addEventListeners: function PDFSidebar_addEventListeners() { + var self = this; + self.mainContainer.addEventListener('transitionend', function (evt) { + if (evt.target === this) { + self.outerContainer.classList.remove('sidebarMoving'); + } + }); + self.thumbnailButton.addEventListener('click', function () { + self.switchView(SidebarView.THUMBS); + }); + self.outlineButton.addEventListener('click', function () { + self.switchView(SidebarView.OUTLINE); + }); + self.outlineButton.addEventListener('dblclick', function () { + self.pdfOutlineViewer.toggleOutlineTree(); + }); + self.attachmentsButton.addEventListener('click', function () { + self.switchView(SidebarView.ATTACHMENTS); + }); + self.eventBus.on('outlineloaded', function (e) { + var outlineCount = e.outlineCount; + self.outlineButton.disabled = !outlineCount; + if (outlineCount) { + self._showUINotification(SidebarView.OUTLINE); + } else if (self.active === SidebarView.OUTLINE) { + self.switchView(SidebarView.THUMBS); + } + }); + self.eventBus.on('attachmentsloaded', function (e) { + var attachmentsCount = e.attachmentsCount; + self.attachmentsButton.disabled = !attachmentsCount; + if (attachmentsCount) { + self._showUINotification(SidebarView.ATTACHMENTS); + } else if (self.active === SidebarView.ATTACHMENTS) { + self.switchView(SidebarView.THUMBS); + } + }); + self.eventBus.on('presentationmodechanged', function (e) { + if (!e.active && !e.switchInProgress && self.isThumbnailViewVisible) { + self._updateThumbnailViewer(); + } + }); + } + }; + return PDFSidebar; +}(); +exports.SidebarView = SidebarView; +exports.PDFSidebar = PDFSidebar; + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFThumbnailView = undefined; + +var _ui_utils = __w_pdfjs_require__(0); + +var _pdf_rendering_queue = __w_pdfjs_require__(3); + +var THUMBNAIL_WIDTH = 98; +var THUMBNAIL_CANVAS_BORDER_WIDTH = 1; +var PDFThumbnailView = function PDFThumbnailViewClosure() { + function getTempCanvas(width, height) { + var tempCanvas = PDFThumbnailView.tempImageCache; + if (!tempCanvas) { + tempCanvas = document.createElement('canvas'); + PDFThumbnailView.tempImageCache = tempCanvas; + } + tempCanvas.width = width; + tempCanvas.height = height; + tempCanvas.mozOpaque = true; + var ctx = tempCanvas.getContext('2d', { alpha: false }); + ctx.save(); + ctx.fillStyle = 'rgb(255, 255, 255)'; + ctx.fillRect(0, 0, width, height); + ctx.restore(); + return tempCanvas; + } + function PDFThumbnailView(options) { + var container = options.container; + var id = options.id; + var defaultViewport = options.defaultViewport; + var linkService = options.linkService; + var renderingQueue = options.renderingQueue; + var disableCanvasToImageConversion = options.disableCanvasToImageConversion || false; + this.id = id; + this.renderingId = 'thumbnail' + id; + this.pageLabel = null; + this.pdfPage = null; + this.rotation = 0; + this.viewport = defaultViewport; + this.pdfPageRotate = defaultViewport.rotation; + this.linkService = linkService; + this.renderingQueue = renderingQueue; + this.renderTask = null; + this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; + this.resume = null; + this.disableCanvasToImageConversion = disableCanvasToImageConversion; + this.pageWidth = this.viewport.width; + this.pageHeight = this.viewport.height; + this.pageRatio = this.pageWidth / this.pageHeight; + this.canvasWidth = THUMBNAIL_WIDTH; + this.canvasHeight = this.canvasWidth / this.pageRatio | 0; + this.scale = this.canvasWidth / this.pageWidth; + var anchor = document.createElement('a'); + anchor.href = linkService.getAnchorUrl('#page=' + id); + anchor.title = _ui_utils.mozL10n.get('thumb_page_title', { page: id }, 'Page {{page}}'); + anchor.onclick = function stopNavigation() { + linkService.page = id; + return false; + }; + this.anchor = anchor; + var div = document.createElement('div'); + div.className = 'thumbnail'; + div.setAttribute('data-page-number', this.id); + this.div = div; + if (id === 1) { + div.classList.add('selected'); + } + var ring = document.createElement('div'); + ring.className = 'thumbnailSelectionRing'; + var borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH; + ring.style.width = this.canvasWidth + borderAdjustment + 'px'; + ring.style.height = this.canvasHeight + borderAdjustment + 'px'; + this.ring = ring; + div.appendChild(ring); + anchor.appendChild(div); + container.appendChild(anchor); + } + PDFThumbnailView.prototype = { + setPdfPage: function PDFThumbnailView_setPdfPage(pdfPage) { + this.pdfPage = pdfPage; + this.pdfPageRotate = pdfPage.rotate; + var totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = pdfPage.getViewport(1, totalRotation); + this.reset(); + }, + reset: function PDFThumbnailView_reset() { + this.cancelRendering(); + this.pageWidth = this.viewport.width; + this.pageHeight = this.viewport.height; + this.pageRatio = this.pageWidth / this.pageHeight; + this.canvasHeight = this.canvasWidth / this.pageRatio | 0; + this.scale = this.canvasWidth / this.pageWidth; + this.div.removeAttribute('data-loaded'); + var ring = this.ring; + var childNodes = ring.childNodes; + for (var i = childNodes.length - 1; i >= 0; i--) { + ring.removeChild(childNodes[i]); } - this._currentScale = newScale; - if (!noScroll) { - var page = this._currentPageNumber, - dest; - if (this._location && !pdfjsLib.PDFJS.ignoreCurrentPositionOnZoom && !(this.isInPresentationMode || this.isChangingPresentationMode)) { - page = this._location.pageNumber; - dest = [null, { name: 'XYZ' }, this._location.left, this._location.top, null]; - } - this.scrollPageIntoView({ - pageNumber: page, - destArray: dest, - allowNegativeOffset: true - }); + var borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH; + ring.style.width = this.canvasWidth + borderAdjustment + 'px'; + ring.style.height = this.canvasHeight + borderAdjustment + 'px'; + if (this.canvas) { + this.canvas.width = 0; + this.canvas.height = 0; + delete this.canvas; } - this._setScaleDispatchEvent(newScale, newValue, preset); - if (this.defaultRenderingQueue) { - this.update(); + if (this.image) { + this.image.removeAttribute('src'); + delete this.image; } }, - _setScale: function PDFViewer_setScale(value, noScroll) { - var scale = parseFloat(value); - if (scale > 0) { - this._setScaleUpdatePages(scale, value, noScroll, false); - } else { - var currentPage = this._pages[this._currentPageNumber - 1]; - if (!currentPage) { - return; - } - var hPadding = this.isInPresentationMode || this.removePageBorders ? 0 : SCROLLBAR_PADDING; - var vPadding = this.isInPresentationMode || this.removePageBorders ? 0 : VERTICAL_PADDING; - var pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale; - var pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale; - switch (value) { - case 'page-actual': - scale = 1; - break; - case 'page-width': - scale = pageWidthScale; - break; - case 'page-height': - scale = pageHeightScale; - break; - case 'page-fit': - scale = Math.min(pageWidthScale, pageHeightScale); - break; - case 'auto': - var isLandscape = currentPage.width > currentPage.height; - var horizontalScale = isLandscape ? Math.min(pageHeightScale, pageWidthScale) : pageWidthScale; - scale = Math.min(MAX_AUTO_SCALE, horizontalScale); - break; - default: - console.error('PDFViewer_setScale: "' + value + '" is an unknown zoom value.'); - return; - } - this._setScaleUpdatePages(scale, value, noScroll, true); + update: function PDFThumbnailView_update(rotation) { + if (typeof rotation !== 'undefined') { + this.rotation = rotation; } + var totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = this.viewport.clone({ + scale: 1, + rotation: totalRotation + }); + this.reset(); }, - _resetCurrentPageView: function () { - if (this.isInPresentationMode) { - this._setScale(this._currentScaleValue, true); + cancelRendering: function PDFThumbnailView_cancelRendering() { + if (this.renderTask) { + this.renderTask.cancel(); + this.renderTask = null; } - var pageView = this._pages[this._currentPageNumber - 1]; - scrollIntoView(pageView.div); + this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; + this.resume = null; }, - scrollPageIntoView: function PDFViewer_scrollPageIntoView(params) { - if (!this.pdfDocument) { + _getPageDrawContext: function PDFThumbnailView_getPageDrawContext(noCtxScale) { + var canvas = document.createElement('canvas'); + this.canvas = canvas; + canvas.mozOpaque = true; + var ctx = canvas.getContext('2d', { alpha: false }); + var outputScale = (0, _ui_utils.getOutputScale)(ctx); + canvas.width = this.canvasWidth * outputScale.sx | 0; + canvas.height = this.canvasHeight * outputScale.sy | 0; + canvas.style.width = this.canvasWidth + 'px'; + canvas.style.height = this.canvasHeight + 'px'; + if (!noCtxScale && outputScale.scaled) { + ctx.scale(outputScale.sx, outputScale.sy); + } + return ctx; + }, + _convertCanvasToImage: function PDFThumbnailView_convertCanvasToImage() { + if (!this.canvas) { return; } - if (arguments.length > 1 || typeof params === 'number') { - console.warn('Call of scrollPageIntoView() with obsolete signature.'); - var paramObj = {}; - if (typeof params === 'number') { - paramObj.pageNumber = params; - } - if (arguments[1] instanceof Array) { - paramObj.destArray = arguments[1]; - } - params = paramObj; - } - var pageNumber = params.pageNumber || 0; - var dest = params.destArray || null; - var allowNegativeOffset = params.allowNegativeOffset || false; - if (this.isInPresentationMode || !dest) { - this._setCurrentPageNumber(pageNumber, true); + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { return; } - var pageView = this._pages[pageNumber - 1]; - if (!pageView) { - console.error('PDFViewer_scrollPageIntoView: ' + 'Invalid "pageNumber" parameter.'); + var id = this.renderingId; + var className = 'thumbnailImage'; + var ariaLabel = _ui_utils.mozL10n.get('thumb_page_canvas', { page: this.pageId }, 'Thumbnail of Page {{page}}'); + if (this.disableCanvasToImageConversion) { + this.canvas.id = id; + this.canvas.className = className; + this.canvas.setAttribute('aria-label', ariaLabel); + this.div.setAttribute('data-loaded', true); + this.ring.appendChild(this.canvas); return; } - var x = 0, - y = 0; - var width = 0, - height = 0, - widthScale, - heightScale; - var changeOrientation = pageView.rotation % 180 === 0 ? false : true; - var pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / CSS_UNITS; - var pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / CSS_UNITS; - var scale = 0; - switch (dest[1].name) { - case 'XYZ': - x = dest[2]; - y = dest[3]; - scale = dest[4]; - x = x !== null ? x : 0; - y = y !== null ? y : pageHeight; - break; - case 'Fit': - case 'FitB': - scale = 'page-fit'; - break; - case 'FitH': - case 'FitBH': - y = dest[2]; - scale = 'page-width'; - if (y === null && this._location) { - x = this._location.left; - y = this._location.top; - } - break; - case 'FitV': - case 'FitBV': - x = dest[2]; - width = pageWidth; - height = pageHeight; - scale = 'page-height'; - break; - case 'FitR': - x = dest[2]; - y = dest[3]; - width = dest[4] - x; - height = dest[5] - y; - var hPadding = this.removePageBorders ? 0 : SCROLLBAR_PADDING; - var vPadding = this.removePageBorders ? 0 : VERTICAL_PADDING; - widthScale = (this.container.clientWidth - hPadding) / width / CSS_UNITS; - heightScale = (this.container.clientHeight - vPadding) / height / CSS_UNITS; - scale = Math.min(Math.abs(widthScale), Math.abs(heightScale)); - break; - default: - console.error('PDFViewer_scrollPageIntoView: \'' + dest[1].name + '\' is not a valid destination type.'); + var image = document.createElement('img'); + image.id = id; + image.className = className; + image.setAttribute('aria-label', ariaLabel); + image.style.width = this.canvasWidth + 'px'; + image.style.height = this.canvasHeight + 'px'; + image.src = this.canvas.toDataURL(); + this.image = image; + this.div.setAttribute('data-loaded', true); + this.ring.appendChild(image); + this.canvas.width = 0; + this.canvas.height = 0; + delete this.canvas; + }, + draw: function PDFThumbnailView_draw() { + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { + console.error('Must be in new state before drawing'); + return Promise.resolve(undefined); + } + this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; + var resolveRenderPromise, rejectRenderPromise; + var promise = new Promise(function (resolve, reject) { + resolveRenderPromise = resolve; + rejectRenderPromise = reject; + }); + var self = this; + function thumbnailDrawCallback(error) { + if (renderTask === self.renderTask) { + self.renderTask = null; + } + if (error === 'cancelled') { + rejectRenderPromise(error); return; + } + self.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; + self._convertCanvasToImage(); + if (!error) { + resolveRenderPromise(undefined); + } else { + rejectRenderPromise(error); + } } - if (scale && scale !== this._currentScale) { - this.currentScaleValue = scale; - } else if (this._currentScale === UNKNOWN_SCALE) { - this.currentScaleValue = DEFAULT_SCALE_VALUE; + var ctx = this._getPageDrawContext(); + var drawViewport = this.viewport.clone({ scale: this.scale }); + var renderContinueCallback = function renderContinueCallback(cont) { + if (!self.renderingQueue.isHighestPriority(self)) { + self.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED; + self.resume = function resumeCallback() { + self.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; + cont(); + }; + return; + } + cont(); + }; + var renderContext = { + canvasContext: ctx, + viewport: drawViewport + }; + var renderTask = this.renderTask = this.pdfPage.render(renderContext); + renderTask.onContinue = renderContinueCallback; + renderTask.promise.then(function pdfPageRenderCallback() { + thumbnailDrawCallback(null); + }, function pdfPageRenderError(error) { + thumbnailDrawCallback(error); + }); + return promise; + }, + setImage: function PDFThumbnailView_setImage(pageView) { + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { + return; } - if (scale === 'page-fit' && !dest[4]) { - scrollIntoView(pageView.div); + var img = pageView.canvas; + if (!img) { return; } - var boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)]; - var left = Math.min(boundingRect[0][0], boundingRect[1][0]); - var top = Math.min(boundingRect[0][1], boundingRect[1][1]); - if (!allowNegativeOffset) { - left = Math.max(left, 0); - top = Math.max(top, 0); + if (!this.pdfPage) { + this.setPdfPage(pageView.pdfPage); } - scrollIntoView(pageView.div, { - left: left, - top: top - }); + this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; + var ctx = this._getPageDrawContext(true); + var canvas = ctx.canvas; + if (img.width <= 2 * canvas.width) { + ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height); + this._convertCanvasToImage(); + return; + } + var MAX_NUM_SCALING_STEPS = 3; + var reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS; + var reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS; + var reducedImage = getTempCanvas(reducedWidth, reducedHeight); + var reducedImageCtx = reducedImage.getContext('2d'); + while (reducedWidth > img.width || reducedHeight > img.height) { + reducedWidth >>= 1; + reducedHeight >>= 1; + } + reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, reducedWidth, reducedHeight); + while (reducedWidth > 2 * canvas.width) { + reducedImageCtx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, reducedWidth >> 1, reducedHeight >> 1); + reducedWidth >>= 1; + reducedHeight >>= 1; + } + ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height); + this._convertCanvasToImage(); }, - _updateLocation: function (firstPage) { - var currentScale = this._currentScale; - var currentScaleValue = this._currentScaleValue; - var normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue; - var pageNumber = firstPage.id; - var pdfOpenParams = '#page=' + pageNumber; - pdfOpenParams += '&zoom=' + normalizedScaleValue; - var currentPageView = this._pages[pageNumber - 1]; - var container = this.container; - var topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y); - var intLeft = Math.round(topLeft[0]); - var intTop = Math.round(topLeft[1]); - pdfOpenParams += ',' + intLeft + ',' + intTop; - this._location = { - pageNumber: pageNumber, - scale: normalizedScaleValue, - top: intTop, - left: intLeft, - pdfOpenParams: pdfOpenParams - }; + get pageId() { + return this.pageLabel !== null ? this.pageLabel : this.id; }, - update: function PDFViewer_update() { - var visible = this._getVisiblePages(); - var visiblePages = visible.views; - if (visiblePages.length === 0) { + setPageLabel: function PDFThumbnailView_setPageLabel(label) { + this.pageLabel = typeof label === 'string' ? label : null; + this.anchor.title = _ui_utils.mozL10n.get('thumb_page_title', { page: this.pageId }, 'Page {{page}}'); + if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { return; } - var suggestedCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * visiblePages.length + 1); - this._buffer.resize(suggestedCacheSize); - this.renderingQueue.renderHighestPriority(visible); - var currentId = this._currentPageNumber; - var firstPage = visible.first; - for (var i = 0, ii = visiblePages.length, stillFullyVisible = false; i < ii; ++i) { - var page = visiblePages[i]; - if (page.percent < 100) { - break; - } - if (page.id === currentId) { - stillFullyVisible = true; - break; - } - } - if (!stillFullyVisible) { - currentId = visiblePages[0].id; - } - if (!this.isInPresentationMode) { - this._setCurrentPageNumber(currentId); + var ariaLabel = _ui_utils.mozL10n.get('thumb_page_canvas', { page: this.pageId }, 'Thumbnail of Page {{page}}'); + if (this.image) { + this.image.setAttribute('aria-label', ariaLabel); + } else if (this.disableCanvasToImageConversion && this.canvas) { + this.canvas.setAttribute('aria-label', ariaLabel); } - this._updateLocation(firstPage); - this.eventBus.dispatch('updateviewarea', { - source: this, - location: this._location - }); + } + }; + return PDFThumbnailView; +}(); +PDFThumbnailView.tempImageCache = null; +exports.PDFThumbnailView = PDFThumbnailView; + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PDFThumbnailViewer = undefined; + +var _ui_utils = __w_pdfjs_require__(0); + +var _pdf_thumbnail_view = __w_pdfjs_require__(24); + +var THUMBNAIL_SCROLL_MARGIN = -19; +var PDFThumbnailViewer = function PDFThumbnailViewerClosure() { + function PDFThumbnailViewer(options) { + this.container = options.container; + this.renderingQueue = options.renderingQueue; + this.linkService = options.linkService; + this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdated.bind(this)); + this._resetView(); + } + PDFThumbnailViewer.prototype = { + _scrollUpdated: function PDFThumbnailViewer_scrollUpdated() { + this.renderingQueue.renderHighestPriority(); }, - containsElement: function (element) { - return this.container.contains(element); + getThumbnail: function PDFThumbnailViewer_getThumbnail(index) { + return this.thumbnails[index]; }, - focus: function () { - this.container.focus(); + _getVisibleThumbs: function PDFThumbnailViewer_getVisibleThumbs() { + return (0, _ui_utils.getVisibleElements)(this.container, this.thumbnails); }, - get isInPresentationMode() { - return this.presentationModeState === PresentationModeState.FULLSCREEN; + scrollThumbnailIntoView: function PDFThumbnailViewer_scrollThumbnailIntoView(page) { + var selected = document.querySelector('.thumbnail.selected'); + if (selected) { + selected.classList.remove('selected'); + } + var thumbnail = document.querySelector('div.thumbnail[data-page-number="' + page + '"]'); + if (thumbnail) { + thumbnail.classList.add('selected'); + } + var visibleThumbs = this._getVisibleThumbs(); + var numVisibleThumbs = visibleThumbs.views.length; + if (numVisibleThumbs > 0) { + var first = visibleThumbs.first.id; + var last = numVisibleThumbs > 1 ? visibleThumbs.last.id : first; + if (page <= first || page >= last) { + (0, _ui_utils.scrollIntoView)(thumbnail, { top: THUMBNAIL_SCROLL_MARGIN }); + } + } + }, + get pagesRotation() { + return this._pagesRotation; }, - get isChangingPresentationMode() { - return this.presentationModeState === PresentationModeState.CHANGING; + set pagesRotation(rotation) { + this._pagesRotation = rotation; + for (var i = 0, l = this.thumbnails.length; i < l; i++) { + var thumb = this.thumbnails[i]; + thumb.update(rotation); + } }, - get isHorizontalScrollbarEnabled() { - return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth; + cleanup: function PDFThumbnailViewer_cleanup() { + var tempCanvas = _pdf_thumbnail_view.PDFThumbnailView.tempImageCache; + if (tempCanvas) { + tempCanvas.width = 0; + tempCanvas.height = 0; + } + _pdf_thumbnail_view.PDFThumbnailView.tempImageCache = null; }, - _getVisiblePages: function () { - if (!this.isInPresentationMode) { - return getVisibleElements(this.container, this._pages, true); + _resetView: function PDFThumbnailViewer_resetView() { + this.thumbnails = []; + this._pageLabels = null; + this._pagesRotation = 0; + this._pagesRequests = []; + this.container.textContent = ''; + }, + setDocument: function PDFThumbnailViewer_setDocument(pdfDocument) { + if (this.pdfDocument) { + this._cancelRendering(); + this._resetView(); } - var visible = []; - var currentPage = this._pages[this._currentPageNumber - 1]; - visible.push({ - id: currentPage.id, - view: currentPage - }); - return { - first: currentPage, - last: currentPage, - views: visible - }; + this.pdfDocument = pdfDocument; + if (!pdfDocument) { + return Promise.resolve(); + } + return pdfDocument.getPage(1).then(function (firstPage) { + var pagesCount = pdfDocument.numPages; + var viewport = firstPage.getViewport(1.0); + for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { + var thumbnail = new _pdf_thumbnail_view.PDFThumbnailView({ + container: this.container, + id: pageNum, + defaultViewport: viewport.clone(), + linkService: this.linkService, + renderingQueue: this.renderingQueue, + disableCanvasToImageConversion: false + }); + this.thumbnails.push(thumbnail); + } + }.bind(this)); }, - cleanup: function () { - for (var i = 0, ii = this._pages.length; i < ii; i++) { - if (this._pages[i] && this._pages[i].renderingState !== RenderingStates.FINISHED) { - this._pages[i].reset(); + _cancelRendering: function PDFThumbnailViewer_cancelRendering() { + for (var i = 0, ii = this.thumbnails.length; i < ii; i++) { + if (this.thumbnails[i]) { + this.thumbnails[i].cancelRendering(); } } }, - _cancelRendering: function PDFViewer_cancelRendering() { - for (var i = 0, ii = this._pages.length; i < ii; i++) { - if (this._pages[i]) { - this._pages[i].cancelRendering(); - } + setPageLabels: function PDFThumbnailViewer_setPageLabels(labels) { + if (!this.pdfDocument) { + return; + } + if (!labels) { + this._pageLabels = null; + } else if (!(labels instanceof Array && this.pdfDocument.numPages === labels.length)) { + this._pageLabels = null; + console.error('PDFThumbnailViewer_setPageLabels: Invalid page labels.'); + } else { + this._pageLabels = labels; + } + for (var i = 0, ii = this.thumbnails.length; i < ii; i++) { + var thumbnailView = this.thumbnails[i]; + var label = this._pageLabels && this._pageLabels[i]; + thumbnailView.setPageLabel(label); } }, - _ensurePdfPageLoaded: function (pageView) { - if (pageView.pdfPage) { - return Promise.resolve(pageView.pdfPage); + _ensurePdfPageLoaded: function PDFThumbnailViewer_ensurePdfPageLoaded(thumbView) { + if (thumbView.pdfPage) { + return Promise.resolve(thumbView.pdfPage); } - var pageNumber = pageView.id; + var pageNumber = thumbView.id; if (this._pagesRequests[pageNumber]) { return this._pagesRequests[pageNumber]; } var promise = this.pdfDocument.getPage(pageNumber).then(function (pdfPage) { - pageView.setPdfPage(pdfPage); + thumbView.setPdfPage(pdfPage); this._pagesRequests[pageNumber] = null; return pdfPage; }.bind(this)); this._pagesRequests[pageNumber] = promise; return promise; }, - forceRendering: function (currentlyVisiblePages) { - var visiblePages = currentlyVisiblePages || this._getVisiblePages(); - var pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, this.scroll.down); - if (pageView) { - this._ensurePdfPageLoaded(pageView).then(function () { - this.renderingQueue.renderView(pageView); + forceRendering: function () { + var visibleThumbs = this._getVisibleThumbs(); + var thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this.thumbnails, this.scroll.down); + if (thumbView) { + this._ensurePdfPageLoaded(thumbView).then(function () { + this.renderingQueue.renderView(thumbView); }.bind(this)); return true; } return false; - }, - getPageTextContent: function (pageIndex) { - return this.pdfDocument.getPage(pageIndex + 1).then(function (page) { - return page.getTextContent({ normalizeWhitespace: true }); - }); - }, - createTextLayerBuilder: function (textLayerDiv, pageIndex, viewport, enhanceTextSelection) { - return new TextLayerBuilder({ - textLayerDiv: textLayerDiv, - eventBus: this.eventBus, - pageIndex: pageIndex, - viewport: viewport, - findController: this.isInPresentationMode ? null : this.findController, - enhanceTextSelection: this.isInPresentationMode ? false : enhanceTextSelection - }); - }, - createAnnotationLayerBuilder: function (pageDiv, pdfPage, renderInteractiveForms) { - return new AnnotationLayerBuilder({ - pageDiv: pageDiv, - pdfPage: pdfPage, - renderInteractiveForms: renderInteractiveForms, - linkService: this.linkService, - downloadManager: this.downloadManager - }); - }, - setFindController: function (findController) { - this.findController = findController; - }, - getPagesOverview: function () { - var pagesOverview = this._pages.map(function (pageView) { - var viewport = pageView.pdfPage.getViewport(1); - return { - width: viewport.width, - height: viewport.height, - rotation: viewport.rotation - }; - }); - if (!this.enablePrintAutoRotate) { - return pagesOverview; - } - var isFirstPagePortrait = isPortraitOrientation(pagesOverview[0]); - return pagesOverview.map(function (size) { - if (isFirstPagePortrait === isPortraitOrientation(size)) { - return size; - } - return { - width: size.height, - height: size.width, - rotation: (size.rotation + 90) % 360 - }; - }); } }; - return PDFViewer; + return PDFThumbnailViewer; }(); -exports.PresentationModeState = PresentationModeState; -exports.PDFViewer = PDFViewer; +exports.PDFThumbnailViewer = PDFThumbnailViewer; /***/ }), -/* 12 */ +/* 26 */ /***/ (function(module, exports, __w_pdfjs_require__) { "use strict"; -var pdfjsLib = __w_pdfjs_require__(0); -var pdfjsWebPDFViewer = __w_pdfjs_require__(11); -var pdfjsWebPDFPageView = __w_pdfjs_require__(5); -var pdfjsWebPDFLinkService = __w_pdfjs_require__(3); -var pdfjsWebTextLayerBuilder = __w_pdfjs_require__(6); -var pdfjsWebAnnotationLayerBuilder = __w_pdfjs_require__(4); -var pdfjsWebPDFHistory = __w_pdfjs_require__(10); -var pdfjsWebPDFFindController = __w_pdfjs_require__(9); -var pdfjsWebUIUtils = __w_pdfjs_require__(1); -var pdfjsWebDownloadManager = __w_pdfjs_require__(8); +var pdfjsLib = __w_pdfjs_require__(1); +var pdfjsWebPDFViewer = __w_pdfjs_require__(10); +var pdfjsWebPDFPageView = __w_pdfjs_require__(9); +var pdfjsWebPDFLinkService = __w_pdfjs_require__(4); +var pdfjsWebTextLayerBuilder = __w_pdfjs_require__(11); +var pdfjsWebAnnotationLayerBuilder = __w_pdfjs_require__(7); +var pdfjsWebPDFHistory = __w_pdfjs_require__(8); +var pdfjsWebPDFFindController = __w_pdfjs_require__(5); +var pdfjsWebUIUtils = __w_pdfjs_require__(0); +var pdfjsWebDownloadManager = __w_pdfjs_require__(13); var PDFJS = pdfjsLib.PDFJS; PDFJS.PDFViewer = pdfjsWebPDFViewer.PDFViewer; PDFJS.PDFPageView = pdfjsWebPDFPageView.PDFPageView; @@ -3367,6 +7138,461 @@ PDFJS.DownloadManager = pdfjsWebDownloadManager.DownloadManager; PDFJS.ProgressBar = pdfjsWebUIUtils.ProgressBar; exports.PDFJS = PDFJS; +/***/ }), +/* 27 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.SecondaryToolbar = undefined; + +var _ui_utils = __w_pdfjs_require__(0); + +var SecondaryToolbar = function SecondaryToolbarClosure() { + function SecondaryToolbar(options, mainContainer, eventBus) { + this.toolbar = options.toolbar; + this.toggleButton = options.toggleButton; + this.toolbarButtonContainer = options.toolbarButtonContainer; + this.buttons = [{ + element: options.presentationModeButton, + eventName: 'presentationmode', + close: true + }, { + element: options.openFileButton, + eventName: 'openfile', + close: true + }, { + element: options.printButton, + eventName: 'print', + close: true + }, { + element: options.downloadButton, + eventName: 'download', + close: true + }, { + element: options.viewBookmarkButton, + eventName: null, + close: true + }, { + element: options.firstPageButton, + eventName: 'firstpage', + close: true + }, { + element: options.lastPageButton, + eventName: 'lastpage', + close: true + }, { + element: options.pageRotateCwButton, + eventName: 'rotatecw', + close: false + }, { + element: options.pageRotateCcwButton, + eventName: 'rotateccw', + close: false + }, { + element: options.toggleHandToolButton, + eventName: 'togglehandtool', + close: true + }, { + element: options.documentPropertiesButton, + eventName: 'documentproperties', + close: true + }]; + this.items = { + firstPage: options.firstPageButton, + lastPage: options.lastPageButton, + pageRotateCw: options.pageRotateCwButton, + pageRotateCcw: options.pageRotateCcwButton + }; + this.mainContainer = mainContainer; + this.eventBus = eventBus; + this.opened = false; + this.containerHeight = null; + this.previousContainerHeight = null; + this.reset(); + this._bindClickListeners(); + this._bindHandToolListener(options.toggleHandToolButton); + this.eventBus.on('resize', this._setMaxHeight.bind(this)); + } + SecondaryToolbar.prototype = { + get isOpen() { + return this.opened; + }, + setPageNumber: function SecondaryToolbar_setPageNumber(pageNumber) { + this.pageNumber = pageNumber; + this._updateUIState(); + }, + setPagesCount: function SecondaryToolbar_setPagesCount(pagesCount) { + this.pagesCount = pagesCount; + this._updateUIState(); + }, + reset: function SecondaryToolbar_reset() { + this.pageNumber = 0; + this.pagesCount = 0; + this._updateUIState(); + }, + _updateUIState: function SecondaryToolbar_updateUIState() { + var items = this.items; + items.firstPage.disabled = this.pageNumber <= 1; + items.lastPage.disabled = this.pageNumber >= this.pagesCount; + items.pageRotateCw.disabled = this.pagesCount === 0; + items.pageRotateCcw.disabled = this.pagesCount === 0; + }, + _bindClickListeners: function SecondaryToolbar_bindClickListeners() { + this.toggleButton.addEventListener('click', this.toggle.bind(this)); + for (var button in this.buttons) { + var element = this.buttons[button].element; + var eventName = this.buttons[button].eventName; + var close = this.buttons[button].close; + element.addEventListener('click', function (eventName, close) { + if (eventName !== null) { + this.eventBus.dispatch(eventName, { source: this }); + } + if (close) { + this.close(); + } + }.bind(this, eventName, close)); + } + }, + _bindHandToolListener: function SecondaryToolbar_bindHandToolListener(toggleHandToolButton) { + var isHandToolActive = false; + this.eventBus.on('handtoolchanged', function (e) { + if (isHandToolActive === e.isActive) { + return; + } + isHandToolActive = e.isActive; + if (isHandToolActive) { + toggleHandToolButton.title = _ui_utils.mozL10n.get('hand_tool_disable.title', null, 'Disable hand tool'); + toggleHandToolButton.firstElementChild.textContent = _ui_utils.mozL10n.get('hand_tool_disable_label', null, 'Disable hand tool'); + } else { + toggleHandToolButton.title = _ui_utils.mozL10n.get('hand_tool_enable.title', null, 'Enable hand tool'); + toggleHandToolButton.firstElementChild.textContent = _ui_utils.mozL10n.get('hand_tool_enable_label', null, 'Enable hand tool'); + } + }); + }, + open: function SecondaryToolbar_open() { + if (this.opened) { + return; + } + this.opened = true; + this._setMaxHeight(); + this.toggleButton.classList.add('toggled'); + this.toolbar.classList.remove('hidden'); + }, + close: function SecondaryToolbar_close() { + if (!this.opened) { + return; + } + this.opened = false; + this.toolbar.classList.add('hidden'); + this.toggleButton.classList.remove('toggled'); + }, + toggle: function SecondaryToolbar_toggle() { + if (this.opened) { + this.close(); + } else { + this.open(); + } + }, + _setMaxHeight: function SecondaryToolbar_setMaxHeight() { + if (!this.opened) { + return; + } + this.containerHeight = this.mainContainer.clientHeight; + if (this.containerHeight === this.previousContainerHeight) { + return; + } + this.toolbarButtonContainer.setAttribute('style', 'max-height: ' + (this.containerHeight - _ui_utils.SCROLLBAR_PADDING) + 'px;'); + this.previousContainerHeight = this.containerHeight; + } + }; + return SecondaryToolbar; +}(); +exports.SecondaryToolbar = SecondaryToolbar; + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Toolbar = undefined; + +var _ui_utils = __w_pdfjs_require__(0); + +var PAGE_NUMBER_LOADING_INDICATOR = 'visiblePageIsLoading'; +var SCALE_SELECT_CONTAINER_PADDING = 8; +var SCALE_SELECT_PADDING = 22; +var Toolbar = function ToolbarClosure() { + function Toolbar(options, mainContainer, eventBus) { + this.toolbar = options.container; + this.mainContainer = mainContainer; + this.eventBus = eventBus; + this.items = options; + this._wasLocalized = false; + this.reset(); + this._bindListeners(); + } + Toolbar.prototype = { + setPageNumber: function (pageNumber, pageLabel) { + this.pageNumber = pageNumber; + this.pageLabel = pageLabel; + this._updateUIState(false); + }, + setPagesCount: function (pagesCount, hasPageLabels) { + this.pagesCount = pagesCount; + this.hasPageLabels = hasPageLabels; + this._updateUIState(true); + }, + setPageScale: function (pageScaleValue, pageScale) { + this.pageScaleValue = pageScaleValue; + this.pageScale = pageScale; + this._updateUIState(false); + }, + reset: function () { + this.pageNumber = 0; + this.pageLabel = null; + this.hasPageLabels = false; + this.pagesCount = 0; + this.pageScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; + this.pageScale = _ui_utils.DEFAULT_SCALE; + this._updateUIState(true); + }, + _bindListeners: function Toolbar_bindClickListeners() { + var eventBus = this.eventBus; + var self = this; + var items = this.items; + items.previous.addEventListener('click', function () { + eventBus.dispatch('previouspage'); + }); + items.next.addEventListener('click', function () { + eventBus.dispatch('nextpage'); + }); + items.zoomIn.addEventListener('click', function () { + eventBus.dispatch('zoomin'); + }); + items.zoomOut.addEventListener('click', function () { + eventBus.dispatch('zoomout'); + }); + items.pageNumber.addEventListener('click', function () { + this.select(); + }); + items.pageNumber.addEventListener('change', function () { + eventBus.dispatch('pagenumberchanged', { + source: self, + value: this.value + }); + }); + items.scaleSelect.addEventListener('change', function () { + if (this.value === 'custom') { + return; + } + eventBus.dispatch('scalechanged', { + source: self, + value: this.value + }); + }); + items.presentationModeButton.addEventListener('click', function (e) { + eventBus.dispatch('presentationmode'); + }); + items.openFile.addEventListener('click', function (e) { + eventBus.dispatch('openfile'); + }); + items.print.addEventListener('click', function (e) { + eventBus.dispatch('print'); + }); + items.download.addEventListener('click', function (e) { + eventBus.dispatch('download'); + }); + items.scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler; + _ui_utils.localized.then(this._localized.bind(this)); + }, + _localized: function Toolbar_localized() { + this._wasLocalized = true; + this._adjustScaleWidth(); + this._updateUIState(true); + }, + _updateUIState: function Toolbar_updateUIState(resetNumPages) { + function selectScaleOption(value, scale) { + var options = items.scaleSelect.options; + var predefinedValueFound = false; + for (var i = 0, ii = options.length; i < ii; i++) { + var option = options[i]; + if (option.value !== value) { + option.selected = false; + continue; + } + option.selected = true; + predefinedValueFound = true; + } + if (!predefinedValueFound) { + var customScale = Math.round(scale * 10000) / 100; + items.customScaleOption.textContent = _ui_utils.mozL10n.get('page_scale_percent', { scale: customScale }, '{{scale}}%'); + items.customScaleOption.selected = true; + } + } + if (!this._wasLocalized) { + return; + } + var pageNumber = this.pageNumber; + var scaleValue = (this.pageScaleValue || this.pageScale).toString(); + var scale = this.pageScale; + var items = this.items; + var pagesCount = this.pagesCount; + if (resetNumPages) { + if (this.hasPageLabels) { + items.pageNumber.type = 'text'; + } else { + items.pageNumber.type = 'number'; + items.numPages.textContent = _ui_utils.mozL10n.get('of_pages', { pagesCount: pagesCount }, 'of {{pagesCount}}'); + } + items.pageNumber.max = pagesCount; + } + if (this.hasPageLabels) { + items.pageNumber.value = this.pageLabel; + items.numPages.textContent = _ui_utils.mozL10n.get('page_of_pages', { + pageNumber: pageNumber, + pagesCount: pagesCount + }, '({{pageNumber}} of {{pagesCount}})'); + } else { + items.pageNumber.value = pageNumber; + } + items.previous.disabled = pageNumber <= 1; + items.next.disabled = pageNumber >= pagesCount; + items.zoomOut.disabled = scale <= _ui_utils.MIN_SCALE; + items.zoomIn.disabled = scale >= _ui_utils.MAX_SCALE; + selectScaleOption(scaleValue, scale); + }, + updateLoadingIndicatorState: function Toolbar_updateLoadingIndicatorState(loading) { + var pageNumberInput = this.items.pageNumber; + if (loading) { + pageNumberInput.classList.add(PAGE_NUMBER_LOADING_INDICATOR); + } else { + pageNumberInput.classList.remove(PAGE_NUMBER_LOADING_INDICATOR); + } + }, + _adjustScaleWidth: function Toolbar_adjustScaleWidth() { + var container = this.items.scaleSelectContainer; + var select = this.items.scaleSelect; + _ui_utils.animationStarted.then(function () { + if (container.clientWidth === 0) { + container.setAttribute('style', 'display: inherit;'); + } + if (container.clientWidth > 0) { + select.setAttribute('style', 'min-width: inherit;'); + var width = select.clientWidth + SCALE_SELECT_CONTAINER_PADDING; + select.setAttribute('style', 'min-width: ' + (width + SCALE_SELECT_PADDING) + 'px;'); + container.setAttribute('style', 'min-width: ' + width + 'px; ' + 'max-width: ' + width + 'px;'); + } + }); + } + }; + return Toolbar; +}(); +exports.Toolbar = Toolbar; + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __w_pdfjs_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20; +var ViewHistory = function ViewHistoryClosure() { + function ViewHistory(fingerprint, cacheSize) { + this.fingerprint = fingerprint; + this.cacheSize = cacheSize || DEFAULT_VIEW_HISTORY_CACHE_SIZE; + this.isInitializedPromiseResolved = false; + this.initializedPromise = this._readFromStorage().then(function (databaseStr) { + this.isInitializedPromiseResolved = true; + var database = JSON.parse(databaseStr || '{}'); + if (!('files' in database)) { + database.files = []; + } + if (database.files.length >= this.cacheSize) { + database.files.shift(); + } + var index; + for (var i = 0, length = database.files.length; i < length; i++) { + var branch = database.files[i]; + if (branch.fingerprint === this.fingerprint) { + index = i; + break; + } + } + if (typeof index !== 'number') { + index = database.files.push({ fingerprint: this.fingerprint }) - 1; + } + this.file = database.files[index]; + this.database = database; + }.bind(this)); + } + ViewHistory.prototype = { + _writeToStorage: function ViewHistory_writeToStorage() { + return new Promise(function (resolve) { + var databaseStr = JSON.stringify(this.database); + localStorage.setItem('pdfjs.history', databaseStr); + resolve(); + }.bind(this)); + }, + _readFromStorage: function ViewHistory_readFromStorage() { + return new Promise(function (resolve) { + var value = localStorage.getItem('pdfjs.history'); + if (!value) { + var databaseStr = localStorage.getItem('database'); + if (databaseStr) { + try { + var database = JSON.parse(databaseStr); + if (typeof database.files[0].fingerprint === 'string') { + localStorage.setItem('pdfjs.history', databaseStr); + localStorage.removeItem('database'); + value = databaseStr; + } + } catch (ex) {} + } + } + resolve(value); + }); + }, + set: function ViewHistory_set(name, val) { + if (!this.isInitializedPromiseResolved) { + return; + } + this.file[name] = val; + return this._writeToStorage(); + }, + setMultiple: function ViewHistory_setMultiple(properties) { + if (!this.isInitializedPromiseResolved) { + return; + } + for (var name in properties) { + this.file[name] = properties[name]; + } + return this._writeToStorage(); + }, + get: function ViewHistory_get(name, defaultValue) { + if (!this.isInitializedPromiseResolved) { + return defaultValue; + } + return this.file[name] || defaultValue; + } + }; + return ViewHistory; +}(); +exports.ViewHistory = ViewHistory; + /***/ }) /******/ ]); }); \ No newline at end of file