예제 #1
0
 public static function url($files)
 {
     $ident = self::ident($files);
     if (!\SYSTEM\CACHE\cache_js::get($ident)) {
         \LIB\lib_minify::php();
         $minifier = new \MatthiasMullie\Minify\JS();
         foreach ($files as $f) {
             $minifier->add($f->SERVERPATH());
         }
         \SYSTEM\CACHE\cache_js::put($ident, $minifier->minify());
     }
     return './api.php?call=cache&id=' . self::CACHE_JS . '&ident=' . $ident;
 }
예제 #2
0
 public static function createConfigJs($objConfig, $debug = false)
 {
     if (!static::isJQueryEnabled()) {
         return false;
     }
     $cache = !$GLOBALS['TL_CONFIG']['debugMode'];
     $objT = new \FrontendTemplate('jquery.slick');
     $arrData = static::createConfig($objConfig);
     $objT->setData($arrData['config']);
     $objT->config = static::createConfigJSON($objConfig);
     $objT->selector = static::getSlickContainerSelectorFromModel($objConfig);
     $objT->wrapperClass = static::getSlickCssClassFromModel($objConfig);
     if ($objConfig->initCallback) {
         $objT->initCallback = $objConfig->initCallback;
     }
     if ($objConfig->afterInitCallback) {
         $objT->afterInitCallback = $objConfig->afterInitCallback;
     }
     $strFile = 'assets/js/' . $objT->wrapperClass . '.js';
     $strFileMinified = 'assets/js/' . $objT->wrapperClass . '.min.js';
     $objFile = new \File($strFile, file_exists(TL_ROOT . '/' . $strFile));
     $objFileMinified = new \File($strFileMinified, file_exists(TL_ROOT . '/' . $strFileMinified));
     $minify = $cache && class_exists('\\MatthiasMullie\\Minify\\JS');
     // simple file caching
     if (static::doRewrite($objConfig, $objFile, $objFileMinified, $cache, $debug)) {
         $strChunk = $objT->parse();
         $objFile->write($objT->parse());
         $objFile->close();
         // minify js
         if ($minify) {
             $objFileMinified = new \File($strFileMinified);
             $objMinify = new \MatthiasMullie\Minify\JS();
             $objMinify->add($strChunk);
             $objFileMinified->write(rtrim($objMinify->minify(), ";") . ";");
             // append semicolon, otherwise "(intermediate value)(...) is not a function"
             $objFileMinified->close();
         }
     }
     $GLOBALS['TL_JAVASCRIPT']['slick'] = 'system/modules/slick/assets/vendor/slick-carousel/slick/slick' . ($cache ? '.min.js|static' : '.js');
     $GLOBALS['TL_JAVASCRIPT']['slick-functions'] = 'system/modules/slick/assets/js/jquery.slick-functions' . ($cache ? '.min.js|static' : '.js');
     $GLOBALS['TL_JAVASCRIPT'][$objT->wrapperClass] = $minify ? $strFileMinified . '|static' : $strFile;
 }
 public static function createConfigJs($objConfig, $debug = false)
 {
     if (!static::isJQueryEnabled()) {
         return false;
     }
     $objInstance = new static($objConfig);
     $cache = !$GLOBALS['TL_CONFIG']['debugMode'];
     $objT = new \FrontendTemplate('datamap.defaults');
     $objT->config = $objInstance->getConfigJs();
     $objT->bubbles = $objInstance->getConfigBubblesJs();
     $objT->states = $objInstance->getConfigStateJs();
     $objT->cssID = static::getCssIDFromModel($objConfig);
     $strName = $objT->cssID;
     $strFile = 'assets/js/' . $strName . '.js';
     $strFileMinified = 'assets/js/' . $strName . '.min.js';
     $objFile = new \File($strFile, file_exists(TL_ROOT . '/' . $strFile));
     $objFileMinified = new \File($strFileMinified, file_exists(TL_ROOT . '/' . $strFileMinified));
     $minify = $cache && class_exists('\\MatthiasMullie\\Minify\\JS');
     // simple file caching
     if (static::doRewrite($objConfig, $objFile, $objFileMinified, $cache, $debug)) {
         $strChunk = $objT->parse();
         $objFile->write($objT->parse());
         $objFile->close();
         // minify js
         if ($minify) {
             $objFileMinified = new \File($strFileMinified);
             $objMinify = new \MatthiasMullie\Minify\JS();
             $objMinify->add($strChunk);
             $objFileMinified->write(rtrim($objMinify->minify(), ";") . ";");
             // append semicolon, otherwise "(intermediate value)(...) is not a function"
             $objFileMinified->close();
         }
     }
     $GLOBALS['TL_JAVASCRIPT']['d3.js'] = 'system/modules/datamaps/assets/vendor/d3/d3' . (!$GLOBALS['TL_CONFIG']['debugMode'] ? '.min' : '') . '.js|static';
     $GLOBALS['TL_JAVASCRIPT']['topojson'] = 'system/modules/datamaps/assets/vendor/topojson/topojson.js|static';
     $GLOBALS['TL_JAVASCRIPT']['datamaps.all'] = 'system/modules/datamaps/assets/vendor/datamaps/dist/datamaps.all' . ($GLOBALS['TL_CONFIG']['debugMode'] ? '.min' : '') . '.js|static';
     $GLOBALS['TL_JAVASCRIPT'][$strName] = $minify ? $strFileMinified . '|static' : $strFile;
 }
