From 00ccf5ee1c32cfc8459334cd3c2bd42374ac479c Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Mon, 12 Jun 2017 19:00:13 +0200 Subject: [PATCH] done #901 @0:10 --- js/libs/fluidbook/fluidbook.bookmarks.js | 860 +++++++++++------------ 1 file changed, 427 insertions(+), 433 deletions(-) diff --git a/js/libs/fluidbook/fluidbook.bookmarks.js b/js/libs/fluidbook/fluidbook.bookmarks.js index 5da80d87..af005b73 100644 --- a/js/libs/fluidbook/fluidbook.bookmarks.js +++ b/js/libs/fluidbook/fluidbook.bookmarks.js @@ -1,18 +1,18 @@ function FluidbookBookmarks(fluidbook) { - this.fluidbook = fluidbook; - this.enabled = false; - this.bookmarks = []; + this.fluidbook = fluidbook; + this.enabled = false; + this.bookmarks = []; - this._pagesToGroup = []; - this._groupNames = []; - this._groups = 0; - this._groupOrder = []; + this._pagesToGroup = []; + this._groupNames = []; + this._groups = 0; + this._groupOrder = []; - this._cornersIndex = []; - this._cornersPages = []; + this._cornersIndex = []; + this._cornersPages = []; - this.enabled = this.fluidbook.datas.bookmark; - this.init(); + this.enabled = this.fluidbook.datas.bookmark; + this.init(); } FluidbookBookmarks.prototype = { @@ -23,428 +23,422 @@ FluidbookBookmarks.prototype = { 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 += " -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 += "' + this.fluidbook.l10n.__('bookmarks') + ''; - index += ''; + index += ''; index += c; - index += ''; - 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 = '
'; - - 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 += '
'; - index += '
' + this.fluidbook.loader.getImage('data/thumbnails/p' + group.page + '.jpg') + '' + group.name + ''; - if (this.fluidbook.bookmarks.enabled) { - index += this.fluidbook.bookmarks.getBookmarkForPage(group.page, true, true); - } - index += '
'; - index += '
'; - } - } 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 += '
'; - index += '
' + this.fluidbook.loader.getImage('data/thumbnails/p' + p + '.jpg') + '' + this.fluidbook.physicalToVirtual(p) + ''; - if (this.fluidbook.bookmarks.enabled) { - index += this.fluidbook.bookmarks.getBookmarkForPage(p, true, true); - } - index += '
'; - index += '
'; - } - } + index += '
'; + 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 = '
'; + + 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 += '
'; + index += '
' + this.fluidbook.loader.getThumbImage(group.page) + '' + group.name + ''; + if (this.fluidbook.bookmarks.enabled) { + index += this.fluidbook.bookmarks.getBookmarkForPage(group.page, true, true); + } + index += '
'; + index += '
'; + } + } 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 += '
'; + index += '
' + this.fluidbook.loader.getThumbImage(p) + '' + this.fluidbook.physicalToVirtual(p) + ''; + if (this.fluidbook.bookmarks.enabled) { + index += this.fluidbook.bookmarks.getBookmarkForPage(p, true, true); + } + index += '
'; + index += '
'; + } + } index += '
'; index += '
'; if (this.fluidbook.datas.friend) { @@ -456,6 +450,6 @@ FluidbookBookmarks.prototype = { } index += '
'; index += '
'; - return index; - } + return index; + } }; \ No newline at end of file -- 2.39.5