function onAfterRender() { $isDebug=false; $css=$this->param('css'); $javascript=$this->param('javascript'); if(!$css&&!$javascript){ return true; } // Only render for the front site $app =& JFactory::getApplication(); if($app->getName() != 'site') { return true; } $document =& JFactory::getDocument(); $doctype = $document->getType(); // Only render for HTML output if ( $doctype != 'html' ) { return; } //excludeComponents $excludeComponents=$this->param('excludeComponents'); if(isset($excludeComponents)&&$excludeComponents){ $components=@explode(',',$excludeComponents); $option=JRequest::getVar('option'); if(isset($option)&&in_array($option,$components)){ return true; } } //gzip checking $isGZ=$this->param('gzip'); if($isGZ){ $encoding = JResponse::_clientEncoding(); if (!$encoding){ $isGZ=false; } if (!extension_loaded('zlib') || ini_get('zlib.output_compression')) { $isGZ=false; } } $body = JResponse::getBody(); $isok=true; $compressor=new jsCssCompressor(); $baseUrl=JURI::base(true).'/'; if($javascript){ $scriptRegex="/<script [^>]+(\/>|><\/script>)/i"; $jsRegex="/([^\"\'=]+\.(js))[\"\']/i"; preg_match_all($scriptRegex, $body, $matches); $scripts=@implode('',$matches[0]); preg_match_all($jsRegex,$scripts,$matches); $scriptFiles= array(); foreach($matches[1] as $script){ if(isInternal($script)){ //if $baseurl=='/'; may need specail handle $parts=@explode( JURI::base(),$script); if(count($parts)>1&&endwith($parts[1],'.js')){ $script=JPATH_ROOT.DS.$parts[1]; $script=replaceSperator($script); $scriptFiles[]=$script; }else if(endwith($script,'.js')){ $script=$_SERVER['DOCUMENT_ROOT'].DS.$script; $script=replaceSperator($script); if(file_exists($script)){ $scriptFiles[]=$script; }else{ $script=JPATH_ROOT.DS.$script; $script=replaceSperator($script); if(file_exists($script)){ $scriptFiles[]=$script; } } } } } $scriptFiles=array_unique($scriptFiles); $customOrder=$this->param('customOrder'); $jqueryNoConflict=$this->param('jqueryNoConflict'); $jquery=$this->param('jquery'); $exclude=$this->param('excludeJs'); $excludeJs=array(); if(isset($exclude)&&$exclude){ $excludeJs=@explode(',',$exclude); } $predefinedExcludeJs=array('xajax.js','script.js','tiny_mce.js','com_community/assets/toolbar.js'); $excludeJs=@array_merge($excludeJs,$predefinedExcludeJs); $mappedScripts=array(); foreach($scriptFiles as $sf){ $file=strrchr($sf,DS); if(isset($file)){ $file=substr($file,1); $mappedScripts[trim($file)]=$sf; } } $firstScripts=explode(',',$customOrder); $orderedScripts=array(); foreach($firstScripts as $fs){ $fs=trim($fs); if(array_key_exists($fs,$mappedScripts)){ $orderedScripts[]=$mappedScripts[$fs]; } } //append all js, ignore customorded files foreach($scriptFiles as $sf){ if(!in_array($sf,$orderedScripts)){ $orderedScripts[]=$sf; } } if(isset($jquery)&&isset($mappedScripts[$jquery])){
<?php include_once 'js_merge.php'; if ($_POST['t'] == "css") { header("Content-Disposition: attachment; filename=compressed.css"); echo jsCssCompressor::compressCss($_POST['s']); } if ($_POST['t'] == "js") { header("Content-Disposition: attachment; filename=compressed.js"); echo jsCssCompressor::compressJs($_POST['s']); }
private function strip_spaces_js($data) { $strip_r = array('function', 'else', 'typeof', 'case', 'new', 'var', 'return', 'in', '\\|\\|', '\\&\\&'); $strip_l = array('typeof', 'in', '\\|\\|', '\\&\\&', 'else'); $strip_ap = array('while', 'for', 'foreach', 'do', 'switch'); if (!self::$block_js) { function strip_zap($m) { if ($m[1] == "}") { return '};' . $m[2]; } } function strip_right($m) { return ' ' . $m[2] . $m[3] . ' {*}' . $m[4] . ' '; } function strip_left($m) { return ' ' . $m[2] . '{*}' . $m[3] . $m[4] . ' '; } self::$block_js = 1; } foreach ($strip_r as $v) { $f = '/(([\\}\\{\\)\\(\\; =]{1})(' . $v . ')([\\}\\{\\)\\(; ]{1}))+/i'; $data = preg_replace_callback($f, 'strip_right', $data); } foreach ($strip_l as $v) { $f = '/(([\\}\\{\\)\\(\\; =]{1})(' . $v . ')([\\}\\{\\)\\(; ]{1}))+/i'; $data = preg_replace_callback($f, 'strip_left', $data); } foreach ($strip_ap as $v) { $f1[0] = '/([}]{1}' . $v . '( ||{*}))+/i'; $r1[0] = '};' . $v; $data = preg_replace($f1, $r1, $data); } $data = eregi_replace("[ ]+", '', $data); $data = eregi_replace("\\{\\*\\}", ' ', $data); $f = '/([\\}]{1})([a-z]{1})/i'; $data = preg_replace_callback($f, 'strip_zap', $data); return $data; }