]> _ Git - cubeextranet.git/commitdiff
Merge print branch compiler after master branch changes. WIP #817 @0.25
authorstephen@cubedesigners.com <stephen@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Wed, 28 Nov 2018 16:56:08 +0000 (16:56 +0000)
committerstephen@cubedesigners.com <stephen@cubedesigners.com@f5622870-0f3c-0410-866d-9cb505b7a8ef>
Wed, 28 Nov 2018 16:56:08 +0000 (16:56 +0000)
inc/ws/Util/html5/printing/class.ws.html5.compiler.php

index 98234e7266c7204585d18553d8bb800e6fdb0a75..e0b7bf31745988ce27ff70a1a79695dea853f166 100644 (file)
@@ -3,67 +3,84 @@
 class wsHTML5Compiler
 {
        public static $resolutions = array(150, 300);
-
-       public $jsFiles = array(
-               'js/libs/modernizr/modernizr.min.js',
-               'js/libs/modernizr/tests.js',
-               'js/libs/cookie.min.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/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.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/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.print.js',
-               'js/libs/fluidbook/fluidbook.js',
-               'js/main.js');
+       public $maxRes = 300;
+
+       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.print.js',
+                               'js/libs/fluidbook/fluidbook.js',
+                               'js/main.js']
+       ];
 
        public $specialJsFiles = array();
 
@@ -196,6 +213,7 @@ class wsHTML5Compiler
                $this->phonegap = $phonegap;
                $this->standalone = $standalone || $this->phonegap;
                $this->appcache = $appcache;
+               $this->widget = !$this->phonegap;
 
                cubePHP::set_memory('4G');
 
@@ -316,24 +334,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;
@@ -648,15 +666,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;
 
@@ -1205,7 +1225,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';
@@ -1251,11 +1271,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";
                                }
@@ -1266,11 +1290,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);
@@ -1284,7 +1312,9 @@ class wsHTML5Compiler
                if ($this->phonegap) {
                        $this->vdir->copy(WS_COMPILE_ASSETS . '/_html5/js/libs/phonegap/' . $this->phonegapVersion . '/cordova-' . $this->phonegap . '.js', 'data/cordova.js');
                }
-
+               $this->vdir->copyDirectory($this->assets . '/js/libs/fluidbook/workers', 'js/libs/fluidbook/workers');
+               $this->vdir->copyDirectory($this->assets . '/js/libs/stand', 'js/libs/stand');
+               $this->vdir->copyDirectory($this->assets . '/js/libs/polyfills', 'js/libs/polyfills');
        }
 
        public function writeTexts()
@@ -1889,11 +1919,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 != '') {