예제 #4
0
파일: formatter.php 프로젝트: rhymix/rhymix
 /**
  * Minify JS.
  * 
  * @param string|array $source_filename
  * @param string $target_filename
  * @return bool
  */
 public static function minifyJS($source_filename, $target_filename)
 {
     $minifier = new \MatthiasMullie\Minify\JS();
     if (is_array($source_filename)) {
         foreach ($source_filename as $filename) {
             $minifier->add($filename);
         }
     } else {
         $minifier->add($source_filename);
     }
     $content = $minifier->execute($target_filename);
     Storage::write($target_filename, $content);
     return strlen($content) ? true : false;
 }
예제 #5
0
 /**
  * Minify and concatenate JS files.
  *
  * @param string $group
  *
  * @return string
  */
 protected function pipelineJs($group = 'head')
 {
     // temporary list of assets to pipeline
     $temp_js = [];
     // clear no-pipeline assets lists
     $this->js_no_pipeline = [];
     // Compute uid based on assets and timestamp
     $uid = md5(json_encode($this->js) . $this->js_minify . $group);
     $file = $uid . '.js';
     $inline_file = $uid . '-inline.js';
     $relative_path = "{$this->base_url}{$this->assets_url}/{$file}";
     // If inline files exist set them on object
     if (file_exists($this->assets_dir . $inline_file)) {
         $this->js_no_pipeline = json_decode(file_get_contents($this->assets_dir . $inline_file), true);
     }
     // If pipeline exist return it
     if (file_exists($this->assets_dir . $file)) {
         return $relative_path . $this->getTimestamp();
     }
     // Remove any non-pipeline files
     foreach ($this->js as $id => $asset) {
         if ($asset['group'] == $group) {
             if (!$asset['pipeline'] || $asset['remote'] && $this->js_pipeline_include_externals === false) {
                 $this->js_no_pipeline[] = $asset;
             } else {
                 $temp_js[$id] = $asset;
             }
         }
     }
     //if nothing found get out of here!
     if (count($temp_js) == 0) {
         return false;
     }
     // Write non-pipeline files out
     if (!empty($this->js_no_pipeline)) {
         file_put_contents($this->assets_dir . $inline_file, json_encode($this->js_no_pipeline));
     }
     // Concatenate files
     $buffer = $this->gatherLinks($temp_js, JS_ASSET);
     if ($this->js_minify) {
         $minifier = new \MatthiasMullie\Minify\JS();
         $minifier->add($buffer);
         $buffer = $minifier->minify();
     }
     // Write file
     if (strlen(trim($buffer)) > 0) {
         file_put_contents($this->assets_dir . $file, $buffer);
         return $relative_path . $this->getTimestamp();
     } else {
         return false;
     }
 }
