Esempio n. 1
0
 private function _getAssetPath($image)
 {
     $url = $this->_getImageUrl($image);
     if (stripos($url, "/assets/") === 0) {
         $file = new Kwf_Assets_Dependency_File(substr($url, 8));
         return $file->getAbsoluteFileName();
     } else {
         throw new Kwf_Exception("Path does not include '/assets/'. Not implemented yet.");
     }
 }
Esempio n. 2
0
 public function testFileCreateDependency()
 {
     $f = Kwf_Assets_Dependency_File::createDependency('kwf/Kwf_js/Kwf.js', new Kwf_Assets_Dependency_EmptyProviderList());
     $this->assertTrue($f instanceof Kwf_Assets_Dependency_File_Js);
     $this->assertEquals('text/javascript', $f->getMimeType());
     $this->assertContains('Kwf.clone', $f->getContents('en'));
     $this->assertEquals(array(), $f->getDependencies(Kwf_Assets_Dependency_Abstract::DEPENDENCY_TYPE_ALL));
 }
Esempio n. 3
0
 public function getDependency($dependencyName)
 {
     if (substr($dependencyName, 0, 4) != 'Kwf.') {
         return null;
     }
     $d = '/Kwf_js/' . str_replace('.', '/', substr($dependencyName, 4)) . '.js';
     if (file_exists(KWF_PATH . $d)) {
         return Kwf_Assets_Dependency_File::createDependency('kwf' . $d, $this->_providerList);
     }
     return null;
 }
 /**
  * @internal
  */
 public static function _buildAll($componentClasses)
 {
     $masterLayouts = "\$all-master-layouts: ();\n";
     foreach (Kwc_Abstract::getComponentClasses() as $c) {
         if (Kwc_Abstract::hasSetting($c, 'masterLayout')) {
             $masterLayout = Kwc_Abstract::getSetting($c, 'masterLayout');
             $f = new Kwf_Assets_Dependency_File(Kwf_Assets_ProviderList_Default::getInstance(), $masterLayout['layoutConfig']);
             $masterLayouts .= $f->getContentsSourceString() . "\n";
             $masterLayouts .= "\$all-master-layouts: map-merge(\$all-master-layouts, \$master-layouts);\n";
         }
     }
     $masterLayouts .= "\$master-layouts: \$all-master-layouts;\n";
     $masterLayouts .= "\$all-master-layouts: null\n";
     $file = "temp/scss-generated/config/_master-layouts.scss";
     if (!is_dir(dirname($file))) {
         mkdir(dirname($file), 0777, true);
     }
     if (!file_exists($file) || file_get_contents($file) != $masterLayouts) {
         //only modify if actually changed
         file_put_contents($file, $masterLayouts);
     }
     foreach ($componentClasses as $cmp) {
         if (Kwc_Abstract::hasSetting($cmp, 'masterLayout')) {
             self::getInstance($cmp)->_build();
         }
     }
     foreach ($componentClasses as $cmp) {
         if (Kwc_Abstract::hasSetting($cmp, 'masterLayout')) {
             //fills $_supportedContexts and $_supportedBoxContexts
             self::getInstance($cmp)->getSupportedContexts();
             self::getInstance($cmp)->_getSupportedBoxesContexts();
         }
     }
     $data = array('contexts' => self::$_supportedContexts, 'boxContexts' => self::$_supportedBoxContexts);
     file_put_contents('build/component/masterlayoutcontexts', serialize($data));
 }
Esempio n. 5
0
 public function getDependency($dependencyName)
 {
     if ($this->_namespace) {
         if (substr($dependencyName, 0, strlen($this->_namespace) + 1) == $this->_namespace . '.') {
             $dependencyName = substr($dependencyName, strlen($this->_namespace) + 1);
         } else {
             return null;
         }
     }
     $d = $this->_basePath . '/' . str_replace('.', '/', $dependencyName) . '.js';
     if (file_exists($d)) {
         $d = $this->_basePathWithType . '/' . str_replace('.', '/', $dependencyName) . '.js';
         return Kwf_Assets_Dependency_File::createDependency($d, $this->_providerList);
     }
     return null;
 }
 public function getDependency($dependencyName)
 {
     if ($dependencyName == 'ViewsUser') {
         $deps = array();
         foreach (glob(KWF_PATH . '/views/user/*.scss') as $f) {
             $f = 'kwf/' . substr($f, strlen(KWF_PATH) + 1);
             $deps[] = Kwf_Assets_Dependency_File::createDependency($f, $this->_providerList);
         }
         if (file_exists('views/user')) {
             foreach (glob('views/user/*.scss') as $f) {
                 $deps[] = Kwf_Assets_Dependency_File::createDependency('web/' . $f, $this->_providerList);
             }
         }
         return new Kwf_Assets_Dependency_Dependencies($deps, $dependencyName);
     }
     return null;
 }
