From: Stephen Cameron Date: Fri, 2 Jun 2017 10:59:09 +0000 (+0200) Subject: Merge branch 'menus' into html5video X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=1d138aa80762264d017d96f247c98616ab188ce8;p=fluidbook-html5.git Merge branch 'menus' into html5video --- 1d138aa80762264d017d96f247c98616ab188ce8 diff --cc js/libs/fluidbook/fluidbook.bookmarks.js index d965af3d,18b9fda7..8764368f --- a/js/libs/fluidbook/fluidbook.bookmarks.js +++ b/js/libs/fluidbook/fluidbook.bookmarks.js @@@ -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 += "' + this.fluidbook.l10n.__('bookmarks') + ''; - 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 += '
'; - index += '
'; - if (this.fluidbook.datas.friend) { - index += '' + this.fluidbook.l10n.__('send') + ''; - - } - if (this.fluidbook.datas.print || this.fluidbook.datas.pdf) { - index += '' + this.fluidbook.l10n.__('download') + ''; - } - index += '
'; - index += '
'; - 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 += "

' + this.fluidbook.l10n.__('bookmarks') + '

'; + index += '
'; + if (this.fluidbook.datas.friend) { + index += '' + this.fluidbook.l10n.__('send') + ''; + + } + if (this.fluidbook.datas.print || this.fluidbook.datas.pdf) { + index += '' + this.fluidbook.l10n.__('download') + ''; + } + index += '
'; + index += ''; + index += '' + c + ''; + 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; + } }; diff --cc style/fluidbook.less index 3fa1a960,82203b8e..ecb0e2c9 --- a/style/fluidbook.less +++ b/style/fluidbook.less @@@ -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;