예제 #6
0
 /**
  * import common .js and .css files for (both desktop and mobile)
  */
 private function _loadCommonJSCSS()
 {
     Context::loadFile(array('./common/css/xe.css', '', '', -1600000), true);
     $original_file_list = array('x', 'common', 'js_app', 'xml_handler', 'xml_js_filter');
     $jquery_version = preg_match('/MSIE [5-8]\\./', $_SERVER['HTTP_USER_AGENT']) ? '1.11.3' : '2.1.4';
     if (config('view.minify_scripts') === 'none') {
         Context::loadFile(array('./common/js/jquery-' . $jquery_version . '.js', 'head', '', -1730000), true);
         Context::loadFile(array('./common/js/plugins/jquery.migrate/jquery-migrate-1.2.1.js', 'head', '', -1720000), true);
         foreach ($original_file_list as $filename) {
             Context::loadFile(array('./common/js/' . $filename . '.js', 'head', '', -1700000), true);
         }
     } else {
         Context::loadFile(array('./common/js/jquery-' . $jquery_version . '.min.js', 'head', '', -1730000), true);
         Context::loadFile(array('./common/js/plugins/jquery.migrate/jquery-migrate-1.2.1.min.js', 'head', '', -1720000), true);
         $concat_target_filename = 'files/cache/minify/xe.min.js';
         if (file_exists(_XE_PATH_ . $concat_target_filename)) {
             $concat_target_mtime = filemtime(_XE_PATH_ . $concat_target_filename);
             $original_mtime = 0;
             foreach ($original_file_list as $filename) {
                 $original_mtime = max($original_mtime, filemtime(_XE_PATH_ . 'common/js/' . $filename . '.js'));
             }
             if ($concat_target_mtime > $original_mtime) {
                 Context::loadFile(array('./' . $concat_target_filename, 'head', '', -100000), true);
                 return;
             }
         }
         $minifier = new MatthiasMullie\Minify\JS();
         foreach ($original_file_list as $filename) {
             $minifier->add(_XE_PATH_ . 'common/js/' . $filename . '.js');
         }
         FileHandler::writeFile(_XE_PATH_ . $concat_target_filename, $minifier->execute());
         Context::loadFile(array('./' . $concat_target_filename, 'head', '', -100000), true);
     }
 }
예제 #7
0
 protected function parseExtJs($objLayout, &$arrReplace)
 {
     $arrJs = array();
     $objJs = ExtJsModel::findMultipleByIds(deserialize($objLayout->extjs));
     if ($objJs === null) {
         return false;
     }
     $cache = !$GLOBALS['TL_CONFIG']['debugMode'];
     while ($objJs->next()) {
         $objFiles = ExtJsFileModel::findMultipleByPid($objJs->id);
         if ($objFiles === null) {
             continue;
         }
         $strChunk = '';
         $strFile = 'assets/js/' . $objJs->title . '.js';
         $strFileMinified = str_replace('.js', '.min.js', $strFile);
         $objGroup = new \File($strFile, file_exists(TL_ROOT . '/' . $strFile));
         $objGroupMinified = new \File($strFileMinified, file_exists(TL_ROOT . '/' . $strFile));
         $rewrite = $objJs->tstamp > $objGroup->mtime || $objGroup->size == 0 || $cache && $objGroupMinified->size == 0;
         while ($objFiles->next()) {
             $objFileModel = \FilesModel::findByPk($objFiles->src);
             if ($objFileModel === null || !file_exists(TL_ROOT . '/' . $objFileModel->path)) {
                 continue;
             }
             $objFile = new \File($objFileModel->path);
             $strChunk .= $objFile->getContent() . "\n";
             if ($objFile->mtime > $objGroup->mtime) {
                 $rewrite = true;
             }
         }
         // simple file caching
         if ($rewrite) {
             $objGroup->write($strChunk);
             $objGroup->close();
             // minify js
             if ($cache) {
                 $objGroup = new \File($strFileMinified);
                 $objMinify = new \MatthiasMullie\Minify\JS();
                 $objMinify->add($strChunk);
                 $objGroup->write(rtrim($objMinify->minify(), ";") . ";");
                 // append semicolon, otherwise "(intermediate value)(...) is not a function"
                 $objGroup->close();
             }
         }
         $arrJs[] = $cache ? "{$strFileMinified}|static" : "{$strFile}";
     }
     // HOOK: add custom css
     if (isset($GLOBALS['TL_HOOKS']['parseExtJs']) && is_array($GLOBALS['TL_HOOKS']['parseExtJs'])) {
         foreach ($GLOBALS['TL_HOOKS']['parseExtJs'] as $callback) {
             $arrJs = static::importStatic($callback[0])->{$callback}[1]($arrJs);
         }
     }
     if ($objJs->addBootstrap) {
         $this->addTwitterBootstrap();
     }
     // inject extjs before other plugins, otherwise bootstrap may not work
     $GLOBALS['TL_JAVASCRIPT'] = is_array($GLOBALS['TL_JAVASCRIPT']) ? array_merge($GLOBALS['TL_JAVASCRIPT'], $arrJs) : $arrJs;
 }