Esempio n. 7
0
 public function getContentsPacked()
 {
     $cacheId = 'scss-v2-' . $this->getIdentifier();
     $ret = Kwf_Assets_ContentsCache::getInstance()->load($cacheId);
     if ($ret !== false) {
         return $ret;
     }
     $fileName = $this->getAbsoluteFileName();
     static $loadPath;
     if (!isset($loadPath)) {
         $loadPath = array();
         foreach (glob(realpath(VENDOR_PATH) . '/*/*') as $p) {
             $bowerMain = null;
             $mainExt = null;
             if (file_exists($p . '/bower.json')) {
                 $bower = json_decode(file_get_contents($p . '/bower.json'));
                 if (isset($bower->main) && is_string($bower->main)) {
                     $bowerMain = $bower->main;
                     $mainExt = substr($bowerMain, -5);
                 }
             }
             if ($mainExt == '.scss' || $mainExt == '.sass') {
                 $mainDir = substr($bowerMain, 0, strrpos($bowerMain, '/'));
                 $loadPath[] = $p . '/' . $mainDir;
             } else {
                 if (file_exists($p . '/scss')) {
                     $loadPath[] = $p . '/scss';
                 }
             }
         }
         $loadPath[] = './scss';
         if (KWF_PATH == '..') {
             $loadPath[] = substr(getcwd(), 0, strrpos(getcwd(), '/')) . '/sass/Kwf/stylesheets';
         } else {
             $loadPath[] = KWF_PATH . '/sass/Kwf/stylesheets';
         }
         $loadPath[] = 'temp/scss-generated';
         $loadPath = escapeshellarg(implode(PATH_SEPARATOR, $loadPath));
     }
     $buildFile = 'temp/scss-' . str_replace(array('\\', ':', '/', '.', '-'), '_', $this->getFileNameWithType());
     if (!is_dir('temp/scss-generated')) {
         mkdir('temp/scss-generated');
     }
     if ($this->_config) {
         $config = "\$config: " . self::_generateScssConfig($this->_config) . ";\n";
         file_put_contents('temp/scss-generated/_config.scss', $config);
     } else {
         if (file_exists('temp/scss-generated/_config.scss')) {
             unlink('temp/scss-generated/_config.scss');
         }
     }
     if (substr($fileName, 0, 2) == './') {
         $fileName = str_replace(DIRECTORY_SEPARATOR, '/', getcwd()) . substr($fileName, 1);
     }
     $wrapperContents = "";
     $wrapperContents .= "@import \"config/global-settings\";\n";
     $wrapperContents .= "@import \"{$fileName}\";\n";
     $wrapperFile = tempnam('temp', 'scw');
     file_put_contents($wrapperFile, $wrapperContents);
     chmod($wrapperFile, 0777);
     $bin = Kwf_Config::getValue('server.nodeSassBinary');
     if (!$bin) {
         $bin = getcwd() . "/" . VENDOR_PATH . "/bin/node " . getcwd() . '/node_modules/node-sass/bin/node-sass';
     } else {
         $p = json_decode(file_get_contents(getcwd() . '/node_modules/node-sass/package.json'), true);
         $bin = str_replace('%version%', $p['version'], $bin);
         unset($p);
     }
     $cmd = "{$bin} --include-path {$loadPath} --output-style compressed ";
     $cmd .= " --source-map " . escapeshellarg($buildFile . '.map');
     $cmd .= " " . escapeshellarg($wrapperFile) . " " . escapeshellarg($buildFile);
     $cmd .= " 2>&1";
     $out = array();
     exec($cmd, $out, $retVal);
     if ($retVal) {
         throw new Kwf_Exception("compiling sass failed: " . implode("\n", $out));
     }
     $map = json_decode(file_get_contents("{$buildFile}.map"));
     $sources = array();
     $masterFiles = array_values($this->_configMasterFiles);
     foreach ($map->sources as $k => $i) {
         //sources are relative to cache/sass, strip that
         if (substr($i, 0, 15) == 'scss-generated/' || substr($i, 0, 3) == 'scw') {
             $f = substr($this->getFileNameWithType(), 0, -5) . '/temp/' . $i;
             $map->{'_x_org_koala-framework_sourcesContent'}[$k] = file_get_contents('temp/' . $i);
             $masterFiles[] = 'temp/' . $i;
         } else {
             if (substr($i, 0, 3) != '../') {
                 throw new Kwf_Exception('source doesn\'t start with ../: ' . $i);
             }
             $i = substr($i, 3);
             $f = self::getPathWithTypeByFileName($this->_providerList, getcwd() . '/' . $i);
             if (!$f) {
                 throw new Kwf_Exception("Can't find path for '" . getcwd() . '/' . $i . "'");
             }
             $dep = new Kwf_Assets_Dependency_File($this->_providerList, $i);
             $masterFiles[] = $dep->getAbsoluteFileName();
         }
         $sources[$k] = '/assets/' . $f;
         if (substr($f, 0, 16) == 'web/scss/config/') {
             $masterFiles[] = KWF_PATH . '/sass/Kwf/stylesheets/config/' . substr($f, 16);
         } else {
             if (substr($f, 0, 32) == 'kwf/sass/Kwf/stylesheets/config/') {
                 $masterFiles[] = 'scss/config/' . substr($f, 32);
             }
         }
     }
     $map->{'_x_org_koala-framework_masterFiles'} = $masterFiles;
     $map->sources = $sources;
     $map->file = $buildFile;
     file_put_contents("{$buildFile}.map", json_encode($map));
     unlink($wrapperFile);
     if ($this->_config) {
         unlink('temp/scss-generated/_config.scss');
     }
     $ret = file_get_contents($buildFile);
     $ret = str_replace("@charset \"UTF-8\";\n", '', $ret);
     //remove charset, no need to adjust sourcemap as sourcemap doesn't include that (bug in libsass)
     $ret = str_replace(chr(0xef) . chr(0xbb) . chr(0xbf), '', $ret);
     //remove byte order mark
     $ret = preg_replace("#/\\*\\# sourceMappingURL=.* \\*/#", '', $ret);
     $map = new Kwf_SourceMaps_SourceMap(file_get_contents("{$buildFile}.map"), $ret);
     $map->setMimeType('text/css');
     unlink($buildFile);
     unlink("{$buildFile}.map");
     Kwf_Assets_ContentsCache::getInstance()->save($map, $cacheId);
     return $map;
 }
Esempio n. 8
0
 public function getFilename()
 {
     $d = $this->_getIconAndType();
     $file = new Kwf_Assets_Dependency_File(Kwf_Assets_ProviderList_Default::getInstance(), $d['type'] . '/' . $d['icon']);
     return $file->getAbsoluteFileName();
 }
Esempio n. 9
0
 protected function _getRawContents($language)
 {
     return parent::getContents($language);
 }
