/**
  * Generates sprite image and return background positions for image replaced with sprite
  * 
  * @param array $aMatches       Array of css declarations and image url to be included in sprite
  * @param object $oSpriteGen    Object of sprite generator
  * @return array
  */
 public function generateSprite($aMatches, $oSpriteGen)
 {
     $aDeclaration = $aMatches[0];
     $aImages = $aMatches[1];
     $oSpriteGen->CreateSprite($aImages);
     $aSpriteCss = $oSpriteGen->GetCssBackground();
     $aPatterns = array();
     $aPatterns[0] = '#background-image:#';
     // Background image declaration regex
     $aPatterns[1] = '#(background:[^;]*)\\b' . '((?:top|bottom|left|right|center|-?[0-9]+(?:%|[c-x]{2})?)' . '\\s(?:top|bottom|left|right|center|-?[0-9]+(?:%|[c-x]{2})?))([^;]*;)#';
     $aPatterns[2] = '#url\\((?=[^\\)]+\\.(?:png|gif|jpe?g))[^\\)]+\\)#';
     //Background image regex
     $aPatterns[3] = '#background-position:[^;]+;#';
     //Background position declaration regex
     $juri_base = JUri::base(true);
     $sBaseUrl = $juri_base == '/' ? $juri_base : $juri_base . '/';
     $sSpriteName = $oSpriteGen->GetSpriteFilename();
     $aSearch = array();
     for ($i = 0; $i < count($aSpriteCss); $i++) {
         if (isset($aSpriteCss[$i])) {
             $aSearch['needles'][] = $aDeclaration[$i];
             $aReplacements = array();
             $aReplacements[0] = 'background:';
             $aReplacements[1] = '$1$3';
             $aReplacements[2] = 'url(' . $sBaseUrl . 'images/jch-optimize/' . $sSpriteName . ') ' . $aSpriteCss[$i];
             $aReplacements[3] = '';
             $sReplacement = preg_replace($aPatterns, $aReplacements, $aDeclaration[$i]);
             if (is_null($sReplacement)) {
                 throw new Exception(JText::_('Error finding replacements for sprite background positions'));
             }
             $aSearch['replacements'][] = $sReplacement;
         }
     }
     return $aSearch;
 }
Example #2
0
 /**
  * Generates sprite image and return background positions for image replaced with sprite
  * 
  * @param array $aMatches       Array of css declarations and image url to be included in sprite
  * @param object $oSpriteGen    Object of sprite generator
  * @return array
  */
 public function generateSprite($aMatches, $oSpriteGen)
 {
     $aDeclaration = $aMatches[0];
     $aImages = $aMatches[1];
     $oSpriteGen->CreateSprite($aImages);
     $aSpriteCss = $oSpriteGen->GetCssBackground();
     $aPatterns = array();
     $aPatterns[0] = '#background-image:#';
     // Background image declaration regex
     $aPatterns[1] = '#(background:[^;}]*)\\b' . '((?:top|bottom|left|right|center|-?[0-9]+(?:%|[c-x]{2})?)' . '\\s(?:top|bottom|left|right|center|-?[0-9]+(?:%|[c-x]{2})?))([^;}]*[;}])#';
     $aPatterns[2] = '#url\\((?=[^\\)]+\\.(?:png|gif|jpe?g))[^\\)]+\\)#';
     //Background image regex
     $aPatterns[3] = '#background-position:[^;}]+;?#';
     //Background position declaration regex
     $sSpriteName = $oSpriteGen->GetSpriteFilename();
     $aSearch = array();
     for ($i = 0; $i < count($aSpriteCss); $i++) {
         if (isset($aSpriteCss[$i])) {
             $aSearch['needles'][] = $aDeclaration[$i];
             $spritepath = JchOptimizeHelper::cookieLessDomain($this->params) . JchPlatformPaths::spriteDir(TRUE) . $sSpriteName;
             $aReplacements = array();
             $aReplacements[0] = 'background:';
             $aReplacements[1] = '$1$3';
             $aReplacements[2] = 'url(' . $spritepath . ') ' . $aSpriteCss[$i];
             $aReplacements[3] = '';
             $sReplacement = preg_replace($aPatterns, $aReplacements, $aDeclaration[$i]);
             if (is_null($sReplacement)) {
                 throw new Exception(JchPlatformUtility::translate('Error finding replacements for sprite background positions'));
             }
             $aSearch['replacements'][] = $sReplacement;
         }
     }
     return $aSearch;
 }