FluidbookPrint.prototype = {
init: function () {
+ var $this = this;
+
// Handle click on Print button inside dialogue
$(document).on('click', '#confirmPrint', function(event) {
event.preventDefault();
- // ToDo: handle print option selection - either send for full document or generate dynamic workshop URL. Need to also consider what happens if Fluidbook is self-hosted or offline (maybe here is not the best place to handle that)
+ // ToDo: Consider what happens if Fluidbook is self-hosted or offline (maybe here is not the best place to handle that)
+
+ var dynamicPDF = 'https://workshop.fluidbook.com/s/e/' + $this.fluidbook.datas.cid + '/',
+ leftPageNumber = $this.fluidbook.getPhysicalPageNumberOfSide('left'),
+ rightPageNumber = $this.fluidbook.getPhysicalPageNumberOfSide('right'),
+ element = $(this),
+ choice = $('input[name="printChoice"]:checked').val();
+
+ switch (choice) {
+ case 'left':
+ $this.fluidbook._openFile(dynamicPDF + leftPageNumber, element, 'pdf', leftPageNumber + '.pdf', true);
+ break;
+ case 'right':
+ $this.fluidbook._openFile(dynamicPDF + rightPageNumber, element, 'pdf', rightPageNumber + '.pdf', true);
+ break;
+ case 'double':
+ var pageRange = leftPageNumber + '-' + rightPageNumber;
+ $this.fluidbook._openFile(dynamicPDF + pageRange, element, 'pdf', pageRange + '.pdf', true);
+ break;
+ case 'all':
+ $this.fluidbook.openPDF(element, true);
+ break;
+ case 'bookmarks':
+ $this.fluidbook.bookmarks.openPDF(element, true);
+ break;
+ default:
+ return false;
+ }
+
});
},
getView: function () {
// Todo: handle RTL differences for page numbers? See fluidbook.index.js for example
- var leftPageNumber = parseInt(this.fluidbook.getPageNumberOfSide('left')),
- rightPageNumber = parseInt(this.fluidbook.getPageNumberOfSide('right')),
+ var leftPageNumber = this.fluidbook.getPhysicalPageNumberOfSide('left'),
+ rightPageNumber = this.fluidbook.getPhysicalPageNumberOfSide('right'),
isFirstPage = (this.fluidbook.currentPage == 0),
isLastPage = (this.fluidbook.currentPage == this.fluidbook.datas.pages),
+ isSinglePageMode = (this.fluidbook.resize.orientation == 'portrait');
printDialogue = '';
printDialogue += '<div class="content">';
printDialogue += '<div class="print-dialogue">';
- // ToDo: implement http://adrianroselli.com/2017/05/under-engineered-custom-radio-buttons-and-checkboxen.html - might need 2 labels for each input so thumbnails are clickable too.
+ // NOTE: Each option has two labels so thumbnails are also clickable and so it works with the custom radio inputs
// Left Page (empty when on first page)
if (!isFirstPage) {
+ printDialogue += '<div class="print-option">';
printDialogue += '<label for="leftPage">';
printDialogue += '<div class="doubleThumb">';
printDialogue += '<div class="thumb left">';
printDialogue += this.fluidbook.loader.getThumbImage(leftPageNumber, null, true);
printDialogue += '</div>'; // .thumb
- printDialogue += '<div class="thumb right blank"></div>';
+ if (!isSinglePageMode && !isLastPage) {
+ printDialogue += '<div class="thumb right blank"></div>';
+ }
printDialogue += '</div>'; // .doubleThumb
- printDialogue += '<input type="radio" name="printChoice" value="'+ leftPageNumber +'" id="leftPage">';
- printDialogue += '<span class="print-label-text">' + (isLastPage ? __('Current page') : __('Left page')) + '</span>';
printDialogue += '</label>';
+ printDialogue += '<input type="radio" name="printChoice" value="left" id="leftPage">';
+ printDialogue += '<label for="leftPage" class="print-label-text">' + (isLastPage || isSinglePageMode ? __('Current page') : __('Left page')) + '</label>';
+ printDialogue += '</div>'; // .print-option
}
- // Right Page (empty when when on last page)
- if (!isLastPage) {
+ // Right Page (empty when when on last page or in portrait / single page mode)
+ if (!isLastPage && !isSinglePageMode) {
+ printDialogue += '<div class="print-option">';
printDialogue += '<label for="rightPage">';
printDialogue += '<div class="doubleThumb">';
- printDialogue += '<div class="thumb left blank"></div>';
- printDialogue += '<div class="thumb right">';
+ if (!isFirstPage) {
+ printDialogue += '<div class="thumb left blank"></div>';
+ }
+ printDialogue += '<div class="thumb '+ (isFirstPage ? 'left' : 'right') +'">'; // Only shows 1 page when on first page
printDialogue += this.fluidbook.loader.getThumbImage(rightPageNumber, null, true);
printDialogue += '</div>'; // .thumb
printDialogue += '</div>'; // .doubleThumb
- printDialogue += '<input type="radio" name="printChoice" value="'+ leftPageNumber +'" id="rightPage">';
- printDialogue += '<span class="print-label-text">' + (isFirstPage ? __('Current page') : __('Right page')) + '</span>';
printDialogue += '</label>';
+ printDialogue += '<input type="radio" name="printChoice" value="right" id="rightPage">';
+ printDialogue += '<label for="rightPage" class="print-label-text">' + (isFirstPage ? __('Current page') : __('Right page')) + '</label>';
+ printDialogue += '</div>'; // .print-option
}
// Double Page
- if (!isFirstPage && !isLastPage) {
+ if (!isFirstPage && !isLastPage && !isSinglePageMode) {
+ printDialogue += '<div class="print-option">';
printDialogue += '<label for="doublePage">';
printDialogue += '<div class="doubleThumb">';
printDialogue += '<div class="thumb left">';
printDialogue += this.fluidbook.loader.getThumbImage(rightPageNumber, null, true);
printDialogue += '</div>'; // .thumb
printDialogue += '</div>'; // .doubleThumb
- printDialogue += '<input type="radio" name="printChoice" value="'+ leftPageNumber +','+ rightPageNumber +'" id="doublePage">'
- printDialogue += '<span class="print-label-text">' + __('Double page') + '</span>';
printDialogue += '</label>';
+ printDialogue += '<input type="radio" name="printChoice" value="double" id="doublePage">'
+ printDialogue += '<label for="doublePage" class="print-label-text">' + __('Double page') + '</label>';
+ printDialogue += '</div>'; // .print-option
}
// Full Brochure
+ printDialogue += '<div class="print-option">';
printDialogue += '<label for="allPages">';
printDialogue += '<div class="doubleThumb">';
printDialogue += '<div class="thumb left">';
printDialogue += this.fluidbook.loader.getThumbImage(1, null, true);
printDialogue += '</div>'; // .thumb
printDialogue += '</div>'; // .doubleThumb
- printDialogue += '<input type="radio" name="printChoice" value="all" id="allPages">'
- printDialogue += '<span class="print-label-text">' + __('Full brochure') + '</span>';
printDialogue += '</label>';
+ printDialogue += '<input type="radio" name="printChoice" value="all" id="allPages">'
+ printDialogue += '<label for="allPages" class="print-label-text">' + __('Full brochure') + '</label>';
+ printDialogue += '</div>'; // .print-option
// Bookmarks
var hasBookmarks = this.fluidbook.bookmarks.hasBookmarkedPages(),
bookmarksDisabled = hasBookmarks ? '' : 'disabled';
+ printDialogue += '<div class="print-option '+ bookmarksDisabled +'">';
printDialogue += '<label for="bookmarkedPages">';
- printDialogue += '<div class="doubleThumb bookmarks '+ bookmarksDisabled +'">';
+ printDialogue += '<div class="doubleThumb bookmarks">';
printDialogue += this.fluidbook.bookmarks.getPrintPreview();
printDialogue += '</div>'; // .doubleThumb
- printDialogue += '<input type="radio" name="printChoice" value="bookmarks" id="bookmarkedPages" '+ bookmarksDisabled +'>'
- printDialogue += '<span class="print-label-text">' + __('My bookmarks') + '</span>';
printDialogue += '</label>';
+ printDialogue += '<input type="radio" name="printChoice" value="bookmarks" id="bookmarkedPages" '+ bookmarksDisabled +'>'
+ printDialogue += '<label for="bookmarkedPages" class="print-label-text">' + __('My bookmarks') + '</label>';
+ printDialogue += '</div>'; // .print-option
printDialogue += '</div>'; // .print-dialogue