]> _ Git - cubeextranet.git/commitdiff
wip #1735 @1
authorvincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Tue, 27 Nov 2018 14:09:47 +0000 (14:09 +0000)
committervincent@cubedesigners.com <vincent@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Tue, 27 Nov 2018 14:09:47 +0000 (14:09 +0000)
inc/ws/Util/html5/3dflip/class.ws.html5.compiler.php
inc/ws/Util/html5/master/class.ws.html5.compiler.php

index d68f66bec609e31f7d8c766ec337903954b9546b..8a42e8deae1f701983d7e93e760e2217aaf0540f 100644 (file)
@@ -5,73 +5,81 @@ class wsHTML5Compiler
        public static $resolutions = array(150, 300);
        public $maxRes = 300;
 
-       public $jsFiles = array(
-               'js/libs/cube/util.js',
-               'js/libs/modernizr/modernizr.min.js',
-               'js/libs/modernizr/tests.js',
-               'js/libs/threejs/three.min.js',
-               'js/libs/threejs/Projector.js',
-               'js/libs/threejs/CanvasRenderer.js',
-               'js/libs/threejs/modifier.js',
-               'js/libs/threejs/stats.js',
-               'js/libs/cube/fb.js',
-               'js/libs/cube/util.js',
-               'js/libs/screenfull.min.js',
-               'js/libs/storage.js',
-               'js/libs/keymaster.js',
-               'js/libs/jquery/jquery.min.js',
-               'js/libs/jquery/jquery.transform.js',
-               'js/libs/jquery/jquery.form.min.js',
-               'js/libs/jquery/jquery.mousewheel.min.js',
-               'js/libs/jquery/jquery.hashchange.min.js',
-               'js/libs/jquery/perfect-scrollbar.jquery.min.js',
-               'js/libs/mmenu/jquery.mmenu.min.js',
-               'js/libs/mmenu/jquery.mmenu.rtl.min.js',
-               'js/libs/mmenu/jquery.mmenu.offcanvas.min.js',
-               'js/libs/gsap/TweenMax.min.js',
-               'js/libs/gsap/jquery.gsap.min.js',
-               'js/libs/threejs/Tweenmax.threejs.js',
-               'js/libs/gal/gal.js',
-               'js/libs/gal/gal.filesystem.js',
-               'js/libs/hammer.min.js',
-               'js/libs/fluidbook/fluidbook.utils.js',
-               'js/libs/fluidbook/fluidbook.links.js',
-               'js/libs/fluidbook/fluidbook.support.js',
-               'js/libs/fluidbook/fluidbook.video.js',
-               'js/libs/fluidbook/fluidbook.viewport.js',
-               'js/libs/fluidbook/fluidbook.desktop.js',
-               'js/libs/fluidbook/fluidbook.service.js',
-               'js/libs/fluidbook/fluidbook.share.js',
-               'js/libs/fluidbook/fluidbook.l10n.js',
-               'js/libs/fluidbook/fluidbook.slider.js',
-               'js/libs/fluidbook/fluidbook.pagetransitions.js',
-               'js/libs/fluidbook/fluidbook.nav.js',
-               'js/libs/fluidbook/fluidbook.interface.js',
-               'js/libs/fluidbook/fluidbook.touch.js',
-               'js/libs/fluidbook/fluidbook.loader.js',
-               'js/libs/fluidbook/fluidbook.search.js',
-               'js/libs/fluidbook/fluidbook.help.js',
-               'js/libs/fluidbook/fluidbook.resize.js',
-               'js/libs/fluidbook/fluidbook.stats.js',
-               'js/libs/fluidbook/fluidbook.cache.js',
-               'js/libs/fluidbook/fluidbook.tooltip.js',
-               'js/libs/fluidbook/fluidbook.bookmarks.js',
-               'js/libs/fluidbook/fluidbook.background.js',
-               'js/libs/fluidbook/fluidbook.pad.js',
-               'js/libs/fluidbook/fluidbook.audiodescription.js',
-               'js/libs/fluidbook/fluidbook.privacy.js',
-               'js/libs/fluidbook/fluidbook.zoom.js',
-               'js/libs/fluidbook/fluidbook.menu.js',
-               'js/libs/fluidbook/fluidbook.sound.js',
-               'js/libs/fluidbook/fluidbook.contentlock.js',
-               'js/libs/fluidbook/fluidbook.scorm.js',
-               'js/libs/fluidbook/fluidbook.3dflip.js',
-               'js/libs/fluidbook/menu/fluidbook.chapters.js',
-               'js/libs/fluidbook/menu/fluidbook.index.js',
-               'js/libs/fluidbook/fluidbook.landingpage.js',
-               'js/libs/fluidbook/fluidbook.slideshow.js',
-               'js/libs/fluidbook/fluidbook.js',
-               'js/main.js');
+       public $jsLibs = [
+               'cube' =>
+                       ['js/libs/cube/util.js',
+                               'js/libs/cube/fb.js',],
+               'modernizr' =>
+                       ['js/libs/modernizr/modernizr.min.js',
+                               'js/libs/modernizr/tests.js',],
+               'threejs' =>
+                       ['js/libs/threejs/three.min.js',
+                               'js/libs/threejs/Projector.js',
+                               'js/libs/threejs/CanvasRenderer.js',
+                               'js/libs/threejs/modifier.js',
+                               'js/libs/threejs/stats.js',],
+               'jquery' =>
+                       ['js/libs/jquery/jquery.min.js',
+                               'js/libs/jquery/jquery.transform.js',
+                               'js/libs/jquery/jquery.form.min.js',
+                               'js/libs/jquery/jquery.mousewheel.min.js',
+                               'js/libs/jquery/jquery.hashchange.min.js',],
+               'screenfull' => ['js/libs/screenfull.min.js',],
+               'storage' => ['js/libs/storage.js',],
+               'keymaster' => ['js/libs/keymaster.js',],
+               'perfectscrollbar' => ['js/libs/jquery/perfect-scrollbar.jquery.min.js',],
+               'mmenu' =>
+                       ['js/libs/mmenu/jquery.mmenu.min.js',
+                               'js/libs/mmenu/jquery.mmenu.rtl.min.js',
+                               'js/libs/mmenu/jquery.mmenu.offcanvas.min.js',],
+               'tweenmax' =>
+                       ['js/libs/gsap/TweenMax.min.js',
+                               'js/libs/gsap/jquery.gsap.min.js',
+                               'js/libs/threejs/Tweenmax.threejs.js',],
+               'hammer' => ['js/libs/hammer.min.js',],
+               'gal' =>
+                       ['js/libs/gal/gal.js',
+                               'js/libs/gal/gal.filesystem.js',],
+               'fluidbook' =>
+                       ['js/libs/fluidbook/fluidbook.utils.js',
+                               'js/libs/fluidbook/fluidbook.links.js',
+                               'js/libs/fluidbook/fluidbook.support.js',
+                               'js/libs/fluidbook/fluidbook.video.js',
+                               'js/libs/fluidbook/fluidbook.viewport.js',
+                               'js/libs/fluidbook/fluidbook.desktop.js',
+                               'js/libs/fluidbook/fluidbook.service.js',
+                               'js/libs/fluidbook/fluidbook.share.js',
+                               'js/libs/fluidbook/fluidbook.l10n.js',
+                               'js/libs/fluidbook/fluidbook.slider.js',
+                               'js/libs/fluidbook/fluidbook.pagetransitions.js',
+                               'js/libs/fluidbook/fluidbook.nav.js',
+                               'js/libs/fluidbook/fluidbook.interface.js',
+                               'js/libs/fluidbook/fluidbook.touch.js',
+                               'js/libs/fluidbook/fluidbook.loader.js',
+                               'js/libs/fluidbook/fluidbook.search.js',
+                               'js/libs/fluidbook/fluidbook.help.js',
+                               'js/libs/fluidbook/fluidbook.resize.js',
+                               'js/libs/fluidbook/fluidbook.stats.js',
+                               'js/libs/fluidbook/fluidbook.cache.js',
+                               'js/libs/fluidbook/fluidbook.tooltip.js',
+                               'js/libs/fluidbook/fluidbook.bookmarks.js',
+                               'js/libs/fluidbook/fluidbook.background.js',
+                               'js/libs/fluidbook/fluidbook.pad.js',
+                               'js/libs/fluidbook/fluidbook.audiodescription.js',
+                               'js/libs/fluidbook/fluidbook.privacy.js',
+                               'js/libs/fluidbook/fluidbook.zoom.js',
+                               'js/libs/fluidbook/fluidbook.menu.js',
+                               'js/libs/fluidbook/fluidbook.sound.js',
+                               'js/libs/fluidbook/fluidbook.contentlock.js',
+                               'js/libs/fluidbook/fluidbook.scorm.js',
+                               'js/libs/fluidbook/fluidbook.3dflip.js',
+                               'js/libs/fluidbook/menu/fluidbook.chapters.js',
+                               'js/libs/fluidbook/menu/fluidbook.index.js',
+                               'js/libs/fluidbook/fluidbook.landingpage.js',
+                               'js/libs/fluidbook/fluidbook.slideshow.js',
+                               'js/libs/fluidbook/fluidbook.js',
+                               'js/main.js']
+       ];
 
        public $specialJsFiles = array();
 