Esempio n. 10
0
 public function getDependency($dependencyName)
 {
     if ($dependencyName == 'Components') {
         $ret = array();
         $nonDeferDep = array();
         $files = Kwf_Component_Abstract_Admin::getComponentFiles($this->_rootComponentClass, array('css' => array('filename' => 'Web', 'ext' => 'css', 'returnClass' => false, 'multiple' => true), 'printcss' => array('filename' => 'Web', 'ext' => 'printcss', 'returnClass' => false, 'multiple' => true), 'scss' => array('filename' => 'Web', 'ext' => 'scss', 'returnClass' => false, 'multiple' => true)));
         foreach ($files as $i) {
             foreach ($i as $j) {
                 $cwd = str_replace(DIRECTORY_SEPARATOR, '/', getcwd());
                 if (substr($j, 0, 3) == '../') {
                     $cwd = substr($cwd, 0, strrpos($cwd, '/'));
                     $j = substr($j, 3);
                 }
                 $j = $cwd . '/' . $j;
                 $jj = Kwf_Assets_Dependency_File::getPathWithTypeByFileName($j);
                 if (!$jj) {
                     throw new Kwf_Exception("Can't find path type for '{$j}'");
                 }
                 $nonDeferDep[] = $this->_createDependencyForFile($jj);
             }
         }
         if ($nonDeferDep) {
             $nonDeferDep = new Kwf_Assets_Dependency_Dependencies($nonDeferDep, 'Web');
             $ret[] = $nonDeferDep;
         }
         $componentClasses = $this->_getRecursiveChildClasses($this->_rootComponentClass);
         foreach ($componentClasses as $class) {
             $nonDeferDep = $this->_getComponentSettingDependencies($class, 'assets');
             $deferDep = $this->_getComponentSettingDependencies($class, 'assetsDefer');
             //alle dateien der vererbungshierache includieren
             $files = Kwc_Abstract::getSetting($class, 'componentFiles');
             $componentCssFiles = array();
             foreach (array_merge($files['css'], $files['printcss'], $files['js'], $files['masterCss']) as $f) {
                 $componentCssFiles[] = $f;
             }
             //reverse damit css von weiter unten in der vererbungshierachie überschreibt
             $componentCssFiles = array_reverse($componentCssFiles);
             foreach ($componentCssFiles as $i) {
                 $i = getcwd() . '/' . $i;
                 $i = Kwf_Assets_Dependency_File::getPathWithTypeByFileName($i);
                 if (!isset($this->_componentFiles[$i])) {
                     $addedFiles[] = $i;
                     $dep = $this->_createDependencyForFile($i);
                     if (substr($i, -8) == 'defer.js') {
                         $deferDep[] = $dep;
                     } else {
                         $nonDeferDep[] = $dep;
                     }
                 }
             }
             if ($deferDep) {
                 $deferDep = new Kwf_Assets_Dependency_Dependencies($deferDep, $class . ' defer');
                 $deferDep->setDeferLoad(true);
                 $ret[] = $deferDep;
             }
             if ($nonDeferDep) {
                 $nonDeferDep = new Kwf_Assets_Dependency_Dependencies($nonDeferDep, $class);
                 $ret[] = $nonDeferDep;
             }
         }
         return new Kwf_Assets_Dependency_Dependencies($ret, $dependencyName);
     } else {
         if ($dependencyName == 'ComponentsAdmin') {
             $ret = array();
             $componentClasses = $this->_getRecursiveChildClasses($this->_rootComponentClass);
             foreach ($componentClasses as $class) {
                 $ret = array_merge($ret, $this->_getComponentSettingDependencies($class, 'assetsAdmin'));
             }
             return new Kwf_Assets_Dependency_Dependencies($ret, $dependencyName);
         }
     }
     return null;
 }
Esempio n. 11
0
 private function _buildPackageContents($mimeType)
 {
     foreach ($this->_providerList->getProviders() as $provider) {
         $provider->initialize();
     }
     $packageMap = Kwf_SourceMaps_SourceMap::createEmptyMap('');
     if ($mimeType == 'text/css' || $mimeType == 'text/css; ie8') {
         $packageMap->setMimeType('text/css');
     } else {
         $packageMap->setMimeType('text/javascript');
     }
     $trlData = array();
     // ***** commonjs
     $commonJsData = $this->_getCommonJsData($mimeType);
     if ($commonJsData) {
         foreach ($commonJsData as &$i) {
             $data = $i['source']->getMapContentsData(false);
             if (isset($data->{'_x_org_koala-framework_trlData'})) {
                 $trlData = array_merge($trlData, $data->{'_x_org_koala-framework_trlData'});
             }
             $data->sourcesContent = $data->sources;
             //browser-pack needs sourcesContent, else it would ignore input source map. This is fake obviously and we'll drop it anyway after browser-pack finished
             if (isset($i['source']->getMapContentsData(false)->sources[0])) {
                 $i['sourceFile'] = $i['source']->getMapContentsData(false)->sources[0];
             }
             $i['source'] = $i['source']->getFileContentsInlineMap(false);
         }
         $contents = 'window.require = ' . Kwf_Assets_CommonJs_BrowserPack::pack(array_values($commonJsData));
         $map = Kwf_SourceMaps_SourceMap::createFromInline($contents);
         $fileContents = $map->getFileContents();
         $fileContents .= ";\n";
         $map->setFileContents($fileContents);
         $data = $map->getMapContentsData(false);
         unset($data->sourcesContent);
         //drop fake sourcesContent (see comment above)
         if ($data->sources[0] == 'node_modules/browser-pack/_prelude.js') {
             $data->sources[0] = '/assets/web/node_modules/browser-pack/_prelude.js';
         }
         $packageMap->concat($map);
     }
     // ***** non-commonjs, css
     $filterMimeType = $mimeType;
     if ($filterMimeType == 'text/css; ie8') {
         $filterMimeType = 'text/css';
     }
     foreach ($this->_getFilteredUniqueDependencies($filterMimeType) as $dep) {
         if ($dep->getIncludeInPackage()) {
             if (!(($mimeType == 'text/javascript' || $mimeType == 'text/javascript; defer') && $dep->isCommonJsEntry())) {
                 $map = $this->_getFilteredDependencyContents($dep, $mimeType);
                 $data = $map->getMapContentsData(false);
                 if (isset($data->{'_x_org_koala-framework_trlData'})) {
                     $trlData = array_merge($trlData, $data->{'_x_org_koala-framework_trlData'});
                 }
                 if (strpos($map->getFileContents(), "//@ sourceMappingURL=") !== false && strpos($map->getFileContents(), "//# sourceMappingURL=") !== false) {
                     throw new Kwf_Exception("contents must not contain sourceMappingURL");
                 }
                 $sourcesCount = 0;
                 $packageData = $packageMap->getMapContentsData(false);
                 if (isset($packageData->sources)) {
                     $sourcesCount = count($packageData->sources);
                 }
                 unset($packageData);
                 // $ret .= "/* *** $dep */\n"; // attention: commenting this in breaks source maps
                 $packageMap->concat($map);
                 if (isset($data->{'_x_org_koala-framework_sourcesContent'})) {
                     $packageMapData = $packageMap->getMapContentsData(false);
                     if (!isset($packageMapData->{'_x_org_koala-framework_sourcesContent'})) {
                         $packageMapData->{'_x_org_koala-framework_sourcesContent'} = array();
                     }
                     //copy sourcesContent to packageMap with $sourcesCount offset
                     foreach ($data->{'_x_org_koala-framework_sourcesContent'} as $k => $i) {
                         $packageMapData->{'_x_org_koala-framework_sourcesContent'}[$k + $sourcesCount] = $i;
                     }
                 }
             }
         }
     }
     if ($mimeType == 'text/javascript' || $mimeType == 'text/javascript; defer') {
         if ($uniquePrefix = Kwf_Config::getValue('application.uniquePrefix')) {
             $packageMap = Kwf_Assets_Package_Filter_UniquePrefix::filter($packageMap, $uniquePrefix);
         }
     }
     foreach ($this->getProviderList()->getFilters() as $filter) {
         if ($filter->getExecuteFor() == Kwf_Assets_Filter_Abstract::EXECUTE_FOR_PACKAGE && $filter->getMimeType() == $mimeType) {
             $packageMap = $filter->filter($packageMap);
         }
     }
     $data = $packageMap->getMapContentsData(false);
     $data->sourcesContent = array();
     foreach ($data->sources as $k => $i) {
         if (substr($i, 0, 8) != '/assets/') {
             throw new Kwf_Exception("Source path doesn't start with /assets/: {$i}");
         }
         $i = substr($i, 8);
         if (isset($data->{'_x_org_koala-framework_sourcesContent'}[$k])) {
             $data->sourcesContent[$k] = $data->{'_x_org_koala-framework_sourcesContent'}[$k];
         } else {
             $i = new Kwf_Assets_Dependency_File($this->_providerList, $i);
             $data->sourcesContent[$k] = $i->getContentsSourceString();
         }
     }
     return array('contents' => $packageMap, 'trlData' => $trlData);
 }