function hm_custom_css_js_publish()
{
    if (!current_user_can('edit_theme_options') || empty($_POST['mode']) || !isset($_POST['rev']) || !is_numeric($_POST['rev'])) {
        wp_send_json_error();
    }
    $_POST['mode'] = strtolower($_POST['mode']);
    if ($_POST['mode'] != 'css' && $_POST['mode'] != 'javascript') {
        wp_send_json_error();
    }
    $post = get_post($_POST['rev']);
    if ($post->post_type != 'hm_custom_' . $_POST['mode']) {
        wp_send_json_error();
    }
    $uploadDir = wp_upload_dir();
    if (!is_dir($uploadDir['basedir'] . '/hm_custom_css_js')) {
        mkdir($uploadDir['basedir'] . '/hm_custom_css_js') or wp_send_json_error();
    }
    $outputFile = $uploadDir['basedir'] . '/hm_custom_css_js/custom.' . ($_POST['mode'] == 'css' ? 'css' : 'js');
    if (file_put_contents($outputFile, $post->post_content) === false) {
        wp_send_json_error();
    }
    if (empty($_POST['minify'])) {
        update_option('hm_custom_' . $_POST['mode'] . '_minify', false);
    } else {
        update_option('hm_custom_' . $_POST['mode'] . '_minify', true);
        require_once __DIR__ . '/minify/src/Minify.php';
        require_once __DIR__ . '/minify/src/Exception.php';
        if ($_POST['mode'] == 'css') {
            require_once __DIR__ . '/minify/src/CSS.php';
            require_once __DIR__ . '/minify/src/Converter.php';
            $minifier = new MatthiasMullie\Minify\CSS();
        } else {
            require_once __DIR__ . '/minify/src/JS.php';
            $minifier = new MatthiasMullie\Minify\JS();
        }
        $minifier->add($outputFile);
        $minifier->minify($outputFile);
    }
    update_option('hm_custom_' . $_POST['mode'] . '_ver', time());
    // Unpublish previous revisions
    $wp_query = new WP_Query(array('post_type' => 'hm_custom_' . $_POST['mode'], 'post_status' => 'publish', 'fields' => 'ids', 'nopaging' => true));
    $posts = $wp_query->get_posts();
    foreach ($posts as $postId) {
        if (!wp_update_post(array('ID' => $postId, 'post_status' => 'draft'))) {
            wp_send_json_error();
        }
    }
    if (!wp_update_post(array('ID' => $_POST['rev'], 'post_status' => 'publish', 'post_date' => current_time('Y-m-d H:i:s')))) {
        wp_send_json_error();
    }
    wp_send_json_success();
}