// Used by the print function. Will return maximum of 3 pages or a blank page if no bookmarks.
getPrintPreview: function() {
- return '[bookmark images go here]';
+
+ if (!this.hasBookmarkedPages()) {
+ return '<div class="thumb left blank"></div>';
+ }
+
+
+ var maxImages = 3, // How many images maximum to show in the bookmarks print preview thumbnail
+ count = 0,
+ html = '',
+ groups = this.getBookmarkedGroups();
+
+ html += '<div class="bookmark-thumbnails">';
+
+ for (var g = 0; g < groups.length; g++) {
+ count++;
+ var group = groups[g];
+
+ html += '<div class="thumb">' + this.fluidbook.loader.getThumbImage(group.page);
+
+ if (this.fluidbook.bookmarks.enabled) {
+ html += this.fluidbook.bookmarks.getBookmarkForPage(group.page, true, true);
+ }
+
+ html += '</div>';
+
+ // Stop once we have enough images for the preview
+ if (count >= maxImages) {
+ break;
+ }
+ }
+
+ html += '</div>';
+
+ return html;
}
};
this.audiodescription = new FluidbookAudioDescription(this);
this.sound = new FluidbookSound(this);
this.slideshow = new FluidbookSlideshow(this);
+ this.printing = new FluidbookPrint(this);
if (this.datas.basket) {
},
openPrint: function (callback) {
- // 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')),
- isFirstPage = (this.fluidbook.currentPage == 0),
- isLastPage = (this.fluidbook.currentPage == this.fluidbook.datas.pages),
- printDialogue = '<div class="caption">' + this.closeButton() + '<h2>' + __('Print') + '</h2></div>';
- 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.
-
- // Left Page (empty when on first page)
- if (!isFirstPage) {
- 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>';
- printDialogue += '</div>'; // .doubleThumb
- printDialogue += '<input type="radio" name="printChoice" value="'+ leftPageNumber +'" id="leftPage">';
- printDialogue += '<span class="print-label-text">' + __('Left page') + '</span>';
- printDialogue += '</label>';
- }
-
- // Right Page (empty when when on last page)
- if (!isLastPage) {
- printDialogue += '<label for="rightPage">';
- printDialogue += '<div class="doubleThumb">';
- printDialogue += '<div class="thumb left blank"></div>';
- printDialogue += '<div class="thumb right">';
- 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">' + __('Right page') + '</span>';
- printDialogue += '</label>';
- }
-
- // Double Page
- if (!isFirstPage && !isLastPage) {
- printDialogue += '<label for="doublePage">';
- printDialogue += '<div class="doubleThumb">';
- printDialogue += '<div class="thumb left">';
- printDialogue += this.fluidbook.loader.getThumbImage(leftPageNumber, null, true);
- printDialogue += '</div>';
- printDialogue += '<div class="thumb right">';
- 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>';
- }
-
- // Full Brochure
- 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>';
-
- // Bookmarks
- var hasBookmarks = this.fluidbook.bookmarks.hasBookmarkedPages(),
- bookmarksDisabled = hasBookmarks ? '' : 'disabled';
-
- printDialogue += '<label for="bookmarkedPages">';
- printDialogue += '<div class="doubleThumb bookmarks '+ bookmarksDisabled +'">';
- 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 += '</div>'; // .print-dialogue
- printDialogue += '</div>'; // .content
+ var printDialogue = '<div class="caption">' + this.closeButton() + '<h2>' + __('Print') + '</h2></div>';
+
+ printDialogue += this.fluidbook.printing.getView();
$("#view").append('<div class="mview" data-menu="print">' + printDialogue + '</div>');
+
if (callback != undefined) {
callback();
}
--- /dev/null
+function FluidbookPrint(fluidbook) {
+ this.fluidbook = fluidbook;
+ this.init();
+}
+
+FluidbookPrint.prototype = {
+ init: function () {
+
+ // 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)
+
+ });
+ },
+
+ 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')),
+ isFirstPage = (this.fluidbook.currentPage == 0),
+ isLastPage = (this.fluidbook.currentPage == this.fluidbook.datas.pages),
+ 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.
+
+ // Left Page (empty when on first page)
+ if (!isFirstPage) {
+ 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>';
+ 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>';
+ }
+
+ // Right Page (empty when when on last page)
+ if (!isLastPage) {
+ printDialogue += '<label for="rightPage">';
+ printDialogue += '<div class="doubleThumb">';
+ printDialogue += '<div class="thumb left blank"></div>';
+ printDialogue += '<div class="thumb right">';
+ 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>';
+ }
+
+ // Double Page
+ if (!isFirstPage && !isLastPage) {
+ printDialogue += '<label for="doublePage">';
+ printDialogue += '<div class="doubleThumb">';
+ printDialogue += '<div class="thumb left">';
+ printDialogue += this.fluidbook.loader.getThumbImage(leftPageNumber, null, true);
+ printDialogue += '</div>';
+ printDialogue += '<div class="thumb right">';
+ 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>';
+ }
+
+ // Full Brochure
+ 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>';
+
+ // Bookmarks
+ var hasBookmarks = this.fluidbook.bookmarks.hasBookmarkedPages(),
+ bookmarksDisabled = hasBookmarks ? '' : 'disabled';
+
+ printDialogue += '<label for="bookmarkedPages">';
+ printDialogue += '<div class="doubleThumb bookmarks '+ bookmarksDisabled +'">';
+ 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 += '</div>'; // .print-dialogue
+
+ // Action buttons
+ printDialogue += '<div class="fonctions">';
+ printDialogue += '<a id="confirmPrint" href="#">'+ __('Print') +'</a>';
+ printDialogue += '</div>'; // .fonctions
+
+ printDialogue += '</div>'; // .content
+
+ return printDialogue;
+ }
+};
+
flex-wrap: wrap;
text-align: left;
padding: 1em 2em;
+ margin-bottom: -2em; // Offset the margin-bottom on each <label> so there's no extra margin on last row
> label {
flex: 0 1 33%;
margin-bottom: 1em;
}
+ .thumb.right {
+ left: 100px; // Override default so there's no gap between pages
+ }
+
+ .bookmark-thumbnails {
+ .thumb {
+ &:before {
+ width: 113px; // Controls drop shadow on right side of thumbnail
+ }
+
+ &:nth-child(1) {
+ z-index: 3;
+ }
+ &:nth-child(2) {
+ left: 50px;
+ z-index: 2;
+ }
+ &:nth-child(3) {
+ left: 100px;
+ z-index: 1;
+ }
+ }
+
+ .bookmark {
+ pointer-events: none; // Disable hover/click on bookmark icons in this context
+ }
+ }
+
+
}