]> _ Git - fluidbook-html5.git/commitdiff
fix #2797 @2
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 28 May 2019 15:56:25 +0000 (17:56 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 28 May 2019 15:56:25 +0000 (17:56 +0200)
js/libs/fluidbook/fluidbook.print.js

index 42c61e02afc9b1e0d63af202f93eb5d28883b6f6..435691d5fbcf9bb1d83d7171c23295ee12967a6d 100644 (file)
@@ -76,79 +76,41 @@ FluidbookPrint.prototype = {
 
     getView: function (mode) {
 
-        var compact = this.fluidbook.mobilefirst.enabled;
+        this.compact = this.fluidbook.mobilefirst.enabled;
 
         // Ensure mode is either download or print (default)
         mode = (mode === 'download' ? mode : 'print');
 
         // Todo: handle RTL differences for page numbers? See fluidbook.index.js for example
-        var leftPageNumber = this.fluidbook.getPhysicalPageNumberOfSide(this.fluidbook.l10n.dir === 'ltr' ? 'left' : 'right'),
-            rightPageNumber = this.fluidbook.getPhysicalPageNumberOfSide(this.fluidbook.l10n.dir === 'ltr' ? 'right' : 'left'),
-            isFirstPage = (this.fluidbook.currentPage === 0),
-            isLastPage = (this.fluidbook.currentPage === this.fluidbook.datas.pages),
-            isSinglePageMode = (this.fluidbook.resize.orientation === 'portrait'),
-            buttonLabels = {
-                'print': __('print'),
-                'download': __('download')
-            },
-            view = '';
+        this.leftPageNumber = this.fluidbook.getPhysicalPageNumberOfSide('left');
+        this.rightPageNumber = this.fluidbook.getPhysicalPageNumberOfSide('right');
+        this.isFirstPage = (this.fluidbook.currentPage === 0);
+        this.isLastPage = (this.fluidbook.currentPage === this.fluidbook.datas.pages);
+        this.isSinglePageMode = (this.fluidbook.resize.orientation === 'portrait');
+        this.buttonLabels = {
+            'print': __('print'),
+            'download': __('download')
+        };
+        var view = '';
 
         view += '<div class="content">';
-        view += '<div class="print-dialogue' + (compact ? ' compact' : '') + '">';
+        view += '<div class="print-dialogue' + (this.compact ? ' compact' : '') + '">';
 
         // 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) {
-            view += '<div class="print-option">';
-            if (!compact) {
-                view += '<label for="leftPage">';
-                view += '<div class="doubleThumb">';
-                view += '<div class="thumb left">';
-                view += this.fluidbook.loader.getThumbImage(leftPageNumber, true);
-                view += '</div>'; // .thumb
-                if (!isSinglePageMode && !isLastPage) {
-                    view += '<div class="thumb right blank"><div class="blank-mask"></div></div>';
-                }
-                view += '</div>'; // .doubleThumb
-                view += '</label>';
-            }
-            view += '<input type="radio" name="pageChoice" value="left" id="leftPage">';
-            view += '<label for="leftPage" class="print-label-text">' + (isLastPage || isSinglePageMode ? __('Current page') : __('left page')) + '</label>';
-            view += '</div>'; // .print-option
-        }
-
-        // Right Page (empty when when on last page or in portrait / single page mode)
-        if (!isLastPage && !isSinglePageMode) {
-            view += '<div class="print-option">';
-            if (!compact) {
-                view += '<label for="rightPage">';
-                view += '<div class="doubleThumb">';
-                if (!isFirstPage) {
-                    view += '<div class="thumb left blank"><div class="blank-mask"></div></div>';
-                }
-                view += '<div class="thumb ' + (isFirstPage ? 'left' : 'right') + '">'; // Only shows 1 page when on first page
-                view += this.fluidbook.loader.getThumbImage(rightPageNumber, true);
-                view += '</div>'; // .thumb
-                view += '</div>'; // .doubleThumb
-                view += '</label>';
-            }
-            view += '<input type="radio" name="pageChoice" value="right" id="rightPage">';
-            view += '<label for="rightPage" class="print-label-text">' + (isFirstPage ? __('Current page') : __('right page')) + '</label>';
-            view += '</div>'; // .print-option
-        }
+        view += this.getSinglePages();
 
         // Double Page
-        if (!isFirstPage && !isLastPage && !isSinglePageMode) {
+        if (!this.isFirstPage && !this.isLastPage && !this.isSinglePageMode) {
             view += '<div class="print-option">';
-            if (!compact) {
+            if (!this.compact) {
                 view += '<label for="doublePage">';
                 view += '<div class="doubleThumb">';
                 view += '<div class="thumb left">';
-                view += this.fluidbook.loader.getThumbImage(leftPageNumber, true);
+                view += this.fluidbook.loader.getThumbImage(this.leftPageNumber, true);
                 view += '</div>';
                 view += '<div class="thumb right">';
-                view += this.fluidbook.loader.getThumbImage(rightPageNumber, true);
+                view += this.fluidbook.loader.getThumbImage(this.rightPageNumber, true);
                 view += '</div>'; // .thumb
                 view += '</div>'; // .doubleThumb
                 view += '</label>';
@@ -161,7 +123,7 @@ FluidbookPrint.prototype = {
         // Full Brochure
         if (this.fluidbook.datas.printFullBrochure) {
             view += '<div class="print-option">';
-            if (!compact) {
+            if (!this.compact) {
                 view += '<label for="allPages">';
                 view += '<div class="doubleThumb">';
                 view += '<div class="thumb left">';
@@ -181,7 +143,7 @@ FluidbookPrint.prototype = {
                 bookmarksDisabled = hasBookmarks ? '' : 'disabled';
 
             view += '<div class="print-option bookmarks-option ' + bookmarksDisabled + '">';
-            if (!compact) {
+            if (!this.compact) {
                 view += '<label for="bookmarkedPages">';
                 view += '<div class="doubleThumb bookmarks">';
                 view += this.fluidbook.bookmarks.getPrintPreview();
@@ -198,11 +160,11 @@ FluidbookPrint.prototype = {
         // Page range inputs
         if (this.fluidbook.datas.printPageRange) {
 
-            // leftPageNumber may be false if on first page
-            var rangeStart = Math.max(leftPageNumber, 1);
+            // this.leftPageNumber may be false if on first page
+            var rangeStart = Math.max(this.leftPageNumber, 1);
 
             // Current page + 1 unless we're out of range.
-            // It has to be calculated this way because sometimes there is no rightPageNumber
+            // It has to be calculated this way because sometimes there is no this.rightPageNumber
             var rangeEnd = Math.min(rangeStart + 1, this.fluidbook.datas.pages);
 
             view += '<div class="print-option page-range-option">';
@@ -220,7 +182,7 @@ FluidbookPrint.prototype = {
 
         // Action buttons
         view += '<div class="fonctions">';
-        view += '<a id="confirmChoice" href="#" data-mode="' + mode + '">' + buttonLabels[mode] + '</a>';
+        view += '<a id="confirmChoice" href="#" data-mode="' + mode + '">' + this.buttonLabels[mode] + '</a>';
         view += '</div>'; // .fonctions
 
         view += '</div>'; // .content
@@ -228,6 +190,66 @@ FluidbookPrint.prototype = {
         return view;
     },
 
+    getSinglePage: function (side, pageNumber, label, addMask) {
+
+        var sideMask = '';
+        if (addMask) {
+            sideMask = side === 'left' ? 'right' : 'left';
+        }
+        var view = '';
+        view += '<div class="print-option">';
+        if (!this.compact) {
+            view += '<label for="' + side + 'Page">';
+            view += '<div class="doubleThumb">';
+            if (addMask && sideMask === 'left') {
+                view += this.getSideMask(sideMask);
+            }
+            view += '<div class="thumb ' + side + '">';
+            view += this.fluidbook.loader.getThumbImage(pageNumber, true);
+            view += '</div>'; // .thumb
+            if (addMask && sideMask === 'right') {
+                view += this.getSideMask(sideMask);
+            }
+            view += '</div>'; // .doubleThumb
+            view += '</label>';
+        }
+        view += '<input type="radio" name="pageChoice" value="' + side + '" id="' + side + 'Page">';
+        view += '<label for="' + side + 'Page" class="print-label-text">' + label + '</label>';
+        view += '</div>'; // .print-option
+        return view;
+    },
+
+    getSideMask: function (side) {
+        return '<div class="thumb ' + side + ' blank"><div class="blank-mask"></div></div>'
+    },
+
+    getSinglePages: function () {
+        var view = '';
+        var onePage = this.isSinglePageMode || this.isFirstPage || this.isLastPage;
+
+        var leftPage = this.leftPageNumber;
+        var rightPage = this.rightPageNumber;
+
+        if (this.fluidbook.l10n.dir === 'ltr') {
+            if (this.isFirstPage) {
+                leftPage = this.rightPageNumber;
+            }
+            view += this.getSinglePage('left', leftPage, onePage ? __('Current page') : __('left page'), !onePage);
+            if (!onePage) {
+                view += this.getSinglePage('right', rightPage, __('right page'), true);
+            }
+        } else {
+            if (this.isFirstPage) {
+                rightPage = this.leftPageNumber;
+            }
+            view += this.getSinglePage('right', rightPage, onePage ? __('Current page') : __('right page'), !onePage);
+            if (!onePage) {
+                view += this.getSinglePage('left', leftPage, __('left page'), true);
+            }
+        }
+        return view;
+    },
+
     advancedPrint: function () {
         if (this.fluidbook.datas.phonegap !== false) {
             return false;