}
}
+function isOnStage(element) {
+ return $(element).closest('body').length > 0;
+}
+
function trim(str, charlist) {
// http://kevin.vanzonneveld.net
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
return img;
}
-function getSVGDocument(element){
- var el=$(element).get(0);
- if (el.contentDocument)
- {
+function getSVGDocument(element) {
+ var el = $(element).get(0);
+ if (el.contentDocument) {
return el.contentDocument;
- }
- else
- {
+ } else {
var subdoc = null;
try {
subdoc = el.getSVGDocument();
- } catch(e) {}
+ } catch (e) {
+ }
return subdoc;
}
}
-Object.size = function(obj) {
+Object.size = function (obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
callback();
this.prepareTurn({flip: [1, 2]}, function () {
$this.playTurn(0.1, function () {
- this.prepareTurn({flip: [2, 1]}, function () {
+ $this.prepareTurn({flip: [2, 1]}, function () {
$this.playTurn(-1, function () {
callback();
}, 0.1, 0);
if (null === THREE) {
return;
}
- var texture = new THREE.Texture(this.fluidbook.loader.getTexture(page));
- texture.needsUpdate = true;
- callback(texture);
+ this.fluidbook.loader.getTexture(page, function (image) {
+ var texture = new THREE.Texture(image);
+ texture.needsUpdate = true;
+ callback(texture);
+ });
},
initTurn: function (dir) {
}
},
onComplete: function () {
- $this.turnRunning = false;
this.tlname = '';
- $this._callbackAfterNextRender = callback;
+ callback();
+ setTimeout(function () {
+ $this.turnRunning = false;
+ }, 5);
+ //$this._callbackAfterNextRender = callback;
}
}
);
var render = true;
var visible;
if (this._progressAnimation < 1) {
- if (this.turnRunning) {
- if (this.performancesTestRunning) {
- this.performancesFrames++;
- }
- render = true;
- visible = true;
- } else {
- render = false;
- visible = false;
+ if (this.turnRunning) {
+ if (this.performancesTestRunning) {
+ this.performancesFrames++;
}
+ render = true;
+ visible = true;
+ } else {
+ render = false;
+ visible = false;
+ }
} else {
render = false;
visible = false;
},
setJContainerVisibility: function (visibility) {
+ var isVisible = this.jcontainer.css('display') === 'block';
+ if (isVisible === visibility) {
+ return;
+ }
if (visibility) {
this.jcontainer.show();
} else {
this.flags = {};
this.networkPauseDate = null;
this.networkPauseQueue = [];
+ this.networkPausePriorityQueue = [];
this.initNetworkPause();
this.canNavigate = false;
}, 1000);
},
- pauseNetwork: function (during) {
+ pauseNetwork: function (during, reset) {
+ if (reset === undefined) {
+ reset = false;
+ }
if (during === -1) {
this.networkPauseDate = null;
this.flushNetworkQueue();
}
var date = Date.now() + during + 500;
- if (this.networkPauseDate == null) {
+ if (this.networkPauseDate == null || reset) {
+ try {
+ throw new Error('reset pause ' + during);
+ } catch (e) {
+ console.log(e);
+ }
+
this.networkPauseDate = date;
} else {
+ try {
+ throw new Error('pause ' + during);
+ } catch (e) {
+ console.log(e);
+ }
+
this.networkPauseDate = Math.max(this.networkPauseDate, date);
}
},
- executeWhenNetwork: function (f) {
+ executeWhenNetwork: function (f, highPriority) {
+ if (highPriority === undefined) {
+ highPriority = false;
+ }
if (this.networkPauseDate != null) {
- this.networkPauseQueue.push(f);
+ if (highPriority) {
+ this.networkPausePriorityQueue.push(f);
+ } else {
+ this.networkPauseQueue.push(f);
+ }
return;
}
f();
unlockCurrentPage: function () {
this.contentlock.unlockCurrentPage();
- }
- ,
+ },
flushNetworkQueue: function () {
- if (this.networkPauseQueue.length === 0 || this.networkPauseDate != null) {
+ if ((this.networkPausePriorityQueue.length === 0 && this.networkPauseQueue.length === 0) || this.networkPauseDate != null) {
return;
}
- var f = this.networkPauseQueue.shift();
+ var f;
+ if (this.networkPausePriorityQueue.length > 0) {
+ f = this.networkPausePriorityQueue.shift();
+ } else {
+ f = this.networkPauseQueue.shift();
+ }
f();
var $this = this;
}
});
- this.fluidbook.pauseNetwork((pauseNetworkDelay + 1) * 1000)
+ if (pauseNetworkDelay > 0) {
+ this.fluidbook.pauseNetwork((pauseNetworkDelay + 0.5) * 1000);
+ }
},
getLinkDataById: function (uid) {
},
preloadPagesBeforeTransition: function (pages, callback) {
+ this.transitionPages = pages.slice(0);
+ this._preloadPagesBeforeTransition(pages, callback);
+ },
+
+ _preloadPagesBeforeTransition: function (pages, callback) {
if (this.arePreloadedPages(pages)) {
+ this._cleanPreloaded();
callback();
return;
}
var $this = this;
var $pages = pages.slice(0);
if ($pages.length == 0) {
+ this._cleanPreloaded();
callback();
return;
}
- this.transitionPages = pages.slice(0);
var $callback = callback;
var $page = $pages.shift();
if ($page == undefined || $page == 'undefined' || $page > this.fluidbook.contentlock.getMaxPage() || $page < 1) {
+ this._cleanPreloaded();
callback();
return;
}
this._preloadPage($page, function () {
- $this.preloadPagesBeforeTransition($pages, $callback);
+ $this._preloadPagesBeforeTransition($pages, $callback);
});
},
};
$this._preloadPage(preloadingPage, callback);
- });
+ }, true);
},
_preloadPage: function (page, callback) {
preloadAround: function (page) {
if (this.numPreload == 0) {
- this.cleanPreloaded();
+ //this.cleanPreloaded();
return;
}
- var numPreloadAfter = 6;
- var numPreloadBefore = 2;
+ var numPreloadAfter = 10;
+ var numPreloadBefore = 4;
if (this.fluidbook.resize.orientation === 'portrait' || this.fluidbook.singleMode) {
numPreloadAfter /= 2;
numPreloadBefore /= 2;
}
}
this.preloaded = this.toPreload.slice(0);
- this.cleanPreloaded();
+ //this.cleanPreloaded();
this.preloadPages();
},
_cleanPreloaded: function () {
for (var i = 1; i <= this.fluidbook.contentlock.getMaxPage(); i++) {
if (this.preloaded.indexOf(i) === -1 && this.transitionPages.indexOf(i) === -1) {
+ // If page is not in the preload list, being displayed or used as transition, we delete it from the cache
+ // to free browser memory
this.deletePage(i);
+ } else {
+ // Else, we ensure the images are on stage in order to prevent white flash avec page turn.
+ this.setOnStage(this.backgrounds[i]);
+ this.setOnStage(this.texts[i]);
}
}
},
- cleanPreloaded: function () {
- var $this = this;
- clearTimeout(this.cleanTimeout);
- this.cleanTimeout = setTimeout(function () {
- $this.fluidbook.executeWhenNetwork(function () {
- $this._cleanPreloaded();
- })
- }, 10000);
- },
+
deletePage: function (page) {
if (this.backgrounds[page] !== undefined) {
delete this.backgrounds[page];
$(back).append($this.backgrounds[page]);
});
},
+ setOnStage: function (element) {
+ if (element === undefined || element == null) {
+ return;
+ }
+ if (!isOnStage(element)) {
+ $("#loadedcontents").append($(element));
+ }
+ },
_loadBackground: function (page, callback) {
if (page <= 0 || page > this.fluidbook.datas.pages) {
callback();
i.src = c.toDataURL("image/png");
},
- getTexture: function (page) {
- var res = this.textures[page];
- return res;
+ getTexture: function (page, callback) {
+ var $this = this;
+
+ if (this.textures[page] === undefined) {
+ this._preloadPage(page, function () {
+ callback($this.textures[page]);
+ });
+ } else {
+ callback(this.textures[page]);
+ }
},
loadTexts: function (pageNr, callback) {
var thumbPosition = (-spriteleft) + 'px ' + (-spritetop) + 'px';
var thumbSize = 'auto auto';
- if (width != 100) {
+ if (width !== 100) {
thumbImage = 'url("data/background/150/t' + page + '.jpg")';
thumbPosition = '0px 0px';
thumbSize = '100% 100%';
return this.pageTransition3D(pageNr);
}
},
+
+ pauseNetworkDuringTransition: function (pageNr) {
+ this.fluidbook.pauseNetwork((this.getTransitionDuration(pageNr)) * 1000, true);
+ },
+
+ pauseNetworkDuringPagesPreload: function () {
+ this.fluidbook.pauseNetwork(30000);
+ },
+
pageTransition3D: function (pageNr) {
var $this = this;
if (!this.fluidbook.loader.arePreloadedPages(turning.end)) {
this.fluidbook.displayLoader();
}
+ this.pauseNetworkDuringPagesPreload();
this.fluidbook.loader.preloadPagesBeforeTransition(turning.end, function () {
$("#pages").addClass('_3dtransition');
$this.fluidbook.loader.setContentsInDoublePage(currentDoublePage, turning.flat, true, function () {
$this.fluidbook.loader.setContentsInDoublePage(doublePage, turning.flip, true, function () {
$this.beforeTransition(pageNr, 3, turning);
- $this.fluidbook.pauseNetwork(2000);
+ $this.pauseNetworkDuringTransition(pageNr);
$(doublePage).addClass(turning.nextFromClass + 'end').one($this.fluidbook.support.getTransitionEndEvent(), function () {
if ($this.transitionning == false) {
return;
this.fluidbook.displayLoader();
}
- $this.fluidbook.pauseNetwork(3000);
var currentDoublePage = $("#currentDoublePage");
- $("#pages").prepend('<div id="nextDoublePage" class="_3d doublePage"></div>');
+ var cdir = 'fwd';
+ if (turning.dir === -1) {
+ cdir = 'bwd';
+ }
+ $("#pages").prepend('<div id="nextDoublePage" class="_3dflip ' + cdir + ' doublePage"></div>');
var doublePage = $("#nextDoublePage");
+ this.pauseNetworkDuringPagesPreload();
this.fluidbook.loader.preloadPagesBeforeTransition(turning.end, function () {
$this.flip3d.clean();
$this.flip3d.prepareTurn(turning, function () {
$this.flip3d.initTurn(turning.dir);
setTimeout(function () {
$this.fluidbook.loader.setContentsInDoublePage(currentDoublePage, turning.flat, true, function () {
- $this.flip3d.playTurn(turning.dir, function () {
- $this.fluidbook.loader.setContentsInDoublePage(doublePage, turning.end, true, function () {
+ $this.fluidbook.loader.setContentsInDoublePage(doublePage, turning.end, true, function () {
+ $this.pauseNetworkDuringTransition(pageNr);
+ $this.flip3d.playTurn(turning.dir, function () {
if ($this.transitionning === false) {
return;
}
// Remove former part
$("#currentDoublePage").remove();
- $(doublePage).attr('id', 'currentDoublePage').removeClass('_3d');
+ $(doublePage).attr('id', 'currentDoublePage').removeClass('_3dflip').removeClass('fwd').removeClass('bwd');
$this.afterTransition(pageNr);
});
});
if (!this.fluidbook.loader.arePreloadedPages(turning.end)) {
this.fluidbook.displayLoader();
}
+ this.pauseNetworkDuringPagesPreload();
this.fluidbook.loader.preloadPagesBeforeTransition(turning.end, function () {
$this.fluidbook.loader.setContentsInDoublePage(doublePage, turning.end, true, function () {
- $this.fluidbook.pauseNetwork(2000);
+ $this.pauseNetworkDuringTransition(pageNr);
$this.beforeTransition(pageNr, 2, turning);
$("#currentDoublePage").addClass('_2d').addClass('axis_' + $this.transitionAxis).addClass(turning.currentToClass);
$(doublePage).removeClass(turning.nextFromClass).one($this.fluidbook.support.getTransitionEndEvent(), function (event) {
if (!this.fluidbook.loader.arePreloadedPages(turning.end)) {
this.fluidbook.displayLoader();
}
+ this.pauseNetworkDuringPagesPreload();
this.fluidbook.loader.preloadPagesBeforeTransition(turning.end, function () {
$this.fluidbook.loader.setContentsInDoublePage(doublePage, turning.end, true, function () {
- $this.fluidbook.pauseNetwork(2000);
+ $this.pauseNetworkDuringTransition(pageNr);
$this.beforeTransition(pageNr, 2, turning);
$("#currentDoublePage").addClass('axis_' + $this.transitionAxis).addClass('_2d').addClass(turning.currentToClass);
$(doublePage).removeClass(turning.nextFromClass).one($this.fluidbook.support.getTransitionEndEvent(), function () {
var $this = this;\r
\r
\r
- var data= {\r
+ var data = {\r
id: $this.id,\r
vid: $this.vid,\r
type: type,\r
setTimeout(function () {\r
$this.fluidbook.executeWhenNetwork(function () {\r
$this.worker.postMessage(data);\r
- });\r
+ }, false);\r
}, 500);\r
}\r
};\r
$(fluidbook).on('fluidbook.page.navigation', function (e, page) {
fluidbook.executeWhenNetwork(function () {
scormSaveCurrentPosition(page);
- });
+ }, true);
});
$(fluidbook).on('fluidbook.maxpage.set', function (e, page) {
setInterval(function () {
fluidbook.executeWhenNetwork(function () {
pipwerks.SCORM.save();
- });
+ }, true);
}, 5000);
}
transform-style: preserve-3d;
}
+.doublePage._3dflip {
+ &.fwd {
+ .page.left {
+ opacity: 0;
+ }
+ }
+
+ &.bwd {
+ .page.right {
+ opacity: 0;
+ }
+ }
+}
+
._3d .page {
-moz-backface-visibility: hidden;
-webkit-backface-visibility: hidden;
}
/* Splash screen */
+
#splash {
position: absolute;
top: 0;
}
/* Tooltip */
+
#tooltip {
@tooltip-arrows-size: 10px;
}
/* Zoom Image Popups */
+
#zoomPopupOverlay {
position: absolute;
top: 0;
}
/* Blur input */
+
body > input {
position: absolute;
bottom: 0;
}
/* SVG Sprite */
+
[class^="interface-"], [class*=" interface-"], [class^="nav-"], [class*=" nav-"], [class^="share-"], [class*=" share-"] {
display: inline-block;
fill: currentColor;
}
/* Icon states */
+
.icon-fullscreen {
// Full screen exit icon hidden by default
}
/* Landing Page */
+
#landingPage {
opacity: 0;
pointer-events: none;
}
/* SEO */
+
#seoContents {
display: none;
}
/* General Utils */
+
.pointer-events-none {
pointer-events: none;
}