Skip to content

Commit

Permalink
[mms] Use Horde_JavascriptMinify package to compress javascript.
Browse files Browse the repository at this point in the history
  • Loading branch information
slusarz committed Jan 22, 2014
1 parent 4647ff8 commit 26b1e07
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 19 deletions.
64 changes: 45 additions & 19 deletions framework/Core/lib/Horde/PageOutput.php
Expand Up @@ -253,6 +253,7 @@ protected function _outputCachedScripts($scripts)
$js_filename = '/static/' . $sig . '.js';
$js_path = $registry->get('fileroot', 'horde') . $js_filename;
$js_url = $registry->get('webroot', 'horde') . $js_filename;
$sourcemap_url = $js_url . '.map';
$exists = file_exists($js_path);
break;

Expand All @@ -265,6 +266,7 @@ protected function _outputCachedScripts($scripts)
// Do lifetime checking here, not on cache display page.
$exists = $cache->exists($sig, $cache_lifetime);
$js_url = Horde::getCacheUrl('js', array('cid' => $sig));
$sourcemap_url = Horde::getCacheUrl('js', array('cid' => $sig . '.map'));
break;
}

Expand All @@ -274,57 +276,81 @@ protected function _outputCachedScripts($scripts)
return;
}

$js_text = '';
foreach ($scripts as $val) {
$js_text .= file_get_contents($val->full_path);
}
$jsmin_params = array(
'logger' => $injector->getInstance('Horde_Log_Logger')
);

switch ($conf['cachejsparams']['compress']) {
case 'closure':
$jsmin_params = array(
$jsmin = 'Horde_JavascriptMinify_Closure';
$jsmin_params = array_merge($jsmin_params, array(
'closure' => $conf['cachejsparams']['closurepath'],
'java' => $conf['cachejsparams']['javapath']
);
'java' => $conf['cachejsparams']['javapath'],
'sourcemap' => $sourcemap_url
));
break;

case 'none':
$jsmin_params = null;
$jsmin = 'Horde_JavascriptMinify_Null';
break;

case 'php':
/* Due to licensing issues, Jsmin might not be available. */
$jsmin = class_exists('Horde_JavascriptMinify_Jsmin')
? 'Horde_JavascriptMinify_Jsmin'
: 'Horde_JavascriptMinify_Null';
break;

case 'uglifyjs':
$jsmin_params = array(
'uglifyjs' => $conf['cachejsparams']['uglifyjspath'],
'uglifyjscmdline' => $conf['cachejsparams']['uglifyjscmdline']
);
$jsmin = 'Horde_JavascriptMinify_Uglifyjs';
$jsmin_params = array_merge($jsmin_params, array(
'cmdline' => $conf['cachejsparams']['uglifyjscmdline'],
'sourcemap' => $sourcemap_url,
'uglifyjs' => $conf['cachejsparams']['uglifyjspath']
));
break;

case 'yui':
$jsmin_params = array(
$jsmin = 'Horde_JavascriptMinify_Yui';
$jsmin_params = array_merge($jsmin_params, array(
'java' => $conf['cachejsparams']['javapath'],
'yui' => $conf['cachejsparams']['yuipath']
);
));
break;

default:
$jsmin_params = array();
/* Treat as a custom driver. */
if (class_exists($conf['cachejsparams']['compress'])) {
$jsmin = $conf['cachejsparams']['compress'];
$jsmin_params = array_merge($jsmin_params, $conf['cachejsparams']);
} else {
$jsmin = 'Horde_JavascriptMinify_Null';
}
break;
}

if (!is_null($jsmin_params)) {
try {
$js_text = $injector->getInstance('Horde_Core_Factory_TextFilter')->filter($js_text, 'JavascriptMinify', $jsmin_params);
} catch (Horde_Exception $e) {}
$js_files = array();
foreach ($scripts as $val) {
$js_files[strval($val->url_full)] = $val->full_path;
}

$jsmin_ob = new $jsmin($js_files, $jsmin_params);
$js_text = $jsmin_ob->minify();

switch ($driver) {
case 'filesystem':
if (!file_put_contents($js_path, $js_text)) {
throw new Horde_Exception('Could not write cached JS file to disk.');
} elseif (isset($jsmin_params['sourcemap'])) {
file_put_contents($js_path . '.map', $jsmin_ob->sourcemap());
}
break;

case 'horde_cache':
$cache->set($sig, $js_text);
if (isset($jsmin_params['sourcemap'])) {
$cache->set($sig . '.map', $jsmin_ob->sourcemap());
}
break;
}
}
Expand Down
16 changes: 16 additions & 0 deletions framework/Core/package.xml
Expand Up @@ -39,6 +39,7 @@
</stability>
<license uri="http://www.horde.org/licenses/lgpl21">LGPL-2.1</license>
<notes>
* [mms] Use Horde_JavascriptMinify package to compress javascript.
* [mms] Combine all javscript to compress into a single string.
* [mjr] Improve ActiveSync searches by no longer limiting available searched fields (Request #12917).
* [mms] Support UglifyJS for compressing javascript.
Expand Down Expand Up @@ -1062,6 +1063,13 @@
<max>3.0.0alpha1</max>
<exclude>3.0.0alpha1</exclude>
</package>
<package>
<name>Horde_JavascriptMinify</name>
<channel>pear.horde.org</channel>
<min>1.0.0</min>
<max>2.0.0alpha1</max>
<exclude>2.0.0alpha1</exclude>
</package>
<package>
<name>Horde_Lock</name>
<channel>pear.horde.org</channel>
Expand Down Expand Up @@ -1309,6 +1317,13 @@
<max>3.0.0alpha1</max>
<exclude>3.0.0alpha1</exclude>
</package>
<package>
<name>Horde_JavascriptMinify_Jsmin</name>
<channel>pear.horde.org</channel>
<min>1.0.0</min>
<max>2.0.0alpha1</max>
<exclude>2.0.0alpha1</exclude>
</package>
<package>
<name>Horde_Kolab_Server</name>
<channel>pear.horde.org</channel>
Expand Down Expand Up @@ -3270,6 +3285,7 @@
<date>2013-12-07</date>
<license uri="http://www.horde.org/licenses/lgpl21">LGPL-2.1</license>
<notes>
* [mms] Use Horde_JavascriptMinify package to compress javascript.
* [mms] Combine all javscript to compress into a single string.
* [mjr] Improve ActiveSync searches by no longer limiting available searched fields (Request #12917).
* [mms] Support UglifyJS for compressing javascript.
Expand Down
4 changes: 4 additions & 0 deletions horde/config/conf.xml
Expand Up @@ -1203,6 +1203,8 @@
application launcher.">/opt/java/jre/bin/java</configstring>
<configstring name="closurepath" desc="The path to the Closure compiler
.jar file"></configstring>
<configstring name="cmdline" required="false" desc="Any additional
command line arguments to use."></configstring>
</case>
<case name="php" desc="Built-in compressor (Medium compression, good
speed)" />
Expand All @@ -1219,6 +1221,8 @@
application launcher.">/opt/java/jre/bin/java</configstring>
<configstring name="yuipath" desc="The path to the YUI compressor
.jar file"></configstring>
<configstring name="cmdline" required="false" desc="Any additional
command line arguments to use."></configstring>
</case>
</configswitch>
<configinteger name="lifetime" desc="Lifetime of the cached files, in
Expand Down

0 comments on commit 26b1e07

Please sign in to comment.