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."); } }
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)); }
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)); }
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; }
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; }
public function getFilename() { $d = $this->_getIconAndType(); $file = new Kwf_Assets_Dependency_File(Kwf_Assets_ProviderList_Default::getInstance(), $d['type'] . '/' . $d['icon']); return $file->getAbsoluteFileName(); }
protected function _getRawContents($language) { return parent::getContents($language); }
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; }
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); }
public function __construct($fileName, $builtFile, $sourceMapFile) { parent::__construct($fileName); $this->_builtFile = $builtFile; $this->_sourceMapFile = $sourceMapFile; }
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; }
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; }
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; }
public function getContents($language) { $ret = parent::getContents($language); $ret = $this->_processContents($ret); return $ret; }
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); }
public function getFilename() { $d = $this->_getIconAndType(); $file = new Kwf_Assets_Dependency_File($d['type'] . '/' . $d['icon']); return $file->getAbsoluteFileName(); }