From 75d913a003255e417bdb18ca998d9559e0a24ae6 Mon Sep 17 00:00:00 2001 From: Molkobain Date: Sat, 25 Sep 2021 23:33:13 +0200 Subject: [PATCH] Compiler: Factorize DM classes style and add them to the DM CSS rules --- .../datamodel.itop-incident-mgmt-itil.xml | 2 +- .../datamodel.itop-request-mgmt-itil.xml | 2 +- .../datamodel.itop-request-mgmt.xml | 2 +- .../datamodel.itop-structure.xml | 4 +- setup/compiler.class.inc.php | 211 +++++++++++++----- test/application/ThemeHandlerTest.php | 4 +- 6 files changed, 158 insertions(+), 67 deletions(-) diff --git a/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml b/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml index e58bd54a1..6a29f9950 100755 --- a/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml +++ b/datamodels/2.x/itop-incident-mgmt-itil/datamodel.itop-incident-mgmt-itil.xml @@ -26,7 +26,7 @@ diff --git a/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml b/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml index 3a94d597c..522eb97e9 100755 --- a/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml +++ b/datamodels/2.x/itop-request-mgmt-itil/datamodel.itop-request-mgmt-itil.xml @@ -26,7 +26,7 @@ diff --git a/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml b/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml index 9d3353b18..55f57dce7 100755 --- a/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml +++ b/datamodels/2.x/itop-request-mgmt/datamodel.itop-request-mgmt.xml @@ -26,7 +26,7 @@ diff --git a/datamodels/2.x/itop-structure/datamodel.itop-structure.xml b/datamodels/2.x/itop-structure/datamodel.itop-structure.xml index 09aa37570..771b43472 100644 --- a/datamodels/2.x/itop-structure/datamodel.itop-structure.xml +++ b/datamodels/2.x/itop-structure/datamodel.itop-structure.xml @@ -392,8 +392,8 @@ diff --git a/setup/compiler.class.inc.php b/setup/compiler.class.inc.php index 34e4af969..7b7b7b230 100644 --- a/setup/compiler.class.inc.php +++ b/setup/compiler.class.inc.php @@ -54,6 +54,21 @@ class MFCompiler { const DATA_PRECOMPILED_FOLDER = 'data'.DIRECTORY_SEPARATOR.'precompiled_styles'.DIRECTORY_SEPARATOR; + /** + * @var string + * @see self::GenerateStyleDataFromNode + * @internal + * @since 3.0.0 + */ + public const ENUM_STYLE_HOST_ELEMENT_TYPE_CLASS = 'class'; + /** + * @var string + * @see self::GenerateStyleDataFromNode + * @internal + * @since 3.0.0 + */ + public const ENUM_STYLE_HOST_ELEMENT_TYPE_ENUM = 'enum'; + /** * Path to the "use symlinks" file * If this file is present, then we will compile to symlink ! @@ -1211,15 +1226,9 @@ EOF // Style if ($oStyle = $oProperties->GetOptionalElement('style')) { - $sMainColor = $oStyle->GetChildText('main_color'); - $sComplementaryColor = $oStyle->GetChildText('complementary_color'); - $sStyleCSSClass = "ibo-dm-class--$sClass"; - $sStyleCSSAltClass = "ibo-dm-class-alt--$sClass"; - if (($sIcon = $oStyle->GetChildText('icon')) && (strlen($sIcon) > 0)) { - $sIcon = $sModuleRelativeDir.'/'.$sIcon; - $sIcon = ", '$sIcon'"; - } - $aClassParams['style'] = "new ormStyle('$sStyleCSSClass', '$sStyleCSSAltClass', '$sMainColor', '$sComplementaryColor', null $sIcon)"; + $aClassStyleData = $this->GenerateStyleDataFromNode($oStyle, $sModuleRelativeDir, self::ENUM_STYLE_HOST_ELEMENT_TYPE_CLASS, $sClass); + $aClassParams['style'] = $aClassStyleData['orm_style_instantiation']; + $sCss .= $aClassStyleData['scss']; } @@ -1439,9 +1448,9 @@ EOF $aValues[] = $sCode; $oStyleNode = $oValue->GetOptionalElement('style'); if ($oStyleNode) { - $aEnumStyleData = $this->GenerateFieldStyleData($oStyleNode, 'enum', $sClass, $sAttCode, $sCode); - $aStyledValues[] = $aEnumStyleData['orm_style']; - $sCss .= $aEnumStyleData['css']; + $aEnumStyleData = $this->GenerateStyleDataFromNode($oStyleNode, $sModuleRelativeDir, self::ENUM_STYLE_HOST_ELEMENT_TYPE_ENUM, $sClass, $sAttCode, $sCode); + $aStyledValues[] = $aEnumStyleData['orm_style_instantiation']; + $sCss .= $aEnumStyleData['scss']; } } $sValues = '"'.implode(',', $aValues).'"'; @@ -1452,9 +1461,9 @@ EOF } $oDefaultStyleNode = $oField->GetOptionalElement('default_style'); if ($oDefaultStyleNode) { - $aEnumStyleData = $this->GenerateFieldStyleData($oDefaultStyleNode, 'enum', $sClass, $sAttCode); - $aParameters['default_style'] = $aEnumStyleData['orm_style']; - $sCss .= $aEnumStyleData['css']; + $aEnumStyleData = $this->GenerateStyleDataFromNode($oDefaultStyleNode, $sModuleRelativeDir, self::ENUM_STYLE_HOST_ELEMENT_TYPE_ENUM, $sClass, $sAttCode); + $aParameters['default_style'] = $aEnumStyleData['orm_style_instantiation']; + $sCss .= $aEnumStyleData['scss']; } $aParameters['display_style'] = $this->GetPropString($oField, 'display_style', 'list'); $aParameters['sql'] = $this->GetMandatoryPropString($oField, 'sql'); @@ -1474,9 +1483,9 @@ EOF $aValues[] = $sCode; $oStyleNode = $oValue->GetOptionalElement('style'); if ($oStyleNode) { - $aEnumStyleData = $this->GenerateFieldStyleData($oStyleNode, 'enum', $sClass, $sAttCode, $sCode); - $aStyledValues[] = $aEnumStyleData['orm_style']; - $sCss .= $aEnumStyleData['css']; + $aEnumStyleData = $this->GenerateStyleDataFromNode($oStyleNode, $sModuleRelativeDir, self::ENUM_STYLE_HOST_ELEMENT_TYPE_ENUM, $sClass, $sAttCode, $sCode); + $aStyledValues[] = $aEnumStyleData['orm_style_instantiation']; + $sCss .= $aEnumStyleData['scss']; } } // new style... $sValues = 'array('.implode(', ', $aValues).')'; @@ -1487,9 +1496,9 @@ EOF } $oDefaultStyleNode = $oField->GetOptionalElement('default_style'); if ($oDefaultStyleNode) { - $aEnumStyleData = $this->GenerateFieldStyleData($oDefaultStyleNode, 'enum', $sClass, $sAttCode); - $aParameters['default_style'] = $aEnumStyleData['orm_style']; - $sCss .= $aEnumStyleData['css']; + $aEnumStyleData = $this->GenerateStyleDataFromNode($oDefaultStyleNode, $sModuleRelativeDir, self::ENUM_STYLE_HOST_ELEMENT_TYPE_ENUM, $sClass, $sAttCode); + $aParameters['default_style'] = $aEnumStyleData['orm_style_instantiation']; + $sCss .= $aEnumStyleData['scss']; } $aParameters['allowed_values'] = "new ValueSetEnum($sValues)"; $aParameters['sql'] = $this->GetMandatoryPropString($oField, 'sql'); @@ -2217,70 +2226,152 @@ EOF } /** - * This method is public in order to be used in the tests - * - * @internal + * @internal This method is public in order to be used in the tests * * @param \MFElement $oNode Style node, can be either a