/** * @param string $file * @param string $data * @return string */ public static function composePackage($name, array $data, $isInit = false) { if (is_string($name)) { $name = new PkgName($name); } else { if (!$name instanceof PkgNameInterface) { $err = 'package name must be a string of an object that '; $err .= 'implements Appfuel\\Html\\Resource\\PkgNameInterface'; throw new InvalidArgumentException($err); } } $pkg = ResourceTreeManager::getPkg($name); if (!$pkg) { $err = "could not compose pkg -({$name->getName()}) not found"; throw new DomainException($err); } $vPath = ResourceTreeManager::getVendorPath($name->getVendor()); $path = "{$vPath}/{$pkg->getMarkupFile()}"; $finder = self::loadFileFinder(); $absolute = $finder->getPath($path); if (!$finder->fileExists($absolute, false)) { $err = "template file not found at -({$absolute})"; throw new DomainException($err, 404); } $compositor = self::loadFileCompositor(); $view = $compositor->compose($absolute, $data); if ($pkg->isJsInitFile()) { $path = "{$vPath}/{$pkg->getJsInitFile()}"; $absolute = $finder->getPath($path); if (!$finder->fileExists($absolute, false)) { $err = "template file not found at -({$absolute})"; throw new DomainException($err, 404); } $init = $compositor->compose($absolute, $data); return array($view, $init); } return $view; }
/** * @param string $pkg name of the page view to be configured * @param HtmlPageInterface $page * @return null */ public function applyView($pkg, HtmlPageInterface $page) { if (!is_string($pkg) || empty($pkg)) { $err = "view package must be an non empty string"; throw new InvalidArgumentException($err); } $page->setViewPkg($pkg); $stack = new FileStack(); if ($this->isBuild()) { $htmlPkg = ResourceTreeManager::resolveBuildPage($pkg, $stack); } else { $htmlPkg = ResourceTreeManager::resolvePage($pkg, $stack); } $url = $this->getResourceUrl(); $js = $stack->get('js', "{$url}/resource"); foreach ($js as $file) { $page->addScript($file); } $css = $stack->get('css', "{$url}/resource"); foreach ($css as $file) { $page->addCssLink($file); } $config = $htmlPkg->getHtmlConfig(); $page->setViewPkgName($htmlPkg->getHtmlDocName()); $this->apply($config, $page); }
/** * @param ThemePkgInterface $theme * @return null */ protected function buildTheme(PkgNameInterface $themePkgName, FileReaderInterface $reader, FileWriterInterface $writer, FileStackInterface $pageStack) { $themeName = $themePkgName->getName(); $vendorName = $themePkgName->getVendor(); $vendor = ResourceTreeManager::loadVendor($vendorName); $version = $vendor->getVersion(); $pkgPath = $vendor->getPackagePath(); $buildDir = "build/{$vendorName}/{$version}"; $themeDir = "{$buildDir}/theme/{$themeName}/css"; $pkg = ResourceTreeManager::getPkg($themePkgName); $finder = $reader->getFileFinder(); if (!$finder->isDir($themeDir)) { if (!$writer->mkdir($themeDir, 0755, true)) { $path = $finder->getPath($themeDir); $err = "could not create dir at -({$path})"; throw new RunTimeException($err); } } if ($pkg->isCssFiles()) { $list = $pkg->getCssFiles($pkgPath); $result = $this->makeString('css', $list, $reader, $pageStack); $writer->putContent($result, "{$themeDir}/{$themeName}.css"); } if ($pkg->isAssetFiles()) { $list = $pkg->getAssetFiles(); $assetBuildDir = "{$buildDir}/{$pkg->getAssetDir()}"; if (!$finder->isDir($assetBuildDir)) { if (!$writer->mkdir($assetBuildDir, 0755, true)) { $path = $finder->getPath($assetBuildDir); $err = "could not create dir at -({$path})"; throw new RunTimeException($err); } } foreach ($list as $file) { $themeDir = "{$pkgPath}/{$pkg->getPath()}"; $src = "{$pkgPath}/{$file}"; $dest = "{$buildDir}/{$file}"; $result = $writer->copy($src, $dest); } } }