'
+ '
' // Page turn buttons
+ + ' '
+ + ' '
+ + ' '
+ + ' '
+ + ' '
+ + ' '
+ ' '
+ ' '
+ '
'
@@ -3342,6 +3280,7 @@ BookReader.prototype.initNavbar = function() {
+ '
'
+ '
'
+ ''
+ + ''
+ var marker = $('
'
+ queryString + '' + uiStringPage + ' ' + pageNumber + '
')
.data({'self': this, 'pageIndex': pageIndex })
.appendTo('#BRnavline').bt({
@@ -3535,6 +3477,8 @@ BookReader.prototype.addSearchResult = function(queryString, pageIndex) {
.bind('click', function() {
$(this).data('self').jumpToIndex($(this).data('pageIndex'));
});
+
+ $(marker).animate({top:'-25px'}, 'slow');
}
@@ -3558,8 +3502,7 @@ BookReader.prototype.addChapter = function(chapterTitle, pageNumber, pageIndex)
closeWhenOthersOpen: true,
cssStyles: {
padding: '12px 14px',
- //backgroundColor: '#000',
- backgroundColor: '#444', // To set it off slightly from the chapter marker
+ backgroundColor: '#000',
border: '4px solid #e2dcc5',
//borderBottom: 'none',
fontFamily: '"Arial", sans-serif',
@@ -3668,7 +3611,7 @@ BookReader.prototype.initToolbar = function(mode, ui) {
"
"
-
+ /*
+ "
"
+ "
"
+ " "
@@ -3688,7 +3631,9 @@ BookReader.prototype.initToolbar = function(mode, ui) {
+ "
"
+ "
"
+ "
"
- + "
");
+ + "
"
+ */
+ );
this.updateToolbarZoom(this.reduce); // Pretty format
@@ -3701,8 +3646,9 @@ BookReader.prototype.initToolbar = function(mode, ui) {
// We build in mode 2
jToolbar.append();
-
- this.bindToolbarNavHandlers(jToolbar);
+
+ // Navigation handlers will be bound after all UI is in place -- makes moving icons between
+ // the toolbar and nav bar easier
// Setup tooltips -- later we could load these from a file for i18n
var titles = { '.logo': 'Go to Archive.org',
@@ -3784,24 +3730,67 @@ BookReader.prototype.switchToolbarMode = function(mode) {
}
}
-// bindToolbarNavHandlers
+// updateToolbarZoom(reduce)
+//______________________________________________________________________________
+// Update the displayed zoom factor based on reduction factor
+BookReader.prototype.updateToolbarZoom = function(reduce) {
+ var value;
+ var autofit = null;
+
+ // $$$ TODO preserve zoom/fit for each mode
+ if (this.mode == this.constMode2up) {
+ autofit = this.twoPage.autofit;
+ } else {
+ autofit = this.onePage.autofit;
+ }
+
+ if (autofit) {
+ value = autofit.slice(0,1).toUpperCase() + autofit.slice(1);
+ } else {
+ value = (100 / reduce).toFixed(2);
+ // Strip trailing zeroes and decimal if all zeroes
+ value = value.replace(/0+$/,'');
+ value = value.replace(/\.$/,'');
+ value += '%';
+ }
+ $('#BRzoom').text(value);
+}
+
+// bindNavigationHandlers
//______________________________________________________________________________
-// Binds the toolbar handlers
-BookReader.prototype.bindToolbarNavHandlers = function(jToolbar) {
+// Bind navigation handlers
+BookReader.prototype.bindNavigationHandlers = function() {
var self = this; // closure
+ jIcons = $('.BRicon');
+
+ jIcons.filter('.onepg').bind('click', function(e) {
+ self.switchMode(self.constMode1up);
+ });
+
+ jIcons.filter('.twopg').bind('click', function(e) {
+ self.switchMode(self.constMode2up);
+ });
- jToolbar.find('.book_left').click(function(e) {
+ jIcons.filter('.thumb').bind('click', function(e) {
+ self.switchMode(self.constModeThumb);
+ });
+
+ jIcons.filter('.fit').bind('fit', function(e) {
+ // XXXmang implement autofit zoom
+ });
+
+ jIcons.filter('.book_left').click(function(e) {
self.left();
return false;
});
- jToolbar.find('.book_right').click(function(e) {
+ jIcons.filter('.book_right').click(function(e) {
self.right();
return false;
});
- jToolbar.find('.book_up').bind('click', function(e) {
+ jIcons.filter('.book_up').bind('click', function(e) {
if ($.inArray(self.mode, [self.constMode1up, self.constModeThumb]) >= 0) {
self.scrollUp();
} else {
@@ -3810,7 +3799,7 @@ BookReader.prototype.bindToolbarNavHandlers = function(jToolbar) {
return false;
});
- jToolbar.find('.book_down').bind('click', function(e) {
+ jIcons.filter('.book_down').bind('click', function(e) {
if ($.inArray(self.mode, [self.constMode1up, self.constModeThumb]) >= 0) {
self.scrollDown();
} else {
@@ -3819,103 +3808,75 @@ BookReader.prototype.bindToolbarNavHandlers = function(jToolbar) {
return false;
});
- jToolbar.find('.print').click(function(e) {
+ jIcons.filter('.print').click(function(e) {
self.printPage();
return false;
});
- jToolbar.find('.embed').click(function(e) {
+ jIcons.filter('.embed').click(function(e) {
self.showEmbedCode();
return false;
});
- jToolbar.find('.bookmark').click(function(e) {
+ jIcons.filter('.bookmark').click(function(e) {
self.showBookmarkCode();
return false;
});
- jToolbar.find('.play').click(function(e) {
+ jIcons.filter('.play').click(function(e) {
self.autoToggle();
return false;
});
- jToolbar.find('.pause').click(function(e) {
+ jIcons.filter('.pause').click(function(e) {
self.autoToggle();
return false;
});
- jToolbar.find('.book_top').click(function(e) {
+ jIcons.filter('.book_top').click(function(e) {
self.first();
return false;
});
- jToolbar.find('.book_bottom').click(function(e) {
+ jIcons.filter('.book_bottom').click(function(e) {
self.last();
return false;
});
- jToolbar.find('.book_leftmost').click(function(e) {
+ jIcons.filter('.book_leftmost').click(function(e) {
self.leftmost();
return false;
});
- jToolbar.find('.book_rightmost').click(function(e) {
+ jIcons.filter('.book_rightmost').click(function(e) {
self.rightmost();
return false;
});
- jToolbar.find('.read').click(function(e) {
+ jIcons.filter('.read').click(function(e) {
self.ttsToggle();
return false;
});
- // $$$mang cleanup
- $('#BRzoomer .zoom_in').bind('click', function() {
+ jIcons.filter('.zoom_in').bind('click', function() {
+ self.ttsStop();
self.zoom(1);
return false;
});
- $('#BRzoomer .zoom_out').bind('click', function() {
+ jIcons.filter('.zoom_out').bind('click', function() {
+ self.ttsStop();
self.zoom(-1);
return false;
});
- $('#booksearch').bind('submit', function() {
- self.searchNew($('#textSrch').val());
- });
-
-}
-
-// updateToolbarZoom(reduce)
-//______________________________________________________________________________
-// Update the displayed zoom factor based on reduction factor
-BookReader.prototype.updateToolbarZoom = function(reduce) {
- var value;
- var autofit = null;
-
- // $$$ TODO preserve zoom/fit for each mode
- if (this.mode == this.constMode2up) {
- autofit = this.twoPage.autofit;
- } else {
- autofit = this.onePage.autofit;
- }
-
- if (autofit) {
- value = autofit.slice(0,1).toUpperCase() + autofit.slice(1);
- } else {
- value = (100 / reduce).toFixed(2);
- // Strip trailing zeroes and decimal if all zeroes
- value = value.replace(/0+$/,'');
- value = value.replace(/\.$/,'');
- value += '%';
- }
- $('#BRzoom').text(value);
-}
+ // XXX fix integration
+ // XXX Mobile safari was not picking up this handler, so
+ // I explictly set the form action in initToolbar()
+ // $('#booksearch').bind('submit', function() {
+ // self.search($('#textSrch').val());
+ // });
-// bindNavigationHandlers
-//______________________________________________________________________________
-// Bind navigation handlers
-BookReader.prototype.bindNavigationHandlers = function() {
$('#BookReader').die('mousemove.navigation').live('mousemove.navigation',
{ 'br': this },
this.navigationMousemoveHandler
@@ -3968,7 +3929,7 @@ BookReader.prototype.hideNavigation = function() {
// $$$ don't hardcode height
$('#BRtoolbar').animate({top:-60});
$('#BRnav').animate({bottom:-60});
- $('#BRzoomer').animate({right:-26});
+ //$('#BRzoomer').animate({right:-26});
}
}
@@ -3980,7 +3941,7 @@ BookReader.prototype.showNavigation = function() {
if (!this.navigationIsVisible()) {
$('#BRtoolbar').animate({top:0});
$('#BRnav').animate({bottom:0});
- $('#BRzoomer').animate({right:0});
+ //$('#BRzoomer').animate({right:0});
}
}
@@ -4332,19 +4293,31 @@ BookReader.prototype.canSwitchToMode = function(mode) {
// searchHighlightVisible
//________
// Returns true if a search highlight is currently being displayed
-BookReader.prototype.searchHighlightVisible = function() {
- if (this.searchResults == null) return false;
+BookReader.prototype.searchHighlightVisible = function() {
+ var results = this.searchResults;
+ if (null == results) return false;
if (this.constMode2up == this.mode) {
- if (this.searchResults[this.twoPage.currentIndexL]
- || this.searchResults[this.twoPage.currentIndexR]) {
- return true;
- }
- } else { // 1up
- if (this.searchResults[this.currentIndex()]) {
- return true;
+ var visiblePages = Array(this.twoPage.currentIndexL, this.twoPage.currentIndexR);
+ } else if (this.constMode1up == this.mode) {
+ var visiblePages = Array();
+ visiblePages[0] = this.currentIndex();
+ } else {
+ return false;
+ }
+
+ var i, j;
+ for (i=0; i
= 0) {
+ return true;
+ }
}
}
+
return false;
}
@@ -4372,7 +4345,7 @@ BookReader.prototype._getPageHeight= function(index) {
// Returns the page URI or transparent image if out of range
BookReader.prototype._getPageURI = function(index, reduce, rotate) {
if (index < 0 || index >= this.numLeafs) { // Synthesize page
- return this.imagesBaseURL + "/transparent.png";
+ return this.imagesBaseURL + "transparent.png";
}
if ('undefined' == typeof(reduce)) {
@@ -4407,6 +4380,7 @@ BookReader.prototype.gotOpenLibraryRecord = function(self, olObject) {
// $$$ could refactor this so that 'this' is available
if (olObject) {
if (olObject['table_of_contents']) {
+ // XXX check here that TOC is valid
self.updateTOC(olObject['table_of_contents']);
}
}
@@ -4468,7 +4442,7 @@ BookReader.util = {
BookReader.prototype.ttsToggle = function () {
if (false == this.ttsPlaying) {
this.ttsPlaying = true;
- this.showProgressPopup();
+ this.showProgressPopup('Loading audio...');
if(soundManager.supported()) {
this.ttsStart();
} else {
@@ -4541,7 +4515,7 @@ BookReader.prototype.ttsStartCB = function (data) {
return;
}
- this.showProgressPopup();
+ this.showProgressPopup('Loading audio...');
///// whileloading: broken on safari
///// onload fires on safari, but *after* the sound starts playing..
@@ -4561,21 +4535,30 @@ BookReader.prototype.ttsStartCB = function (data) {
// showProgressPopup
//______________________________________________________________________________
-BookReader.prototype.showProgressPopup = function() {
- if (soundManager.debugMode) console.log('showProgressPopup index='+this.ttsIndex+' pos='+this.ttsPosition);
+BookReader.prototype.showProgressPopup = function(msg) {
if (this.popup) return;
this.popup = document.createElement("div");
$(this.popup).css({
- top: $('#BRtoolbar').height() + 'px',
- left: $('#BookReader').width()-220 + 'px',
- width: '220px',
- height: '20px',
- }).attr('className', 'BRprogresspopup').appendTo('#BookReader');
+ top: ($('#BookReader').height()*0.5-100) + 'px',
+ left: ($('#BookReader').width()-300)*0.5 + 'px',
+ width: '300px',
+ border: '2px solid black'
+ }).attr('className', 'BRprogresspopup');
- htmlStr = ' ';
+ var bar = document.createElement("div");
+ $(bar).css({
+ height: '20px'
+ }).attr('className', 'BRprogressbar');
+ $(this.popup).append(bar);
- this.popup.innerHTML = htmlStr;
+ if (msg) {
+ var msgdiv = document.createElement("div");
+ msgdiv.innerHTML = msg;
+ $(this.popup).append(msgdiv);
+ }
+
+ $(this.popup).appendTo('#BookReader');
}
// removeProgressPopup
@@ -4874,3 +4857,41 @@ BookReader.prototype.ttsStartPolling = function () {
self.ttsNextChunk();
},500);
}
+//FADING, ETC.
+ function changeArrow(){
+ setTimeout(function(){
+ $('#BRnavCntlBtm').removeClass('BRdn').addClass('BRup');
+ },3000);
+ };
+ $().ready(function(){
+ $('#BRtoolbar').animate({top:0},3000).animate({top:-40});
+ $('#BRnav').animate({bottom:0},3000).animate({bottom:-53});
+ changeArrow();
+ $('.BRnavCntl').animate({opacity:1},3000).animate({height:'43px'}).animate({opacity:1},1000).animate({opacity:.25},1000);
+ $('.BRnavCntl').click(
+ function(){
+ if ($('#BRnavCntlBtm').hasClass('BRdn')) {
+ $('#BRtoolbar').animate({top:-40});
+ $('#BRnav').animate({bottom:-53});
+ $('#BRnavCntlBtm').addClass('BRup').removeClass('BRdn');
+ $('.BRnavCntl').animate({height:'43px'}).animate({opacity:1},1000).animate({opacity:.25},1000);
+ } else {
+ $('#BRtoolbar').animate({top:0});
+ $('#BRnav').animate({bottom:0});
+ $('#BRnavCntlBtm').addClass('BRdn').removeClass('BRup');
+ $('.BRnavCntl').animate({opacity:1,height:'30px'});
+ };
+ }
+ );
+ $('#BRnavCntlBtm').mouseover(function(){
+ if ($(this).hasClass('BRup')) {
+ $('.BRnavCntl').animate({opacity:1},250);
+ };
+ });
+ $('#BRnavCntlBtm').mouseleave(function(){
+ if ($(this).hasClass('BRup')) {
+ $('.BRnavCntl').animate({opacity:.25},250);
+ };
+ });
+ });
+