From 988f0d50379103e19fee8bebb74bd5bd6daf15a4 Mon Sep 17 00:00:00 2001 From: "vincent@cubedesigners.com" Date: Tue, 27 Nov 2018 14:09:47 +0000 Subject: [PATCH] wip #1735 @1 --- .../html5/3dflip/class.ws.html5.compiler.php | 211 ++++++++++-------- .../html5/master/class.ws.html5.compiler.php | 203 +++++++++-------- 2 files changed, 231 insertions(+), 183 deletions(-) diff --git a/inc/ws/Util/html5/3dflip/class.ws.html5.compiler.php b/inc/ws/Util/html5/3dflip/class.ws.html5.compiler.php index d68f66bec..8a42e8dea 100644 --- a/inc/ws/Util/html5/3dflip/class.ws.html5.compiler.php +++ b/inc/ws/Util/html5/3dflip/class.ws.html5.compiler.php @@ -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 .= '' . "\n"; } - $script = '' . "\n"; - $script .= '' . "\n"; + foreach ($this->jsLibs as $jsLib => $files) { + $script .= "\t" . '' . "\n"; + } if ($this->book->parametres->scorm_enable) { - $script .= '' . "\n"; + $script .= "\t" . '' . "\n"; } if (count($this->specialJsFiles)) { - $script .= '' . "\n"; + $script .= "\t" . '' . "\n"; } foreach ($this->pluginJs as $p) { - $script .= '' . "\n"; + $script .= "\t" . '' . "\n"; } $script .= $iscript; @@ -745,7 +756,6 @@ class wsHTML5Compiler if ($this->phonegap) { $csp = "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; diff --git a/inc/ws/Util/html5/master/class.ws.html5.compiler.php b/inc/ws/Util/html5/master/class.ws.html5.compiler.php index 141178315..8a42e8dea 100644 --- a/inc/ws/Util/html5/master/class.ws.html5.compiler.php +++ b/inc/ws/Util/html5/master/class.ws.html5.compiler.php @@ -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 = '' . "\n"; - $script .= '' . "\n"; + foreach ($this->jsLibs as $jsLib => $files) { + $script .= "\t" . '' . "\n"; + } if ($this->book->parametres->scorm_enable) { - $script .= '' . "\n"; + $script .= "\t" . '' . "\n"; } if (count($this->specialJsFiles)) { - $script .= '' . "\n"; + $script .= "\t" . '' . "\n"; } foreach ($this->pluginJs as $p) { - $script .= '' . "\n"; + $script .= "\t" . '' . "\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 != '') { -- 2.39.5