protected function getOptions() { $plugin = JchPlatformPlugin::getPlugin(); $pluginParams = new JRegistry(); $pluginParams->loadString($plugin->params); $pluginParams->set('sprite-path', JchPlatformPaths::spriteDir()); $CssSpriteGenClass = 'JchOptimize\\CssSpriteGen'; $oSprite = new JchOptimizeSpriteGenerator($pluginParams); $CssSpriteGen = new $CssSpriteGenClass($oSprite->getImageLibrary(), $pluginParams); $aSpriteFormats = $CssSpriteGen->GetSpriteFormats(); $this->default = $aSpriteFormats[0]; $options = array(); foreach ($aSpriteFormats as $sSpriteFormat) { $option = JHtml::_('select.option', $sSpriteFormat, $sSpriteFormat, 'value', 'text'); $options[] = $option; } reset($options); return $options; }
/** * * @param type $oObj * @param type $sCss * @return type */ public function generateAdminLinks($oObj, $sCss) { JCH_DEBUG ? JchPlatformProfiler::start('GenerateAdminLinks') : null; $params = clone $this->params; $params->set('javascript', '1'); $params->set('css', '1'); $params->set('excludeAllExtensions', '0'); $params->set('css_minify', '0'); $params->set('debug', '0'); $params->set('bottom_js', '2'); $sHtml = $oObj->getOriginalHtml(); $oParser = new JchOptimizeParser($params, $sHtml, JchOptimizeFileRetriever::getInstance()); $aLinks = $oParser->getReplacedFiles(); if ($sCss == '' && !empty($aLinks['css'][0])) { $oCombiner = new JchOptimizeCombiner($params, $this->bBackend); $oCssParser = new JchOptimizeCssParser($params, $this->bBackend); $oCombiner->combineFiles($aLinks['css'][0], 'css', $oCssParser); $sCss = $oCombiner->css; } $oSpriteGenerator = new JchOptimizeSpriteGenerator($params); $aLinks['images'] = $oSpriteGenerator->processCssUrls($sCss, TRUE); JCH_DEBUG ? JchPlatformProfiler::stop('GenerateAdminLinks', TRUE) : null; return $aLinks; }
/** * * @param type $oObj * @param type $sCss * @return type */ public function generateAdminLinks($oObj, $sCss) { JCH_DEBUG ? JchPlatformProfiler::start('GenerateAdminLinks') : null; $params = clone $this->params; $params->set('javascript', '1'); $params->set('css', '1'); $params->set('excludeAllExtensions', '0'); $params->set('css_minify', '0'); $params->set('debug', '0'); $params->set('bottom_js', '2'); ##<procode>## $params->set('pro_phpAndExternal', '1'); $params->set('pro_inlineScripts', '1'); $params->set('pro_lazyload', '0'); ##</procode>## $sHtml = $oObj->getOriginalHtml(); $oParser = new JchOptimizeParser($params, $sHtml, JchOptimizeFileRetriever::getInstance()); $aLinks = $oParser->getReplacedFiles(); if ($sCss == '' && !empty($aLinks['css'][0])) { $oCombiner = new JchOptimizeCombiner($params, $this->bBackend); $oCssParser = new JchOptimizeCssParser($params, $this->bBackend); $oCombiner->combineFiles($aLinks['css'][0], 'css', $oCssParser); $sCss = $oCombiner->css; } $oSpriteGenerator = new JchOptimizeSpriteGenerator($params); $aLinks['images'] = $oSpriteGenerator->processCssUrls($sCss, TRUE); ##<procode>## $sRegex = $oParser->getLazyLoadRegex(); preg_match_all($sRegex, $oParser->getBodyHtml(), $aMatches); $aLinks['lazyload'] = $aMatches[1]; ##</procode>## JCH_DEBUG ? JchPlatformProfiler::stop('GenerateAdminLinks', TRUE) : null; return $aLinks; }
/** * Get aggregated and possibly minified content from js and css files * * @param array $aUrlArray Array of urls of css or js files for aggregation * @param string $sType css or js * @return string Aggregated (and possibly minified) contents of files */ public function getContents($aUrlArray, $sType, $oParser) { JCH_DEBUG ? JchPlatformProfiler::start('GetContents - ' . $sType, TRUE) : null; $oCssParser = $this->oCssParser; $sCriticalCss = ''; $aSpriteCss = array(); $aFontFace = array(); $aContentsArray = array(); foreach ($aUrlArray as $index => $aUrlInnerArray) { $sContents = $this->combineFiles($aUrlInnerArray, $sType, $oCssParser); $sContents = $this->prepareContents($sContents); $aContentsArray[$index] = $sContents; } if ($sType == 'css') { if ($this->params->get('csg_enable', 0)) { try { $oSpriteGenerator = new JchOptimizeSpriteGenerator($this->params); $aSpriteCss = $oSpriteGenerator->getSprite($this->{$sType}); } catch (Exception $ex) { JchOptimizeLogger::log($ex->getMessage(), $this->params); $aSpriteCss = array(); } } if ($this->params->get('pro_optimizeCssDelivery', '0')) { if (is_array($aSpriteCss) && !empty($aSpriteCss) && isset($aSpriteCss['needles']) && isset($aSpriteCss['replacements'])) { $this->{$sType} = str_replace($aSpriteCss['needles'], $aSpriteCss['replacements'], $this->{$sType}); } $oParser->params->set('pro_InlineScripts', '1'); $oParser->params->set('pro_InlineStyles', '1'); $sHtml = $oParser->cleanHtml(); $aCssContents = $oCssParser->optimizeCssDelivery($this->{$sType}, $sHtml); $sCriticalCss .= $oCssParser->sortImports($aCssContents['criticalcss']); $sCriticalCss = $sCriticalCss; $aFontFace = preg_split('#}\\K[^@]*+#', $aCssContents['font-face'], -1, PREG_SPLIT_NO_EMPTY); } } try { $oAdmin = new JchOptimizeAdmin($this->params); $oAdmin->getAdminLinks($oParser, JchPlatformUtility::menuId(), $this->css); } catch (Exception $ex) { JchOptimizeLogger::log($ex->getMessage(), $this->params); } $aContents = array('filemtime' => JchPlatformUtility::unixCurrentDate(), 'file' => $aContentsArray, 'criticalcss' => $sCriticalCss, 'spritecss' => $aSpriteCss, 'font-face' => $aFontFace); JCH_DEBUG ? JchPlatformProfiler::stop('GetContents - ' . $sType) : null; return $aContents; }
/** * Get aggregated and possibly minified content from js and css files * * @param array $aUrlArray Array of urls of css or js files for aggregation * @param string $sType css or js * @return string Aggregated (and possibly minified) contents of files */ public function getContents($aUrlArray, $sType, $oParser) { $oCssParser = new JchOptimizeCssParser($oParser, $this->bBackend); $sCriticalCss = ''; $aSpriteCss = array(); $aFontFace = array(); $aContentsArray = array(); foreach ($aUrlArray as $index => $aUrlInnerArray) { $sContents = $this->combineFiles($aUrlInnerArray, $sType, $oCssParser); $sContents = $this->prepareContents($sContents); $aContentsArray[$index] = $sContents; } if ($sType == 'css') { if ($this->params->get('csg_enable', 0)) { try { $oSpriteGenerator = new JchOptimizeSpriteGenerator($this->params); $aSpriteCss = $oSpriteGenerator->getSprite($this->{$sType}); } catch (Exception $ex) { JchOptimizeLogger::log($ex->getMessage(), $this->params); $aSpriteCss = array(); } } if ($this->params->get('pro_optimizeCssDelivery', '0')) { if (!empty($aSpriteCss)) { $this->{$sType} = str_replace($aSpriteCss['needles'], $aSpriteCss['replacements'], $this->{$sType}); } $oParser->params->set('pro_InlineScripts', '0'); $oParser->params->set('pro_InlineStyles', '0'); $sHtml = $oParser->cleanHtml(); $aCssContents = $oCssParser->optimizeCssDelivery($this->{$sType}, $sHtml); $sCriticalCss .= $aCssContents['criticalcss']; $aFontFace = preg_split('#}\\K[^@]*+#', $aCssContents['font-face'], -1, PREG_SPLIT_NO_EMPTY); } } $aContents = array('filemtime' => JchPlatformUtility::unixCurrentDate(), 'file' => $aContentsArray, 'criticalcss' => $sCriticalCss, 'spritecss' => $aSpriteCss, 'font-face' => $aFontFace); return $aContents; }
/** * * @param type $aUrlArray * @param type $params * @return type */ public static function getImages($aUrlArray, $params) { $oCombiner = new JchOptimizeCombiner($params, TRUE); $oCssParser = new JchOptimizeCssParser($oCombiner->sLnEnd, $oCombiner->bBackend); try { $sCss = $oCombiner->combineFiles($aUrlArray, 'css', $oCssParser); $oSpriteGenerator = new JchOptimizeSpriteGenerator($params); $aMatches = $oSpriteGenerator->processCssUrls($sCss, TRUE); } catch (Exception $Ex) { $GLOBALS['bTextArea'] = TRUE; if ($oCombiner->params->get('log', '0')) { JchOptimizeLogger::log($Ex->getMessage()); } throw new Exception(JText::_('Failed fetching images for the multiselect exclude options in sprite generator. ' . 'Will render textareas instead.')); } return $aMatches; }