mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-17 09:24:11 +01:00
Compare commits
113 Commits
feature/re
...
faf/quick_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bbf7a8cc42 | ||
|
|
726542dd66 | ||
|
|
8e65a65f6b | ||
|
|
f8ae1fd2d8 | ||
|
|
57d610fc16 | ||
|
|
740f83f43e | ||
|
|
d2d422afcf | ||
|
|
14791bf6b4 | ||
|
|
062d543b26 | ||
|
|
278ac66637 | ||
|
|
8cece0f0fd | ||
|
|
87db141c3c | ||
|
|
18871566d2 | ||
|
|
b565b700a9 | ||
|
|
3846087dc1 | ||
|
|
4f96246cbe | ||
|
|
ddd3dcdaf2 | ||
|
|
82ad9d4317 | ||
|
|
6dc48ad36d | ||
|
|
f062f994f0 | ||
|
|
84476a869f | ||
|
|
684f829581 | ||
|
|
fb81e54ed9 | ||
|
|
d1e6334629 | ||
|
|
047ba8c6c7 | ||
|
|
916467ea61 | ||
|
|
8a4ad87b06 | ||
|
|
2086052d60 | ||
|
|
f609010d7f | ||
|
|
9330b5ec9a | ||
|
|
18b85d4080 | ||
|
|
7214e5b43a | ||
|
|
3689a83953 | ||
|
|
a715ce1292 | ||
|
|
17d85fbb3f | ||
|
|
5e59aff74f | ||
|
|
9e1e81ccc1 | ||
|
|
c57c8d2af3 | ||
|
|
8a436f9760 | ||
|
|
2e77713772 | ||
|
|
0a4f9e95c5 | ||
|
|
975c554e91 | ||
|
|
ac6f642052 | ||
|
|
cf9ab2a83c | ||
|
|
282fb13973 | ||
|
|
0b92535fda | ||
|
|
3ff3dcba54 | ||
|
|
657fc912bf | ||
|
|
a0f4c62bcc | ||
|
|
5ae5221f6f | ||
|
|
b15ca2fbc9 | ||
|
|
cb382eab4e | ||
|
|
9723cde24c | ||
|
|
7ae49e2cf4 | ||
|
|
cb13a7a5b4 | ||
|
|
cd4e2608ee | ||
|
|
9618e47045 | ||
|
|
d84506ea9e | ||
|
|
13239c2751 | ||
|
|
d6c9a6d318 | ||
|
|
8b30e36dd1 | ||
|
|
80b290ab88 | ||
|
|
81b20ee583 | ||
|
|
ca937b829b | ||
|
|
e0b8ee2143 | ||
|
|
a5545b0084 | ||
|
|
d72e861dfe | ||
|
|
92385273ff | ||
|
|
61c25f85e7 | ||
|
|
20a7a945fc | ||
|
|
b1cf2ec137 | ||
|
|
0640c1e9b6 | ||
|
|
7549ded51d | ||
|
|
38683c20b1 | ||
|
|
81791dd253 | ||
|
|
e77e0eec9f | ||
|
|
cad40ed758 | ||
|
|
11d23ac99b | ||
|
|
1eeb98d2e2 | ||
|
|
92e2d22248 | ||
|
|
5811dc06e3 | ||
|
|
f5ddbbbe0e | ||
|
|
6811a82e1a | ||
|
|
960133c0df | ||
|
|
544c4ae888 | ||
|
|
6bd11fb9bf | ||
|
|
9ee18c2f36 | ||
|
|
624573d088 | ||
|
|
43a10e6944 | ||
|
|
b21a02dcb8 | ||
|
|
3b60e63c97 | ||
|
|
adc8b47945 | ||
|
|
5e6d96019d | ||
|
|
06cc64f6d6 | ||
|
|
a5c14c3a48 | ||
|
|
8f6f243716 | ||
|
|
3c574819b2 | ||
|
|
5b1ea20407 | ||
|
|
4d88ef6ed4 | ||
|
|
5cb1102e6e | ||
|
|
bf23e4d98d | ||
|
|
8645b28baa | ||
|
|
eff6fcff49 | ||
|
|
994b08f94a | ||
|
|
19495d8acf | ||
|
|
48a3ea1945 | ||
|
|
a11b2845f7 | ||
|
|
ee72325451 | ||
|
|
ebb59d3ddc | ||
|
|
0193db609d | ||
|
|
ea2caed98a | ||
|
|
09c092782c | ||
|
|
a4166f874e |
18
README.md
18
README.md
@@ -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
|
||||
|
||||
@@ -195,16 +195,31 @@ class ApplicationContext
|
||||
/**
|
||||
* Returns the context as string with the format name1=value1&name2=value2....
|
||||
* @return string The context as a string to be appended to an href property
|
||||
*
|
||||
*/
|
||||
public function GetForLink()
|
||||
public function GetForLink(bool $bWithLeadingAmpersand = false)
|
||||
{
|
||||
// If there are no parameters, return an empty string
|
||||
if(empty($this->aValues)){
|
||||
return '';
|
||||
}
|
||||
|
||||
// Build the query string with ampersand separated parameters
|
||||
$aParams = array();
|
||||
foreach($this->aValues as $sName => $sValue)
|
||||
{
|
||||
$aParams[] = "c[$sName]".'='.urlencode($sValue);
|
||||
}
|
||||
return implode("&", $aParams);
|
||||
$sReturnValue = implode('&', $aParams);
|
||||
|
||||
// add the leading ampersand if requested
|
||||
if($bWithLeadingAmpersand){
|
||||
$sReturnValue = '&' . $sReturnValue;
|
||||
}
|
||||
|
||||
return $sReturnValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 3.0.0 N°2534 - dashboard: bug with autorefresh that deactivates filtering on organisation
|
||||
* Returns the params as c[menu]:..., c[org_id]:....
|
||||
@@ -382,7 +397,7 @@ class ApplicationContext
|
||||
$sUrl = call_user_func(array($sUrlMakerClass, 'MakeObjectUrl'), $sObjClass, $sObjKey);
|
||||
if (utils::StrLen($sUrl) > 0) {
|
||||
if ($bWithNavigationContext) {
|
||||
return $sUrl."&".$oAppContext->GetForLink();
|
||||
return $sUrl.$oAppContext->GetForLink(true);
|
||||
} else {
|
||||
return $sUrl;
|
||||
}
|
||||
|
||||
@@ -1929,76 +1929,41 @@ class RestUtils
|
||||
* @return array of class => list of attributes (see RestResultWithObjects::AddObject that uses it)
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function GetFieldList($sClass, $oData, $sParamName, $bFailIfNotFound = true)
|
||||
public static function GetFieldList($sClass, $oData, $sParamName)
|
||||
{
|
||||
$sFields = self::GetOptionalParam($oData, $sParamName, '*');
|
||||
return match($sFields) {
|
||||
'*' => self::GetFieldListForClass($sClass),
|
||||
'*+' => self::GetFieldListForParentClass($sClass),
|
||||
default => self::GetLimitedFieldListForClass($sClass, $sFields, $sParamName, $bFailIfNotFound),
|
||||
};
|
||||
}
|
||||
|
||||
public static function HasRequestedExtendedOutput(string $sFields): bool
|
||||
{
|
||||
return match($sFields) {
|
||||
'*' => false,
|
||||
'*+' => true,
|
||||
default => substr_count($sFields, ':') > 1,
|
||||
};
|
||||
}
|
||||
|
||||
public static function HasRequestedAllOutputFields(string $sFields): bool
|
||||
{
|
||||
return match($sFields) {
|
||||
'*', '*+' => true,
|
||||
default => false,
|
||||
};
|
||||
}
|
||||
|
||||
protected static function GetFieldListForClass(string $sClass): array
|
||||
{
|
||||
return [$sClass => array_keys(MetaModel::ListAttributeDefs($sClass))];
|
||||
}
|
||||
|
||||
protected static function GetFieldListForParentClass(string $sClass): array
|
||||
{
|
||||
$aFieldList = array();
|
||||
foreach (MetaModel::EnumChildClasses($sClass, ENUM_CHILD_CLASSES_ALL) as $sRefClass) {
|
||||
$aFieldList = array_merge($aFieldList, self::GetFieldListForClass($sRefClass));
|
||||
$aShowFields = array();
|
||||
if ($sFields == '*')
|
||||
{
|
||||
foreach (MetaModel::ListAttributeDefs($sClass) as $sAttCode => $oAttDef)
|
||||
{
|
||||
$aShowFields[$sClass][] = $sAttCode;
|
||||
}
|
||||
}
|
||||
return $aFieldList;
|
||||
}
|
||||
|
||||
protected static function GetLimitedFieldListForSingleClass(string $sClass, string $sFields, string $sParamName, bool $bFailIfNotFound = true): array
|
||||
{
|
||||
$aFieldList = [$sClass => []];
|
||||
foreach (explode(',', $sFields) as $sAttCode) {
|
||||
$sAttCode = trim($sAttCode);
|
||||
if (($sAttCode == 'id') || (MetaModel::IsValidAttCode($sClass, $sAttCode))) {
|
||||
$aFieldList[$sClass][] = $sAttCode;
|
||||
} else {
|
||||
if ($bFailIfNotFound) {
|
||||
throw new Exception("$sParamName: invalid attribute code '$sAttCode' for class '$sClass'");
|
||||
elseif ($sFields == '*+')
|
||||
{
|
||||
foreach (MetaModel::EnumChildClasses($sClass, ENUM_CHILD_CLASSES_ALL) as $sRefClass)
|
||||
{
|
||||
foreach (MetaModel::ListAttributeDefs($sRefClass) as $sAttCode => $oAttDef)
|
||||
{
|
||||
$aShowFields[$sRefClass][] = $sAttCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $aFieldList;
|
||||
}
|
||||
|
||||
protected static function GetLimitedFieldListForClass(string $sClass, string $sFields, string $sParamName, bool $bFailIfNotFound = true): array
|
||||
{
|
||||
if (!str_contains($sFields, ':')) {
|
||||
return self::GetLimitedFieldListForSingleClass($sClass, $sFields, $sParamName, $bFailIfNotFound);
|
||||
else
|
||||
{
|
||||
foreach (explode(',', $sFields) as $sAttCode)
|
||||
{
|
||||
$sAttCode = trim($sAttCode);
|
||||
if (($sAttCode != 'id') && (!MetaModel::IsValidAttCode($sClass, $sAttCode)))
|
||||
{
|
||||
throw new Exception("$sParamName: invalid attribute code '$sAttCode'");
|
||||
}
|
||||
$aShowFields[$sClass][] = $sAttCode;
|
||||
}
|
||||
}
|
||||
|
||||
$aFieldList = [];
|
||||
$aFieldListParts = explode(';', $sFields);
|
||||
foreach ($aFieldListParts as $sClassFields) {
|
||||
list($sSubClass, $sSubClassFields) = explode(':', $sClassFields);
|
||||
$aFieldList = array_merge($aFieldList, self::GetLimitedFieldListForSingleClass(trim($sSubClass), trim($sSubClassFields), $sParamName, $bFailIfNotFound));
|
||||
}
|
||||
return $aFieldList;
|
||||
return $aShowFields;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -311,7 +311,7 @@ abstract class cmdbAbstractObject extends CMDBObject implements iDisplay
|
||||
{
|
||||
$sParams .= $sName.'='.urlencode($value).'&'; // Always add a trailing &
|
||||
}
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot().'pages/'.$oObj->GetUIPage().'?'.$sParams.'class='.get_class($oObj).'&id='.$oObj->getKey().'&'.$oAppContext->GetForLink().'&a=1';
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot().'pages/'.$oObj->GetUIPage().'?'.$sParams.'class='.get_class($oObj).'&id='.$oObj->getKey().$oAppContext->GetForLink(true).'&a=1';
|
||||
$oPage->add_early_script(<<<JS
|
||||
if (!sessionStorage.getItem('$sSessionStorageKey'))
|
||||
{
|
||||
@@ -1337,7 +1337,7 @@ HTML
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$aHeader['friendlyname'] = ['label' => MetaModel::GetName($sClassName)];
|
||||
foreach ($aList[$sAlias] as $sAttCodeEx => $oAttDef) {
|
||||
$sColLabel = $bLocalize ? MetaModel::GetLabel($sClassName, $sAttCodeEx) : $sAttCodeEx;
|
||||
|
||||
@@ -1358,6 +1358,7 @@ HTML
|
||||
$aRow = [];
|
||||
foreach ($aAuthorizedClasses as $sAlias => $sClassName) {
|
||||
$oObj = $aObjects[$sAlias];
|
||||
$aRow["friendlyname"] = $oObj->Get('friendlyname');
|
||||
foreach ($aList[$sAlias] as $sAttCodeEx => $oAttDef) {
|
||||
if (is_null($oObj)) {
|
||||
$aRow[$oAttDef->GetCode()] = '';
|
||||
@@ -3071,7 +3072,7 @@ JS
|
||||
$oPage->add($oAppContext->GetForForm());
|
||||
|
||||
// Hook the cancel button via jQuery so that it can be unhooked easily as well if needed
|
||||
$sDefaultUrl = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search_form&class='.$sClass.'&'.$oAppContext->GetForLink();
|
||||
$sDefaultUrl = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search_form&class='.$sClass.$oAppContext->GetForLink(true);
|
||||
|
||||
$sCancelButtonOnClickScript = "let fOnClick{$this->m_iFormId}CancelButton = ";
|
||||
if(isset($aExtraParams['js_handlers']['cancel_button_on_click'])){
|
||||
@@ -3079,7 +3080,7 @@ JS
|
||||
} else {
|
||||
$sCancelButtonOnClickScript .= "function() { BackToDetails('$sClass', $iKey, '$sDefaultUrl', $sJSToken)};";
|
||||
}
|
||||
$sCancelButtonOnClickScript .= "$('#form_{$this->m_iFormId} button.cancel').on('click', fOnClick{$this->m_iFormId}CancelButton);";
|
||||
$sCancelButtonOnClickScript .= "$('#form_{$this->m_iFormId} button.cancel').on('click.navigation.itop', fOnClick{$this->m_iFormId}CancelButton);";
|
||||
$oPage->add_ready_script($sCancelButtonOnClickScript);
|
||||
|
||||
$iFieldsCount = count($aFieldsMap);
|
||||
|
||||
@@ -524,9 +524,7 @@ EOF
|
||||
*/
|
||||
public function Render($oPage, $bEditMode = false, $aExtraParams = array(), $bCanEdit = true)
|
||||
{
|
||||
if (!array_key_exists('dashboard_div_id', $aExtraParams)) {
|
||||
$aExtraParams['dashboard_div_id'] = utils::Sanitize($this->GetId(), '', 'element_identifier');
|
||||
}
|
||||
$aExtraParams['dashboard_div_id'] = utils::Sanitize($aExtraParams['dashboard_div_id'] ?? null, $this->GetId(), utils::ENUM_SANITIZATION_FILTER_ELEMENT_IDENTIFIER);
|
||||
|
||||
/** @var \DashboardLayoutMultiCol $oLayout */
|
||||
$oLayout = new $this->sLayoutClass();
|
||||
@@ -1052,7 +1050,7 @@ EOF
|
||||
$sSelectorHtml .= '</div>';
|
||||
|
||||
$sFile = addslashes($this->GetDefinitionFile());
|
||||
$sReloadURL = $this->GetReloadURL();
|
||||
$sReloadURL = json_encode($this->GetReloadURL());
|
||||
|
||||
$bFromDashboardPage = isset($aAjaxParams['from_dashboard_page']) ? isset($aAjaxParams['from_dashboard_page']) : false;
|
||||
if ($bFromDashboardPage) {
|
||||
@@ -1141,7 +1139,6 @@ JS
|
||||
->AddCSSClass('ibo-action-button');
|
||||
|
||||
$oToolbar->AddSubBlock($oActionButton);
|
||||
|
||||
$aActions = array();
|
||||
$sFile = addslashes(utils::LocalPath($this->sDefinitionFile));
|
||||
$sJSExtraParams = json_encode($aExtraParams);
|
||||
@@ -1166,7 +1163,7 @@ JS
|
||||
$oToolbar->AddSubBlock($oActionButton)
|
||||
->AddSubBlock($oActionsMenu);
|
||||
|
||||
$sReloadURL = $this->GetReloadURL();
|
||||
$sReloadURL = json_encode($this->GetReloadURL());
|
||||
$oPage->add_script(
|
||||
<<<EOF
|
||||
function EditDashboard(sId, sDashboardFile, aExtraParams)
|
||||
@@ -1273,7 +1270,7 @@ EOF
|
||||
$sTitle = json_encode($this->sTitle);
|
||||
$sFile = json_encode($this->GetDefinitionFile());
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot().'pages/ajax.render.php';
|
||||
$sReloadURL = $this->GetReloadURL();
|
||||
$sReloadURL = json_encode($this->GetReloadURL());
|
||||
|
||||
$sExitConfirmationMessage = addslashes(Dict::S('UI:NavigateAwayConfirmationMessage'));
|
||||
$sCancelConfirmationMessage = addslashes(Dict::S('UI:CancelConfirmationMessage'));
|
||||
|
||||
@@ -2138,7 +2138,7 @@ class DashletHeaderDynamic extends Dashlet
|
||||
$oSet = new DBObjectSet($oFilter);
|
||||
$iCount = $oSet->Count();
|
||||
$oAppContext = new ApplicationContext();
|
||||
$sHyperlink = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search&'.$oAppContext->GetForLink().'&filter='.rawurlencode($oFilter->serialize());
|
||||
$sHyperlink = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search'.$oAppContext->GetForLink(true).'&filter='.rawurlencode($oFilter->serialize());
|
||||
$oSubTitle->AddHtml('<a class="summary" href="'.$sHyperlink.'">'.Dict::Format(str_replace('_', ':', $sSubtitle), $iCount).'</a>');
|
||||
|
||||
return $oPanel;
|
||||
|
||||
@@ -1126,7 +1126,7 @@ JS
|
||||
$oSingleGroupByValueFilter->SetShowObsoleteData($this->m_bShowObsoleteData);
|
||||
}
|
||||
$sHyperlink = utils::GetAbsoluteUrlAppRoot()
|
||||
.'pages/UI.php?operation=search&'.$oAppContext->GetForLink()
|
||||
.'pages/UI.php?operation=search'.$oAppContext->GetForLink(true)
|
||||
.'&filter='.rawurlencode($oSingleGroupByValueFilter->serialize());
|
||||
$aCounts[$sStateValue] = ['link' => $sHyperlink, 'label' => $aCounts[$sStateValue]];
|
||||
}
|
||||
@@ -1234,7 +1234,7 @@ JS
|
||||
$iCount = $this->m_oSet->Count();
|
||||
$sClassLabel = MetaModel::GetName($sClass);
|
||||
$sClassIconUrl = MetaModel::GetClassIcon($sClass, false);
|
||||
$sHyperlink = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search&'.$oAppContext->GetForLink().'&filter='.rawurlencode($this->m_oFilter->serialize());
|
||||
$sHyperlink = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search'.$oAppContext->GetForLink(true).'&filter='.rawurlencode($this->m_oFilter->serialize());
|
||||
|
||||
$aExtraParams['query_params'] = $this->m_oFilter->GetInternalParams();
|
||||
$aRefreshParams = [
|
||||
@@ -1243,7 +1243,7 @@ JS
|
||||
];
|
||||
|
||||
if (UserRights::IsActionAllowed($sClass, UR_ACTION_MODIFY)) {
|
||||
$sCreateActionUrl = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=new&class='.$sClass.'&'.$oAppContext->GetForLink();
|
||||
$sCreateActionUrl = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=new&class='.$sClass.$oAppContext->GetForLink(true);
|
||||
$sCreateActionLabel = Dict::Format('UI:Button:Create');
|
||||
$oBlock = DashletFactory::MakeForDashletBadge($sClassIconUrl, $sHyperlink, $iCount, $sClassLabel, $sCreateActionUrl,
|
||||
$sCreateActionLabel, $aRefreshParams);
|
||||
@@ -1291,7 +1291,7 @@ JS
|
||||
|
||||
$aData = array();
|
||||
$oAppContext = new ApplicationContext();
|
||||
$sParams = $oAppContext->GetForLink();
|
||||
$sParams = $oAppContext->GetForLink(true);
|
||||
foreach ($aGroupBy as $iRow => $iCount) {
|
||||
// Build the search for this subset
|
||||
$oSubsetSearch = $this->m_oFilter->DeepClone();
|
||||
@@ -1306,7 +1306,7 @@ JS
|
||||
|
||||
$aData[] = array(
|
||||
'group' => $aLabels[$iRow],
|
||||
'value' => "<a href=\"".utils::GetAbsoluteUrlAppRoot()."pages/UI.php?operation=search&dosearch=1&$sParams&filter=$sFilter\">$iCount</a>"
|
||||
'value' => "<a href=\"".utils::GetAbsoluteUrlAppRoot()."pages/UI.php?operation=search&dosearch=1$sParams&filter=$sFilter\">$iCount</a>"
|
||||
); // TO DO: add the context information
|
||||
}
|
||||
$aAttribs = array(
|
||||
@@ -1638,7 +1638,7 @@ JS
|
||||
$sGroupByExpr = isset($aExtraParams['group_by_expr']) ? '¶ms[group_by_expr]='.$aExtraParams['group_by_expr'] : '';
|
||||
$sFilter = $this->m_oFilter->serialize(false, $aQueryParams);
|
||||
$oContext = new ApplicationContext();
|
||||
$sContextParam = $oContext->GetForLink();
|
||||
$sContextParam = $oContext->GetForLink(true);
|
||||
$sAggregationFunction = isset($aExtraParams['aggregation_function']) ? $aExtraParams['aggregation_function'] : '';
|
||||
$sAggregationAttr = isset($aExtraParams['aggregation_attribute']) ? $aExtraParams['aggregation_attribute'] : '';
|
||||
$sLimit = isset($aExtraParams['limit']) ? $aExtraParams['limit'] : '';
|
||||
@@ -1646,7 +1646,7 @@ JS
|
||||
$sOrderDirection = isset($aExtraParams['order_direction']) ? $aExtraParams['order_direction'] : '';
|
||||
|
||||
if (isset($aExtraParams['group_by_label'])) {
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=chart¶ms[group_by]=$sGroupBy{$sGroupByExpr}¶ms[group_by_label]={$aExtraParams['group_by_label']}¶ms[chart_type]=$sChartType¶ms[currentId]=$sChartId{$iChartCounter}¶ms[order_direction]=$sOrderDirection¶ms[order_by]=$sOrderBy¶ms[limit]=$sLimit¶ms[aggregation_function]=$sAggregationFunction¶ms[aggregation_attribute]=$sAggregationAttr&id=$sChartId{$iChartCounter}&filter=".rawurlencode($sFilter).'&'.$sContextParam;
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=chart¶ms[group_by]=$sGroupBy{$sGroupByExpr}¶ms[group_by_label]={$aExtraParams['group_by_label']}¶ms[chart_type]=$sChartType¶ms[currentId]=$sChartId{$iChartCounter}¶ms[order_direction]=$sOrderDirection¶ms[order_by]=$sOrderBy¶ms[limit]=$sLimit¶ms[aggregation_function]=$sAggregationFunction¶ms[aggregation_attribute]=$sAggregationAttr&id=$sChartId{$iChartCounter}&filter=".rawurlencode($sFilter).$sContextParam;
|
||||
} else {
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=chart¶ms[group_by]=$sGroupBy{$sGroupByExpr}¶ms[chart_type]=$sChartType¶ms[currentId]=$sChartId{$iChartCounter}¶ms[order_direction]=$sOrderDirection¶ms[order_by]=$sOrderBy¶ms[limit]=$sLimit¶ms[aggregation_function]=$sAggregationFunction¶ms[aggregation_attribute]=$sAggregationAttr&id=$sChartId{$iChartCounter}&filter=".rawurlencode($sFilter).'&'.$sContextParam;
|
||||
}
|
||||
@@ -1683,11 +1683,14 @@ JS
|
||||
$oBlock = null;
|
||||
$sJSURLs = '';
|
||||
|
||||
$oContext = new ApplicationContext();
|
||||
$sContextParam = $oContext->GetForLink(true);
|
||||
|
||||
if (isset($aExtraParams['group_by'])) {
|
||||
$this->MakeGroupByQuery($aExtraParams, $oGroupByExp, $sGroupByLabel, $aGroupBy, $sAggregationFunction, $sFctVar, $sAggregationAttr, $sSql);
|
||||
$aRes = CMDBSource::QueryToArray($sSql);
|
||||
$oContext = new ApplicationContext();
|
||||
$sContextParam = $oContext->GetForLink();
|
||||
|
||||
|
||||
|
||||
$iTotalCount = 0;
|
||||
$aURLs = array();
|
||||
@@ -1707,14 +1710,14 @@ JS
|
||||
$oSubsetSearch = $this->m_oFilter->DeepClone();
|
||||
$oCondition = new BinaryExpression($oGroupByExp, '=', new ScalarExpression($sValue));
|
||||
$oSubsetSearch->AddConditionExpression($oCondition);
|
||||
$aURLs[] = utils::GetAbsoluteUrlAppRoot()."pages/UI.php?operation=search&format=html&filter=".rawurlencode($oSubsetSearch->serialize()).'&'.$sContextParam;
|
||||
$aURLs[] = utils::GetAbsoluteUrlAppRoot()."pages/UI.php?operation=search&format=html&filter=".rawurlencode($oSubsetSearch->serialize()).$sContextParam;
|
||||
}
|
||||
$sJSURLs = json_encode($aURLs);
|
||||
}
|
||||
if (isset($aExtraParams['group_by_label'])) {
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=chart¶ms[group_by]=$aExtraParams[group_by]¶ms[group_by_label]={$aExtraParams['group_by_label']}¶ms[chart_type]=$sChartType¶ms[currentId]=$aExtraParams[currentId]¶ms[order_direction]=$aExtraParams[order_direction]¶ms[order_by]=$aExtraParams[order_by]¶ms[limit]=$aExtraParams[limit]¶ms[aggregation_function]=$sAggregationFunction¶ms[aggregation_attribute]=$sAggregationAttr&id=$sId&filter=".rawurlencode($this->m_oFilter->ToOQL()).'&'.$sContextParam;
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=chart¶ms[group_by]=$aExtraParams[group_by]¶ms[group_by_label]={$aExtraParams['group_by_label']}¶ms[chart_type]=$sChartType¶ms[currentId]=$aExtraParams[currentId]¶ms[order_direction]=$aExtraParams[order_direction]¶ms[order_by]=$aExtraParams[order_by]¶ms[limit]=$aExtraParams[limit]¶ms[aggregation_function]=$sAggregationFunction¶ms[aggregation_attribute]=$sAggregationAttr&id=$sId&filter=".rawurlencode($this->m_oFilter->ToOQL()).$sContextParam;
|
||||
} else {
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=chart¶ms[group_by]=$aExtraParams[group_by]¶ms[chart_type]=$sChartType¶ms[currentId]=$aExtraParams[currentId]¶ms[order_direction]=$aExtraParams[order_direction]¶ms[order_by]=$aExtraParams[order_by]¶ms[limit]=$aExtraParams[limit]¶ms[aggregation_function]=$sAggregationFunction¶ms[aggregation_attribute]=$sAggregationAttr&id=$sId&filter=".rawurlencode($this->m_oFilter->ToOQL()).'&'.$sContextParam;
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=chart¶ms[group_by]=$aExtraParams[group_by]¶ms[chart_type]=$sChartType¶ms[currentId]=$aExtraParams[currentId]¶ms[order_direction]=$aExtraParams[order_direction]¶ms[order_by]=$aExtraParams[order_by]¶ms[limit]=$aExtraParams[limit]¶ms[aggregation_function]=$sAggregationFunction¶ms[aggregation_attribute]=$sAggregationAttr&id=$sId&filter=".rawurlencode($this->m_oFilter->ToOQL()).$sContextParam;
|
||||
}
|
||||
|
||||
switch ($sChartType) {
|
||||
@@ -1787,7 +1790,7 @@ JS
|
||||
|
||||
$oBlock->sCsvFile = strtolower($this->m_oFilter->GetClass()).'.csv';
|
||||
$oBlock->sDownloadLink = utils::GetAbsoluteUrlAppRoot().'webservices/export.php?expression='.urlencode($this->m_oFilter->ToOQL(true)).'&format=csv&filename='.urlencode($oBlock->sCsvFile);
|
||||
$oBlock->sLinkToToggle = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search&'.$oAppContext->GetForLink().'&filter='.rawurlencode($this->m_oFilter->serialize()).'&format=csv';
|
||||
$oBlock->sLinkToToggle = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search'.$oAppContext->GetForLink(true).'&filter='.rawurlencode($this->m_oFilter->serialize()).'&format=csv';
|
||||
// Pass the parameters via POST, since expression may be very long
|
||||
$aParamsToPost = array(
|
||||
'expression' => $this->m_oFilter->ToOQL(true),
|
||||
@@ -1891,10 +1894,7 @@ class MenuBlock extends DisplayBlock
|
||||
&& (!isset($aExtraParams['menu']) || $aExtraParams['menu'] === "1" || $aExtraParams['menu'] === true)
|
||||
) {
|
||||
$oAppContext = new ApplicationContext();
|
||||
$sContext = $oAppContext->GetForLink();
|
||||
if (utils::IsNotNullOrEmptyString($sContext)) {
|
||||
$sContext = '&'.$sContext;
|
||||
}
|
||||
$sContext = $oAppContext->GetForLink(true);
|
||||
|
||||
|
||||
$sFilter = $this->GetFilter()->serialize();
|
||||
@@ -2584,11 +2584,8 @@ class MenuBlock extends DisplayBlock
|
||||
$sUrl = "{$sRootUrl}pages/{$sUIPage}?{$sUrlParams}";
|
||||
|
||||
$oAppContext = new ApplicationContext();
|
||||
$sContext = $oAppContext->GetForLink();
|
||||
if (utils::IsNotNullOrEmptyString($sContext)) {
|
||||
$sUrl .= '&'.$sContext;
|
||||
}
|
||||
$sContext = $oAppContext->GetForLink(true);
|
||||
|
||||
return $sUrl;
|
||||
return $sUrl . $sContext;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ class CoreException extends Exception
|
||||
|
||||
public function getHtmlDesc($sHighlightHtmlBegin = '<b>', $sHighlightHtmlEnd = '</b>')
|
||||
{
|
||||
return $this->getMessage();
|
||||
return utils::EscapeHtml($this->getMessage());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -250,7 +250,7 @@ class UIExtKeyWidget
|
||||
foreach ($aAdditionalField as $sAdditionalField) {
|
||||
array_push($aArguments, $oObj->Get($sAdditionalField));
|
||||
}
|
||||
$aOption['additional_field'] = utils::HtmlEntities(vsprintf($sFormatAdditionalField, $aArguments));
|
||||
$aOption['additional_field'] = utils::HtmlEntities(utils::VSprintf($sFormatAdditionalField, $aArguments));
|
||||
}
|
||||
if (!empty($sObjectImageAttCode)) {
|
||||
// Try to retrieve image for contact
|
||||
|
||||
@@ -521,8 +521,8 @@ class utils
|
||||
|
||||
// For URL
|
||||
case static::ENUM_SANITIZATION_FILTER_URL:
|
||||
// N°6350 - returns only valid URLs
|
||||
$retValue = filter_var($value, FILTER_VALIDATE_URL);
|
||||
$retValue = filter_var($value, FILTER_SANITIZE_URL);
|
||||
$retValue = filter_var($retValue, FILTER_VALIDATE_URL);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -1516,12 +1516,12 @@ class utils
|
||||
case iPopupMenuExtension::MENU_OBJLIST_TOOLKIT:
|
||||
/** @var \DBObjectSet $param */
|
||||
$oAppContext = new ApplicationContext();
|
||||
$sContext = $oAppContext->GetForLink();
|
||||
$sContext = $oAppContext->GetForLink(true);
|
||||
$sDataTableId = is_null($sDataTableId) ? '' : $sDataTableId;
|
||||
$sUIPage = cmdbAbstractObject::ComputeStandardUIPage($param->GetFilter()->GetClass());
|
||||
$sOQL = addslashes($param->GetFilter()->ToOQL(true));
|
||||
$sFilter = urlencode($param->GetFilter()->serialize());
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/$sUIPage?operation=search&filter=".$sFilter."&{$sContext}";
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/$sUIPage?operation=search&filter=".$sFilter.$sContext;
|
||||
$oContainerBlock->AddJsFileRelPath('js/tabularfieldsselector.js');
|
||||
$oContainerBlock->AddJsFileRelPath('js/jquery.dragtable.js');
|
||||
$oContainerBlock->AddCssFileRelPath('css/dragtable.css');
|
||||
@@ -1555,6 +1555,11 @@ class utils
|
||||
}
|
||||
$aResult[] = new JSPopupMenuItem('UI:Menu:AddToDashboard', Dict::S('UI:Menu:AddToDashboard'), "DashletCreationDlg('$sOQL', '$sContext')");
|
||||
$aResult[] = new JSPopupMenuItem('UI:Menu:ShortcutList', Dict::S('UI:Menu:ShortcutList'), "ShortcutListDlg('$sOQL', '$sDataTableId', '$sContext')");
|
||||
if (ApplicationMenu::IsMenuIdEnabled('RunQueriesMenu')) {
|
||||
$oMenuItemPlay = new JSPopupMenuItem('UI:Menu:OpenOQL', Dict::S('UI:Edit:TestQuery'), "OpenOql('$sOQL')");
|
||||
$oMenuItemPlay->SetIconClass('fas fa-play');
|
||||
$aResult[] = $oMenuItemPlay;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
@@ -1691,8 +1696,8 @@ class utils
|
||||
$oAppContext = new ApplicationContext();
|
||||
|
||||
$sUrl = $sAppRootUrl
|
||||
.'pages/UI.php?operation=search&'
|
||||
.$oAppContext->GetForLink()
|
||||
.'pages/UI.php?operation=search'
|
||||
.$oAppContext->GetForLink(true)
|
||||
.'&filter='.rawurlencode($oDataTableSearchFilter->serialize());
|
||||
$sUrl .= '&aParams='.rawurlencode($sParams); // Not working... yet, cause not handled by UI.php
|
||||
|
||||
@@ -1947,7 +1952,7 @@ SQL;
|
||||
CURLOPT_HEADER => false, // don't return the headers in the output
|
||||
CURLOPT_FOLLOWLOCATION => true, // follow redirects
|
||||
CURLOPT_ENCODING => "", // handle all encodings
|
||||
CURLOPT_USERAGENT => static::GetConfig()->Get('http.request.user_agent'), // who am i
|
||||
CURLOPT_USERAGENT => "spider", // who am i
|
||||
CURLOPT_AUTOREFERER => true, // set referer on redirect
|
||||
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
|
||||
CURLOPT_TIMEOUT => 120, // timeout on response
|
||||
@@ -2075,6 +2080,127 @@ SQL;
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a string using vsprintf with safety checks to avoid ValueError
|
||||
*
|
||||
* This method fills missing arguments with their original format specifiers,
|
||||
* then calls vsprintf with the complete array.
|
||||
*
|
||||
* @param string $sFormat The format string
|
||||
* @param array $aArgs The arguments to format
|
||||
* @param bool $bLogErrors Whether to log errors (defaults to true)
|
||||
*
|
||||
* @return string The formatted string
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public static function VSprintf(string $sFormat, array $aArgs, bool $bLogErrors = true): string
|
||||
{
|
||||
// Extract all format specifiers
|
||||
$sPattern = '/%(?:(?:[1-9][0-9]*)\$)?[-+\'0# ]*(?:[0-9]*|\*)?(?:\.(?:[0-9]*|\*))?(?:[hlL])?[diouxXeEfFgGcrs%]/';
|
||||
preg_match_all($sPattern, $sFormat, $aMatches, PREG_OFFSET_CAPTURE);
|
||||
|
||||
// Process matches, keeping track of their positions and excluding escaped percent signs (%%)
|
||||
$aSpecifierMatches = [];
|
||||
foreach ($aMatches[0] as $sMatch) {
|
||||
if ($sMatch[0] !== '%%') {
|
||||
$aSpecifierMatches[] = $sMatch;
|
||||
}
|
||||
}
|
||||
|
||||
// Check for positional specifiers and build position map
|
||||
$bHasPositional = false;
|
||||
$iMaxPosition = 0;
|
||||
$aPositions = [];
|
||||
$aUniquePositions = [];
|
||||
|
||||
foreach ($aSpecifierMatches as $index => $match) {
|
||||
$sSpec = $match[0];
|
||||
if (preg_match('/^%([1-9][0-9]*)\$/', $sSpec, $posMatch)) {
|
||||
$bHasPositional = true;
|
||||
$iPosition = (int)$posMatch[1] - 1; // Convert to 0-based
|
||||
$aPositions[$index] = $iPosition;
|
||||
$aUniquePositions[$iPosition] = true;
|
||||
$iMaxPosition = max($iMaxPosition, $iPosition + 1);
|
||||
} else {
|
||||
$aPositions[$index] = $index;
|
||||
$aUniquePositions[$index] = true;
|
||||
$iMaxPosition = max($iMaxPosition, $index + 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Count unique positions, this tells us how many arguments we actually need
|
||||
$iExpectedCount = count($aUniquePositions);
|
||||
$iActualCount = count($aArgs);
|
||||
|
||||
// If we have enough arguments, just use vsprintf
|
||||
if ($iActualCount >= $iExpectedCount) {
|
||||
return vsprintf($sFormat, $aArgs);
|
||||
}
|
||||
// else log the error if needed
|
||||
if ($bLogErrors) {
|
||||
IssueLog::Warning("Format string requires $iExpectedCount arguments, but only $iActualCount provided. Format: '$sFormat'" );
|
||||
}
|
||||
|
||||
// Create a replacement map
|
||||
if ($bHasPositional) {
|
||||
// For positional, we need to handle the exact positions
|
||||
$aReplacements = array_fill(0, $iMaxPosition, null);
|
||||
|
||||
// Fill in the real arguments first
|
||||
foreach ($aArgs as $index => $sValue) {
|
||||
if ($index < $iMaxPosition) {
|
||||
$aReplacements[$index] = $sValue;
|
||||
}
|
||||
}
|
||||
|
||||
// For null values in the replacement map, use the original specifier
|
||||
foreach ($aSpecifierMatches as $index => $sMatch) {
|
||||
$iPosition = $aPositions[$index];
|
||||
if ($aReplacements[$iPosition] === null) {
|
||||
// Use the original format specifier when we don't have an argument
|
||||
$aReplacements[$iPosition] = $sMatch[0];
|
||||
}
|
||||
}
|
||||
|
||||
// Remove any remaining nulls (for positions that weren't referenced)
|
||||
$aReplacements = array_filter($aReplacements, static function($val) { return $val !== null; });
|
||||
} else {
|
||||
// For non-positional, we need to map each position
|
||||
$aReplacements = [];
|
||||
$iUsed = 0;
|
||||
|
||||
// Create a map of what values to use for each position
|
||||
$aPositionValues = [];
|
||||
for ($i = 0; $i < $iMaxPosition; $i++) {
|
||||
if (isset($aUniquePositions[$i])) {
|
||||
if ($iUsed < $iActualCount) {
|
||||
// We have an actual argument for this position
|
||||
$aPositionValues[$i] = $aArgs[$iUsed++];
|
||||
} else {
|
||||
// Mark this position to use the original specifier
|
||||
$aPositionValues[$i] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Build the replacements array preserving the original order
|
||||
foreach ($aSpecifierMatches as $index => $sMatch) {
|
||||
$iPosition = $aPositions[$index];
|
||||
if (isset($aPositionValues[$iPosition])) {
|
||||
$aReplacements[] = $aPositionValues[$iPosition];
|
||||
} else {
|
||||
// Use the original format specifier when we don't have an argument
|
||||
$aReplacements[] = $sMatch[0];
|
||||
// Mark this position as used, so if it appears again, it gets the same replacement
|
||||
$aPositionValues[$iPosition] = $sMatch[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Process the format string with our filled-in arguments
|
||||
return vsprintf($sFormat, $aReplacements);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a string containing some (valid) HTML markup to plain text
|
||||
*
|
||||
|
||||
@@ -4465,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)
|
||||
@@ -5020,7 +5020,7 @@ class AttributeCaseLog extends AttributeLongText
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strlen($proposedValue) > 0)
|
||||
if (utils::StrLen($proposedValue) > 0)
|
||||
{
|
||||
//N°5135 - add impersonation information in caselog
|
||||
if (UserRights::IsImpersonated()){
|
||||
@@ -10979,12 +10979,12 @@ abstract class AttributeSet extends AttributeDBFieldVoid
|
||||
$sDescription = utils::EscapeHtml($this->GetValueDescription($sValue));
|
||||
$oFilter = DBSearch::FromOQL("SELECT $sClass WHERE $sAttCode MATCHES '$sValue'");
|
||||
$oAppContext = new ApplicationContext();
|
||||
$sContext = $oAppContext->GetForLink();
|
||||
$sContext = $oAppContext->GetForLink(true);
|
||||
$sUIPage = cmdbAbstractObject::ComputeStandardUIPage($oFilter->GetClass());
|
||||
$sFilter = rawurlencode($oFilter->serialize());
|
||||
$sLink = '';
|
||||
if ($bWithLink && $this->bDisplayLink) {
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/$sUIPage?operation=search&filter=".$sFilter."&{$sContext}";
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/$sUIPage?operation=search&filter=".$sFilter.$sContext;
|
||||
$sLink = ' href="'.$sUrl.'"';
|
||||
}
|
||||
|
||||
@@ -12301,13 +12301,13 @@ class AttributeTagSet extends AttributeSet
|
||||
$sTagDescription = $oTag->Get('description');
|
||||
$oFilter = DBSearch::FromOQL("SELECT $sClass WHERE $sAttCode MATCHES '$sTagCode'");
|
||||
$oAppContext = new ApplicationContext();
|
||||
$sContext = $oAppContext->GetForLink();
|
||||
$sContext = $oAppContext->GetForLink(true);
|
||||
$sUIPage = cmdbAbstractObject::ComputeStandardUIPage($oFilter->GetClass());
|
||||
$sFilter = rawurlencode($oFilter->serialize());
|
||||
|
||||
$sLink = '';
|
||||
if ($bWithLink && $this->bDisplayLink) {
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/$sUIPage?operation=search&filter=".$sFilter."&{$sContext}";
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/$sUIPage?operation=search&filter=".$sFilter.$sContext;
|
||||
$sLink = ' href="'.$sUrl.'"';
|
||||
}
|
||||
|
||||
|
||||
@@ -472,8 +472,10 @@ class BulkChange
|
||||
protected $m_bLocalizedValues;
|
||||
/** @var array Cache for resolving external keys based on the given search criterias */
|
||||
protected $m_aExtKeysMappingCache;
|
||||
/** @var int number of columns */
|
||||
protected $m_iNbCol;
|
||||
|
||||
public function __construct($sClass, $aData, $aAttList, $aExtKeys, $aReconcilKeys, $sSynchroScope = null, $aOnDisappear = null, $sDateFormat = null, $bLocalize = false)
|
||||
public function __construct($sClass, $aData, $aAttList, $aExtKeys, $aReconcilKeys, $sSynchroScope = null, $aOnDisappear = null, $sDateFormat = null, $bLocalize = false, $iNbCol = 0)
|
||||
{
|
||||
$this->m_sClass = $sClass;
|
||||
$this->m_aData = $aData;
|
||||
@@ -485,6 +487,7 @@ class BulkChange
|
||||
$this->m_sDateFormat = $sDateFormat;
|
||||
$this->m_bLocalizedValues = $bLocalize;
|
||||
$this->m_aExtKeysMappingCache = array();
|
||||
$this->m_iNbCol =$iNbCol;
|
||||
}
|
||||
|
||||
protected function ResolveExternalKey($aRowData, $sAttCode, &$aResults)
|
||||
@@ -1236,19 +1239,14 @@ class BulkChange
|
||||
$iPreviousTimeLimit = ini_get('max_execution_time');
|
||||
$iLoopTimeLimit = MetaModel::GetConfig()->Get('max_execution_time_per_loop');
|
||||
|
||||
$iNBFields = count($this->m_aAttList);
|
||||
foreach ($this->m_aExtKeys as $aReconcilKeys) {
|
||||
$iNBFields += count($aReconcilKeys);
|
||||
}
|
||||
|
||||
// Avoid too many events
|
||||
cmdbAbstractObject::SetEventDBLinksChangedBlocked(true);
|
||||
try {
|
||||
foreach ($this->m_aData as $iRow => $aRowData) {
|
||||
set_time_limit(intval($iLoopTimeLimit));
|
||||
// Stop if not the good number of cols in $aRowData
|
||||
if(count($aRowData) != $iNBFields){
|
||||
$aResult[$iRow]["__STATUS__"] = new RowStatus_Issue(Dict::Format('UI:CSVReport-Row-Issue-NbField',count($aRowData),$iNBFields) );
|
||||
if($this->m_iNbCol>0 && count($aRowData) != $this->m_iNbCol){
|
||||
$aResult[$iRow]["__STATUS__"] = new RowStatus_Issue(Dict::Format('UI:CSVReport-Row-Issue-NbField',count($aRowData),$this->m_iNbCol) );
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1428,7 +1426,7 @@ class BulkChange
|
||||
$aDetails = array();
|
||||
while ($oChange = $oBulkChanges->Fetch())
|
||||
{
|
||||
$sDate = '<a href="csvimport.php?step=10&changeid='.$oChange->GetKey().'&'.$oAppContext->GetForLink().'">'.$oChange->Get('date').'</a>';
|
||||
$sDate = '<a href="csvimport.php?step=10&changeid='.$oChange->GetKey().$oAppContext->GetForLink(true).'">'.$oChange->Get('date').'</a>';
|
||||
$sUser = $oChange->GetUserName();
|
||||
if (preg_match('/^(.*)\\(CSV\\)$/i', $oChange->Get('userinfo'), $aMatches))
|
||||
{
|
||||
@@ -1510,7 +1508,7 @@ EOF
|
||||
function OnTruncatedHistoryToggle(bShowAll)
|
||||
{
|
||||
$('#csv_history_reload').html('<img src="' + GetAbsoluteUrlAppRoot() + 'images/indicator.gif"/>');
|
||||
$.get(GetAbsoluteUrlAppRoot()+'pages/ajax.render.php?{$sAppContext}', {operation: 'displayCSVHistory', showall: bShowAll}, function(data)
|
||||
$.get(GetAbsoluteUrlAppRoot()+'pages/ajax.render.php?$sAppContext', {operation: 'displayCSVHistory', showall: bShowAll}, function(data)
|
||||
{
|
||||
$('#$sAjaxDivId').html(data);
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ 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;
|
||||
|
||||
@@ -1233,6 +1233,14 @@ class Config
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
],
|
||||
'sessions_tracking.session_handler_extension' => [
|
||||
'type' => 'string',
|
||||
'description' => 'to store more data in itop session files, set your own iSessionHandlerExtension implementation class in this variable',
|
||||
'default' => '',
|
||||
'value' => '',
|
||||
'source_of_value' => '',
|
||||
'show_in_conf_sample' => false,
|
||||
],
|
||||
'sessions_tracking.gc_threshold' => [
|
||||
'type' => 'integer',
|
||||
'description' => 'fallback in case cron is not active: probability in percent that session files are cleanup during any itop request (100 means always)',
|
||||
|
||||
@@ -760,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;
|
||||
}
|
||||
@@ -818,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
|
||||
*
|
||||
|
||||
@@ -501,7 +501,8 @@ class DesignElement extends \DOMElement
|
||||
{
|
||||
$sSearchId = $oRefNode->getAttribute('id');
|
||||
}
|
||||
$sXPath = './'.$oRefNode->tagName."[@id='$sSearchId']";
|
||||
$sQuotedId = DesignDocument::XPathQuote($sSearchId);
|
||||
$sXPath = './'.$oRefNode->tagName."[@id=$sQuotedId]";
|
||||
|
||||
$oRes = $oXPath->query($sXPath, $oRoot);
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@ class Dict
|
||||
}
|
||||
|
||||
try{
|
||||
return vsprintf($sLocalizedFormat, $aArguments);
|
||||
return utils::VSprintf($sLocalizedFormat, $aArguments);
|
||||
} catch(\Throwable $e){
|
||||
\IssueLog::Error("Cannot format dict key", null, ["sFormatCode" => $sFormatCode, "sLangCode" => $sLangCode, 'exception_msg' => $e->getMessage() ]);
|
||||
return $sFormatCode.' - '.implode(', ', $aArguments);
|
||||
|
||||
@@ -453,6 +453,11 @@ class DisplayableNode extends GraphNode
|
||||
}
|
||||
}
|
||||
|
||||
public static function GetTooltipAttributes($sClass)
|
||||
{
|
||||
return MetaModel::GetZListItems($sClass, 'list');
|
||||
}
|
||||
|
||||
public function GetTooltip($aContextDefs)
|
||||
{
|
||||
$sHtml = '';
|
||||
@@ -474,7 +479,7 @@ class DisplayableNode extends GraphNode
|
||||
$sHtml .= '<hr/>';
|
||||
}
|
||||
$sHtml .= '<table><tbody>';
|
||||
foreach(MetaModel::GetZListItems($sSubClass, 'list') as $sAttCode)
|
||||
foreach(static::GetTooltipAttributes($sSubClass) as $sAttCode)
|
||||
{
|
||||
$oAttDef = MetaModel::GetAttributeDef($sSubClass, $sAttCode);
|
||||
$sHtml .= '<tr><td>'.$oAttDef->GetLabel().': </td><td>'.$oCurrObj->GetAsHtml($sAttCode).'</td></tr>';
|
||||
@@ -864,6 +869,7 @@ class DisplayableGraph extends SimpleGraph
|
||||
*/
|
||||
public static function FromRelationGraph(RelationGraph $oGraph, $iGroupingThreshold = 20, $bDirectionDown = true, $bForPdf = false)
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
$oNewGraph = new DisplayableGraph();
|
||||
$oNewGraph->bDirectionDown = $bDirectionDown;
|
||||
$iPreviousTimeLimit = ini_get('max_execution_time');
|
||||
@@ -1017,6 +1023,7 @@ class DisplayableGraph extends SimpleGraph
|
||||
}
|
||||
set_time_limit(intval($iPreviousTimeLimit));
|
||||
|
||||
$oKPI->ComputeStats('FromRelationGraph', '');
|
||||
return $oNewGraph;
|
||||
}
|
||||
|
||||
@@ -1027,6 +1034,7 @@ class DisplayableGraph extends SimpleGraph
|
||||
*/
|
||||
public function InitFromGraphviz()
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
$sDot = $this->DumpAsXDot();
|
||||
if (strpos($sDot, 'digraph') === false)
|
||||
{
|
||||
@@ -1054,6 +1062,7 @@ class DisplayableGraph extends SimpleGraph
|
||||
}
|
||||
}
|
||||
}
|
||||
$oKPI->ComputeStats('InitFromGraphviz', '');
|
||||
}
|
||||
|
||||
public function GetBoundingBox()
|
||||
@@ -1470,8 +1479,8 @@ class DisplayableGraph extends SimpleGraph
|
||||
try {
|
||||
$this->InitFromGraphviz();
|
||||
$sExportAsPdfURL = utils::GetAbsoluteUrlAppRoot().'pages/ajax.render.php?operation=relation_pdf&relation='.$sRelation.'&direction='.($this->bDirectionDown ? 'down' : 'up');
|
||||
$sContext = $oAppContext->GetForLink();
|
||||
$sDrillDownURL = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=details&class=%1$s&id=%2$s&'.$sContext;
|
||||
$sContext = $oAppContext->GetForLink(true);
|
||||
$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');
|
||||
$sLoadFromURL = utils::GetAbsoluteUrlAppRoot().'pages/ajax.render.php?operation=relation_json&relation='.$sRelation.'&direction='.($this->bDirectionDown ? 'down' : 'up');
|
||||
$sAttachmentExportTitle = '';
|
||||
|
||||
@@ -469,7 +469,8 @@ class ExecutionKPI
|
||||
// Invoke extensions to log the KPI operation
|
||||
/** @var \iKPILoggerExtension $oExtensionInstance */
|
||||
foreach (MetaModel::EnumPlugins('iKPILoggerExtension') as $oExtensionInstance) {
|
||||
$sExtension = ModuleService::GetInstance()->GetModuleNameFromCallStack(1);
|
||||
//$sExtension = ModuleService::GetInstance()->GetModuleNameFromCallStack(1);
|
||||
$sExtension = '';
|
||||
$oKPILogData = new KpiLogData(
|
||||
KpiLogData::TYPE_STATS,
|
||||
$sOperation,
|
||||
|
||||
@@ -77,7 +77,7 @@ abstract class ModelReflection
|
||||
return $sFormatCode.' - '.implode(', ', $aArguments);
|
||||
}
|
||||
|
||||
return vsprintf($sLocalizedFormat, $aArguments);
|
||||
return utils::VSprintf($sLocalizedFormat, $aArguments);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -203,6 +203,7 @@ class RelationEdge extends GraphEdge
|
||||
*/
|
||||
class RelationGraph extends SimpleGraph
|
||||
{
|
||||
private static bool $bOptimizationEnabled = true;
|
||||
protected $aSourceNodes; // Index of source nodes (for a quicker access)
|
||||
protected $aSinkNodes; // Index of sink nodes (for a quicker access)
|
||||
protected $aRedundancySettings; // Cache of user settings
|
||||
@@ -217,6 +218,16 @@ class RelationGraph extends SimpleGraph
|
||||
$this->aContextSearches = array();
|
||||
}
|
||||
|
||||
static public function GetOptimizationEnabled(): bool
|
||||
{
|
||||
return static::$bOptimizationEnabled;
|
||||
}
|
||||
|
||||
static public function SetOptimizationEnabled(bool $bEnabled)
|
||||
{
|
||||
static::$bOptimizationEnabled = $bEnabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an object that will be the starting point for building the relations downstream
|
||||
*
|
||||
@@ -261,16 +272,23 @@ class RelationGraph extends SimpleGraph
|
||||
IssueLog::Error("Invalid context query '$sOQL'. A context query must contain at least two columns.");
|
||||
throw new Exception("Invalid context query '$sOQL'. A context query must contain at least two columns. Columns: ".implode(', ', $aAliases).'. ');
|
||||
}
|
||||
$aAliasNames = array_keys($aAliases);
|
||||
$oCondition = new BinaryExpression(new FieldExpression('id', $aAliasNames[0]), '=', new VariableExpression('id'));
|
||||
$oSearch->AddConditionExpression($oCondition);
|
||||
|
||||
$sClass = $oSearch->GetClass();
|
||||
if (!array_key_exists($sClass, $this->aContextSearches))
|
||||
{
|
||||
$this->aContextSearches[$sClass] = array();
|
||||
|
||||
if (static::GetOptimizationEnabled()) {
|
||||
$sClass = $oSearch->GetClass();
|
||||
$this->aContextSearches[$sClass][] = array('key' => $key, 'search' => $oSearch);
|
||||
}
|
||||
else {
|
||||
$aAliasNames = array_keys($aAliases);
|
||||
$oCondition = new BinaryExpression(new FieldExpression('id', $aAliasNames[0]), '=', new VariableExpression('id'));
|
||||
$oSearch->AddConditionExpression($oCondition);
|
||||
|
||||
$sClass = $oSearch->GetClass();
|
||||
if (!array_key_exists($sClass, $this->aContextSearches))
|
||||
{
|
||||
$this->aContextSearches[$sClass] = array();
|
||||
}
|
||||
$this->aContextSearches[$sClass][] = array('key' => $key, 'search' => $oSearch);
|
||||
}
|
||||
$this->aContextSearches[$sClass][] = array('key' => $key, 'search' => $oSearch);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -283,6 +301,8 @@ class RelationGraph extends SimpleGraph
|
||||
*/
|
||||
public function IsPartOfContext(DBObject $oObj, &$aRootCauses)
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
|
||||
$bRet = false;
|
||||
$sFinalClass = get_class($oObj);
|
||||
$aParentClasses = MetaModel::EnumParentClasses($sFinalClass, ENUM_PARENT_CLASSES_ALL);
|
||||
@@ -313,6 +333,7 @@ class RelationGraph extends SimpleGraph
|
||||
}
|
||||
}
|
||||
}
|
||||
$oKPI->ComputeStats(__METHOD__, get_class($oObj));
|
||||
return $bRet;
|
||||
}
|
||||
|
||||
@@ -329,6 +350,7 @@ class RelationGraph extends SimpleGraph
|
||||
*/
|
||||
public function ComputeRelatedObjectsDown($sRelCode, $iMaxDepth, $bEnableRedundancy, $aUnreachableObjects = array())
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
//echo "<h5>Sources only...</h5>\n".$this->DumpAsHtmlImage()."<br/>\n";
|
||||
// Build the graph out of the sources
|
||||
foreach ($this->aSourceNodes as $oSourceNode)
|
||||
@@ -336,8 +358,10 @@ class RelationGraph extends SimpleGraph
|
||||
$this->AddRelatedObjects($sRelCode, true, $oSourceNode, $iMaxDepth, $bEnableRedundancy);
|
||||
//echo "<h5>After processing of {$oSourceNode->GetId()}</h5>\n".$this->DumpAsHtmlImage()."<br/>\n";
|
||||
}
|
||||
$oKPI->ComputeAndReport(__FUNCTION__.' - AddRelatedObjects');
|
||||
|
||||
// Mark the unreachable nodes
|
||||
$oKPI = new ExecutionKPI();
|
||||
foreach ($aUnreachableObjects as $oObj)
|
||||
{
|
||||
$sNodeId = RelationObjectNode::MakeId($oObj);
|
||||
@@ -347,29 +371,26 @@ class RelationGraph extends SimpleGraph
|
||||
$oNode->SetProperty('is_reached_allowed', false);
|
||||
}
|
||||
}
|
||||
$oKPI->ComputeAndReport(__FUNCTION__.' - Mark unreachable nodes');
|
||||
|
||||
// Determine the reached nodes
|
||||
$oKPI = new ExecutionKPI();
|
||||
foreach ($this->aSourceNodes as $oSourceNode)
|
||||
{
|
||||
$oSourceNode->ReachDown('is_reached', true);
|
||||
//echo "<h5>After reaching from {$oSourceNode->GetId()}</h5>\n".$this->DumpAsHtmlImage()."<br/>\n";
|
||||
}
|
||||
$oKPI->ComputeAndReport(__FUNCTION__.' - Determine reached nodes');
|
||||
|
||||
// Mark also the "context" nodes as reached and record the "root causes" for each node
|
||||
$oIterator = new RelationTypeIterator($this, 'Node');
|
||||
foreach($oIterator as $oNode)
|
||||
{
|
||||
$oObj = $oNode->GetProperty('object');
|
||||
$aRootCauses = array();
|
||||
if (!is_null($oObj) && $this->IsPartOfContext($oObj, $aRootCauses))
|
||||
{
|
||||
$oNode->SetProperty('context_root_causes', $aRootCauses);
|
||||
$oNode->ReachDown('is_reached', true);
|
||||
}
|
||||
}
|
||||
$oKPI = new ExecutionKPI();
|
||||
$this->MarkContextNodesAsReached();
|
||||
$oKPI->ComputeAndReport(__FUNCTION__.' - Mark context nodes as reached');
|
||||
|
||||
$oKPI = new ExecutionKPI();
|
||||
if ( MetaModel::GetConfig()->Get('relations.complete_analysis')) {
|
||||
$this->ApplyUserRightsOnGraph();
|
||||
}
|
||||
$oKPI->ComputeAndReport(__FUNCTION__.' - Apply user rights on graph');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -384,6 +405,7 @@ class RelationGraph extends SimpleGraph
|
||||
*/
|
||||
public function ComputeRelatedObjectsUp($sRelCode, $iMaxDepth, $bEnableRedundancy)
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
//echo "<h5>Sinks only...</h5>\n".$this->DumpAsHtmlImage()."<br/>\n";
|
||||
// Build the graph out of the sinks
|
||||
foreach ($this->aSinkNodes as $oSinkNode)
|
||||
@@ -407,6 +429,7 @@ class RelationGraph extends SimpleGraph
|
||||
if ( MetaModel::GetConfig()->Get('relations.complete_analysis')) {
|
||||
$this->ApplyUserRightsOnGraph();
|
||||
}
|
||||
$oKPI->ComputeStats('GetRelatedObjects-Up', '');
|
||||
}
|
||||
|
||||
|
||||
@@ -423,6 +446,11 @@ class RelationGraph extends SimpleGraph
|
||||
*/
|
||||
protected function AddRelatedObjects($sRelCode, $bDown, $oObjectNode, $iMaxDepth, $bEnableRedundancy)
|
||||
{
|
||||
if (static::GetOptimizationEnabled()) {
|
||||
$this->AddRelatedObjects_Optimized();
|
||||
return;
|
||||
}
|
||||
|
||||
if ($iMaxDepth > 0)
|
||||
{
|
||||
if ($oObjectNode instanceof RelationRedundancyNode)
|
||||
@@ -513,6 +541,64 @@ class RelationGraph extends SimpleGraph
|
||||
}
|
||||
}
|
||||
|
||||
public function AddRelatedObjects_Optimized()
|
||||
{
|
||||
$sRelCode = 'impact';
|
||||
|
||||
// TODO : dehardcode against the source nodes
|
||||
$sSQLQuery = file_get_contents(APPROOT.'/impact_server1.sql');
|
||||
|
||||
$aRes = CMDBSource::QueryToArray($sSQLQuery, MYSQLI_ASSOC);
|
||||
|
||||
$oKPI = new ExecutionKPI();
|
||||
$aClassToId = [];
|
||||
foreach ($aRes as $aRow) {
|
||||
if (is_null($aRow['parent_class']) || is_null($aRow['parent_id'])) {
|
||||
// No parent => source node already present in the graph
|
||||
continue;
|
||||
}
|
||||
$aClassToId[$aRow['class']][$aRow['id']] = $aRow['name'];
|
||||
}
|
||||
$oKPI->ComputeAndReport('AddRelatedObjectsDown - Create aClassToId');
|
||||
|
||||
$oKPI = new ExecutionKPI();
|
||||
// One query per class => not too bad
|
||||
// Note: it is not possible to use the root class as we need to load the tooltip attributes
|
||||
foreach ($aClassToId as $sClass => $aIds) {
|
||||
$oSearch = new DBObjectSearch($sClass);
|
||||
$oSearch->AllowAllData();
|
||||
$oSearch->AddCondition('id', array_keys($aIds), 'IN');
|
||||
$oSet = new DBObjectSet($oSearch);
|
||||
$oSet->OptimizeColumnLoad([$oSearch->GetClassAlias() => DisplayableNode::GetTooltipAttributes($sClass)]);
|
||||
while ($oObj = $oSet->Fetch()) {
|
||||
$sNodeId = RelationObjectNode::MakeId($oObj);
|
||||
if (!isset($this->aNodes[$sNodeId])) {
|
||||
$this->aNodes[$sNodeId] = new RelationObjectNode($this, $oObj);
|
||||
}
|
||||
}
|
||||
}
|
||||
$oKPI->ComputeAndReport('AddRelatedObjectsDown - Query each class and create nodes: '.count($aClassToId));
|
||||
|
||||
$oKPI = new ExecutionKPI();
|
||||
foreach ($aRes as $aRow) {
|
||||
if (is_null($aRow['parent_class']) || is_null($aRow['parent_id'])) {
|
||||
// No parent, so no edge
|
||||
continue;
|
||||
}
|
||||
if ($aRow['backtracking'] == 0) {
|
||||
$oSourceNode = $this->GetNode("{$aRow['parent_class']}::{$aRow['parent_id']}");
|
||||
$oSinkNode = $this->GetNode("{$aRow['class']}::{$aRow['id']}");
|
||||
}
|
||||
else {
|
||||
$oSourceNode = $this->GetNode("{$aRow['class']}::{$aRow['id']}");
|
||||
$oSinkNode = $this->GetNode("{$aRow['parent_class']}::{$aRow['parent_id']}");
|
||||
}
|
||||
new RelationEdge($this, $oSourceNode, $oSinkNode);
|
||||
}
|
||||
$oKPI->ComputeAndReport('AddRelatedObjectsDown - Create edges : '.count($aRes));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Determine if there is a redundancy (or use the existing one) and add the corresponding nodes/edges
|
||||
*
|
||||
@@ -747,4 +833,71 @@ class RelationGraph extends SimpleGraph
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark "context" nodes as reached and record the "root causes" for each node
|
||||
*/
|
||||
private function MarkContextNodesAsReached()
|
||||
{
|
||||
if (static::GetOptimizationEnabled()) {
|
||||
$this->MarkContextNodesAsReached_Optimized();
|
||||
return;
|
||||
}
|
||||
|
||||
$oIterator = new RelationTypeIterator($this, 'Node');
|
||||
foreach($oIterator as $oNode)
|
||||
{
|
||||
$oObj = $oNode->GetProperty('object');
|
||||
$aRootCauses = array();
|
||||
if (!is_null($oObj) && $this->IsPartOfContext($oObj, $aRootCauses))
|
||||
{
|
||||
$oNode->SetProperty('context_root_causes', $aRootCauses);
|
||||
$oNode->ReachDown('is_reached', true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function MarkContextNodesAsReached_Optimized()
|
||||
{
|
||||
$oIterator = new RelationTypeIterator($this, 'Node');
|
||||
// 1. Group all nodes by class
|
||||
$aClassToId = [];
|
||||
foreach ($oIterator as $oNode) {
|
||||
$oObj = $oNode->GetProperty('object');
|
||||
if ($oObj) {
|
||||
$aClassToId[get_class($oObj)][$oObj->GetKey()] = $oNode;
|
||||
}
|
||||
}
|
||||
// 2. For each class, perform a search to find the context objects
|
||||
$aContextNodes = [];
|
||||
foreach ($aClassToId as $sClass => $aIdToNodes) {
|
||||
foreach (MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_ALL) as $sParentClass)
|
||||
{
|
||||
if (!array_key_exists($sParentClass, $this->aContextSearches)) {
|
||||
continue; // No context search for this class
|
||||
}
|
||||
foreach ($this->aContextSearches[$sParentClass] as $aContextQuery)
|
||||
{
|
||||
$oKPI = new ExecutionKPI();
|
||||
/** @var \DBSearch $oSearch */
|
||||
$oSearch = $aContextQuery['search']->DeepClone();
|
||||
$oSearch->AddCondition('id', array_keys($aIdToNodes), 'IN');
|
||||
$aAliasNames = array_keys($oSearch->GetSelectedClasses());
|
||||
$sObjectAlias = $aAliasNames[0];
|
||||
$sRootCauseAlias = $aAliasNames[1];
|
||||
$oSet = new DBObjectSet($oSearch);
|
||||
$oSet->OptimizeColumnLoad([$sObjectAlias => [], $sRootCauseAlias => []]);
|
||||
while($aRow = $oSet->FetchAssoc()) {
|
||||
$oRootCauseObject = $aRow[$sRootCauseAlias];
|
||||
if (is_null($oRootCauseObject)) continue;
|
||||
|
||||
$oNode = $aIdToNodes[$aRow[$sObjectAlias]->GetKey()];
|
||||
$aRootCauses = $oNode->GetProperty('context_root_causes', []);
|
||||
$aRootCauses[$aContextQuery['key']][$oRootCauseObject->GetKey()] = $oRootCauseObject;
|
||||
$oNode->SetProperty('context_root_causes', $aRootCauses);
|
||||
}
|
||||
$oKPI->ComputeStats('Query to find context objects', $sClass.' - '.$aContextQuery['key']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,6 +76,52 @@ class ObjectResult
|
||||
$this->fields = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an ObjectResult from a DBObject.
|
||||
*
|
||||
* @param DBObject $oObj The object.
|
||||
* @param array|null $aFieldSpec An array of class => attribute codes (Cf. RestUtils::GetFieldList). List of the attributes to be reported.
|
||||
* @param boolean $bExtendedOutput Output all of the link set attributes ?
|
||||
* @param integer $iCode An error code (RestResult::OK is no issue has been found)
|
||||
* @param string $sMessage Description of the error if any, an empty string otherwise
|
||||
*
|
||||
* @return ObjectResult
|
||||
*/
|
||||
public static function FromDBObject(DBObject $oObj, ?array $aFieldSpec = null, $bExtendedOutput = false, $iCode = 0, $sMessage = '') : ObjectResult {
|
||||
|
||||
$oObjRes = new ObjectResult($oObj::class, $oObj->GetKey());
|
||||
$oObjRes->code = $iCode;
|
||||
$oObjRes->message = $sMessage;
|
||||
|
||||
$aFields = null;
|
||||
if (!is_null($aFieldSpec))
|
||||
{
|
||||
// Enum all classes in the hierarchy, starting with the current one
|
||||
foreach (MetaModel::EnumParentClasses($oObj::class, ENUM_PARENT_CLASSES_ALL, false) as $sRefClass)
|
||||
{
|
||||
if (array_key_exists($sRefClass, $aFieldSpec))
|
||||
{
|
||||
$aFields = $aFieldSpec[$sRefClass];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (is_null($aFields))
|
||||
{
|
||||
// No fieldspec given, or not found...
|
||||
$aFields = array('id', 'friendlyname');
|
||||
}
|
||||
|
||||
foreach ($aFields as $sAttCode)
|
||||
{
|
||||
$oObjRes->AddField($oObj, $sAttCode, $bExtendedOutput);
|
||||
}
|
||||
|
||||
return $oObjRes;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Helper to make an output value for a given attribute
|
||||
*
|
||||
@@ -185,40 +231,6 @@ class RestResultWithObjects extends RestResult
|
||||
/** @var array "DBObject_class:DBObject_key" as key, {@see \ObjectResult} as value */
|
||||
public $objects;
|
||||
|
||||
public function PrepareObject($iCode, $sMessage, $oObject, $aFieldSpec = null, $bExtendedOutput = false)
|
||||
{
|
||||
$sClass = get_class($oObject);
|
||||
$oObjRes = new ObjectResult($sClass, $oObject->GetKey());
|
||||
$oObjRes->code = $iCode;
|
||||
$oObjRes->message = $sMessage;
|
||||
|
||||
$aFields = null;
|
||||
if (!is_null($aFieldSpec))
|
||||
{
|
||||
// Enum all classes in the hierarchy, starting with the current one
|
||||
foreach (MetaModel::EnumParentClasses($sClass, ENUM_PARENT_CLASSES_ALL, false) as $sRefClass)
|
||||
{
|
||||
if (array_key_exists($sRefClass, $aFieldSpec))
|
||||
{
|
||||
$aFields = $aFieldSpec[$sRefClass];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (is_null($aFields))
|
||||
{
|
||||
// No fieldspec given, or not found...
|
||||
$aFields = array('id', 'friendlyname');
|
||||
}
|
||||
|
||||
foreach ($aFields as $sAttCode)
|
||||
{
|
||||
$oObjRes->AddField($oObject, $sAttCode, $bExtendedOutput);
|
||||
}
|
||||
|
||||
return $oObjRes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Report the given object
|
||||
*
|
||||
@@ -237,7 +249,8 @@ class RestResultWithObjects extends RestResult
|
||||
*/
|
||||
public function AddObject($iCode, $sMessage, $oObject, $aFieldSpec = null, $bExtendedOutput = false)
|
||||
{
|
||||
$oObjRes = $this->PrepareObject($iCode, $sMessage, $oObject, $aFieldSpec, $bExtendedOutput);
|
||||
$oObjRes = ObjectResult::FromDBObject($oObject, $aFieldSpec, $bExtendedOutput, $iCode, $sMessage);
|
||||
|
||||
$sObjKey = get_class($oObject).'::'.$oObject->GetKey();
|
||||
$this->objects[$sObjKey] = $oObjRes;
|
||||
}
|
||||
@@ -253,45 +266,6 @@ public function SanitizeContent()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @package RESTAPI
|
||||
* @api
|
||||
*/
|
||||
class RestResultWithObjectSets extends RestResultWithObjects
|
||||
{
|
||||
private $current_object = null;
|
||||
|
||||
public function MakeNewObjectSet()
|
||||
{
|
||||
$arr = array();
|
||||
$this->current_object = &$arr;
|
||||
$this->objects[] = &$arr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Report the given object
|
||||
*
|
||||
* @api
|
||||
* @param string $sObjectAlias Name of the subobject, usually the OQL class alias
|
||||
* @param int $iCode An error code (RestResult::OK is no issue has been found)
|
||||
* @param string $sMessage Description of the error if any, an empty string otherwise
|
||||
* @param DBObject $oObject The object being reported
|
||||
* @param array|null $aFieldSpec An array of class => attribute codes (Cf. RestUtils::GetFieldList). List of the attributes to be reported.
|
||||
* @param boolean $bExtendedOutput Output all of the link set attributes ?
|
||||
*
|
||||
* @return void
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreException
|
||||
* @throws \CoreUnexpectedValue
|
||||
* @throws \MySQLException
|
||||
*/
|
||||
public function AppendSubObject($sObjectAlias, $iCode, $sMessage, $oObject, $aFieldSpec = null, $bExtendedOutput = false)
|
||||
{
|
||||
$oObjRes = $this->PrepareObject($iCode, $sMessage, $oObject, $aFieldSpec, $bExtendedOutput);
|
||||
$this->current_object[$sObjectAlias] = $oObjRes;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @package RESTAPI
|
||||
* @api
|
||||
@@ -571,21 +545,14 @@ class CoreServices implements iRestServiceProvider, iRestInputSanitizer
|
||||
break;
|
||||
|
||||
case 'core/get':
|
||||
$sClassParam = RestUtils::GetMandatoryParam($aParams, 'class');
|
||||
$sClass = RestUtils::GetClass($aParams, 'class');
|
||||
$key = RestUtils::GetMandatoryParam($aParams, 'key');
|
||||
$sShowFields = RestUtils::GetOptionalParam($aParams, 'output_fields', '*');
|
||||
$aShowFields = RestUtils::GetFieldList($sClass, $aParams, 'output_fields');
|
||||
$bExtendedOutput = (RestUtils::GetOptionalParam($aParams, 'output_fields', '*') == '*+');
|
||||
$iLimit = (int)RestUtils::GetOptionalParam($aParams, 'limit', 0);
|
||||
$iPage = (int)RestUtils::GetOptionalParam($aParams, 'page', 1);
|
||||
|
||||
// Validate the class(es)
|
||||
$aClass = explode(',', $sClassParam);
|
||||
foreach ($aClass as $sClass) {
|
||||
if (!MetaModel::IsValidClass(trim($sClass))) {
|
||||
throw new Exception("class '$sClass' is not valid");
|
||||
}
|
||||
}
|
||||
|
||||
$oObjectSet = RestUtils::GetObjectSetFromKey($sClassParam, $key, $iLimit, self::getOffsetFromLimitAndPage($iLimit, $iPage));
|
||||
$oObjectSet = RestUtils::GetObjectSetFromKey($sClass, $key, $iLimit, self::getOffsetFromLimitAndPage($iLimit, $iPage));
|
||||
$sTargetClass = $oObjectSet->GetFilter()->GetClass();
|
||||
|
||||
if (UserRights::IsActionAllowed($sTargetClass, UR_ACTION_READ) != UR_ALLOWED_YES)
|
||||
@@ -603,68 +570,23 @@ class CoreServices implements iRestServiceProvider, iRestInputSanitizer
|
||||
$oResult->code = RestResult::INVALID_PAGE;
|
||||
$oResult->message = "The request page number is not valid. It must be an integer greater than 0";
|
||||
}
|
||||
elseif (count($oObjectSet->GetSelectedClasses()) > 1)
|
||||
else
|
||||
{
|
||||
$oResult = new RestResultWithObjectSets();
|
||||
$aCache = [];
|
||||
$aShowFields = [];
|
||||
foreach ($oObjectSet->GetSelectedClasses() as $sSelectedClass) {
|
||||
$aShowFields = array_merge( $aShowFields, RestUtils::GetFieldList($sSelectedClass, $aParams, 'output_fields', false));
|
||||
}
|
||||
if (!$bExtendedOutput && RestUtils::GetOptionalParam($aParams, 'output_fields', '*') != '*')
|
||||
{
|
||||
$aFields = $aShowFields[$sClass];
|
||||
//Id is not a valid attribute to optimize
|
||||
if (in_array('id', $aFields))
|
||||
{
|
||||
unset($aFields[array_search('id', $aFields)]);
|
||||
}
|
||||
$aAttToLoad = array($oObjectSet->GetClassAlias() => $aFields);
|
||||
$oObjectSet->OptimizeColumnLoad($aAttToLoad);
|
||||
}
|
||||
|
||||
while ($oObjects = $oObjectSet->FetchAssoc()) {
|
||||
$oResult->MakeNewObjectSet();
|
||||
|
||||
foreach ($oObjects as $sAlias => $oObject) {
|
||||
if (!$oObject) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!array_key_exists($sAlias, $aCache)) {
|
||||
$sClass = get_class($oObject);
|
||||
$bExtendedOutput = RestUtils::HasRequestedExtendedOutput($sShowFields);
|
||||
|
||||
if (!RestUtils::HasRequestedAllOutputFields($sShowFields)) {
|
||||
$aFields = $aShowFields[$sClass];
|
||||
//Id is not a valid attribute to optimize
|
||||
if ($aFields && in_array('id', $aFields)) {
|
||||
unset($aFields[array_search('id', $aFields)]);
|
||||
}
|
||||
$aAttToLoad = [$sAlias => $aFields];
|
||||
$oObjectSet->OptimizeColumnLoad($aAttToLoad);
|
||||
}
|
||||
$aCache[$sAlias] = [
|
||||
'aShowFields' => $aShowFields,
|
||||
'bExtendedOutput' => $bExtendedOutput,
|
||||
];
|
||||
} else {
|
||||
$aShowFields = $aCache[$sAlias]['aShowFields'];
|
||||
$bExtendedOutput = $aCache[$sAlias]['bExtendedOutput'];
|
||||
}
|
||||
|
||||
$oResult->AppendSubObject($sAlias, 0, '', $oObject, $aShowFields, $bExtendedOutput);
|
||||
}
|
||||
}
|
||||
$oResult->message = "Found: ".$oObjectSet->Count();
|
||||
} else {
|
||||
$aShowFields =[];
|
||||
foreach ($aClass as $sSelectedClass) {
|
||||
$sSelectedClass = trim($sSelectedClass);
|
||||
$aShowFields = array_merge($aShowFields, RestUtils::GetFieldList($sSelectedClass, $aParams, 'output_fields', false));
|
||||
}
|
||||
|
||||
if (!RestUtils::HasRequestedAllOutputFields($sShowFields) && count($aShowFields) == 1) {
|
||||
$aFields = $aShowFields[$sClass];
|
||||
//Id is not a valid attribute to optimize
|
||||
if (in_array('id', $aFields)) {
|
||||
unset($aFields[array_search('id', $aFields)]);
|
||||
}
|
||||
$aAttToLoad = array($oObjectSet->GetClassAlias() => $aFields);
|
||||
$oObjectSet->OptimizeColumnLoad($aAttToLoad);
|
||||
}
|
||||
|
||||
while ($oObject = $oObjectSet->Fetch()) {
|
||||
$oResult->AddObject(0, '', $oObject, $aShowFields, RestUtils::HasRequestedExtendedOutput($sShowFields));
|
||||
while ($oObject = $oObjectSet->Fetch())
|
||||
{
|
||||
$oResult->AddObject(0, '', $oObject, $aShowFields, $bExtendedOutput);
|
||||
}
|
||||
$oResult->message = "Found: ".$oObjectSet->Count();
|
||||
}
|
||||
|
||||
@@ -517,8 +517,10 @@ EOF
|
||||
@fclose($rFile);
|
||||
$aOutput = array();
|
||||
$CommandLine = "\"$sDotExecutable\" -v -Tpng < \"$sDotFilePath\" -o\"$sImageFilePath\" 2>&1";
|
||||
|
||||
|
||||
$oKPI = new ExecutionKPI();
|
||||
exec($CommandLine, $aOutput, $iRetCode);
|
||||
$oKPI->ComputeStats('Graphviz execution png', 'png');
|
||||
if ($iRetCode != 0)
|
||||
{
|
||||
$sHtml = '';
|
||||
@@ -573,8 +575,10 @@ EOF
|
||||
@fclose($rFile);
|
||||
$aOutput = array();
|
||||
$CommandLine = "\"$sDotExecutable\" -v -Tdot < \"$sDotFilePath\" -o\"$sXdotFilePath\" 2>&1";
|
||||
|
||||
|
||||
$oKPI = new ExecutionKPI();
|
||||
exec($CommandLine, $aOutput, $iRetCode);
|
||||
$oKPI->ComputeStats('Graphviz execution dot', 'dot');
|
||||
if ($iRetCode != 0)
|
||||
{
|
||||
$sHtml = '';
|
||||
|
||||
@@ -2120,6 +2120,8 @@ class StimulusChecker extends ActionChecker
|
||||
{
|
||||
var $sState = null;
|
||||
|
||||
public mixed $iState = null;
|
||||
|
||||
public function __construct(DBSearch $oFilter, $sState, $iStimulusCode)
|
||||
{
|
||||
parent::__construct($oFilter, $iStimulusCode);
|
||||
|
||||
@@ -435,7 +435,7 @@ class ValueSetObjects extends ValueSetDefinition
|
||||
foreach ($aAdditionalField as $sAdditionalField) {
|
||||
array_push($aArguments, $oObject->Get($sAdditionalField));
|
||||
}
|
||||
$aData['additional_field'] = vsprintf($sFormatAdditionalField, $aArguments);
|
||||
$aData['additional_field'] = utils::VSprintf($sFormatAdditionalField, $aArguments);
|
||||
} else {
|
||||
$aData['additional_field'] = '';
|
||||
}
|
||||
|
||||
@@ -21,12 +21,10 @@
|
||||
<db_key_field>id</db_key_field>
|
||||
<db_final_class_field/>
|
||||
<naming>
|
||||
<format>%1$s</format>
|
||||
<attributes>
|
||||
<attribute id="login"/>
|
||||
</attributes>
|
||||
</naming>
|
||||
<display_template/>
|
||||
<style>
|
||||
<icon/>
|
||||
</style>
|
||||
|
||||
@@ -53,14 +53,7 @@ class DBRestore extends DBBackup
|
||||
$sUser = self::EscapeShellArg($this->sDBUser);
|
||||
$sPwd = self::EscapeShellArg($this->sDBPwd);
|
||||
$sDBName = self::EscapeShellArg($this->sDBName);
|
||||
if (empty($this->sMySQLBinDir))
|
||||
{
|
||||
$sMySQLExe = 'mysql';
|
||||
}
|
||||
else
|
||||
{
|
||||
$sMySQLExe = '"'.$this->sMySQLBinDir.'/mysql"';
|
||||
}
|
||||
$sMySQLExe = DBBackup::MakeSafeMySQLCommand($this->sMySQLBinDir, 'mysql');
|
||||
if (is_null($this->iDBPort))
|
||||
{
|
||||
$sPortOption = '';
|
||||
|
||||
@@ -95,12 +95,7 @@ try {
|
||||
//
|
||||
$sMySQLBinDir = MetaModel::GetConfig()->GetModuleSetting('itop-backup', 'mysql_bindir', '');
|
||||
$sMySQLBinDir = utils::ReadParam('mysql_bindir', $sMySQLBinDir, true);
|
||||
if (empty($sMySQLBinDir)) {
|
||||
$sMySQLDump = 'mysqldump';
|
||||
} else {
|
||||
//echo 'Info - Found mysql_bindir: '.$sMySQLBinDir;
|
||||
$sMySQLDump = '"'.$sMySQLBinDir.'/mysqldump"';
|
||||
}
|
||||
$sMySQLDump = DBBackup::MakeSafeMySQLCommand($sMySQLBinDir, 'mysqldump');
|
||||
$sCommand = "$sMySQLDump -V 2>&1";
|
||||
|
||||
$aOutput = array();
|
||||
|
||||
@@ -46,12 +46,12 @@
|
||||
<field id="status" xsi:type="AttributeEnum">
|
||||
<sort_type>rank</sort_type>
|
||||
<values>
|
||||
<value id="approved">approved
|
||||
<value id="approved">
|
||||
<code>approved</code>
|
||||
<rank>60</rank>
|
||||
<style><main_color>$ibo-lifecycle-success-state-primary-color</main_color><complementary_color>$ibo-lifecycle-success-state-secondary-color</complementary_color><decoration_classes>fas fa-user-check</decoration_classes></style>
|
||||
</value>
|
||||
<value id="assigned">assigned
|
||||
<value id="assigned">
|
||||
<code>assigned</code>
|
||||
<rank>40</rank>
|
||||
<style><main_color>$ibo-lifecycle-neutral-state-primary-color</main_color><complementary_color>$ibo-lifecycle-neutral-state-secondary-color</complementary_color><decoration_classes/></style>
|
||||
|
||||
@@ -151,7 +151,7 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Class:Change/Stimulus:ev_approve+' => '',
|
||||
'Class:Change/Stimulus:ev_replan' => 'Replan',
|
||||
'Class:Change/Stimulus:ev_replan+' => '',
|
||||
'Class:Change/Stimulus:ev_notapprove' => 'Reject',
|
||||
'Class:Change/Stimulus:ev_notapprove' => 'Reject approval',
|
||||
'Class:Change/Stimulus:ev_notapprove+' => '',
|
||||
'Class:Change/Stimulus:ev_implement' => 'Implement',
|
||||
'Class:Change/Stimulus:ev_implement+' => '',
|
||||
|
||||
@@ -151,7 +151,7 @@ Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Class:Change/Stimulus:ev_approve+' => '',
|
||||
'Class:Change/Stimulus:ev_replan' => 'Replan',
|
||||
'Class:Change/Stimulus:ev_replan+' => '',
|
||||
'Class:Change/Stimulus:ev_notapprove' => 'Reject',
|
||||
'Class:Change/Stimulus:ev_notapprove' => 'Reject approval',
|
||||
'Class:Change/Stimulus:ev_notapprove+' => '',
|
||||
'Class:Change/Stimulus:ev_implement' => 'Implement',
|
||||
'Class:Change/Stimulus:ev_implement+' => '',
|
||||
|
||||
@@ -139,7 +139,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
|
||||
'Class:Change/Stimulus:ev_approve+' => '~~',
|
||||
'Class:Change/Stimulus:ev_replan' => 'Replan~~',
|
||||
'Class:Change/Stimulus:ev_replan+' => '~~',
|
||||
'Class:Change/Stimulus:ev_notapprove' => 'Reject~~',
|
||||
'Class:Change/Stimulus:ev_notapprove' => 'Reject approval~~',
|
||||
'Class:Change/Stimulus:ev_notapprove+' => '~~',
|
||||
'Class:Change/Stimulus:ev_implement' => 'Implement~~',
|
||||
'Class:Change/Stimulus:ev_implement+' => '~~',
|
||||
|
||||
@@ -380,7 +380,6 @@
|
||||
</attribute>
|
||||
<attribute id="private_log">
|
||||
<read_only/>
|
||||
<read_only/>
|
||||
</attribute>
|
||||
<attribute id="caller_id">
|
||||
<read_only/>
|
||||
|
||||
@@ -4351,7 +4351,6 @@
|
||||
</item>
|
||||
<item id="document_id">
|
||||
<rank>20</rank>
|
||||
<rank>20</rank>
|
||||
</item>
|
||||
</items>
|
||||
</list>
|
||||
@@ -5736,8 +5735,7 @@
|
||||
<duplicates/>
|
||||
</field>
|
||||
</fields>
|
||||
<methods>
|
||||
</methods>
|
||||
<methods/>
|
||||
<presentation>
|
||||
<details>
|
||||
<items>
|
||||
@@ -7230,7 +7228,12 @@
|
||||
</class>
|
||||
<class id="DocumentFile" _delta="must_exist">
|
||||
<presentation>
|
||||
<details><items><item id="cis_list" _delta="define"><rank>70</rank></item></items>>
|
||||
<details>
|
||||
<items>
|
||||
<item id="cis_list" _delta="define">
|
||||
<rank>70</rank>
|
||||
</item>
|
||||
</items>
|
||||
</details>
|
||||
</presentation>
|
||||
</class>
|
||||
|
||||
@@ -323,8 +323,8 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:NetworkDevice/Attribute:networkdevicetype_id+' => '',
|
||||
'Class:NetworkDevice/Attribute:networkdevicetype_name' => 'Nom Type',
|
||||
'Class:NetworkDevice/Attribute:networkdevicetype_name+' => '',
|
||||
'Class:NetworkDevice/Attribute:connectablecis_list' => 'Matériel connectés',
|
||||
'Class:NetworkDevice/Attribute:connectablecis_list+' => 'Tous les matériels connectés à cet appareil réseau',
|
||||
'Class:NetworkDevice/Attribute:connectablecis_list' => 'Matériel connecté',
|
||||
'Class:NetworkDevice/Attribute:connectablecis_list+' => 'Tous les équipements connectés à cet appareil réseau',
|
||||
'Class:NetworkDevice/Attribute:iosversion_id' => 'Version IOS',
|
||||
'Class:NetworkDevice/Attribute:iosversion_id+' => '',
|
||||
'Class:NetworkDevice/Attribute:iosversion_name' => 'Nom Version IOS',
|
||||
@@ -1597,7 +1597,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:network_port+' => '',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:device_port' => 'Port matériel',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:device_port+' => '',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type' => 'Type de connection',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type' => 'Type de connexion',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type+' => '',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:downlink' => 'lien descendant',
|
||||
'Class:lnkConnectableCIToNetworkDevice/Attribute:connection_type/Value:downlink+' => 'lien descendant',
|
||||
|
||||
@@ -797,7 +797,6 @@
|
||||
<is_null_allowed>true</is_null_allowed>
|
||||
<on_target_delete>DEL_MANUAL</on_target_delete>
|
||||
<allow_target_creation>false</allow_target_creation>
|
||||
<allow_target_creation>false</allow_target_creation>
|
||||
</field>
|
||||
<field id="powerstart_name" xsi:type="AttributeExternalField">
|
||||
<extkey_attcode>powerstart_id</extkey_attcode>
|
||||
|
||||
@@ -247,8 +247,10 @@
|
||||
<db_key_field>link_id</db_key_field>
|
||||
<db_final_class_field/>
|
||||
<naming>
|
||||
<attributes id="error_name"/>
|
||||
<attributes id="functionalci_name"/>
|
||||
<attributes>
|
||||
<attribute id="error_name"/>
|
||||
<attribute id="functionalci_name"/>
|
||||
</attributes>
|
||||
</naming>
|
||||
<style>
|
||||
<icon/>
|
||||
|
||||
@@ -96,6 +96,7 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Rozbalit vše',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Sbalit vše',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'Žádná položka',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Zpět',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -96,6 +96,7 @@ Dict::Add('DA DA', 'Danish', 'Dansk', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Expand all~~',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Collapse all~~',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'No item~~',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Back~~',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -96,6 +96,7 @@ Dict::Add('DE DE', 'German', 'Deutsch', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Alle expandieren',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Alle kollabieren',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'Kein Eintrag',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Zurück',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -105,6 +105,7 @@ Dict::Add('EN US', 'English', 'English', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Expand all',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Collapse all',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'No item',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Back',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -92,6 +92,7 @@ Dict::Add('EN GB', 'British English', 'British English', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Expand all',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Collapse all',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'No item',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Back',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -94,6 +94,7 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Expandir todo',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Desplegar todo',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'Sin elementos',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Volver',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -96,6 +96,7 @@ Dict::Add('FR FR', 'French', 'Français', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Tout déplier',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Tout replier',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'Aucun élément',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Retour',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -96,6 +96,7 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Összes kinyitása',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Összecsukás',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'Nincs elem',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Vissza',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -96,6 +96,7 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Expand all~~',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Collapse all~~',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'No item~~',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Back~~',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -96,6 +96,7 @@ Dict::Add('JA JP', 'Japanese', '日本語', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Expand all~~',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Collapse all~~',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'No item~~',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Back~~',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -97,6 +97,7 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Toon alles',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Verberg alles',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'Geen gegevens',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Terug',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -96,6 +96,7 @@ Dict::Add('PL PL', 'Polish', 'Polski', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Rozwiń wszystkie',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Zwiń wszystkie',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'Brak elementu',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Wstecz',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -96,6 +96,7 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Expandir todos',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Recolher todos',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'Sem dados',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Voltar',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -97,6 +97,7 @@ Dict::Add('RU RU', 'Russian', 'Русский', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Развернуть все',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Свернуть все',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'Нет элементов',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Назад',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -96,6 +96,7 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Expand all~~',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Collapse all~~',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'No item~~',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Back~~',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -96,6 +96,7 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => 'Expand all~~',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => 'Collapse all~~',
|
||||
'Brick:Portal:Browse:Filter:NoData' => 'No item~~',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => 'Back~~',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -105,6 +105,7 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array(
|
||||
'Brick:Portal:Browse:Tree:ExpandAll' => '全部展开',
|
||||
'Brick:Portal:Browse:Tree:CollapseAll' => '全部收起',
|
||||
'Brick:Portal:Browse:Filter:NoData' => '没有项目',
|
||||
'Brick:Portal:Browse:Mosaic:Back' => '返回',
|
||||
));
|
||||
|
||||
// ManageBrick brick
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
twig:
|
||||
default_path: '%combodo.modules.absolute_path%'
|
||||
paths:
|
||||
'%combodo.approot%images/': ~
|
||||
debug: '%kernel.debug%'
|
||||
strict_variables: '%kernel.debug%'
|
||||
|
||||
|
||||
@@ -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'
|
||||
@@ -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
@@ -1,4 +1 @@
|
||||
@import '../../../../../css/common/main.scss';
|
||||
@import "utils/all";
|
||||
@import "pages/base";
|
||||
@import "themes/all";
|
||||
@import "themes/all";
|
||||
@@ -5,4 +5,5 @@
|
||||
@import "modal";
|
||||
@import "form";
|
||||
@import "input";
|
||||
@import "caselog";
|
||||
@import "caselog";
|
||||
@import "progress-bar";
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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 {
|
||||
}
|
||||
|
||||
|
||||
/***********************/
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
@import "navigation-menu";
|
||||
@import "page";
|
||||
@import "home";
|
||||
@import "home";
|
||||
@import "tabs";
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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%;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
@@ -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;
|
||||
@@ -795,7 +594,6 @@ table .group-actions a.glyphicon-menu-hamburger{
|
||||
& > .glyphicon{
|
||||
margin-left: 0.5em;
|
||||
font-size: 0.85em;
|
||||
color: $combodo-orange;
|
||||
transition: transform 0.2s linear;
|
||||
}
|
||||
& > .glyphicon.collapsed{
|
||||
|
||||
@@ -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";
|
||||
@@ -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{
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* @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;
|
||||
|
||||
$ipb-form--linkedset--toggler--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;
|
||||
};
|
||||
|
||||
.form_linkedset_toggler, .form_upload_toggler {
|
||||
& > .glyphicon{
|
||||
color: $ipb-form--linkedset--toggler--color;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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{
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
.nav > li {
|
||||
display: flex;
|
||||
}
|
||||
.nav > li > a {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.navbar-default .navbar-nav > li > a {
|
||||
color: $common-color-grey-300;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user