Esempio n. 12
0
 public function __construct($fileName, $builtFile, $sourceMapFile)
 {
     parent::__construct($fileName);
     $this->_builtFile = $builtFile;
     $this->_sourceMapFile = $sourceMapFile;
 }
Esempio n. 13
0
 public function getFileContents($file, $language = null)
 {
     $ret = array();
     if (substr($file, -4) == '.gif') {
         $ret['mimeType'] = 'image/gif';
     } else {
         if (substr($file, -4) == '.png') {
             $ret['mimeType'] = 'image/png';
         } else {
             if (substr($file, -4) == '.jpg') {
                 $ret['mimeType'] = 'image/jpeg';
             } else {
                 if (substr($file, -4) == '.mp4') {
                     $ret['mimeType'] = 'video/mp4';
                 } else {
                     if (substr($file, -5) == '.webm') {
                         $ret['mimeType'] = 'video/webm';
                     } else {
                         if (substr($file, -4) == '.css' || substr($file, -5) == '.scss') {
                             $ret['mimeType'] = 'text/css; charset=utf-8';
                             if (!Kwf_Assets_Dispatcher::allowSourceAccess()) {
                                 throw new Kwf_Exception_AccessDenied();
                             }
                         } else {
                             if (substr($file, -3) == '.js') {
                                 $ret['mimeType'] = 'text/javascript; charset=utf-8';
                                 if (!Kwf_Assets_Dispatcher::allowSourceAccess()) {
                                     throw new Kwf_Exception_AccessDenied();
                                 }
                             } else {
                                 if (substr($file, -4) == '.swf') {
                                     $ret['mimeType'] = 'application/flash';
                                 } else {
                                     if (substr($file, -4) == '.ico') {
                                         $ret['mimeType'] = 'image/x-icon';
                                     } else {
                                         if (substr($file, -5) == '.html') {
                                             $ret['mimeType'] = 'text/html; charset=utf-8';
                                         } else {
                                             if (substr($file, -4) == '.otf') {
                                                 // für Schriften
                                                 $ret['mimeType'] = 'application/octet-stream';
                                             } else {
                                                 if (substr($file, -4) == '.eot') {
                                                     // für Schriften
                                                     $ret['mimeType'] = 'application/vnd.ms-fontobject';
                                                 } else {
                                                     if (substr($file, -4) == '.svg') {
                                                         // für Schriften
                                                         $ret['mimeType'] = 'image/svg+xml';
                                                     } else {
                                                         if (substr($file, -4) == '.ttf') {
                                                             // für Schriften
                                                             $ret['mimeType'] = 'application/octet-stream';
                                                         } else {
                                                             if (substr($file, -5) == '.woff') {
                                                                 // für Schriften
                                                                 $ret['mimeType'] = 'application/font-woff';
                                                             } else {
                                                                 if (substr($file, -6) == '.woff2') {
                                                                     // für Schriften
                                                                     $ret['mimeType'] = 'application/font-woff2';
                                                                 } else {
                                                                     if (substr($file, -4) == '.htc') {
                                                                         // für ie css3
                                                                         $ret['mimeType'] = 'text/x-component';
                                                                     } else {
                                                                         if (substr($file, -4) == '.pdf') {
                                                                             $ret['mimeType'] = 'application/pdf';
                                                                         } else {
                                                                             throw new Kwf_Assets_NotFoundException("Invalid filetype ({$file})");
                                                                         }
                                                                     }
                                                                 }
                                                             }
                                                         }
                                                     }
                                                 }
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     if (substr($ret['mimeType'], 0, 5) == 'text/') {
         $ret['mtime'] = time();
         $file = new Kwf_Assets_Dependency_File($file);
         if (!$file->getAbsoluteFileName() || !file_exists($file->getAbsoluteFileName())) {
             throw new Kwf_Exception_NotFound();
         }
         $ret['contents'] = $file->getContents(null);
     } else {
         $fx = substr($file, 0, strpos($file, '/'));
         if (substr($fx, 0, 3) == 'fx_') {
             $cache = Kwf_Assets_Cache::getInstance();
             $cacheId = 'fileContents' . str_replace(array('/', '.', '-', ':'), array('_', '_', '_', '_'), $file);
             if (!($cacheData = $cache->load($cacheId))) {
                 if (substr($ret['mimeType'], 0, 6) != 'image/') {
                     throw new Kwf_Exception("Fx is only possible for images");
                 }
                 $im = new Imagick();
                 if (substr($file, -4) == '.ico') {
                     $im->setFormat('ico');
                 }
                 //required because imagick can't autodetect ico format
                 $file = new Kwf_Assets_Dependency_File(substr($file, strpos($file, '/') + 1));
                 $im->readImage($file->getAbsoluteFileName());
                 $fx = explode('_', substr($fx, 3));
                 foreach ($fx as $i) {
                     $params = array();
                     if (($pos = strpos($i, '-')) !== false) {
                         $params = explode('-', substr($i, $pos + 1));
                         $i = substr($i, 0, $pos);
                     }
                     call_user_func(array('Kwf_Assets_Effects', $i), $im, $params);
                 }
                 $cacheData['mtime'] = $file->getMTime();
                 $cacheData['contents'] = $im->getImagesBlob();
                 $im->destroy();
                 $cache->save($cacheData, $cacheId);
             }
             $ret['contents'] = $cacheData['contents'];
             $ret['mtime'] = time();
         } else {
             $ret['mtime'] = time();
             $file = new Kwf_Assets_Dependency_File($file);
             if (!file_exists($file->getAbsoluteFileName())) {
                 throw new Kwf_Exception_NotFound();
             }
             $ret['contents'] = $file->getContents(null);
         }
     }
     return $ret;
 }
Esempio n. 14
0
 public function getDependency($dependencyName)
 {
     if ($dependencyName == 'Components') {
         $ret = array();
         $nonDeferDep = array();
         $files = Kwf_Component_Abstract_Admin::getComponentFiles($this->_rootComponentClass, array('css' => array('filename' => 'Web', 'ext' => 'css', 'returnClass' => false, 'multiple' => true), 'scss' => array('filename' => 'Web', 'ext' => 'scss', 'returnClass' => false, 'multiple' => true)));
         foreach ($files as $i) {
             foreach ($i as $j) {
                 $cwd = str_replace(DIRECTORY_SEPARATOR, '/', getcwd());
                 if (substr($j, 0, 3) == '../') {
                     $cwd = substr($cwd, 0, strrpos($cwd, '/'));
                     $j = substr($j, 3);
                 }
                 $j = $cwd . '/' . $j;
                 $jj = Kwf_Assets_Dependency_File::getPathWithTypeByFileName($j);
                 if (!$jj) {
                     throw new Kwf_Exception("Can't find path type for '{$j}'");
                 }
                 $nonDeferDep[] = $this->_createDependencyForFile($jj, true);
             }
         }
         if ($nonDeferDep) {
             $nonDeferDep = new Kwf_Assets_Dependency_Dependencies($nonDeferDep, 'Web');
             $ret[] = $nonDeferDep;
         }
         $componentClasses = $this->_getRecursiveChildClasses($this->_rootComponentClass);
         foreach ($componentClasses as $class) {
             $deps = $this->_getComponentSettingDependenciesDep($class, 'assetsDefer', true);
             if ($deps) {
                 $deps = new Kwf_Assets_Dependency_Dependencies($deps, $class . '-deps-defer');
                 $deps->setDeferLoad(true);
                 $ret[] = $deps;
             }
             $deps = $this->_getComponentSettingDependenciesDep($class, 'assets', true);
             if ($deps) {
                 $deps = new Kwf_Assets_Dependency_Dependencies($deps, $class . '-deps');
                 $ret[] = $deps;
             }
             $deps = array();
             foreach ($this->_getComponentSettingDependenciesFiles($class, 'assets', true) as $dep) {
                 if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Master\\.[a-z]+$#', $dep->getFileNameWithType())) {
                     $deps[] = array('dep' => $dep, 'master' => true, 'defer' => false);
                 } else {
                     $deps[] = array('dep' => $dep, 'master' => false, 'defer' => false);
                 }
             }
             foreach ($this->_getComponentSettingDependenciesFiles($class, 'assetsDefer', true) as $dep) {
                 if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Master\\.[a-z]+$#', $dep->getFileNameWithType())) {
                     $deps[] = array('dep' => $dep, 'master' => true, 'defer' => true);
                 } else {
                     $deps[] = array('dep' => $dep, 'master' => false, 'defer' => true);
                 }
             }
             //alle dateien der vererbungshierache includieren
             $files = Kwc_Abstract::getSetting($class, 'componentFiles');
             $componentCssFiles = array();
             foreach (array_merge($files['css'], $files['js']) as $f) {
                 $componentCssFiles[] = $f;
             }
             //reverse damit css von weiter unten in der vererbungshierachie überschreibt
             $componentCssFiles = array_reverse($componentCssFiles);
             foreach ($componentCssFiles as $i) {
                 $dep = $this->_createDependencyForFile($i, true);
                 if (substr($i, -8) == 'defer.js') {
                     $deps[] = array('dep' => $dep, 'master' => false, 'defer' => true);
                 } else {
                     $deps[] = array('dep' => $dep, 'master' => false, 'defer' => false);
                 }
             }
             //reverse damit css von weiter unten in der vererbungshierachie überschreibt
             $componentCssFiles = array_reverse($files['masterCss']);
             foreach ($componentCssFiles as $i) {
                 $dep = $this->_createDependencyForFile($i, true);
                 if (substr($i, -8) == 'defer.js') {
                     $deps[] = array('dep' => $dep, 'master' => true, 'defer' => true);
                 } else {
                     $deps[] = array('dep' => $dep, 'master' => true, 'defer' => false);
                 }
             }
             //css, not master
             $matchingDeps = array();
             foreach ($deps as $i) {
                 if ($i['dep']->getMimeType() == 'text/css' && $i['master'] == false) {
                     $matchingDeps[] = $i['dep'];
                 }
             }
             if ($matchingDeps) {
                 $ret[] = new Kwf_Assets_Components_Dependency_Css($class, $matchingDeps, false);
             }
             //css, master
             $matchingDeps = array();
             foreach ($deps as $i) {
                 if ($i['dep']->getMimeType() == 'text/css' && $i['master'] == true) {
                     $matchingDeps[] = $i['dep'];
                 }
             }
             if ($matchingDeps) {
                 $ret[] = new Kwf_Assets_Components_Dependency_Css($class, $matchingDeps, true);
             }
             //js, not master, not defer
             $matchingDeps = array();
             foreach ($deps as $i) {
                 if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == false && $i['defer'] == false) {
                     $matchingDeps[] = $i['dep'];
                 }
             }
             if ($matchingDeps) {
                 $ret[] = new Kwf_Assets_Components_Dependency_Js($class, $matchingDeps, false);
             }
             //js, master, not defer
             $matchingDeps = array();
             foreach ($deps as $i) {
                 if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == true && $i['defer'] == false) {
                     $matchingDeps[] = $i['dep'];
                 }
             }
             if ($matchingDeps) {
                 $ret[] = new Kwf_Assets_Components_Dependency_Js($class, $matchingDeps, true);
             }
             //js, not master, defer
             $matchingDeps = array();
             foreach ($deps as $i) {
                 if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == false && $i['defer'] == true) {
                     $matchingDeps[] = $i['dep'];
                 }
             }
             if ($matchingDeps) {
                 $dep = new Kwf_Assets_Components_Dependency_Js($class, $matchingDeps, false);
                 $dep->setDeferLoad(true);
                 $ret[] = $dep;
             }
             //js, master, defer
             $matchingDeps = array();
             foreach ($deps as $i) {
                 if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == true && $i['defer'] == true) {
                     $matchingDeps[] = $i['dep'];
                 }
             }
             if ($matchingDeps) {
                 $dep = new Kwf_Assets_Components_Dependency_Js($class, $matchingDeps, true);
                 $dep->setDeferLoad(true);
                 $ret[] = $dep;
             }
         }
         return new Kwf_Assets_Dependency_Dependencies($ret, $dependencyName);
     } else {
         if ($dependencyName == 'ComponentsAdmin') {
             $ret = array();
             $componentClasses = $this->_getRecursiveChildClasses($this->_rootComponentClass);
             foreach ($componentClasses as $class) {
                 $ret = array_merge($ret, $this->_getComponentSettingDependencies($class, 'assetsAdmin', false));
             }
             return new Kwf_Assets_Dependency_Dependencies($ret, $dependencyName);
         } else {
             if ($dependencyName == 'FrontendCore') {
                 $deps = array();
                 $dep = new Kwf_Assets_Dependency_File_Js('kwf/commonjs/frontend-core.js');
                 $dep->setIsCommonJsEntry(true);
                 $deps[] = $dep;
                 $dep = new Kwf_Assets_Dependency_File_Js('kwf/commonjs/frontend-core.defer.js');
                 $dep->setIsCommonJsEntry(true);
                 $dep->setDeferLoad(true);
                 $deps[] = $dep;
                 return new Kwf_Assets_Dependency_Dependencies($deps, 'FrontendCore');
             }
         }
     }
     return null;
 }
 public function __construct(Kwf_Assets_ProviderList_Abstract $providerList, $fileName, $builtFile, $sourceMapFile)
 {
     parent::__construct($providerList, $fileName);
     $this->_builtFile = $builtFile;
     $this->_sourceMapFile = $sourceMapFile;
 }
Esempio n. 16
0
 public function getDependency($dependencyName)
 {
     if ($dependencyName == 'Components') {
         $ret = array();
         $nonDeferDep = array();
         $files = Kwf_Component_Abstract_Admin::getComponentFiles($this->_rootComponentClass, array('css' => array('filename' => 'Web', 'ext' => 'css', 'returnClass' => false, 'multiple' => true), 'scss' => array('filename' => 'Web', 'ext' => 'scss', 'returnClass' => false, 'multiple' => true)));
         foreach ($files as $i) {
             foreach ($i as $j) {
                 $cwd = str_replace(DIRECTORY_SEPARATOR, '/', getcwd());
                 if (substr($j, 0, 3) == '../') {
                     $cwd = substr($cwd, 0, strrpos($cwd, '/'));
                     $j = substr($j, 3);
                 }
                 $j = $cwd . '/' . $j;
                 $jj = Kwf_Assets_Dependency_File::getPathWithTypeByFileName($this->_providerList, $j);
                 if (!$jj) {
                     throw new Kwf_Exception("Can't find path type for '{$j}'");
                 }
                 $nonDeferDep[] = $this->_createDependencyForFile($jj, true);
             }
         }
         if ($nonDeferDep) {
             $nonDeferDep = new Kwf_Assets_Dependency_Dependencies($this->_providerList, $nonDeferDep, 'Web');
             $ret[] = $nonDeferDep;
         }
         $componentClassesPackages = $this->_getComponentClassesPackages();
         foreach ($componentClassesPackages['Frontend'] as $c) {
             $packageName = Kwc_Abstract::getFlag($c, 'assetsPackage');
             if ($packageName == 'Default') {
                 $packageName = false;
             }
             if (!$packageName) {
                 $d = $this->_providerList->findDependency('Component-' . $c);
                 if (!$d) {
                     throw new Kwf_Exception("Didn't get dependency 'Component-{$c}'");
                 }
                 $ret[] = $d;
             }
         }
         return new Kwf_Assets_Dependency_Dependencies($this->_providerList, $ret, $dependencyName);
     } else {
         if (substr($dependencyName, 0, 17) == 'ComponentsPackage') {
             $ret = array();
             $assetsPackageName = substr($dependencyName, 17);
             $componentClassesPackages = $this->_getComponentClassesPackages();
             foreach ($componentClassesPackages[$assetsPackageName] as $c) {
                 $d = $this->_providerList->findDependency('Component-' . $c);
                 if (!$d) {
                     throw new Kwf_Exception("Didn't get dependency 'Component-{$c}'");
                 }
                 $ret[] = $d;
             }
             return new Kwf_Assets_Dependency_Dependencies($this->_providerList, $ret, $dependencyName);
         } else {
             if ($dependencyName == 'ComponentsAdmin') {
                 $ret = array();
                 foreach (Kwc_Abstract::getComponentClasses() as $class) {
                     //dep
                     $ret = array_merge($ret, $this->_getComponentSettingDependenciesDep($class, 'assetsAdmin'));
                     //files
                     $assets = Kwc_Abstract::getSetting($class, 'assetsAdmin');
                     foreach ($assets['files'] as $file) {
                         if (!isset($this->_fileDependencies[$file])) {
                             $this->_fileDependencies[$file] = Kwf_Assets_Dependency_File::createDependency($file, $this->_providerList);
                         }
                         $ret[] = $this->_fileDependencies[$file];
                     }
                 }
                 return new Kwf_Assets_Dependency_Dependencies($this->_providerList, $ret, $dependencyName);
             } else {
                 if ($dependencyName == 'FrontendCore') {
                     $deps = array();
                     $dep = new Kwf_Assets_Dependency_File_Js($this->_providerList, 'kwf/commonjs/frontend-core.js');
                     $dep->setIsCommonJsEntry(true);
                     $deps[] = $dep;
                     $dep = new Kwf_Assets_Dependency_File_Js($this->_providerList, 'kwf/commonjs/frontend-core.defer.js');
                     $dep->setIsCommonJsEntry(true);
                     $dep->setDeferLoad(true);
                     $deps[] = $dep;
                     return new Kwf_Assets_Dependency_Dependencies($this->_providerList, $deps, 'FrontendCore');
                 } else {
                     if (substr($dependencyName, 0, 10) == 'Component-') {
                         $class = substr($dependencyName, 10);
                         $ret = array();
                         $deps = $this->_getComponentSettingDependenciesDep($class, 'assetsDefer', true);
                         if ($deps) {
                             $deps = new Kwf_Assets_Dependency_Dependencies($this->_providerList, $deps, $class . '-deps-defer');
                             $deps->setDeferLoad(true);
                             $ret[] = $deps;
                         }
                         $deps = $this->_getComponentSettingDependenciesDep($class, 'assets', true);
                         if ($deps) {
                             $deps = new Kwf_Assets_Dependency_Dependencies($this->_providerList, $deps, $class . '-deps');
                             $ret[] = $deps;
                         }
                         $deps = array();
                         foreach ($this->_getComponentSettingDependenciesFiles($class, 'assets', true) as $dep) {
                             if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Master\\.[a-z]+$#', $dep->getFileNameWithType())) {
                                 //Master.css/js needs to be part of Kwf_Assets_Components_Dependency_Abstract for .kwcClass to work correctly
                                 $deps[] = array('dep' => $dep, 'master' => true, 'defer' => false);
                             } else {
                                 //other files are dependencies like dep
                                 if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Web(\\.defer)?\\.js+$#', $dep->getFileNameWithType())) {
                                     $dep->setIsCommonJsEntry(true);
                                 }
                                 $ret[] = $dep;
                             }
                         }
                         foreach ($this->_getComponentSettingDependenciesFiles($class, 'assetsDefer', true) as $dep) {
                             if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Master\\.[a-z\\.]+$#', $dep->getFileNameWithType())) {
                                 //Master.css/js needs to be part of Kwf_Assets_Components_Dependency_Abstract for .kwcClass to work correctly
                                 $deps[] = array('dep' => $dep, 'master' => true, 'defer' => true);
                             } else {
                                 //other files are dependencies like dep
                                 if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Web(\\.defer)?\\.js+$#', $dep->getFileNameWithType())) {
                                     $dep->setIsCommonJsEntry(true);
                                 }
                                 $dep->setDeferLoad(true);
                                 $ret[] = $dep;
                             }
                         }
                         if (Kwc_Abstract::hasSetting($class, 'masterExtends') && Kwc_Abstract::getSetting($class, 'masterExtends')) {
                             //plus masterExtends for inherited styles
                             foreach ($this->_getComponentSettingDependenciesFiles(Kwc_Abstract::getSetting($class, 'masterExtends'), 'assets', true) as $dep) {
                                 if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Master\\.[a-z]+$#', $dep->getFileNameWithType())) {
                                     //Master.css/js needs to be part of Kwf_Assets_Components_Dependency_Abstract for .kwcClass to work correctly
                                     $deps[] = array('dep' => $dep, 'master' => true, 'defer' => false);
                                 }
                             }
                             foreach ($this->_getComponentSettingDependenciesFiles(Kwc_Abstract::getSetting($class, 'masterExtends'), 'assetsDefer', true) as $dep) {
                                 if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Master\\.[a-z]+$#', $dep->getFileNameWithType())) {
                                     //Master.css/js needs to be part of Kwf_Assets_Components_Dependency_Abstract for .kwcClass to work correctly
                                     $deps[] = array('dep' => $dep, 'master' => true, 'defer' => true);
                                 }
                             }
                             //                 d($deps);
                         }
                         //alle dateien der vererbungshierache includieren
                         $files = Kwc_Abstract::getSetting($class, 'componentFiles');
                         $componentCssFiles = array();
                         foreach (array_merge($files['css'], $files['js']) as $f) {
                             $componentCssFiles[] = $f;
                         }
                         //reverse damit css von weiter unten in der vererbungshierachie überschreibt
                         $componentCssFiles = array_reverse($componentCssFiles);
                         foreach ($componentCssFiles as $path) {
                             $pathWithType = Kwf_Assets_Dependency_File::getPathWithTypeByFileName($this->_providerList, './' . $path);
                             if (!$pathWithType) {
                                 throw new Kwf_Exception("Can't find path type for '{$path}'");
                             }
                             $dep = $this->_createDependencyForFile($pathWithType, true);
                             if (substr($path, -8) == 'defer.js') {
                                 $deps[] = array('dep' => $dep, 'master' => false, 'defer' => true);
                             } else {
                                 $deps[] = array('dep' => $dep, 'master' => false, 'defer' => false);
                             }
                             if ($dep instanceof Kwf_Assets_Dependency_File_Scss) {
                                 if ($scssConfig = Kwc_Admin::getInstance($class)->getScssConfig()) {
                                     $dep->setConfig($scssConfig, Kwc_Admin::getInstance($class)->getScssConfigMasterFiles());
                                 }
                             }
                         }
                         //reverse damit css von weiter unten in der vererbungshierachie überschreibt
                         $componentCssFiles = array_reverse($files['masterCss']);
                         foreach ($componentCssFiles as $path) {
                             $pathWithType = Kwf_Assets_Dependency_File::getPathWithTypeByFileName($this->_providerList, './' . $path);
                             if (!$pathWithType) {
                                 throw new Kwf_Exception("Can't find path type for '{$path}'");
                             }
                             $dep = $this->_createDependencyForFile($pathWithType, true);
                             if (substr($path, -8) == 'defer.js') {
                                 $deps[] = array('dep' => $dep, 'master' => true, 'defer' => true);
                             } else {
                                 $deps[] = array('dep' => $dep, 'master' => true, 'defer' => false);
                             }
                         }
                         //css, not master
                         $matchingDeps = array();
                         foreach ($deps as $i) {
                             if ($i['dep']->getMimeType() == 'text/css' && $i['master'] == false) {
                                 $matchingDeps[] = $i['dep'];
                             }
                         }
                         if ($matchingDeps) {
                             $ret[] = new Kwf_Assets_Components_Dependency_Css($this->_providerList, $class, $matchingDeps, false, $class . '-css');
                         }
                         //css, master
                         $matchingDeps = array();
                         foreach ($deps as $i) {
                             if ($i['dep']->getMimeType() == 'text/css' && $i['master'] == true) {
                                 $matchingDeps[] = $i['dep'];
                             }
                         }
                         if ($matchingDeps) {
                             $ret[] = new Kwf_Assets_Components_Dependency_Css($this->_providerList, $class, $matchingDeps, true, $class . '-master-css');
                         }
                         //js, not master, not defer
                         $matchingDeps = array();
                         foreach ($deps as $i) {
                             if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == false && $i['defer'] == false) {
                                 $matchingDeps[] = $i['dep'];
                             }
                         }
                         if ($matchingDeps) {
                             $ret[] = new Kwf_Assets_Components_Dependency_Js($this->_providerList, $class, $matchingDeps, false, $class . '-js');
                         }
                         //js, master, not defer
                         $matchingDeps = array();
                         foreach ($deps as $i) {
                             if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == true && $i['defer'] == false) {
                                 $matchingDeps[] = $i['dep'];
                             }
                         }
                         if ($matchingDeps) {
                             $ret[] = new Kwf_Assets_Components_Dependency_Js($this->_providerList, $class, $matchingDeps, true, $class . '-master-js');
                         }
                         //js, not master, defer
                         $matchingDeps = array();
                         foreach ($deps as $i) {
                             if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == false && $i['defer'] == true) {
                                 $matchingDeps[] = $i['dep'];
                             }
                         }
                         if ($matchingDeps) {
                             $dep = new Kwf_Assets_Components_Dependency_Js($this->_providerList, $class, $matchingDeps, false, $class . '-defer-js');
                             $dep->setDeferLoad(true);
                             $ret[] = $dep;
                         }
                         //js, master, defer
                         $matchingDeps = array();
                         foreach ($deps as $i) {
                             if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == true && $i['defer'] == true) {
                                 $matchingDeps[] = $i['dep'];
                             }
                         }
                         if ($matchingDeps) {
                             $dep = new Kwf_Assets_Components_Dependency_Js($this->_providerList, $class, $matchingDeps, true, $class . '-master-defer-js');
                             $dep->setDeferLoad(true);
                             $ret[] = $dep;
                         }
                         return new Kwf_Assets_Dependency_Dependencies($this->_providerList, $ret, $dependencyName);
                     }
                 }
             }
         }
     }
     return null;
 }
