diff --git a/application/datatable.class.inc.php b/application/datatable.class.inc.php index 6dc201d5c..9fef922c3 100644 --- a/application/datatable.class.inc.php +++ b/application/datatable.class.inc.php @@ -1,6 +1,6 @@ oSet->GetFilter(), 'list'); - $oBlock = $oMenuBlock->GetRenderContent($oPage, $aExtraParams, $this->iListId); - foreach ($oBlock->GetCssFilesUrlRecursively(true) as $sFileAbsUrl) { - $oPage->add_linked_stylesheet($sFileAbsUrl); - } - // JS files - foreach ($oBlock->GetJsFilesUrlRecursively(true) as $sFileAbsUrl) { - $oPage->add_linked_script($sFileAbsUrl); - } - $oPage->RenderInlineScriptsAndCSSRecursively($oBlock); - return BlockRenderer::RenderBlockTemplate($oPage, $oBlock); + return ConsoleBlockRenderer::RenderBlockTemplateInPage($oPage, $oBlock); } /** diff --git a/application/ui.linkswidget.class.inc.php b/application/ui.linkswidget.class.inc.php index 51d43d0b0..078db1ecb 100644 --- a/application/ui.linkswidget.class.inc.php +++ b/application/ui.linkswidget.class.inc.php @@ -28,7 +28,7 @@ use Combodo\iTop\Application\UI\Base\Component\DataTable\DataTableFactory; use Combodo\iTop\Application\UI\Base\Component\DataTable\StaticTable\FormTableRow\FormTableRow; use Combodo\iTop\Application\UI\Links\Indirect\BlockIndirectLinksEdit\BlockIndirectLinksEdit; use Combodo\iTop\Application\UI\Links\Indirect\BlockObjectPickerDialog\BlockObjectPickerDialog; -use Combodo\iTop\Renderer\BlockRenderer; +use Combodo\iTop\Renderer\Console\ConsoleBlockRenderer; require_once(APPROOT.'application/displayblock.class.inc.php'); @@ -374,10 +374,16 @@ JS * * @return string The HTML fragment to be inserted into the page * @throws \ArchivedObjectException + * @throws \ConfigException * @throws \CoreException - * @throws \DictExceptionMissingString + * @throws \CoreUnexpectedValue + * @throws \MySQLException + * @throws \ReflectionException + * @throws \Twig\Error\LoaderError + * @throws \Twig\Error\RuntimeError + * @throws \Twig\Error\SyntaxError */ - public function Display(WebPage $oPage, $oValue, $aArgs, $sFormPrefix, $oCurrentObj) + public function Display(WebPage $oPage, $oValue, $aArgs, $sFormPrefix, $oCurrentObj): string { $sLinkedSetId = "{$this->m_sAttCode}{$this->m_sNameSuffix}"; @@ -430,7 +436,7 @@ JS $oBlock->AddControls(); - return BlockRenderer::RenderBlockTemplate($oPage, $oBlock); + return ConsoleBlockRenderer::RenderBlockTemplateInPage($oPage, $oBlock); } /** diff --git a/lib/composer/autoload_classmap.php b/lib/composer/autoload_classmap.php index 9b175f7d3..787306cc6 100644 --- a/lib/composer/autoload_classmap.php +++ b/lib/composer/autoload_classmap.php @@ -296,6 +296,7 @@ return array( 'Combodo\\iTop\\Renderer\\Bootstrap\\FieldRenderer\\BsSetFieldRenderer' => $baseDir . '/sources/Renderer/Bootstrap/FieldRenderer/BsSetFieldRenderer.php', 'Combodo\\iTop\\Renderer\\Bootstrap\\FieldRenderer\\BsSimpleFieldRenderer' => $baseDir . '/sources/Renderer/Bootstrap/FieldRenderer/BsSimpleFieldRenderer.php', 'Combodo\\iTop\\Renderer\\Bootstrap\\FieldRenderer\\BsSubFormFieldRenderer' => $baseDir . '/sources/Renderer/Bootstrap/FieldRenderer/BsSubFormFieldRenderer.php', + 'Combodo\\iTop\\Renderer\\Console\\ConsoleBlockRenderer' => $baseDir . '/sources/Renderer/Console/ConsoleBlockRenderer.php', 'Combodo\\iTop\\Renderer\\Console\\ConsoleFormRenderer' => $baseDir . '/sources/Renderer/Console/ConsoleFormRenderer.php', 'Combodo\\iTop\\Renderer\\Console\\FieldRenderer\\ConsoleSelectObjectFieldRenderer' => $baseDir . '/sources/Renderer/Console/FieldRenderer/ConsoleSelectObjectFieldRenderer.php', 'Combodo\\iTop\\Renderer\\Console\\FieldRenderer\\ConsoleSimpleFieldRenderer' => $baseDir . '/sources/Renderer/Console/FieldRenderer/ConsoleSimpleFieldRenderer.php', diff --git a/lib/composer/autoload_static.php b/lib/composer/autoload_static.php index 90c4596de..f79ad8f76 100644 --- a/lib/composer/autoload_static.php +++ b/lib/composer/autoload_static.php @@ -526,6 +526,7 @@ class ComposerStaticInit0018331147de7601e7552f7da8e3bb8b 'Combodo\\iTop\\Renderer\\Bootstrap\\FieldRenderer\\BsSetFieldRenderer' => __DIR__ . '/../..' . '/sources/Renderer/Bootstrap/FieldRenderer/BsSetFieldRenderer.php', 'Combodo\\iTop\\Renderer\\Bootstrap\\FieldRenderer\\BsSimpleFieldRenderer' => __DIR__ . '/../..' . '/sources/Renderer/Bootstrap/FieldRenderer/BsSimpleFieldRenderer.php', 'Combodo\\iTop\\Renderer\\Bootstrap\\FieldRenderer\\BsSubFormFieldRenderer' => __DIR__ . '/../..' . '/sources/Renderer/Bootstrap/FieldRenderer/BsSubFormFieldRenderer.php', + 'Combodo\\iTop\\Renderer\\Console\\ConsoleBlockRenderer' => __DIR__ . '/../..' . '/sources/Renderer/Console/ConsoleBlockRenderer.php', 'Combodo\\iTop\\Renderer\\Console\\ConsoleFormRenderer' => __DIR__ . '/../..' . '/sources/Renderer/Console/ConsoleFormRenderer.php', 'Combodo\\iTop\\Renderer\\Console\\FieldRenderer\\ConsoleSelectObjectFieldRenderer' => __DIR__ . '/../..' . '/sources/Renderer/Console/FieldRenderer/ConsoleSelectObjectFieldRenderer.php', 'Combodo\\iTop\\Renderer\\Console\\FieldRenderer\\ConsoleSimpleFieldRenderer' => __DIR__ . '/../..' . '/sources/Renderer/Console/FieldRenderer/ConsoleSimpleFieldRenderer.php', diff --git a/pages/ajax.render.php b/pages/ajax.render.php index 4398dd2e8..ef9d721c4 100644 --- a/pages/ajax.render.php +++ b/pages/ajax.render.php @@ -19,7 +19,7 @@ use Combodo\iTop\Application\UI\Base\Layout\ActivityPanel\ActivityEntry\ActivityEntryFactory; use Combodo\iTop\Controller\AjaxRenderController; -use Combodo\iTop\Renderer\BlockRenderer; +use Combodo\iTop\Renderer\Console\ConsoleBlockRenderer; use Combodo\iTop\Renderer\Console\ConsoleFormRenderer; require_once('../approot.inc.php'); @@ -1126,7 +1126,7 @@ EOF } if ($oDashlet->IsRedrawNeeded()) { $oBlock = $oDashlet->DoRender($oPage, true, false, $aExtraParams); - $sHtml = BlockRenderer::RenderBlockTemplate($oPage, $oBlock); + $sHtml = ConsoleBlockRenderer::RenderBlockTemplateInPage($oPage, $oBlock); $oPage->add_script("$('#dashlet_$sDashletId').html('$sHtml');"); } if ($oDashlet->IsFormRedrawNeeded()) { diff --git a/sources/Renderer/BlockRenderer.php b/sources/Renderer/BlockRenderer.php index 5b87c09f6..dec54c491 100644 --- a/sources/Renderer/BlockRenderer.php +++ b/sources/Renderer/BlockRenderer.php @@ -22,7 +22,6 @@ namespace Combodo\iTop\Renderer; use Combodo\iTop\Application\TwigBase\Twig\TwigHelper; use Combodo\iTop\Application\UI\Base\iUIBlock; use utils; -use WebPage; /** * Class BlockRenderer @@ -72,7 +71,6 @@ class BlockRenderer /** * Helper to use directly in TWIG to render a block and its sub blocks * - * @param \WebPage $oPage * @param \Combodo\iTop\Application\UI\Base\iUIBlock $oBlock * @param array $aContextParams * @@ -81,60 +79,14 @@ class BlockRenderer * @throws \Twig\Error\LoaderError * @throws \Twig\Error\RuntimeError * @throws \Twig\Error\SyntaxError - * @throws \Exception */ - public static function RenderBlockTemplate(WebPage $oPage, iUIBlock $oBlock, array $aContextParams = []): string + public static function RenderBlockTemplates(iUIBlock $oBlock, array $aContextParams = []): string { - static::RenderCssJsInPage($oPage, $oBlock, $aContextParams); - static::RenderDeferredBlocks($oPage, $oBlock); - $oSelf = new static($oBlock, $aContextParams); + return $oSelf->RenderHtml(); } - protected static function RenderDeferredBlocks(WebPage $oPage, iUIBlock $oBlock) - { - foreach ($oBlock->GetDeferredBlocks() as $oDeferredBlock) { - $oPage->AddDeferredBlock($oDeferredBlock); - } - foreach ($oBlock->GetSubBlocks() as $oSubBlock) { - static::RenderDeferredBlocks( $oPage, $oSubBlock); - } - } - - /** - * @param \WebPage $oPage - * @param \Combodo\iTop\Application\UI\Base\iUIBlock $oBlock - * @param array $aContextParams - * - * @throws \Exception - */ - public static function RenderCssJsInPage(WebPage $oPage, iUIBlock $oBlock, array $aContextParams = []): void - { - // CSS files - foreach ($oBlock->GetCssFilesUrlRecursively(true) as $sFileAbsUrl) { - $oPage->add_linked_stylesheet($sFileAbsUrl); - } - // JS files - foreach ($oBlock->GetJsFilesUrlRecursively(true) as $sFileAbsUrl) { - $oPage->add_linked_script($sFileAbsUrl); - } - static::RenderCssJsTemplatesRecursively($oPage, $oBlock, $aContextParams); - } - - protected static function RenderCssJsTemplatesRecursively(WebPage $oPage, iUIBlock $oBlock, array $aContextParams = []): void - { - $oBlockRenderer = new static($oBlock, $aContextParams); - $oPage->add_init_script($oBlockRenderer->RenderJsInline(iUIBlock::JS_TYPE_ON_INIT)); - $oPage->add_script($oBlockRenderer->RenderJsInline(iUIBlock::JS_TYPE_LIVE)); - $oPage->add_ready_script($oBlockRenderer->RenderJsInline(iUIBlock::JS_TYPE_ON_READY)); - $oPage->add_style($oBlockRenderer->RenderCssInline()); - - foreach ($oBlock->GetSubBlocks() as $oSubBlock) { - static::RenderCssJsTemplatesRecursively( $oPage, $oSubBlock, $aContextParams); - } - } - /** @var \Combodo\iTop\Application\UI\Base\iUIBlock $oBlock */ protected $oBlock; /** @var array $aContextParams Optional context parameters to pass to the template during rendering */ diff --git a/sources/Renderer/Console/ConsoleBlockRenderer.php b/sources/Renderer/Console/ConsoleBlockRenderer.php new file mode 100644 index 000000000..55b3efd59 --- /dev/null +++ b/sources/Renderer/Console/ConsoleBlockRenderer.php @@ -0,0 +1,84 @@ +RenderHtml(); + } + + protected static function AddDeferredBlocksToPage(WebPage $oPage, iUIBlock $oBlock) + { + foreach ($oBlock->GetDeferredBlocks() as $oDeferredBlock) { + $oPage->AddDeferredBlock($oDeferredBlock); + } + foreach ($oBlock->GetSubBlocks() as $oSubBlock) { + static::AddDeferredBlocksToPage( $oPage, $oSubBlock); + } + } + + /** + * @param \WebPage $oPage + * @param \Combodo\iTop\Application\UI\Base\iUIBlock $oBlock + * @param array $aContextParams + * + * @throws \Exception + */ + public static function AddCssJsToPage(WebPage $oPage, iUIBlock $oBlock, array $aContextParams = []): void + { + // CSS files + foreach ($oBlock->GetCssFilesUrlRecursively(true) as $sFileAbsUrl) { + $oPage->add_linked_stylesheet($sFileAbsUrl); + } + // JS files + foreach ($oBlock->GetJsFilesUrlRecursively(true) as $sFileAbsUrl) { + $oPage->add_linked_script($sFileAbsUrl); + } + static::AddCssJsTemplatesToPageRecursively($oPage, $oBlock, $aContextParams); + } + + protected static function AddCssJsTemplatesToPageRecursively(WebPage $oPage, iUIBlock $oBlock, array $aContextParams = []): void + { + $oBlockRenderer = new static($oBlock, $aContextParams); + $oPage->add_init_script($oBlockRenderer->RenderJsInline(iUIBlock::JS_TYPE_ON_INIT)); + $oPage->add_script($oBlockRenderer->RenderJsInline(iUIBlock::JS_TYPE_LIVE)); + $oPage->add_ready_script($oBlockRenderer->RenderJsInline(iUIBlock::JS_TYPE_ON_READY)); + $oPage->add_style($oBlockRenderer->RenderCssInline()); + + foreach ($oBlock->GetSubBlocks() as $oSubBlock) { + static::AddCssJsTemplatesToPageRecursively( $oPage, $oSubBlock, $aContextParams); + } + } + +} \ No newline at end of file diff --git a/sources/application/WebPage/AjaxPage.php b/sources/application/WebPage/AjaxPage.php index 5d6339368..db42dcd8e 100644 --- a/sources/application/WebPage/AjaxPage.php +++ b/sources/application/WebPage/AjaxPage.php @@ -8,6 +8,7 @@ use Combodo\iTop\Application\TwigBase\Twig\TwigHelper; use Combodo\iTop\Application\UI\Base\iUIBlock; use Combodo\iTop\Application\UI\Base\Layout\iUIContentBlock; use Combodo\iTop\Renderer\BlockRenderer; +use Combodo\iTop\Renderer\Console\ConsoleBlockRenderer; class AjaxPage extends WebPage implements iTabbedPage { @@ -147,7 +148,7 @@ class AjaxPage extends WebPage implements iTabbedPage header($s_header); } - BlockRenderer::RenderCssJsInPage($this, $this->oContentLayout); + ConsoleBlockRenderer::AddCssJsToPage($this, $this->oContentLayout); // Render the blocks // Additional UI widgets to be activated inside the ajax fragment diff --git a/sources/application/WebPage/WebPage.php b/sources/application/WebPage/WebPage.php index fc119591c..58532a7d9 100644 --- a/sources/application/WebPage/WebPage.php +++ b/sources/application/WebPage/WebPage.php @@ -25,6 +25,7 @@ use Combodo\iTop\Application\UI\Base\iUIBlock; use Combodo\iTop\Application\UI\Base\Layout\iUIContentBlock; use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock; use Combodo\iTop\Renderer\BlockRenderer; +use Combodo\iTop\Renderer\Console\ConsoleBlockRenderer; /** @@ -784,7 +785,7 @@ class WebPage implements Page $aData['oLayout'] = $this->oContentLayout; $aData['aDeferredBlocks'] = $this->GetDeferredBlocks($this->oContentLayout); - BlockRenderer::RenderCssJsInPage($this, $this->oContentLayout); + ConsoleBlockRenderer::AddCssJsToPage($this, $this->oContentLayout); // Base structure of data to pass to the TWIG template $aData['aPage'] = [ diff --git a/sources/application/WebPage/iTopWebPage.php b/sources/application/WebPage/iTopWebPage.php index 0c5785781..0d4f9d1ec 100644 --- a/sources/application/WebPage/iTopWebPage.php +++ b/sources/application/WebPage/iTopWebPage.php @@ -31,6 +31,7 @@ use Combodo\iTop\Application\UI\Base\Layout\TopBar\TopBarFactory; use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock; use Combodo\iTop\Application\UI\Base\UIBlock; use Combodo\iTop\Renderer\BlockRenderer; +use Combodo\iTop\Renderer\Console\ConsoleBlockRenderer; /** * Web page with some associated CSS and scripts (jquery) for a fancier display @@ -891,7 +892,7 @@ EOF; continue; } - BlockRenderer::RenderCssJsInPage($this, $oLayout); + ConsoleBlockRenderer::AddCssJsToPage($this, $oLayout); } // Components