From 3aa2f5da8403e721d7b19ee8b905707805d6a77a Mon Sep 17 00:00:00 2001 From: Bala Clark Date: Sun, 26 Dec 2010 19:15:43 +0100 Subject: [PATCH] added support for double page spreads --- lib/ComicBook.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/ComicBook.js b/lib/ComicBook.js index 6724b0c..e5a7a70 100644 --- a/lib/ComicBook.js +++ b/lib/ComicBook.js @@ -62,6 +62,7 @@ function ComicBook(id, srcs, opts) { var buffer = 1; // image preload buffer level var loaded = []; // the images that have been loaded so far var scale = 1; // page zoom scale, 1 = 100% + var is_double_page_spread = false; // the current page, can pass a default as a url hash var pointer = (parseInt(location.hash.substring(1),10) - 1) || 0; @@ -218,7 +219,11 @@ function ComicBook(id, srcs, opts) { // reset the canvas to stop duplicate pages showing canvas.width = 0; canvas.height = 0; - + + // show double page spreads on a single page + is_double_page_spread = ((page.width > page.height || page2.width > page2.height) && options.displayMode === "double"); + if (is_double_page_spread) { options.displayMode = "single"; } + if (options.displayMode === "double") { // for double page spreads, factor in the width of both pages @@ -238,7 +243,7 @@ function ComicBook(id, srcs, opts) { case "fitWidth": document.body.style.overflowX = "hidden"; - zoom_scale = (window.innerWidth > width) ? ((window.innerWidth - width) / window.innerWidth) + 1 // scale up if the window is wider than the page + zoom_scale = (window.innerWidth > width) ? ((window.innerWidth - width) / window.innerWidth) + 1 // scale up if the window is wider than the page : window.innerWidth / width; // scale down if the window is narrower than the page break; @@ -290,6 +295,9 @@ function ComicBook(id, srcs, opts) { $.each(options.enhance, function(action, options) { ComicBook.prototype.enhance[action](options); }); + + // revert page mode back to double if it was auto switched for a double page spread + if (is_double_page_spread) { options.displayMode = "double"; } }; /** @@ -299,7 +307,7 @@ function ComicBook(id, srcs, opts) { */ ComicBook.prototype.drawNextPage = function () { if (pointer + 1 < pages.length) { - pointer += (options.displayMode === "single") ? 1 : 2; + pointer += (options.displayMode === "single" || is_double_page_spread) ? 1 : 2; this.drawPage(); } }; @@ -310,8 +318,11 @@ function ComicBook(id, srcs, opts) { * @see #drawPage */ ComicBook.prototype.drawPrevPage = function () { + + is_double_page_spread = (pages[pointer-1].width > pages[pointer-1].height); // need to run double page check again here as we are going backwards + if (pointer > 0) { - pointer -= (options.displayMode === "single") ? 1 : 2; + pointer -= (options.displayMode === "single" || is_double_page_spread) ? 1 : 2; this.drawPage(); } };