X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=BookReader%2FBookReader.js;h=4b3e686c09fbeb55ffb221d28152aa7a9add8525;hb=7b6cc74f09de8011a17f42c952cb3beef54fc812;hp=161f8c4158baab3744e7b62226cdd8c98b7060af;hpb=df3799f1f94a4f8d1d772fa71ee5e5dd771b7033;p=bookreader.git diff --git a/BookReader/BookReader.js b/BookReader/BookReader.js index 161f8c4..4b3e686 100644 --- a/BookReader/BookReader.js +++ b/BookReader/BookReader.js @@ -18,7 +18,6 @@ This file is part of BookReader. The BookReader source is hosted at http://github.com/openlibrary/bookreader/ - archive.org cvs $Revision: 1.2 $ $Date: 2009-06-22 18:42:51 $ */ // BookReader() @@ -80,9 +79,8 @@ function BookReader() { this.lastDisplayableIndex2up = null; - // We link to index.php to avoid redirect which breaks back button // Should be overriden (before init) by custom implmentations. - this.logoURL = 'http://openlibrary.org'; + this.logoURL = 'http://www.archive.org'; // Base URL for UI images - should be overriden (before init) by // custom implementations. @@ -119,7 +117,7 @@ function BookReader() { this.twoPage = { coverInternalPadding: 0, // Width of cover coverExternalPadding: 0, // Padding outside of cover - bookSpineDivWidth: 0, // Width of book spine $$$ consider sizing based on book length + bookSpineDivWidth: 64, // Width of book spine $$$ consider sizing based on book length autofit: 'auto' }; @@ -145,6 +143,7 @@ function BookReader() { return this; }; +(function ($) { // init() //______________________________________________________________________________ BookReader.prototype.init = function() { @@ -153,7 +152,16 @@ BookReader.prototype.init = function() { this.pageScale = this.reduce; // preserve current reduce // Find start index and mode if set in location hash - var params = this.paramsFromFragment(window.location.hash); + var params = {}; + if (window.location.hash) { + // params explicitly set in URL + params = this.paramsFromFragment(window.location.hash); + } else { + // params not explicitly set, use defaults if we have them + if ('defaults' in this) { + params = this.paramsFromFragment(this.defaults); + } + } // Sanitize/process parameters @@ -241,6 +249,21 @@ BookReader.prototype.init = function() { } }); + if (this.protected) { + $('.BRpagediv1up').live('contextmenu dragstart', this, function(e) { + return false; + }); + + $('.BRpageimage').live('contextmenu dragstart', this, function(e) { + return false; + }); + + $('.BRpagedivthumb').live('contextmenu dragstart', this, function(e) { + return false; + }); + + } + $('.BRpagediv1up').bind('mousedown', this, function(e) { // $$$ the purpose of this is to disable selection of the image (makes it turn blue) // but this also interferes with right-click. See https://bugs.edge.launchpad.net/gnubook/+bug/362626 @@ -790,9 +813,17 @@ BookReader.prototype.lazyLoadImage = function (dummyImage) { // Remove class so we no longer count as loading $(this).removeClass('BRlazyloading'); }) - .attr( { width: $(dummyImage).width(), - height: $(dummyImage).height(), - src: $(dummyImage).data('srcURL') + + //the width set with .attr is ignored by Internet Explorer, causing it to show the image at its original size + //but with this one line of css, even IE shows the image at the proper size + .css({ + 'width': $(dummyImage).width()+'px', + 'height': $(dummyImage).height()+'px' + }) + .attr({ + 'width': $(dummyImage).width(), + 'height': $(dummyImage).height(), + 'src': $(dummyImage).data('srcURL') }); // replace with the new img @@ -1224,7 +1255,21 @@ BookReader.prototype._reduceSort = function(a, b) { // Attempts to jump to page. Returns true if page could be found, false otherwise. BookReader.prototype.jumpToPage = function(pageNum) { - var pageIndex = this.getPageIndex(pageNum); + var pageIndex; + + // Check for special "leaf" + var re = new RegExp('^leaf(\\d+)'); + leafMatch = re.exec(pageNum); + if (leafMatch) { + console.log(leafMatch[1]); + pageIndex = this.leafNumToIndex(parseInt(leafMatch[1],10)); + if (pageIndex === null) { + pageIndex = undefined; // to match return type of getPageIndex + } + + } else { + pageIndex = this.getPageIndex(pageNum); + } if ('undefined' != typeof(pageIndex)) { var leafTop = 0; @@ -1523,10 +1568,10 @@ BookReader.prototype.prepareTwoPageView = function(centerPercentageX, centerPerc }).appendTo('#BRtwopageview'); div = document.createElement('div'); - $(div).attr('id', 'BRbookspine').css({ + $(div).attr('id', 'BRgutter').css({ width: this.twoPage.bookSpineDivWidth+'px', height: this.twoPage.bookSpineDivHeight+'px', - left: this.twoPage.bookSpineDivLeft+'px', + left: (this.twoPage.gutter - this.twoPage.bookSpineDivWidth*0.5)+'px', top: this.twoPage.bookSpineDivTop+'px' }).appendTo('#BRtwopageview'); @@ -2191,10 +2236,16 @@ BookReader.prototype.flipLeftToRight = function(newIndexL, newIndexR) { //console.log(' and now leafEdgeTmp to left: gutter+newWidthR ' + (gutter + newWidthR)); $(self.leafEdgeTmp).animate({left: gutter+newWidthR+'px'}, self.flipSpeed, 'easeOutSine'); + + $('#BRgutter').css({left: (gutter - self.twoPage.bookSpineDivWidth*0.5)+'px'}); //console.log(' animating newIndexR ' + newIndexR + ' to ' + newWidthR + ' from ' + $(self.prefetchedImgs[newIndexR]).width()); $(self.prefetchedImgs[newIndexR]).animate({width: newWidthR+'px'}, self.flipSpeed, 'easeOutSine', function() { $(self.prefetchedImgs[newIndexL]).css('zIndex', 2); + + //jquery adds display:block to the element style, which interferes with our print css + $(self.prefetchedImgs[newIndexL]).css('display', ''); + $(self.prefetchedImgs[newIndexR]).css('display', ''); $(self.leafEdgeR).css({ // Moves the right leaf edge @@ -2212,7 +2263,7 @@ BookReader.prototype.flipLeftToRight = function(newIndexL, newIndexR) { $(self.twoPage.coverDiv).css({ width: self.twoPageCoverWidth(newWidthL+newWidthR)+'px', left: gutter-newWidthL-newLeafEdgeWidthL-self.twoPage.coverInternalPadding+'px' - }); + }); $(self.leafEdgeTmp).remove(); self.leafEdgeTmp = null; @@ -2339,9 +2390,14 @@ BookReader.prototype.flipRightToLeft = function(newIndexL, newIndexR) { $(this.leafEdgeTmp).animate({left: gutter}, speed, 'easeInSine'); $(this.prefetchedImgs[this.twoPage.currentIndexR]).animate({width: '0px'}, speed, 'easeInSine', function() { + $('#BRgutter').css({left: (gutter - self.twoPage.bookSpineDivWidth*0.5)+'px'}); $(self.leafEdgeTmp).animate({left: gutter-newWidthL-leafEdgeTmpW+'px'}, speed, 'easeOutSine'); $(self.prefetchedImgs[newIndexL]).animate({width: newWidthL+'px'}, speed, 'easeOutSine', function() { $(self.prefetchedImgs[newIndexR]).css('zIndex', 2); + + //jquery adds display:block to the element style, which interferes with our print css + $(self.prefetchedImgs[newIndexL]).css('display', ''); + $(self.prefetchedImgs[newIndexR]).css('display', ''); $(self.leafEdgeL).css({ width: newLeafEdgeWidthL+'px', @@ -2352,8 +2408,8 @@ BookReader.prototype.flipRightToLeft = function(newIndexL, newIndexR) { $(self.twoPage.coverDiv).css({ width: self.twoPageCoverWidth(newWidthL+newWidthR)+'px', left: gutter - newWidthL - newLeafEdgeWidthL - self.twoPage.coverInternalPadding + 'px' - }); - + }); + $(self.leafEdgeTmp).remove(); self.leafEdgeTmp = null; @@ -2391,8 +2447,11 @@ BookReader.prototype.setMouseHandlers2UP = function() { this.setClickHandler2UP( this.prefetchedImgs[this.twoPage.currentIndexL], { self: this }, function(e) { - if (e.button == 2) { + if (e.which == 3) { // right click + if (e.data.self.protected) { + return false; + } return true; } @@ -2407,8 +2466,11 @@ BookReader.prototype.setMouseHandlers2UP = function() { this.setClickHandler2UP( this.prefetchedImgs[this.twoPage.currentIndexR], { self: this }, function(e) { - if (e.button == 2) { + if (e.which == 3) { // right click + if (e.data.self.protected) { + return false; + } return true; } @@ -2480,14 +2542,13 @@ BookReader.prototype.prepareFlipLeftToRight = function(prevL, prevR) { //console.log(' prevL.left: ' + (gutter - scaledW) + 'px'); //console.log(' changing prevL ' + prevL + ' to left: ' + (gutter-scaledW) + ' width: ' + scaledW); - leftCSS = { + var leftCSS = { position: 'absolute', left: gutter-scaledW+'px', right: '', // clear right property top: top+'px', height: this.twoPage.height, width: scaledW+'px', - borderRight: '1px solid black', // XXXmang check zIndex: 1 } @@ -2497,13 +2558,12 @@ BookReader.prototype.prepareFlipLeftToRight = function(prevL, prevR) { //console.log(' changing prevR ' + prevR + ' to left: ' + gutter + ' width: 0'); - rightCSS = { + var rightCSS = { position: 'absolute', left: gutter+'px', right: '', top: top+'px', height: this.twoPage.height, - borderLeft: '1px solid black', // XXXmang check width: '0', zIndex: 2 } @@ -2691,12 +2751,18 @@ BookReader.prototype.BRSearchCallback = function(results) { //console.log(br.searchResults); if (0 == results.matches.length) { - $(br.popup).text('No matches were found.'); + var errStr = 'No matches were found.'; + var timeout = 1000; + if (false === results.indexed) { + errStr = "
This book hasn't been indexed for searching yet. We've just started indexing it, so search should be available soon. Please try again later. Thanks!
"; + timeout = 5000; + } + $(br.popup).html(errStr); setTimeout(function(){ $(br.popup).fadeOut('slow', function() { br.removeProgressPopup(); }) - },1000); + },timeout); return; } @@ -3300,7 +3366,6 @@ BookReader.prototype.initNavbar = function() { //append icon to handle var handleHelper = $('#BRpager .ui-slider-handle') - // $$$mang update logic for setting the page number label -- use page numbers if available .append('