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;
};