Esempio n. 17
0
 public function getContents($language)
 {
     $ret = parent::getContents($language);
     $ret = $this->_processContents($ret);
     return $ret;
 }
Esempio n. 18
0
 public function getDependency($dependencyName)
 {
     if (!isset($this->_config)) {
         $ini = new Kwf_Config_Ini($this->_iniFile, 'dependencies');
         $this->_config = $ini->toArray();
         unset($ini);
     }
     if (substr($dependencyName, -6) == 'IniDep') {
         //ini dep is own dependency as it might be defined in different file than files
         $dep = substr($dependencyName, 0, -6);
         if (!isset($this->_config[$dep]['dep'])) {
             return null;
         }
         $ret = array();
         foreach ($this->_config[$dep]['dep'] as $i) {
             if (!$i) {
                 continue;
             }
             $d = $this->_providerList->findDependency(trim($i));
             if (!$d) {
                 throw new Kwf_Exception("Can't find dependency '{$i}'");
             }
             $ret[] = $d;
         }
     } else {
         if (!isset($this->_config[$dependencyName]['files'])) {
             return null;
         }
         $ret = array();
         //optional
         $dep = $this->_providerList->findDependency($dependencyName . 'IniDep');
         if ($dep) {
             $ret[] = $dep;
         }
         $depFiles = $this->_config[$dependencyName]['files'];
         $files = array();
         foreach ($depFiles as $i) {
             if (!$i) {
                 continue;
             }
             $i = Kwf_Assets_Dependency_File::createDependency(trim($i), $this->_providerList);
             if ($i instanceof Kwf_Assets_Dependency_File && $i->getFileNameWithType()) {
                 $files[$i->getFileNameWithType()] = true;
             } else {
                 if ($i instanceof Kwf_Assets_Dependency_Dependencies) {
                     //filter out dependencies that are already returned as individual files
                     //happens when using *
                     foreach (array(Kwf_Assets_Dependency_Abstract::DEPENDENCY_TYPE_REQUIRES, Kwf_Assets_Dependency_Abstract::DEPENDENCY_TYPE_USES) as $type) {
                         $deps = $i->getDependencies($type);
                         foreach ($deps as $k => $j) {
                             if ($j instanceof Kwf_Assets_Dependency_File && $j->getFileNameWithType()) {
                                 if (isset($files[$j->getFileNameWithType()])) {
                                     unset($deps[$k]);
                                 }
                             }
                         }
                         $i->setDependencies($type, $deps);
                     }
                 }
             }
             $ret[] = $i;
         }
     }
     return new Kwf_Assets_Dependency_Dependencies($ret, $dependencyName);
 }
Esempio n. 19
0
 public function getFilename()
 {
     $d = $this->_getIconAndType();
     $file = new Kwf_Assets_Dependency_File($d['type'] . '/' . $d['icon']);
     return $file->getAbsoluteFileName();
 }