예제 #1
0
파일: Data.php 프로젝트: mygento/minify
 /**
  * Merge specified files into one
  *
  * By default will not merge, if there is already merged file exists and it
  * was modified after its components
  * If target file is specified, will attempt to write merged contents into it,
  * otherwise will return merged content
  * May apply callback to each file contents. Callback gets parameters:
  * (<existing system filename>, <file contents>)
  * May filter files by specified extension(s)
  * Returns false on error
  *
  * @param array $srcFiles
  * @param string|false $targetFile - file path to be written
  * @param bool $mustMerge
  * @param callback $beforeMergeCallback
  * @param array|string $extensionsFilter
  * @return bool|string
  */
 public function mergeFiles(array $srcFiles, $targetFile = false, $mustMerge = false, $beforeMergeCallback = null, $extensionsFilter = array())
 {
     $content_type = pathinfo($targetFile, PATHINFO_EXTENSION);
     if (!Mage::getStoreConfig('minify/general/enabled') || $content_type != 'css' && $content_type != 'js') {
         return parent::mergeFiles($srcFiles, $targetFile, $mustMerge, $beforeMergeCallback, $extensionsFilter);
     }
     if (!Mage::getStoreConfig('minify/general/' . $content_type)) {
         return parent::mergeFiles($srcFiles, $targetFile, $mustMerge, $beforeMergeCallback, $extensionsFilter);
     }
     try {
         $shouldMinify = $this->shouldMinify($mustMerge, $targetFile, $srcFiles);
         if ($shouldMinify) {
             $result = parent::mergeFiles($srcFiles, false, $mustMerge, $beforeMergeCallback, $extensionsFilter);
             Varien_Profiler::start('minify_file_' . $targetFile);
             switch ($content_type) {
                 case 'css':
                     $minifier = new MatthiasMullie\Minify\CSS($result);
                     break;
                 case 'js':
                     $minifier = new MatthiasMullie\Minify\JS($result);
                     break;
             }
             $minifier->minify($targetFile);
             Varien_Profiler::stop('minify_file_' . $targetFile);
         }
         return true;
     } catch (Exception $e) {
         Mage::logException($e);
     }
     return false;
 }
예제 #2
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;
 }
예제 #3
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;
 }
예제 #4
0
파일: minify.php 프로젝트: dg711/moodle
    /**
     * Minify JS code.
     *
     * @param string $content
     * @return string minified JS code
     */
    public static function js($content)
    {
        try {
            $minifier = new MatthiasMullie\Minify\JS($content);
            return $minifier->minify();
        } catch (Exception $e) {
            ob_end_clean();
            $error = $e->getMessage();
        }
        $return = <<<EOD

try {console.log('Error: Minimisation of JavaScript failed!');} catch (e) {}

// Error: {$error}
// Problem detected during JavaScript minimisation, please review the following code
// =================================================================================


EOD;
        return $return . $content;
    }
 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;
 }
 public function compress_js_action($full_path)
 {
     if (is_file($full_path)) {
         $file_size_before = filesize($full_path);
         if (function_exists('exec') && exec('command -v java >/dev/null && echo "yes" || echo "no"') == 'yes') {
             file_put_contents($full_path . '.log', date('c') . " - COMPRESSING JS WITH CLOSURE\n", FILE_APPEND);
             // Remove Javascript String Continuations
             $contents = file_get_contents($full_path);
             if (strpos($contents, "\\" . PHP_EOL) !== FALSE) {
                 //only remove continuations if they exist
                 $contents = preg_replace('#\\\\(\\n|\\r\\n?)#', '', $contents);
                 file_put_contents($full_path, $contents);
             }
             $cmd = 'java -jar \'' . WP_PLUGIN_DIR . '/merge-minify-refresh/closure-compiler.jar\' --language_in ECMASCRIPT5 --warning_level QUIET --js \'' . $full_path . '\' --js_output_file \'' . $full_path . '.tmp\'';
             exec($cmd . ' 2>&1', $output);
             if (count($output) == 0) {
                 $min_path = str_replace('.js', '.min.js', $full_path);
                 rename($full_path . '.tmp', $min_path);
                 $file_size_after = filesize($min_path);
                 file_put_contents($full_path . '.log', date('c') . " - COMPRESSION COMPLETE - " . $this->human_filesize($file_size_before - $file_size_after) . " saved\n", FILE_APPEND);
             } else {
                 ob_start();
                 var_dump($output);
                 $error = ob_get_contents();
                 ob_end_clean();
                 file_put_contents($full_path . '.log', date('c') . " - COMPRESSION FAILED\n" . $error, FILE_APPEND);
                 unlink($full_path . '.tmp');
             }
         } else {
             require_once 'Minify/Minify.php';
             require_once 'Minify/CSS.php';
             require_once 'Minify/Converter.php';
             require_once 'Minify/Exception.php';
             require_once 'Minify/JS.php';
             file_put_contents($full_path . '.log', date('c') . " - COMPRESSING WITH MINIFY (PHP exec not available)\n", FILE_APPEND);
             $minifier = new MatthiasMullie\Minify\JS($full_path);
             $min_path = str_replace('.js', '.min.js', $full_path);
             $minifier->minify($min_path);
             $file_size_after = filesize($min_path);
             file_put_contents($full_path . '.log', date('c') . " - COMPRESSION COMPLETE - " . $this->human_filesize($file_size_before - $file_size_after) . " saved\n", FILE_APPEND);
         }
     }
 }
