public function renderDesignerModeInlineHtml(RenderAssetHtmlEvent $event, $eventName, EventDispatcherInterface $eventDispatcher) { if (!$event->getHtml() && $event->isDesignerMode()) { $asset = $event->getAsset(); if ($asset instanceof ExtendedAssetInterface && $asset->isInline()) { $page = $this->pageProvider->getPage(); $html = ''; // html mode $xhtml = $page->outputFormat == 'xhtml'; // retrieve page path $targetPath = \Environment::get('requestUri'); // remove query string $targetPath = preg_replace('~\\?\\.*~', '', $targetPath); // remove leading / $targetPath = ltrim($targetPath, '/'); // overwrite the target path $asset->setTargetPath($targetPath); // load and dump the collection $asset->load($event->getDefaultFilters()); $js = $asset->dump($event->getDefaultFilters()); // generate html $scriptHtml = '<script'; if ($xhtml) { $scriptHtml .= ' type="text/javascript"'; } $scriptHtml .= '>'; $scriptHtml .= $js; $scriptHtml .= '</script>'; // wrap cc around if ($asset instanceof ExtendedAssetInterface && $asset->getConditionalComment()) { $scriptHtml = ThemePlusUtils::wrapCc($scriptHtml, $asset->getConditionalComment()); } // add debug information $html .= $this->developerTool->getDebugComment($asset); $html .= $scriptHtml . PHP_EOL; $event->setHtml($html); } } }
public function renderDesignerModeHtml(RenderAssetHtmlEvent $event, $eventName, EventDispatcherInterface $eventDispatcher) { if (!$event->getHtml() && $event->isDesignerMode()) { $asset = $event->getAsset(); if (!$asset instanceof ExtendedAssetInterface || !$asset->isInline()) { $page = $this->pageProvider->getPage(); $html = ''; // html mode $xhtml = $page->outputFormat == 'xhtml'; $tagEnding = $xhtml ? ' />' : '>'; // session id $id = substr(md5($asset->getSourceRoot() . '/' . $asset->getSourcePath()), 0, 8); // get the session object $session = unserialize($_SESSION['THEME_PLUS_ASSETS'][$id]); if (!$session || $asset->getLastModified() > $session->asset->getLastModified()) { $session = new \stdClass(); $session->page = $page->id; $session->asset = $asset; $_SESSION['THEME_PLUS_ASSETS'][$id] = serialize($session); } $realAssets = $asset; while ($realAssets instanceof DelegatorAssetInterface) { $realAssets = $realAssets->getAsset(); } if ($realAssets instanceof FileAsset) { $name = basename($realAssets->getSourcePath()); } else { if ($realAssets instanceof HttpAsset) { $class = new \ReflectionClass($realAssets); $property = $class->getProperty('sourceUrl'); $property->setAccessible(true); $url = $property->getValue($realAssets); $name = 'url_' . basename(parse_url($url, PHP_URL_PATH)); } else { $name = 'asset_' . $id; } } // generate the proxy url $url = sprintf('assets/theme-plus/proxy.php/css/%s/%s', $id, $name); // overwrite the target path $asset->setTargetPath($url); // remember asset for debug tool $this->developerTool->registerFile($id, (object) ['asset' => $realAssets, 'type' => 'css', 'url' => $url]); // generate html $linkHtml = '<link'; $linkHtml .= sprintf(' id="%s"', $id); $linkHtml .= sprintf(' href="%s"', $url); if ($xhtml) { $linkHtml .= ' type="text/css"'; } $linkHtml .= ' rel="stylesheet"'; if ($asset instanceof ExtendedAssetInterface && $asset->getMediaQuery()) { $linkHtml .= sprintf(' media="%s"', $asset->getMediaQuery()); } $linkHtml .= $tagEnding; // wrap cc around if ($asset instanceof ExtendedAssetInterface && $asset->getConditionalComment()) { $linkHtml = ThemePlusUtils::wrapCc($linkHtml, $asset->getConditionalComment()); } // add debug information $html .= $this->developerTool->getDebugComment($asset); $html .= $linkHtml . PHP_EOL; $event->setHtml($html); } } }