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()
return this;
};
+(function ($) {
// init()
//______________________________________________________________________________
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
// 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
// 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;
//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
$(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',
//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('<div id="pagenum"><span class="currentpage"></span></div>');
//.wrap('<div class="ui-handle-helper-parent"></div>').parent(); // XXXmang is this used for hiding the tooltip?
var pageNum = this.getPageNum(index);
var pageStr;
if (pageNum[0] == 'n') { // funny index
- pageStr = index + ' / ' + this.numLeafs;
+ pageStr = index + 1 + ' / ' + this.numLeafs; // Accessible index starts at 0 (alas) so we add 1 to make human
} else {
pageStr = 'Page ' + pageNum;
}
this.jumpToPage(params.page);
}
}
-
+
// $$$ process /region
// $$$ process /highlight
}
this.showProgressPopup('Loading audio...');
- ///// whileloading: broken on safari
- ///// onload fires on safari, but *after* the sound starts playing..
+ ///// Many soundManger2 callbacks are broken when using HTML5 audio.
+ ///// whileloading: broken on safari, worked in FF4, but broken on FireFox 5
+ ///// onload: fires on safari, but *after* the sound starts playing, and does not fire in FF or IE9
+ ///// onbufferchange: fires in FF5 using HTML5 audio, but not in safari using flash audio
+ ///// whileplaying: fires everywhere
this.ttsPosition = -1;
var snd = soundManager.createSound({
id: 'chunk'+this.ttsIndex+'-0',
- //url: 'http://home.us.archive.org/~rkumar/arctic.ogg',
url: 'http://'+this.server+'/BookReader/BookReaderGetTTS.php?string=' + escape(data[0][0]) + '&format=.'+this.ttsFormat, //the .ogg is to trick SoundManager2 to use the HTML5 audio player
- whileloading: function(){if (this.bytesLoaded == this.bytesTotal) this.br.removeProgressPopup();}, //onload never fires in FF...
- onload: function(){this.br.removeProgressPopup();} //whileloading never fires in safari...
+ onload: function(){this.br.removeProgressPopup();}, //fires in safari...
+ onbufferchange: function(){if (false == this.isBuffering) this.br.removeProgressPopup();} //fires in FF and IE9
});
snd.br = this;
snd.load();
}
}
}
+})(jQuery);