]> _ Git - fluidbook-html5.git/commitdiff
Merge branch 'menus' into html5video
authorStephen Cameron <stephen@Stephen.local>
Fri, 2 Jun 2017 10:59:09 +0000 (12:59 +0200)
committerStephen Cameron <stephen@Stephen.local>
Fri, 2 Jun 2017 10:59:09 +0000 (12:59 +0200)
1  2 
_index.html
js/libs/fluidbook/fluidbook.bookmarks.js
js/libs/fluidbook/fluidbook.js
js/libs/fluidbook/fluidbook.links.js
js/libs/fluidbook/fluidbook.video.js
style/fluidbook.less

diff --cc _index.html
Simple merge
index d965af3d6d5f4cc91d60d12853415c9244465ddc,18b9fda7688de0019d1002699b0385699752c0d5..8764368fc98563371947d473774f97735738c5b8
@@@ -16,444 -16,440 +16,444 @@@ function FluidbookBookmarks(fluidbook) 
  }
  
  FluidbookBookmarks.prototype = {
-       init: function() {
-               var $this = this;
-               $(document).on('click touchend', '.bookmark', function() {
-                       $this.toggleBookmark(parseInt($(this).attr('data-page')));
-                       return false;
-               });
+     init: function () {
+         var $this = this;
+         $(document).on('click', '.bookmark', function () {
+             $this.toggleBookmark(parseInt($(this).attr('data-page')));
+             return false;
+         });
  
 -        $(document).on('click', '.bookmarkssub a.send', function () {
 -            var subject = '%title%';
 -            if ($this.fluidbook.datas.bookmark_email_title != '') {
 -                subject = $this.fluidbook.datas.bookmark_email_title;
 -            }
 -
 -
 -            var body = $this.fluidbook.l10n.__('Please see the attached files from "%title%".');
 -            if ($this.fluidbook.datas.bookmark_email_body != '') {
 -                body = $this.fluidbook.datas.bookmark_email_body;
 -            }
 -
 -            subject = subject.replace(/\%title\%/gi, $this.fluidbook.datas.title);
 -            body = trim(body.replace(/\%title\%/gi, $this.fluidbook.datas.title), ' .');
 -            body += " : " + $this.getPDF();
 -
 -            $this.fluidbook.intentShare(subject, body);
 -            return false;
 -        });
 -
 -        $(document).on('click', '.bookmarkssub a.print', function () {
 -            $this.fluidbook._openFile($this.getPDF(), $(this), 'pdf', $this.getBookmarksCompacted() + '.pdf');
 -            return false;
 -        });
 -
 -        for (var g in this.fluidbook.datas.bookmarkGroups) {
 -
 -            var group = this.fluidbook.datas.bookmarkGroups[g];
 -            this.addGroup(group.page, group.nb, group.name);
 -        }
 -        this.completeGroups();
 -        this._groupOrder.sort($.proxy(this.sortGroup, this));
 -
 -        this.bookmarks = this.getSavedBookmarks();
 -        for (var i in this.bookmarks) {
 -            this.addBookmark(this.bookmarks[i], true);
 -        }
 -    },
 -    sortGroup: function (a, b) {
 -        var p_a = this.getPagesOfGroup(a)[0];
 -        var p_b = this.getPagesOfGroup(b)[0];
 -        return p_a - p_b;
 -    },
 -    sortnumeric: function (a, b) {
 -        return a - b;
 -    },
 -    getPDF: function () {
 -        return 'https://workshop.fluidbook.com/s/e/' + this.fluidbook.datas.cid + '/' + this.getBookmarksCompacted();
 -    },
 -    getBookmarksCompacted: function () {
 -        this.bookmarks.sort(this.sortnumeric);
 -
 -        var g = [];
 -        var rs = 0;
 -        var re = 0;
 -        for (var i = 0; i < this.bookmarks.length; i++) {
 -            var b = this.bookmarks[i];
 -            if (rs == 0) {
 -                rs = re = b;
 -                continue;
 -            }
 -            if (re + 1 == b) {
 -                re = b;
 -                continue;
 -            }
 -            if (rs == re) {
 -                g.push('' + rs);
 -            } else {
 -                g.push(rs + '-' + re);
 -            }
 -
 -            rs = re = b;
 -        }
 -
 -        if (rs != 0) {
 -            if (rs == re) {
 -                g.push('' + rs);
 -            } else {
 -                g.push(rs + '-' + re);
 -            }
 -        }
 -
 -        return g.join(',');
 -    },
 -    addGroup: function (from, nb, name) {
 -        var to = Math.min(from + (nb - 1), this.fluidbook.datas.pages);
 -        for (var i = from; i <= to; i++) {
 -            this._pagesToGroup[i] = this._groups;
 -        }
 -        this._groupNames[this._groups] = name;
 -        this._groupOrder.push(this._groups);
 -        this._groups++;
 -    },
 -    completeGroups: function () {
 -        for (var i = 1; i <= this.fluidbook.datas.pages; i++) {
 -            if (this._pagesToGroup[i] == undefined || this._pagesToGroup[i] == null) {
 -                this._pagesToGroup[i] = this._groups;
 -                this._groupOrder.push(this._groups);
 -                this._groups++;
 -            }
 -        }
 -    },
 -    getPreviousGroup: function (group) {
 -        var o = this.getOrderGroup(group);
 -        if (o == -1) {
 -            return false;
 -        }
 -        o--;
 -        return this._groupOrder[o];
 -    },
 -    getNextGroup: function (group) {
 -        var o = this.getOrderGroup(group);
 -        if (o == -1) {
 -            return false;
 -        }
 -        o++;
 -        return this._groupOrder[o];
 -    },
 -    getOrderGroup: function (group) {
 -        return this._groupOrder.indexOf(group);
 -    },
 -    getGroupName: function (groupId) {
 -        var res = '';
 -        if (this._groupNames[groupId] != undefined) {
 -            res = this._groupNames[groupId];
 -        }
 -        if (res == '') {
 -            var pages = this.getPagesOfGroup(groupId);
 -            res = this.fluidbook.physicalToVirtual(pages[0]);
 -            if (pages.length == 1) {
 -                return res;
 -            }
 -            res += " - " + this.fluidbook.physicalToVirtual(pages[pages.length - 1]);
 -        }
 -        return res;
 -    },
 -    getPagesOfGroup: function (groupId) {
 -        var res = [];
 -        for (var i = 1; i <= this.fluidbook.datas.pages; i++) {
 -            if (this._pagesToGroup[i] == groupId) {
 -                res.push(i);
 -            }
 -        }
 -        return res;
 -    },
 -    getPagesNumberInGroup: function (groupId) {
 -        return this.getPagesOfGroup(groupId).length;
 -    },
 -    getBookmarkedGroups: function (onlyBookmarked) {
 -        if (onlyBookmarked == undefined) {
 -            onlyBookmarked = true;
 -        }
 -
 -        var res = [];
 -        var nb;
 -        var groupId;
 -        for (var i = 1; i <= this.fluidbook.datas.pages;) {
 -            if (this.isBookmarked(i) || !onlyBookmarked) {
 -                groupId = this.getGroupOfPage(i);
 -                nb = this.getPagesNumberInGroup(groupId);
 -                res.push({page: i, nb: nb, name: this.getGroupName(groupId)});
 -                i += nb;
 -                continue;
 -            }
 -            i++;
 -        }
 -        return res;
 -    },
 -    getOrderedGroups: function () {
 -        return this.getBookmarkedGroups(false);
 -    },
 -    getGroupOfPage: function (page) {
 -        return this._pagesToGroup[page];
 -    },
 -    getNextPageInGroupOfPage: function (page) {
 -        var group = this.getLinkedPages(page);
 -        var index = group.indexOf(page);
 -        if (index == group.length - 1) {
 -            return false;
 -        }
 -        return group[index + 1];
 -    },
 -    getPreviousPageInGroupOfPage: function (page) {
 -        var group = this.getLinkedPages(page);
 -        var index = group.indexOf(page);
 -        if (index == 0) {
 -            return false;
 -        }
 -        return group[index - 1];
 -    },
 -    getNextGroupCover: function (page) {
 -        var group = this.getGroupOfPage(page);
 -        group = this.getNextGroup(group);
 -        if (group === false) {
 -            return false;
 -        }
 -        return this.getCoverOfGroup(group);
 -    },
 -    getPreviousGroupCover: function (page) {
 -        var group = this.getGroupOfPage(page);
 -        group = this.getPreviousGroup(group);
 -        if (group === false) {
 -            return false;
 -        }
 -        return this.getCoverOfGroup(group);
 -    },
 -    getCoverOfGroup: function (group) {
 -        var pages = this.getPagesOfGroup(group);
 -        if (pages.length) {
 -            return pages[0];
 -        }
 -        return false;
 -    },
 -    hasNextPageInGroup: function (page) {
 -        var group = this.getGroupOfPage(page);
 -        var pages = this.getPagesOfGroup(group);
 -        var i = pages.indexOf(page);
 -        if (i == pages.length - 1) {
 -            return false;
 -        }
 -        return true;
 -    },
 -    getLinkedPages: function (page) {
 -        var group = this.getGroupOfPage(page);
 -        if (group == -1 || isNaN(group)) {
 -            return [];
 -        }
 -        return this.getPagesOfGroup(group);
 -    },
 -    addBookmark: function (page, cornersOnly) {
 -        if (cornersOnly == undefined) {
 -            cornersOnly = false;
 -        }
 -        var pages = this.getLinkedPages(page);
 -        for (i in pages) {
 -            var page = pages[i];
 -            if (!cornersOnly) {
 -                this.bookmarks.push(page);
 -            }
 -        }
 -        if (!cornersOnly) {
 -            this.updateBookmarks();
 -            // TODO add stats call
 -        }
 -    },
 -    setCornersEnabled: function (page, enabled) {
 -        var bookmarks = $('.bookmark[data-page="' + page + '"]');
 -        if (enabled) {
 -            $(bookmarks).attr('data-enabled', 'enabled');
 -        } else {
 -            $(bookmarks).attr('data-enabled', null);
 -        }
 -    },
 -    disableCorners: function () {
 -        $(".bookmark").attr('data-enabled', null);
 -    },
 -    toggleBookmark: function (page) {
 -
 -        var pages = this.getLinkedPages(page);
 -        var add = false;
 -        for (var i in pages) {
 -            var p = pages[i];
 -            if (this.bookmarks.indexOf(p) > -1) {
 -                add = true;
 -                break;
 -            }
 -        }
 -        if (add) {
 -            this.removeBookmark(page);
 -        } else {
 -            this.addBookmark(page);
 -        }
 -    },
 -    removeBookmark: function (page) {
 -        var pages = this.getLinkedPages(page);
 -        for (var i in pages) {
 -            this.bookmarks = arrayRemove(this.bookmarks, pages[i]);
 -        }
 -        this.updateBookmarks();
 -    },
 -    updateBookmarks: function () {
 -        this.saveBookmarks();
 -        var $this = this;
 -
 -        this.disableCorners();
 -        $.each(this.bookmarks, function (k, v) {
 -            $this.setCornersEnabled(v, true);
 -        });
 -    },
 -    saveBookmarks: function () {
 -        this.fluidbook.cache.set('bookmarks', this.bookmarks);
 -    },
 -    getSavedBookmarks: function () {
 -        if (this.fluidbook.cache.isset('bookmarks')) {
 -            return this.fluidbook.cache.get('bookmarks');
 -        }
 -        return [];
 -    },
 -    isBookmarked: function (page) {
 -        return this.bookmarks.indexOf(page) > -1;
 -    },
 -    getBookmarkForPage: function (pageNr, onlyOne, allwaysAtRight) {
 -        if (onlyOne == undefined) {
 -            onlyOne = false;
 -        }
 -        if (allwaysAtRight == undefined) {
 -            allwaysAtRight = false;
 -        }
 -
 -        var to = pageNr;
 -        if (!onlyOne) {
 -            to++;
 -        }
 -
 -        var bookmarks = "";
 -        for (var i = pageNr; i <= to; i++) {
 -            if (i > 0 && i <= this.fluidbook.datas.pages) {
 -                var side;
 -                if (allwaysAtRight) {
 -                    side = 'right';
 -                } else {
 -                    side = (i % 2 == 0) ? 'left' : 'right';
 -                    if (this.fluidbook.l10n.dir == 'rtl') {
 -                        side = side == 'left' ? 'right' : 'left';
 -                    }
 -                }
 -
 -                bookmarks += "<a href=\"#\" class=\"bookmark " + side + "\" data-page=\"" + i + "\"";
 -                if (this.isBookmarked(i)) {
 -                    bookmarks += " data-enabled=\"enabled\"";
 -                }
 -                bookmarks += '></a>';
 -            }
 -        }
 -        return bookmarks;
 -    },
 -    getView: function () {
 -        var c = this.getIndex(false);
 -        if (c === false) {
 -            return c;
 -        }
 -        var index = '<div class="bookmarkssub"><div class="caption">' + this.fluidbook.menu.closeButton() + '<h2>' + this.fluidbook.l10n.__('bookmarks') + '</h2>';
 -        index += '</div>';
 -        index += c;
 -        index += '</div>';
 -        return index;
 -    },
 -    hasBookmarkedPages: function (all) {
 -        if (all == undefined) {
 -            all = false;
 -        }
 -
 -        if (all == false) {
 -            groups = this.getBookmarkedGroups();
 -        } else {
 -            groups = this.getOrderedGroups();
 -        }
 -
 -        if (groups.length == 0) {
 -            return false;
 -        }
 -        return true;
 -    },
 -    getIndex: function (all, onlyGroup) {
 -        if (all == undefined) {
 -            all = false;
 -        }
 -        var groups;
 -
 -        if (all == false) {
 -            groups = this.getBookmarkedGroups();
 -        } else {
 -            groups = this.getOrderedGroups();
 -        }
 -
 -        if (groups.length == 0) {
 -            return false;
 -        }
 -
 -        var index = '<div class="content"><div id="indexView" class="bookmarkView">';
 -
 -        if (onlyGroup == undefined) {
 -            for (var g = 0; g < groups.length; g++) {
 -                var group = groups[g];
 -                var pages = [];
 -                for (var i = 0; i < group.nb; i++) {
 -                    pages.push(group.page + i);
 -                }
 -
 -                index += '<div class="doubleThumb simple left" page="' + group.page + '" data-pages="' + pages.join(',') + '">';
 -                index += '<div class="thumb left"><a href="#/page/' + group.page + '">' + this.fluidbook.loader.getImage('data/thumbnails/p' + group.page + '.jpg') + '</a><span class="number">' + group.name + '</span>';
 -                if (this.fluidbook.bookmarks.enabled) {
 -                    index += this.fluidbook.bookmarks.getBookmarkForPage(group.page, true, true);
 -                }
 -                index += '</div>';
 -                index += '</div>';
 -            }
 -        } else {
 -            var group = groups[this.getGroupOfPage(onlyGroup)];
 -
 -            var pages = [];
 -            for (var i = 0; i < group.nb; i++) {
 -                pages.push(group.page + i);
 -            }
 -
 -            for (i in pages) {
 -                var p = pages[i];
 -                index += '<div class="doubleThumb simple left" page="' + p + '" data-pages="' + p + '">';
 -                index += '<div class="thumb left"><a href="#/page/' + p + '">' + this.fluidbook.loader.getImage('data/thumbnails/p' + p + '.jpg') + '</a><span class="number">' + this.fluidbook.physicalToVirtual(p) + '</span>';
 -                if (this.fluidbook.bookmarks.enabled) {
 -                    index += this.fluidbook.bookmarks.getBookmarkForPage(p, true, true);
 -                }
 -                index += '</div>';
 -                index += '</div>';
 -            }
 -        }
 -        index += '</div>';
 -        index += '<div class="fonctions">';
 -        if (this.fluidbook.datas.friend) {
 -            index += '<a class="send" href="#">' + this.fluidbook.l10n.__('send') + '</a>';
 -
 -        }
 -        if (this.fluidbook.datas.print || this.fluidbook.datas.pdf) {
 -            index += '<a class="print" href="#">' + this.fluidbook.l10n.__('download') + '</a>';
 -        }
 -        index += '</div>';
 -        index += '</div>';
 -        return index;
 -    }
 +              $(document).on('click', '.bookmarkssub a.send', function() {
 +                      var subject = '%title%';
 +                      if ($this.fluidbook.datas.bookmark_email_title != '') {
 +                              subject = $this.fluidbook.datas.bookmark_email_title;
 +                      }
 +
 +
 +                      var body = $this.fluidbook.l10n.__('Please see the attached files from "%title%".');
 +                      if ($this.fluidbook.datas.bookmark_email_body != '') {
 +                              body = $this.fluidbook.datas.bookmark_email_body;
 +                      }
 +
 +                      subject = subject.replace(/\%title\%/gi, $this.fluidbook.datas.title);
 +                      body = trim(body.replace(/\%title\%/gi, $this.fluidbook.datas.title), ' .');
 +                      body += " : " + $this.getPDF();
 +
 +                      $this.fluidbook.intentShare(subject, body);
 +                      return false;
 +              });
 +
 +              $(document).on('click', '.bookmarkssub a.print', function() {
 +                      $this.fluidbook._openFile($this.getPDF(), $(this), 'pdf', $this.getBookmarksCompacted() + '.pdf');
 +                      return false;
 +              });
 +
 +              for (var g in this.fluidbook.datas.bookmarkGroups) {
 +
 +                      var group = this.fluidbook.datas.bookmarkGroups[g];
 +                      this.addGroup(group.page, group.nb, group.name);
 +              }
 +              this.completeGroups();
 +              this._groupOrder.sort($.proxy(this.sortGroup, this));
 +
 +              this.bookmarks = this.getSavedBookmarks();
 +              for (var i in this.bookmarks) {
 +                      this.addBookmark(this.bookmarks[i], true);
 +              }
 +      },
 +      sortGroup: function(a, b) {
 +              var p_a = this.getPagesOfGroup(a)[0];
 +              var p_b = this.getPagesOfGroup(b)[0];
 +              return p_a - p_b;
 +      },
 +      sortnumeric: function(a, b) {
 +              return a - b;
 +      },
 +      getPDF: function() {
 +              return  'https://workshop.fluidbook.com/s/e/' + this.fluidbook.datas.cid + '/' + this.getBookmarksCompacted();
 +      },
 +      getBookmarksCompacted: function() {
 +              this.bookmarks.sort(this.sortnumeric);
 +
 +              var g = [];
 +              var rs = 0;
 +              var re = 0;
 +              for (var i = 0; i < this.bookmarks.length; i++) {
 +                      var b = this.bookmarks[i];
 +                      if (rs == 0) {
 +                              rs = re = b;
 +                              continue;
 +                      }
 +                      if (re + 1 == b) {
 +                              re = b;
 +                              continue;
 +                      }
 +                      if (rs == re) {
 +                              g.push('' + rs);
 +                      } else {
 +                              g.push(rs + '-' + re);
 +                      }
 +
 +                      rs = re = b;
 +              }
 +
 +              if (rs != 0) {
 +                      if (rs == re) {
 +                              g.push('' + rs);
 +                      } else {
 +                              g.push(rs + '-' + re);
 +                      }
 +              }
 +
 +              return g.join(',');
 +      },
 +      addGroup: function(from, nb, name) {
 +              var to = Math.min(from + (nb - 1), this.fluidbook.datas.pages);
 +              for (var i = from; i <= to; i++)
 +              {
 +                      this._pagesToGroup[i] = this._groups;
 +              }
 +              this._groupNames[this._groups] = name;
 +              this._groupOrder.push(this._groups);
 +              this._groups++;
 +      },
 +      completeGroups: function() {
 +              for (var i = 1; i <= this.fluidbook.datas.pages; i++) {
 +                      if (this._pagesToGroup[i] == undefined || this._pagesToGroup[i] == null) {
 +                              this._pagesToGroup[i] = this._groups;
 +                              this._groupOrder.push(this._groups);
 +                              this._groups++;
 +                      }
 +              }
 +      },
 +      getPreviousGroup: function(group) {
 +              var o = this.getOrderGroup(group);
 +              if (o == -1) {
 +                      return false;
 +              }
 +              o--;
 +              return this._groupOrder[o];
 +      },
 +      getNextGroup: function(group) {
 +              var o = this.getOrderGroup(group);
 +              if (o == -1) {
 +                      return false;
 +              }
 +              o++;
 +              return this._groupOrder[o];
 +      },
 +      getOrderGroup: function(group) {
 +              return this._groupOrder.indexOf(group);
 +      },
 +      getGroupName: function(groupId)
 +      {
 +              var res = '';
 +              if (this._groupNames[groupId] != undefined) {
 +                      res = this._groupNames[groupId];
 +              }
 +              if (res == '') {
 +                      var pages = this.getPagesOfGroup(groupId);
 +                      res = this.fluidbook.physicalToVirtual(pages[0]);
 +                      if (pages.length == 1) {
 +                              return res;
 +                      }
 +                      res += " - " + this.fluidbook.physicalToVirtual(pages[pages.length - 1]);
 +              }
 +              return res;
 +      },
 +      getPagesOfGroup: function(groupId)
 +      {
 +              var res = [];
 +              for (var i = 1; i <= this.fluidbook.datas.pages; i++) {
 +                      if (this._pagesToGroup[i] == groupId) {
 +                              res.push(i);
 +                      }
 +              }
 +              return res;
 +      },
 +      getPagesNumberInGroup: function(groupId) {
 +              return this.getPagesOfGroup(groupId).length;
 +      },
 +      getBookmarkedGroups: function(onlyBookmarked)
 +      {
 +              if (onlyBookmarked == undefined) {
 +                      onlyBookmarked = true;
 +              }
 +
 +              var res = [];
 +              var nb;
 +              var groupId;
 +              for (var i = 1; i <= this.fluidbook.datas.pages; ) {
 +                      if (this.isBookmarked(i) || !onlyBookmarked) {
 +                              groupId = this.getGroupOfPage(i);
 +                              nb = this.getPagesNumberInGroup(groupId);
 +                              res.push({page: i, nb: nb, name: this.getGroupName(groupId)});
 +                              i += nb;
 +                              continue;
 +                      }
 +                      i++;
 +              }
 +              return res;
 +      },
 +      getOrderedGroups: function() {
 +              return this.getBookmarkedGroups(false);
 +      },
 +      getGroupOfPage: function(page) {
 +              return this._pagesToGroup[page];
 +      },
 +      getNextPageInGroupOfPage: function(page) {
 +              var group = this.getLinkedPages(page);
 +              var index = group.indexOf(page);
 +              if (index == group.length - 1) {
 +                      return false;
 +              }
 +              return group[index + 1];
 +      },
 +      getPreviousPageInGroupOfPage: function(page) {
 +              var group = this.getLinkedPages(page);
 +              var index = group.indexOf(page);
 +              if (index == 0) {
 +                      return false;
 +              }
 +              return group[index - 1];
 +      },
 +      getNextGroupCover: function(page) {
 +              var group = this.getGroupOfPage(page);
 +              group = this.getNextGroup(group);
 +              if (group === false) {
 +                      return false;
 +              }
 +              return this.getCoverOfGroup(group);
 +      },
 +      getPreviousGroupCover: function(page) {
 +              var group = this.getGroupOfPage(page);
 +              group = this.getPreviousGroup(group);
 +              if (group === false) {
 +                      return false;
 +              }
 +              return this.getCoverOfGroup(group);
 +      },
 +      getCoverOfGroup: function(group) {
 +              var pages = this.getPagesOfGroup(group);
 +              if (pages.length) {
 +                      return pages[0];
 +              }
 +              return false;
 +      },
 +      hasNextPageInGroup: function(page) {
 +              var group = this.getGroupOfPage(page);
 +              var pages = this.getPagesOfGroup(group);
 +              var i = pages.indexOf(page);
 +              if (i == pages.length - 1) {
 +                      return false;
 +              }
 +              return true;
 +      },
 +      getLinkedPages: function(page) {
 +              var group = this.getGroupOfPage(page);
 +              if (group == -1 || isNaN(group)) {
 +                      return [];
 +              }
 +              return this.getPagesOfGroup(group);
 +      },
 +      addBookmark: function(page, cornersOnly)
 +      {
 +              if (cornersOnly == undefined) {
 +                      cornersOnly = false;
 +              }
 +              var pages = this.getLinkedPages(page);
 +              for (i in pages)
 +              {
 +                      var page = pages[i];
 +                      if (!cornersOnly) {
 +                              this.bookmarks.push(page);
 +                      }
 +              }
 +              if (!cornersOnly) {
 +                      this.updateBookmarks();
 +                      // TODO add stats call
 +              }
 +      },
 +      setCornersEnabled: function(page, enabled) {
 +              var bookmarks = $('.bookmark[data-page="' + page + '"]');
 +              if (enabled) {
 +                      $(bookmarks).attr('data-enabled', 'enabled');
 +              } else {
 +                      $(bookmarks).attr('data-enabled', null);
 +              }
 +      },
 +      disableCorners: function() {
 +              $(".bookmark").attr('data-enabled', null);
 +      },
 +      toggleBookmark: function(page) {
 +
 +              var pages = this.getLinkedPages(page);
 +              var add = false;
 +              for (var i in pages) {
 +                      var p = pages[i];
 +                      if (this.bookmarks.indexOf(p) > -1) {
 +                              add = true;
 +                              break;
 +                      }
 +              }
 +              if (add) {
 +                      this.removeBookmark(page);
 +              } else {
 +                      this.addBookmark(page);
 +              }
 +      },
 +      removeBookmark: function(page) {
 +              var pages = this.getLinkedPages(page);
 +              for (var i in pages) {
 +                      this.bookmarks = arrayRemove(this.bookmarks, pages[i]);
 +              }
 +              this.updateBookmarks();
 +      },
 +      updateBookmarks: function() {
 +              this.saveBookmarks();
 +              var $this = this;
 +
 +              this.disableCorners();
 +              $.each(this.bookmarks, function(k, v) {
 +                      $this.setCornersEnabled(v, true);
 +              });
 +      },
 +      saveBookmarks: function() {
 +              this.fluidbook.cache.set('bookmarks', this.bookmarks);
 +      },
 +      getSavedBookmarks: function() {
 +              if (this.fluidbook.cache.isset('bookmarks')) {
 +                      return this.fluidbook.cache.get('bookmarks');
 +              }
 +              return [];
 +      },
 +      isBookmarked: function(page) {
 +              return this.bookmarks.indexOf(page) > -1;
 +      },
 +      getBookmarkForPage: function(pageNr, onlyOne, allwaysAtRight) {
 +              if (onlyOne == undefined) {
 +                      onlyOne = false;
 +              }
 +              if (allwaysAtRight == undefined) {
 +                      allwaysAtRight = false;
 +              }
 +
 +              var to = pageNr;
 +              if (!onlyOne) {
 +                      to++;
 +              }
 +
 +              var bookmarks = "";
 +              for (var i = pageNr; i <= to; i++) {
 +                      if (i > 0 && i <= this.fluidbook.datas.pages) {
 +                              var side;
 +                              if (allwaysAtRight) {
 +                                      side = 'right';
 +                              } else {
 +                                      side = (i % 2 == 0) ? 'left' : 'right';
 +                                      if (this.fluidbook.l10n.dir == 'rtl') {
 +                                              side = side == 'left' ? 'right' : 'left';
 +                                      }
 +                              }
 +
 +                              bookmarks += "<a href=\"#\" class=\"bookmark " + side + "\" data-page=\"" + i + "\"";
 +                              if (this.isBookmarked(i)) {
 +                                      bookmarks += " data-enabled=\"enabled\"";
 +                              }
 +                              bookmarks += '></a>';
 +                      }
 +              }
 +              return bookmarks;
 +      },
 +      getView: function() {
 +              var c = this.getIndex(false);
 +              if (c === false) {
 +                      return c;
 +              }
 +              var index = '<div class="bookmarkssub"><div class="caption"><a href="#" class="back miniOnPortrait"><span class="hideOnPortrait">' + this.fluidbook.l10n.__('back') + '</span></a><h2>' + this.fluidbook.l10n.__('bookmarks') + '</h2>';
 +              index += '<div class="fonctions">';
 +              if (this.fluidbook.datas.friend) {
 +                      index += '<a class="send miniOnPortrait" href="#"><span class="hideOnPortrait">' + this.fluidbook.l10n.__('send') + '</span></a>';
 +
 +              }
 +              if (this.fluidbook.datas.print || this.fluidbook.datas.pdf) {
 +                      index += '<a class="print miniOnPortrait" href="#"><span class="hideOnPortrait">' + this.fluidbook.l10n.__('download') + '</span></a>';
 +              }
 +              index += '</div>';
 +              index += '</div>';
 +              index += '' + c + '</div>';
 +              return index;
 +      },
 +      hasBookmarkedPages: function(all) {
 +              if (all == undefined) {
 +                      all = false;
 +              }
 +
 +              if (all == false) {
 +                      groups = this.getBookmarkedGroups();
 +              } else {
 +                      groups = this.getOrderedGroups();
 +              }
 +
 +              if (groups.length == 0) {
 +                      return false;
 +              }
 +              return true;
 +      },
 +      getIndex: function(all, onlyGroup) {
 +              if (all == undefined) {
 +                      all = false;
 +              }
 +              var groups;
 +
 +              if (all == false) {
 +                      groups = this.getBookmarkedGroups();
 +              } else {
 +                      groups = this.getOrderedGroups();
 +              }
 +
 +              if (groups.length == 0) {
 +                      return false;
 +              }
 +
 +              var index = '<div class="content"><div id="indexView" class="bookmarkView">';
 +
 +              if (onlyGroup == undefined) {
 +                      for (var g = 0; g < groups.length; g++) {
 +                              var group = groups[g];
 +                              var pages = [];
 +                              for (var i = 0; i < group.nb; i++) {
 +                                      pages.push(group.page + i);
 +                              }
 +
 +                              index += '<div class="doubleThumb simple left" page="' + group.page + '" data-pages="' + pages.join(',') + '">';
 +                              index += '<div class="thumb left"><a href="#/page/' + group.page + '">' + this.fluidbook.loader.getImage('data/thumbnails/p' + group.page + '.jpg') + '</a><span class="number">' + group.name + '</span>';
 +                              if (this.fluidbook.bookmarks.enabled) {
 +                                      index += this.fluidbook.bookmarks.getBookmarkForPage(group.page, true, true);
 +                              }
 +                              index += '</div>';
 +                              index += '</div>';
 +                      }
 +              } else {
 +                      var group = groups[this.getGroupOfPage(onlyGroup)];
 +
 +                      var pages = [];
 +                      for (var i = 0; i < group.nb; i++) {
 +                              pages.push(group.page + i);
 +                      }
 +
 +                      for (i in pages) {
 +                              var p = pages[i];
 +                              index += '<div class="doubleThumb simple left" page="' + p + '" data-pages="' + p + '">';
 +                              index += '<div class="thumb left"><a href="#/page/' + p + '">' + this.fluidbook.loader.getImage('data/thumbnails/p' + p + '.jpg') + '</a><span class="number">' + this.fluidbook.physicalToVirtual(p) + '</span>';
 +                              if (this.fluidbook.bookmarks.enabled) {
 +                                      index += this.fluidbook.bookmarks.getBookmarkForPage(p, true, true);
 +                              }
 +                              index += '</div>';
 +                              index += '</div>';
 +                      }
 +              }
 +              index += '</div></div>';
 +              return index;
 +      }
  };
Simple merge
Simple merge
Simple merge
index 3fa1a960ede8a9bd350250c708198c5da6227053,82203b8e381ea8161a2cd6e3f9a9bf445ce4a2b5..ecb0e2c9cf799a6caaff99a7be24ff129c8d558a
@@@ -1718,10 -1756,10 +1738,10 @@@ a.button 
        top: 0px;
        left: 0px;
        padding: 5px 10px;
-       border-radius: 5px;
+       border-radius: 1px;
        display: none;
        font-size: 0.8rem;
 -      max-width: 180px;
 +      max-width: 340px;
        z-index: 100;
        white-space: pre-wrap;
        line-height: 1.15rem;