Compare commits

..

30 Commits

Author SHA1 Message Date
Anne-Cath
0a55a9d74a WIP 2025-06-03 10:51:40 +02:00
Anne-Cath
cc881ca890 WIP - autoloader 2025-05-20 09:49:58 +02:00
Anne-Cath
772a6a4907 N°6193 - Excel export of dependencies of a CI by class - WIP 2025-05-14 11:41:17 +02:00
Stephen Abello
6bd11fb9bf N°8361 - Make vertical the default value for portal's menu 2025-05-06 10:43:34 +02:00
jf-cbd
624573d088 Merge remote-tracking branch 'origin/support/3.2' into develop
# Conflicts:
#	tests/php-unit-tests/unitary-tests/core/DBObject/DBObjectTest.php
2025-04-22 10:22:25 +02:00
jf-cbd
43a10e6944 Revert "N°8259 - Problem with GetMaxSize on AttributeText"
This reverts commit 29c75f626b.
2025-04-22 09:37:54 +02:00
Anne-Catherine
b21a02dcb8 N°7385 - Trigger on mention executed even if it's not a mention with @ (#638) 2025-04-18 14:52:23 +02:00
Anne-Catherine
3b60e63c97 N°6663 - Request template fields do not apply portal silos (#684) 2025-04-18 13:01:19 +02:00
Benjamin Dalsass
adc8b47945 N°8318 - Managing menu in itop portal new look (#710) 2025-04-14 16:38:36 +02:00
Stephen Abello
5e6d96019d N°8274 - Move mixins declarations to utils, move their usage to themes/ to be able to have their variables overloaded 2025-04-11 10:43:03 +02:00
Stephen Abello
06cc64f6d6 N°8274 - Move CSS color declaration to themes/ to avoid them being redeclared with every file importing utils 2025-04-11 10:09:18 +02:00
Stephen Abello
a5c14c3a48 N°8274 - Move body colors from legacy file to current theme files 2025-04-11 10:08:17 +02:00
Stephen Abello
8f6f243716 N°8274 - Fix typo 2025-04-11 09:47:50 +02:00
Stephen Abello
3c574819b2 N°8274 - Update precompiled stylesheets 2025-04-10 10:35:01 +02:00
Stephen Abello
5b1ea20407 N°8274 - Move every color style to themes/ to ease color customization, add illustration to export popup 2025-04-10 10:33:34 +02:00
Ben
4d88ef6ed4 Update contributors 2025-04-08 09:55:20 +02:00
Stephen Abello
5cb1102e6e N°8274 - Update precompiled stylesheets 2025-04-03 15:51:44 +02:00
Stephen Abello
bf23e4d98d N°8274 - Fix portal additional user profile tabs display 2025-04-03 15:51:36 +02:00
Stephen Abello
8645b28baa N°8274 - Update precompiled stylesheets 2025-04-02 15:50:29 +02:00
Stephen Abello
eff6fcff49 N°8274 - Fix input followed by input control (such as date time picker) display 2025-04-02 15:48:42 +02:00
Stephen Abello
994b08f94a N°8274 - Add no item illustration to browse brick 2025-04-02 15:45:28 +02:00
Stephen Abello
19495d8acf N°8274 - Update precompiled stylesheets 2025-04-02 14:32:38 +02:00
Stephen Abello
48a3ea1945 N°8274 - Replace color for selected rows in datatables 2025-04-02 14:31:33 +02:00
Stephen Abello
a11b2845f7 N°8274 - Correctly vertical align following dot in modal title 2025-04-02 12:07:21 +02:00
Stephen Abello
ee72325451 N°8274 - Make color slightly different for nested fieldset 2025-04-02 12:07:04 +02:00
Stephen Abello
ebb59d3ddc N°8274 - Align modal header and footer padding 2025-04-02 11:35:23 +02:00
Stephen Abello
0193db609d N°8274 - Add illustration on empty manage brick 2025-04-02 11:30:14 +02:00
Stephen Abello
ea2caed98a N°8274 - Correctly vertical align following dot 2025-04-02 11:29:42 +02:00
Stephen Abello
09c092782c N°8274 - Add approot to portal's Symfony variables. Allow portal's twig to display images located in /images in twig 2025-04-02 11:15:45 +02:00
Stephen Abello
a4166f874e N°8274 - Allow to recolor illustrations in portal 2025-04-01 16:28:40 +02:00
106 changed files with 3289 additions and 2019 deletions

View File

@@ -76,7 +76,9 @@ We would like to give a special thank you 🤗 to the people from the community
### Names
- Al Hallak, Amr (a.k.a [@v4yne1](https://github.com/v4yne1))
- Alves, David
- Audon, Florian
- Beck, Pedro
- Beer, Christian (a.k.a [@ChristianBeer](https://www.github.com/ChristianBeer))
- Bilger, Jean-François
@@ -88,20 +90,26 @@ We would like to give a special thank you 🤗 to the people from the community
- Colantoni, Maria Laura
- Couronné, Guy
- Dejin, Bie (a.k.a [@bdejin](https://github.com/bdejin))
- Delicado, Elodie
- Dvořák, Lukáš
- Goethals, Stefan
- Giuva, Vincenzo Katriel (a.k.a [@DarkNight97boss](https://github.com/DarkNight97boss))
- Gumble, David
- Heloir, Arthur
- Janssens, Jelle (a.k.a [@janssensjelle](https://github.com/janssensjelle))
- Ji, Leeb (冀利斌) (a.k.a [@chileeb](https://github.com/chileeb))
- Kaltefleiter, Lars (a.k.a [@larhip](https://www.github.com/larhip))
- Khamit, Shamil
- Kincel, Martin
- Konečný, Kamil
- Kunin, Vladimir
- Lassiter, Dennis
- Lassiter, Denis (a.k.a [@delassiter](https://github.com/delassiter))
- Lazcano, Federico
- Lucas, Jonathan
- Malik, Remie
- Mantel, Ina
- Martin, Pierre (a.k.a [@Worty](https://github.com/worty-syn))
- Melchiorre, Romain
- Mindêllo de Andrade, Lucas (a.k.a [@rokam](https://www.github.com/rokam))
- Mozart de Oliveira, Eduardo (a.k.a [@eduardomozart](https://github.com/eduardomozart))
- Raenker, Martin
@@ -113,10 +121,12 @@ We would like to give a special thank you 🤗 to the people from the community
- Seki, Shoji
- Shilov, Vladimir
- Stetina, Pavel (a.k.a [@Stetinac](https://github.com/Stetinac))
- Stukalov, Ilya (a.k.a [@ilya](https://www.github.com/ilya)-stukalov)
- Stukalov, Ilya (a.k.a [@ilya](https://www.github.com/ilya-stukalov))
- Tarjányi, Csaba (a.k.a [@tacsaby](https://github.com/tacsaby))
- Toraya, Chairat (a.k.a [@Kyokito1412](https://github.com/Kyokito1412))
- Tulio, Marco
- Turrubiates, Miguel
- Višnjić, Aldin (a.k.a[@viliald](https://github.com/viliald))
- Vlk, Karel (a.k.a [@vlk-charles](https://www.github.com/vlk-charles))
### Aliases
@@ -138,4 +148,6 @@ We would like to give a special thank you 🤗 to the people from the community
- [ITOMIG](https://www.itomig.de/)
- [Pimkie](https://www.pimkie.com/)
- [Super-Visions](https://www.super-visions.com/)
- [Defence Tech Cyber Security - Malware Lab](https://github.com/DefenceTechSecurity)
- Orange Cyberdefense
- MipihSIB

View File

@@ -521,7 +521,7 @@ class utils
// For URL
case static::ENUM_SANITIZATION_FILTER_URL:
// N°6350 - returns only valid URLs
// N°6350 - returns only valid URLs
$retValue = filter_var($value, FILTER_VALIDATE_URL);
break;
@@ -554,44 +554,44 @@ class utils
switch($sError)
{
case UPLOAD_ERR_OK:
$sTmpName = is_null($sIndex) ? $aFileInfo['tmp_name'] : $aFileInfo['tmp_name'][$sIndex];
$sMimeType = is_null($sIndex) ? $aFileInfo['type'] : $aFileInfo['type'][$sIndex];
$sName = is_null($sIndex) ? $aFileInfo['name'] : $aFileInfo['name'][$sIndex];
$sTmpName = is_null($sIndex) ? $aFileInfo['tmp_name'] : $aFileInfo['tmp_name'][$sIndex];
$sMimeType = is_null($sIndex) ? $aFileInfo['type'] : $aFileInfo['type'][$sIndex];
$sName = is_null($sIndex) ? $aFileInfo['name'] : $aFileInfo['name'][$sIndex];
$doc_content = file_get_contents($sTmpName);
$doc_content = file_get_contents($sTmpName);
$sMimeType = self::GetFileMimeType($sTmpName);
$oDocument = new ormDocument($doc_content, $sMimeType, $sName);
break;
break;
case UPLOAD_ERR_NO_FILE:
// no file to load, it's a normal case, just return an empty document
break;
// no file to load, it's a normal case, just return an empty document
break;
case UPLOAD_ERR_FORM_SIZE:
case UPLOAD_ERR_INI_SIZE:
throw new FileUploadException(Dict::Format('UI:Error:UploadedFileTooBig', ini_get('upload_max_filesize')));
break;
throw new FileUploadException(Dict::Format('UI:Error:UploadedFileTooBig', ini_get('upload_max_filesize')));
break;
case UPLOAD_ERR_PARTIAL:
throw new FileUploadException(Dict::S('UI:Error:UploadedFileTruncated.'));
break;
throw new FileUploadException(Dict::S('UI:Error:UploadedFileTruncated.'));
break;
case UPLOAD_ERR_NO_TMP_DIR:
throw new FileUploadException(Dict::S('UI:Error:NoTmpDir'));
break;
throw new FileUploadException(Dict::S('UI:Error:NoTmpDir'));
break;
case UPLOAD_ERR_CANT_WRITE:
throw new FileUploadException(Dict::Format('UI:Error:CannotWriteToTmp_Dir', ini_get('upload_tmp_dir')));
break;
throw new FileUploadException(Dict::Format('UI:Error:CannotWriteToTmp_Dir', ini_get('upload_tmp_dir')));
break;
case UPLOAD_ERR_EXTENSION:
$sName = is_null($sIndex) ? $aFileInfo['name'] : $aFileInfo['name'][$sIndex];
throw new FileUploadException(Dict::Format('UI:Error:UploadStoppedByExtension_FileName', $sName));
break;
$sName = is_null($sIndex) ? $aFileInfo['name'] : $aFileInfo['name'][$sIndex];
throw new FileUploadException(Dict::Format('UI:Error:UploadStoppedByExtension_FileName', $sName));
break;
default:
throw new FileUploadException(Dict::Format('UI:Error:UploadFailedUnknownCause_Code', $sError));
break;
throw new FileUploadException(Dict::Format('UI:Error:UploadFailedUnknownCause_Code', $sError));
break;
}
}
@@ -889,10 +889,10 @@ class utils
$aDateRegexps = array_values($aSpec);
}
$sDateRegexp = str_replace($aDateTokens, $aDateRegexps, $sFormat);
$sDateRegexp = str_replace($aDateTokens, $aDateRegexps, $sFormat);
if (preg_match('!^(?<head>)'.$sDateRegexp.'(?<tail>)$!', $sDate, $aMatches))
{
if (preg_match('!^(?<head>)'.$sDateRegexp.'(?<tail>)$!', $sDate, $aMatches))
{
$sYear = isset($aMatches['year']) ? $aMatches['year'] : 0;
$sMonth = isset($aMatches['month']) ? $aMatches['month'] : 1;
$sDay = isset($aMatches['day']) ? $aMatches['day'] : 1;
@@ -901,11 +901,11 @@ class utils
$sSecond = isset($aMatches['second']) ? $aMatches['second'] : 0;
return strtotime("$sYear-$sMonth-$sDay $sHour:$sMinute:$sSecond");
}
else
{
return false;
}
// http://www.spaweditor.com/scripts/regex/index.php
else
{
return false;
}
// http://www.spaweditor.com/scripts/regex/index.php
}
/**
@@ -1334,8 +1334,8 @@ class utils
return Session::GetLog();
}
static function DebugBacktrace($iLimit = 5)
{
static function DebugBacktrace($iLimit = 5)
{
$aFullTrace = debug_backtrace();
$aLightTrace = array();
for($i=1; ($i<=$iLimit && $i < count($aFullTrace)); $i++) // Skip the last function call... which is the call to this function !
@@ -1343,7 +1343,7 @@ class utils
$aLightTrace[$i] = $aFullTrace[$i]['function'].'(), called from line '.$aFullTrace[$i]['line'].' in '.$aFullTrace[$i]['file'];
}
echo "<p><pre>".print_r($aLightTrace, true)."</pre></p>\n";
}
}
/**
* Execute the given iTop PHP script, passing it the current credentials
@@ -1539,7 +1539,7 @@ class utils
if (strlen($sUrl) < SERVER_MAX_URL_LENGTH) {
// Static menus: Email this page, CSV Export & Add to Dashboard
$aResult[] = new URLPopupMenuItem('UI:Menu:EMail', Dict::S('UI:Menu:EMail'),
"mailto:?body=".urlencode($sUrl).' ' // Add an extra space to make it work in Outlook
"mailto:?body=".urlencode($sUrl).' ' // Add an extra space to make it work in Outlook
);
}
@@ -1961,7 +1961,7 @@ SQL;
CURLOPT_HTTPHEADER => $aHTTPHeaders,
);
$aAllOptions = $aCurlOptions + $aOptions;
$aAllOptions = $aCurlOptions + $aOptions;
$ch = curl_init($sUrl);
curl_setopt_array($ch, $aAllOptions);
$response = curl_exec($ch);
@@ -1986,7 +1986,7 @@ SQL;
/**
* Get a standard list of character sets
*
* @param array $aAdditionalEncodings Additional values
* @param array $aAdditionalEncodings Additional values
* @return array of iconv code => english label, sorted by label
*/
public static function GetPossibleEncodings($aAdditionalEncodings = array())
@@ -2221,13 +2221,13 @@ SQL;
case 'image/gif':
case 'image/jpeg':
case 'image/png':
$img = @imagecreatefromstring($oImage->GetData());
break;
$img = @imagecreatefromstring($oImage->GetData());
break;
default:
// Unsupported image type, return the image as-is
//throw new Exception("Unsupported image type: '".$oImage->GetMimeType()."'. Cannot resize the image, original image will be used.");
return $oImage;
// Unsupported image type, return the image as-is
//throw new Exception("Unsupported image type: '".$oImage->GetMimeType()."'. Cannot resize the image, original image will be used.");
return $oImage;
}
if ($img === false)
{
@@ -2259,16 +2259,16 @@ SQL;
switch ($oImage->GetMimeType())
{
case 'image/gif':
imagegif($new); // send image to output buffer
break;
imagegif($new); // send image to output buffer
break;
case 'image/jpeg':
imagejpeg($new, null, 80); // null = send image to output buffer, 80 = good quality
break;
imagejpeg($new, null, 80); // null = send image to output buffer, 80 = good quality
break;
case 'image/png':
imagepng($new, null, 5); // null = send image to output buffer, 5 = medium compression
break;
imagepng($new, null, 5); // null = send image to output buffer, 5 = medium compression
break;
}
$oResampledImage = new ormDocument(ob_get_contents(), $oImage->GetMimeType(), $oImage->GetFileName());
@ob_end_clean();
@@ -2298,16 +2298,16 @@ SQL;
$data .= mt_rand();
$hash = strtoupper(hash('ripemd128', $uid . md5($data)));
$sUUID = '{' .
substr($hash, 0, 8) .
'-' .
substr($hash, 8, 4) .
'-' .
substr($hash, 12, 4) .
'-' .
substr($hash, 16, 4) .
'-' .
substr($hash, 20, 12) .
'}';
substr($hash, 0, 8) .
'-' .
substr($hash, 8, 4) .
'-' .
substr($hash, 12, 4) .
'-' .
substr($hash, 16, 4) .
'-' .
substr($hash, 20, 12) .
'}';
return $sUUID;
}
@@ -2319,7 +2319,7 @@ SQL;
*/
public static function GetCurrentModuleName($iCallDepth = 0)
{
return ModuleService::GetInstance()->GetCurrentModuleName($iCallDepth + 1);
return ModuleService::GetInstance()->GetCurrentModuleName($iCallDepth + 1);
}
/**
@@ -2366,7 +2366,7 @@ SQL;
*/
public static function GetCurrentModuleSetting($sProperty, $defaultvalue = null)
{
return ModuleService::GetInstance()->GetCurrentModuleSetting($sProperty, $defaultvalue);
return ModuleService::GetInstance()->GetCurrentModuleSetting($sProperty, $defaultvalue);
}
/**
@@ -2375,7 +2375,7 @@ SQL;
*/
public static function GetCompiledModuleVersion($sModuleName)
{
return ModuleService::GetInstance()->GetCompiledModuleVersion($sModuleName);
return ModuleService::GetInstance()->GetCompiledModuleVersion($sModuleName);
}
/**
@@ -3109,19 +3109,29 @@ TXT
$aMentionMatches = [];
$sText = html_entity_decode($sText);
preg_match_all('/<a\s*([^>]*)data-object-class="([^"]*)"\s.*data-object-key="([^"]*)"/Ui', $sText, $aMentionMatches);
$aMentionAllowedClasses = MetaModel::GetConfig()->Get('mentions.allowed_classes');
preg_match_all('/<a\s*([^>]*)data-object-class="([^"]*)"\s.*data-object-key="([^"]*)"\s*([^>]*)>(.*)<\/a>/Ui', $sText, $aMentionMatches);
foreach ($aMentionMatches[0] as $iMatchIdx => $sCompleteMatch) {
$sMatchedClass = $aMentionMatches[2][$iMatchIdx];
$sMatchedId = $aMentionMatches[3][$iMatchIdx];
$sMatchedName = $aMentionMatches[5][$iMatchIdx];
// Prepare array for matched class if not already present
if (!array_key_exists($sMatchedClass, $aMentionedObjects)) {
$aMentionedObjects[$sMatchedClass] = array();
}
// Add matched ID if not already there
if (!in_array($sMatchedId, $aMentionedObjects[$sMatchedClass])) {
$aMentionedObjects[$sMatchedClass][] = $sMatchedId;
}
$sMentionPrefix = array_search($sMatchedClass, $aMentionAllowedClasses);
if ($sMentionPrefix === false) {
continue;
}
//tests if the name starts with $sMentionPrefix (e.g. '@' for 'Contact' class)
if (str_starts_with($sMatchedName, $sMentionPrefix) === false) {
continue;
}
// Prepare array for matched class if not already present
if (!array_key_exists($sMatchedClass, $aMentionedObjects)) {
$aMentionedObjects[$sMatchedClass] = array();
}
// Add matched ID if not already there
if (!in_array($sMatchedId, $aMentionedObjects[$sMatchedClass])) {
$aMentionedObjects[$sMatchedClass][] = $sMatchedId;
}
}
return $aMentionedObjects;

View File

@@ -181,23 +181,6 @@ abstract class AttributeDefinition
return $this->GetSearchType() != static::SEARCH_WIDGET_TYPE_RAW;
}
/**
* @return bool
*/
public function IsComputed()
{
return $this->IsParam('expression');
}
/**
* @return array
* @throws \OQLException
*/
protected function GetComputedPrerequisiteAttributes(): array {
$oExpression = Expression::FromOQL($this->m_aParams['expression']);
return $oExpression->ListRequiredFields();
}
/** @var string */
protected $m_sCode;
/** @var array */
@@ -2734,11 +2717,7 @@ class AttributeDBFieldVoid extends AttributeDefinition
public function GetPrerequisiteAttributes($sClass = null)
{
$aPrerequisiteAttributes = $this->Get("depends_on");
if($this->IsComputed()) {
$aPrerequisiteAttributes = array_merge($aPrerequisiteAttributes, $this->GetComputedPrerequisiteAttributes());
}
return $aPrerequisiteAttributes;
return $this->Get("depends_on");
}
public static function IsBasedOnDBColumns()
@@ -2753,7 +2732,7 @@ class AttributeDBFieldVoid extends AttributeDefinition
public function IsWritable()
{
return !$this->IsMagic() && !$this->IsComputed();
return !$this->IsMagic();
}
public function GetSQLExpr()
@@ -2983,12 +2962,14 @@ class AttributeInteger extends AttributeDBField
public function MakeRealValue($proposedValue, $oHostObj)
{
if (is_null($proposedValue) || $proposedValue === '')
if (is_null($proposedValue))
{
return null;
} elseif(gettype($proposedValue) !== 'integer') {
IssueLog::Warning("Trying to set integer attribute ".$this->GetCode()." to type".gettype($proposedValue).".");
}
if ($proposedValue === '')
{
return null;
} // 0 is transformed into '' !
return (int)$proposedValue;
}
@@ -4484,7 +4465,7 @@ class AttributeText extends AttributeString
{
// Is there a way to know the current limitation for mysql?
// See mysql_field_len()
return 16383; // number of characters (that can be 1-4 bytes long), not of bytes
return 65535;
}
public static function RenderWikiHtml($sText, $bWikiOnly = false)

View File

@@ -25,7 +25,8 @@ define('EXPORTER_DEFAULT_CHUNK_SIZE', 1000);
class BulkExportException extends Exception
{
protected $sLocalizedMessage;
public function __construct($message, $sLocalizedMessage, $code = null, $previous = null)
public function __construct($message, $sLocalizedMessage, $code = 0, $previous = null)
{
parent::__construct($message, $code, $previous);
$this->sLocalizedMessage = $sLocalizedMessage;

View File

@@ -706,8 +706,6 @@ abstract class DBObject implements iDisplay
}
$this->_Set($sAttCode, $realvalue);
$this->UpdateDependentComputedAttributes($sAttCode);
$this->UpdateMetaAttributes(array($sAttCode));
// The object has changed, reset caches
@@ -762,10 +760,10 @@ abstract class DBObject implements iDisplay
*/
public function SetTrim($sAttCode, $sValue)
{
if (!$this->StringFitsInField($sAttCode, $sValue)) {
$oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
$iMaxSize = $oAttDef->GetMaxSize();
$sLength = mb_strlen($sValue);
$oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
$iMaxSize = $oAttDef->GetMaxSize();
$sLength = mb_strlen($sValue);
if ($iMaxSize && ($sLength > $iMaxSize)) {
$sMessage = " -truncated ($sLength chars)";
$sValue = mb_substr($sValue, 0, $iMaxSize - mb_strlen($sMessage)).$sMessage;
}
@@ -820,24 +818,6 @@ abstract class DBObject implements iDisplay
$oKPI->ComputeStatsForExtension($this, 'AfterDelete');
}
/**
* @param string $sAttCode
* @param string $sValue
*
* @return bool
* @throws \Exception
*
* @Since 3.2.2
*/
public function StringFitsInField(string $sAttCode, string $sValue): bool
{
$oAttDef = MetaModel::GetAttributeDef(get_class($this), $sAttCode);
$iMaxSize = $oAttDef->GetMaxSize();
$sLength = mb_strlen($sValue);
return !($iMaxSize && ($sLength > $iMaxSize));
}
/**
* Compute (and optionally start) the StopWatches deadlines
*
@@ -6994,28 +6974,5 @@ abstract class DBObject implements iDisplay
{
return array_key_exists($sSection, $this->aContext);
}
/**
* @param string $sAttCode
*
* @return void
* @throws CoreException
* @throws OQLException
* @throws Exception
*/
private function UpdateDependentComputedAttributes(string $sAttCode): void
{
foreach (MetaModel::GetDependentAttributes(get_class($this), $sAttCode) as $sCode) {
$oAttDef = MetaModel::GetAttributeDef(get_class($this), $sCode);
if ($oAttDef->IsComputed()) {
$oExpression = Expression::FromOQL($oAttDef->GetParams()['expression']);
$value = $this->EvaluateExpression($oExpression);
$aAllowedValues = $oAttDef->GetAllowedValues();
if(is_null($aAllowedValues) || in_array($value, $aAllowedValues)) {
$this->_Set($sCode, $oAttDef->MakeRealValue($value, $this));
} ;
}
}
}
}

View File

@@ -25,6 +25,7 @@ use Combodo\iTop\Application\WebPage\iTopPDF;
use Combodo\iTop\Application\WebPage\PDFPage;
use Combodo\iTop\Application\WebPage\WebPage;
use Combodo\iTop\Renderer\BlockRenderer;
use Combodo\iTop\Service\Router\Router;
/**
* Special kind of Graph for producing some nice output
@@ -1470,6 +1471,7 @@ class DisplayableGraph extends SimpleGraph
try {
$this->InitFromGraphviz();
$sExportAsPdfURL = utils::GetAbsoluteUrlAppRoot().'pages/ajax.render.php?operation=relation_pdf&relation='.$sRelation.'&direction='.($this->bDirectionDown ? 'down' : 'up');
$sExportAsPdfURL2 = Router::GetInstance()->GenerateUrl('export.choose_global_params', ['format' => 'pdf']);
$sContext = $oAppContext->GetForLink();
$sDrillDownURL = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=details&class=%1$s&id=%2$s&'.$sContext;
$sExportAsDocumentURL = utils::GetAbsoluteUrlAppRoot().'pages/ajax.render.php?operation=relation_attachment&relation='.$sRelation.'&direction='.($this->bDirectionDown ? 'down' : 'up');
@@ -1495,7 +1497,8 @@ class DisplayableGraph extends SimpleGraph
'sources' => ($this->bDirectionDown ? $this->aSourceObjects : $this->aSinkObjects),
'excluded' => $aExcludedByClass,
'grouping_threshold' => $iGroupingThreshold,
'export_as_pdf' => array('url' => $sExportAsPdfURL, 'label' => Dict::S('UI:Relation:ExportAsPDF')),
'export_as_pdf' => array('url' => $sExportAsPdfURL, 'label' => Dict::S('UI:Relation:ExportAsPDF')),
'export_as_bob' => array('url' => $sExportAsPdfURL2, 'label' => Dict::S('UI:Relation:ExportAsBob')),
'transaction_id' => utils::GetNewTransactionId(),
'export_as_attachment' => array('url' => $sExportAsDocumentURL, 'label' => Dict::S('UI:Relation:ExportAsAttachment'), 'obj_class' => $sObjClass, 'obj_key' => $iObjKey),
'drill_down' => array('url' => $sDrillDownURL, 'label' => Dict::S('UI:Relation:DrillDown')),

View File

@@ -2661,7 +2661,7 @@ abstract class MetaModel
*/
public static function GetAttributeFlags($sClass, $sState, $sAttCode)
{
$iFlags = 0;
$iFlags = 0; // By default (if no life cycle) no flag at all
if (self::HasLifecycle($sClass)) {
$aStates = MetaModel::EnumStates($sClass);
if (!array_key_exists($sState, $aStates)) {

View File

@@ -133,6 +133,7 @@ if (!defined('PORTAL_ID'))
// Env. vars to be used in templates and others
$_ENV['COMBODO_CURRENT_ENVIRONMENT'] = utils::GetCurrentEnvironment();
$_ENV['COMBODO_APPROOT'] = APPROOT;
$_ENV['COMBODO_ABSOLUTE_URL'] = utils::GetAbsoluteUrlAppRoot();
$_ENV['COMBODO_CONF_APP_ICON_URL'] = MetaModel::GetConfig()->Get('app_icon_url');
$_ENV['COMBODO_MODULES_ABSOLUTE_URL'] = utils::GetAbsoluteUrlModulesRoot();

View File

@@ -1,5 +1,7 @@
twig:
default_path: '%combodo.modules.absolute_path%'
paths:
'%combodo.approot%images/': ~
debug: '%kernel.debug%'
strict_variables: '%kernel.debug%'

View File

@@ -0,0 +1,21 @@
# Copyright (C) 2010-2024 Combodo SAS
#
# This file is part of iTop.
#
# iTop is free software; you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# iTop is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with iTop. If not, see <http://www.gnu.org/licenses/>
p_preferences_set_preference:
path: '/preferences/setPreference'
defaults:
_controller: 'Combodo\iTop\Portal\Controller\PreferencesController::SetPreferenceAction'

View File

@@ -27,6 +27,7 @@ parameters:
# Used in templates
combodo.current_environment: '%env(string:COMBODO_CURRENT_ENVIRONMENT)%'
combodo.approot: '%env(string:COMBODO_APPROOT)%'
combodo.absolute_url: '%env(string:COMBODO_ABSOLUTE_URL)%'
combodo.conf.app_icon_url: '%env(string:COMBODO_CONF_APP_ICON_URL)%'
combodo.modules.absolute_url: '%env(string:COMBODO_MODULES_ABSOLUTE_URL)%'

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1 @@
@import '../../../../../css/common/main.scss';
@import "utils/all";
@import "pages/base";
@import "themes/all";
@import "themes/all";

View File

@@ -5,4 +5,5 @@
@import "modal";
@import "form";
@import "input";
@import "caselog";
@import "caselog";
@import "progress-bar";

View File

@@ -1,298 +1,21 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-button--padding-y: 6px !default;
$ipb-button--padding-x: 9px !default;
$ipb-button-colors: (
'' : (
'primary': (
'': (
$common-color-blue-800,
$common-color-white-100,
$common-color-blue-900
),
':hover': (
$common-color-blue-700,
$common-color-white-100,
$common-color-blue-800
),
':active': (
$common-color-blue-900,
$common-color-white-100,
$common-color-blue-950
),
':disabled': (
$common-color-blue-200,
$common-color-blue-600,
$common-color-blue-300
),
),
'default': (
'': (
$common-color-white-100,
$common-color-grey-800,
$common-color-grey-600
),
':hover': (
$common-color-grey-100,
$common-color-grey-900,
$common-color-grey-700
),
':active': (
$common-color-grey-200,
$common-color-grey-900,
$common-color-grey-700
),
':disabled': (
$common-color-grey-200,
$common-color-grey-700,
$common-color-grey-300
),
),
'success': (
'': (
$common-color-success-900,
$common-color-white-100,
$common-color-success-900
),
':hover': (
$common-color-success-800,
$common-color-green-100,
$common-color-success-900
),
':active': (
$common-color-success-950,
$common-color-green-100,
$common-color-success-950
),
':disabled': (
$common-color-grey-200,
$common-color-grey-700,
$common-color-grey-300
),
),
'warning': (
'': (
$common-color-warning-700,
$common-color-white-100,
$common-color-warning-900
),
':hover': (
$common-color-warning-600,
$common-color-warning-100,
$common-color-warning-700
),
':active': (
$common-color-warning-800,
$common-color-warning-100,
$common-color-warning-900
),
':disabled': (
$common-color-grey-200,
$common-color-grey-700,
$common-color-grey-300
),
),
'danger': (
'': (
$common-color-danger-800,
$common-color-white-100,
$common-color-danger-900
),
':hover': (
$common-color-danger-700,
$common-color-danger-100,
$common-color-danger-800
),
':active': (
$common-color-danger-900,
$common-color-danger-100,
$common-color-danger-950
),
':disabled': (
$common-color-grey-200,
$common-color-grey-700,
$common-color-grey-300
),
),
'info': (
'': (
$common-color-information-800,
$common-color-white-100,
$common-color-information-900
),
':hover': (
$common-color-information-700,
$common-color-information-100,
$common-color-information-800
),
':active': (
$common-color-information-900,
$common-color-information-100,
$common-color-information-950
),
':disabled': (
$common-color-grey-200,
$common-color-grey-700,
$common-color-grey-300
),
),
),
'alternative' : (
'primary': (
'': (
$common-color-transparent,
$common-color-blue-800,
$common-color-transparent
),
':hover': (
$common-color-blue-100,
$common-color-blue-900,
$common-color-blue-100
),
':active': (
$common-color-blue-200,
$common-color-blue-900,
$common-color-blue-200
),
':disabled': (
$common-color-blue-200,
$common-color-blue-600,
$common-color-blue-300
),
),
'default': (
'': (
$common-color-transparent,
$common-color-grey-800,
$common-color-transparent
),
':hover': (
$common-color-grey-200,
$common-color-grey-900,
$common-color-grey-200
),
':active': (
$common-color-grey-300,
$common-color-grey-900,
$common-color-grey-300
),
':disabled': (
$common-color-transparent,
$common-color-grey-500,
$common-color-transparent
),
),
'success': (
'': (
$common-color-transparent,
$common-color-success-900,
$common-color-transparent
),
':hover': (
$common-color-success-100,
$common-color-success-900,
$common-color-success-100
),
':active': (
$common-color-success-200,
$common-color-success-900,
$common-color-success-200
),
':disabled': (
$common-color-grey-200,
$common-color-grey-700,
$common-color-grey-300
),
),
'warning': (
'': (
$common-color-transparent,
$common-color-warning-800,
$common-color-transparent
),
':hover': (
$common-color-warning-100,
$common-color-warning-900,
$common-color-warning-100
),
':active': (
$common-color-warning-200,
$common-color-warning-900,
$common-color-warning-200
),
':disabled': (
$common-color-grey-200,
$common-color-grey-700,
$common-color-grey-300
),
),
'danger': (
'': (
$common-color-transparent,
$common-color-danger-800,
$common-color-transparent
),
':hover': (
$common-color-danger-100,
$common-color-danger-800,
$common-color-danger-100
),
':active': (
$common-color-danger-200,
$common-color-danger-800,
$common-color-danger-200
),
':disabled': (
$common-color-grey-200,
$common-color-grey-700,
$common-color-grey-300
),
),
'info': (
'': (
$common-color-transparent,
$common-color-information-800,
$common-color-transparent
),
':hover': (
$common-color-information-100,
$common-color-information-800,
$common-color-information-100
),
':active': (
$common-color-information-200,
$common-color-information-800,
$common-color-information-200
),
':disabled': (
$common-color-grey-200,
$common-color-grey-700,
$common-color-grey-300
),
),
),
) !default;
.ipb-button, .btn{
--ibp-button-border-radius-top-left: 4px;
--ibp-button-border-radius-top-right: 4px;
--ibp-button-border-radius-bottom-right: 4px;
--ibp-button-border-radius-bottom-left: 4px;
background-color: $common-color-white-100 !important;
border-radius: var(--ibp-button-border-radius-top-left) var(--ibp-button-border-radius-top-right) var(--ibp-button-border-radius-bottom-right) var(--ibp-button-border-radius-bottom-left);
border: solid 1px $common-color-blue-700;
padding: $ipb-button--padding-y $ipb-button--padding-x;
color: $common-color-blue-800 !important;
cursor: pointer;
@each $sType, $aColors in $ipb-button-colors {
@each $sColor, $sPseudoClasses in $aColors {
@each $sPseudoClass, $sAttributes in $sPseudoClasses {
&.ipb-is-#{$sColor}#{if($sType != '', ".ipb-is-#{$sType}", '')}#{$sPseudoClass}, &.btn-#{$sColor}#{if($sType != '', ".#{$sType}", '')}#{$sPseudoClass} {
background-color: nth($sAttributes, 1) !important;
color: nth($sAttributes, 2) !important;
border-color: nth($sAttributes, 3) !important;
}
}
}
}
@extend %common-font-size-150;
}

View File

@@ -1,27 +1,13 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
$messaging-self-primary-color: $common-color-blue-100 !default;
$messaging-self-secondary-color: $common-color-blue-800 !default;
$messaging-1st-peer-primary-color: $white !default;
$messaging-1st-peer-secondary-color: $common-color-grey-400 !default;
$messaging-2nd-peer-primary-color: $white !default;
$messaging-2nd-peer-secondary-color: $common-color-grey-400 !default;
$messaging-3rd-peer-primary-color: $white !default;
$messaging-3rd-peer-secondary-color: $common-color-grey-300 !default;
$messaging-4th-peer-primary-color: $white !default;
$messaging-4th-peer-secondary-color: $common-color-grey-400 !default;
$messaging-5th-peer-primary-color: $white !default;
$messaging-5th-peer-secondary-color: $common-color-grey-400 !default;
$ipb-caselog-thread--border: 1px solid $common-color-grey-400 !default;
/* SCSS variables (can be overloaded) */
$ipb-caselog-thread--border-top: none !default;
$ipb-caselog-thread--header--padding: 12px !default;
$ipb-caselog-thread--header--background-color: $common-color-white-100 !default;
$ipb-caselog-thread--header--span--color: $common-color-grey-800 !default;
$ipb-caselog-thread--header-toggler--color: inherit !default;
$ipb-caselog-thread--header-toggler--hover--active-focus--color: inherit !default;
$ipb-caselog-thread--header-toggler--not-first-child--margin: 0 0.4em 0 0.2em !default;
@@ -30,33 +16,24 @@ $ipb-caselog-thread--header-info--first-child--margin-left: 0 !default;
$ipb-caselog-thread--header-info--span--span--margin-left: $ipb-caselog-thread--header-info--span--margin-left !default;
$ipb-caselog-thread--content--padding: 12px !default;
$ipb-caselog-thread--content--background-color: $common-color-grey-100 !default;
$ipb-caselog-thread--date--margin-bottom: 10px !default;
$ipb-caselog-thread--date--color: $common-color-grey-800 !default;
$ipb-caselog-thread--block--min-height: 40px !default;
$ipb-caselog-thread--block--margin-bottom: 15px !default;
$ipb-caselog-thread--block--last-child--margin-bottom: 0 !default;
$ipb-caselog-thread--block-medallion--block-entries--border: 1px solid $common-color-grey-200 !default;
$ipb-caselog-thread--block-medallion--width: 40px !default;
$ipb-caselog-thread--block-medallion--height: $ipb-caselog-thread--block-medallion--width !default;
$ipb-caselog-thread--block-medallion--color: $common-color-blue-800 !default;
$ipb-caselog-thread--block-medallion--background-color: $common-color-blue-100 !default;
$ipb-caselog-thread--block-user--margin-left: 54px !default;
$ipb-caselog-thread--block-user--color: $ipb-caselog-thread--block-medallion--color !default;
$ipb-caselog-thread--block-entries--margin-x: 60px !default;
$ipb-caselog-thread--block-entries--border-radius: $common-border-radius-500 !default;
$ipb-caselog-thread--block-entries--background-color: $ipb-caselog-thread--block-medallion--background-color !default;
$ipb-caselog-thread--block-entries--color: $ipb-caselog-thread--block-medallion--color !default;
$ipb-caselog-thread--block-entry--padding-y: 8px !default;
$ipb-caselog-thread--block-entry--padding-x: 10px !default;
$ipb-caselog-thread--block-entry--border-bottom: 1px solid $common-color-grey-200 !default;
$ipb-caselog-thread--block-entry-content--height: 0px !default;
@@ -68,24 +45,10 @@ $ipb-caselog-thread--block-entry-toggler--top: 2px !default;
$ipb-caselog-thread--block-entry-toggler--right: 5px !default;
$ipb-caselog-thread--block-entry-toggler--padding-y: 2px !default;
$ipb-caselog-thread--block-entry-toggler--padding-x: 5px !default;
$ipb-caselog-thread--block-entry-toggler--background-color: $ipb-caselog-thread--block-medallion--background-color !default;
$ipb-caselog-thread--block-me--block-user--margin-right: 54px !default;
$ipb-caselog-thread--block-me--block-entries--margin-left: initial !default;
$ipb-caselog-thread--block-me--block-entries--margin-right: $ipb-caselog-thread--block-entries--margin-x !default;
$ipb-caselog-thread--block-me--block-entry--first--content--border-left-color: transparent !default;
$ipb-caselog-thread--block-me--block-entry--first--content--border-right-color: $ipb-caselog-thread--block-medallion--background-color !default;
$ipb-caselog-thread--block-colors: (
1: ($common-color-white-100, $common-color-grey-700),
2: ($common-color-white-100, $common-color-grey-700),
3: ($common-color-white-100, $common-color-grey-700),
4: ($common-color-white-100, $common-color-grey-700),
5: ($common-color-white-100, $common-color-grey-700)
);
$messaging-block-medallion-size: 40px !default;
$messaging-block-entries-margin-x: 60px !default;
@@ -93,28 +56,22 @@ $messaging-block-entries-margin-x: 60px !default;
.ipb-caselog-thread {
position: relative;
border: $ipb-caselog-thread--border;
border-top: $ipb-caselog-thread--border-top;
}
.ipb-caselog-thread--header{
padding: $ipb-caselog-thread--header--padding;
background-color: $ipb-caselog-thread--header--background-color;
border-bottom: none;
@extend %common-font-size-100;
span{
color: $ipb-caselog-thread--header--span--color;
}
}
.ipb-caselog-thread--header-toggler{
cursor: pointer;
color: $ipb-caselog-thread--header-toggler--color;
text-decoration: none;
&:hover,
&:active,
&:focus{
color: $ipb-caselog-thread--header-toggler--hover--active-focus--color;
text-decoration: none;
}
@@ -142,13 +99,11 @@ $messaging-block-entries-margin-x: 60px !default;
.ipb-caselog-thread--content{
padding: $ipb-caselog-thread--content--padding;
background-color: $ipb-caselog-thread--content--background-color;
}
.ipb-caselog-thread--date{
margin-bottom: $ipb-caselog-thread--date--margin-bottom;
text-align: center;
color: $ipb-caselog-thread--date--color;
@extend %common-font-size-150;
&:first-child{
@@ -165,10 +120,7 @@ $messaging-block-entries-margin-x: 60px !default;
margin-bottom: $ipb-caselog-thread--block--last-child--margin-bottom;
}
}
.ipb-caselog-thread--block-medallion,
.ipb-caselog-thread--block-entries{
border: $ipb-caselog-thread--block-medallion--block-entries--border;
}
.ipb-caselog-thread--block-medallion{
position: absolute;
@@ -177,13 +129,11 @@ $messaging-block-entries-margin-x: 60px !default;
width: $ipb-caselog-thread--block-medallion--width;
height: $ipb-caselog-thread--block-medallion--height;
line-height: $ipb-caselog-thread--block-medallion--height;
color: $ipb-caselog-thread--block-medallion--color; /* .ipb-caselog-thread--block-entries color */
text-align: center;
@extend %common-font-size-250;
background-size: 100%; /* Full size is necessary for images with filled background to fit nicely in the medallion, even if this means that images with a transparent background might appear cropped */
background-position: center center;
background-color: $ipb-caselog-thread--block-medallion--background-color; /* .ipb-caselog-thread--block-entries background-color */
background-repeat: no-repeat;
border-radius: 100%;
}
@@ -191,7 +141,6 @@ $messaging-block-entries-margin-x: 60px !default;
.ipb-caselog-thread--block-user{
display: none;
margin-left: $ipb-caselog-thread--block-user--margin-left;
color: $ipb-caselog-thread--block-user--color; /* .ipb-caselog-thread--block-entries background-color */
@extend %common-font-ral-bol-100;
}
@@ -202,14 +151,11 @@ $messaging-block-entries-margin-x: 60px !default;
margin-left: $ipb-caselog-thread--block-entries--margin-x;
max-width: calc(100% - #{$ipb-caselog-thread--block-entries--margin-x});
border-radius: $ipb-caselog-thread--block-entries--border-radius;
background-color: $ipb-caselog-thread--block-entries--background-color;
color: $ipb-caselog-thread--block-entries--color;
}
.ipb-caselog-thread--block-entry{
position: relative;
padding: $ipb-caselog-thread--block-entry--padding-y $ipb-caselog-thread--block-entry--padding-x;
border-bottom: $ipb-caselog-thread--block-entry--border-bottom;
img{
max-width: 100%;
@@ -264,9 +210,13 @@ $messaging-block-entries-margin-x: 60px !default;
padding: $ipb-caselog-thread--block-entry-toggler--padding-y $ipb-caselog-thread--block-entry-toggler--padding-x;
opacity: 0;
cursor: pointer;
background-color: $ipb-caselog-thread--block-entry-toggler--background-color; /* .ipb-caselog-thread--block-entries background-color */
transition: all 0.2s linear;
}
.ipb-caselog-thread--block-entry:not(.closed):hover{
.ipb-caselog-thread--block-entry-toggler{
opacity: 1;
}
}
.ipb-caselog-thread--block-me{
text-align: right;
@@ -297,166 +247,9 @@ $messaging-block-entries-margin-x: 60px !default;
.ipb-caselog-thread--block-entry-content:before{
left: initial;
right: -15px;
border-right-color: transparent;
border-left-color: $ipb-caselog-thread--block-me--block-entry--first--content--border-right-color; /* .ipb-caselog-thread--block-entries background-color */
}
}
}
}
.ipb-caselog-thread--block-color-1{
.ipb-caselog-thread--block-medallion{
color: $messaging-1st-peer-secondary-color;
background-color: $messaging-1st-peer-primary-color;
}
.ipb-caselog-thread--block-user{
color: $messaging-1st-peer-primary-color;
}
.ipb-caselog-thread--block-entries{
color: $messaging-1st-peer-secondary-color;
background-color: $messaging-1st-peer-primary-color;
.ipb-caselog-thread--block-entry{
.ipb-caselog-thread--block-entry-toggler{
background-color: $messaging-1st-peer-primary-color;
}
}
.ipb-caselog-thread--block-entry:first-child{
.ipb-caselog-thread--block-entry-content:before{
border-top-color: $messaging-1st-peer-primary-color;
border-right-color: $messaging-1st-peer-primary-color;
}
}
}
}
.ipb-caselog-thread--block-color-2{
.ipb-caselog-thread--block-medallion{
color: $messaging-2nd-peer-secondary-color;
background-color: $messaging-2nd-peer-primary-color;
}
.ipb-caselog-thread--block-user{
color: $messaging-2nd-peer-primary-color;
}
.ipb-caselog-thread--block-entries{
color: $messaging-2nd-peer-secondary-color;
background-color: $messaging-2nd-peer-primary-color;
.ipb-caselog-thread--block-entry{
.ipb-caselog-thread--block-entry-toggler{
background-color: $messaging-2nd-peer-primary-color;
}
}
.ipb-caselog-thread--block-entry:first-child{
.ipb-caselog-thread--block-entry-content:before{
border-top-color: $messaging-2nd-peer-primary-color;
border-right-color: $messaging-2nd-peer-primary-color;
}
}
}
}
.ipb-caselog-thread--block-color-3{
.ipb-caselog-thread--block-medallion{
color: $messaging-3rd-peer-secondary-color;
background-color: $messaging-3rd-peer-primary-color;
}
.ipb-caselog-thread--block-user{
color: $messaging-3rd-peer-primary-color;
}
.ipb-caselog-thread--block-entries{
color: $messaging-3rd-peer-secondary-color;
background-color: $messaging-3rd-peer-primary-color;
.ipb-caselog-thread--block-entry{
.ipb-caselog-thread--block-entry-toggler{
background-color: $messaging-3rd-peer-primary-color;
}
}
.ipb-caselog-thread--block-entry:first-child{
.ipb-caselog-thread--block-entry-content:before{
border-top-color: $messaging-3rd-peer-primary-color;
border-right-color: $messaging-3rd-peer-primary-color;
}
}
}
}
.ipb-caselog-thread--block-color-4{
.ipb-caselog-thread--block-medallion{
color: $messaging-4th-peer-secondary-color;
background-color: $messaging-4th-peer-primary-color;
}
.ipb-caselog-thread--block-user{
color: $messaging-4th-peer-primary-color;
}
.ipb-caselog-thread--block-entries{
color: $messaging-4th-peer-secondary-color;
background-color: $messaging-4th-peer-primary-color;
.ipb-caselog-thread--block-entry{
.ipb-caselog-thread--block-entry-toggler{
background-color: $messaging-4th-peer-primary-color;
}
}
.ipb-caselog-thread--block-entry:first-child{
.ipb-caselog-thread--block-entry-content:before{
border-top-color: $messaging-4th-peer-primary-color;
border-right-color: $messaging-4th-peer-primary-color;
}
}
}
}
.ipb-caselog-thread--block-color-5{
.ipb-caselog-thread--block-medallion{
color: $messaging-5th-peer-secondary-color;
background-color: $messaging-5th-peer-primary-color;
}
.ipb-caselog-thread--block-user{
color: $messaging-5th-peer-primary-color;
}
.ipb-caselog-thread--block-entries{
color: $messaging-5th-peer-secondary-color;
background-color: $messaging-5th-peer-primary-color;
.ipb-caselog-thread--block-entry{
.ipb-caselog-thread--block-entry-toggler{
background-color: $messaging-5th-peer-primary-color;
}
}
.ipb-caselog-thread--block-entry:first-child{
.ipb-caselog-thread--block-entry-content:before{
border-top-color: $messaging-5th-peer-primary-color;
border-right-color: $messaging-5th-peer-primary-color;
}
}
}
}
@each $index, $colors in $ipb-caselog-thread--block-colors {
.ipb-caselog-thread--block-color-#{$index} {
.ipb-caselog-thread--block-medallion {
color: nth($colors, 2);
background-color: nth($colors, 1);
}
.ipb-caselog-thread--block-user {
color: nth($colors, 1);
}
.ipb-caselog-thread--block-entries {
color: nth($colors, 2);
background-color: nth($colors, 1);
.ipb-caselog-thread--block-entry {
.ipb-caselog-thread--block-entry-toggler {
background-color: nth($colors, 1);
}
}
.ipb-caselog-thread--block-entry:first-child {
.ipb-caselog-thread--block-entry-content:before {
border-top-color: nth($colors, 1);
border-right-color: nth($colors, 1);
}
}
}
}
}

View File

@@ -1,16 +1,14 @@
$ipb-dropdown--background-color: $ipb-color-white-100 !default;
$ipb-dropdown--border: 1px solid $ipb-color-grey-300 !default;
$ipb-dropdown--border-radius: $common-border-radius-400 !default;
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
$ipb-dropdown--li--background-color: $ipb-dropdown--background-color !default;
/* SCSS variables (can be overloaded) */
$ipb-dropdown--border-radius: $common-border-radius-400 !default;
$ipb-dropdown--a--padding-y: $common-spacing-400 !default;
$ipb-dropdown--a--padding-x: $common-spacing-500 !default;
$ipb-dropdown--a--border-radius: $ipb-dropdown--border-radius !default;
$ipb-dropdown--a--color: $ipb-color-grey-900 !default;
$ipb-dropdown--li--hover--background-color: $ipb-color-grey-200 !default;
$ipb-dropdown--li--hover--a--color: $ipb-color-grey-800 !default;
$ipb-dropdown--icon--margin-right: $common-spacing-300 !default;
@@ -18,12 +16,9 @@ ipb-dropdown {
display: none;
position: absolute;
width: max-content;
background: $ipb-dropdown--background-color;
border: $ipb-dropdown--border;
border-radius: $ipb-dropdown--border-radius;
list-style: none;
li {
background-color: $ipb-dropdown--li--background-color;
a {
display: inline-block;
width: 100%;
@@ -31,13 +26,6 @@ ipb-dropdown {
border-radius: $ipb-dropdown--a--border-radius;
cursor: pointer;
text-decoration: none;
color: $ipb-dropdown--a--color;
}
&:hover {
background: $ipb-dropdown--li--hover--background-color;
a {
color: $ipb-dropdown--li--hover--a--color;
}
}
}
}

View File

@@ -1,7 +1,11 @@
$ipb--fieldset--background-color: $common-color-grey-50 !default;
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb--fieldset--padding-y: 10px !default;
$ipb--fieldset--padding-x: 7px !default;
$ipb--fieldset--border: 1px solid $common-color-grey-200 !default;
$ipb--fieldset--border-radius: $common-border-radius-500 !default;
$ipb--fieldset--legend--padding-y: $common-spacing-0 !default;
@@ -10,19 +14,12 @@ $ipb--fieldset--legend--padding-x: 13px !default;
$ipb-field--has-tooltip-or-is-mandatory--vertical-align: top !default;
$ipb-field--has-tooltip-or-is-mandatory--left: $common-spacing-200 !default;
$ipb-field--has-tooltip--content: "\f05a" !default;
$ipb-field--has-tooltip--color: $common-color-grey-700 !default;
$ipb-field--is-mandatory--content: "\f069" !default;
$ipb-field--is-mandatory--color: $common-color-orange-700 !default;
$ipb-field--is-mandatory--font-size: 0.6rem !default;
.form_fields {
fieldset {
background-color: $common-color-grey-50;
padding: $ipb--fieldset--padding-y $ipb--fieldset--padding-x;
border-radius: $ipb--fieldset--border-radius;
border: $ipb--fieldset--border;
legend {
padding: $ipb--fieldset--legend--padding-y $ipb--fieldset--legend--padding-x;
}
@@ -38,14 +35,10 @@ $ipb-field--is-mandatory--font-size: 0.6rem !default;
}
.form_field_label > .control-label[data-tooltip-instantiated="true"]:after {
content: $ipb-field--has-tooltip--content;
color: $ipb-field--has-tooltip--color;
cursor: pointer;
@extend %common-font-size-50;
}
.form_field .form_mandatory .control-label:after{
content: $ipb-field--is-mandatory--content;
color: $ipb-field--is-mandatory--color;
font-size: $common-font-size-20;
};

View File

@@ -1,18 +1,37 @@
$ipb-form-control--color: $common-color-grey-800 !default;
$ipb-form-control--border-radius: $common-border-radius-500 !default;
$ipb-form-control--box-shadow: none !default;
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-form-control--border-radius: $common-border-radius-300 !default;
$ipb-form-control--box-shadow: none !default;
$ipb-form-control--input-group-addon--border-top-right-radius: 0 !default;
$ipb-form-control--input-group-addon--border-bottom-right-radius: 0 !default;
$ipb-input-group-addon--border-radius: $ipb-form-control--border-radius !default;
$ipb-input-group-addon--form-control--border-top-left-radius: 0 !default;
$ipb-input-group-addon--form-control--border-bottom-left-radius: 0 !default;
$ipb-form-control--is-focused--border-color: $common-color-primary-700 !default;
$ipb-form-control--is-focused--box-shadow: none !default;
.form-control {
color: $ipb-form-control--color;
border-radius: $common-border-radius-500 !important;
border-radius: $ipb-form-control--border-radius;
-webkit-box-shadow: $ipb-form-control--box-shadow;
box-shadow: $ipb-form-control--box-shadow;
&:focus {
border-color: $ipb-form-control--is-focused--border-color;
box-shadow: $ipb-form-control--is-focused--box-shadow;
-webkit-box-shadow: $ipb-form-control--is-focused--box-shadow;
}
}
.form-control:has(+ .input-group-addon) {
border-top-right-radius: $ipb-form-control--input-group-addon--border-top-right-radius;
border-bottom-right-radius: $ipb-form-control--input-group-addon--border-bottom-right-radius;
}
.form-control + .input-group-addon {
border-top-left-radius: $ipb-input-group-addon--form-control--border-top-left-radius;
border-bottom-left-radius: $ipb-input-group-addon--form-control--border-bottom-left-radius;
}

View File

@@ -1,36 +1,28 @@
/*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables */
/* SCSS variables (can be overloaded) */
$ipb-modal--max-height: 90vh !default;
$ipb-modal--max-width: 90vw !default;
$ipb-modal--border-radius: $common-border-radius-500 !default;
$ipb-modal--header--background-color: $common-color-white-100 !default;
$ipb-modal--header--color: $common-color-grey-900 !default;
$ipb-modal--header--padding: $common-spacing-500 !default;
$ipb-modal--header--border-radius: $ipb-modal--border-radius $ipb-modal--border-radius 0 0 !default;
$ipb-modal--header--close--color: $common-color-grey-900 !default;
$ipb-modal--header--close--opacity: 1 !default;
$ipb-modal--header--close--hover--color: $common-color-grey-700 !default;
$ipb-modal--footer-padding: $ipb-modal--header--padding !default;
$ipb-modal--backdrop--opacity: 0.6 !default;
$ipb-modal--backdrop--background-color: $common-color-blue-grey-800 !default;
$ipb-modal--backdrop--backdrop-filter: blur(2px) !default;
$ipb-modal--content--border-radius: $ipb-modal--border-radius !default;
$ipb-modal--content--border: 1px solid $common-color-grey-400 !default;
$ipb-modal--title--color: $ipb-modal--header--color !default;
$ipb-modal--title--to-clipboard--margin: $common-spacing-200 !default;
$ipb-modal--title--span--margin-left: 5px !default;
$ipb-modal--title--span--separator--margin-right: $common-spacing-200 !default;
$ipb-modal--title--span--separator--width: $common-size-100 !default;
$ipb-modal--title--span--separator--height: $ipb-modal--title--span--separator--width !default;
$ipb-modal--title--span--separator--margin-right: $common-spacing-200 !default;
$ipb-modal--title--span--separator--margin-top: calc(-1 * #{$ipb-modal--title--span--separator--height} / 2) !default;
$ipb-modal--title--span--separator--border-radius: $common-border-radius-full !default;
$ipb-modal--title--span--separator--background-color: $common-color-grey-800 !default;
@@ -40,40 +32,28 @@ $ipb-modal--title--span--separator--background-color: $common-color-grey-800 !de
max-height: $ipb-modal--max-height !important;
max-width: $ipb-modal--max-width !important;
border-radius: $ipb-modal--border-radius;
.modal-header {
background-color: $ipb-modal--header--background-color;
color: $ipb-modal--header--color;
}
}
.modal-backdrop.in {
opacity: $ipb-modal--backdrop--opacity;
background-color: $ipb-modal--backdrop--background-color;
backdrop-filter: $ipb-modal--backdrop--backdrop-filter;
}
.modal-content {
border-radius: $ipb-modal--content--border-radius !important;
border: $ipb-modal--content--border;
box-shadow: none !important;
-webkit-box-shadow: none !important;
}
.modal-header {
padding: $ipb-modal--header--padding;
border-radius:$ipb-modal--header--border-radius !important;
.close {
color: $ipb-modal--header--close--color;
opacity: $ipb-modal--header--close--opacity;
@extend %common-font-size-400;
&:hover {
color: $ipb-modal--header--close--hover--color;
}
}
}
.modal-footer {
padding: $ipb-modal--footer-padding;
}
.modal-title {
color: $ipb-modal--title--color !important;
display: flex;
align-items: center;
@@ -84,10 +64,10 @@ $ipb-modal--title--span--separator--background-color: $common-color-grey-800 !de
display: inline-block;
vertical-align: middle;
margin-right: $ipb-modal--title--span--separator--margin-right;
margin-top: $ipb-modal--title--span--separator--margin-top;
width: $ipb-modal--title--span--separator--width;
height: $ipb-modal--title--span--separator--height;
border-radius: $ipb-modal--title--span--separator--border-radius;
background-color: $ipb-modal--title--span--separator--background-color;
}
}
.url-to-clipboard.url-to-clipboard-icon {

View File

@@ -1,8 +1,12 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-panel--border-radius: $common-border-radius-300!default;
.ipb-panel {
border: 1px solid $common-color-grey-400;
border-radius: 0 $common-border-radius-500 $common-border-radius-500 $common-border-radius-500;
box-shadow: none;
-webkit-box-shadow: none;

View File

@@ -0,0 +1,19 @@
$ipb-progress--height: $common-size-350 !default;
$ipb-progress--border-radius: $common-border-radius-500 !default;
$ipb-progress--bar--line-height: $ipb-progress--height !default;
$ipb-progress--bar--border-radius: $ipb-progress--border-radius !default;
.ipb-progress, .progress {
height: $ipb-progress--height;
border-radius: $ipb-progress--border-radius;
}
.ipb-progress--bar, .progress-bar {
background-color: $ipb-color-primary-600;
color: #ffffff;
line-height: $ipb-progress--bar--line-height;
border-radius: $ipb-progress--bar--border-radius;
@extend %common-font-ral-med-150;
}

View File

@@ -1,23 +1,29 @@
@import "../../../../../../node_modules/bulma-scss/utilities/mixins";
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
@import "../node_modules/bulma-scss/utilities/mixins";
/* SCSS variables */
$ipb-tile--width: 450px !default;
$ipb-tile--min-width: 150px !default;
$ipb-tile--padding: $common-spacing-500 !default;
$ipb-tile--margin: $common-spacing-400 !default;
$ipb-tile--border-color: $common-color-grey-200 !default;
$ipb-tile--border-width: 1px !default;
$ipb-tile--border-radius: $common-border-radius-500 !default;
$ipb-tile--background-color: $common-color-white-100 !default;
$ipb-tile--decoration--size: 44px !default;
$ipb-tile--decoration--padding: $common-spacing-400 !default;
$ipb-tile--decoration--hover--background: common-adjust-alpha($common-color-blue-700, .1) !default;
$ipb-tile--decoration--background: common-adjust-lightness($ipb-tile--decoration--hover--background, 38%) !default;
$ipb-tile--decoration--icon--color: $common-color-blue-700 !default;
$ipb-tile--decoration--icon--font-size: $common-font-size-250 !default;
$ipb-tile--title--color: $common-base-variable--text-color !default;
$ipb-tile--title--font-size: $common-font-size-400 !default;
$ipb-tile--description--color: $common-base-variable--text-color !default;
$ipb-tile--manage-brick--chart--margin-top: $common-spacing-500 !default;
$ipb-tile--manage-brick--badge--margin-top: $common-font-size-400 !default;
$ipb-tile--manage-brick--badge--count--padding: 0 $common-spacing-300 !default;
$ipb-tile--manage-brick--badge--count--font-size: $common-font-size-300 !default;
$ipb-tile--manage-brick--badge--label--font-size: $common-font-size-100 !default;
$ipb-tile--manage-brick--top-list--margin-top: $common-spacing-500 !default;
.ipb-tile{
position: relative;
@@ -26,15 +32,12 @@ $ipb-tile--description--color: $common-base-variable--text-color !default;
min-width: $ipb-tile--min-width;
margin: $ipb-tile--margin;
padding: $ipb-tile--padding;
background-color: $ipb-tile--background-color;
border: $ipb-tile--border-width solid $ipb-tile--border-color;
border-radius: $ipb-tile--border-radius;
white-space: normal;
flex-grow: 1;
&[data-role="navigation-trigger"] {
cursor: pointer;
@include ipb-heavy-animated-border;
}
}
@@ -68,7 +71,6 @@ $ipb-tile--description--color: $common-base-variable--text-color !default;
width: $ipb-tile--decoration--size;
height: $ipb-tile--decoration--size;
padding: $ipb-tile--decoration--padding;
background-color: $ipb-tile--decoration--background;
border-radius: $ipb-tile--border-radius;
text-align: center;
transition: background-color 1s ease;
@@ -81,15 +83,9 @@ $ipb-tile--description--color: $common-base-variable--text-color !default;
}
}
}
.ipb-tile:hover{
.ipb-tile--decoration{
background-color: $ipb-tile--decoration--hover--background;
}
}
.ipb-tile--decoration--icon {
&.icon {
color: $ipb-tile--decoration--icon--color;
font-size: $ipb-tile--decoration--icon--font-size;
}
@@ -102,7 +98,6 @@ $ipb-tile--description--color: $common-base-variable--text-color !default;
.ipb-tile--title{
flex-grow: 1;
color: $ipb-tile--title--color;
font-size: $ipb-tile--title--font-size;
font-weight: bold;
@include ipb-text-overflow-ellipsis;
@@ -126,8 +121,6 @@ $ipb-tile--description--color: $common-base-variable--text-color !default;
/* description */
.ipb-tile--description{
color: $ipb-tile--description--color;
@extend %common-font-ral-nor-150;
}
@@ -144,36 +137,19 @@ $ipb-tile--description--color: $common-base-variable--text-color !default;
/* ManageBrick tile display */
/****************************/
$ipb-tile--manage-brick--chart--margin-top: $common-spacing-500 !default;
$ipb-tile--manage-brick--badge--margin-top: $common-font-size-400 !default;
$ipb-tile--manage-brick--badge--count--padding: 0 $common-spacing-300 !default;
$ipb-tile--manage-brick--badge--count--font-size: $common-font-size-300 !default;
$ipb-tile--manage-brick--badge--label--font-size: $common-font-size-100 !default;
$ipb-tile--manage-brick--badge--hover--item--background: common-adjust-alpha($common-base-variable--text-color, .1) !default;
$ipb-tile--manage-brick--top-list--margin-top: $common-spacing-500 !default;
/* title */
.ipb-tile--manage .ipb-tile--title {
display: flex;
align-items: center;
> span:first-child {
@include ipb-text-overflow-ellipsis;
}
> span:nth-child(2) {
@include ipb-following-dot;
> .class-icon {
width: 20px;
margin-left: 5px;
vertical-align: baseline;
}
}
}
/* chart */
@@ -205,10 +181,6 @@ $ipb-tile--manage-brick--top-list--margin-top: $common-spacing-500 !default;
font-size: $ipb-tile--manage-brick--badge--label--font-size;
}
/* top list */
.ipb-tile--manage-brick--top-list {
}
/***********************/

View File

@@ -1,3 +1,4 @@
@import "navigation-menu";
@import "page";
@import "home";
@import "home";
@import "tabs";

View File

@@ -1,4 +1,7 @@
/* SCSS variables */
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
.ipb-home .ipb-page--main-wrapper:before{
content: '';
@@ -8,8 +11,6 @@
left: 0;
width: 100%;
height: 100%;
background-image: url("../img/backgrounds/dots-left-top.svg");
background-size: 30%;
background-position-y: top;
background-position-x: left;
background-repeat: no-repeat;
@@ -24,8 +25,6 @@
right: 0;
width: 100%;
height: 100%;
background-image: url("../img/backgrounds/dots-right-bottom.svg");
background-size: 30%;
background-position-y: bottom;
background-position-x: right;
background-repeat: no-repeat;

View File

@@ -1,7 +1,12 @@
@import "../../../../../../node_modules/bulma-scss/utilities/mixins";
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
@import "../node_modules/bulma-scss/utilities/mixins";
$ipb-navigation-menu--flex-column-gap: $common-spacing-300 !default;
$ipb-navigation-menu--background-color: $common-color-blue-grey-900 !default;
$ipb-navigation-menu--nav-vertical--width: 60px !default;
$ipb-navigation-menu--nav-vertical--is-expanded--width: 280px !default;
$ipb-navigation-menu--nav-horizontal--height: 56px !default;
@@ -14,16 +19,11 @@ $ipb-navigation-menu--menu-entry--wrapper--flex-column-gap: $common-spacing-500
$ipb-navigation-menu--menu-entry--size: 44px !default;
$ipb-navigation-menu--menu-entry--border-radius: $common-border-radius-500 !default;
$ipb-navigation-menu--menu-entry--padding: $common-spacing-300 !default;
$ipb-navigation-menu--menu-entry--active--icon--color: $common-color-orange-600 !default;
$ipb-navigation-menu--menu-entry--active--color: $common-color-grey-800 !default;
$ipb-navigation-menu--menu-entry--active--background-color: $common-color-white-100 !default;
$ipb-navigation-menu--menu-entry--icon-size: 28px !default;
$ipb-navigation-menu--menu-entry--font-size: 2rem !default;
$ipb-navigation-menu--separator--width: $common-spacing-400 !default;
$ipb-navigation-menu--menu-entry--more--background-color: #455a6447 !default;
$ipb-navigation-menu--user-part--flex-column-gap: $common-spacing-300 !default;
$ipb-navigation-menu--user-card--flex-column-gap: $common-spacing-300;
$ipb-navigation-menu--user-card--photo--background-color: #585653 !default;
$ipb-navigation-menu--user-card--photo--size: 36px !default;
$dropdown-menu--items-remainder--padding: $common-spacing-300 !default;
$dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !default;
@@ -36,18 +36,12 @@ $dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !defau
display: flex;
flex-direction: column;
border-radius: 0 $ipb-navigation-menu--border-radius $ipb-navigation-menu--border-radius 0;
background-color: $ipb-navigation-menu--background-color;
column-gap: $ipb-navigation-menu--flex-column-gap;
// in expanded state
&.ipb-is-expanded {
width: $ipb-navigation-menu--nav-vertical--is-expanded--width;
// expand menu toggle animation
.ipb-navigation-menu--top-part--toggle--expand-menu {
@include ipb-toggle-nav-animated-chevron-right;
}
// make menu entry fill available space
.ipb-navigation-menu--menu-entry--brick-item {
width: 100%;
@@ -83,11 +77,6 @@ $dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !defau
}
// expand toggle menu
.ipb-navigation-menu--top-part--toggle--expand-menu {
@include ipb-toggle-nav;
}
// SEPARATOR ////////////////////////////////////////////
.ipb-navigation-menu--separator {
@@ -102,7 +91,6 @@ $dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !defau
display: flex;
flex-direction: column;
padding: 0 $ipb-navigation-menu--middle-part--is-vertical--padding;
@include ipb-scrollbar;
}
// menu entries
@@ -119,22 +107,10 @@ $dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !defau
// entry wrapper
.ipb-navigation-menu--menu-entry--wrapper {
// entry title
.ipb-navigation-menu--menu-entry--title {
@include ipb-text-overflow-ellipsis;
@extend %common-font-ral-nor-200;
}
&.active .ipb-navigation-menu--menu-entry {
background-color: $ipb-navigation-menu--menu-entry--active--background-color;
color: $ipb-navigation-menu--menu-entry--active--color;
.ipb-navigation-menu--menu-entry--icon {
color: $ipb-navigation-menu--menu-entry--active--icon--color;
}
}
}
// menu entry
@@ -151,8 +127,6 @@ $dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !defau
align-items: center;
column-gap: $ipb-navigation-menu--menu-entry--wrapper--flex-column-gap;
border-radius: $ipb-navigation-menu--menu-entry--border-radius;
color: whitesmoke;
@include ipb-transition(#{"background-color, color"});
// entry icon
.ipb-navigation-menu--menu-entry--icon {
@@ -161,13 +135,6 @@ $dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !defau
font-size: $ipb-navigation-menu--menu-entry--font-size;
text-align: center;
}
// hover and focus effect
&:hover, &:focus:not(.ipb-not-focusable) {
color: white;
background-color: $common-color-blue-grey-700;
}
}
// drop down items remainder
@@ -178,7 +145,6 @@ $dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !defau
// drop down menu items remainder
.ipb-dropdown-menu--items-remainder {
padding: $dropdown-menu--items-remainder--padding;
background-color: $ipb-navigation-menu--background-color;
border-bottom-left-radius: $dropdown-menu--items-remainder--border-radius;
border-bottom-right-radius: $dropdown-menu--items-remainder--border-radius;
-webkit-box-shadow: none;
@@ -195,7 +161,6 @@ $dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !defau
display: flex;
align-items: center;
column-gap: $ipb-navigation-menu--user-part--flex-column-gap;
background-color: $common-color-grey-800;
border-radius: 0 0 $ipb-navigation-menu--border-radius 0;
// toggle mobile menu
@@ -213,7 +178,6 @@ $dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !defau
align-items: center;
justify-content: center;
@extend %common-font-ral-nor-150;
color: white !important;
text-decoration: none;
overflow-x: hidden;
@@ -226,7 +190,6 @@ $dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !defau
background-size: 100%;
background-position: center center;
background-repeat: no-repeat;
background-color: $ipb-navigation-menu--user-card--photo--background-color;
border-radius: 100%;
}
@@ -242,23 +205,12 @@ $dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !defau
.ipb-navigation-menu--user-card--name {
flex-grow: 1;
overflow-x: hidden;
> div {
@include ipb-text-overflow-ellipsis;
}
}
}
}
// MOBILE MENU ////////////////////////////////////////////
// mobile open toggle menu
.ipb-navigation-menu--user-part--toggle--open-mobile-menu {
@include ipb-toggle-nav;
}
// mobile menu overlay
.ipb-navigation-menu-overlay {
display: none;
@@ -267,7 +219,6 @@ $dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !defau
top: $ipb-navigation-menu--nav-horizontal--height;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.28);
z-index: 9998;
}
@@ -405,9 +356,7 @@ $dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !defau
width: 100%;
max-height: 0;
padding: 0 12px;
background-color: $ipb-navigation-menu--background-color;
z-index: 9999;
@include ipb-transition(max-height, ease, 0.5s);
.ipb-navigation-menu--menu-entries {
margin: 15px 0;
@@ -457,15 +406,7 @@ $dropdown-menu--items-remainder--border-radius: $common-border-radius-700 !defau
.ipb-navigation-menu--middle-part {
max-height: 100%;
}
// toggle animation
.ipb-navigation-menu--user-part--toggle--open-mobile-menu {
@include ipb-toggle-nav-animated-cross;
}
}
}
}
}

View File

@@ -1,13 +1,16 @@
@import "../../../../../../node_modules/bulma-scss/utilities/mixins";
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
@import "../node_modules/bulma-scss/utilities/mixins";
/* SCSS variables */
$ipb-page--main-wrapper--padding: $common-spacing-600 $common-spacing-700 !default;
$ipb-page--main-header--margin-bottom: $common-size-250 !default;
$ipb-page--main-header--information--title--font-size: $common-font-size-450 !default;
$ipb-page--main-header--information--title--color: $common-base-variable--text-color !default;
$ipb-page--main-header--information--subtitle--padding: $common-spacing-200 !default;
$ipb-page--main-header--information--subtitle--font-size: $common-font-size-250 !default;
$ipb-page--main-header--information--subtitle--color: $common-base-variable--text-color !default;
html {
font-size: 12px;
@@ -48,16 +51,10 @@ body{
.ipb-page--main-header--information--title{
font-size: $ipb-page--main-header--information--title--font-size;
font-weight: bold;
color: $ipb-page--main-header--information--title--color;
> span ~ span {
@include ipb-following-dot;
}
}
.ipb-page--main-header--information--subtitle{
font-size: $ipb-page--main-header--information--subtitle--font-size;
color: $ipb-page--main-header--information--subtitle--color;
padding: $ipb-page--main-header--information--subtitle--padding;
max-width: 1400px;
}
@@ -76,7 +73,6 @@ body{
.ipb-copyright {
text-decoration: none !important;
color: $common-color-secondary-800;
}
@include mobile {
@@ -97,6 +93,5 @@ body{
width: 100%;
}
}
}

View File

@@ -0,0 +1,42 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-tabs--tab--badge--border-radius: $common-border-radius-500 !default;
$ipb-tabs--tab--badge--padding-y: 3px !default;
$ipb-tabs--tab--badge--padding-x: 5px !default;
$ipb-tabs--tab--badge--margin-left: $common-spacing-200 !default;
$ipb-tabs--tab--active--indicator--width: $common-size-150 !default;
$ipb-tabs--tab--active--indicator--height: $ipb-tabs--tab--active--indicator--width !default;
$ipb-tabs--tab--active--indicator--margin-right: $common-spacing-300 !default;
$ipb-tabs--tab--active--indicator--border-radius: $common-border-radius-full !default;
.ipb-tabs.nav-pills > li{
> a {
display: flex;
align-items: center;
@extend %common-font-ral-med-150;
> .badge {
border-radius: $ipb-tabs--tab--badge--border-radius;
padding: $ipb-tabs--tab--badge--padding-y $ipb-tabs--tab--badge--padding-x;
margin-left: $ipb-tabs--tab--badge--margin-left;
}
}
&.active > a {
&:before {
content: " ";
display: inline-block;
width: $ipb-tabs--tab--active--indicator--width;
height: $ipb-tabs--tab--active--indicator--height;
margin-right: $ipb-tabs--tab--active--indicator--margin-right;
border-radius: $ipb-tabs--tab--active--indicator--border-radius;
}
}
}

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,6 @@
@import "utils/variables/path";
@import 'common/main.scss';
@import "utils/all";
@import "mixins";
@import "components/all";
@import "vendors/all";
@import "pages/all";

View File

@@ -1,8 +0,0 @@
/*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-body-text-color: $ipb-color-grey-900 !default;
$ipb-body-background-color: $ipb-color-white-200 !default;

View File

@@ -1,14 +1,16 @@
@import "../../../../../../../node_modules/bulma-scss/utilities/mixins";
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
$ipb-browse-brick--mosaic-item--highlight-color: $common-color-blue-800, $common-color-orange-800, $common-color-green-800, $common-color-pink-800, $common-color-cyan-800, $common-color-yellow-800, $common-color-purple-800;
/* SCSS variables (can be overloaded) */
@import "../node_modules/bulma-scss/utilities/mixins";
$ipb-browse-brick-panel--row--margin: $common-spacing-0 !default;
$ipb-browse-brick-panel--brick-content-toolbar--padding: $common-spacing-400 !default;
$ipb-content-mosaic--padding: $common-spacing-0 !default;
$ipb-browse-brick--mosaic-breadcrumb--padding: $common-spacing-200 !default;
$ipb-browse-brick--mosaic-breadcrumb--active--color: $common-color-grey-800 !default;
$ipb-browse-brick--mosaic-breadcrumb--a--color: $common-color-primary-800 !default;
$ipb-browse-brick--mosaic--gap: $common-spacing-300 !default;
$ipb-browse-brick--mosaic--small--grid-template-columns: 1fr !default;
@@ -20,10 +22,7 @@ $ipb-browse-brick--mosaic-group-item--min-height: $common-size-550 !default;
$ipb-browse-brick--mosaic-group-item--height: auto !default;
$ipb-browse-brick--mosaic-group-item--width: 100% !default;
$ipb-browse-brick--mosaic-group-item--margin: $common-spacing-0 !default;
$ipb-browse-brick--mosaic-group-item--color: $common-base-variable--text-color !default;
$ipb-browse-brick--mosaic-group-item--border: 1px solid $common-color-grey-300 !default;
$ipb-browse-brick--mosaic-group-item--border-radius: $common-border-radius-300 !default;
$ipb-browse-brick--mosaic-group-item--background-color: $common-color-white-100 !default;
$ipb-browse-brick--mosaic-group-item--animation--transform-x: -20px !default;
$ipb-browse-brick--mosaic-group-item--actions--top: $common-spacing-500 !default;
@@ -32,49 +31,30 @@ $ipb-browse-brick--mosaic-item--height: 100% !default;
$ipb-browse-brick--mosaic-item--padding: $common-spacing-600 !default;
$ipb-browse-brick--mosaic-item--margin: $common-spacing-0 !default;
$ipb-browse-brick--mosaic-item--border-radius: $ipb-browse-brick--mosaic-group-item--border-radius !default;
$ipb-browse-brick--mosaic-item--background-color: $common-color-white-100 !default;
$ipb-browse-brick--mosaic-item--color: $common-base-variable--text-color !default;
$ipb-browse-brick--mosaic-item--hover--color: inherit !default;
$ipb-browse-brick--mosaic-item--hover--background-color--alpha: 0.05 !default;
$ipb-browse-brick--mosaic-item-description--color: $common-color-grey-800 !default;
$ipb-browse-brick--mosaic-item-image--height: 44px !default;
$ipb-browse-brick--mosaic-item-image--width: 44px !default;
$ipb-browse-brick--mosaic-item-image--border-radius: $common-border-radius-700 !default;
$ipb-browse-brick--mosaic-item-image--padding: $common-spacing-0 !default;
$ipb-browse-brick--mosaic-item-image--margin-bottom: $common-spacing-500 !default;
$ipb-browse-brick--mosaic-item-image--background-color: common-adjust-alpha($common-color-blue-700, .1) !default;
$ipb-browse-brick--mosaic-item-image--background-color--alpha: 0.1 !default;
$ipb-browse-brick--mosaic-item-image--color: $common-color-blue-700 !default;
$ipb-browse-brick--mosaic-item-image--img--height: $common-size-300 !default;
$ipb-browse-brick--mosaic-item-description--margin-top: $common-spacing-300 !default;
$ipb-browse-brick-panel--mosaic--background-color: transparent !default;
$ipb-browse-brick-panel--mosaic--border: none !default;
$ipb-browse-brick-panel--dataTables_wrapper--padding-x: $common-spacing-0 !default;
$ipb-browse-brick-panel--dataTables_wrapper--padding-y: $common-size-200 !default;
$ipb-browse-brick-panel--dataTables_wrapper--row--div--padding-x: $common-size-200 !default;
$ipb-browse-brick-panel--dataTables_wrapper--row--div--padding-y: $common-size-0 !default;
$ipb-browse-brick--tree-item--color: $common-color-grey-900 !default;
$ipb-browse-brick--tree-item--hyperlink--color: $common-hyperlink-color !default;
$ipb-browse-brick--tree-item-filter-data--color: $common-color-grey-800 !default;
$ipb-browse-brick--tree-item-filter-data--margin-top: $common-spacing-300 !default;
$ipb-browse-brick--tree-item-filter-data--item--margin-y: $common-spacing-0 !default;
$ipb-browse-brick--tree-item-filter-data--item--margin-x: $common-spacing-300 !default;
$ipb-browse-brick--tree-item--description--margin-top: $common-spacing-200 !default;
$ipb-browse-brick--tree-item--description--color: $common-color-grey-800 !default;
$ipb-browse-brick--tree-item--wrapper--padding-top: $common-spacing-500 !default;
$ipb-browse-brick--tree-item--wrapper--color: inherit !default;
$ipb-browse-brick--tree-item-image--height: $common-size-350 !default;
$ipb-browse-brick--tree-item-image--width: $common-size-350 !default;
@@ -90,18 +70,20 @@ $ipb-browse-brick--tree-item-image--has-glyphicon--margin-right: $common-spacing
$ipb-browse-brick--tree-item--has-glyphicon--description--margin-left: 19px !default;
$ipb-browse-brick--list-group-item--padding-y: $common-spacing-0 !default;
$ipb-browse-brick--list-group-item--padding-x: $common-spacing-500 !default;
$ipb-browse-brick--list-group-item--padding: $common-spacing-0 !default;
$ipb-browse-brick--list-group-item--padding-left: $common-spacing-500 !default;
$ipb-browse-brick--list-group-item--margin-bottom: -1px !default;
$ipb-browse-brick--list-group-item--background-color: $common-color-white-100 !default;
$ipb-browse-brick--list-group-item--border: 1px solid $common-color-grey-400 !default;
$ipb-browse-brick--list-group--margin-bottom: $common-spacing-0 !default;
$ipb-browse-brick--list-group-item--tree-item-wrapper--padding-bottom: $common-spacing-500 !default;
$ipb-browse-brick--list-group--tree--margin: $common-spacing-0 !default;
$ipb-browse-brick--list-group--tree--background-color: $common-color-white-100 !default;
$ipb-browse-brick--no-item--illustration--max-width: 100% !default;
$ipb-browse-brick--no-item--illustration--padding-y: $common-spacing-600 !default;
$ipb-browse-brick--no-item--illustration--padding-x: $common-spacing-500 !default;
$ipb-browse-brick--no-item--illustration--svg--max-width: $common-size-700 !default;
// Common
.ipb-browse-brick-panel {
@@ -123,23 +105,13 @@ $ipb-browse-brick--list-group--tree--background-color: $common-color-white-100 !
width: 100% !important;
}
// Mosaic view
.page_browse_brick_as_mosaic .ipb-browse-brick-panel{
background-color: $ipb-browse-brick-panel--mosaic--background-color !important;
border: $ipb-browse-brick-panel--mosaic--border !important;
}
// Mosaic view
#brick_content_mosaic{
padding: $ipb-content-mosaic--padding;
}
#mosaic-breadcrumb {
padding: $ipb-browse-brick--mosaic-breadcrumb--padding;
a {
color: $ipb-browse-brick--mosaic-breadcrumb--a--color;
}
.active {
color: $ipb-browse-brick--mosaic-breadcrumb--active--color;
}
}
.mosaic-group {
@@ -173,23 +145,7 @@ $ipb-browse-brick--list-group--tree--background-color: $common-color-white-100 !
height: $ipb-browse-brick--mosaic-group-item--height;
width: $ipb-browse-brick--mosaic-group-item--width;
margin: $ipb-browse-brick--mosaic-group-item--margin;
color: $ipb-browse-brick--mosaic-group-item--color;
border: $ipb-browse-brick--mosaic-group-item--border;
border-radius: $ipb-browse-brick--mosaic-group-item--border-radius;
background-color: $ipb-browse-brick--mosaic-group-item--background-color;
@for $i from 1 through length($ipb-browse-brick--mosaic-item--highlight-color) {
&:nth-child(#{length($ipb-browse-brick--mosaic-item--highlight-color)}n + #{$i}){
.mosaic-item:hover{
background-color: common-adjust-alpha(nth($ipb-browse-brick--mosaic-item--highlight-color, $i), $ipb-browse-brick--mosaic-item--hover--background-color--alpha);
}
.mosaic-item-image {
background-color: common-adjust-alpha(nth($ipb-browse-brick--mosaic-item--highlight-color, $i), $ipb-browse-brick--mosaic-item-image--background-color--alpha);
color: nth($ipb-browse-brick--mosaic-item--highlight-color, $i);
}
}
}
> .mosaic-group-item-actions {
position: absolute;
@@ -206,15 +162,7 @@ $ipb-browse-brick--list-group--tree--background-color: $common-color-white-100 !
padding: $ipb-browse-brick--mosaic-item--padding;
margin: $ipb-browse-brick--mosaic-item--margin;
border-radius: $ipb-browse-brick--mosaic-item--border-radius;
background-color: $ipb-browse-brick--mosaic-item--background-color;
color: $ipb-browse-brick--mosaic-item--color;
transition: background-color 0.3s linear;
&:hover {
color: $ipb-browse-brick--mosaic-item--hover--color;
}
}
@@ -229,7 +177,6 @@ $ipb-browse-brick--list-group--tree--background-color: $common-color-white-100 !
.mosaic-item-description {
@extend %common-font-ral-nor-150;
color: $ipb-browse-brick--mosaic-item-description--color;
}
}
@@ -240,8 +187,6 @@ $ipb-browse-brick--list-group--tree--background-color: $common-color-white-100 !
padding: $ipb-browse-brick--mosaic-item-image--padding;
margin-bottom: $ipb-browse-brick--mosaic-item-image--margin-bottom;
border-radius: $ipb-browse-brick--mosaic-item-image--border-radius;
background-color: $ipb-browse-brick--mosaic-item-image--background-color;
color: $ipb-browse-brick--mosaic-item-image--color;
align-items: center;
justify-content: center;
text-transform: capitalize;
@@ -273,26 +218,22 @@ $ipb-browse-brick--list-group--tree--background-color: $common-color-white-100 !
}
.list-group-item .list-group-item-text, .tree-item {
color: $ipb-browse-brick--tree-item--color;
@extend %common-font-ral-bol-150;
& a {
@extend %common-font-size-150;
color: $ipb-browse-brick--tree-item--hyperlink--color;
}
}
.list-group.tree .list-group-item .list-group-item-description {
display: block;
margin-top: $ipb-browse-brick--tree-item--description--margin-top;
color: $ipb-browse-brick--tree-item--description--color;
@extend %common-font-ral-nor-100;
}
.list-group-item .tree-item-wrapper .tree-item-filter-data {
margin-top: $ipb-browse-brick--tree-item-filter-data--margin-top;
color: $ipb-browse-brick--tree-item-filter-data--color;
@extend %common-font-ral-med-100;
> span:not(:last-child):after {
@@ -300,7 +241,6 @@ $ipb-browse-brick--list-group--tree--background-color: $common-color-white-100 !
margin: $ipb-browse-brick--tree-item-filter-data--item--margin-y $ipb-browse-brick--tree-item-filter-data--item--margin-x;
}
a {
color: $ipb-browse-brick--tree-item-filter-data--color;
font-size: $common-font-size-100 !important;
}
}
@@ -308,32 +248,15 @@ $ipb-browse-brick--list-group--tree--background-color: $common-color-white-100 !
#brick_content_tree .list-group-item>.tree-item-wrapper {
display: flex;
padding-top: $ipb-browse-brick--tree-item--wrapper--padding-top;
color: $ipb-browse-brick--tree-item--wrapper--color;
text-decoration: inherit;
cursor: pointer
}
.list-group-item {
#brick_content_tree .list-group-item {
display: block;
position: relative;
padding: $ipb-browse-brick--list-group-item--padding-y $ipb-browse-brick--list-group-item--padding-x;
padding: $ipb-browse-brick--list-group-item--padding $ipb-browse-brick--list-group-item--padding $ipb-browse-brick--list-group-item--padding $ipb-browse-brick--list-group-item--padding-left;
margin-bottom: $ipb-browse-brick--list-group-item--margin-bottom;
background-color: $ipb-browse-brick--list-group-item--background-color;
border: $ipb-browse-brick--list-group-item--border;
border-bottom: none;
@for $i from 1 through length($ipb-browse-brick--mosaic-item--highlight-color) {
&:nth-child(#{length($ipb-browse-brick--mosaic-item--highlight-color)}n + #{$i - 1}) {
&:hover {
background-color: common-adjust-alpha(nth($ipb-browse-brick--mosaic-item--highlight-color, $i), $ipb-browse-brick--mosaic-item--hover--background-color--alpha);
}
> .tree-item-wrapper .tree-item-image {
background-color: common-adjust-alpha(nth($ipb-browse-brick--mosaic-item--highlight-color, $i), $ipb-browse-brick--mosaic-item-image--background-color--alpha);
color: nth($ipb-browse-brick--mosaic-item--highlight-color, $i);
}
}
}
}
@@ -379,5 +302,20 @@ $ipb-browse-brick--list-group--tree--background-color: $common-color-white-100 !
.list-group.tree {
margin: $ipb-browse-brick--list-group--tree--margin;
background-color: $ipb-browse-brick--list-group--tree--background-color;
}
.ipb-browse-brick--no-item--illustration {
width: $ipb-browse-brick--no-item--illustration--max-width;
display: flex;
flex-direction: column;;
padding: $ipb-browse-brick--no-item--illustration--padding-y $ipb-browse-brick--no-item--illustration--padding-x;
> svg {
max-width: $ipb-browse-brick--no-item--illustration--svg--max-width;
height: inherit;
align-self: center;
}
}
.ipb-browse-brick--no-item--text {
@extend %common-font-ral-med-300;
}

View File

@@ -1,3 +1,9 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-manage-brick--panel--body--padding-y: $common-spacing-500 !default;
$ipb-manage-brick--panel--body--padding-x: $common-spacing-0 !default;
@@ -7,24 +13,15 @@ $ipb-manage-brick--panel--body--datatable--row--margin: $common-spacing-0 !defau
$ipb-manage-brick--panel--body--datatable--row--padding-y: $common-spacing-0 !default;
$ipb-manage-brick--panel--body--datatable--row--padding-x: $common-spacing-400 !default;
$ipb-manage-brick--tabs--tab--border: solid 1px $common-color-grey-400 !default;
$ipb-manage-brick--tabs--tab--badge--border-radius: $common-border-radius-500 !default;
$ipb-manage-brick--tabs--tab--badge--padding-y: 3px !default;
$ipb-manage-brick--tabs--tab--badge--padding-x: 5px !default;
$ipb-manage-brick--tabs--tab--badge--margin-left: $common-spacing-200 !default;
$ipb-manage-brick--tabs--tab--background-color: $common-color-grey-100 !default;
$ipb-manage-brick--tabs--tab--color: $common-color-grey-900 !default;
$ipb-manage-brick--tabs--tab--active--background-color: $common-color-white-100 !default;
$ipb-manage-brick--tabs--tab--active--badge--background-color: $common-color-grey-200 !default;
$ipb-manage-brick--tabs--tab--active--indicator--background-color: $common-color-primary-600 !default;
$ipb-manage-brick--tabs--tab--active--indicator--width: $common-size-150 !default;
$ipb-manage-brick--tabs--tab--active--indicator--height: $ipb-manage-brick--tabs--tab--active--indicator--width !default;
$ipb-manage-brick--tabs--tab--active--indicator--margin-right: $common-spacing-300 !default;
$ipb-manage-brick--tabs--tab--active--indicator--border-radius: $common-border-radius-full !default;
$ipb-manage-brick--panel--body--table--margin-top: $common-spacing-500 !default;
$ipb-manage-brick--no-result--illustration--width: 100% !default;
$ipb-manage-brick--no-result--illustration--padding-y: $common-spacing-600 !default;
$ipb-manage-brick--no-result--illustration--padding-x: $common-spacing-500 !default;
$ipb-manage-brick--no-result--illustration--svg--max-width: $common-size-700 !default;
.ipb-manage-brick--panel--body {
padding: $ipb-manage-brick--panel--body--padding-y $ipb-manage-brick--panel--body--padding-x 0 $ipb-manage-brick--panel--body--padding-x;
@@ -40,79 +37,51 @@ $ipb-manage-brick--panel--body--table--margin-top: $common-spacing-500 !default;
}
.ipb-manage-brick--tabs.grouping_tabs.nav-pills > li{
> a {
display: flex;
align-items: center;
background-color: $ipb-manage-brick--tabs--tab--background-color;
color: $ipb-manage-brick--tabs--tab--color;
@extend %common-font-ral-med-150;
> .badge {
color: $common-color-grey-900;
background-color: transparent;
border-radius: $ipb-manage-brick--tabs--tab--badge--border-radius;
padding: $ipb-manage-brick--tabs--tab--badge--padding-y $ipb-manage-brick--tabs--tab--badge--padding-x;
margin-left: $ipb-manage-brick--tabs--tab--badge--margin-left;
}
border: $ipb-manage-brick--tabs--tab--border;
border-bottom: none;
}
&.active > a {
background-color: $ipb-manage-brick--tabs--tab--active--background-color;
&:before {
content: " ";
display: inline-block;
width: $ipb-manage-brick--tabs--tab--active--indicator--width;
height: $ipb-manage-brick--tabs--tab--active--indicator--height;
margin-right: $ipb-manage-brick--tabs--tab--active--indicator--margin-right;
border-radius: $ipb-manage-brick--tabs--tab--active--indicator--border-radius;
background-color: $ipb-manage-brick--tabs--tab--active--indicator--background-color;
}
> .badge {
background-color: $ipb-manage-brick--tabs--tab--active--badge--background-color;
}
}
}
.ipb-manage-brick--panel--body--table {
margin-top: $ipb-manage-brick--panel--body--table--margin-top !important;
}
.ipb-manage-brick--export-action {
color: $common-color-grey-800;
}
.ipb-manage-brick--export-action--icon {
float: right;
}
$ipb-manage-brick--pie-chart--colors:
$common-color-blue-400 $common-color-blue-950 "rgb(44, 160, 44)",
$common-color-blue-500 $common-color-blue-950 "rgb(214, 39, 40)",
$common-color-blue-600 $common-color-blue-100 "rgb(148, 103, 189)",
$common-color-blue-700 $common-color-blue-100 "rgb(140, 86, 75)",
$common-color-blue-800 $common-color-blue-100 "rgb(227, 119, 194)",
$common-color-blue-900 $common-color-blue-100 "rgb(127, 127, 127)",
$common-color-blue-950 $common-color-blue-100 "rgb(188, 189, 34)",
$common-color-blue-100 $common-color-blue-950 "rgb(23, 190, 207)",
$common-color-blue-200 $common-color-blue-950 "rgb(31, 119, 180)",
$common-color-blue-300 $common-color-blue-950 "rgb(255, 127, 14)"
!default;
.ipb-export--feedback {
display: flex;
flex-direction: column;
}
@each $background, $text, $originalColor in $ipb-manage-brick--pie-chart--colors {
.c3-chart-arc path[style="fill: #{$originalColor}; cursor: pointer; opacity: 1;"] {
fill: $background !important;
.ipb-export-message {
@extend %common-font-ral-med-150;
margin: $common-spacing-300 $common-spacing-0;
}
.c3-legend-item-tile[style="stroke: #{$originalColor}; pointer-events: none;"] {
stroke: $background !important;
.ipb-export--illustration {
align-self: center;
margin: 24px 0;
max-width: $common-size-650;
max-height: $common-size-650;
> svg {
max-width: 100%;
height: 100%;
}
}
.c3-chart-arc:has(path[style="fill: #{$originalColor}; cursor: pointer; opacity: 1;"]) text {
fill: $text !important;
.ipb-manage-brick--no-result--illustration {
width: $ipb-manage-brick--no-result--illustration--width;
display: flex;
flex-direction: column;;
padding: $ipb-manage-brick--no-result--illustration--padding-y $ipb-manage-brick--no-result--illustration--padding-x;
> svg {
max-width: $ipb-manage-brick--no-result--illustration--svg--max-width;
height: inherit;
align-self: center;
}
}
.ipb-manage-brick--no-result--text {
@extend %common-font-ral-med-300;
}

View File

@@ -1,5 +1,10 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-object-brick--url-to-clipboard--opacity: 0.5 !default;
$ipb-object-brick--url-to-clipboard-tooltip-copied--color: $common-color-green-500!default;
$ipb-object-brick--url-to-clipboard-tooltip-copied--margin-right: $common-spacing-200!default;
@@ -15,6 +20,5 @@ $ipb-object-brick--url-to-clipboard-tooltip-copied--margin-right: $common-spacin
}
// Used for clipboard's tooltip, which is not part of .url-to-clipboard element
.url-to-clipboard-tooltip-copied {
color: $ipb-object-brick--url-to-clipboard-tooltip-copied--color;
margin-right: $ipb-object-brick--url-to-clipboard-tooltip-copied--margin-right;
}

File diff suppressed because one or more lines are too long

View File

@@ -15,10 +15,10 @@
*
* You should have received a copy of the GNU Affero General Public License
*/
@import '../../../../../css/common/main.scss';
@import 'common/main.scss';
@import 'variables.scss';
@import "utils/all";
@import '../../../../../node_modules/ckeditor5-itop-build/build/styles/compiled-theme';
@import '../node_modules/ckeditor5-itop-build/build/styles/compiled-theme';
/*!
* Combodo portal template v1.0.0
@@ -275,201 +275,6 @@ footer{
padding-top: 15px;
}
//.home .tile{
// display: block;
// margin-bottom: 8px;
// padding: 0em 1em;
// min-height: 4em;
// background-color: $white;
// background-image: none;
// border: none;
// border-radius: 0px;
// text-align: center;
// text-decoration: none;
// white-space: normal;
// line-height: 4em;
// box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15);
//}
//.home .tile .tile_decoration{
// position: absolute;
// top: 0.3em;
// left: 2.5em;
//}
//.home .tile .tile_title{
// font-weight: bold;
// color: $gray;
//}
//
//.home .tile .tile_title > span.icon {
// color: $combodo-orange;
//}
//
//.home .tile .tile_description{
// display: none;
// color: #555555;
//}
//
//
///**********************************/
///* ManageBrick badge tile display */
///**********************************/
//.home a.tile.tile_badge > div {
// display: table;
// width: 100%;
//}
//
//.home a.tile.tile_badge > div > div {
// display: table-row;
//}
//
//.home a.tile.tile_badge > div > div > div {
// display: table-cell;
//}
//
//@media (max-width: 768px) {
// .home a.tile.tile_badge > div > div > div.tile_body div.tile_count {
// position: absolute;
// top: 0em;
// right: 2em;
// text-align: right;
// font-size: 1.2em;
// }
// .home a.tile.tile_badge > div.tile_description {
// display: none;
// }
//}
//@media (min-width: 768px) {
// .home .tile{
// display: block;
// margin-bottom: 25px;
// padding: 40px 40px 30px 40px;
// min-height: 10em;
// text-align: left;
// transition: all 0.2s linear;
// }
// .home .tile:hover{
// box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.10);
// }
// .home .tile .tile_decoration{
// display: block;
// position: relative;
// float: left;
// top: 1.5em;
// left: initial;
// margin: 0px 30px 15px 0px;
// }
// .home .tile .tile_body{
// display: block;
// padding-left: 4.3em;
// text-align: left;
// line-height: 1.5em;
// }
// .home .tile .tile_title{
// margin-bottom: 1em;
// font-size: 1.0em;
// }
// .home .tile .tile_description{
// display: block;
// text-align: left;
// }
//
// .home a.tile.tile_badge{
// height: 10em;
// overflow: hidden;
// }
// .home a.tile.tile_badge > div > div > div.tile_decoration{
// top: unset;
// vertical-align: middle;
// }
// .home a.tile.tile_badge > div > div > div.tile_decoration > span.icon {
// font-size: 4em;
// }
// .home a.tile.tile_badge > div > div > div.tile_body{
// position: relative;
// padding: 0;
// margin: 0;
// vertical-align: middle;
// text-align: right;
// }
// .home a.tile.tile_badge > div > div > div.tile_body .tile_title{
// margin-top: 1em;
// margin-bottom: 0;
// font-size: 1em;
// font-weight: normal;
// }
// .home a.tile.tile_badge > div > div > div.tile_body .tile_count{
// position: absolute;
// top: 0;
// right: 0;
// font-size: 2em;
// font-weight: bold;
// color: $gray;
// }
// .home a.tile.tile_badge .tile_description{
// display: none;
// }
//}
//@media (min-width: 992px) {
// .home .tile{
// min-height: 14em;
// padding: 30px 40px 30px 40px;
// }
// .home .tile .tile_decoration > span.icon{
// font-size: 4em;
// }
// .home .tile .tile_body{
// padding-left: 6.3em;
// }
// .home .tile .tile_title{
// font-size: 1.4em;
// }
// .home .tile .tile_description{
// font-size: 1.2em;
// }
//
// .home a.tile.tile_badge > div > div > div.tile_body .tile_title{
// font-size: 1.2em;
// }
// .home a.tile.tile_badge > div > div > div.tile_body .tile_count{
// font-size: 3em;
// }
// .home a.tile.tile_badge > div > div > div.tile_decoration > span.icon {
// font-size: 4em;
// }
// .home a.tile.tile_badge .tile_description{
// display: block;
// font-size: 1em;
// text-align: center;
// }
//}
//@media (min-width: 1200px) {
// .home .tile{
// margin-bottom: 40px;
// min-height: 15em;
// padding: 40px 50px 30px 50px;
// }
// .home .tile .tile_decoration{
// margin: 0px 40px 15px 0px;
// top: 1.5em;
// }
// .home .tile .tile_decoration > span.icon{
// font-size: 6em;
// }
// .home .tile .tile_body{
// padding-left: 9.1em;
// }
// .home .tile .tile_title{
// font-size: 1.5em;
// }
// .home .tile .tile_description{
// font-size: 1.2em;
// }
//
// .home a.tile.tile_badge > div > div > div.tile_decoration > span.icon {
// font-size: 6em;
// }
//}
/********************/
/* Modules settings */
/********************/
@@ -489,13 +294,7 @@ footer{
#main-header-actions{
margin-bottom: 15px;
}
/* This is no longer necessary but we keep it just in case */
/*#main-header-actions .btn-group .btn{
padding: 0em 1.5em;
line-height: 2.4em;
font-size: 14px;
background-image: none;
}*/
@media (min-width: 768px) {
#main-header:after{
clear: both;

View File

@@ -1,3 +1,9 @@
@import 'common/main.scss';
/* Import shame first as we want to override some of its styles */
@import "shame";
@import "../utils/all";
@import "utils/all";
@import "pages/all";
@import "components/all";
@import "vendors/all";
@import "layout/all";
@import "shame";

View File

@@ -1,35 +1,22 @@
/*!
* Copyright (C) 2013-2024 Combodo SAS
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
@import 'variables.scss';
/*!
/*
* Combodo portal theme v2.7.0
* Based on Bootswatch Simplex
*/
/*!
/*
* bootswatch v3.3.5
* Homepage: http://bootswatch.com
* Copyright 2012-2015 Thomas Park
* Licensed under MIT
* Based on Bootstrap
*/
/*!
/*
* Bootstrap v3.3.5 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
@@ -49,10 +36,6 @@
html {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0)
}
body {
color: $text-color;
background-color: $body-bg;
}
input,
button,
select,
@@ -1374,15 +1357,6 @@ th {
.table-bordered>thead>tr>td {
border-bottom-width: 2px
}
.table-striped>tbody>tr:nth-of-type(odd) {
background-color: $table-bg-accent;
}
.table-striped>tbody>tr:hover {
background-color: $table-bg-hover;
}
.table-hover>tbody>tr:hover {
background-color: $table-bg-hover;
}
table col[class*="col-"] {
position: static;
float: none;
@@ -1394,111 +1368,6 @@ table th[class*="col-"] {
float: none;
display: table-cell
}
.table>thead>tr>td.active,
.table>tbody>tr>td.active,
.table>tfoot>tr>td.active,
.table>thead>tr>th.active,
.table>tbody>tr>th.active,
.table>tfoot>tr>th.active,
.table>thead>tr.active>td,
.table>tbody>tr.active>td,
.table>tfoot>tr.active>td,
.table>thead>tr.active>th,
.table>tbody>tr.active>th,
.table>tfoot>tr.active>th {
background-color: #f5f5f5
}
.table-hover>tbody>tr>td.active:hover,
.table-hover>tbody>tr>th.active:hover,
.table-hover>tbody>tr.active:hover>td,
.table-hover>tbody>tr:hover>.active,
.table-hover>tbody>tr.active:hover>th {
background-color: #e8e8e8
}
.table>thead>tr>td.success,
.table>tbody>tr>td.success,
.table>tfoot>tr>td.success,
.table>thead>tr>th.success,
.table>tbody>tr>th.success,
.table>tfoot>tr>th.success,
.table>thead>tr.success>td,
.table>tbody>tr.success>td,
.table>tfoot>tr.success>td,
.table>thead>tr.success>th,
.table>tbody>tr.success>th,
.table>tfoot>tr.success>th {
background-color: $state-success-bg
}
.table-hover>tbody>tr>td.success:hover,
.table-hover>tbody>tr>th.success:hover,
.table-hover>tbody>tr.success:hover>td,
.table-hover>tbody>tr:hover>.success,
.table-hover>tbody>tr.success:hover>th {
background-color: #d0e9c6
}
.table>thead>tr>td.info,
.table>tbody>tr>td.info,
.table>tfoot>tr>td.info,
.table>thead>tr>th.info,
.table>tbody>tr>th.info,
.table>tfoot>tr>th.info,
.table>thead>tr.info>td,
.table>tbody>tr.info>td,
.table>tfoot>tr.info>td,
.table>thead>tr.info>th,
.table>tbody>tr.info>th,
.table>tfoot>tr.info>th {
background-color: $state-info-bg
}
.table-hover>tbody>tr>td.info:hover,
.table-hover>tbody>tr>th.info:hover,
.table-hover>tbody>tr.info:hover>td,
.table-hover>tbody>tr:hover>.info,
.table-hover>tbody>tr.info:hover>th {
background-color: #c4e3f3
}
.table>thead>tr>td.warning,
.table>tbody>tr>td.warning,
.table>tfoot>tr>td.warning,
.table>thead>tr>th.warning,
.table>tbody>tr>th.warning,
.table>tfoot>tr>th.warning,
.table>thead>tr.warning>td,
.table>tbody>tr.warning>td,
.table>tfoot>tr.warning>td,
.table>thead>tr.warning>th,
.table>tbody>tr.warning>th,
.table>tfoot>tr.warning>th {
background-color: $state-warning-bg
}
.table-hover>tbody>tr>td.warning:hover,
.table-hover>tbody>tr>th.warning:hover,
.table-hover>tbody>tr.warning:hover>td,
.table-hover>tbody>tr:hover>.warning,
.table-hover>tbody>tr.warning:hover>th {
background-color: #faf2cc
}
.table>thead>tr>td.danger,
.table>tbody>tr>td.danger,
.table>tfoot>tr>td.danger,
.table>thead>tr>th.danger,
.table>tbody>tr>th.danger,
.table>tfoot>tr>th.danger,
.table>thead>tr.danger>td,
.table>tbody>tr.danger>td,
.table>tfoot>tr.danger>td,
.table>thead>tr.danger>th,
.table>tbody>tr.danger>th,
.table>tfoot>tr.danger>th {
background-color: $state-danger-bg
}
.table-hover>tbody>tr>td.danger:hover,
.table-hover>tbody>tr>th.danger:hover,
.table-hover>tbody>tr.danger:hover>td,
.table-hover>tbody>tr:hover>.danger,
.table-hover>tbody>tr.danger:hover>th {
background-color: #ebcccc
}
.table-responsive {
overflow-x: auto;
min-height: 0.01%
@@ -3165,31 +3034,16 @@ select[multiple].input-group-sm>.input-group-btn>.btn {
border: 1px solid #dddddd
}
@media (min-width: 768px) {
.nav-tabs.nav-justified>li>a {
.nav-tabs.nav-justified > li > a {
border-bottom: 1px solid #dddddd;
border-radius: $border-radius-base $border-radius-base 0 0
}
.nav-tabs.nav-justified>.active>a,
.nav-tabs.nav-justified>.active>a:hover,
.nav-tabs.nav-justified>.active>a:focus {
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
border-bottom-color: #fcfcfc
}
}
.nav-pills>li {
float: left
}
.nav-pills>li>a {
border-radius: $border-radius-base
}
.nav-pills>li+li {
margin-left: 2px
}
.nav-pills>li.active>a,
.nav-pills>li.active>a:hover,
.nav-pills>li.active>a:focus {
color: #ffffff;
background-color: $brand-primary
}
.nav-stacked>li {
float: none
}
@@ -6082,37 +5936,6 @@ table.dataTable{
}
}
}
/* ManageBrick grouping tabs. Should be placed somewhere else? */
.grouping_tabs{
&.nav-pills > li > a{
color: #444;
background-color: #F5F5F5;
&:hover,
&:focus{
text-decoration: none;
background-color: #DDDDDD;
}
> .badge{
color: #ea7d1e;;
background-color: transparent;
}
}
&.nav-pills > li.active{
> a,
> a:hover,
> a:focus{
color: #444;
background-color: #FCFCFC;
}
}
}
/* Temp */
.label{

View File

@@ -1,4 +1,9 @@
/* SCSS variables */
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-alert--message--color: $ipb-body-text-color !default;
$ipb-alert--icon--font-size: $common-font-size-300 !default;
$ipb-alert--icon--width: 24px !default;
@@ -61,8 +66,8 @@ $ipb-alerts-colors: (
$icon: map-get($alert-color, "icon");
$background-color: common-adjust-alpha($color, .1);
.ipb-alert.alert-#{$name} {
background: linear-gradient(113deg, $background-color 0px, $background-color 60px, transparent 60px), white;
.ipb-alert.alert-#{$name}, .ipb-alert.ipb-is-#{$name} {
background: linear-gradient(113deg, $background-color 0px, $background-color 60px, transparent 60px), $ipb-alert--background-color;
border-left-color: $color;
&:before {

View File

@@ -1,7 +1,13 @@
@import "alert";
@import "button";
@import "caselog";
@import "datatables";
@import "dropdown";
@import "form";
@import "illustration";
@import "input";
@import "modal";
@import "nav";
@import "navigation-menu";
@import "panel";
@import "progress-bar";
@import "tile";

View File

@@ -1,33 +1,299 @@
/* SCSS variables */
$btn--border-radius: $common-border-radius-300 !default;
$btn--active--color: $common-color-white-100 !default;
$btn--active--background-color: $common-color-blue-grey-900 !default;
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
.btn{
border-radius: $btn--border-radius !important;
}
.btn.active{
background-color: #263238 !important;
color: $btn--active--color !important;
}
.btn-group .btn:first-child{
border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important;
}
.btn-group .btn:last-child{
border-top-left-radius: 0 !important;
border-bottom-left-radius: 0 !important;
}
// todo
.btn.btn-secondary:hover {
color: unset;
}
.btn.btn-secondary:active {
color: unset;
/* SCSS variables (can be overloaded) */
$ipb-button-colors: (
'' : (
'primary': (
'': (
$ipb-color-blue-800,
$ipb-color-white-100,
$ipb-color-blue-900
),
':hover': (
$ipb-color-blue-700,
$ipb-color-white-100,
$ipb-color-blue-800
),
':active': (
$ipb-color-blue-900,
$ipb-color-white-100,
$ipb-color-blue-950
),
':disabled': (
$ipb-color-blue-200,
$ipb-color-blue-600,
$ipb-color-blue-300
),
),
'default': (
'': (
$ipb-color-white-100,
$ipb-color-grey-800,
$ipb-color-grey-600
),
':hover': (
$ipb-color-grey-100,
$ipb-color-grey-900,
$ipb-color-grey-700
),
':active': (
$ipb-color-grey-200,
$ipb-color-grey-900,
$ipb-color-grey-700
),
':disabled': (
$ipb-color-grey-200,
$ipb-color-grey-700,
$ipb-color-grey-300
),
),
'success': (
'': (
$ipb-color-success-900,
$ipb-color-white-100,
$ipb-color-success-900
),
':hover': (
$ipb-color-success-800,
$ipb-color-green-100,
$ipb-color-success-900
),
':active': (
$ipb-color-success-950,
$ipb-color-green-100,
$ipb-color-success-950
),
':disabled': (
$ipb-color-grey-200,
$ipb-color-grey-700,
$ipb-color-grey-300
),
),
'warning': (
'': (
$ipb-color-warning-700,
$ipb-color-white-100,
$ipb-color-warning-900
),
':hover': (
$ipb-color-warning-600,
$ipb-color-warning-100,
$ipb-color-warning-700
),
':active': (
$ipb-color-warning-800,
$ipb-color-warning-100,
$ipb-color-warning-900
),
':disabled': (
$ipb-color-grey-200,
$ipb-color-grey-700,
$ipb-color-grey-300
),
),
'danger': (
'': (
$ipb-color-danger-800,
$ipb-color-white-100,
$ipb-color-danger-900
),
':hover': (
$ipb-color-danger-700,
$ipb-color-danger-100,
$ipb-color-danger-800
),
':active': (
$ipb-color-danger-900,
$ipb-color-danger-100,
$ipb-color-danger-950
),
':disabled': (
$ipb-color-grey-200,
$ipb-color-grey-700,
$ipb-color-grey-300
),
),
'info': (
'': (
$ipb-color-information-800,
$ipb-color-white-100,
$ipb-color-information-900
),
':hover': (
$ipb-color-information-700,
$ipb-color-information-100,
$ipb-color-information-800
),
':active': (
$ipb-color-information-900,
$ipb-color-information-100,
$ipb-color-information-950
),
':disabled': (
$ipb-color-grey-200,
$ipb-color-grey-700,
$ipb-color-grey-300
),
),
),
'alternative' : (
'primary': (
'': (
$ipb-color-transparent,
$ipb-color-blue-800,
$ipb-color-transparent
),
':hover': (
$ipb-color-blue-100,
$ipb-color-blue-900,
$ipb-color-blue-100
),
':active': (
$ipb-color-blue-200,
$ipb-color-blue-900,
$ipb-color-blue-200
),
':disabled': (
$ipb-color-blue-200,
$ipb-color-blue-600,
$ipb-color-blue-300
),
),
'default': (
'': (
$ipb-color-transparent,
$ipb-color-grey-800,
$ipb-color-transparent
),
':hover': (
$ipb-color-grey-200,
$ipb-color-grey-900,
$ipb-color-grey-200
),
':active': (
$ipb-color-grey-300,
$ipb-color-grey-900,
$ipb-color-grey-300
),
':disabled': (
$ipb-color-transparent,
$ipb-color-grey-500,
$ipb-color-transparent
),
),
'success': (
'': (
$ipb-color-transparent,
$ipb-color-success-900,
$ipb-color-transparent
),
':hover': (
$ipb-color-success-100,
$ipb-color-success-900,
$ipb-color-success-100
),
':active': (
$ipb-color-success-200,
$ipb-color-success-900,
$ipb-color-success-200
),
':disabled': (
$ipb-color-grey-200,
$ipb-color-grey-700,
$ipb-color-grey-300
),
),
'warning': (
'': (
$ipb-color-transparent,
$ipb-color-warning-800,
$ipb-color-transparent
),
':hover': (
$ipb-color-warning-100,
$ipb-color-warning-900,
$ipb-color-warning-100
),
':active': (
$ipb-color-warning-200,
$ipb-color-warning-900,
$ipb-color-warning-200
),
':disabled': (
$ipb-color-grey-200,
$ipb-color-grey-700,
$ipb-color-grey-300
),
),
'danger': (
'': (
$ipb-color-transparent,
$ipb-color-danger-800,
$ipb-color-transparent
),
':hover': (
$ipb-color-danger-100,
$ipb-color-danger-800,
$ipb-color-danger-100
),
':active': (
$ipb-color-danger-200,
$ipb-color-danger-800,
$ipb-color-danger-200
),
':disabled': (
$ipb-color-grey-200,
$ipb-color-grey-700,
$ipb-color-grey-300
),
),
'info': (
'': (
$ipb-color-transparent,
$ipb-color-information-800,
$ipb-color-transparent
),
':hover': (
$ipb-color-information-100,
$ipb-color-information-800,
$ipb-color-information-100
),
':active': (
$ipb-color-information-200,
$ipb-color-information-800,
$ipb-color-information-200
),
':disabled': (
$ipb-color-grey-200,
$ipb-color-grey-700,
$ipb-color-grey-300
),
),
),
) !default;
$ipb-button--background-color: $ipb-color-white-100 !default;
$ipb-button--color: $ipb-color-blue-800 !default;
$ipb-button--border-color:$ipb-color-blue-700 !default;
$ipb-button--border: solid 1px $ipb-button--border-color !default;
.ipb-button, .btn{
background-color: $ipb-button--background-color !important;
color: $ipb-button--color !important;
border: $ipb-button--border;
@each $sType, $aColors in $ipb-button-colors {
@each $sColor, $sPseudoClasses in $aColors {
@each $sPseudoClass, $sAttributes in $sPseudoClasses {
&.ipb-is-#{$sColor}#{if($sType != '', ".ipb-is-#{$sType}", '')}#{$sPseudoClass}, &.btn-#{$sColor}#{if($sType != '', ".#{$sType}", '')}#{$sPseudoClass} {
background-color: nth($sAttributes, 1) !important;
color: nth($sAttributes, 2) !important;
border-color: nth($sAttributes, 3) !important;
}
}
}
}
}

View File

@@ -0,0 +1,285 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$messaging-self-primary-color: $ipb-color-blue-100 !default;
$messaging-self-secondary-color: $ipb-color-blue-800 !default;
$messaging-1st-peer-primary-color: $ipb-color-white-100 !default;
$messaging-1st-peer-secondary-color: $ipb-color-grey-400 !default;
$messaging-2nd-peer-primary-color: $ipb-color-white-100 !default;
$messaging-2nd-peer-secondary-color: $ipb-color-grey-400 !default;
$messaging-2nd-peer-secondary-color: $ipb-color-grey-400 !default;
$messaging-3rd-peer-primary-color: $ipb-color-white-100 !default;
$messaging-3rd-peer-secondary-color: $ipb-color-grey-300 !default;
$messaging-4th-peer-primary-color: $ipb-color-white-100 !default;
$messaging-4th-peer-secondary-color: $ipb-color-grey-400 !default;
$messaging-5th-peer-primary-color: $ipb-color-white-100 !default;
$messaging-5th-peer-secondary-color: $ipb-color-grey-400 !default;
$ipb-caselog-thread--border-color: $ipb-color-grey-400 !default;
$ipb-caselog-thread--border: 1px solid $ipb-caselog-thread--border-color !default;
$ipb-caselog-thread--header--background-color: $ipb-color-white-100 !default;
$ipb-caselog-thread--header--span--color: $ipb-color-grey-800 !default;
$ipb-caselog-thread--header-toggler--color: inherit !default;
$ipb-caselog-thread--header-toggler--hover--active-focus--color: inherit !default;
$ipb-caselog-thread--content--background-color: $ipb-color-grey-100 !default;
$ipb-caselog-thread--date--color: $ipb-color-grey-800 !default;
$ipb-caselog-thread--block-medallion--block-entries--border-color: $ipb-color-grey-200 !default;
$ipb-caselog-thread--block-medallion--block-entries--border: 1px solid $ipb-caselog-thread--block-medallion--block-entries--border-color !default;
$ipb-caselog-thread--block-medallion--color: $ipb-color-blue-800 !default;
$ipb-caselog-thread--block-medallion--background-color: $ipb-color-blue-100 !default;
$ipb-caselog-thread--block-user--color: $ipb-caselog-thread--block-medallion--color !default;
$ipb-caselog-thread--block-entries--background-color: $ipb-caselog-thread--block-medallion--background-color !default;
$ipb-caselog-thread--block-entries--color: $ipb-caselog-thread--block-medallion--color !default;
$ipb-caselog-thread--block-entry--border-bottom-color: $ipb-color-grey-200 !default;
$ipb-caselog-thread--block-entry--border-bottom: 1px solid $ipb-caselog-thread--block-entry--border-bottom-color !default;
$ipb-caselog-thread--block-entry-toggler--background-color: $ipb-caselog-thread--block-medallion--background-color !default;
$ipb-caselog-thread--block-me--block-entry--first--content--border-left-color: transparent !default;
$ipb-caselog-thread--block-me--block-entry--first--content--border-right-color: $ipb-caselog-thread--block-medallion--background-color !default;
$ipb-caselog-thread--block-colors: (
1: ($ipb-color-white-100, $ipb-color-grey-700),
2: ($ipb-color-white-100, $ipb-color-grey-700),
3: ($ipb-color-white-100, $ipb-color-grey-700),
4: ($ipb-color-white-100, $ipb-color-grey-700),
5: ($ipb-color-white-100, $ipb-color-grey-700)
);
.ipb-caselog-thread {
border: $ipb-caselog-thread--border;
}
.ipb-caselog-thread--header{
background-color: $ipb-caselog-thread--header--background-color;
span{
color: $ipb-caselog-thread--header--span--color;
}
}
.ipb-caselog-thread--header-toggler{
color: $ipb-caselog-thread--header-toggler--color;
&:hover,
&:active,
&:focus{
color: $ipb-caselog-thread--header-toggler--hover--active-focus--color;
}
}
.ipb-caselog-thread--block-medallion,
.ipb-caselog-thread--block-entries{
border: $ipb-caselog-thread--block-medallion--block-entries--border;
}
.ipb-caselog-thread--content{
background-color: $ipb-caselog-thread--content--background-color;
}
.ipb-caselog-thread--date {
color: $ipb-caselog-thread--date--color;
}
.ipb-caselog-thread--block-medallion{
color: $ipb-caselog-thread--block-medallion--color; /* .ipb-caselog-thread--block-entries color */
background-color: $ipb-caselog-thread--block-medallion--background-color; /* .ipb-caselog-thread--block-entries background-color */
}
.ipb-caselog-thread--block-user{
color: $ipb-caselog-thread--block-user--color; /* .ipb-caselog-thread--block-entries background-color */
}
.ipb-caselog-thread--block-entries{
background-color: $ipb-caselog-thread--block-entries--background-color;
color: $ipb-caselog-thread--block-entries--color;
}
.ipb-caselog-thread--block-entry {
border-bottom: $ipb-caselog-thread--block-entry--border-bottom;
}
.ipb-caselog-thread--block-entry-toggler{
background-color: $ipb-caselog-thread--block-entry-toggler--background-color; /* .ipb-caselog-thread--block-entries background-color */
}
.ipb-caselog-thread--block-me{
.ipb-caselog-thread--block-entries{
.ipb-caselog-thread--block-entry:first-child{
.ipb-caselog-thread--block-entry-content:before{
border-right-color: $ipb-caselog-thread--block-me--block-entry--first--content--border-left-color;
border-left-color: $ipb-caselog-thread--block-me--block-entry--first--content--border-right-color; /* .ipb-caselog-thread--block-entries background-color */
}
}
}
}
.ipb-caselog-thread--block-color-1{
.ipb-caselog-thread--block-medallion{
color: $messaging-1st-peer-secondary-color;
background-color: $messaging-1st-peer-primary-color;
}
.ipb-caselog-thread--block-user{
color: $messaging-1st-peer-primary-color;
}
.ipb-caselog-thread--block-entries{
color: $messaging-1st-peer-secondary-color;
background-color: $messaging-1st-peer-primary-color;
.ipb-caselog-thread--block-entry{
.ipb-caselog-thread--block-entry-toggler{
background-color: $messaging-1st-peer-primary-color;
}
}
.ipb-caselog-thread--block-entry:first-child{
.ipb-caselog-thread--block-entry-content:before{
border-top-color: $messaging-1st-peer-primary-color;
border-right-color: $messaging-1st-peer-primary-color;
}
}
}
}
.ipb-caselog-thread--block-color-2{
.ipb-caselog-thread--block-medallion{
color: $messaging-2nd-peer-secondary-color;
background-color: $messaging-2nd-peer-primary-color;
}
.ipb-caselog-thread--block-user{
color: $messaging-2nd-peer-primary-color;
}
.ipb-caselog-thread--block-entries{
color: $messaging-2nd-peer-secondary-color;
background-color: $messaging-2nd-peer-primary-color;
.ipb-caselog-thread--block-entry{
.ipb-caselog-thread--block-entry-toggler{
background-color: $messaging-2nd-peer-primary-color;
}
}
.ipb-caselog-thread--block-entry:first-child{
.ipb-caselog-thread--block-entry-content:before{
border-top-color: $messaging-2nd-peer-primary-color;
border-right-color: $messaging-2nd-peer-primary-color;
}
}
}
}
.ipb-caselog-thread--block-color-3{
.ipb-caselog-thread--block-medallion{
color: $messaging-3rd-peer-secondary-color;
background-color: $messaging-3rd-peer-primary-color;
}
.ipb-caselog-thread--block-user{
color: $messaging-3rd-peer-primary-color;
}
.ipb-caselog-thread--block-entries{
color: $messaging-3rd-peer-secondary-color;
background-color: $messaging-3rd-peer-primary-color;
.ipb-caselog-thread--block-entry{
.ipb-caselog-thread--block-entry-toggler{
background-color: $messaging-3rd-peer-primary-color;
}
}
.ipb-caselog-thread--block-entry:first-child{
.ipb-caselog-thread--block-entry-content:before{
border-top-color: $messaging-3rd-peer-primary-color;
border-right-color: $messaging-3rd-peer-primary-color;
}
}
}
}
.ipb-caselog-thread--block-color-4{
.ipb-caselog-thread--block-medallion{
color: $messaging-4th-peer-secondary-color;
background-color: $messaging-4th-peer-primary-color;
}
.ipb-caselog-thread--block-user{
color: $messaging-4th-peer-primary-color;
}
.ipb-caselog-thread--block-entries{
color: $messaging-4th-peer-secondary-color;
background-color: $messaging-4th-peer-primary-color;
.ipb-caselog-thread--block-entry{
.ipb-caselog-thread--block-entry-toggler{
background-color: $messaging-4th-peer-primary-color;
}
}
.ipb-caselog-thread--block-entry:first-child{
.ipb-caselog-thread--block-entry-content:before{
border-top-color: $messaging-4th-peer-primary-color;
border-right-color: $messaging-4th-peer-primary-color;
}
}
}
}
.ipb-caselog-thread--block-color-5{
.ipb-caselog-thread--block-medallion{
color: $messaging-5th-peer-secondary-color;
background-color: $messaging-5th-peer-primary-color;
}
.ipb-caselog-thread--block-user{
color: $messaging-5th-peer-primary-color;
}
.ipb-caselog-thread--block-entries{
color: $messaging-5th-peer-secondary-color;
background-color: $messaging-5th-peer-primary-color;
.ipb-caselog-thread--block-entry{
.ipb-caselog-thread--block-entry-toggler{
background-color: $messaging-5th-peer-primary-color;
}
}
.ipb-caselog-thread--block-entry:first-child{
.ipb-caselog-thread--block-entry-content:before{
border-top-color: $messaging-5th-peer-primary-color;
border-right-color: $messaging-5th-peer-primary-color;
}
}
}
}
@each $index, $colors in $ipb-caselog-thread--block-colors {
.ipb-caselog-thread--block-color-#{$index} {
.ipb-caselog-thread--block-medallion {
color: nth($colors, 2);
background-color: nth($colors, 1);
}
.ipb-caselog-thread--block-user {
color: nth($colors, 1);
}
.ipb-caselog-thread--block-entries {
color: nth($colors, 2);
background-color: nth($colors, 1);
.ipb-caselog-thread--block-entry {
.ipb-caselog-thread--block-entry-toggler {
background-color: nth($colors, 1);
}
}
.ipb-caselog-thread--block-entry:first-child {
.ipb-caselog-thread--block-entry-content:before {
border-top-color: nth($colors, 1);
border-right-color: nth($colors, 1);
}
}
}
}
}

View File

@@ -1,3 +1,9 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ibo-vendors-datatables--column-sorting-icon--opacity: 0.3 !default;
$ibo-vendors-datatables--column-sorting-icon--opacity--is-sorted: 1 !default;
$ibo-vendors-datatables--column-sorting-icon--content: "\f0dc" !default;

View File

@@ -0,0 +1,33 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-dropdown--background-color: $ipb-color-white-100 !default;
$ipb-dropdown--border-color: $ipb-color-grey-300 !default;
$ipb-dropdown--border: 1px solid $ipb-dropdown--border-color !default;
$ipb-dropdown--li--background-color: $ipb-dropdown--background-color !default;
$ipb-dropdown--a--color: $ipb-color-grey-900 !default;
$ipb-dropdown--li--hover--background-color: $ipb-color-grey-200 !default;
$ipb-dropdown--li--hover--a--color: $ipb-color-grey-800 !default;
ipb-dropdown {
background-color: $ipb-dropdown--background-color;
border: $ipb-dropdown--border;
li {
background-color: $ipb-dropdown--li--background-color;
a {
color: $ipb-dropdown--a--color;
}
&:hover {
background: $ipb-dropdown--li--hover--background-color;
a {
color: $ipb-dropdown--li--hover--a--color;
}
}
}
}

View File

@@ -0,0 +1,37 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb--fieldset--background-color: $ipb-color-grey-50 !default;
$ipb--fieldset--border-color: $ipb-color-grey-200 !default;
$ipb--fieldset--border: 1px solid $ipb--fieldset--border-color !default;
$ipb--fieldset--inside--fieldset--background-color: $ipb-color-grey-100 !default;
$ipb-field--has-tooltip--content: "\f05a" !default;
$ipb-field--has-tooltip--color: $ipb-color-grey-700 !default;
$ipb-field--is-mandatory--content: "\f069" !default;
$ipb-field--is-mandatory--color: $ipb-color-primary-700 !default;
.form_fields {
fieldset {
background-color: $ipb--fieldset--background-color;
border: $ipb--fieldset--border;
fieldset {
background-color: $ipb--fieldset--inside--fieldset--background-color;
}
}
}
.form_field_label > .control-label[data-tooltip-instantiated="true"]:after {
content: $ipb-field--has-tooltip--content;
color: $ipb-field--has-tooltip--color;
}
.form_field .form_mandatory .control-label:after{
content: $ipb-field--is-mandatory--content;
color: $ipb-field--is-mandatory--color;
};

View File

@@ -0,0 +1,11 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-svg-illustration--fill: $ipb-color-primary-700 !default;
.ipb-svg-illustration--container > svg *[fill="#6c63ff"]{
fill: $ipb-svg-illustration--fill;
}

View File

@@ -1,7 +1,27 @@
/* SCSS variables */
$form-control--border-radius: $common-border-radius-300 !default;
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-form-control--color: $common-color-grey-800 !default;
$ipb-form-control--is-focused--border-color: $common-color-primary-700 !default;
$ipb-input-group-addon--border-color: $ipb-color-grey-300 !default;
$ipb-input-group-addon--border: 1px solid $ipb-input-group-addon--border-color !default;
$ipb-input-group-addon--background-color: $common-color-grey-100 !default;
$ipb-input-group-addon--color: $common-color-grey-800 !default;
.form-control {
border-radius: $form-control--border-radius!important;
color: $ipb-form-control--color;
&:focus {
border-color: $ipb-form-control--is-focused--border-color;
}
}
.input-group-addon {
border: $ipb-input-group-addon--border;
background-color: $ipb-input-group-addon--background-color;
color: $ipb-input-group-addon--color;
}

View File

@@ -0,0 +1,62 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-modal--header--background-color: $ipb-color-white-100 !default;
$ipb-modal--header--color: $ipb-color-grey-900 !default;
$ipb-modal--header--close--color: $ipb-color-grey-900 !default;
$ipb-modal--header--close--opacity: 1 !default;
$ipb-modal--header--close--hover--color: $ipb-color-grey-700 !default;
$ipb-modal--backdrop--opacity: 0.6 !default;
$ipb-modal--backdrop--background-color: $ipb-color-blue-grey-800 !default;
$ipb-modal--backdrop--backdrop-filter: blur(2px) !default;
$ipb-modal--content--border-color: $ipb-color-grey-400 !default;
$ipb-modal--content--border: 1px solid $ipb-modal--content--border-color !default;
$ipb-modal--title--color: $ipb-modal--header--color !default;
$ipb-modal--title--span--separator--background-color: $ipb-color-grey-800 !default;
.modal .modal-dialog{
.modal-header {
background-color: $ipb-modal--header--background-color;
color: $ipb-modal--header--color;
}
}
.modal-backdrop.in {
background-color: common-adjust-alpha($ipb-modal--backdrop--background-color, $ipb-modal--backdrop--opacity);
backdrop-filter: $ipb-modal--backdrop--backdrop-filter;
}
.modal-content {
border: $ipb-modal--content--border;
}
.modal-header {
.close {
color: $ipb-modal--header--close--color;
opacity: $ipb-modal--header--close--opacity;
&:hover {
color: $ipb-modal--header--close--hover--color;
}
}
}
.modal-title {
color: $ipb-modal--title--color !important;
span ~ span {
&:before {
background-color: $ipb-modal--title--span--separator--background-color;
}
}
}

View File

@@ -1,4 +1,9 @@
/* SCSS variables */
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$nav-pills--li--border-radius: $common-border-radius-300 !default;
.nav-pills > li > a{

View File

@@ -1,10 +0,0 @@
.nav > li {
display: flex;
}
.nav > li > a {
display: flex;
}
.navbar-default .navbar-nav > li > a {
color: $common-color-grey-300;
}

View File

@@ -1,8 +1,27 @@
/* SCSS variables */
$panel--border-radius: $common-border-radius-300!default;
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-panel--border-color: $ipb-color-grey-400 !default;
$ipb-panel--border: 1px solid $ipb-panel--border-color !default;
$ipb-panel--background-color: $ipb-color-white-100 !default;
$ipb-panel--heading--border-color: $ipb-color-grey-400 !default;
$ipb-panel--heading--background-color: $ipb-color-grey-100 !default;
$ipb-panel--heading--color: $ipb-color-grey-800 !default;
.panel{
.ipb-panel, .panel{
box-shadow: none;
border: $ipb-panel--border;
background-color: $ipb-panel--background-color;
&.panel-default .panel-heading {
border-color: $ipb-panel--heading--border-color;
background-color: $ipb-panel--heading--background-color;
color: $ipb-panel--heading--color;
}
}

View File

@@ -0,0 +1,14 @@
$ipb-progress--background-color: $ipb-color-grey-200 !default;
$ipb-progress--bar--background-color: $ipb-color-primary-700 !default;
$ipb-progress--bar--color: $ipb-color-white-100 !default;
.ipb-progress, .progress {
background-color: $ipb-progress--background-color;
}
.ipb-progress--bar, .progress-bar {
background-color: $ipb-color-primary-700;
color: $ipb-progress--bar--color;
}

View File

@@ -0,0 +1,61 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-tile--background-color: $ipb-color-white-100 !default;
$ipb-tile--border-color: $ipb-color-grey-200 !default;
$ipb-tile--border: 1px solid $ipb-tile--border-color!default;
$ipb-tile--decoration--opacity: 0.1 !default;
$ipb-tile--decoration--background-color: common-adjust-alpha($ipb-color-blue-700, $ipb-tile--decoration--opacity) !default;
$ipb-tile--decoration--hover--opacity: 0.25 !default;
$ipb-tile--decoration--hover--background-color: common-adjust-alpha($ipb-tile--decoration--background-color, $ipb-tile--decoration--hover--opacity) !default;
$ipb-tile--decoration--icon--color: $ipb-color-blue-700 !default;
$ipb-tile--title--color: $common-base-variable--text-color !default;
$ipb-tile--description--color: $common-base-variable--text-color !default;
.ipb-tile{
background-color: $ipb-tile--background-color;
border: $ipb-tile--border;
&[data-role="navigation-trigger"] {
@include ipb-heavy-animated-border;
}
}
.ipb-tile--decoration {
background-color: $ipb-tile--decoration--background-color;
}
.ipb-tile:hover {
.ipb-tile--decoration {
background-color: $ipb-tile--decoration--hover--background-color;
}
}
.ipb-tile--decoration--icon {
&.icon {
color: $ipb-tile--decoration--icon--color;
}
}
.ipb-tile--title{
color: $ipb-tile--title--color;
}
.ipb-tile--description{
color: $ipb-tile--description--color;
}
.ipb-tile--manage .ipb-tile--title {
> span:first-child {
@include ipb-text-overflow-ellipsis;
}
> span:nth-child(2) {
@include ipb-following-dot;
}
}

View File

@@ -1 +1,4 @@
@import 'page';
@import 'home';
@import 'navigation-menu';
@import 'page';
@import 'tabs';

View File

@@ -0,0 +1,21 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-home--main-wrapper--before--background-image: url("../img/backgrounds/dots-left-top.svg") !default;
$ipb-home--main-wrapper--before--background-size: 30% !default;
$ipb-home--main-wrapper--after--background-image: url("../img/backgrounds/dots-right-bottom.svg") !default;
$ipb-home--main-wrapper--after--background-size: 30% !default;
.ipb-home .ipb-page--main-wrapper:before{
background-image: $ipb-home--main-wrapper--before--background-image;
background-size: $ipb-home--main-wrapper--before--background-size;
}
.ipb-home .ipb-page--main-wrapper:after{
background-image: $ipb-home--main-wrapper--after--background-image;
background-size: $ipb-home--main-wrapper--after--background-size;
}

View File

@@ -0,0 +1,124 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
@import "../node_modules/bulma-scss/utilities/mixins";
$ipb-navigation-menu--background-color: $ipb-color-blue-grey-900 !default;
$ipb-navigation-menu--menu-entry--active--icon--color: $ipb-color-primary-600 !default;
$ipb-navigation-menu--menu-entry--active--color: $ipb-color-grey-800 !default;
$ipb-navigation-menu--menu-entry--active--background-color: $ipb-color-white-100 !default;
$ipb-navigation-menu--dropdown-menu--items-remainder--color: $ipb-color-white-200 !default;
$ipb-navigation-menu--dropdown-menu--items-remainder--hover--color: $ipb-color-white-100 !default;
$ipb-navigation-menu--dropdown-menu--items-remainder--hover--background-color: $ipb-color-blue-grey-700 !default;
$ipb-navigation-menu--user-card--color: $ipb-color-white-100 !default;
$ipb-navigation-menu--user-card--photo--background-color: $ipb-color-grey-700 !default;
$ipb-navigation-menu--user-part--background-color: $ipb-color-grey-800 !default;
$ipb-navigation-menu-overlay--opacity: 0.6 !default;
$ipb-navigation-menu-overlay--background-color: $ipb-color-blue-grey-800 !default;
$ipb-navigation-menu-overlay--backdrop-filter: blur(2px) !default;
.ipb-navigation-menu {
background-color: $ipb-navigation-menu--background-color;
&.ipb-is-expanded {
.ipb-navigation-menu--top-part--toggle--expand-menu {
@include ipb-toggle-nav-animated-chevron-right;
}
}
}
.ipb-navigation-menu--top-part--toggle--expand-menu {
@include ipb-toggle-nav;
}
.ipb-navigation-menu--middle-part {
@include ipb-scrollbar;
}
// entry wrapper
.ipb-navigation-menu--menu-entry--wrapper {
.ipb-navigation-menu--menu-entry--title {
@include ipb-text-overflow-ellipsis;
}
&.active .ipb-navigation-menu--menu-entry {
background-color: $ipb-navigation-menu--menu-entry--active--background-color;
color: $ipb-navigation-menu--menu-entry--active--color;
.ipb-navigation-menu--menu-entry--icon {
color: $ipb-navigation-menu--menu-entry--active--icon--color;
}
}
}
// menu entry
.ipb-navigation-menu--menu-entry,
.ipb-dropdown-menu--items-remainder > li > a {
color: $ipb-navigation-menu--dropdown-menu--items-remainder--color;
@include ipb-transition(#{"background-color, color"});
&:hover, &:focus:not(.ipb-not-focusable) {
color: $ipb-navigation-menu--dropdown-menu--items-remainder--hover--color;
background-color: $ipb-navigation-menu--dropdown-menu--items-remainder--hover--background-color;
}
}
.ipb-dropdown-menu--items-remainder {
background-color: $ipb-navigation-menu--background-color;
}
.ipb-navigation-menu--user-part {
background-color: $ipb-navigation-menu--user-part--background-color;
}
.ipb-navigation-menu--user-card {
color: $ipb-navigation-menu--user-card--color !important;
.ipb-navigation-menu--user-card--photo {
background-color: $ipb-navigation-menu--user-card--photo--background-color;
}
.ipb-navigation-menu--user-card--infos {
// username
.ipb-navigation-menu--user-card--name {
> div {
@include ipb-text-overflow-ellipsis;
}
}
}
}
.ipb-navigation-menu-overlay {
background-color: common-adjust-alpha($ipb-navigation-menu-overlay--background-color, $ipb-navigation-menu-overlay--opacity);
backdrop-filter: $ipb-navigation-menu-overlay--backdrop-filter;
}
.ipb-navigation-menu--user-part--toggle--open-mobile-menu {
@include ipb-toggle-nav;
}
@include mobile {
.ipb-body {
.ipb-navigation-menu {
.ipb-navigation-menu--middle-part {
background-color: $ipb-navigation-menu--background-color;
@include ipb-transition(max-height, ease, 0.5s);
}
&.ipb-is-opened {
// toggle animation
.ipb-navigation-menu--user-part--toggle--open-mobile-menu {
@include ipb-toggle-nav-animated-cross;
}
}
}
}
}

View File

@@ -1,4 +1,30 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-copyright--color: $ipb-color-secondary-800 !default;
$ipb-page--main-header--information--title--color: $common-base-variable--text-color !default;
$ipb-page--main-header--information--subtitle--color: $common-base-variable--text-color !default;
body{
@extend %common-font-ral-med-100;
}
.ipb-copyright {
text-decoration: none !important;
}
.ipb-page--main-header--information--title{
color: $ipb-page--main-header--information--title--color;
> span ~ span {
@include ipb-following-dot;
}
}
.ipb-page--main-header--information--subtitle {
color: $ipb-page--main-header--information--subtitle--color;
}

View File

@@ -0,0 +1,51 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-tabs--tab--border-color: $ipb-color-grey-400 !default;
$ipb-tabs--tab--border: solid 1px $ipb-tabs--tab--border-color !default;
$ipb-tabs--tab--background-color: $ipb-color-grey-100 !default;
$ipb-tabs--tab--color: $ipb-color-grey-900 !default;
$ipb-tabs--tab--badge--background-color: transparent !default;
$ipb-tabs--tab--badge--color: $ipb-color-grey-900 !default;
$ipb-tabs--tab--hover--background-color: $ipb-color-grey-300 !default;
$ipb-tabs--tab--hover--color: $ipb-color-grey-900 !default;
$ipb-tabs--tab--badge--hover--background-color: $ipb-tabs--tab--hover--background-color !default;
$ipb-tabs--tab--active--background-color: $ipb-color-white-100 !default;
$ipb-tabs--tab--active--badge--background-color: $ipb-color-grey-200 !default;
$ipb-tabs--tab--active--indicator--background-color: $ipb-color-primary-600 !default;
.ipb-tabs.nav-pills > li{
> a {
background-color: $ipb-tabs--tab--background-color;
color: $ipb-tabs--tab--color;
> .badge {
background-color: $ipb-tabs--tab--badge--background-color;
color: $ipb-tabs--tab--badge--color;
}
border: $ipb-tabs--tab--border;
border-bottom: none;
}
&.active > a {
background-color: $ipb-tabs--tab--active--background-color;
&:before {
background-color: $ipb-tabs--tab--active--indicator--background-color;
}
> .badge {
background-color: $ipb-tabs--tab--active--badge--background-color;
}
}
&:hover > a, & > a:focus {
background-color: $ipb-tabs--tab--hover--background-color;
color: $ipb-tabs--tab--hover--color;
> .badge {
background-color: $ipb-tabs--tab--badge--hover--background-color;
}
}
}

View File

@@ -0,0 +1,2 @@
@import "base";
@import "bricks/all";

View File

@@ -0,0 +1,13 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-body-text-color: $ipb-color-grey-900 !default;
$ipb-body-background-color: $ipb-color-white-200 !default;
body {
color: $ipb-body-text-color;
background-color: $ipb-body-background-color;
}

View File

@@ -0,0 +1,3 @@
@import "browse-brick";
@import "manage-brick";
@import "object-brick";

View File

@@ -0,0 +1,150 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
@import "../node_modules/bulma-scss/utilities/mixins";
$ipb-browse-brick--mosaic-item--highlight-color: $ipb-color-blue-800, $ipb-color-orange-800, $ipb-color-green-800, $ipb-color-pink-800, $ipb-color-cyan-800, $ipb-color-yellow-800, $ipb-color-purple-800;
$ipb-browse-brick--mosaic-breadcrumb--active--color: $ipb-color-grey-800 !default;
$ipb-browse-brick--mosaic-breadcrumb--a--color: $ipb-color-primary-800 !default;
$ipb-browse-brick--mosaic-group-item--color: $common-base-variable--text-color !default;
$ipb-browse-brick--mosaic-group-item--border-color: $ipb-color-grey-300 !default;
$ipb-browse-brick--mosaic-group-item--border: 1px solid $ipb-browse-brick--mosaic-group-item--border-color !default;
$ipb-browse-brick--mosaic-group-item--background-color: $ipb-color-white-100 !default;
$ipb-browse-brick--mosaic-item--background-color: $ipb-color-white-100 !default;
$ipb-browse-brick--mosaic-item--color: $common-base-variable--text-color !default;
$ipb-browse-brick--mosaic-item--hover--color: inherit !default;
$ipb-browse-brick--mosaic-item--hover--background-color--alpha: 0.05 !default;
$ipb-browse-brick--mosaic-item-description--color: $ipb-color-grey-800 !default;
$ipb-browse-brick--mosaic-item-image--background-color: common-adjust-alpha($ipb-color-blue-700, .1) !default;
$ipb-browse-brick--mosaic-item-image--background-color--alpha: 0.1 !default;
$ipb-browse-brick--mosaic-item-image--color: $ipb-color-blue-700 !default;
$ipb-browse-brick-panel--mosaic--background-color: transparent !default;
$ipb-browse-brick-panel--mosaic--border: none !default;
$ipb-browse-brick--tree-item--color: $ipb-color-grey-900 !default;
$ipb-browse-brick--tree-item--hyperlink--color: $common-hyperlink-color !default;
$ipb-browse-brick--tree-item-filter-data--color: $ipb-color-grey-800 !default;
$ipb-browse-brick--tree-item--description--color: $ipb-color-grey-800 !default;
$ipb-browse-brick--tree-item--wrapper--color: inherit !default;
$ipb-browse-brick--list-group-item--background-color: $ipb-color-white-100 !default;
$ipb-browse-brick--list-group-item--border-top-color: $ipb-color-grey-400 !default;
$ipb-browse-brick--list-group-item--border-top: 1px solid $ipb-browse-brick--list-group-item--border-top-color !default;
$ipb-browse-brick--list-group--tree--background-color: $ipb-color-white-100 !default;
$ipb-browse-brick--no-item--text--color: $ipb-color-grey-800 !default;
.page_browse_brick_as_mosaic .ipb-browse-brick-panel{
background-color: $ipb-browse-brick-panel--mosaic--background-color !important;
border: $ipb-browse-brick-panel--mosaic--border !important;
}
#mosaic-breadcrumb {
a {
color: $ipb-browse-brick--mosaic-breadcrumb--a--color;
}
.active {
color: $ipb-browse-brick--mosaic-breadcrumb--active--color;
}
}
.mosaic-group-item {
background-color: $ipb-browse-brick--mosaic-group-item--background-color;
color: $ipb-browse-brick--mosaic-group-item--color;
border: $ipb-browse-brick--mosaic-group-item--border;
@for $i from 1 through length($ipb-browse-brick--mosaic-item--highlight-color) {
&:nth-child(#{length($ipb-browse-brick--mosaic-item--highlight-color)}n + #{$i}){
.mosaic-item:hover{
background-color: common-adjust-alpha(nth($ipb-browse-brick--mosaic-item--highlight-color, $i), $ipb-browse-brick--mosaic-item--hover--background-color--alpha);
}
.mosaic-item-image {
background-color: common-adjust-alpha(nth($ipb-browse-brick--mosaic-item--highlight-color, $i), $ipb-browse-brick--mosaic-item-image--background-color--alpha);
color: nth($ipb-browse-brick--mosaic-item--highlight-color, $i);
}
}
}
}
.mosaic-item {
background-color: $ipb-browse-brick--mosaic-item--background-color;
color: $ipb-browse-brick--mosaic-item--color;
&:hover {
color: $ipb-browse-brick--mosaic-item--hover--color;
}
}
.mosaic-item-text {
.mosaic-item-description {
color: $ipb-browse-brick--mosaic-item-description--color;
}
}
.mosaic-item-image {
background-color: $ipb-browse-brick--mosaic-item-image--background-color;
color: $ipb-browse-brick--mosaic-item-image--color;
}
.list-group-item .list-group-item-text, .tree-item {
color: $ipb-browse-brick--tree-item--color;
& a {
color: $ipb-browse-brick--tree-item--hyperlink--color;
}
}
.list-group.tree .list-group-item .list-group-item-description {
color: $ipb-browse-brick--tree-item--description--color;
}
.list-group-item .tree-item-wrapper .tree-item-filter-data {
color: $ipb-browse-brick--tree-item-filter-data--color;
a {
color: $ipb-browse-brick--tree-item-filter-data--color;
}
}
#brick_content_tree .list-group-item>.tree-item-wrapper {;
color: $ipb-browse-brick--tree-item--wrapper--color;
}
#brick_content_tree .list-group-item {
background-color: $ipb-browse-brick--list-group-item--background-color;
border: none;
border-top: $ipb-browse-brick--list-group-item--border-top;
@for $i from 1 through length($ipb-browse-brick--mosaic-item--highlight-color) {
&:nth-child(#{length($ipb-browse-brick--mosaic-item--highlight-color)}n + #{$i - 1}) {
&:hover {
background-color: common-adjust-alpha(nth($ipb-browse-brick--mosaic-item--highlight-color, $i), $ipb-browse-brick--mosaic-item--hover--background-color--alpha);
}
> .tree-item-wrapper .tree-item-image {
background-color: common-adjust-alpha(nth($ipb-browse-brick--mosaic-item--highlight-color, $i), $ipb-browse-brick--mosaic-item-image--background-color--alpha);
color: nth($ipb-browse-brick--mosaic-item--highlight-color, $i);
}
}
}
}
.list-group.tree {
background-color: $ipb-browse-brick--list-group--tree--background-color;
}
.ipb-browse-brick--no-item--text {
color: $ipb-browse-brick--no-item--text--color;
}

View File

@@ -0,0 +1,41 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-manage-brick--export-action--color: $ipb-color-grey-800 !default;
$ipb-manage-brick--no-result--text--color: $ipb-color-grey-800 !default;
$ipb-manage-brick--pie-chart--colors:
$ipb-color-blue-400 $ipb-color-blue-950 "rgb(44, 160, 44)",
$ipb-color-blue-500 $ipb-color-blue-950 "rgb(214, 39, 40)",
$ipb-color-blue-600 $ipb-color-blue-100 "rgb(148, 103, 189)",
$ipb-color-blue-700 $ipb-color-blue-100 "rgb(140, 86, 75)",
$ipb-color-blue-800 $ipb-color-blue-100 "rgb(227, 119, 194)",
$ipb-color-blue-900 $ipb-color-blue-100 "rgb(127, 127, 127)",
$ipb-color-blue-950 $ipb-color-blue-100 "rgb(188, 189, 34)",
$ipb-color-blue-100 $ipb-color-blue-950 "rgb(23, 190, 207)",
$ipb-color-blue-200 $ipb-color-blue-950 "rgb(31, 119, 180)",
$ipb-color-blue-300 $ipb-color-blue-950 "rgb(255, 127, 14)"
!default;
@each $background, $text, $originalColor in $ipb-manage-brick--pie-chart--colors {
.c3-chart-arc path[style="fill: #{$originalColor}; cursor: pointer; opacity: 1;"] {
fill: $background !important;
}
.c3-legend-item-tile[style="stroke: #{$originalColor}; pointer-events: none;"] {
stroke: $background !important;
}
.c3-chart-arc:has(path[style="fill: #{$originalColor}; cursor: pointer; opacity: 1;"]) text {
fill: $text !important;
}
}
.ipb-manage-brick--export-action {
color: $ipb-manage-brick--export-action--color;
}
.ipb-manage-brick--no-result--text {
color: $ipb-manage-brick--no-result--text--color;
}

View File

@@ -0,0 +1,11 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-object-brick--url-to-clipboard-tooltip-copied--color: $ipb-color-green-500!default;
.url-to-clipboard-tooltip-copied {
color: $ipb-object-brick--url-to-clipboard-tooltip-copied--color;
}

View File

@@ -0,0 +1 @@
@import "variables/all";

View File

@@ -0,0 +1 @@
@import "colors/all";

View File

@@ -0,0 +1,9 @@
/*
* @copyright Copyright (C) 2010-2025Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
@import "base-palette";
@import "semantic-palette";
@import "lifecycle-palette";
@import "skeleton-palette";

View File

@@ -0,0 +1,127 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/*
Base color palette
CSS variables
These are defined in themes/ as utils/ is included thrice and each time these variables are redeclared in the stylesheets
*/
:root {
--ipb-color-white-100: #{$ipb-color-white-100};
--ipb-color-white-200: #{$ipb-color-white-200};
--ipb-color-transparent: #{$ipb-color-transparent};
--ipb-color-grey-50: #{$ipb-color-grey-50};
--ipb-color-grey-100: #{$ipb-color-grey-100};
--ipb-color-grey-200: #{$ipb-color-grey-200};
--ipb-color-grey-300: #{$ipb-color-grey-300};
--ipb-color-grey-400: #{$ipb-color-grey-400};
--ipb-color-grey-500: #{$ipb-color-grey-500};
--ipb-color-grey-600: #{$ipb-color-grey-600};
--ipb-color-grey-700: #{$ipb-color-grey-700};
--ipb-color-grey-800: #{$ipb-color-grey-800};
--ipb-color-grey-900: #{$ipb-color-grey-900};
--ipb-color-grey-950: #{$ipb-color-grey-950};
--ipb-color-blue-grey-50: #{$ipb-color-blue-grey-50};
--ipb-color-blue-grey-100: #{$ipb-color-blue-grey-100};
--ipb-color-blue-grey-200: #{$ipb-color-blue-grey-200};
--ipb-color-blue-grey-300: #{$ipb-color-blue-grey-300};
--ipb-color-blue-grey-400: #{$ipb-color-blue-grey-400};
--ipb-color-blue-grey-500: #{$ipb-color-blue-grey-500};
--ipb-color-blue-grey-600: #{$ipb-color-blue-grey-600};
--ipb-color-blue-grey-700: #{$ipb-color-blue-grey-700};
--ipb-color-blue-grey-800: #{$ipb-color-blue-grey-800};
--ipb-color-blue-grey-900: #{$ipb-color-blue-grey-900};
--ipb-color-blue-grey-950: #{$ipb-color-blue-grey-950};
--ipb-color-blue-100: #{$ipb-color-blue-100};
--ipb-color-blue-200: #{$ipb-color-blue-200};
--ipb-color-blue-300: #{$ipb-color-blue-300};
--ipb-color-blue-400: #{$ipb-color-blue-400};
--ipb-color-blue-500: #{$ipb-color-blue-500};
--ipb-color-blue-600: #{$ipb-color-blue-600};
--ipb-color-blue-700: #{$ipb-color-blue-700};
--ipb-color-blue-800: #{$ipb-color-blue-800};
--ipb-color-blue-900: #{$ipb-color-blue-900};
--ipb-color-blue-950: #{$ipb-color-blue-950};
--ipb-color-cyan-100: #{$ipb-color-cyan-100};
--ipb-color-cyan-200: #{$ipb-color-cyan-200};
--ipb-color-cyan-300: #{$ipb-color-cyan-300};
--ipb-color-cyan-400: #{$ipb-color-cyan-400};
--ipb-color-cyan-500: #{$ipb-color-cyan-500};
--ipb-color-cyan-600: #{$ipb-color-cyan-600};
--ipb-color-cyan-700: #{$ipb-color-cyan-700};
--ipb-color-cyan-800: #{$ipb-color-cyan-800};
--ipb-color-cyan-900: #{$ipb-color-cyan-900};
--ipb-color-cyan-950: #{$ipb-color-cyan-950};
--ipb-color-green-100: #{$ipb-color-green-100};
--ipb-color-green-200: #{$ipb-color-green-200};
--ipb-color-green-300: #{$ipb-color-green-300};
--ipb-color-green-400: #{$ipb-color-green-400};
--ipb-color-green-500: #{$ipb-color-green-500};
--ipb-color-green-600: #{$ipb-color-green-600};
--ipb-color-green-700: #{$ipb-color-green-700};
--ipb-color-green-800: #{$ipb-color-green-800};
--ipb-color-green-900: #{$ipb-color-green-900};
--ipb-color-green-950: #{$ipb-color-green-950};
--ipb-color-orange-100: #{$ipb-color-orange-100};
--ipb-color-orange-200: #{$ipb-color-orange-200};
--ipb-color-orange-300: #{$ipb-color-orange-300};
--ipb-color-orange-400: #{$ipb-color-orange-400};
--ipb-color-orange-500: #{$ipb-color-orange-500};
--ipb-color-orange-600: #{$ipb-color-orange-600};
--ipb-color-orange-700: #{$ipb-color-orange-700};
--ipb-color-orange-800: #{$ipb-color-orange-800};
--ipb-color-orange-900: #{$ipb-color-orange-900};
--ipb-color-orange-950: #{$ipb-color-orange-950};
--ipb-color-red-100: #{$ipb-color-red-100};
--ipb-color-red-200: #{$ipb-color-red-200};
--ipb-color-red-300: #{$ipb-color-red-300};
--ipb-color-red-400: #{$ipb-color-red-400};
--ipb-color-red-500: #{$ipb-color-red-500};
--ipb-color-red-600: #{$ipb-color-red-600};
--ipb-color-red-700: #{$ipb-color-red-700};
--ipb-color-red-800: #{$ipb-color-red-800};
--ipb-color-red-900: #{$ipb-color-red-900};
--ipb-color-red-950: #{$ipb-color-red-950};
--ipb-color-pink-100: #{$ipb-color-pink-100};
--ipb-color-pink-200: #{$ipb-color-pink-200};
--ipb-color-pink-300: #{$ipb-color-pink-300};
--ipb-color-pink-400: #{$ipb-color-pink-400};
--ipb-color-pink-500: #{$ipb-color-pink-500};
--ipb-color-pink-600: #{$ipb-color-pink-600};
--ipb-color-pink-700: #{$ipb-color-pink-700};
--ipb-color-pink-800: #{$ipb-color-pink-800};
--ipb-color-pink-900: #{$ipb-color-pink-900};
--ipb-color-pink-950: #{$ipb-color-pink-950};
--ipb-color-yellow-100: #{$ipb-color-yellow-100};
--ipb-color-yellow-200: #{$ipb-color-yellow-200};
--ipb-color-yellow-300: #{$ipb-color-yellow-300};
--ipb-color-yellow-400: #{$ipb-color-yellow-400};
--ipb-color-yellow-500: #{$ipb-color-yellow-500};
--ipb-color-yellow-600: #{$ipb-color-yellow-600};
--ipb-color-yellow-700: #{$ipb-color-yellow-700};
--ipb-color-yellow-800: #{$ipb-color-yellow-800};
--ipb-color-yellow-900: #{$ipb-color-yellow-900};
--ipb-color-yellow-950: #{$ipb-color-yellow-950};
--ipb-color-purple-100: #{$ipb-color-purple-100};
--ipb-color-purple-200: #{$ipb-color-purple-200};
--ipb-color-purple-300: #{$ipb-color-purple-300};
--ipb-color-purple-400: #{$ipb-color-purple-400};
--ipb-color-purple-500: #{$ipb-color-purple-500};
--ipb-color-purple-600: #{$ipb-color-purple-600};
--ipb-color-purple-700: #{$ipb-color-purple-700};
--ipb-color-purple-800: #{$ipb-color-purple-800};
--ipb-color-purple-900: #{$ipb-color-purple-900};
--ipb-color-purple-950: #{$ipb-color-purple-950};
}

View File

@@ -0,0 +1,29 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/*
Lifecycle palette
CSS variables
These are defined in themes/ as utils/ is included thrice and each time these variables are redeclared in the stylesheets
*/
:root {
--ipb-lifecycle-new-state-primary-color: #{$ipb-lifecycle-new-state-primary-color};
--ipb-lifecycle-new-state-secondary-color: #{$ipb-lifecycle-new-state-secondary-color};
--ipb-lifecycle-neutral-state-primary-color: #{$ipb-lifecycle-neutral-state-primary-color};
--ipb-lifecycle-neutral-state-secondary-color: #{$ipb-lifecycle-neutral-state-secondary-color};
--ipb-lifecycle-waiting-state-primary-color: #{$ipb-lifecycle-waiting-state-primary-color};
--ipb-lifecycle-waiting-state-secondary-color: #{$ipb-lifecycle-waiting-state-secondary-color};
--ipb-lifecycle-success-state-primary-color: #{$ipb-lifecycle-success-state-primary-color};
--ipb-lifecycle-success-state-secondary-color: #{$ipb-lifecycle-success-state-secondary-color};
--ipb-lifecycle-failure-state-primary-color: #{$ipb-lifecycle-failure-state-primary-color};
--ipb-lifecycle-failure-state-secondary-color: #{$ipb-lifecycle-failure-state-secondary-color};
--ipb-lifecycle-frozen-state-primary-color: #{$ipb-lifecycle-frozen-state-primary-color};
--ipb-lifecycle-frozen-state-secondary-color: #{$ipb-lifecycle-frozen-state-secondary-color};
--ipb-lifecycle-active-state-primary-color: #{$ipb-lifecycle-active-state-primary-color};
--ipb-lifecycle-active-state-secondary-color: #{$ipb-lifecycle-active-state-secondary-color};
--ipb-lifecycle-inactive-state-primary-color: #{$ipb-lifecycle-inactive-state-primary-color};
--ipb-lifecycle-inactive-state-secondary-color: #{$ipb-lifecycle-inactive-state-secondary-color};
}

View File

@@ -0,0 +1,94 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/*
Semantic palettes
CSS variables
These are defined in themes/ as utils/ is included thrice and each time these variables are redeclared in the stylesheets
*/
:root {
--ipb-color-primary-100: #{$ipb-color-primary-100};
--ipb-color-primary-200: #{$ipb-color-primary-200};
--ipb-color-primary-300: #{$ipb-color-primary-300};
--ipb-color-primary-400: #{$ipb-color-primary-400};
--ipb-color-primary-500: #{$ipb-color-primary-500};
--ipb-color-primary-600: #{$ipb-color-primary-600};
--ipb-color-primary-700: #{$ipb-color-primary-700};
--ipb-color-primary-800: #{$ipb-color-primary-800};
--ipb-color-primary-900: #{$ipb-color-primary-900};
--ipb-color-primary-950: #{$ipb-color-primary-950};
--ipb-color-secondary-100: #{$ipb-color-secondary-100};
--ipb-color-secondary-200: #{$ipb-color-secondary-200};
--ipb-color-secondary-300: #{$ipb-color-secondary-300};
--ipb-color-secondary-400: #{$ipb-color-secondary-400};
--ipb-color-secondary-500: #{$ipb-color-secondary-500};
--ipb-color-secondary-600: #{$ipb-color-secondary-600};
--ipb-color-secondary-700: #{$ipb-color-secondary-700};
--ipb-color-secondary-800: #{$ipb-color-secondary-800};
--ipb-color-secondary-900: #{$ipb-color-secondary-900};
--ipb-color-secondary-950: #{$ipb-color-secondary-950};
--ipb-color-information-100: #{$ipb-color-information-100};
--ipb-color-information-200: #{$ipb-color-information-200};
--ipb-color-information-300: #{$ipb-color-information-300};
--ipb-color-information-400: #{$ipb-color-information-400};
--ipb-color-information-500: #{$ipb-color-information-500};
--ipb-color-information-600: #{$ipb-color-information-600};
--ipb-color-information-700: #{$ipb-color-information-700};
--ipb-color-information-800: #{$ipb-color-information-800};
--ipb-color-information-900: #{$ipb-color-information-900};
--ipb-color-information-950: #{$ipb-color-information-950};
--ipb-color-success-100: #{$ipb-color-success-100};
--ipb-color-success-200: #{$ipb-color-success-200};
--ipb-color-success-300: #{$ipb-color-success-300};
--ipb-color-success-400: #{$ipb-color-success-400};
--ipb-color-success-500: #{$ipb-color-success-500};
--ipb-color-success-600: #{$ipb-color-success-600};
--ipb-color-success-700: #{$ipb-color-success-700};
--ipb-color-success-800: #{$ipb-color-success-800};
--ipb-color-success-900: #{$ipb-color-success-900};
--ipb-color-success-950: #{$ipb-color-success-950};
--ipb-color-warning-100: #{$ipb-color-warning-100};
--ipb-color-warning-200: #{$ipb-color-warning-200};
--ipb-color-warning-300: #{$ipb-color-warning-300};
--ipb-color-warning-400: #{$ipb-color-warning-400};
--ipb-color-warning-500: #{$ipb-color-warning-500};
--ipb-color-warning-600: #{$ipb-color-warning-600};
--ipb-color-warning-700: #{$ipb-color-warning-700};
--ipb-color-warning-800: #{$ipb-color-warning-800};
--ipb-color-warning-900: #{$ipb-color-warning-900};
--ipb-color-warning-950: #{$ipb-color-warning-950};
--ipb-color-danger-100: #{$ipb-color-danger-100};
--ipb-color-danger-200: #{$ipb-color-danger-200};
--ipb-color-danger-300: #{$ipb-color-danger-300};
--ipb-color-danger-400: #{$ipb-color-danger-400};
--ipb-color-danger-500: #{$ipb-color-danger-500};
--ipb-color-danger-600: #{$ipb-color-danger-600};
--ipb-color-danger-700: #{$ipb-color-danger-700};
--ipb-color-danger-800: #{$ipb-color-danger-800};
--ipb-color-danger-900: #{$ipb-color-danger-900};
--ipb-color-danger-950: #{$ipb-color-danger-950};
--ipb-color-error-100: #{$ipb-color-error-100};
--ipb-color-error-200: #{$ipb-color-error-200};
--ipb-color-error-300: #{$ipb-color-error-300};
--ipb-color-error-400: #{$ipb-color-error-400};
--ipb-color-error-500: #{$ipb-color-error-500};
--ipb-color-error-600: #{$ipb-color-error-600};
--ipb-color-error-700: #{$ipb-color-error-700};
--ipb-color-error-800: #{$ipb-color-error-800};
--ipb-color-error-900: #{$ipb-color-error-900};
--ipb-color-error-950: #{$ipb-color-error-950};
--ipb-caselog-color-highlight-1: #{$ipb-caselog-highlight-color-1};
--ipb-caselog-color-highlight-2: #{$ipb-caselog-highlight-color-2};
--ipb-caselog-color-highlight-3: #{$ipb-caselog-highlight-color-3};
--ipb-caselog-color-highlight-4: #{$ipb-caselog-highlight-color-4};
--ipb-caselog-color-highlight-5: #{$ipb-caselog-highlight-color-5};
}

View File

@@ -0,0 +1,13 @@
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* Skeleton palette
CSS variables
These are defined in themes/ as utils/ is included thrice and each time these variables are redeclared in the stylesheets
*/
:root {
--skeleton-start-color: #{$ipb-skeleton-start-color};
--skeleton-stop-color: #{$ipb-skeleton-stop-color};
}

View File

@@ -0,0 +1 @@
@import "datatables";

View File

@@ -0,0 +1,129 @@
$ipb-vendors--datatables--paginate-button--colors: map-get(map-get(map-get($ipb-button-colors, ''), 'default'), '') !default;
$ipb-vendors--datatables--paginate-button--hover--colors: map-get(map-get(map-get($ipb-button-colors, ''), 'default'), ':hover') !default;
$ipb-vendors--datatables--paginate-button--focus--colors: map-get(map-get(map-get($ipb-button-colors, ''), 'default'), ':active') !default;
$ipb-vendors--datatables--paginate-button--disabled--colors: map-get(map-get(map-get($ipb-button-colors, ''), 'default'), ':disabled') !default;
$ipb-vendors--datatables--paginate-button--active--colors: map-get(map-get(map-get($ipb-button-colors, ''), 'primary'), '') !default;
$ipb-vendors--datatables--paginate-button--active--hover--colors: map-get(map-get(map-get($ipb-button-colors, ''), 'primary'), ':hover') !default;
$ipb-vendors-datatables--columns-header--border-bottom-color: $ipb-color-grey-400 !default;
$ipb-vendors-datatables--columns-header--border-bottom: 2px solid $ipb-vendors-datatables--columns-header--border-bottom-color !default;
$ipb-vendors-datatables--row--is-odd--background-color: $ipb-color-white-100 !default;
$ipb-vendors-datatables--row--is-even--background-color: $ipb-color-white-200 !default;
$ipb-vendors-datatables--row--hover--background-color: $ipb-color-blue-100 !default;
$ipb-vendors-datatables--row--is-selected--color: $ipb-color-blue-900 !default;
$ipb-vendors-datatables--row--is-selected--background-color: $ipb-color-blue-200 !default;
$ipb-vendors-datatables--row--is-selected--hover--background-color: $ipb-color-blue-100 !default;
$ipb-vendors-datatables--row-highlight--colors:(
'red': ($ipb-color-red-100, $ipb-color-red-200),
'danger': ($ipb-color-danger-200, $ipb-color-danger-300),
'alert': ($ipb-color-red-200, $ipb-color-red-300),
'orange': ($ipb-color-orange-100, $ipb-color-orange-200),
'warning': ($ipb-color-warning-200, $ipb-color-warning-300),
'blue': ($ipb-color-blue-200, $ipb-color-blue-300),
'info': ($ipb-color-information-200, $ipb-color-information-300),
'green': ($ipb-color-green-100, $ipb-color-green-200),
'success': ($ipb-color-success-100, $ipb-color-success-200),
) !default;
$ipb-vendors-datatables--row-highlight--first-cell--colors:(
'red': ($ipb-color-red-300),
'danger': ($ipb-color-danger-400),
'alert': ($ipb-color-red-400),
'orange': ($ipb-color-orange-300),
'warning': ($ipb-color-warning-400),
'blue': ($ipb-color-blue-400),
'info': ($ipb-color-information-400),
'green': ($ipb-color-green-300),
'success': ($ipb-color-success-300),
) !default;
.table {
> thead > tr > th {
border-bottom: $ipb-vendors-datatables--columns-header--border-bottom !important;
}
}
.table-striped > tbody > tr{
background-color: $ipb-vendors-datatables--row--is-even--background-color;
&:nth-of-type(2n+1) {
background-color: $ipb-vendors-datatables--row--is-odd--background-color;
}
@each $sColorLabel, $aAttributes in $ipb-vendors-datatables--row-highlight--colors {
$sBgColor: nth($aAttributes, 1);
$sBgColorHover: nth($aAttributes, 2);
&.ipb-is-#{$sColorLabel}, &.#{$sColorLabel}{
td {
background-color: $sBgColor;
}
&:hover td {
background-color: $sBgColorHover;
}
}
}
@each $sColorLabel, $aAttributes in $ipb-vendors-datatables--row-highlight--first-cell--colors {
$sBgColor: nth($aAttributes, 1);
&.ipb-is-#{$sColorLabel} td:first-child::before {
content: "";
position: absolute;
left: 0;
top: 0;
width: 3px;
height: 100%;
background-color: $sBgColor;
}
}
&:hover {
background-color: $ipb-vendors-datatables--row--hover--background-color;
}
}
table.dataTable {
> thead, tbody, tfoot {
> tr.selected {
background-color: $ipb-vendors-datatables--row--is-selected--background-color;
color: $ipb-vendors-datatables--row--is-selected--color;
&:hover {
background-color: $ipb-vendors-datatables--row--is-selected--hover--background-color;
}
}
}
}
.pagination > .paginate_button{
> a {
background-color: nth($ipb-vendors--datatables--paginate-button--colors, 1);
color: nth($ipb-vendors--datatables--paginate-button--colors, 2);
border-color: nth($ipb-vendors--datatables--paginate-button--colors, 3);
&:hover {
background-color: nth($ipb-vendors--datatables--paginate-button--hover--colors, 1);
color: nth($ipb-vendors--datatables--paginate-button--hover--colors, 2);
border-color: nth($ipb-vendors--datatables--paginate-button--hover--colors, 3)
}
&:focus {
background-color: nth($ipb-vendors--datatables--paginate-button--focus--colors, 1);
color: nth($ipb-vendors--datatables--paginate-button--focus--colors, 2);
border-color: nth($ipb-vendors--datatables--paginate-button--focus--colors, 3)
}
}
&.disabled > a {
background-color: nth($ipb-vendors--datatables--paginate-button--disabled--colors, 1);
color: nth($ipb-vendors--datatables--paginate-button--disabled--colors, 2);
border-color: nth($ipb-vendors--datatables--paginate-button--disabled--colors, 3)
}
&.active > a {
background-color: nth($ipb-vendors--datatables--paginate-button--active--colors, 1);
color: nth($ipb-vendors--datatables--paginate-button--active--colors, 2);
border-color: nth($ipb-vendors--datatables--paginate-button--active--colors, 3);
&:hover{
background-color: nth($ipb-vendors--datatables--paginate-button--active--hover--colors, 1);
color: nth($ipb-vendors--datatables--paginate-button--active--hover--colors, 2);
border-color: nth($ipb-vendors--datatables--paginate-button--active--hover--colors, 3)
}
}
}

View File

@@ -1,2 +1,3 @@
@import "helpers/all";
@import "variables/all";
@import "variables/all";
@import "mixins/all";

View File

@@ -1,7 +1,14 @@
/* SCSS variables */
/*
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* TODO 3.3.0: move these to individual files */
/* SCSS variables (can be overloaded) */
$ipb-following-dot--size: $common-size-150 !default;
$ipb-following-dot--color: $common-color-orange-600 !default;
$ipb-following-dot--margin-y: auto !default;
$ipb-following-dot--color: $ipb-color-primary-600 !default;
$ipb-following-dot--margin-top: calc(-1 * #{$ipb-following-dot--size} / 2) !default;
$ipb-following-dot--margin-bottom: auto !default;
$ipb-following-dot--margin-x: $common-spacing-300 !default;
@mixin ipb-following-dot($size:$ipb-following-dot--size, $color:$ipb-following-dot--color) {
@@ -12,13 +19,13 @@ $ipb-following-dot--margin-x: $common-spacing-300 !default;
background-color: $color;
border-radius: 50%;
display: inline-block;
margin: $ipb-following-dot--margin-y $ipb-following-dot--margin-x;
margin: $ipb-following-dot--margin-top $ipb-following-dot--margin-x $ipb-following-dot--margin-bottom $ipb-following-dot--margin-x;
vertical-align: middle;
}
}
/* SCSS variables */
$ipb-heavy-animated-border--border-color: $common-color-blue-grey-700 !default;
$ipb-heavy-animated-border--border-color: $ipb-color-blue-grey-700 !default;
$ipb-heavy-animated-border--border-width: $common-size-50 !default;
$ipb-heavy-animated-border--border-radius: $common-border-radius-500 !default;
@@ -44,7 +51,7 @@ $ipb-heavy-animated-border--border-radius: $common-border-radius-500 !default;
/* SCSS variables */
$ipb-toggle-nav--color: white !default;
$ipb-toggle-nav--color: $ipb-color-white-100 !default;
@mixin ipb-toggle-nav($color:$ipb-toggle-nav--color) {
@@ -146,7 +153,7 @@ $ipb-toggle-nav--color: white !default;
}
/* SCSS variables */
$ipb-scrollbar--color: $common-color-grey-200 $common-color-blue-grey-800 !default;
$ipb-scrollbar--color: $ipb-color-grey-200 $ipb-color-blue-grey-800 !default;
@mixin ipb-scrollbar($overflowX:hidden, $overflowY:auto, $scrollbarWidth:thin, $scrollbarColor:$ipb-scrollbar--color) {
overflow-x: $overflowX;

View File

@@ -121,123 +121,4 @@ $ipb-color-purple-800: $common-color-purple-800 !default;
$ipb-color-purple-900: $common-color-purple-900 !default;
$ipb-color-purple-950: $common-color-purple-950 !default;
$ipb-colors: $common-colors;
/* CSS variables */
:root {
--ipb-color-white-100: #{$ipb-color-white-100};
--ipb-color-white-200: #{$ipb-color-white-200};
--ipb-color-transparent: #{$ipb-color-transparent};
--ipb-color-grey-50: #{$ipb-color-grey-50};
--ipb-color-grey-100: #{$ipb-color-grey-100};
--ipb-color-grey-200: #{$ipb-color-grey-200};
--ipb-color-grey-300: #{$ipb-color-grey-300};
--ipb-color-grey-400: #{$ipb-color-grey-400};
--ipb-color-grey-500: #{$ipb-color-grey-500};
--ipb-color-grey-600: #{$ipb-color-grey-600};
--ipb-color-grey-700: #{$ipb-color-grey-700};
--ipb-color-grey-800: #{$ipb-color-grey-800};
--ipb-color-grey-900: #{$ipb-color-grey-900};
--ipb-color-grey-950: #{$ipb-color-grey-950};
--ipb-color-blue-grey-50: #{$ipb-color-blue-grey-50};
--ipb-color-blue-grey-100: #{$ipb-color-blue-grey-100};
--ipb-color-blue-grey-200: #{$ipb-color-blue-grey-200};
--ipb-color-blue-grey-300: #{$ipb-color-blue-grey-300};
--ipb-color-blue-grey-400: #{$ipb-color-blue-grey-400};
--ipb-color-blue-grey-500: #{$ipb-color-blue-grey-500};
--ipb-color-blue-grey-600: #{$ipb-color-blue-grey-600};
--ipb-color-blue-grey-700: #{$ipb-color-blue-grey-700};
--ipb-color-blue-grey-800: #{$ipb-color-blue-grey-800};
--ipb-color-blue-grey-900: #{$ipb-color-blue-grey-900};
--ipb-color-blue-grey-950: #{$ipb-color-blue-grey-950};
--ipb-color-blue-100: #{$ipb-color-blue-100};
--ipb-color-blue-200: #{$ipb-color-blue-200};
--ipb-color-blue-300: #{$ipb-color-blue-300};
--ipb-color-blue-400: #{$ipb-color-blue-400};
--ipb-color-blue-500: #{$ipb-color-blue-500};
--ipb-color-blue-600: #{$ipb-color-blue-600};
--ipb-color-blue-700: #{$ipb-color-blue-700};
--ipb-color-blue-800: #{$ipb-color-blue-800};
--ipb-color-blue-900: #{$ipb-color-blue-900};
--ipb-color-blue-950: #{$ipb-color-blue-950};
--ipb-color-cyan-100: #{$ipb-color-cyan-100};
--ipb-color-cyan-200: #{$ipb-color-cyan-200};
--ipb-color-cyan-300: #{$ipb-color-cyan-300};
--ipb-color-cyan-400: #{$ipb-color-cyan-400};
--ipb-color-cyan-500: #{$ipb-color-cyan-500};
--ipb-color-cyan-600: #{$ipb-color-cyan-600};
--ipb-color-cyan-700: #{$ipb-color-cyan-700};
--ipb-color-cyan-800: #{$ipb-color-cyan-800};
--ipb-color-cyan-900: #{$ipb-color-cyan-900};
--ipb-color-cyan-950: #{$ipb-color-cyan-950};
--ipb-color-green-100: #{$ipb-color-green-100};
--ipb-color-green-200: #{$ipb-color-green-200};
--ipb-color-green-300: #{$ipb-color-green-300};
--ipb-color-green-400: #{$ipb-color-green-400};
--ipb-color-green-500: #{$ipb-color-green-500};
--ipb-color-green-600: #{$ipb-color-green-600};
--ipb-color-green-700: #{$ipb-color-green-700};
--ipb-color-green-800: #{$ipb-color-green-800};
--ipb-color-green-900: #{$ipb-color-green-900};
--ipb-color-green-950: #{$ipb-color-green-950};
--ipb-color-orange-100: #{$ipb-color-orange-100};
--ipb-color-orange-200: #{$ipb-color-orange-200};
--ipb-color-orange-300: #{$ipb-color-orange-300};
--ipb-color-orange-400: #{$ipb-color-orange-400};
--ipb-color-orange-500: #{$ipb-color-orange-500};
--ipb-color-orange-600: #{$ipb-color-orange-600};
--ipb-color-orange-700: #{$ipb-color-orange-700};
--ipb-color-orange-800: #{$ipb-color-orange-800};
--ipb-color-orange-900: #{$ipb-color-orange-900};
--ipb-color-orange-950: #{$ipb-color-orange-950};
--ipb-color-red-100: #{$ipb-color-red-100};
--ipb-color-red-200: #{$ipb-color-red-200};
--ipb-color-red-300: #{$ipb-color-red-300};
--ipb-color-red-400: #{$ipb-color-red-400};
--ipb-color-red-500: #{$ipb-color-red-500};
--ipb-color-red-600: #{$ipb-color-red-600};
--ipb-color-red-700: #{$ipb-color-red-700};
--ipb-color-red-800: #{$ipb-color-red-800};
--ipb-color-red-900: #{$ipb-color-red-900};
--ipb-color-red-950: #{$ipb-color-red-950};
--ipb-color-pink-100: #{$ipb-color-pink-100};
--ipb-color-pink-200: #{$ipb-color-pink-200};
--ipb-color-pink-300: #{$ipb-color-pink-300};
--ipb-color-pink-400: #{$ipb-color-pink-400};
--ipb-color-pink-500: #{$ipb-color-pink-500};
--ipb-color-pink-600: #{$ipb-color-pink-600};
--ipb-color-pink-700: #{$ipb-color-pink-700};
--ipb-color-pink-800: #{$ipb-color-pink-800};
--ipb-color-pink-900: #{$ipb-color-pink-900};
--ipb-color-pink-950: #{$ipb-color-pink-950};
--ipb-color-yellow-100: #{$ipb-color-yellow-100};
--ipb-color-yellow-200: #{$ipb-color-yellow-200};
--ipb-color-yellow-300: #{$ipb-color-yellow-300};
--ipb-color-yellow-400: #{$ipb-color-yellow-400};
--ipb-color-yellow-500: #{$ipb-color-yellow-500};
--ipb-color-yellow-600: #{$ipb-color-yellow-600};
--ipb-color-yellow-700: #{$ipb-color-yellow-700};
--ipb-color-yellow-800: #{$ipb-color-yellow-800};
--ipb-color-yellow-900: #{$ipb-color-yellow-900};
--ipb-color-yellow-950: #{$ipb-color-yellow-950};
--ipb-color-purple-100: #{$ipb-color-purple-100};
--ipb-color-purple-200: #{$ipb-color-purple-200};
--ipb-color-purple-300: #{$ipb-color-purple-300};
--ipb-color-purple-400: #{$ipb-color-purple-400};
--ipb-color-purple-500: #{$ipb-color-purple-500};
--ipb-color-purple-600: #{$ipb-color-purple-600};
--ipb-color-purple-700: #{$ipb-color-purple-700};
--ipb-color-purple-800: #{$ipb-color-purple-800};
--ipb-color-purple-900: #{$ipb-color-purple-900};
--ipb-color-purple-950: #{$ipb-color-purple-950};
}
$ipb-colors: $common-colors;

View File

@@ -57,25 +57,4 @@ $ipb-lifecycle-states-colors: (
'primary-color': $ipb-lifecycle-inactive-state-primary-color,
'secondary-color': $ipb-lifecycle-inactive-state-secondary-color,
),
);
/* CSS varibales */
:root {
--ipb-lifecycle-new-state-primary-color: #{$ipb-lifecycle-new-state-primary-color};
--ipb-lifecycle-new-state-secondary-color: #{$ipb-lifecycle-new-state-secondary-color};
--ipb-lifecycle-neutral-state-primary-color: #{$ipb-lifecycle-neutral-state-primary-color};
--ipb-lifecycle-neutral-state-secondary-color: #{$ipb-lifecycle-neutral-state-secondary-color};
--ipb-lifecycle-waiting-state-primary-color: #{$ipb-lifecycle-waiting-state-primary-color};
--ipb-lifecycle-waiting-state-secondary-color: #{$ipb-lifecycle-waiting-state-secondary-color};
--ipb-lifecycle-success-state-primary-color: #{$ipb-lifecycle-success-state-primary-color};
--ipb-lifecycle-success-state-secondary-color: #{$ipb-lifecycle-success-state-secondary-color};
--ipb-lifecycle-failure-state-primary-color: #{$ipb-lifecycle-failure-state-primary-color};
--ipb-lifecycle-failure-state-secondary-color: #{$ipb-lifecycle-failure-state-secondary-color};
--ipb-lifecycle-frozen-state-primary-color: #{$ipb-lifecycle-frozen-state-primary-color};
--ipb-lifecycle-frozen-state-secondary-color: #{$ipb-lifecycle-frozen-state-secondary-color};
--ipb-lifecycle-active-state-primary-color: #{$ipb-lifecycle-active-state-primary-color};
--ipb-lifecycle-active-state-secondary-color: #{$ipb-lifecycle-active-state-secondary-color};
--ipb-lifecycle-inactive-state-primary-color: #{$ipb-lifecycle-inactive-state-primary-color};
--ipb-lifecycle-inactive-state-secondary-color: #{$ipb-lifecycle-inactive-state-secondary-color};
}
);

View File

@@ -98,89 +98,3 @@ $ipb-caselog-highlight-color-5: $common-caselog-highlight-color-5 !default;
$ipb-caselog-highlight-color-6: $common-caselog-highlight-color-6 !default;
$ipb-caselog-highlight-color-7: $common-caselog-highlight-color-7 !default;
$ipb-caselog-highlight-colors: $common-caselog-highlight-colors !default;
/* CSS variables */
:root {
--ipb-color-primary-100: #{$ipb-color-primary-100};
--ipb-color-primary-200: #{$ipb-color-primary-200};
--ipb-color-primary-300: #{$ipb-color-primary-300};
--ipb-color-primary-400: #{$ipb-color-primary-400};
--ipb-color-primary-500: #{$ipb-color-primary-500};
--ipb-color-primary-600: #{$ipb-color-primary-600};
--ipb-color-primary-700: #{$ipb-color-primary-700};
--ipb-color-primary-800: #{$ipb-color-primary-800};
--ipb-color-primary-900: #{$ipb-color-primary-900};
--ipb-color-primary-950: #{$ipb-color-primary-950};
--ipb-color-secondary-100: #{$ipb-color-secondary-100};
--ipb-color-secondary-200: #{$ipb-color-secondary-200};
--ipb-color-secondary-300: #{$ipb-color-secondary-300};
--ipb-color-secondary-400: #{$ipb-color-secondary-400};
--ipb-color-secondary-500: #{$ipb-color-secondary-500};
--ipb-color-secondary-600: #{$ipb-color-secondary-600};
--ipb-color-secondary-700: #{$ipb-color-secondary-700};
--ipb-color-secondary-800: #{$ipb-color-secondary-800};
--ipb-color-secondary-900: #{$ipb-color-secondary-900};
--ipb-color-secondary-950: #{$ipb-color-secondary-950};
--ipb-color-information-100: #{$ipb-color-information-100};
--ipb-color-information-200: #{$ipb-color-information-200};
--ipb-color-information-300: #{$ipb-color-information-300};
--ipb-color-information-400: #{$ipb-color-information-400};
--ipb-color-information-500: #{$ipb-color-information-500};
--ipb-color-information-600: #{$ipb-color-information-600};
--ipb-color-information-700: #{$ipb-color-information-700};
--ipb-color-information-800: #{$ipb-color-information-800};
--ipb-color-information-900: #{$ipb-color-information-900};
--ipb-color-information-950: #{$ipb-color-information-950};
--ipb-color-success-100: #{$ipb-color-success-100};
--ipb-color-success-200: #{$ipb-color-success-200};
--ipb-color-success-300: #{$ipb-color-success-300};
--ipb-color-success-400: #{$ipb-color-success-400};
--ipb-color-success-500: #{$ipb-color-success-500};
--ipb-color-success-600: #{$ipb-color-success-600};
--ipb-color-success-700: #{$ipb-color-success-700};
--ipb-color-success-800: #{$ipb-color-success-800};
--ipb-color-success-900: #{$ipb-color-success-900};
--ipb-color-success-950: #{$ipb-color-success-950};
--ipb-color-warning-100: #{$ipb-color-warning-100};
--ipb-color-warning-200: #{$ipb-color-warning-200};
--ipb-color-warning-300: #{$ipb-color-warning-300};
--ipb-color-warning-400: #{$ipb-color-warning-400};
--ipb-color-warning-500: #{$ipb-color-warning-500};
--ipb-color-warning-600: #{$ipb-color-warning-600};
--ipb-color-warning-700: #{$ipb-color-warning-700};
--ipb-color-warning-800: #{$ipb-color-warning-800};
--ipb-color-warning-900: #{$ipb-color-warning-900};
--ipb-color-warning-950: #{$ipb-color-warning-950};
--ipb-color-danger-100: #{$ipb-color-danger-100};
--ipb-color-danger-200: #{$ipb-color-danger-200};
--ipb-color-danger-300: #{$ipb-color-danger-300};
--ipb-color-danger-400: #{$ipb-color-danger-400};
--ipb-color-danger-500: #{$ipb-color-danger-500};
--ipb-color-danger-600: #{$ipb-color-danger-600};
--ipb-color-danger-700: #{$ipb-color-danger-700};
--ipb-color-danger-800: #{$ipb-color-danger-800};
--ipb-color-danger-900: #{$ipb-color-danger-900};
--ipb-color-danger-950: #{$ipb-color-danger-950};
--ipb-color-error-100: #{$ipb-color-error-100};
--ipb-color-error-200: #{$ipb-color-error-200};
--ipb-color-error-300: #{$ipb-color-error-300};
--ipb-color-error-400: #{$ipb-color-error-400};
--ipb-color-error-500: #{$ipb-color-error-500};
--ipb-color-error-600: #{$ipb-color-error-600};
--ipb-color-error-700: #{$ipb-color-error-700};
--ipb-color-error-800: #{$ipb-color-error-800};
--ipb-color-error-900: #{$ipb-color-error-900};
--ipb-color-error-950: #{$ipb-color-error-950};
--ipb-caselog-color-highlight-1: #{$ipb-caselog-highlight-color-1};
--ipb-caselog-color-highlight-2: #{$ipb-caselog-highlight-color-2};
--ipb-caselog-color-highlight-3: #{$ipb-caselog-highlight-color-3};
--ipb-caselog-color-highlight-4: #{$ipb-caselog-highlight-color-4};
--ipb-caselog-color-highlight-5: #{$ipb-caselog-highlight-color-5};
}

View File

@@ -7,11 +7,4 @@
/* - Colors used by skeletons svg to display placeholders */
$ipb-skeleton-start-color: $common-skeleton-start-color !default;
$ipb-skeleton-stop-color: $common-skeleton-stop-color !default;
/* CSS variables */
/* Skeleton CSS3 variables are not ipb prefixed as they are not iTop backoffice exclusives*/
:root {
--skeleton-start-color: #{$ipb-skeleton-start-color};
--skeleton-stop-color: #{$ipb-skeleton-stop-color};
}
$ipb-skeleton-stop-color: $common-skeleton-stop-color !default;

View File

@@ -1,49 +1,14 @@
/*
* @copyright Copyright (C) 2010-2024 Combodo SAS
* @copyright Copyright (C) 2010-2025 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
/* SCSS variables (can be overloaded) */
$ipb-vendors-datatables--cell--padding-x: $common-spacing-400 !default;
$ipb-vendors-datatables--cell--padding-y: 10px !default;
$ipb-vendors-datatables--columns-header--border-bottom: 2px solid $common-color-grey-400 !default;
$ipb-vendors--datatables--paginate-button--colors: map-get(map-get(map-get($ipb-button-colors, ''), 'default'), '') !default;
$ipb-vendors--datatables--paginate-button--hover--colors: map-get(map-get(map-get($ipb-button-colors, ''), 'default'), ':hover') !default;
$ipb-vendors--datatables--paginate-button--focus--colors: map-get(map-get(map-get($ipb-button-colors, ''), 'default'), ':active') !default;
$ipb-vendors--datatables--paginate-button--disabled--colors: map-get(map-get(map-get($ipb-button-colors, ''), 'default'), ':disabled') !default;
$ipb-vendors--datatables--paginate-button--active--colors: map-get(map-get(map-get($ipb-button-colors, ''), 'primary'), '') !default;
$ipb-vendors--datatables--paginate-button--active--hover--colors: map-get(map-get(map-get($ipb-button-colors, ''), 'primary'), ':hover') !default;
$ipb-vendors-datatables--row--background-color--is-odd: $common-color-white-100 !default;
$ipb-vendors-datatables--row--background-color--is-even: $common-color-white-200 !default;
$ipb-vendors-datatables--row-highlight--first-cell--width: 3px !default;
$ipb-vendors-datatables--row-highlight--colors:(
'red': ($common-color-red-100, $common-color-red-200),
'danger': ($common-color-danger-200, $common-color-danger-300),
'alert': ($common-color-red-200, $common-color-red-300),
'orange': ($common-color-orange-100, $common-color-orange-200),
'warning': ($common-color-warning-200, $common-color-warning-300),
'blue': ($common-color-blue-200, $common-color-blue-300),
'info': ($common-color-information-200, $common-color-information-300),
'green': ($common-color-green-100, $common-color-green-200),
'success': ($common-color-success-100, $common-color-success-200),
) !default;
$ipb-vendors-datatables--row-highlight--first-cell--colors:(
'red': ($common-color-red-300),
'danger': ($common-color-danger-400),
'alert': ($common-color-red-400),
'orange': ($common-color-orange-300),
'warning': ($common-color-warning-400),
'blue': ($common-color-blue-400),
'info': ($common-color-information-400),
'green': ($common-color-green-300),
'success': ($common-color-success-300),
) !default;
.table {
> thead, tbody, tfoot {
> tr {
@@ -54,83 +19,13 @@ $ipb-vendors-datatables--row-highlight--first-cell--colors:(
}
}
}
> thead > tr > th {
border-bottom: $ipb-vendors-datatables--columns-header--border-bottom !important;
}
}
.table-striped > tbody > tr{
background-color: $ipb-vendors-datatables--row--background-color--is-even;
cursor: pointer;
&:nth-of-type(2n+1) {
background-color: $ipb-vendors-datatables--row--background-color--is-odd;
}
@each $sColorLabel, $aAttributes in $ipb-vendors-datatables--row-highlight--colors {
$sBgColor: nth($aAttributes, 1);
$sBgColorHover: nth($aAttributes, 2);
&.ipb-is-#{$sColorLabel}, &.#{$sColorLabel}{
td {
background-color: $sBgColor;
}
&:hover td {
background-color: $sBgColorHover;
}
}
}
@each $sColorLabel, $aAttributes in $ipb-vendors-datatables--row-highlight--first-cell--colors {
$sBgColor: nth($aAttributes, 1);
&.ipb-is-#{$sColorLabel} td:first-child::before {
content: "";
position: absolute;
left: 0;
top: 0;
width: 3px;
height: 100%;
background-color: $sBgColor;
}
}
&:hover {
background-color: $common-color-blue-100;
}
}
.pagination > .paginate_button{
> a {
background-color: nth($ipb-vendors--datatables--paginate-button--colors, 1);
color: nth($ipb-vendors--datatables--paginate-button--colors, 2);
border-color: nth($ipb-vendors--datatables--paginate-button--colors, 3);
&:hover {
background-color: nth($ipb-vendors--datatables--paginate-button--hover--colors, 1);
color: nth($ipb-vendors--datatables--paginate-button--hover--colors, 2);
border-color: nth($ipb-vendors--datatables--paginate-button--hover--colors, 3)
}
&:focus {
background-color: nth($ipb-vendors--datatables--paginate-button--focus--colors, 1);
color: nth($ipb-vendors--datatables--paginate-button--focus--colors, 2);
border-color: nth($ipb-vendors--datatables--paginate-button--focus--colors, 3)
}
}
&.disabled > a {
background-color: nth($ipb-vendors--datatables--paginate-button--disabled--colors, 1);
color: nth($ipb-vendors--datatables--paginate-button--disabled--colors, 2);
border-color: nth($ipb-vendors--datatables--paginate-button--disabled--colors, 3)
}
&.active > a {
background-color: nth($ipb-vendors--datatables--paginate-button--active--colors, 1);
color: nth($ipb-vendors--datatables--paginate-button--active--colors, 2);
border-color: nth($ipb-vendors--datatables--paginate-button--active--colors, 3);
&:hover{
background-color: nth($ipb-vendors--datatables--paginate-button--active--hover--colors, 1);
color: nth($ipb-vendors--datatables--paginate-button--active--hover--colors, 2);
border-color: nth($ipb-vendors--datatables--paginate-button--active--hover--colors, 3)
}
}
}
.dataTables_length, .dataTables_filter, .dataTables_info {
@extend %common-font-ral-nor-150;
}
}

View File

@@ -245,6 +245,10 @@ class NavigationMenuElement extends HTMLElement {
}
Expand(bSaveUserPreference = false) {
// save user preference
if (bSaveUserPreference) {
oUserPreferences.setPreference('portal.navigation_menu.expanded', 'expanded');
}
// sync attribute
if (this.getAttribute(NavigationMenuElement.DATA_EXPANDED_STATE) !== 'expanded') {
this.setAttribute(NavigationMenuElement.DATA_EXPANDED_STATE, 'expanded');
@@ -257,13 +261,13 @@ class NavigationMenuElement extends HTMLElement {
// dispatch events
window.dispatchEvent(new Event('resize')); // do layout
this.dispatchEvent(new CustomEvent("state", {detail: 'expanded'}));
// save user preference
if (bSaveUserPreference) {
SetUserPreference('portal.navigation_menu.expanded', 'expanded', true);
}
}
Collapse(bSaveUserPreference = false) {
// save user preference
if (bSaveUserPreference) {
oUserPreferences.setPreference('portal.navigation_menu.expanded', 'collapsed');
}
// sync attribute
if (this.getAttribute(NavigationMenuElement.DATA_EXPANDED_STATE) !== 'collapsed') {
this.setAttribute(NavigationMenuElement.DATA_EXPANDED_STATE, 'collapsed');
@@ -276,10 +280,6 @@ class NavigationMenuElement extends HTMLElement {
// dispatch events
window.dispatchEvent(new Event('resize')); // do layout
this.dispatchEvent(new CustomEvent("state", {detail: 'collapsed'}));
// save user preference
if (bSaveUserPreference) {
SetUserPreference('portal.navigation_menu.expanded', 'collapsed', true);
}
}
IsExpanded() {

View File

@@ -0,0 +1,50 @@
/*
* Copyright (C) 2013-2024 Combodo SAS
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
*/
class UserPreferences {
constructor(sUrl) {
this.sUrl = sUrl;
}
setPreference(key, value) {
let $data = new FormData();
$data.append("key", key);
$data.append("value", value);
fetch(this.sUrl, {
method: "POST",
body: $data,
}).then(
(response) => {
if (!response.ok) {
throw new Error(`Network response was not ok: ${response.statusText}`);
}
return response.json();
}
).catch(
(error) => {
console.error('Unable to set user preference:', error);
}
);
}
}

View File

@@ -0,0 +1,65 @@
<?php
/**
* Copyright (C) 2013-2024 Combodo SAS
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
*/
namespace Combodo\iTop\Portal\Controller;
use appUserPreferences;
use Exception;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController as SymfonyAbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
/**
* Class PreferencesController
*
* @package Combodo\iTop\Portal\Controller
* @since 3.3.0
*/
class PreferencesController extends SymfonyAbstractController
{
/**
* Set a preference for the current user.
*
* @param \Symfony\Component\HttpFoundation\Request $oRequest
*
* @return \Symfony\Component\HttpFoundation\JsonResponse
*/
public function SetPreferenceAction(Request $oRequest): JsonResponse
{
$sStatus = 'success';
// retrieve the parameters from the request
$sKey = $oRequest->request->get('key');
$sValue = $oRequest->request->get('value');
// set user preference
try{
appUserPreferences::SetPref($sKey, $sValue);
}
catch(Exception){
$sStatus = 'error';
}
return new JsonResponse([
'status' => $sStatus,
]);
}
}

View File

@@ -77,7 +77,7 @@ class Basic extends AbstractConfiguration
'id' => $_ENV['PORTAL_ID'],
'ui_version' => '2025',
'ui_settings' => [
'navigation_menu' => 'horizontal',
'navigation_menu' => 'vertical',
],
'name' => 'Page:DefaultTitle',
'logo' => Branding::GetPortalLogoAbsoluteUrl(),

View File

@@ -26,7 +26,7 @@
{% endblock %}
{% block pMainContentHolder%}
{% if iItemsCount > 0 or sSearchValue is not null %}
{% if iItemsCount > 0 or sSearchValue is not empty %}
{% block bBrowseHeaderContent %}
{% endblock %}
<div class="ipb-panel ipb-browse-brick-panel panel panel-default">
@@ -36,7 +36,8 @@
{% else %}
<div class="ipb-panel panel panel-default">
<div class="ipb-panel--body panel-body">
<h3 class="text-center">{{ 'Brick:Portal:Browse:Filter:NoData'|dict_s }}</h3>
<div class="ipb-browse-brick--no-item--illustration ipb-svg-illustration--container">{{ source('illustrations/undraw_empty_alternative.svg') }}</div>
<h3 class="ipb-browse-brick--no-item--text text-center">{{ 'Brick:Portal:Browse:Filter:NoData'|dict_s }}</h3>
</div>
</div>
{% endif %}

View File

@@ -4,7 +4,7 @@
{% block pMainContentHolder %}
{% if aGroupingTabsValues|length > 1 %}
<ul class="ipb-manage-brick--tabs nav nav-pills grouping_tabs">
<ul class="ipb-manage-brick--tabs ipb-tabs nav nav-pills grouping_tabs">
{% for aGroupingTab in aGroupingTabsValues %}
<li{% if sGroupingTab is defined and sGroupingTab == aGroupingTab.value %} class="active"{% endif %} data-id="{{ aGroupingTab.value }}" data-label="{{ aGroupingTab.label }}" data-item-count="{{ aGroupingTab.count }}">
<a href="{{ app.url_generator.generate('p_manage_brick_display_as', {'sBrickId': sBrickId, 'sDisplayMode': sDisplayMode, 'sGroupingTab': aGroupingTab.value}) }}"
@@ -43,9 +43,10 @@
{% endif %}
{% if iTableCount == 0 %}
<div class="panel panel-default">
<div class="ipb-panel panel panel-default">
<div class="panel-body">
<h3 class="text-center">{{ 'Brick:Portal:Manage:Table:NoData'|dict_s }}</h3>
<div class="ipb-manage-brick--no-result--illustration ipb-svg-illustration--container">{{ source("illustrations/undraw_empty.svg") }}</div>
<h3 class="ipb-manage-brick--no-result--text text-center">{{ 'Brick:Portal:Manage:Table:NoData'|dict_s }}</h3>
</div>
</div>
{% endif %}

View File

@@ -10,15 +10,18 @@
<p id="export-error" class="ipb-alert alert alert-danger" role="alert"></p>
</div>
<div id="export-feedback">
<div id="export-feedback" class="ipb-export--feedback">
<p id="export-excel-warning" class="ipb-alert alert alert-warning" role="alert">{{ 'UI:Bulk:Export:MaliciousInjection:Alert:Message'|dict_format(sWikiUrl)|raw }}</p>
<p class="export-message" style="text-align:center;">{{ 'ExcelExport:PreparingExport'|dict_s }}</p>
<div class="progress">
<div class="progress-bar" role="progressbar" style="width: 0%"
<div class="ipb-export--illustration ipb-svg-illustration--container">
{{ source('illustrations/undraw_export-files.svg') }}
</div>
<div class="ipb-progress progress">
<div class="ipb-progress--bar progress-bar" role="progressbar" style="width: 0%"
aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
<span class="progress-message">0%</span>
</div>
</div>
<p class="ipb-export-message export-message" style="text-align:center;">{{ 'ExcelExport:PreparingExport'|dict_s }}</p>
</div>
</div>
<div class="modal-footer">

View File

@@ -32,7 +32,7 @@
{% endif %}
</div>
<ul class="nav nav-pills _tabs">
<ul class="ipb-tabs nav nav-pills _tabs">
{% if aTabsValues is defined and aTabsValues|length > 0 %}
<li{% if sTab == "user-info" %} class="active"{% endif %} data-id="user-info" data-label="{{ 'MyAccount:UserInfo:Tab:Title'|dict_s }}">
<a href="{{ app.url_generator.generate('p_user_profile_brick', {'sBrickId': oBrick.GetId(), 'sDisplayMode': '_self', 'sTab': "user-info"}) }}"

View File

@@ -160,6 +160,8 @@
<script type="text/javascript" src="{{ app['combodo.absolute_url'] ~ 'node_modules/clipboard/dist/clipboard.min.js'|add_itop_version }}"></script>
<script type="text/javascript" src="{{ app['combodo.absolute_url'] ~ 'js/clipboardwidget.js'|add_itop_version }}"></script>
<script type="text/javascript" src="{{ app['combodo.portal.base.absolute_url'] ~ 'js/portal-clipboard.js'|add_itop_version }}"></script>
{# User Preferences #}
<script type="text/javascript" src="{{ app['combodo.portal.base.absolute_url'] ~ 'js/user_preferences.js'|add_itop_version }}"></script>
{# custom elements #}
<script type="text/javascript" src="{{ app['combodo.portal.base.absolute_url'] ~ 'js/custom_elements/base_element.js'|add_itop_version }}"></script>
<script type="text/javascript" src="{{ app['combodo.portal.base.absolute_url'] ~ 'js/custom_elements/tile_element.js'|add_itop_version }}"></script>
@@ -279,8 +281,8 @@
{
return '{{ app['url_generator'].generate('p_session_message_add')|raw }}';
};
// used to allow SetUserPreferences to be called from the UI
const oUserPreferences = JSON.parse('{{ user_preferences|json_encode|e('js') }}');
// user preferences object
const oUserPreferences = new UserPreferences('{{ app['url_generator'].generate('p_preferences_set_preference')|raw }}');
/**
* @param sUrl {string} The URL to append the new param to
* @param sParamName {string} Name of the parameter

View File

@@ -25,6 +25,7 @@ return array(
'Combodo\\iTop\\Portal\\Controller\\DefaultController' => $baseDir . '/src/Controller/DefaultController.php',
'Combodo\\iTop\\Portal\\Controller\\ManageBrickController' => $baseDir . '/src/Controller/ManageBrickController.php',
'Combodo\\iTop\\Portal\\Controller\\ObjectController' => $baseDir . '/src/Controller/ObjectController.php',
'Combodo\\iTop\\Portal\\Controller\\PreferencesController' => $baseDir . '/src/Controller/PreferencesController.php',
'Combodo\\iTop\\Portal\\Controller\\SessionMessageController' => $baseDir . '/src/Controller/SessionMessageController.php',
'Combodo\\iTop\\Portal\\Controller\\UserProfileBrickController' => $baseDir . '/src/Controller/UserProfileBrickController.php',
'Combodo\\iTop\\Portal\\DataCollector\\PortalCollector' => $baseDir . '/src/DataCollector/PortalCollector.php',

View File

@@ -45,6 +45,7 @@ class ComposerStaticInitCombodo_ItopPortalBase_Portal
'Combodo\\iTop\\Portal\\Controller\\DefaultController' => __DIR__ . '/../..' . '/src/Controller/DefaultController.php',
'Combodo\\iTop\\Portal\\Controller\\ManageBrickController' => __DIR__ . '/../..' . '/src/Controller/ManageBrickController.php',
'Combodo\\iTop\\Portal\\Controller\\ObjectController' => __DIR__ . '/../..' . '/src/Controller/ObjectController.php',
'Combodo\\iTop\\Portal\\Controller\\PreferencesController' => __DIR__ . '/../..' . '/src/Controller/PreferencesController.php',
'Combodo\\iTop\\Portal\\Controller\\SessionMessageController' => __DIR__ . '/../..' . '/src/Controller/SessionMessageController.php',
'Combodo\\iTop\\Portal\\Controller\\UserProfileBrickController' => __DIR__ . '/../..' . '/src/Controller/UserProfileBrickController.php',
'Combodo\\iTop\\Portal\\DataCollector\\PortalCollector' => __DIR__ . '/../..' . '/src/DataCollector/PortalCollector.php',

View File

@@ -3,7 +3,7 @@
'name' => '__root__',
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'reference' => '6d8d747575dc9cd4b53dc9592eb646b692d3ea86',
'reference' => 'c203329236dfb3c05aa02ac73ab12dd1fe52143e',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -13,7 +13,7 @@
'__root__' => array(
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'reference' => '6d8d747575dc9cd4b53dc9592eb646b692d3ea86',
'reference' => 'c203329236dfb3c05aa02ac73ab12dd1fe52143e',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 21 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -496,6 +496,7 @@ $(function()
{
sHtml += '<li><a href="#" id="'+sPopupMenuId+'_attachment">'+this.options.export_as_attachment.label+'</a></li>';
}
sHtml += '<li><a href="#" id="' + sPopupMenuId + '_bob" href="' + this.options.export_as_bob.url + '">' + this.options.export_as_bob.label + '</a></li>';
//sHtml += '<li><a href="#" id="'+sPopupMenuId+'_reload">Refresh</a></li>';
sHtml += '</ul></li></ul></div>';
sHtml += '</div>';
@@ -507,6 +508,9 @@ $(function()
var me = this;
$('#' + sPopupMenuId + '_bob').on('click', function () {
me.export_as_bob();
});
$('#'+sPopupMenuId+'_pdf').on('click', function() { me.export_as_pdf(); });
$('#'+sPopupMenuId+'_attachment').on('click', function() { me.export_as_attachment(); });
$('#'+sId+'_zoom').slider({ min: 0, max: 5, value: 1, step: 0.25, change: function() { me._on_zoom_change( $(this).slider('value')); } });
@@ -575,8 +579,47 @@ $(function()
});
},
export_as_pdf: function()
export_as_bob: function ()
{
var sId = this.element.attr('id');
var me = this;
var oParams = {};
oParams.g = this.options.grouping_threshold;
oParams.context_key = this.options.context_key;
oParams.transaction_id = this.options.transaction_id;
oParams.contexts = {};
$('#' + sId + '_contexts').multiselect('getChecked').each(function () {
oParams.contexts[$(this).val()] = me.options.additional_contexts[$(this).val()].oql;
});
oParams.excluded_classes = {};
for (k in this.options.excluded_classes) {
oParams.excluded_classes[k] = this.options.excluded_classes[k];
}
oParams.sources = {};
for (var k1 in this.options.sources) {
oParams.sources[k1] = {};
for (var k2 in this.options.sources[k1]) {
oParams.sources[k1][k2] = this.options.sources[k1][k2];
}
}
oParams.excluded = {};
for (var k1 in this.options.excluded) {
oParams.options.excluded[k1] = {};
for (var k2 in this.options.excluded[k1]) {
oParams.excluded[k1][k2] = this.options.excluded[k1][k2];
}
}
oParams.list_classes = {};
$("#dh_flash_criterion_outer [name= 'excluded[]']").each(function (index, element) {
oParams.list_classes[index] = $(element).val();
});
$.post(this.options.export_as_bob.url, oParams, function (data) {
$('body').append(data);
});
},
export_as_pdf: function () {
this._export_dlg(this.options.labels.export_pdf_title, this.options.export_as_pdf.url, 'download_pdf');
},
_export_dlg: function(sTitle, sSubmitUrl, sOperation)

View File

@@ -595,6 +595,22 @@ function ExportInitButton(sSelector) {
});
}
function ExportImpactButton(sSelector) {
$(sSelector).on('click', function () {
var form = $('#export-form');
var actionUrl = form.attr('action');
$.ajax({
type: "POST",
url: actionUrl,
data: form.serialize(), // serializes the form's elements.
success: function (data) {
$(sSelector).html(data); // show response from the php script.
}
});
});
}
/**
* @deprecated 3.0.0 N°4367 deprecated, use {@see CombodoSanitizer.EscapeHtml} instead
*

View File

@@ -502,6 +502,7 @@ return array(
'Combodo\\iTop\\Service\\Events\\EventService' => $baseDir . '/sources/Service/Events/EventService.php',
'Combodo\\iTop\\Service\\Events\\EventServiceLog' => $baseDir . '/sources/Service/Events/EventServiceLog.php',
'Combodo\\iTop\\Service\\Events\\iEventServiceSetup' => $baseDir . '/sources/Service/Events/iEventServiceSetup.php',
'Combodo\\iTop\\Service\\Export\\ExportController' => $baseDir . '/sources/Controller/Export/ExportController.php',
'Combodo\\iTop\\Service\\Import\\CSVImportPageProcessor' => $baseDir . '/sources/Service/Import/CSVImportPageProcessor.php',
'Combodo\\iTop\\Service\\InterfaceDiscovery\\InterfaceDiscovery' => $baseDir . '/sources/Service/InterfaceDiscovery/InterfaceDiscovery.php',
'Combodo\\iTop\\Service\\Links\\LinkSetDataTransformer' => $baseDir . '/sources/Service/Links/LinkSetDataTransformer.php',
@@ -3230,5 +3231,5 @@ return array(
'privUITransactionFile' => $baseDir . '/application/transaction.class.inc.php',
'privUITransactionSession' => $baseDir . '/application/transaction.class.inc.php',
'utils' => $baseDir . '/application/utils.inc.php',
'<EFBFBD>' => $vendorDir . '/symfony/cache/Traits/ValueWrapper.php',
'©' => $vendorDir . '/symfony/cache/Traits/ValueWrapper.php',
);

View File

@@ -892,6 +892,7 @@ class ComposerStaticInit7f81b4a2a468a061c306af5e447a9a9f
'Combodo\\iTop\\Service\\Events\\EventService' => __DIR__ . '/../..' . '/sources/Service/Events/EventService.php',
'Combodo\\iTop\\Service\\Events\\EventServiceLog' => __DIR__ . '/../..' . '/sources/Service/Events/EventServiceLog.php',
'Combodo\\iTop\\Service\\Events\\iEventServiceSetup' => __DIR__ . '/../..' . '/sources/Service/Events/iEventServiceSetup.php',
'Combodo\\iTop\\Service\\Export\\ExportController' => __DIR__ . '/../..' . '/sources/Controller/Export/ExportController.php',
'Combodo\\iTop\\Service\\Import\\CSVImportPageProcessor' => __DIR__ . '/../..' . '/sources/Service/Import/CSVImportPageProcessor.php',
'Combodo\\iTop\\Service\\InterfaceDiscovery\\InterfaceDiscovery' => __DIR__ . '/../..' . '/sources/Service/InterfaceDiscovery/InterfaceDiscovery.php',
'Combodo\\iTop\\Service\\Links\\LinkSetDataTransformer' => __DIR__ . '/../..' . '/sources/Service/Links/LinkSetDataTransformer.php',

View File

@@ -2134,7 +2134,6 @@ EOF
$this->CompileCommonProperty('default_value', $oField, $aParameters, $sModuleRelativeDir, '');
$this->CompileCommonProperty('is_null_allowed', $oField, $aParameters, $sModuleRelativeDir, false);
$this->CompileCommonProperty('allowed_values', $oField, $aParameters, $sModuleRelativeDir);
$this->CompileCommonProperty('computed', $oField, $aParameters, $sModuleRelativeDir, false);
$aParameters['depends_on'] = $sDependencies;
} elseif ($sAttType == 'AttributeEnum') {
$this->CompileAttributeEnumValues($sModuleRelativeDir, $sClass, $sAttCode, $oField, $aParameters, $sCss);
@@ -2142,7 +2141,6 @@ EOF
$this->CompileCommonProperty('sql', $oField, $aParameters, $sModuleRelativeDir);
$this->CompileCommonProperty('default_value', $oField, $aParameters, $sModuleRelativeDir, '');
$this->CompileCommonProperty('is_null_allowed', $oField, $aParameters, $sModuleRelativeDir, false);
$this->CompileCommonProperty('computed', $oField, $aParameters, $sModuleRelativeDir, false);
$aParameters['depends_on'] = $sDependencies;
} elseif ($sAttType == 'AttributeMetaEnum') {
$this->CompileAttributeEnumValues($sModuleRelativeDir, $sClass, $sAttCode, $oField, $aParameters, $sCss);
@@ -2271,7 +2269,6 @@ EOF
$this->CompileCommonProperty('is_null_allowed', $oField, $aParameters, $sModuleRelativeDir, false);
$this->CompileCommonProperty('default_value', $oField, $aParameters, $sModuleRelativeDir, '');
$this->CompileCommonProperty('allowed_values', $oField, $aParameters, $sModuleRelativeDir);
$this->CompileCommonProperty('computed', $oField, $aParameters, $sModuleRelativeDir, false);
$aParameters['depends_on'] = $sDependencies;
}
@@ -2416,19 +2413,7 @@ EOF
}
$aParameters['thresholds'] = 'array('.implode(', ', $aThresholds).')';
break;
case 'computed':
$oComputed = $oField->GetOptionalElement('computed');
if(is_null($oComputed)) {
break;
}
$sExpression = self::QuoteForPHP($oComputed->GetChildText('expression'));
if(is_null($sExpression) || $sExpression === '') {
throw new DOMFormatException("missing (or empty) mandatory tag expression under the tag '".$oField->nodeName."'");
}
$aParameters['expression'] = $sExpression;
break;
default:
return false;
}

View File

@@ -0,0 +1,815 @@
<?php
declare(strict_types=1);
namespace Combodo\iTop\Service\Export;
use BulkExport;
use Combodo\iTop\Application\TwigBase\Controller\Controller;
use Combodo\iTop\Application\UI\Base\Component\Field\FieldUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Form\Form;
use Combodo\iTop\Application\UI\Base\Component\Form\FormUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Input\Select\SelectOptionUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Input\Select\SelectUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Component\Panel\PanelUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Layout\MultiColumn\Column\ColumnUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Layout\MultiColumn\MultiColumnUIBlockFactory;
use Combodo\iTop\Application\UI\Base\Layout\UIContentBlockUIBlockFactory;
use Combodo\iTop\Application\WebPage\AjaxPage;
use Combodo\iTop\Application\WebPage\WebPage;
use Combodo\iTop\Service\Router\Router;
use Dict;
use Exception;
use MetaModel;
use UserRights;
use utils;
/**
*
*/
class ExportController extends Controller
{
public const ROUTE_NAMESPACE = 'export';
/**
* @return AjaxPage
* @throws \ApplicationException
* @throws \CoreException
* @throws \OQLException
*/
public static function OperationChooseGlobalParams()
{
$sFormat = utils::ReadParam('format', '');
$sExportBtnLabel = json_encode(Dict::S('UI:Button:Export'));
$sJSTitle = json_encode(utils::EscapeHtml(utils::ReadParam('dialog_title', '', false, 'raw_data')));
$oP = new AjaxPage($sJSTitle);
$oP->add('<div id="interactive_export_dlg">');
$oP->add_ready_script(
<<<EOF
$('#interactive_export_dlg').dialog({
autoOpen: true,
modal: true,
width: '80%',
height: 'auto',
maxHeight: $(window).height() - 50,
title: $sJSTitle,
close: function() { $('#export-form').attr('data-state', 'cancelled'); $(this).remove(); },
buttons: [
{text: $sExportBtnLabel, id: 'export-dlg-submit', click: function() {} }
]
});
setTimeout(function() { $('#interactive_export_dlg').dialog('option', { position: { my: "center", at: "center", of: window }}); $('#export-btn').hide(); ExportImpactButton('#export-dlg-submit'); }, 100);
EOF
);
$oForm = self::GetFormWithHiddenParams($sFormat, $oP);
/*
A AJOUTER PEUT-ETRE PLUS TARD
sHtmlForm += '<tr><td>'+this.options.labels.title+'</td><td><input name="title" value="'+this.options.labels.untitled+'" style="width: 20em;"/></td></tr>';
sHtmlForm += '<tr><td>'+this.options.labels.comments+'</td><td><textarea style="width: 20em; height:5em;" name="comments"/></textarea></td></tr>';
*/
/* first select params specific to the export format */
$oExporter = BulkExport::FindExporter($sFormat);
if ($oExporter === null) {
$aSupportedFormats = BulkExport::FindSupportedFormats();
$oP->add("Invalid output format: '$sFormat'. The supported formats are: ".implode(', ', array_keys($aSupportedFormats)));
$oP->add('</div>');
return $oP;
}
$UIContentBlock = UIContentBlockUIBlockFactory::MakeStandard('form_part_'.$sFormat)->AddCSSClass('form_part');
$oForm->AddSubBlock($UIContentBlock);
$UIContentBlock->AddSubBlock($oExporter->GetFormPart($oP, $sFormat.'_options'));
$aSelectedClasses = utils::ReadParam('list_classes', '', false, utils::ENUM_SANITIZATION_FILTER_RAW_DATA);
$oPanel = PanelUIBlockFactory::MakeNeutral(Dict::S('UI:Export:Class:SelectedClasses'));
$oForm->AddSubBlock($oPanel);
$oMulticolumn = MultiColumnUIBlockFactory::MakeStandard('selected_classes');
$oPanel->AddSubBlock($oMulticolumn);
$oMulticolumn->AddCSSClass('ibo-multi-column--export');
$oColumn1 = ColumnUIBlockFactory::MakeStandard();
$oMulticolumn->AddColumn($oColumn1);
$oColumn2 = ColumnUIBlockFactory::MakeStandard();
$oMulticolumn->AddColumn($oColumn2);
foreach ($aSelectedClasses as $i => $sClass) {
$oBlock = FieldUIBlockFactory::MakeStandard(MetaModel::GetName($sClass)) ;
$oValue = SelectUIBlockFactory::MakeForSelect($sClass);
$oValue->AddOption(SelectOptionUIBlockFactory::MakeForSelectOption('standard', Dict::S('UI:Export:Class:Standard'), true));
$oValue->AddOption(SelectOptionUIBlockFactory::MakeForSelectOption('user', Dict::S('UI:Export:Class:User'), false));
$oValue->AddOption(SelectOptionUIBlockFactory::MakeForSelectOption('custom', Dict::S('UI:Export:Class:Custom'), false));
$oBlock->AddSubBlock($oValue);
if ($i%2 == 0) {
$oColumn1->AddSubBlock($oBlock);
} else {
$oColumn2->AddSubBlock($oBlock);
}
}
$oP->add('</div>');
return $oP;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///
///
/// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* function DisplayForm(WebPage $oP, $sAction = '', $sExpression = '', $sFormat = null)
{
$oExportSearch = null;
$oP->add_script(DateTimeFormat::GetJSSQLToCustomFormat());
$sJSDefaultDateTimeFormat = json_encode((string)AttributeDateTime::GetFormat());
$oP->add_script(
<<<EOF
function FormatDatesInPreview(sRadioSelector, sPreviewSelector)
{
if ($('#'+sRadioSelector+'_date_time_format_default').prop('checked'))
{
sPHPFormat = $sJSDefaultDateTimeFormat;
}
else
{
sPHPFormat = $('#'+sRadioSelector+'_custom_date_time_format').val();
}
$('#interactive_fields_'+sPreviewSelector+' .user-formatted-date-time').each(function() {
var val = $(this).attr('data-date');
var sDisplay = DateTimeFormatFromPHP(val, sPHPFormat);
$(this).html(sDisplay);
});
$('#interactive_fields_'+sPreviewSelector+' .user-formatted-date').each(function() {
var val = $(this).attr('data-date');
var sDisplay = DateFormatFromPHP(val, sPHPFormat);
$(this).html(sDisplay);
});
}
EOF
);
$oP->LinkScriptFromAppRoot('js/tabularfieldsselector.js');
$oP->LinkScriptFromAppRoot('js/jquery.dragtable.js');
$oP->LinkStylesheetFromAppRoot('css/dragtable.css');
/* $oForm = FormUIBlockFactory::MakeStandard("export-form");
$oForm->SetAction($sAction);
$oForm->AddDataAttribute("state", "not-yet-started");
$oP->AddSubBlock($oForm);*
$bExpressionIsValid = true;
$sExpressionError = '';
if ($sExpression === null) {
$bExpressionIsValid = false;
} else if ($sExpression !== '') {
try {
$oExportSearch = DBObjectSearch::FromOQL($sExpression);
$oExportSearch->UpdateContextFromUser();
}
catch (OQLException $e) {
$bExpressionIsValid = false;
$sExpressionError = $e->getMessage();
}
}
if (!$bExpressionIsValid) {
DisplayExpressionForm($oP, $sAction, $sExpression, $sExpressionError,$oForm);
return;
}
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden("expression", $sExpression));
$oExportSearch = DBObjectSearch::FromOQL($sExpression);
$oExportSearch->UpdateContextFromUser();
$aFormPartsByFormat = array();
$aAllFormParts = array();
// One specific format was chosen
$oSelect = InputUIBlockFactory::MakeForHidden("format", utils::EscapeHtml($sFormat));
$oForm->AddSubBlock($oSelect);
/* $oExporter = BulkExport::FindExporter($sFormat, $oExportSearch);
$aParts = $oExporter->EnumFormParts();
foreach ($aParts as $sPartId => $void) {
$aAllFormParts[$sPartId] = $oExporter;
}
$aFormPartsByFormat[$sFormat] = array_keys($aAllFormParts);
foreach ($aAllFormParts as $sPartId => $oExport) {
$UIContentBlock = UIContentBlockUIBlockFactory::MakeStandard('form_part_'.$sPartId)->AddCSSClass('form_part');
$oForm->AddSubBlock($UIContentBlock);
$UIContentBlock->AddSubBlock($oExport->GetFormPart($oP, $sPartId));
}*
//end of form
$oBlockExport = UIContentBlockUIBlockFactory::MakeStandard("export-feedback")->SetIsHidden(true);
$oBlockExport->AddSubBlock(new Html('<p class="export-message" style="text-align:center;">'.Dict::S('ExcelExport:PreparingExport').'</p>'));
$oBlockExport->AddSubBlock(new Html('<div class="export-progress-bar" style="max-width:30em; margin-left:auto;margin-right:auto;"><div class="export-progress-message" style="text-align:center;"></div></div>'));
$oP->AddSubBlock($oBlockExport);
if ($sFormat == null) {//if it's global export
$oP->AddSubBlock(ButtonUIBlockFactory::MakeForPrimaryAction('export', Dict::S('UI:Button:Export'), 'export', false, 'export-btn'));
}
$oBlockResult = UIContentBlockUIBlockFactory::MakeStandard("export_text_result")->SetIsHidden(true);
$oBlockResult->AddSubBlock(new Html(Dict::S('Core:BulkExport:ExportResult')));
$oTextArea = new TextArea('export_content', '', 'export_content');
$oTextArea->AddCSSClass('ibo-input-text--export');
$oBlockResult->AddSubBlock($oTextArea);
$oP->AddSubBlock($oBlockResult);
$sJSParts = json_encode($aFormPartsByFormat);
$oP->add_ready_script(
<<<EOF
window.aFormParts = $sJSParts;
$('#format_selector').on('change init', function() {
ExportToggleFormat($(this).val());
}).trigger('init');
$('.export-progress-bar').progressbar({
value: 0,
change: function() {
$('.export-progress-message').text( $(this).progressbar( "value" ) + "%" );
},
complete: function() {
$('.export-progress-message').text( '100 %' );
}
});
ExportInitButton('#export-btn');
EOF
);
}
/*_export_dlg: function(sTitle, sSubmitUrl, sOperation)
{
var sId = this.element.attr('id');
var me = this;
var oPositions = {};
for(k in this.aNodes)
{
oPositions[this.aNodes[k].id] = {x: this.aNodes[k].x, y: this.aNodes[k].y };
}
var sHtmlForm = '<div id="GraphExportDlg'+this.element.attr('id')+'"><form id="graph_'+this.element.attr('id')+'_export_dlg" target="_blank" action="'+sSubmitUrl+'" method="post">';
sHtmlForm += '<input type="hidden" name="g" value="'+this.options.grouping_threshold+'">';
sHtmlForm += '<input type="hidden" name="context_key" value="'+this.options.context_key+'">';
sHtmlForm += '<input type="hidden" name="transaction_id" value="'+this.options.transaction_id+'">';
$('#'+sId+'_contexts').multiselect('getChecked').each(function() {
sHtmlForm += '<input type="hidden" name="contexts['+$(this).val()+']" value="'+me.options.additional_contexts[$(this).val()].oql+'">';
});
sHtmlForm += '<input type="hidden" name="positions" value="">';
for(k in this.options.excluded_classes)
{
sHtmlForm += '<input type="hidden" name="excluded_classes[]" value="'+this.options.excluded_classes[k]+'">';
}
for(var k1 in this.options.sources)
{
for(var k2 in this.options.sources[k1])
{
sHtmlForm += '<input type="hidden" name="sources['+k1+'][]" value="'+this.options.sources[k1][k2]+'">';
}
}
for(var k1 in this.options.excluded)
{
for(var k2 in this.options.excluded[k1])
{
sHtmlForm += '<input type="hidden" name="excluded['+k1+'][]" value="'+this.options.excluded[k1][k2]+'">';
}
}
if (sOperation == 'attachment')
{
sHtmlForm += '<input type="hidden" name="obj_class" value="'+this.options.export_as_attachment.obj_class+'">';
sHtmlForm += '<input type="hidden" name="obj_key" value="'+this.options.export_as_attachment.obj_key+'">';
}
sHtmlForm += '<table>';
sHtmlForm += '<tr><td>'+this.options.page_format.label+'</td><td><select name="p">';
for(k in this.options.page_format.values)
{
var sSelected = (k == this.options.page_format['default']) ? ' selected' : '';
sHtmlForm += '<option value="'+k+'"'+sSelected+'>'+this.options.page_format.values[k]+'</option>';
}
sHtmlForm += '</select></td></tr>';
sHtmlForm += '<tr><td>'+this.options.page_orientation.label+'</td><td><select name="o">';
for(k in this.options.page_orientation.values)
{
var sSelected = (k == this.options.page_orientation['default']) ? ' selected' : '';
sHtmlForm += '<option value="'+k+'"'+sSelected+'>'+this.options.page_orientation.values[k]+'</option>';
}
sHtmlForm += '</select></td></tr>';
sHtmlForm += '<tr><td>'+this.options.labels.title+'</td><td><input name="title" value="'+this.options.labels.untitled+'" style="width: 20em;"/></td></tr>';
sHtmlForm += '<tr><td>'+this.options.labels.comments+'</td><td><textarea style="width: 20em; height:5em;" name="comments"/></textarea></td></tr>';
sHtmlForm += '<tr><td colspan=2><input type="checkbox" checked id="include_list_checkbox" name="include_list" value="1"><label for="include_list_checkbox">&nbsp;'+this.options.labels.include_list+'</label></td></tr>';
sHtmlForm += '<table>';
sHtmlForm += '</form></div>';
$('body').append(sHtmlForm);
$('#graph_'+this.element.attr('id')+'_export_dlg input[name="positions"]').val(JSON.stringify(oPositions));
var me = this;
if (sOperation == 'attachment')
{
$('#GraphExportDlg'+this.element.attr('id')+' form').on('submit', function() { return me._on_export_as_attachment(); });
}
$('#GraphExportDlg'+this.element.attr('id')).dialog({
width: 'auto',
modal: true,
title: sTitle,
close: function() { $(this).remove(); },
buttons: [
{text: this.options.labels['cancel'], click: function() { $(this).dialog('close');} },
{text: this.options.labels['export'], click: function() { $('#graph_'+me.element.attr('id')+'_export_dlg').submit(); $(this).dialog('close');} },
]
});
},
*/
/*
private function SelectColumns($sOQL): array
{
$sWidgetId = 'tabular_fields_selector';
$oSearch = DBObjectSearch::FromOQL($sOQL);
$oSet = new DBObjectSet($oSearch);
$aSelectedClasses = $oSearch->GetSelectedClasses();
$aAuthorizedClasses = array();
foreach($aSelectedClasses as $sAlias => $sClassName)
{
if (UserRights::IsActionAllowed($sClassName, UR_ACTION_BULK_READ, $oSet) != UR_ALLOWED_NO)
{
$aAuthorizedClasses[$sAlias] = $sClassName;
}
}
$aAllFieldsByAlias = array();
$aAllAttCodes = array();
foreach($aAuthorizedClasses as $sAlias => $sClass)
{
$aAllFields = array();
if (count($aAuthorizedClasses) > 1 )
{
$sShortAlias = $sAlias.'.';
}
else
{
$sShortAlias = '';
}
if ($this->IsExportableField($sClass, 'id'))
{
$sFriendlyNameAttCode = MetaModel::GetFriendlyNameAttributeCode($sClass);
if (is_null($sFriendlyNameAttCode))
{
// The friendly name is made of several attribute
$aSubAttr = array(
array('attcodeex' => 'id', 'code' => $sShortAlias.'id', 'unique_label' => $sShortAlias.Dict::S('UI:CSVImport:idField'), 'label' => $sShortAlias.'id'),
array('attcodeex' => 'friendlyname', 'code' => $sShortAlias.'friendlyname', 'unique_label' => $sShortAlias.Dict::S('Core:FriendlyName-Label'), 'label' => $sShortAlias.Dict::S('Core:FriendlyName-Label')),
);
}
else
{
// The friendly name has no added value
$aSubAttr = array();
}
$aAllFields[] = array('attcodeex' => 'id', 'code' => $sShortAlias.'id', 'unique_label' => $sShortAlias.Dict::S('UI:CSVImport:idField'), 'label' => Dict::S('UI:CSVImport:idField'), 'subattr' => $aSubAttr);
}
foreach(MetaModel::ListAttributeDefs($sClass) as $sAttCode => $oAttDef)
{
if($this->IsSubAttribute($sClass, $sAttCode, $oAttDef)) continue;
if ($this->IsExportableField($sClass, $sAttCode, $oAttDef))
{
$sShortLabel = $oAttDef->GetLabel();
$sLabel = $sShortAlias.$oAttDef->GetLabel();
$aSubAttr = $this->GetSubAttributes($sClass, $sAttCode, $oAttDef);
$aValidSubAttr = array();
foreach($aSubAttr as $aSubAttDef)
{
$aValidSubAttr[] = array('attcodeex' => $aSubAttDef['code'], 'code' => $sShortAlias.$aSubAttDef['code'], 'label' => $aSubAttDef['label'], 'unique_label' => $sShortAlias.$aSubAttDef['unique_label']);
}
$aAllFields[] = array('attcodeex' => $sAttCode, 'code' => $sShortAlias.$sAttCode, 'label' => $sShortLabel, 'unique_label' => $sLabel, 'subattr' => $aValidSubAttr);
}
}
usort($aAllFields, array(get_class($this), 'SortOnLabel'));
if (count($aAuthorizedClasses) > 1)
{
$sKey = MetaModel::GetName($sClass).' ('.$sAlias.')';
}
else
{
$sKey = MetaModel::GetName($sClass);
}
$aAllFieldsByAlias[$sKey] = $aAllFields;
foreach ($aAllFields as $aFieldSpec)
{
$sAttCode = $aFieldSpec['attcodeex'];
if (count($aFieldSpec['subattr']) > 0)
{
foreach ($aFieldSpec['subattr'] as $aSubFieldSpec)
{
$aAllAttCodes[$sAlias][] = $aSubFieldSpec['attcodeex'];
}
}
else
{
$aAllAttCodes[$sAlias][] = $sAttCode;
}
}
}
$JSAllFields = json_encode($aAllFieldsByAlias);
// First, fetch only the ids - the rest will be fetched by an object reload
$oSet = new DBObjectSet($oSearch);
$iCount = $oSet->Count();
foreach ($oSearch->GetSelectedClasses() as $sAlias => $sClass)
{
$aColumns[$sAlias] = array();
}
$oSet->OptimizeColumnLoad($aColumns);
$iPreviewLimit = 3;
$oSet->SetLimit($iPreviewLimit);
$aSampleData = array();
while($aRow = $oSet->FetchAssoc())
{
$aSampleRow = array();
foreach($aAuthorizedClasses as $sAlias => $sClass)
{
if (count($aAuthorizedClasses) > 1) {
$sShortAlias = $sAlias.'.';
} else {
$sShortAlias = '';
}
if (isset($aAllAttCodes[$sAlias])) {
foreach ($aAllAttCodes[$sAlias] as $sAttCodeEx) {
$oObj = $aRow[$sAlias];
$aSampleRow[$sShortAlias.$sAttCodeEx] = $oObj ? $this->GetSampleData($oObj, $sAttCodeEx) : '';
}
}
}
$aSampleData[] = $aSampleRow;
}
$sJSSampleData = json_encode($aSampleData);
$aLabels = array(
'preview_header' => Dict::S('Core:BulkExport:DragAndDropHelp'),
'empty_preview' => Dict::S('Core:BulkExport:EmptyPreview'),
'columns_order' => Dict::S('Core:BulkExport:ColumnsOrder'),
'columns_selection' => Dict::S('Core:BulkExport:AvailableColumnsFrom_Class'),
'check_all' => Dict::S('Core:BulkExport:CheckAll'),
'uncheck_all' => Dict::S('Core:BulkExport:UncheckAll'),
'no_field_selected' => Dict::S('Core:BulkExport:NoFieldSelected'),
);
$sJSLabels = json_encode($aLabels);
$oP->add_ready_script(
<<<EOF
$('#$sWidgetId').tabularfieldsselector({fields: $JSAllFields, value_holder: '#tabular_fields', advanced_holder: '#tabular_advanced', sample_data: $sJSSampleData, total_count: $iCount, preview_limit: $iPreviewLimit, labels: $sJSLabels });
EOF
);
$oUIContentBlock = UIContentBlockUIBlockFactory::MakeStandard($sWidgetId);
$oUIContentBlock->AddCSSClass('ibo-tabularbulkexport');
return $oUIContentBlock;
}
public static function operationGeneratePdf()
{
require_once(APPROOT.'core/simplegraph.class.inc.php');
require_once(APPROOT.'core/relationgraph.class.inc.php');
require_once(APPROOT.'core/displayablegraph.class.inc.php');
$sRelation = utils::ReadParam('relation', 'impacts');
$sDirection = utils::ReadParam('direction', 'down');
$iGroupingThreshold = utils::ReadParam('g', 5, false, 'integer');
$sPageFormat = utils::ReadParam('p', 'A4');
$sPageOrientation = utils::ReadParam('o', 'L');
$sTitle = utils::ReadParam('title', '', false, 'raw_data');
$sPositions = utils::ReadParam('positions', null, false, 'raw_data');
$aExcludedClasses = utils::ReadParam('excluded_classes', array(), false, 'raw_data');
$bIncludeList = (bool)utils::ReadParam('include_list', false);
$sComments = utils::ReadParam('comments', '', false, 'raw_data');
$aContexts = utils::ReadParam('contexts', array(), false, 'raw_data');
$sContextKey = utils::ReadParam('context_key', '', false, 'raw_data');
$aPositions = null;
if ($sPositions != null) {
$aPositions = json_decode($sPositions, true);
}
// Get the list of source objects
$aSources = utils::ReadParam('sources', array(), false, 'raw_data');
$aSourceObjects = array();
foreach ($aSources as $sClass => $aIDs) {
$oSearch = new DBObjectSearch($sClass);
$oSearch->AddCondition('id', $aIDs, 'IN');
$oSet = new DBObjectSet($oSearch);
while ($oObj = $oSet->Fetch()) {
$aSourceObjects[] = $oObj;
}
}
$sSourceClass = '*';
if (count($aSourceObjects) == 1) {
$sSourceClass = get_class($aSourceObjects[0]);
}
// Get the list of excluded objects
$aExcluded = utils::ReadParam('excluded', array(), false, 'raw_data');
$aExcludedObjects = array();
foreach ($aExcluded as $sClass => $aIDs) {
$oSearch = new DBObjectSearch($sClass);
$oSearch->AddCondition('id', $aIDs, 'IN');
$oSet = new DBObjectSet($oSearch);
while ($oObj = $oSet->Fetch()) {
$aExcludedObjects[] = $oObj;
}
}
$iMaxRecursionDepth = MetaModel::GetConfig()->Get('relations_max_depth');
if ($sDirection == 'up') {
$oRelGraph = MetaModel::GetRelatedObjectsUp($sRelation, $aSourceObjects, $iMaxRecursionDepth, true, $aContexts);
} else {
$oRelGraph = MetaModel::GetRelatedObjectsDown($sRelation, $aSourceObjects, $iMaxRecursionDepth, true, $aExcludedObjects, $aContexts);
}
// Remove excluded classes from the graph
if (count($aExcludedClasses) > 0) {
$oIterator = new RelationTypeIterator($oRelGraph, 'Node');
foreach ($oIterator as $oNode) {
$oObj = $oNode->GetProperty('object');
if ($oObj && in_array(get_class($oObj), $aExcludedClasses)) {
$oRelGraph->FilterNode($oNode);
}
}
}
$oPage = new PDFPage($sTitle, $sPageFormat, $sPageOrientation);
$oPage->SetContentDisposition('attachment', $sTitle.'.pdf');
$oGraph = DisplayableGraph::FromRelationGraph($oRelGraph, $iGroupingThreshold, ($sDirection == 'down'), true);
$oGraph->InitFromGraphviz();
if ($aPositions != null) {
$oGraph->UpdatePositions($aPositions);
}
$aGroups = array();
$oIterator = new RelationTypeIterator($oGraph, 'Node');
foreach ($oIterator as $oNode) {
if ($oNode instanceof DisplayableGroupNode) {
$aGroups[$oNode->GetProperty('group_index')] = $oNode->GetObjects();
}
}
// First page is the graph
$oGraph->RenderAsPDF($oPage, $sComments, $sContextKey);
if ($bIncludeList) {
// Then the lists of objects (one table per finalclass)
$aResults = array();
$oIterator = new RelationTypeIterator($oRelGraph, 'Node');
foreach ($oIterator as $oNode) {
$oObj = $oNode->GetProperty('object'); // Some nodes (Redundancy Nodes and Group) do not contain an object
if ($oObj) {
$sObjClass = get_class($oObj);
if (!array_key_exists($sObjClass, $aResults)) {
$aResults[$sObjClass] = array();
}
$aResults[$sObjClass][] = $oObj;
}
}
$oPage->get_tcpdf()->AddPage();
$oPage->get_tcpdf()->SetFontSize(10); // Reset the font size to its default
$oPage->AddSubBlock(TitleUIBlockFactory::MakeNeutral(Dict::S('UI:RelationshipList')));
$iLoopTimeLimit = MetaModel::GetConfig()->Get('max_execution_time_per_loop');
foreach ($aResults as $sListClass => $aObjects) {
set_time_limit($iLoopTimeLimit * count($aObjects));
$oSet = CMDBObjectSet::FromArray($sListClass, $aObjects);
$oSet->SetShowObsoleteData(utils::ShowObsoleteData());
$oTitle = new Html(Dict::Format('UI:Search:Count_ObjectsOf_Class_Found', $oSet->Count(), Metamodel::GetName($sListClass)));
$oPage->AddSubBlock(TitleUIBlockFactory::MakeStandard($oTitle, 2));
$oPage->AddSubBlock(cmdbAbstractObject::GetDataTableFromDBObjectSet($oSet, array('table_id' => $sSourceClass.'_'.$sRelation.'_'.$sDirection.'_'.$sListClass)));
}
// Then the content of the groups (one table per group)
if (count($aGroups) > 0) {
$oPage->get_tcpdf()->AddPage();
$oPage->AddSubBlock(TitleUIBlockFactory::MakeNeutral(Dict::S('UI:RelationGroups')));
foreach ($aGroups as $idx => $aObjects) {
set_time_limit($iLoopTimeLimit * count($aObjects));
$sListClass = get_class(current($aObjects));
$oSet = CMDBObjectSet::FromArray($sListClass, $aObjects);
$sIconUrl = MetaModel::GetClassIcon($sListClass, false);
$sIconUrl = str_replace(utils::GetAbsoluteUrlModulesRoot(), APPROOT.'env-'.utils::GetCurrentEnvironment().'/', $sIconUrl);
$oTitle = new Html("<img src=\"$sIconUrl\" style=\"vertical-align:middle;width: 24px; height: 24px;\"/> ".Dict::Format('UI:RelationGroupNumber_N', (1 + $idx)), Metamodel::GetName($sListClass));
$oPage->AddSubBlock(TitleUIBlockFactory::MakeStandard($oTitle, 2));
$oPage->AddSubBlock(cmdbAbstractObject::GetDataTableFromDBObjectSet($oSet));
}
}
}
}*/
public static function OperationSelectColumns()
{
//select all the fields for the 'customs' classes
$sJSTitle = json_encode(utils::EscapeHtml(utils::ReadParam('dialog_title', '', false, 'raw_data')));
$oP = new AjaxPage($sJSTitle);
$sFormat = utils::ReadParam('format', '');
$oForm = self::GetFormWithHiddenParams($sFormat, $oP);
$oExporter = BulkExport::FindExporter($sFormat);
if ($oExporter === null) {
$aSupportedFormats = BulkExport::FindSupportedFormats();
$oP->add("Invalid output format: '$sFormat'. The supported formats are: ".implode(', ', array_keys($aSupportedFormats)));
$oP->add('</div>');
return $oP;
}
$oExporter->ReadParameters();
foreach ($oExporter->GetStatusInfo() as $sKey => $sValue) {
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden($sKey, $sValue));
}
$sWidgetId = 'tabular_fields_selector';
$aClassesChoice = [];
$aClasses = utils::ReadParam('list_classes', '', false, utils::ENUM_SANITIZATION_FILTER_CLASS);
foreach($aClasses as $sClassName)
{
$sSelection = utils::ReadParam($sClassName, '', false, utils::ENUM_SANITIZATION_FILTER_STRING);
$aClassesChoice[$sClassName] = $sSelection;
}
$aAllFieldsByAlias = array();
$aAllAttCodes = array();
/* foreach($aAuthorizedClasses as $sAlias => $sClass)
{
$aAllFields = array();
if (count($aAuthorizedClasses) > 1 )
{
$sShortAlias = $sAlias.'.';
}
else
{
$sShortAlias = '';
}
if ($this->IsExportableField($sClass, 'id'))
{
$sFriendlyNameAttCode = MetaModel::GetFriendlyNameAttributeCode($sClass);
if (is_null($sFriendlyNameAttCode))
{
// The friendly name is made of several attribute
$aSubAttr = array(
array('attcodeex' => 'id', 'code' => $sShortAlias.'id', 'unique_label' => $sShortAlias.Dict::S('UI:CSVImport:idField'), 'label' => $sShortAlias.'id'),
array('attcodeex' => 'friendlyname', 'code' => $sShortAlias.'friendlyname', 'unique_label' => $sShortAlias.Dict::S('Core:FriendlyName-Label'), 'label' => $sShortAlias.Dict::S('Core:FriendlyName-Label')),
);
}
else
{
// The friendly name has no added value
$aSubAttr = array();
}
$aAllFields[] = array('attcodeex' => 'id', 'code' => $sShortAlias.'id', 'unique_label' => $sShortAlias.Dict::S('UI:CSVImport:idField'), 'label' => Dict::S('UI:CSVImport:idField'), 'subattr' => $aSubAttr);
}
foreach(MetaModel::ListAttributeDefs($sClass) as $sAttCode => $oAttDef)
{
if($this->IsSubAttribute($sClass, $sAttCode, $oAttDef)) continue;
if ($this->IsExportableField($sClass, $sAttCode, $oAttDef))
{
$sShortLabel = $oAttDef->GetLabel();
$sLabel = $sShortAlias.$oAttDef->GetLabel();
$aSubAttr = $this->GetSubAttributes($sClass, $sAttCode, $oAttDef);
$aValidSubAttr = array();
foreach($aSubAttr as $aSubAttDef)
{
$aValidSubAttr[] = array('attcodeex' => $aSubAttDef['code'], 'code' => $sShortAlias.$aSubAttDef['code'], 'label' => $aSubAttDef['label'], 'unique_label' => $sShortAlias.$aSubAttDef['unique_label']);
}
$aAllFields[] = array('attcodeex' => $sAttCode, 'code' => $sShortAlias.$sAttCode, 'label' => $sShortLabel, 'unique_label' => $sLabel, 'subattr' => $aValidSubAttr);
}
}
usort($aAllFields, array(get_class($this), 'SortOnLabel'));
if (count($aAuthorizedClasses) > 1)
{
$sKey = MetaModel::GetName($sClass).' ('.$sAlias.')';
}
else
{
$sKey = MetaModel::GetName($sClass);
}
$aAllFieldsByAlias[$sKey] = $aAllFields;
foreach ($aAllFields as $aFieldSpec)
{
$sAttCode = $aFieldSpec['attcodeex'];
if (count($aFieldSpec['subattr']) > 0)
{
foreach ($aFieldSpec['subattr'] as $aSubFieldSpec)
{
$aAllAttCodes[$sAlias][] = $aSubFieldSpec['attcodeex'];
}
}
else
{
$aAllAttCodes[$sAlias][] = $sAttCode;
}
}
}
$JSAllFields = json_encode($aAllFieldsByAlias);
// First, fetch only the ids - the rest will be fetched by an object reload
$oSearch = new DBObjectSearch($sSelectedClass);
$oSet = new CMDBObjectSet($oSearch);
$iCount = $oSet->Count();
foreach ($oSearch->GetSelectedClasses() as $sAlias => $sClass)
{
$aColumns[$sAlias] = array();
}
$oSet->OptimizeColumnLoad($aColumns);
$iPreviewLimit = 3;
$oSet->SetLimit($iPreviewLimit);
$aSampleData = array();
while($aRow = $oSet->FetchAssoc())
{
$aSampleRow = array();
foreach($aAuthorizedClasses as $sAlias => $sClass)
{
if (count($aAuthorizedClasses) > 1) {
$sShortAlias = $sAlias.'.';
} else {
$sShortAlias = '';
}
if (isset($aAllAttCodes[$sAlias])) {
foreach ($aAllAttCodes[$sAlias] as $sAttCodeEx) {
$oObj = $aRow[$sAlias];
$aSampleRow[$sShortAlias.$sAttCodeEx] = $oObj ? $this->GetSampleData($oObj, $sAttCodeEx) : '';
}
}
}
$aSampleData[] = $aSampleRow;
}
$sJSSampleData = json_encode($aSampleData);
$aLabels = array(
'preview_header' => Dict::S('Core:BulkExport:DragAndDropHelp'),
'empty_preview' => Dict::S('Core:BulkExport:EmptyPreview'),
'columns_order' => Dict::S('Core:BulkExport:ColumnsOrder'),
'columns_selection' => Dict::S('Core:BulkExport:AvailableColumnsFrom_Class'),
'check_all' => Dict::S('Core:BulkExport:CheckAll'),
'uncheck_all' => Dict::S('Core:BulkExport:UncheckAll'),
'no_field_selected' => Dict::S('Core:BulkExport:NoFieldSelected'),
);
$sJSLabels = json_encode($aLabels);
$oP->add_ready_script(
<<<EOF
$('#$sWidgetId').tabularfieldsselector({fields: $JSAllFields, value_holder: '#tabular_fields', advanced_holder: '#tabular_advanced', sample_data: $sJSSampleData, total_count: $iCount, preview_limit: $iPreviewLimit, labels: $sJSLabels });
EOF
);
$oUIContentBlock = UIContentBlockUIBlockFactory::MakeStandard($sWidgetId);
$oUIContentBlock->AddCSSClass('ibo-tabularbulkexport');
*/
return $oP;
}
/**
* @param mixed $sFormat
* @param AjaxPage $oP
* @return Form
* @throws Exception
*/
public static function GetFormWithHiddenParams(mixed $sFormat, AjaxPage $oP): Form
{
$oForm = FormUIBlockFactory::MakeStandard("export-form");
// $oForm->SetAction(utils::GetAbsoluteUrlAppRoot().'webservices/export-v2.php');
$oForm->SetAction(Router::GetInstance()->GenerateUrl('export.select_columns', ['format' => $sFormat]));
$oForm->AddDataAttribute("state", "not-yet-started");
$oP->AddSubBlock($oForm);
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('format', $sFormat));
//Add params coming from the screen
$iTransactionId = isset($aExtraParams['transaction_id']) ? $aExtraParams['transaction_id'] : utils::GetNewTransactionId();
$oP->SetTransactionId($iTransactionId);
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('transaction_id', $iTransactionId));
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('context_key', utils::ReadParam('context_key', '', false, 'raw_data')));
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('g', utils::ReadParam('g', '')));
$aContexts = utils::ReadParam('contexts', '');
foreach ($aContexts as $sContext) {
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('contexts', $sContext));
}
$aExcludedClasses = utils::ReadParam('excluded_classes', '');
foreach ($aExcludedClasses as $sExcludedClass) {
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('excluded_classes', $sExcludedClass));
}
$aSources = utils::ReadParam('sources', '');
foreach ($aSources as $sKey => $aSource) {
foreach ($aSource as $sSource) {
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('sources[' . $sKey . ']', $sSource));
}
}
$aExcludeds = utils::ReadParam('excluded', '');
foreach ($aExcludeds as $sKey => $aExcluded) {
foreach ($aExcluded as $sExcluded) {
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('excluded[' . $sKey . ']', $sExcluded));
}
}
$aSelectedClasses = utils::ReadParam('list_classes', '', false, utils::ENUM_SANITIZATION_FILTER_RAW_DATA);
foreach ($aSelectedClasses as $sSelectedClass) {
$oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('list_classes', $sSelectedClass));
}
return $oForm;
}
}

Some files were not shown because too many files have changed in this diff Show More