element = $(this),
mode = element.data('mode'), // Either 'print' or 'download'
print = (mode == 'print'),
- choice = $('input[name="pageChoice"]:checked').val();
+ choice = $('input[name="pageChoice"]:checked').val(),
+ rangeStart = parseInt($('#pageRangeStart').val()),
+ rangeEnd = parseInt($('#pageRangeEnd').val());
switch (choice) {
case 'left':
case 'bookmarks':
$this.fluidbook.bookmarks.openPDF(element, print);
break;
+ case 'range':
+ if (isNaN(rangeStart) ||
+ isNaN(rangeEnd) ||
+ (rangeStart < 1) ||
+ (rangeEnd > $this.fluidbook.datas.pages) ||
+ (rangeStart > rangeEnd)
+ ) {
+ alert(__('Invalid page range. Please try again.'));
+ return false;
+ }
+ var pageRange = rangeStart + '-' + rangeEnd;
+ $this.fluidbook._openFile(dynamicPDF + pageRange, element, 'pdf', pageRange + '.pdf', print);
+ break;
default:
return false;
}
});
+ // Automatically select page range option when clicking in the input fields
+ $(document).on('focus', '.page-range-input', function() {
+ $('#pageRange').prop('checked', true);
+ });
+
// When there are no bookmarks a click on the bookmarks option will open the bookmarks help modal
$(document).on('click', '.bookmarks-option.disabled', function(event) {
event.preventDefault();
}
// Full Brochure
- view += '<div class="print-option">';
- view += '<label for="allPages">';
- view += '<div class="doubleThumb">';
- view += '<div class="thumb left">';
- view += this.fluidbook.loader.getThumbImage(1, null, true);
- view += '</div>'; // .thumb
- view += '</div>'; // .doubleThumb
- view += '</label>';
- view += '<input type="radio" name="pageChoice" value="all" id="allPages">'
- view += '<label for="allPages" class="print-label-text">' + __('entire brochure') + '</label>';
- view += '</div>'; // .print-option
+ if ((mode === 'print' && this.fluidbook.datas.printFullBrochure) || mode === 'download') {
+ view += '<div class="print-option">';
+ view += '<label for="allPages">';
+ view += '<div class="doubleThumb">';
+ view += '<div class="thumb left">';
+ view += this.fluidbook.loader.getThumbImage(1, null, true);
+ view += '</div>'; // .thumb
+ view += '</div>'; // .doubleThumb
+ view += '</label>';
+ view += '<input type="radio" name="pageChoice" value="all" id="allPages">'
+ view += '<label for="allPages" class="print-label-text">' + __('entire brochure') + '</label>';
+ view += '</div>'; // .print-option
+ }
// Bookmarks
if (this.fluidbook.datas.bookmark) {
view += this.fluidbook.bookmarks.getPrintPreview();
view += '</div>'; // .doubleThumb
view += '</label>';
- view += '<input type="radio" name="pageChoice" value="bookmarks" id="bookmarkedPages" '+ bookmarksDisabled +'>'
+ view += '<input type="radio" name="pageChoice" value="bookmarks" id="bookmarkedPages" '+ bookmarksDisabled +'>';
view += '<label for="bookmarkedPages" class="print-label-text">' + __('bookmarks') + '</label>';
view += '</div>'; // .print-option
}
- view += '<div class="print-option"></div>'; // Extra empty div to ensure flexbox space-between works as expected
+ view += '<div class="print-option blank"></div>'; // Extra empty div to ensure flexbox space-between works as expected
+
+ // Page range inputs
+ if (mode === 'print' && this.fluidbook.datas.printPageRange) {
+
+ // leftPageNumber may be false if on first page
+ var rangeStart = Math.max(leftPageNumber, 1);
+
+ // Current page + 1 unless we're out of range.
+ // It has to be calculated this way because sometimes there is no rightPageNumber
+ var rangeEnd = Math.min(rangeStart + 1, this.fluidbook.datas.pages);
+
+ view += '<div class="print-option page-range-option">';
+ view += '<input type="radio" name="pageChoice" value="range" id="pageRange">';
+ view += '<label for="pageRange">';
+ view += __('From page');
+ view += '<input class="page-range-input" type="text" id="pageRangeStart" value="' + rangeStart + '" autocomplete="off">';
+ view += __('to');
+ view += '<input class="page-range-input" type="text" id="pageRangeEnd" value="' + rangeEnd + '" autocomplete="off">';
+ view += '</label>';
+ view += '</div>'; // .print-option
+ }
view += '</div>'; // .print-dialogue