diff --git a/files_opds/lib/isbndb.php b/files_opds/lib/isbndb.php index 9e4d2f3..75c7100 100644 --- a/files_opds/lib/isbndb.php +++ b/files_opds/lib/isbndb.php @@ -62,13 +62,13 @@ class Isbndb static function parse($data,&$meta) { /* did the call succeed? If not, schedule a rescan */ if (Isbn::REQUEST_LIMIT_EXCEEDED == $data) { - $meta['rescan'] = date("Y-m-d\TH:i:sP", time() + Isbn::RESCAN_LIMIT_EXCEEDED); + $meta['rescan'] = date("Y-m-d H:i:s", time() + Isbn::RESCAN_LIMIT_EXCEEDED); return false; } elseif (Isbn::NOT_FOUND == $data) { - $meta['rescan'] = date("Y-m-d\TH:i:sP", time() + Isbn::RESCAN_NOT_FOUND); + $meta['rescan'] = date("Y-m-d H:i:s", time() + Isbn::RESCAN_NOT_FOUND); return false; } elseif (Isbn::ERROR == $data) { - $meta['rescan'] = date("Y-m-d\TH:i:sP", time() + Isbn::RESCAN_ERROR); + $meta['rescan'] = date("Y-m-d H:i:s", time() + Isbn::RESCAN_ERROR); return false; } diff --git a/files_reader/CHANGELOG.md b/files_reader/CHANGELOG.md index 0494d71..3a2d9fe 100644 --- a/files_reader/CHANGELOG.md +++ b/files_reader/CHANGELOG.md @@ -1,10 +1,18 @@ ## UNRELEASED ### Added - Reader now supports PDF - - PDF should work more or less like EPUB, ie. double page spreads are supported + - PDF double page spreads are supported - optional double-buffering for faster rendering, can be disabled for low-memory devices - optional selectable text layer, can be disabled for low-memory devices +### Changed + - #38: moved declarations in js/ready.js one level lower to work around a bug in the Palemoon browser + - new version bitjs archive tools, fixes compatibility problems with some CBR files + +## 1.0.1 - 2017-03-19 +### Fixed + - #35: Internal Server Error: fixed path resolution so app works when NC/OC hosted in subdirectory + ## 1.0.0 - 2017-03-15 ### Added - Reader now supports CBR/CBZ ('comics') files diff --git a/files_reader/TODO b/files_reader/TODO index f60bd3e..b60fa73 100644 --- a/files_reader/TODO +++ b/files_reader/TODO @@ -3,3 +3,9 @@ - bookmarks - annotations - settings + + - rtl and ltr + - switch spread-page-width by key combo + + - test canvas size restriction + - toggle zoom via keyboard diff --git a/files_reader/js/ready.js b/files_reader/js/ready.js index 79099cf..7237189 100644 --- a/files_reader/js/ready.js +++ b/files_reader/js/ready.js @@ -100,51 +100,52 @@ document.onreadystatechange = function () { default: console.log(type + ' is not supported by Reader'); } - - // why is there no standard library function for this? - function getUrlParameter (param) { - var pattern = new RegExp('[?&]'+param+'((=([^&]*))|(?=(&|$)))','i'); - var m = window.location.search.match(pattern); - return m && ( typeof(m[3])==='undefined' ? '' : m[3] ); - } + } - // start epub.js renderer - function renderEpub(file, options) { + // why is there no standard library function for this? + function getUrlParameter (param) { + var pattern = new RegExp('[?&]'+param+'((=([^&]*))|(?=(&|$)))','i'); + var m = window.location.search.match(pattern); + return m && ( typeof(m[3])==='undefined' ? '' : m[3] ); + } - // some parameters... - EPUBJS.filePath = "vendor/epubjs/"; - EPUBJS.cssPath = "vendor/epubjs/css/"; - EPUBJS.basePath = $('.session').data('basepath'); + // start epub.js renderer + function renderEpub(file, options) { - /* device-specific boilerplate */ + // some parameters... + EPUBJS.filePath = "vendor/epubjs/"; + EPUBJS.cssPath = "vendor/epubjs/css/"; + EPUBJS.basePath = $('.session').data('basepath'); + + /* device-specific boilerplate */ // IE < 11 - if (navigator.userAgent.indexOf("MSIE") != -1) { - EPUBJS.Hooks.register("beforeChapterDisplay").wgxpath = function(callback, renderer){ - wgxpath.install(renderer.render.window); - if(callback) - callback(); - }; - wgxpath.install(window); - } - - var reader = ePubReader(file, options); + if (navigator.userAgent.indexOf("MSIE") != -1) { + EPUBJS.Hooks.register("beforeChapterDisplay").wgxpath = function(callback, renderer){ + wgxpath.install(renderer.render.window); + if(callback) + callback(); + }; + wgxpath.install(window); } - // start cbr.js renderer - function renderCbr(file, options) { - CBRJS.filePath = "vendor/cbrjs/"; - - var reader = cbReader(file, options); - } - - // start pdf.js renderer - function renderPdf(file, options) { - PDFJS.filePath = "vendor/pdfjs/"; - PDFJS.workerSrc = options.session.basePath + 'vendor/pdfjs/lib/pdf.worker.js'; - - var reader = pdfReader(file, options); - } + var reader = ePubReader(file, options); } + + // start cbr.js renderer + function renderCbr(file, options) { + CBRJS.filePath = "vendor/cbrjs/"; + + var reader = cbReader(file, options); + } + + // start pdf.js renderer + function renderPdf(file, options) { + PDFJS.filePath = "vendor/pdfjs/"; + PDFJS.workerSrc = options.session.basePath + 'vendor/pdfjs/lib/pdf.worker.js'; + + var reader = pdfReader(file, options); + } + }; diff --git a/files_reader/templates/.pdfreader.php.swp b/files_reader/templates/.pdfreader.php.swp deleted file mode 100644 index 8358127..0000000 Binary files a/files_reader/templates/.pdfreader.php.swp and /dev/null differ diff --git a/files_reader/templates/cbreader.php b/files_reader/templates/cbreader.php index c081cbb..7d8b69d 100644 --- a/files_reader/templates/cbreader.php +++ b/files_reader/templates/cbreader.php @@ -43,7 +43,7 @@ - + diff --git a/files_reader/templates/pdfreader.php b/files_reader/templates/pdfreader.php index 52ff3ba..f211454 100644 --- a/files_reader/templates/pdfreader.php +++ b/files_reader/templates/pdfreader.php @@ -284,6 +284,16 @@ +
+
+
+
+
+
+ + + + diff --git a/files_reader/vendor/icomoon/fonts/icomoon.eot b/files_reader/vendor/icomoon/fonts/icomoon.eot index b900d5c..c8e55ba 100644 Binary files a/files_reader/vendor/icomoon/fonts/icomoon.eot and b/files_reader/vendor/icomoon/fonts/icomoon.eot differ diff --git a/files_reader/vendor/icomoon/fonts/icomoon.svg b/files_reader/vendor/icomoon/fonts/icomoon.svg index 381c46a..e743a03 100644 --- a/files_reader/vendor/icomoon/fonts/icomoon.svg +++ b/files_reader/vendor/icomoon/fonts/icomoon.svg @@ -7,6 +7,10 @@ + + + + @@ -44,6 +48,8 @@ + + diff --git a/files_reader/vendor/icomoon/fonts/icomoon.ttf b/files_reader/vendor/icomoon/fonts/icomoon.ttf index d1633ef..39042dc 100644 Binary files a/files_reader/vendor/icomoon/fonts/icomoon.ttf and b/files_reader/vendor/icomoon/fonts/icomoon.ttf differ diff --git a/files_reader/vendor/icomoon/fonts/icomoon.woff b/files_reader/vendor/icomoon/fonts/icomoon.woff index 8cf9f65..d31ffc5 100644 Binary files a/files_reader/vendor/icomoon/fonts/icomoon.woff and b/files_reader/vendor/icomoon/fonts/icomoon.woff differ diff --git a/files_reader/vendor/icomoon/style.css b/files_reader/vendor/icomoon/style.css index c2ad7e0..b8a3251 100644 --- a/files_reader/vendor/icomoon/style.css +++ b/files_reader/vendor/icomoon/style.css @@ -1,10 +1,10 @@ @font-face { font-family: 'icomoon'; - src: url('fonts/icomoon.eot?jhgf4g'); - src: url('fonts/icomoon.eot?jhgf4g#iefix') format('embedded-opentype'), - url('fonts/icomoon.ttf?jhgf4g') format('truetype'), - url('fonts/icomoon.woff?jhgf4g') format('woff'), - url('fonts/icomoon.svg?jhgf4g#icomoon') format('svg'); + src: url('fonts/icomoon.eot?gvtfq1'); + src: url('fonts/icomoon.eot?gvtfq1#iefix') format('embedded-opentype'), + url('fonts/icomoon.ttf?gvtfq1') format('truetype'), + url('fonts/icomoon.woff?gvtfq1') format('woff'), + url('fonts/icomoon.svg?gvtfq1#icomoon') format('svg'); font-weight: normal; font-style: normal; } @@ -24,7 +24,7 @@ -moz-osx-font-smoothing: grayscale; /* slightly bigger icons */ - font-size: 1.2em; + font-size: 1.2em; } .icon-anchor:before { @@ -297,6 +297,24 @@ .icon-zoom_out_map:before { content: "\e56b"; } +.icon-rotate_0:before { + content: "\e039"; +} +.icon-rotate_90:before { + content: "\e03a"; +} +.icon-rotate_180:before { + content: "\e03b"; +} +.icon-rotate_270:before { + content: "\e03c"; +} +.icon-rotate_left:before { + content: "\e419"; +} +.icon-rotate_right:before { + content: "\e41a"; +} .icon-droplet:before { content: "\e90b"; } diff --git a/files_reader/vendor/pdfjs/.pdf.reader.js.swp b/files_reader/vendor/pdfjs/.pdf.reader.js.swp deleted file mode 100644 index bf2f21d..0000000 Binary files a/files_reader/vendor/pdfjs/.pdf.reader.js.swp and /dev/null differ diff --git a/files_reader/vendor/pdfjs/controllers/.controls_controller.js.swp b/files_reader/vendor/pdfjs/controllers/.controls_controller.js.swp deleted file mode 100644 index b5febc9..0000000 Binary files a/files_reader/vendor/pdfjs/controllers/.controls_controller.js.swp and /dev/null differ diff --git a/files_reader/vendor/pdfjs/controllers/.reader_controller.js.swp b/files_reader/vendor/pdfjs/controllers/.reader_controller.js.swp deleted file mode 100644 index ee76dc4..0000000 Binary files a/files_reader/vendor/pdfjs/controllers/.reader_controller.js.swp and /dev/null differ diff --git a/files_reader/vendor/pdfjs/controllers/controls_controller.js b/files_reader/vendor/pdfjs/controllers/controls_controller.js index 5fbc4c1..1bfe9c4 100644 --- a/files_reader/vendor/pdfjs/controllers/controls_controller.js +++ b/files_reader/vendor/pdfjs/controllers/controls_controller.js @@ -18,6 +18,11 @@ PDFJS.reader.ControlsController = function(book) { $zoom_icon = $("#zoom_icon"), $zoom_options = $("#zoom_options"), $zoom_option = $(".zoom_option"), + $rotate_icon = $("#rotate_icon"), + $rotate_options = $("#rotate_options"), + $rotate_option = $(".rotate_option"), + $rotate_left = $("#rotate_left"), + $rotate_right = $("#rotate_right"), $page_num = $("#page_num"); if (reader.isMobile() === true) { @@ -117,15 +122,18 @@ PDFJS.reader.ControlsController = function(book) { */ /* custom select, supports icons in drop-down list */ + // zooooooooooooooom $zoom_icon.on("click", function () { var offset = $(this).offset(); console.log(offset); + $zoom_options.css("opacity", 0); + $zoom_options.toggleClass("hide"); $zoom_options.css({ - 'left': parseInt(offset.left) + "px", + 'left': parseInt(offset.left - ($zoom_options.width() / 2)) + "px", 'top' : parseInt(parseInt(offset.top) + parseInt($zoom_icon.height())) + "px" }); - $zoom_options.toggleClass("hide"); + $zoom_options.css("opacity", ""); }); $zoom_icon[0].className=""; @@ -148,6 +156,50 @@ PDFJS.reader.ControlsController = function(book) { } $zoom_options.addClass("hide"); }); + + // rotate + $rotate_icon[0].className = ""; + $rotate_icon[0].className = "icon-rotate_" + settings.rotation; + + $rotate_icon.on("click", function () { + var offset = $(this).offset(); + $rotate_options.css("opacity", 0); + $rotate_options.toggleClass("hide"); + $rotate_options.css({ + 'left': parseInt(offset.left - ($rotate_options.width() / 2)) + "px", + 'top' : parseInt(parseInt(offset.top) + parseInt($rotate_icon.height())) + "px" + }); + + $rotate_options.css("opacity", ""); + }); + + $rotate_option.on("click", function () { + var $this = $(this); + reader.setRotation($this.data("value")); + $rotate_icon[0].className=""; + $rotate_icon[0].textContent = ""; + if ($this.data("class")) { + $rotate_icon.addClass($this.data("class")); + } else { + $rotate_icon[0].textContent = $this.data("text"); + } + $rotate_options.addClass("hide"); + }); + + $rotate_left.on("click", function () { + // add 360 to avoid negative rotation value + var rotation = (settings.rotation - 90 + 360) % 360; + reader.setRotation(rotation); + $rotate_icon[0].className = ""; + $rotate_icon[0].className = "icon-rotate_" + rotation; + }); + + $rotate_right.on("click", function () { + var rotation = (settings.rotation + 90) % 360; + reader.setRotation(rotation); + $rotate_icon[0].className = ""; + $rotate_icon[0].className = "icon-rotate_" + rotation; + }); /* end custom select */ var enterPageNum = function(e) { diff --git a/files_reader/vendor/pdfjs/controllers/reader_controller.js b/files_reader/vendor/pdfjs/controllers/reader_controller.js index 9895e50..1a2a2f4 100644 --- a/files_reader/vendor/pdfjs/controllers/reader_controller.js +++ b/files_reader/vendor/pdfjs/controllers/reader_controller.js @@ -11,7 +11,9 @@ PDFJS.reader.ReaderController = function(book) { $container = $("#container"), $fullscreen = $("#fullscreen"), $bookmark = $("#bookmark"), - $note = $("#note"); + $note = $("#note"), + $rotate_left = $("#rotate_left"), + $rotate_right = $("#rotate_right"); var reader = this, book = this.book, @@ -93,9 +95,6 @@ PDFJS.reader.ReaderController = function(book) { case 'bookmark': $bookmark.click(); break; - case 'reflow': - $sidebarReflow.click(); - break; case 'toggleTitlebar': reader.ControlsController.toggle(); break; @@ -114,6 +113,15 @@ PDFJS.reader.ReaderController = function(book) { case 'toggleDay': $use_custom_colors.click(); break; + case 'rotateLeft': + $rotate_left.click(); + break; + case 'rotateRight': + $rotate_right.click(); + break; + case 'toggleZoom': + // TODO + break; default: console.log("unsupported keyCode: " + e.keyCode); } diff --git a/files_reader/vendor/pdfjs/css/.main.css.swp b/files_reader/vendor/pdfjs/css/.main.css.swp deleted file mode 100644 index a769684..0000000 Binary files a/files_reader/vendor/pdfjs/css/.main.css.swp and /dev/null differ diff --git a/files_reader/vendor/pdfjs/css/main.css b/files_reader/vendor/pdfjs/css/main.css index 9ec1b45..5be07dc 100644 --- a/files_reader/vendor/pdfjs/css/main.css +++ b/files_reader/vendor/pdfjs/css/main.css @@ -142,33 +142,52 @@ body { right: 0; } -#zioom_icon { - text-align: center; - font-family: 'icomoon', 'Helvetica' !important; - font-size: 1.2em; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - border: none; +#zoom_icon, +#rotate_icon, +#rotate_left, +#rotate_right { + padding: 0; + border-radius: 0.2em; + border: 1px rgba(0,0,0,0) solid; + opacity: 0.5; + display: inline-block; + overflow: hidden; } -#zoom_icon { - padding: 0 0.5em; +#zoom_icon:hover, +#rotate_icon:hover, +#rotate_left:hover, +#rotate_right:hover { + opacity: .8; + border: 1px rgba(0,0,0,.2) solid; } -#zoom_options { +#zoom_icon:active, +#rotate_icon:active, +#rotate_left:active, +#rotate_right:active { + opacity: 1; + color: rgba(0,0,0,.6); + box-shadow: inset 0 0 6px rgba(155,155,155,.8); +} + +#zoom_options, +#rotate_options { font-family: "Lucida Console", "Monospace", "Courier New"; position: fixed; box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.4); background-color: white; font-size: 1em; - padding: 0.2em 0.5em; + padding: 0.5em; } -.zoom_option:hover { +.zoom_option, +.rotate_option { + padding: 0.25em; +} + +.zoom_option:hover, +.rotate_option:hover { background: black; color: white; } diff --git a/files_reader/vendor/pdfjs/pdf.reader.js b/files_reader/vendor/pdfjs/pdf.reader.js index 08624ca..8d37bba 100644 --- a/files_reader/vendor/pdfjs/pdf.reader.js +++ b/files_reader/vendor/pdfjs/pdf.reader.js @@ -21,37 +21,47 @@ PDFJS.Reader = function(bookPath, _options) { search = window.location.search; var TEXT_RENDER_DELAY = 200, // ms - PAGE_RENDER_DELAY = 200; // ms + PAGE_RENDER_DELAY = 200, // ms + MAX_CANVAS_PIXELS = 5242880, + CSS_UNITS = 96.0 / 72.0, + MIN_SCALE = 0.25, + MAX_SCALE = 10.0, + DEFAULT_SCALE = 1; this.settings = this.defaults(_options || {}, { bookPath: bookPath, textRenderDelay: TEXT_RENDER_DELAY, pageRenderDelay: PAGE_RENDER_DELAY, - textSelect: true, // true || false, add selectable text layer - doubleBuffer: true, // true || false, draw to off-screen canvas + canvasLimit: 0, + cssZoomOnly: false, // true || false, only zoom using CSS, render document at 100% size + textSelect: false, // true || false, add selectable text layer + doubleBuffer: true, // true || false, draw to off-screen canvas numPages: 0, currentPage: 1, - scale: 1, + scale: DEFAULT_SCALE, oddPageRight: true, // when true, odd pages render on the right side zoomLevel: window.outerWidth > window.outerHeight ? "spread" : "fit_page", // spread, fit_page, fit_width, percentage + rotation: 0, // 0 || 90 || 180 || 270 history: true, keyboard: { - 32: 'next', // space - 34: 'next', // page-down - 39: 'next', // cursor-right - 33: 'previous', // page-up - 37: 'previous', // cursor-left - 36: 'first', // home - 35: 'last', // end - 65: 'annotate', // a - 66: 'bookmark', // b - 82: 'reflow', // r - 83: 'toggleSidebar', // s - 84: 'toggleTitlebar', // t - 68: 'toggleDay', // d - 78: 'toggleNight', // n + 32: 'next', // space + 34: 'next', // page-down + 39: 'next', // cursor-right + 33: 'previous', // page-up + 37: 'previous', // cursor-left + 36: 'first', // home + 35: 'last', // end + 65: 'annotate', // a + 66: 'bookmark', // b + 76: 'rotateLeft', // l + 82: 'rotateRight', // r + 90: 'toggleZoom', // z + 83: 'toggleSidebar',// s + 84: 'toggleTitlebar', // t + 68: 'toggleDay', // d + 78: 'toggleNight', // n 70: 'toggleFullscreen', // f - 27: 'closeSidebar' // esc + 27: 'closeSidebar' // esc }, nightMode: false, dayMode: false, @@ -126,6 +136,11 @@ PDFJS.Reader = function(bookPath, _options) { this.sideBarOpen = false; this.viewerResized = false; this.pageNumPending = null; + this.output_scaled = false; + this.restricted_scaling = false; + this.CSS_UNITS = CSS_UNITS; + this.MIN_SCALE = MIN_SCALE; + this.MAX_SCALE = MAX_SCALE; PDFJS.getDocument(reader.settings.bookPath).then(function(_book) { reader.book = book = _book; @@ -167,6 +182,15 @@ PDFJS.Reader.prototype.setZoom = function(zoom) { reader.queuePage(page); }; +PDFJS.Reader.prototype.setRotation = function (rotation) { + + var reader = this, + page = reader.settings.currentPage; + + reader.settings.rotation = rotation; + reader.queuePage(page); +}; + PDFJS.Reader.prototype.cancelRender = function (index) { var reader = this, @@ -201,18 +225,24 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) { outputscale, max_view_width, max_view_height, + page_width, + page_height, scale_width, scale_height, view_aspect, document_aspect, scale, + page_rotation, + rotation, + initial_viewport, viewport, zoom, fraction, offset, renderContext, renderTask, - resourcelst; + resourcelst, + swap_orientation; max_view_width = window.innerWidth; max_view_height = window.innerHeight; @@ -232,6 +262,8 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) { index = 0; // hide second canvas reader.resourcelst[1].canvas.style.display = "none"; + // clear text layer + reader.resourcelst[1].textdiv.innerHTML = ""; // don't try to render non-existing page 0 (which is used // to indicate the empty left page when oddPageRight === true) @@ -267,11 +299,16 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) { this.book.getPage(pageNum).then(function(page) { //console.log(page); - var page_width = page.pageInfo.view[2]; - var page_height = page.pageInfo.view[3]; + page_rotation = page.rotate; + rotation = (page_rotation + reader.settings.rotation) % 360; + //initial_viewport = page.getViewport({scale: 1, rotation: rotation}); + initial_viewport = page.getViewport(1, rotation); + page_width = initial_viewport.width; + page_height = initial_viewport.height; + document_aspect = parseFloat(page_width / page_height); view_aspect = parseFloat(max_view_width / max_view_height); - + scale_height = parseFloat(max_view_height / page_height); scale_width = parseFloat(max_view_width / page_width); @@ -284,9 +321,10 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) { + " v_a: " + view_aspect + " s_w: " + scale_width + " s_h: " + scale_height + + " p_r: " + page_rotation + + " r: " + rotation + " o: " + outputscale); - console.log("fraction: "); - console.log(fraction); + console.log("fraction: ", fraction); */ switch (reader.settings.zoomLevel) { @@ -330,19 +368,45 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) { default: $viewer.removeClass("flex"); - scale = parseFloat(reader.settings.zoomLevel); + scale = parseFloat(reader.settings.zoomLevel * reader.CSS_UNITS); canvas.width = reader.roundToDivide(parseInt(page_width * scale * outputscale), fraction[0]); ; canvas.height = reader.roundToDivide(parseInt(page_height * scale * outputscale), fraction[0]); break; } - //console.log(canvas.width + " " + canvas.height); + viewport = initial_viewport.clone({scale: scale, rotation: rotation}); + + if (reader.settings.cssZoomOnly) { + console.log("css zoom only"); + var actualSizeViewport = viewport.clone({scale: 1}); + canvas.width = actualSizeViewport.width; + canvas.height = actualSizeViewport.height; + outputscale = actualSizeViewport.width / viewport.width; + reader.output_scaled = true; + } + + if (reader.settings.canvasLimit > 0) { + console.log("canvas is limited"); + var pixelsInViewport = viewport.width * viewport.height; + var maxscale = + Math.sqrt(reader.settings.canvasLimit / pixelsInViewport); + if (outputscale > maxscale) { + console.log("outputscale: " + outputscale, "maxscale: " + maxscale); + outputscale = maxscale; + reader.output_scaled = true; + reader.restricted_scaling = true; + } else { + reader.restricted_scaling = false; + } + } + + //console.log("outputscale: " + outputscale); + //console.log("canvas w x h: " + canvas.width + " x " + canvas.height); transform = (outputscale === 1) ? null : [outputscale, 0, 0, outputscale, 0, 0]; - viewport = page.getViewport(scale); if (outputscale !== 1) { canvas.style.width = reader.roundToDivide(viewport.width, fraction[1]) + 'px'; @@ -361,7 +425,7 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) { top: offset.top, left: offset.left }); - page.getTextContent().then(function (textContent) { + page.getTextContent({ normalizeWhitespace: true }).then(function (textContent) { resourcelst.textLayer = textLayer = new PDFJS.Reader.TextLayerController({ textLayerDiv: textdiv, pageIdx: pageNum - 1, @@ -413,39 +477,18 @@ PDFJS.Reader.prototype.renderPage = function(pageNum) { }); } else { - // clear canvas, use maximum size + // clear canvas (by resizing it), use maximum size + canvas.width = 0; + canvas.height = 0; canvas.width = reader.roundToDivide(max_view_width * outputscale, fraction[0]); canvas.height = reader.roundToDivide(max_view_height * outputscale, fraction[0]); if (outputscale !== 1) { canvas.style.width = reader.roundToDivide(max_view_width, fraction[1]) + 'px'; canvas.style.height = reader.roundToDivide(max_view_height, fraction[1]) + 'px'; } - ctx.clearRect(0, 0, canvas.width, canvas.height); + // resizing clears canvas so this is not needed... + //ctx.clearRect(0, 0, canvas.width, canvas.height); } - - /* - if (index === 0) { - - if (pageNum > 0) { - $page_num.textContent = pageNum.toString(); - } - reader.settings.currentPage = pageNum; - - } else { - - if (pageNum === 1) { - - $page_num.textContent = pageNum.toString(); - - } else if (pageNum <= reader.settings.numPages) { - - var text = $page_num.textContent; - text += "-" + pageNum.toString(); - $page_num.textContent = text; - - } - } - */ }; PDFJS.Reader.prototype.queuePage = function(page) { @@ -619,5 +662,15 @@ PDFJS.Reader.prototype.approximateFraction = function (x) { }; PDFJS.Reader.prototype.isMobile = function () { - return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); + + var reader = this; + + var isMobile = (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1); + + if (isMobile) { + reader.isMobile = true; + reader.canvasLimit = reader.settings.canvasLimit; + } + + return isMobile; };