@@ -325,24 +333,24 @@ class wsHTML5Compiler
                }
 
                if ($this->config->form == 'bulle') {
-                       $this->addJs('js/libs/fluidbook/forms/fluidbook.form.bulle.js');
+                       $this->addJsLib('bulle', 'js/libs/fluidbook/forms/fluidbook.form.bulle.js');
                } else if ($this->config->form == 'bourbon') {
-                       $this->addJs('js/libs/parsley.min.js');
-                       $this->addJs('js/libs/fluidbook/forms/fluidbook.form.bourbon.js');
+                       $this->addJsLib('parsley', 'js/libs/parsley.min.js');
+                       $this->addJsLib('bourbon', 'js/libs/fluidbook/forms/fluidbook.form.bourbon.js');
                } else if ($this->config->form == 'avery') {
-                       $this->addJs('js/libs/parsley.min.js');
-                       $this->addJs('js/libs/fluidbook/forms/fluidbook.form.avery.js');
+                       $this->addJsLib('parsley', 'js/libs/parsley.min.js');
+                       $this->addJsLib('avery', 'js/libs/fluidbook/forms/fluidbook.form.avery.js');
                        $this->addLess('form/avery');
                        $this->writeCountries();
                }
 
                if ($this->config->basket) {
-                       $this->addJs('js/libs/fluidbook/fluidbook.cart.js');
+                       $this->addJsLib('cart', 'js/libs/fluidbook/fluidbook.cart.js');
                        switch ($this->config->basketManager) {
                                case 'Remarkable':
-                                       $this->addJs('js/libs/parsley.min.js');
-                                       $this->addJs('js/libs/jquery/jquery.cookie.js');
-                                       $this->addJs('js/libs/fluidbook/cart/fluidbook.cart.remarkable.js');
+                                       $this->addJsLib('parsley', 'js/libs/parsley.min.js');
+                                       $this->addJsLib('cookie', 'js/libs/jquery/jquery.cookie.js');
+                                       $this->addJsLib('remarkable', 'js/libs/fluidbook/cart/fluidbook.cart.remarkable.js');
                                        break;
                                default:
                                        break;
@@ -450,6 +458,7 @@ class wsHTML5Compiler
 
        public function compile($delete = true)
        {
+
                $this->log('Start compile process');
 
                // Raw copy of some directories
@@ -617,6 +626,7 @@ class wsHTML5Compiler
                        global $core;
                        $titre = $this->book->parametres->title;
 
+
                        if (null === $this->_signature) {
                                $daoSignature = new wsDAOSignature($core->con);
                                $this->_signature = $daoSignature->selectById($this->book->parametres->signature);
@@ -654,17 +664,18 @@ class wsHTML5Compiler
                                $iscript .= '</script>' . "\n";
                        }
 
-
                        $script = '<script type="text/javascript" charset="utf-8" src="data/datas.js"></script>' . "\n";
-                       $script .= '<script type="text/javascript" charset="utf-8" src="data/fluidbook.js"></script>' . "\n";
+                       foreach ($this->jsLibs as $jsLib => $files) {
+                               $script .= "\t" . '<script type="text/javascript" charset="utf-8" src="data/' . $jsLib . '.js"></script>' . "\n";
+                       }
                        if ($this->book->parametres->scorm_enable) {
-                               $script .= '<script type="text/javascript" charset="utf-8" src="data/scorm.js"></script>' . "\n";
+                               $script .= "\t" . '<script type="text/javascript" charset="utf-8" src="data/scorm.js"></script>' . "\n";
                        }
                        if (count($this->specialJsFiles)) {
-                               $script .= '<script type="text/javascript" charset="utf-8" src="data/special.js"></script>' . "\n";
+                               $script .= "\t" . '<script type="text/javascript" charset="utf-8" src="data/special.js"></script>' . "\n";
                        }
                        foreach ($this->pluginJs as $p) {
-                               $script .= '<script type="text/javascript" charset="utf-8" src="' . $p . '"></script>' . "\n";
+                               $script .= "\t" . '<script type="text/javascript" charset="utf-8" src="' . $p . '"></script>' . "\n";
                        }
                        $script .= $iscript;
 
@@ -745,7 +756,6 @@ class wsHTML5Compiler
                        if ($this->phonegap) {
                                $csp = "<meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'self' data: gap: 'unsafe-inline' *; style-src 'self' 'unsafe-inline'; font-src 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval' " . implode(' ', array_unique($this->securityPolicyWhitelist)) . "; img-src * data:\">";
                        }
-
                        $vars = array('credits', 'style', 'script', 'pagesContents', 'print', 'hiddenContents', 'splash', 'cache', 'bgcolor', 'message', 'favicon', 'svg', 'beginbody', 'csp', 'opengraph', 'twittercard');
 
                        $res = [];
@@ -875,7 +885,6 @@ class wsHTML5Compiler
 
        protected function writePrint()
        {
-
                if (!$this->book->parametres->print && !$this->book->parametres->pdf) {
                        return;
                }
@@ -985,7 +994,6 @@ class wsHTML5Compiler
                                $this->vdir->copy($this->wdir . '/' . $ic, 'data/images/' . $ic);
                        }
                }
-
        }
 
        protected function writeLinks()
@@ -1216,7 +1224,7 @@ class wsHTML5Compiler
 
                $config = $this->writeConfig();
                $this->vdir->file_put_contents('data/datas.js', $config);
-               $finals = array('fluidbook' => $this->jsFiles);
+               $finals = $this->jsLibs;
                if ($this->book->parametres->scorm_enable) {
                        $finals['scorm'] = array();
                        $finals['scorm'][] = 'js/libs/scorm/apiwrapper.js';
@@ -1237,7 +1245,7 @@ class wsHTML5Compiler
                                mkdir(dirname($minimized));
                        }
                        if (file_exists($minimized)) {
-                               $mintime = filemtime($minimized);
+                               $mintime = max(filemtime($minimized), filemtime(__FILE__));
                                $reminimize = false;
                        } else {
                                $mintime = 0;
@@ -1262,11 +1270,15 @@ class wsHTML5Compiler
 
                        if ($reminimize) {
                                $js = '';
+                               $hasNonMin = false;
                                foreach ($files as $file) {
                                        $f = $this->assets . '/' . $file;
                                        if (!file_exists($f)) {
                                                continue;
                                        }
+                                       if (strpos($f, '.min.') === false) {
+                                               $hasNonMin = true;
+                                       }
                                        $js .= file_get_contents($f);
                                        $js .= ";\n\n";
                                }
@@ -1277,11 +1289,15 @@ class wsHTML5Compiler
                                        unlink($minimized);
                                }
 
-                               $uglify = new CubeIT_CommandLine('/usr/local/bin/uglifyjs');
-                               $uglify->setArg('o', $minimized);
-                               $uglify->setArg(null, $tmp);
-                               $uglify->execute();
-                               $uglify->debug();
+                               if ($hasNonMin) {
+                                       $uglify = new CubeIT_CommandLine('/usr/local/bin/uglifyjs');
+                                       $uglify->setArg('o', $minimized);
+                                       $uglify->setArg(null, $tmp);
+                                       $uglify->execute();
+                                       $uglify->debug();
+                               } else {
+                                       copy($tmp, $minimized);
+                               }
 
                                if (!file_exists($minimized)) {
                                        die('An error occured while uglifying : ' . $uglify->output);
@@ -1291,6 +1307,7 @@ class wsHTML5Compiler
                        $this->vdir->copy($minimized, $dest);
                }
 
+
                if ($this->phonegap) {
                        $this->vdir->copy(WS_COMPILE_ASSETS . '/_html5/js/libs/phonegap/' . $this->phonegapVersion . '/cordova-' . $this->phonegap . '.js', 'data/cordova.js');
                }
@@ -1901,11 +1918,18 @@ class wsHTML5Compiler
                        $locale = $map[$locale];
                }
 
-               $this->addJs('js/libs/videojs/video.withscalefix.js');
-               $this->addJs('js/libs/videojs/lang/' . $locale . '.js');
+               $this->addJsLib('videojs', ['js/libs/videojs/video.withscalefix.js', 'js/libs/videojs/lang/' . $locale . '.js']);
                $this->addLess('videojs/videojs');
        }
 