예제 #7
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;
     }
 }
예제 #8
0
/******************************************* THE CONFIGS *******************************************************/
// Configs for mode "development" (Slim's default), see the GitHub readme for details on setting the environment
$app->configureMode('development', function () use($app) {
    // pre-application hook, performs stuff before real action happens @see http://docs.slimframework.com/#Hooks
    $app->hook('slim.before', function () use($app) {
        // SASS-to-CSS compiler @see https://github.com/panique/php-sass
        SassCompiler::run("scss/", "css/");
        // CSS minifier @see https://github.com/matthiasmullie/minify
        $minifier = new MatthiasMullie\Minify\CSS('css/style.css');
        $minifier->minify('css/style.css');
        // JS minifier @see https://github.com/matthiasmullie/minify
        // DON'T overwrite your real .js files, always save into a different file
        $minifier = new MatthiasMullie\Minify\JS('js/index-page.js');
        $minifier->minify('js/index-page.minified.js');
        $minifier = new MatthiasMullie\Minify\JS('js/search-properties.js');
        $minifier->minify('js/search-properties.minified.js');
    });
    // Set the configs for development environment
    // Get Onboard Property API Key here, https://developer.onboard-apis.com/
    $app->config(array('debug' => true, 'obpropapi' => array('api_url' => 'https://search.onboard-apis.com/propertyapi/v1.0.0/', 'api_key' => 'Insert Your Onboard Property API Key')));
});
/******************************************** THE MODEL ********************************************************/
// Initialize the model, pass the api configs. $model can now perform all methods from Onboard\model\model.php
$model = new \Onboard\Model\Model($app->config('obpropapi'));
/************************************ THE ROUTES / CONTROLLERS *************************************************/
// GET request on homepage, simply show the view template index.twig
$app->get('/', function () use($app) {
    $app->render('index.twig');
});
// GET requests on /property-records
$app->group('/property-records', function () use($app, $model) {
예제 #9
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;
 }
예제 #10
0
 /**
  * Returns the minified version of the content.
  * Attention: this is only a easy minifing method!
  * 
  * @access protected
  * @param string $type
  * @param string $content
  * @return string
  */
 protected function minifyContent($type, $content)
 {
     $minifier = null;
     if ($type === AssetManager::CSS) {
         $minifier = new \MatthiasMullie\Minify\CSS($content);
     } else {
         if ($type === AssetManager::JS) {
             $minifier = new \MatthiasMullie\Minify\JS($content);
         }
     }
     if ($minifier !== null) {
         return $minifier->minify();
     }
     return $content;
 }
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();
}