N°4498 - Introduce new APIs due to iPageUIExtension deprecation (#245)

* Introduce new APIs due to iPageUIExtension deprecation

* Fix typo in interface name

* Rename interface to more consistent names
This commit is contained in:
Molkobain
2021-12-02 13:38:05 +01:00
committed by GitHub
parent 7db97c6804
commit edcf9e6a1e
2 changed files with 155 additions and 1 deletions

View File

@@ -1101,7 +1101,9 @@ class JSButtonItem extends JSPopupMenuItem
* @api
* @package Extensibility
* @since 2.0
* @deprecated since 3.0.0 use iPageUIBlockExtension instead
* @deprecated 3.0.0 If you need to include:
* * JS/CSS files/snippets, use {@see \iBackofficeLinkedScriptsExtension}, {@see \iBackofficeLinkedStylesheetsExtension}, etc instead
* * HTML (and optionally JS/CSS), use {@see \iPageUIBlockExtension} to manipulate {@see \Combodo\iTop\Application\UI\Base\UIBlock} instead
*/
interface iPageUIExtension
{
@@ -1252,6 +1254,119 @@ abstract class AbstractPageUIBlockExtension implements iPageUIBlockExtension
}
}
/**
* Implement this interface to add script (JS) files to the backoffice pages
*
* @see \iTopWebPage::$a_linked_scripts
* @api
* @since 3.0.0
*/
interface iBackofficeLinkedScriptsExtension
{
/**
* @see \iTopWebPage::$a_linked_scripts Each script will be included using this property
* @return array An array of absolute URLs to the files to include
*/
public function GetLinkedScriptsAbsUrls(): array;
}
/**
* Implement this interface to add inline script (JS) to the backoffice pages' head.
* Will be executed first, BEFORE the DOM interpretation.
*
* @see \iTopWebPage::$a_early_scripts
* @api
* @since 3.0.0
*/
interface iBackofficeEarlyScriptExtension
{
/**
* @see \iTopWebPage::$a_early_scripts
* @return string
*/
public function GetEarlyScript(): string;
}
/**
* Implement this interface to add inline script (JS) to the backoffice pages that will be executed immediately, without waiting for the DOM to be ready.
*
* @see \iTopWebPage::$a_scripts
* @api
* @since 3.0.0
*/
interface iBackofficeScriptExtension
{
/**
* @see \iTopWebPage::$a_scripts
* @return string
*/
public function GetScript(): string;
}
/**
* Implement this interface to add inline script (JS) to the backoffice pages that will be executed right when the DOM is ready.
*
* @see \iTopWebPage::$a_init_scripts
* @api
* @since 3.0.0
*/
interface iBackofficeInitScriptExtension
{
/**
* @see \iTopWebPage::$a_init_scripts
* @return string
*/
public function GetInitScript(): string;
}
/**
* Implement this interface to add inline script (JS) to the backoffice pages that will be executed slightly AFTER the DOM is ready (just after the init. scripts).
*
* @see \iTopWebPage::$a_ready_scripts
* @api
* @since 3.0.0
*/
interface iBackofficeReadyScriptExtension
{
/**
* @see \iTopWebPage::$a_ready_scripts
* @return string
*/
public function GetReadyScript(): string;
}
/**
* Implement this interface to add stylesheets (CSS) to the backoffice pages
*
* @see \iTopWebPage::$a_linked_stylesheets
* @api
* @since 3.0.0
*/
interface iBackofficeLinkedStylesheetsExtension
{
/**
* @see \iTopWebPage::$a_linked_stylesheets
* @return array An array of absolute URLs to the files to include
*/
public function GetLinkedStylesheetsAbsUrls(): array;
}
/**
* Implement this interface to add inline style (CSS) to the backoffice pages' head.
*
* @see \iTopWebPage::$a_styles
* @api
* @since 3.0.0
*/
interface iBackofficeStyleExtension
{
/**
* @see \iTopWebPage::$a_styles
* @return string
*/
public function GetStyle(): string;
}
/**
* Implement this interface to add content to any enhanced portal page
*

View File

@@ -802,6 +802,45 @@ HTML;
$oPrintHeader = null;
// Prepare internal parts (js files, css files, js snippets, css snippets, ...)
// - API: External script files
/** @var \iBackofficeLinkedScriptsExtension $oExtensionInstance */
foreach (MetaModel::EnumPlugins('iBackofficeLinkedScriptsExtension') as $oExtensionInstance) {
foreach ($oExtensionInstance->GetLinkedScriptsAbsUrls() as $sScriptUrl) {
$this->add_linked_script($sScriptUrl);
}
}
// - API: Early inline scripts
/** @var \iBackofficeEarlyScriptExtension $oExtensionInstance */
foreach (MetaModel::EnumPlugins('iBackofficeEarlyScriptExtension') as $oExtensionInstance) {
$this->add_early_script($oExtensionInstance->GetEarlyScript());
}
// - API: Inline scripts
/** @var \iBackofficeScriptExtension $oExtensionInstance */
foreach (MetaModel::EnumPlugins('iBackofficeScriptExtension') as $oExtensionInstance) {
$this->add_early_script($oExtensionInstance->GetScript());
}
// - API: Init. scripts
/** @var \iBackofficeInitScriptExtension $oExtensionInstance */
foreach (MetaModel::EnumPlugins('iBackofficeInitScriptExtension') as $oExtensionInstance) {
$this->add_init_script($oExtensionInstance->GetInitScript());
}
// - API: Ready scripts
/** @var \iBackofficeReadyScriptExtension $oExtensionInstance */
foreach (MetaModel::EnumPlugins('iBackofficeReadyScriptExtension') as $oExtensionInstance) {
$this->add_ready_script($oExtensionInstance->GetReadyScript());
}
// - API: External stylesheet files
/** @var \iBackofficeLinkedStylesheetsExtension $oExtensionInstance */
foreach (MetaModel::EnumPlugins('iBackofficeLinkedStylesheetsExtension') as $oExtensionInstance) {
foreach ($oExtensionInstance->GetLinkedStylesheetsAbsUrls() as $sStylesheetUrl) {
$this->add_linked_stylesheet($sStylesheetUrl);
}
}
// - API: Inline style
/** @var \iBackofficeStyleExtension $oExtensionInstance */
foreach (MetaModel::EnumPlugins('iBackofficeStyleExtension') as $oExtensionInstance) {
$this->add_style($oExtensionInstance->GetStyle());
}
// - Generate necessary dict. files
if ($this->bAddJSDict) {
$this->output_dict_entries();