+       public function addJsLib($name, $files)
+       {
+               if (!is_array($files)) {
+                       $files = [$files];
+               }
+               $this->jsLibs[$name] = $files;
+       }
+
        public function copyLinkFile($source, $dest, $video = false)
        {
                if ($video && $this->book->parametres->mobileVideosPath != '') {
@@ -1942,7 +1966,6 @@ class wsHTML5Compiler
 
        }
 
-
        public function unzipFile($file, $moveAssets = false, $baseDir = null)
        {
                $fdir = is_null($baseDir) ? 'data/links/' . str_replace('.', '_', $file) : $baseDir;
index 141178315e4f08d6f86c52494761ec7d9c1ab549..8a42e8deae1f701983d7e93e760e2217aaf0540f 100644 (file)
@@ -5,73 +5,81 @@ class wsHTML5Compiler
        public static $resolutions = array(150, 300);
        public $maxRes = 300;
 
-       public $jsFiles = array(
-               'js/libs/cube/util.js',
-               'js/libs/modernizr/modernizr.min.js',
-               'js/libs/modernizr/tests.js',
-               'js/libs/threejs/three.min.js',
-               'js/libs/threejs/Projector.js',
-               'js/libs/threejs/CanvasRenderer.js',
-               'js/libs/threejs/modifier.js',
-               'js/libs/threejs/stats.js',
-               'js/libs/cube/fb.js',
-               'js/libs/cube/util.js',
-               'js/libs/screenfull.min.js',
-               'js/libs/storage.js',
-               'js/libs/keymaster.js',
-               'js/libs/jquery/jquery.min.js',
-               'js/libs/jquery/jquery.transform.js',
-               'js/libs/jquery/jquery.form.min.js',
-               'js/libs/jquery/jquery.mousewheel.min.js',
-               'js/libs/jquery/jquery.hashchange.min.js',
-               'js/libs/jquery/perfect-scrollbar.jquery.min.js',
-               'js/libs/mmenu/jquery.mmenu.min.js',
-               'js/libs/mmenu/jquery.mmenu.rtl.min.js',
-               'js/libs/mmenu/jquery.mmenu.offcanvas.min.js',
-               'js/libs/gsap/TweenMax.min.js',
-               'js/libs/gsap/jquery.gsap.min.js',
-               'js/libs/threejs/Tweenmax.threejs.js',
-               'js/libs/gal/gal.js',
-               'js/libs/gal/gal.filesystem.js',
-               'js/libs/hammer.min.js',
-               'js/libs/fluidbook/fluidbook.utils.js',
-               'js/libs/fluidbook/fluidbook.links.js',
-               'js/libs/fluidbook/fluidbook.support.js',
-               'js/libs/fluidbook/fluidbook.video.js',
-               'js/libs/fluidbook/fluidbook.viewport.js',
-               'js/libs/fluidbook/fluidbook.desktop.js',
-               'js/libs/fluidbook/fluidbook.service.js',
-               'js/libs/fluidbook/fluidbook.share.js',
-               'js/libs/fluidbook/fluidbook.l10n.js',
-               'js/libs/fluidbook/fluidbook.slider.js',
-               'js/libs/fluidbook/fluidbook.pagetransitions.js',
-               'js/libs/fluidbook/fluidbook.nav.js',
-               'js/libs/fluidbook/fluidbook.interface.js',
-               'js/libs/fluidbook/fluidbook.touch.js',
-               'js/libs/fluidbook/fluidbook.loader.js',
-               'js/libs/fluidbook/fluidbook.search.js',
-               'js/libs/fluidbook/fluidbook.help.js',
-               'js/libs/fluidbook/fluidbook.resize.js',
-               'js/libs/fluidbook/fluidbook.stats.js',
-               'js/libs/fluidbook/fluidbook.cache.js',
-               'js/libs/fluidbook/fluidbook.tooltip.js',
-               'js/libs/fluidbook/fluidbook.bookmarks.js',
-               'js/libs/fluidbook/fluidbook.background.js',
-               'js/libs/fluidbook/fluidbook.pad.js',
-               'js/libs/fluidbook/fluidbook.audiodescription.js',
-               'js/libs/fluidbook/fluidbook.privacy.js',
-               'js/libs/fluidbook/fluidbook.zoom.js',
-               'js/libs/fluidbook/fluidbook.menu.js',
-               'js/libs/fluidbook/fluidbook.sound.js',
-               'js/libs/fluidbook/fluidbook.contentlock.js',
-               'js/libs/fluidbook/fluidbook.scorm.js',
-               'js/libs/fluidbook/fluidbook.3dflip.js',
-               'js/libs/fluidbook/menu/fluidbook.chapters.js',
-               'js/libs/fluidbook/menu/fluidbook.index.js',
-               'js/libs/fluidbook/fluidbook.landingpage.js',
-               'js/libs/fluidbook/fluidbook.slideshow.js',
-               'js/libs/fluidbook/fluidbook.js',
-               'js/main.js');
+       public $jsLibs = [
+               'cube' =>
+                       ['js/libs/cube/util.js',
+                               'js/libs/cube/fb.js',],
+               'modernizr' =>
+                       ['js/libs/modernizr/modernizr.min.js',
+                               'js/libs/modernizr/tests.js',],
+               'threejs' =>
+                       ['js/libs/threejs/three.min.js',
+                               'js/libs/threejs/Projector.js',
+                               'js/libs/threejs/CanvasRenderer.js',
+                               'js/libs/threejs/modifier.js',
+                               'js/libs/threejs/stats.js',],
+               'jquery' =>
+                       ['js/libs/jquery/jquery.min.js',
+                               'js/libs/jquery/jquery.transform.js',
+                               'js/libs/jquery/jquery.form.min.js',
+                               'js/libs/jquery/jquery.mousewheel.min.js',
+                               'js/libs/jquery/jquery.hashchange.min.js',],
+               'screenfull' => ['js/libs/screenfull.min.js',],
+               'storage' => ['js/libs/storage.js',],
+               'keymaster' => ['js/libs/keymaster.js',],
+               'perfectscrollbar' => ['js/libs/jquery/perfect-scrollbar.jquery.min.js',],
+               'mmenu' =>
+                       ['js/libs/mmenu/jquery.mmenu.min.js',
+                               'js/libs/mmenu/jquery.mmenu.rtl.min.js',
+                               'js/libs/mmenu/jquery.mmenu.offcanvas.min.js',],
+               'tweenmax' =>
+                       ['js/libs/gsap/TweenMax.min.js',
+                               'js/libs/gsap/jquery.gsap.min.js',
+                               'js/libs/threejs/Tweenmax.threejs.js',],
+               'hammer' => ['js/libs/hammer.min.js',],
+               'gal' =>
+                       ['js/libs/gal/gal.js',
+                               'js/libs/gal/gal.filesystem.js',],
+               'fluidbook' =>
+                       ['js/libs/fluidbook/fluidbook.utils.js',
+                               'js/libs/fluidbook/fluidbook.links.js',
+                               'js/libs/fluidbook/fluidbook.support.js',
+                               'js/libs/fluidbook/fluidbook.video.js',
+                               'js/libs/fluidbook/fluidbook.viewport.js',
+                               'js/libs/fluidbook/fluidbook.desktop.js',
+                               'js/libs/fluidbook/fluidbook.service.js',
+                               'js/libs/fluidbook/fluidbook.share.js',
+                               'js/libs/fluidbook/fluidbook.l10n.js',
+                               'js/libs/fluidbook/fluidbook.slider.js',
+                               'js/libs/fluidbook/fluidbook.pagetransitions.js',
+                               'js/libs/fluidbook/fluidbook.nav.js',
+                               'js/libs/fluidbook/fluidbook.interface.js',
+                               'js/libs/fluidbook/fluidbook.touch.js',
+                               'js/libs/fluidbook/fluidbook.loader.js',
+                               'js/libs/fluidbook/fluidbook.search.js',
+                               'js/libs/fluidbook/fluidbook.help.js',
+                               'js/libs/fluidbook/fluidbook.resize.js',
+                               'js/libs/fluidbook/fluidbook.stats.js',
+                               'js/libs/fluidbook/fluidbook.cache.js',
+                               'js/libs/fluidbook/fluidbook.tooltip.js',
+                               'js/libs/fluidbook/fluidbook.bookmarks.js',
+                               'js/libs/fluidbook/fluidbook.background.js',
+                               'js/libs/fluidbook/fluidbook.pad.js',
+                               'js/libs/fluidbook/fluidbook.audiodescription.js',
+                               'js/libs/fluidbook/fluidbook.privacy.js',
+                               'js/libs/fluidbook/fluidbook.zoom.js',
+                               'js/libs/fluidbook/fluidbook.menu.js',
+                               'js/libs/fluidbook/fluidbook.sound.js',
+                               'js/libs/fluidbook/fluidbook.contentlock.js',
+                               'js/libs/fluidbook/fluidbook.scorm.js',
+                               'js/libs/fluidbook/fluidbook.3dflip.js',
+                               'js/libs/fluidbook/menu/fluidbook.chapters.js',
+                               'js/libs/fluidbook/menu/fluidbook.index.js',
+                               'js/libs/fluidbook/fluidbook.landingpage.js',
+                               'js/libs/fluidbook/fluidbook.slideshow.js',
+                               'js/libs/fluidbook/fluidbook.js',
+                               'js/main.js']
+       ];
 
        public $specialJsFiles = array();
 
@@ -325,24 +333,24 @@ class wsHTML5Compiler
                }
 
                if ($this->config->form == 'bulle') {
-                       $this->addJs('js/libs/fluidbook/forms/fluidbook.form.bulle.js');
+                       $this->addJsLib('bulle', 'js/libs/fluidbook/forms/fluidbook.form.bulle.js');
                } else if ($this->config->form == 'bourbon') {
-                       $this->addJs('js/libs/parsley.min.js');
-                       $this->addJs('js/libs/fluidbook/forms/fluidbook.form.bourbon.js');
+                       $this->addJsLib('parsley', 'js/libs/parsley.min.js');
+                       $this->addJsLib('bourbon', 'js/libs/fluidbook/forms/fluidbook.form.bourbon.js');
                } else if ($this->config->form == 'avery') {
-                       $this->addJs('js/libs/parsley.min.js');
-                       $this->addJs('js/libs/fluidbook/forms/fluidbook.form.avery.js');
+                       $this->addJsLib('parsley', 'js/libs/parsley.min.js');
+                       $this->addJsLib('avery', 'js/libs/fluidbook/forms/fluidbook.form.avery.js');
                        $this->addLess('form/avery');
                        $this->writeCountries();
                }
 
                if ($this->config->basket) {
-                       $this->addJs('js/libs/fluidbook/fluidbook.cart.js');
+                       $this->addJsLib('cart', 'js/libs/fluidbook/fluidbook.cart.js');
                        switch ($this->config->basketManager) {
                                case 'Remarkable':
-                                       $this->addJs('js/libs/parsley.min.js');
-                                       $this->addJs('js/libs/jquery/jquery.cookie.js');
-                                       $this->addJs('js/libs/fluidbook/cart/fluidbook.cart.remarkable.js');
+                                       $this->addJsLib('parsley', 'js/libs/parsley.min.js');
+                                       $this->addJsLib('cookie', 'js/libs/jquery/jquery.cookie.js');
+                                       $this->addJsLib('remarkable', 'js/libs/fluidbook/cart/fluidbook.cart.remarkable.js');
                                        break;
                                default:
                                        break;
@@ -657,15 +665,17 @@ class wsHTML5Compiler
                        }
 
                        $script = '<script type="text/javascript" charset="utf-8" src="data/datas.js"></script>' . "\n";
-                       $script .= '<script type="text/javascript" charset="utf-8" src="data/fluidbook.js"></script>' . "\n";
+                       foreach ($this->jsLibs as $jsLib => $files) {
+                               $script .= "\t" . '<script type="text/javascript" charset="utf-8" src="data/' . $jsLib . '.js"></script>' . "\n";
+                       }
                        if ($this->book->parametres->scorm_enable) {
-                               $script .= '<script type="text/javascript" charset="utf-8" src="data/scorm.js"></script>' . "\n";
+                               $script .= "\t" . '<script type="text/javascript" charset="utf-8" src="data/scorm.js"></script>' . "\n";
                        }
                        if (count($this->specialJsFiles)) {
-                               $script .= '<script type="text/javascript" charset="utf-8" src="data/special.js"></script>' . "\n";
+                               $script .= "\t" . '<script type="text/javascript" charset="utf-8" src="data/special.js"></script>' . "\n";
                        }
                        foreach ($this->pluginJs as $p) {
-                               $script .= '<script type="text/javascript" charset="utf-8" src="' . $p . '"></script>' . "\n";
+                               $script .= "\t" . '<script type="text/javascript" charset="utf-8" src="' . $p . '"></script>' . "\n";
                        }
                        $script .= $iscript;
 
@@ -1214,7 +1224,7 @@ class wsHTML5Compiler
 
                $config = $this->writeConfig();
                $this->vdir->file_put_contents('data/datas.js', $config);
-               $finals = array('fluidbook' => $this->jsFiles);
+               $finals = $this->jsLibs;
                if ($this->book->parametres->scorm_enable) {
                        $finals['scorm'] = array();
                        $finals['scorm'][] = 'js/libs/scorm/apiwrapper.js';
@@ -1235,7 +1245,7 @@ class wsHTML5Compiler
                                mkdir(dirname($minimized));
                        }
                        if (file_exists($minimized)) {
-                               $mintime = filemtime($minimized);
+                               $mintime = max(filemtime($minimized), filemtime(__FILE__));
                                $reminimize = false;
                        } else {
                                $mintime = 0;
@@ -1260,11 +1270,15 @@ class wsHTML5Compiler
 
                        if ($reminimize) {
                                $js = '';
+                               $hasNonMin = false;
                                foreach ($files as $file) {
                                        $f = $this->assets . '/' . $file;
                                        if (!file_exists($f)) {
                                                continue;
                                        }
+                                       if (strpos($f, '.min.') === false) {
+                                               $hasNonMin = true;
+                                       }
                                        $js .= file_get_contents($f);
                                        $js .= ";\n\n";
                                }
@@ -1275,11 +1289,15 @@ class wsHTML5Compiler
                                        unlink($minimized);
                                }
 
-                               $uglify = new CubeIT_CommandLine('/usr/local/bin/uglifyjs');
-                               $uglify->setArg('o', $minimized);
-                               $uglify->setArg(null, $tmp);
-                               $uglify->execute();
-                               $uglify->debug();
+                               if ($hasNonMin) {
+                                       $uglify = new CubeIT_CommandLine('/usr/local/bin/uglifyjs');
+                                       $uglify->setArg('o', $minimized);
+                                       $uglify->setArg(null, $tmp);
+                                       $uglify->execute();
+                                       $uglify->debug();
+                               } else {
+                                       copy($tmp, $minimized);
+                               }
 
                                if (!file_exists($minimized)) {
                                        die('An error occured while uglifying : ' . $uglify->output);
@@ -1900,11 +1918,18 @@ class wsHTML5Compiler
                        $locale = $map[$locale];
                }
 
-               $this->addJs('js/libs/videojs/video.withscalefix.js');
-               $this->addJs('js/libs/videojs/lang/' . $locale . '.js');
+               $this->addJsLib('videojs', ['js/libs/videojs/video.withscalefix.js', 'js/libs/videojs/lang/' . $locale . '.js']);
                $this->addLess('videojs/videojs');
        }
 
+       public function addJsLib($name, $files)
+       {
+               if (!is_array($files)) {
+                       $files = [$files];
+               }
+               $this->jsLibs[$name] = $files;
+       }
+
        public function copyLinkFile($source, $dest, $video = false)
        {
                if ($video && $this->book->parametres->mobileVideosPath != '') {