// printPage
//______________________________________________________________________________
GnuBook.prototype.printPage = function() {
+ window.open(this.getPrintURI(), 'printpage', 'width=400, height=500, resizable=yes, scrollbars=no, toolbar=no, location=no');
+
+ /* iframe implementation
+
if (null != this.printPopup) { // check if already showing
return;
}
position: 'absolute',
top: '20px',
left: ($('#GBcontainer').width()-400)/2 + 'px',
- width: '500px',
+ width: '400px',
padding: "20px",
border: "3px double #999999",
zIndex: 3,
indexToPrint = this.twoPage.currentIndexL;
}
- var imageAspect = this.getPageWidth(indexToPrint) / this.getPageHeight(indexToPrint);
- var paperAspect = 8.5 / 11; // Use US Letter in portrait as guesstimate
+ this.indexToPrint = indexToPrint;
+
+ var htmlStr = '<div style="text-align: center;">';
+ htmlStr = '<p style="text-align:center;"><b><a href="javascript:void(0);" onclick="window.frames[0].focus(); window.frames[0].print(); return false;">Click here to print this page</a></b></p>';
+ htmlStr += '<div id="printDiv" name="printDiv" style="text-align: center; width: 233px; margin: auto">'
+ htmlStr += '<p style="text-align:right; margin: 0; font-size: 0.85em">';
+ //htmlStr += '<button class="GBicon rollover book_up" onclick="gb.updatePrintFrame(-1); return false;"></button> ';
+ //htmlStr += '<button class="GBicon rollover book_down" onclick="gb.updatePrintFrame(1); return false;"></button>';
+ htmlStr += '<a href="#" onclick="gb.updatePrintFrame(-1); return false;">Prev</a> <a href="#" onclick="gb.updatePrintFrame(1); return false;">Next</a>';
+ htmlStr += '</p>';
+ htmlStr += '</div>';
+ htmlStr += '<p style="text-align:center;"><a href="" onclick="gb.printPopup = null; $(this.parentNode.parentNode).remove(); return false">Close popup</a></p>';
+ htmlStr += '</div>';
+
+ this.printPopup.innerHTML = htmlStr;
+
+ var iframe = document.createElement('iframe');
+ iframe.id = 'printFrame';
+ iframe.name = 'printFrame';
+ iframe.width = '233px'; // 8.5 x 11 aspect
+ iframe.height = '300px';
+
+ var self = this; // closure
+
+ $(iframe).load(function() {
+ var doc = GnuBook.util.getIFrameDocument(this);
+ $('body', doc).html(self.getPrintFrameContent(self.indexToPrint));
+ });
+
+ $('#printDiv').prepend(iframe);
+ */
+}
+
+// Get print URI from current indices and mode
+GnuBook.prototype.getPrintURI = function() {
+ var indexToPrint;
+ if (this.constMode2up == this.mode) {
+ indexToPrint = this.twoPage.currentIndexL;
+ } else {
+ indexToPrint = this.firstIndex; // $$$ the index in the middle of the viewport would make more sense
+ }
+
+ var options = 'id=' + this.bookId + '&server=' + this.server + '&zip=' + this.zip
+ + '&format=' + this.imageFormat + '&index=' + this.leafMap[indexToPrint]
+ + '&width=' + this.getPageWidth(indexToPrint) + '&height=' + this.getPageHeight(indexToPrint);
+
+ if (this.constMode2up == this.mode) {
+ options += '&index2=' + this.leafMap[this.twoPage.currentIndexR] + '&width2=' + this.getPageWidth(this.twoPage.currentIndexR);
+ options += '&height2=' + this.getPageHeight(this.twoPage.currentIndexR);
+ options += '&title=' + escape(this.shortTitle(30) + ' - Pages ' + this.getPageNum(this.twoPage.currentIndexL) + ', ' + this.getPageNum(this.twoPage.currentIndexR));
+ } else {
+ options += '&title=' + escape(this.shortTitle(30) + ' - Page ' + this.getPageNum(indexToPrint));
+ }
+
+ return '/bookreader/print.php?' + options;
+}
+
+GnuBook.prototype.getPrintFrameContent = function(index) {
+ // We fit the image based on an assumed A4 aspect ratio. A4 is a bit taller aspect than
+ // 8.5x11 so we should end up not overflowing on either paper size.
+ var paperAspect = 8.5 / 11;
+ var imageAspect = this.getPageWidth(index) / this.getPageHeight(index);
+
var rotate = 0;
// Rotate if possible and appropriate, to get larger image size on printed page
- if (this.canRotatePage(indexToPrint)) {
+ if (this.canRotatePage(index)) {
if (imageAspect > 1 && imageAspect > paperAspect) {
// more wide than square, and more wide than paper
rotate = 90;
// taller than paper, fit height
fitAttrs = 'height="95%"';
}
-
- var imageURL = this.getPageURI(indexToPrint, 1, rotate);
-
- var iframeStr = '<html><head><title>' + this.bookTitle + '</title></head><body>';
- iframeStr += '<p style="text-align:center;"><img src="' + imageURL + '" ' + fitAttrs + ' /></p>';
+
+ var imageURL = this.getPageURI(index, 1, rotate);
+ var iframeStr = '<html style="padding: 0; border: 0; margin: 0"><head><title>' + this.bookTitle + '</title></head><body style="padding: 0; border:0; margin: 0">';
+ iframeStr += '<div style="text-align: center; width: 99%; height: 99%; overflow: hidden;">';
+ iframeStr += '<img src="' + imageURL + '" ' + fitAttrs + ' />';
+ iframeStr += '</div>';
iframeStr += '</body></html>';
- htmlStr = '<p style="text-align:center;"><b><a href="javascript:void(0);" onclick="window.frames[0].focus(); window.frames[0].print(); return false;">Click here to print this page</a></b></p>';
- htmlStr += '<div id="printDiv" name="printDiv"></div>';
- htmlStr += '<p style="text-align:center;"><a href="" onclick="gb.printPopup = null; $(this.parentNode.parentNode).remove(); return false">Close popup</a></p>';
-
- this.printPopup.innerHTML = htmlStr;
-
- var iframe = document.createElement('iframe');
- iframe.id = 'printFrame';
- iframe.name = 'printFrame';
- iframe.width = '500px';
- iframe.height = '400px';
-
- $(iframe).load(function() {
- var doc = GnuBook.util.getIFrameDocument(this);
- $('body', doc).html(iframeStr)
- });
-
- $('#printDiv').append(iframe);
+ return iframeStr;
+}
+
+GnuBook.prototype.updatePrintFrame = function(delta) {
+ var newIndex = this.indexToPrint + delta;
+ newIndex = GnuBook.util.clamp(newIndex, 0, this.numLeafs - 1);
+ if (newIndex == this.indexToPrint) {
+ return;
+ }
+ this.indexToPrint = newIndex;
+ var doc = GnuBook.util.getIFrameDocument($('#printFrame')[0]);
+ $('body', doc).html(this.getPrintFrameContent(this.indexToPrint));
}
// showEmbedCode()
GnuBook.prototype.initToolbar = function(mode, ui) {
- $("#GnuBook").append("<div id='GBtoolbar'><span style='float:left;'>"
- + "<a class='GBicon logo rollover' href='" + this.logoURL + "'> </a>"
- + " <button class='GBicon rollover zoom_out' onclick='gb.zoom(-1); return false;'/>"
- + "<button class='GBicon rollover zoom_in' onclick='gb.zoom(1); return false;'/>"
- + " <span class='label'>Zoom: <span id='GBzoom'>"+parseInt(100/this.reduce)+"</span></span>"
- + " <button class='GBicon rollover one_page_mode' onclick='gb.switchMode(1); return false;'/>"
- + " <button class='GBicon rollover two_page_mode' onclick='gb.switchMode(2); return false;'/>"
- + " <a class='GBblack title' href='"+this.bookUrl+"' target='_blank'>"+this.shortTitle(50)+"</a>"
- + "</span></div>");
+ $("#GnuBook").append("<div id='GBtoolbar'>"
+ + "<span id='GBtoolbarbuttons' style='float: right'>"
+ + "<button class='GBicon print rollover' /> <button class='GBicon rollover embed' />"
+ + "<form class='GBpageform' action='javascript:' onsubmit='gb.jumpToPage(this.elements[0].value)'> <span class='label'>Page:<input id='GBpagenum' type='text' size='3' onfocus='gb.autoStop();'></input></span></form>"
+ + "<div class='GBtoolbarmode2' style='display: none'><button class='GBicon rollover book_leftmost' /><button class='GBicon rollover book_left' /><button class='GBicon rollover book_right' /><button class='GBicon rollover book_rightmost' /></div>"
+ + "<div class='GBtoolbarmode1' style='display: none'><button class='GBicon rollover book_top' /><button class='GBicon rollover book_up' /> <button class='GBicon rollover book_down' /><button class='GBicon rollover book_bottom' /></div>"
+ + "<button class='GBicon rollover play' /><button class='GBicon rollover pause' style='display: none' />"
+ + "</span>"
+
+ + "<span>"
+ + "<a class='GBicon logo rollover' href='" + this.logoURL + "'> </a>"
+ + " <button class='GBicon rollover zoom_out' onclick='gb.zoom(-1); return false;'/>"
+ + "<button class='GBicon rollover zoom_in' onclick='gb.zoom(1); return false;'/>"
+ + " <span class='label'>Zoom: <span id='GBzoom'>"+parseInt(100/this.reduce)+"</span></span>"
+ + " <button class='GBicon rollover one_page_mode' onclick='gb.switchMode(1); return false;'/>"
+ + " <button class='GBicon rollover two_page_mode' onclick='gb.switchMode(2); return false;'/>"
+ + "</span>"
+
+ + "<span id='#GBbooktitle'>"
+ + " <a class='GBblack title' href='"+this.bookUrl+"' target='_blank'>"+this.bookTitle+"</a>"
+ + "</span>"
+ + "</div>");
this.updateToolbarZoom(this.reduce); // Pretty format
var jToolbar = $('#GBtoolbar'); // j prefix indicates jQuery object
// We build in mode 2
- jToolbar.append("<span id='GBtoolbarbuttons' style='float: right'>"
- + "<button class='GBicon print rollover' /> <button class='GBicon rollover embed' />"
- + "<form class='GBpageform' action='javascript:' onsubmit='gb.jumpToPage(this.elements[0].value)'> <span class='label'>Page:<input id='GBpagenum' type='text' size='3' onfocus='gb.autoStop();'></input></span></form>"
- + "<div class='GBtoolbarmode2' style='display: none'><button class='GBicon rollover book_leftmost' /><button class='GBicon rollover book_left' /><button class='GBicon rollover book_right' /><button class='GBicon rollover book_rightmost' /></div>"
- + "<div class='GBtoolbarmode1' style='display: none'><button class='GBicon rollover book_top' /><button class='GBicon rollover book_up' /> <button class='GBicon rollover book_down' /><button class='GBicon rollover book_bottom' /></div>"
- + "<button class='GBicon rollover play' /><button class='GBicon rollover pause' style='display: none' /></span>");
+ jToolbar.append();
this.bindToolbarNavHandlers(jToolbar);