return;
}
$(doublePage).find('.' + position).remove();
- var page = '<div class="page ' + position + '" id="page_' + pageNr + '" data-page="' + pageNr + '"><div class="background" page="' + pageNr + '"></div><div class="ctlinks"></div><div class="texts" highlight=""></div><div class="clinks"></div><div class="shade"></div></div>';
+ var page = '<div class="page ' + position + '" id="page_' + pageNr + '" data-page="' + pageNr + '"><div class="background" page="' + pageNr + '"></div><div class="ctlinks" data-blendmode="normal"></div><div class="texts" highlight=""></div><div class="clinks" data-blendmode="normal"></div><div class="shade"></div></div>';
+ $(doublePage).append(page);
+ },
+ hidePage: function (position) {
+ $("#pages ." + position).hide();
+ },
+ canChangePage: function () {
+ try {
+ return this.pagetransitions.canChangePage();
+ } catch (e) {
+
+ }
+ return false;
+ },
+ initVideos: function () {
+ this.video.initVideos();
+ },
+ getNextOffset: function () {
+ var offset = 2;
+ if (this.displayOnePage) {
+ offset = 1;
+ }
+ this.transitionAxis = 'x';
+ return offset;
+ },
+ goNextPage: function () {
+ if (!this.canChangePage()) {
+ return;
+ }
+
+ if (this.search.resultsNavActive()) {
+ this.search.nextResultsPage();
+ } else {
+ this.transitionAxis = 'x';
+ this.setCurrentPage(this.normalizePage(this.currentPage) + this.getNextOffset());
+ }
+ },
+ goFirstPage: function () {
+ if (!this.canChangePage()) {
+ return;
+ }
+ this.transitionAxis = 'x';
+ this.setCurrentPage(1);
+ },
+ goPreviousPage: function () {
+ if (!this.canChangePage()) {
+ return;
+ }
+
+ if (this.search.resultsNavActive()) {
+ this.search.previousResultsPage();
+ } else {
+ this.transitionAxis = 'x';
+ this.setCurrentPage(this.normalizePage(this.currentPage) - this.getNextOffset());
+ }
+ },
+ goLastPage: function () {
+ if (!this.canChangePage()) {
+ return;
+ }
+ this.transitionAxis = 'x';
+ this.setCurrentPage(this.contentlock.getMaxPage());
+ },
+ goNextChapter: function () {
+ if (!this.canChangePage()) {
+ return;
+ }
+ var next = this.bookmarks.getNextGroupCover(this.currentPage);
+ if (next === false) {
+ return;
+ }
+ this.transitionAxis = 'x';
+ this.setCurrentPage(this.normalizePage(next));
+ },
+ goPreviousChapter: function () {
+ if (!this.canChangePage()) {
+ return;
+ }
+ var prev = this.bookmarks.getPreviousGroupCover(this.currentPage);
+ if (prev === false) {
+ return;
+ }
+ this.transitionAxis = 'x';
+ this.setCurrentPage(this.normalizePage(prev));
+ },
+ goNextChapterPage: function () {
+ if (!this.canChangePage()) {
+ return;
+ }
+
+ var next = this.bookmarks.getNextPageInGroupOfPage(this.currentPage);
+ if (next === false) {
+ return;
+ }
+ this.transitionAxis = 'y';
+ this.setCurrentPage(this.normalizePage(next));
+ },
+ goPreviousChapterPage: function () {
+ if (!this.canChangePage()) {
+ return;
+ }
+
+ var prev = this.bookmarks.getPreviousPageInGroupOfPage(this.currentPage);
+ if (prev === false) {
+ return;
+ }
+ this.transitionAxis = 'y';
+ this.setCurrentPage(this.normalizePage(prev));
+ },
+ normalizePage: function (page) {
+ page = Math.max(1, Math.min(page, this.contentlock.getMaxPage()));
+ if (!this.displayOnePage && page % 2 === 1) {
+ page--;
+ }
+ return page;
+ },
+ setCurrentPage: function (page) {
+ window.location.hash = "#/page/" + this.normalizePage(page);
+ },
+ changeAddress: function () {
+ var hash = window.location.hash;
+ if ($('.mview[data-hash="' + hash + '"]').length > 0) {
+ return;
+ }
+ var $this = this;
+ var page;
+ var args = hash.split('/');
+ var defaultStartPage = 1;
+
+ if (FLUIDBOOK_START_PAGE !== undefined) {
+ defaultStartPage = FLUIDBOOK_START_PAGE;
+ }
+
+ if (args.length <= 1 || args[1] == '' || args[1] == undefined) {
+ if (this.landingpage !== undefined && this.landingpage.hasLandingPage) {
+ window.location.hash = '/landing';
+ return;
+ }
+ return this.setCurrentPage(defaultStartPage);
+ }
+
+ // Handle flash URL. See #2640
+ if (args.length > 1) {
+ var a1 = args[1];
+ if (a1.match(/^[0-9]+$/)) {
+ args = ['#', 'page', a1];
+ }
+ }
+
+ $(this).trigger('fluidbook.hashchange', [args.slice()]);
+
+ if (args[1] === 'closeview') {
+ s
+ return this.setCurrentPage(this.currentPage);
+ } else if (args[1] === 'page') {
+ var anchor = false;
+ if (fluidbook.settings.pageLabels[args[2]] !== undefined) {
+ page = fluidbook.settings.pageLabels[args[2]];
+ anchor = args[2];
+ } else {
+ page = parseInt(args[2]);
+ }
+
+ if (isNaN(page) || page == undefined) {
+ return this.setCurrentPage('1');
+ }
+ this.currentPageURL = page;
+
+ if (page !== $this.currentPage) {
+ $($this).trigger('fluidbook.page.navigation', [page]);
+ $($this).trigger('changePage', [page]);
+ }
+ if (this.landingpage !== undefined) {
+ this.landingpage.hide();
+ }
+
+ this.menu._closeView(function () {
+ if (page !== $this.currentPage) {
+ $this.pagetransitions.pageTransition(page);
+ $this.stats.track(0, page);
+ if (anchor) {
+ $this.scrollToAnchorAfterTransition(anchor);
+ }
+ } else {
+ if (anchor) {
+ $this.scrollToAnchor(anchor);
+ }
+ }
+ $this.zoom.resetZoom();
+ $this.splash.hide();
+ }, true);
+ } else if (args[1] === 'landing') {
+ $this.splash.hide();
+ if (this.landingpage !== undefined) {
+ this.landingpage.show();
+ }
+ } else {
+ var view = args[1];
+
+ if (this.currentPage === -1) {
+ // Allow direct linking to specific types of content
+ if (view === 'multimedia' || view === 'video' || view === 'iframe' || view === 'slideshow') {
+ var searchURL = args.join('/');
+ $.each(this.settings.links, function (pageNr, links) {
+ var hl = $('<root>' + links + '</root>');
+ if ($(hl).find('[href="' + searchURL + '"]').length > 0) {
+ $this.currentPage = pageNr;
+ return false;
+ }
+ });
+ if (this.currentPage === -1) {
+ this.currentPage = 0;
+ }
+ } else {
+ this.currentPage = 0;
+ }
+
+ // Jump to correct page containing this content
+ // TODO: Investigate why this doesn't work properly - it should go to the page containing the link but it seems to get reset to 0, possibly caused by a resize function...
+ $this.pagetransitions.pageTransition(this.currentPage);
+ }
+ this.menu.openView(view, args[2], args[3], function () {
+ $this.splash.hide();
+ });
+ }
+ return;
+ },
+
+ scrollToAnchor: function (anchor) {
+ if (!this.mobilefirst.enabled) {
+ return;
+ }
+ var id = $('[data-anchor="' + anchor + '"]').attr('id');
+ TweenMax.to($("#scroll"), 0.5, {scrollTo: {y: '#' + id, offsetY: $('header').outerHeight() + 10}});
+ },
+
+ scrollToAnchorAfterTransition: function (anchor) {
+ if (!this.mobilefirst.enabled) {
+ return;
+ }
+ var $this = this;
+ if (this.splash.isVisible()) {
+ $(this).one('fluidbook.splash.hide', function () {
+ $this.scrollToAnchor(anchor);
+ });
+ } else {
+ $(this).one('fluidbook.page.change.end', function () {
+ $this.scrollToAnchor(anchor);
+ });
+ }
+ },
+
+ silentChangePage: function (page, transition) {
+ if (page !== this.currentPage) {
+ if (transition !== true) {
+ this.currentPage = page;
+ }
+ this.pagetransitions.pageTransition(page);
+ }
+ },
+
+ reloadCurrentPage: function () {
+ this.pageTransition(this.currentPage);
+ },
+
+ readingPage: function (side) {
+ if (!this.displayOnePage) {
+ var page = this.currentPage;
+ var change = false;
+ if (side === 'left' && page % 2 === 1) {
+ page--;
+ change = true;
+ } else if (side === 'right' && page % 2 === 0) {
+ page++;
+ change = true;
+ }
+ if (change) {
+ window.location.hash = "/page/" + page;
+ }
+ }
+ },
+ getButtonsVisibility: function (page) {
+ if (page === undefined) {
+ page = this.currentPage;
+ }
+
+ var max = this.contentlock.getMaxPage();
+ if (this.contentlock.getMaxPage() % 2 === 1 &&
+ this.settings.mobileNavigationType !== 'portrait' &&
+ this.settings.mobileNavigationType !== 'mobilefirst' &&
+ this.resize.orientation !== 'portrait') {
+ max--;
+ }
+
+ var next = page < max;
+ var previous = (page > 1);
+ return {previous: previous, next: next};
+ },
+ hideUnnecessaryButtons: function (page) {
+ var speed = 500;
+ if (page === undefined) {
+ page = this.currentPage;
+ speed = 0;
+ }
+
+ var visibility = this.getButtonsVisibility(page);
+
+ if (visibility.next) {
+ this.showArrows("#next-arrows");
+ } else {
+ this.hideArrows("#next-arrows");
+ }
+
+ if (visibility.previous) {
+ this.showArrows("#prev-arrows");
+ } else {
+ this.hideArrows("#prev-arrows");
+ }
+ },
+
+ hideArrows: function (id) {
+ $(id).addClass('hidden').attr('aria-hidden', 'true');
+ $(id).find('a').prop('tabindex', -1);
+ },
+
+ showArrows: function (id) {
+ $(id).removeClass('hidden').attr('aria-hidden', 'false');
+ $(id).find('a').prop('tabindex', 0);
+ },
+
+ updateShadows: function (page, animationDuration) {
+ if (animationDuration === undefined) {
+ animationDuration = 0;
+ }
+ animationDuration *= 1000;
+ var delay;
+ if (animationDuration === 0) {
+ delay = 0;
+ } else {
+ delay = animationDuration;
+ }
+
+ var left = true, right = true;
+ if (!this.displayOnePage) {
+ if ((page <= 1 && this.l10n.dir === 'ltr') || (page >= this.contentlock.getMaxPage() && this.l10n.dir === 'rtl')) {
+ left = false;
+ } else if ((page <= 1 && this.l10n.dir === 'rtl') || (page >= this.contentlock.getMaxPage() && this.l10n.dir === 'ltr')) {
+ right = false;
+ }
+ }
+
+ var s = $("#shadow,#edges");
+
+ var s_in = [];
+ var s_out = [];
+
+ if (left) {
+ s_in.push(".left.hidden");
+ } else {
+ s_out.push(".left:not('.hidden')");
+ }
+
+ if (right) {
+ s_in.push(".right.hidden");
+ } else {
+ s_out.push(".right:not('.hidden')");
+ }
+
+ if (s_in.length > 0) {
+ setTimeout(function () {
+ $(s).children(s_in.join(',')).removeClass('hidden');
+ }, delay);
+ }
+ if (s_out.length > 0) {
+ $(s).children(s_out.join(',')).addClass('hidden');
+ }
+ }
+ ,
+ showAllButtons: function () {
+ $("#next-arrows,#prev-arrows").addClass('help').show();
+ },
+
+ setPageNumbers: function () {
+ $("#pagesnumbers .left").html(this.getPageNumberOfSide('left', true));
+ $("#pagesnumbers .right").html(this.getPageNumberOfSide('right', true));
+ $("#pagesnumbers").removeClass('hidden');
+ },
+ getPhysicalPageNumberOfSide: function (side, strict) { // Side should be 'left' or 'right'
+ if (undefined === strict) {
+ strict = false;
+ }
+
+ var pageSide = $("#currentDoublePage").find('.' + side);
+ if (pageSide.length === 0) {
+ if (strict) {
+ return false;
+ }
+ pageSide = $("#currentDoublePage").find('.page').eq(0);
+ }
+ return $(pageSide).data('page');
+ },
+ getDisplayedPages: function () {
+ var res = [];
+ var left = this.getPhysicalPageNumberOfSide('left', true);
+ var right = this.getPhysicalPageNumberOfSide('right', true);
+ if (left !== false) {
+ res.push(left);
+ }
+ if (right !== false) {
+ res.push(right);
+ }
+ return res;
+ },
+
+ getPageNumberOfSide: function (side, strict) {
+ if (undefined === strict) {
+ strict = false;
+ }
+
+ var physical = this.getPhysicalPageNumberOfSide(side, strict);
+ if (!physical || physical === 1) {
+ return '';
+ }
+ return this.physicalToVirtual(physical);
+ },
+ clickLogo: function () {
+ if (this.settings.url_link == '' || this.settings.url_link == 'http://') {
+ return;
+ }
+
+ if (this.settings.url_link.indexOf('#') === 0) {
+ window.location.hash = this.settings.url_link;
+ } else {
+ this.wopen(this.settings.url_link, '_blank');
+ }
+ },
+
+ addWaiter: function (reset) {
+ if (reset == undefined) {
+ reset = false;
+ }
+ if (reset) {
+ this.resetWaiters();
+ }
+ var rand = Math.round(Math.random() * 100000);
+ this.waiters.push(rand);
+ return rand;
+ },
+ waiterActive: function (id) {
+ return this.waiters.indexOf(id) > -1;
+ },
+ resetWaiters: function () {
+ this.waiters = [];
+ },
+ physicalToVirtual: function (page) {
+ return this.settings.numerotation[page - 1];
+ },
+ virtualToPhysical: function (page) {
+ if (page === undefined) {
+ return false;
+ }
+ var i = this.settings.numerotation.indexOf(page.toString());
+ if (i == -1) {
+ return false;
+ }
+ return i + 1;
+ },
+
+ hideMenuItems: function () {
+ $('#menuList > ul > li, #shareLinks,footer#mobile-credits').fadeOut(100);
+
+ },
+
+ showMenuItems: function () {
+ $('#menuList > ul > li, #shareLinks,footer#mobile-credits').fadeIn(300);
+ },
+
+ print: function (button) {
+ this.stats.track(3);
+ return this.openPDF(button, true);
+ },
+
+ downloadPDF: function (button) {
+ this.stats.track(7);
+ return this.openPDF(button, false)
+ },
+
+ openPDF: function (button, print) {
+ var $this = this;
+ var pdf;
+ var pdfName;
+
+ if (this.settings.pages != this.contentlock.getMaxPage()) {
+ pdf = 'https://workshop.fluidbook.com/s/e/' + this.settings.cid + '/1-' + this.contentlock.getMaxPage();
+ } else if (this.settings.pdfName.substr(0, 4) === 'http') {
+ pdf = this.settings.pdfName;
+ } else {
+ pdf = this.relativeToAbsolute('data/' + this.settings.pdfName);
+ }
+ var e = pdf.split('/');
+ pdfName = e.pop();
+
+ this._openFile(pdf, button, 'pdf', pdfName, print);
+ },
+
+ _openFile: function (url, e, type, localname, print) {
+ if (print === undefined) {
+ print = false;
+ }
+
+ var $this = this;
+ if (this.settings.phonegap != false) {
+ if (type == undefined) {
+ var e = url.split('.');
+ type = e.pop();
+ }
+
+ if (url.indexOf('http') === 0) {
+ return this._downloadFilePhonegap(url, localname, window.TEMPORARY, this._openFilePhonegap, [url, e, type]);
+ } else {
+ if (this._openFilePhonegap(url, e, type)) {
+ return;
+ }
+ }
+
+ }
+ var w = this.wopen(url, '_blank', '');
+ if (print) {
+ setTimeout(function () {
+ w.print();
+ }, 2000);
+ }
+ },
+
+ _openFilePreload: function (url, e, type, localname, print) {
+
+ var $this = this;
+ var f = function () {
+ $this._openFile(url, e, type, localname, print);
+ };
+
+ if (this.settings.phonegap != false) {
+ this.displayLoader();
+ $.ajax({
+ url: url,
+ type: 'HEAD',
+ success: function (data) {
+ f();
+ $this.hideLoader(1, true);
+ },
+ });
+ } else {
+ f();
+ }
+
+ },
+
+ _downloadFilePhonegap: function (url, localname, fs, callback, callbackArgs) {
+ console.log('download file phonegap');
+ var $this = this;
+ if (fs === undefined) {
+ fs = LocalFileSystem.PERSISTENT;
+ }
+
+ var requestFileSystem = window.requestFileSystem ||
+ window.webkitRequestFileSystem;
+
+ requestFileSystem(fs, 0, function (fileSystem) {
+ console.log('fs requested');
+ fileSystem.root.getFile("dummy.html", {create: true, exclusive: false}, function (fileEntry) {
+ console.log('dummy file created')
+ var filePath = fileEntry.toURL().replace("dummy.html", "") + localname;
+ var fileTransfer = new FileTransfer();
+ var uri = encodeURI(url);
+ fileTransfer.download(
+ uri,
+ filePath,
+ function (entry) {
+ console.log('file donwloaded');
+ if (callback !== undefined) {
+ if (callbackArgs === undefined) {
+ callbackArgs = [];
+ }
+ callbackArgs[0] = entry.toURL();
+ callback.apply($this, callbackArgs);
+ }
+ },
+ function (error) {
+ console.log('file error');
+ }
+ );
+ });
+ }, function () {
+
+ });
+ },
+
+ _openFilePhonegap: function (url, e, type) {
+ var $this = this;
+ var types_ios = {pdf: 'com.adobe.pdf'};
+ var types_android = {pdf: 'application/pdf'};
+ if (this.settings.phonegap === 'ios') {
+ console.log('open download on ios ' + type + ' -> ' + types_ios[type]);
+ this.displayLoader();
+ if (types_ios[type] !== undefined) {
+ console.log('intro to open with External file util');
+
+ try {
+ var offset = $(e).offset();
+
+ offset.left += ($(e).width() / 2);
+ offset.top += ($(e).height() / 2);
+
+ offset.left *= 2;
+ offset.top *= 2;
+
+ if ($(e).data('ios-preview') === '1') {
+ offset.top = offset.left = 0;
+ }
+ } catch (err) {
+ console.log('error while getting offset');
+ }
+
+ try {
+ console.log('attempt to open with External file util');
+ ExternalFileUtil.openWith(url, types_ios[type], function () {
+ console.log('ok to open with External file util : ' + url);
+
+ $this.hideLoader();
+ }, function () {
+ console.log('failed to open with External file util');
+ $this.wopen(url, "_blank", 'location=no');
+ $this.hideLoader();
+ }, offset);
+ } catch (err) {
+ console.error('unable to open with externalfileutil');
+ $this.wopen(url, "_blank", 'location=no');
+ $this.hideLoader();
+ }
+ return true;
+ }
+ }
+
+ if (this.settings.phonegap === 'android') {
+ if (types_android[type] !== undefined) {
+
+ var errorCallback = function (e) {
+ $this.bugreport(e);
+ $this.hideLoader();
+ };
+
+ console.log('open pdf file');
+ this.displayLoader();
+ try {
+ window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, function (fileSystem) {
+ console.log('got local file system');
+ console.log('try to resolve url');
+ window.resolveLocalFileSystemURL(url, function (entry) {
+ console.log('resolved from file');
+ window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function (dirEntry) {
+ console.log('resolved to dir');
+ entry.copyTo(dirEntry, entry.name, function (copyEntry) {
+ console.log('copied file');
+
+ window.plugins.webintent.startActivity({
+ action: window.plugins.webintent.ACTION_VIEW,
+ type: types_android[type],
+ url: copyEntry.toURL()
+ }, function (args) {
+ $this.hideLoader(5);
+ }, function (args) {
+ $this.wopen(copyEntry.toURL(), '_blank', '');
+ $this.hideLoader(5);
+ });
+ }, errorCallback);
+ }, errorCallback);
+ }, errorCallback);
+ }, errorCallback);
+ } catch (e) {
+ $this.bugreport(e);
+ $this.hideLoader();
+ }
+ }
+ return true;
+ }
+ return false;
+ },
+
+ relativeToAbsolute: function (relative) {
+ var a = document.createElement('a');
+ a.href = relative;
+ return a.cloneNode(false).href;
+ },
+
+ alertInternetRequired: function () {
+ navigator.notification.alert('', function () {
+
+ }, this.l10n.__('an internet connection is required for this action'));
+ },
+
+ touchOffset: function (offset) {
+ offset *= $("#currentDoublePage").width();
+ $("#currentDoublePage").addClass('sliding');
+ $("#currentDoublePage").css({
+ translateX: offset
+ });
+ },
+ displayLoader: function () {
+ $("#loader").addClass('show');
+ if (!this.support.isMobile) {
+ $('body').addClass('loading');
+ }
+ },
+
+ hideLoader: function (delay, force) {
+ if (force == undefined) {
+ force = false;
+ }
+ if (delay == undefined) {
+ delay = 0;
+ }
+ var $this = this;
+ if (delay == 0) {
+ return this._hideLoader(force);
+ }
+ setTimeout(function () {
+ $this._hideLoader(force);
+ }, delay * 1000);
+ },
+
+ _hideLoader: function (force) {
+ if (force == undefined) {
+ force = false;
+ }
+ if (!force && $('#splash').css('visibility') == 'visible') {
+ return;
+ }
+ $("#loader").removeClass('show');
+ if (!this.support.isMobile) {
+ $('body').removeClass('loading');
+ }
+ },
+
+ wopen: function (url, target, options, print) {
+ var $this = this;
+ var win;
+ if (this.support.nwjs) {
+ win = nw.Window.get().window;
+ } else {
+ win = window;
+ }
+
+ url = url.replace('$uuid', this.stats.vid);
+
+ if (target == undefined) {
+ target = '_self';
+ }
+ if (options == undefined) {
+ options = '';
+ }
+
+ // fix #3407
+ if (target === '_popupiframe' && Modernizr.ios && url.search(/\.pdf$/) >= 0) {
+ target = '_blank';
+ }
+
+ var locationdefault = 'yes';
+ var mtarget = target;
+ var replace = true;
+ if (this.settings.phonegap) {
+ if (target == '_unique' || target == '_new') {
+ mtarget = '_blank';
+ }
+ } else {
+ if (target == '_new') {
+ mtarget = 'fb_' + this.settings.id + '_' + Math.round(Math.random() * 10000000);
+ options += ',scrollbars=yes'
+ } else if (target == '_unique') {
+ mtarget = 'fb_' + this.settings.id;
+ options += ',scrollbars=yes'
+ } else {
+
+ }
+ }
+
+ if (this.settings.phonegap) {
+ locationdefault = 'yes';
+ }
+
+ if (options == '') {
+ options = 'location=' + locationdefault;
+ } else if (options.indexOf('location=') == -1) {
+ options += ',location=' + locationdefault;
+ }
+
+ if (this.settings.phonegap && mtarget == '_blank') {
+ options += ',zoom=yes,enableViewportScale=yes'
+ }
+
+ if (!this.settings.phonegap && mtarget == '_blank') {
+ options = undefined;
+ replace = undefined;
+ }
+ // Open the window
+ if (mtarget === '_popupiframe') {
+ this.openInPopupIframe(url);
+ return false;
+ }
+ var w;
+ if (options == undefined && replace == undefined) {
+ if (this.support.IE == 0) {
+ w = win.open(url, mtarget);
+ console.log(w);
+ } else {
+ $("#wopen").remove();
+ $('body').append('<a id="wopen" href="' + url + '" target="' + mtarget + '"></a>');
+ $("#wopen").get(0).click();
+ setTimeout(function () {
+ $("#wopen").remove();
+ }, 200);
+ }
+ } else {
+ w = win.open(url, mtarget, options, replace);
+ }
+
+ try {
+ // Attempt to focus opened windows (useful for already opened windows)
+ if (target == '_new' || target == '_unique') {
+ w.focus();
+ }
+ } catch (e) {
+
+ }
+ return w;
+ },
+
+ openInPopupIframe: function (url, callback) {
+ this.menu.openView('freeiframe', url, '', function () {
+ if (callback !== undefined) {
+ callback();
+ }
+ });
+ },
+
+ setFlag: function (name, value) {
+ if (value === undefined) {
+ value = true;
+ }
+ this.flags[name] = value;
+ },
+
+ hasFlag: function (name) {
+ return this.flags[name] === true;
+ },
+
+ hasFlags: function (names) {
+ var res = true;
+ var $this = this;
+ $.each(names, function (k, v) {
+ if ($this.hasFlag(v)) {
+ return;
+ }
+ res = false;
+ return true;
+ });
+ return res;
+ },
+
+ unlockCurrentPage: function () {
+ this.contentlock.unlockCurrentPage();
+ },
+
+ bugreport: function (e) {
+ if (window.confirm('An error occured: ' + e.name + '. Do you want to send a report ?')) {
+ var subject = '[Fluidbook error report] ' + e.message;
+ var o = {
+ name: e.name,
+ message: e.message,
+ stack: e.stack,
+ }
+ window.location = 'mailto:tech@fluidbook.com?subject=' + encodeURIComponent(subject) + '&body=' + encodeURIComponent(JSON.stringify(o));
+ }
+ },
+}
+function Fluidbook(settings) {
+ this.init(settings);
+}
+
+// Constantes
+// Background dispoition
+Fluidbook.NONE = 3;
+Fluidbook.STRETCH = 0;
+Fluidbook.RATIO = 2;
+Fluidbook.REPEAT = 1;
+// Horizontal alignments
+Fluidbook.CENTER = 4;
+Fluidbook.LEFT = 5;
+Fluidbook.RIGHT = 6;
+// Vertical alignments
+Fluidbook.MIDDLE = 7;
+Fluidbook.TOP = 8;
+Fluidbook.BOTTOM = 9;
+
+Fluidbook.prototype = {
+ init: function (settings) {
+ this.flags = {};
+ this.canNavigate = false;
+
+ if ($_GET['nointerface'] !== undefined) {
+ $('body').addClass('nointerface');
+ settings.mobileTransitions = 'none';
+ this.nointerface = true;
+ } else {
+ this.nointerface = false;
+ }
+
+ this.initSettings(settings);
+ this.secure = new FluidbookSecure(this);
+
+ var $this = this;
+ this.secure.checkSecure(function () {
+ $this.secureOK();
+ });
+ },
+
+ secureOK: function () {
+ this.singleMode = (this.settings.mobileNavigationType === 'portrait' || this.settings.mobileNavigationType === 'mobilefirst');
+
+ this.junk = this.settings.cacheDate;
+ this.l10n = new FluidbookL10N(this, $_GET['lang']);
+ this.networkControl = new FluidbookNetworkControl(this);
+ this.input = new FluidbookInput(this);
+ this.keyboard = new FluidbookKeyboard(this);
+ if (this.settings.landingPage != undefined && this.settings.landingPage != '') {
+ this.landingpage = new FluidbookLandingPage(this);
+ }
+ this.splash = new FluidbookSplash(this);
+ this.contentlock = new FluidbookContentLock(this);
+ this.menu = new FluidbookMenu(this);
+ this.support = new FluidbookSupport(this);
+ this.search = new FluidbookSearch(this);
+ this.mobilefirst = new FluidbookMobileFirst(this);
+ if (!this.mobilefirst.enabled) {
+ this.slider = new FluidbookSlider(this);
+ }
+ this.displayOnePage = this.alwaysDisplayOnePage = this.settings.mobileNavigationType === 'portrait' || (this.pad && this.pad.enabled) || this.mobilefirst.enabled;
+ this.zoom = new FluidbookZoom(this);
+ this.zoom.resetZoom();
+ this.cache = new FluidbookCache(this.settings);
+ this.service = new FluidbookService(this, this.settings.id);
+ this.loader = new FluidbookLoader(this);
+ this.pad = new FluidbookPad(this);
+ this.scorm = new FluidbookScorm(this);
+ this.links = new FluidbookLinks(this);
+ this.waiters = [];
+ this.viewport = new FluidbookViewport(this);
+ this.viewport.updateViewport();
+ this.desktop = new FluidbookDesktop(this);
+ this.share = new FluidbookShare(this);
+ this.firstTransition = true;
+ if (this.input.hasTouch) {
+ this.touch = new FluidbookTouch(this);
+ }
+ this.background = new FluidbookBackground(this);
+ this.video = new FluidbookVideo(this);
+ this.audioplayer = new FluidbookAudioPlayer(this);
+ this.bookmarks = new FluidbookBookmarks(this);
+ this.tooltip = new FluidbookTooltip(this);
+ this.accessibility = new FluidbookAccessibility(this);
+ this.sound = new FluidbookSound(this);
+ if (window.FluidbookSlideshow) {
+ this.slideshow = new FluidbookSlideshow(this);
+ }
+ this.printing = new FluidbookPrint(this);
+ this.posad = new FluidbookPOSAd(this);
+ this.notes = new FluidbookNotes(this);
+ this.gamify = new FluidbookGamify(this);
+
+ if (this.settings.basket) {
+ this.cart = new FluidbookCart(this);
+ }
+ if (this.settings.form === 'bulle') {
+ this.form = new FluidbookBulleForm(this);
+ } else if (this.settings.form === 'bourbon') {
+ this.form = new FluidbookBourbonForm(this);
+ } else if (this.settings.form === 'avery') {
+ this.form = new FluidbookAveryForm(this);
+ } else {
+ this.form = false;
+ }
+ this.privacy = new FluidbookPrivacy(this);
+ if (typeof window.FluidbookTabs === 'function') {
+ this.tabs = new FluidbookTabs(this);
+ }
+ this.widget = new FluidbookWidget(this);
+
+ this.refw = 0;
+ this.refh = 0;
+ this.searchString = '';
+ this.vectorTexts = !this.support.imagesVersion;
+ this.indexHTML = '';
+ this.gal = null;
+ this.isReady = false;
+ this.transitionAxis = 'x';
+ if (this.support.isMobile) {
+ $("body").addClass('mobile');
+ } else {
+ $("body").addClass('desktop');
+ }
+ if (this.pad.enabled) {
+ $("body").addClass('pad');
+ }
+ $('html').addClass(this.settings.mobileLVersion);
+ this.currentPage = -1;
+ this.currentPageURL = -1;
+
+ this.contentlock.init();
+
+ this.nav = new FluidbookNav(this);
+ this.interface = new FluidbookInterface(this);
+ this.resize = new FluidbookResize(this);
+ this.pagetransitions = new FluidbookPageTransition(this);
+ this.stats = new FluidbookStats(this);
+ this.stats.track(10);
+ this.help = new FluidbookHelp(this);
+ this.articles = new FluidbookArticles(this);
+
+ this.initTheme();
+ this.initLoading();
+ },
+
+ initSettings: function (settings) {
+ this.settings = settings;
+ //
+ if ($_GET['transition'] != null) {
+ var map = {1: 'none', 2: 'slide', 3: 'flip', 4: 'flip3d'};
+ this.settings.mobileTransitions = map[$_GET['transition']];
+ }
+ if (this.nointerface) {
+ this.settings.mobileTransitions = 'none';
+ }
+
+ /**
+ * @deprecated
+ */
+ this.datas = this.settings;
+ },
+
+ setMaxPage: function (p, allowbackwards) {
+ return this.contentlock.setMaxPage(p, allowbackwards);
+ },
+
+ initTheme: function () {
+ var $this = this;
+
+ if (this.settings.arrowsTheme) {
+ $('html').addClass('sharp');
+ }
+
+ if (this.settings.invertMenuPosition) {
+ $('html').addClass('menu-inverted');
+ } else {
+ $('html').addClass('menu-default');
+ }
+
+ $(document).on('fluidbook.init', function () {
+ var logoImg = $("#splash .logo img");
+ if ($(logoImg).isLoaded()) {
+ $this.splashLogoLoaded();
+ } else {
+ $(logoImg).on('load', function () {
+ $this.splashLogoLoaded();
+ });
+ }
+ });
+ },
+
+ splashLogoLoaded: function () {
+ resize();
+ $("#splash .logo img").css('opacity', 1);
+ },
+
+ initLoading: function () {
+ if ($("#loader svg").length > 0) {
+ return;
+ }
+ $("#loader").append(getSpriteIcon('interface-loader'));
+ this.displayLoader();
+ var $this = this;
+ this.loader.preloadStart(function () {
+ $this.ready();
+ });
+ },
+
+ allowChangePage: function () {
+ var $this = this;
+ setTimeout(function () {
+ $this.canNavigate = true;
+ $($this).trigger('fluidbook.navigation.cannavigate');
+ }, 1500);
+ },
+
+ ready: function () {
+ if (this.isReady) {
+ return;
+ }
+
+ this.isReady = true;
+
+ $("#main").css('display', 'block');
+
+ // Trigger a resize
+ resize();
+
+ // Trigger ready event
+ $(this).trigger('fluidbook.ready');
+ $(document).trigger('fluidbook.ready');
+
+ // Initial address handling
+ this.changeAddress();
+
+ var $this = this;
+ setTimeout(function () {
+ $this.help.displayAtStartup();
+ }, 1500);
+ },
+
+ loadPlugins: function () {
+ $.each(this.settings.plugins, function (k, plugin) {
+ try {
+ var functionName = plugin.replace(/\./g, '_');
+ eval(functionName + '();');
+ } catch (err) {
+ }
+ });
+ $.each(this.settings.htmlmultimedia, function (k, code) {
+ try {
+ eval(code);
+ } catch (err) {
+ }
+ });
+ },
+ initPage: function (pageNr, doublePage, position) {
+ if ($("#page_" + pageNr).length > 0) {
+ return;
+ }
+ $(doublePage).find('.' + position).remove();
+ var page = '<div class="page ' + position + '" id="page_' + pageNr + '" data-page="' + pageNr + '"><div class="background" page="' + pageNr + '"></div><div class="ctlinks" data-blendmode="normal"></div><div class="texts" highlight=""></div><div class="clinks" data-blendmode="normal"></div><div class="shade"></div></div>';
$(doublePage).append(page);
},
hidePage: function (position) {