diff --git a/README.md b/README.md index b291bbc3d..93881cc0b 100644 --- a/README.md +++ b/README.md @@ -78,18 +78,19 @@ We would like to give a special thank you 🤗 to the people from the community - Alves, David - Beck, Pedro +- Beer, Christian (a.k.a [@ChristianBeer](https://www.github.com/ChristianBeer)) - Bilger, Jean-François -- Bostoen, Jeffrey (a.k.a @jbostoen) +- Bostoen, Jeffrey (a.k.a [@jbostoen](https://www.github.com/jbostoen)) - Cardoso, Anderson - Cassaro, Bruno -- Casteleyn, Thomas (a.k.a @Hipska) +- Casteleyn, Thomas (a.k.a [@Hipska](https://www.github.com/Hipska)) - Castro, Randall Badilla - Colantoni, Maria Laura - Couronné, Guy - Dvořák, Lukáš - Goethals, Stefan - Gumble, David -- Kaltefleiter, Lars (a.k.a @larhip) +- Kaltefleiter, Lars (a.k.a [@larhip](https://www.github.com/larhip)) - Khamit, Shamil - Kincel, Martin - Konečný, Kamil @@ -98,12 +99,12 @@ We would like to give a special thank you 🤗 to the people from the community - Lazcano, Federico - Lucas, Jonathan - Malik, Remie -- Mindêllo de Andrade, Lucas (a.k.a @rokam) +- Mindêllo de Andrade, Lucas (a.k.a [@rokam](https://www.github.com/rokam)) - Raenker, Martin - Rosenke, Stephan - Seki, Shoji - Shilov, Vladimir -- Stukalov, Ilya (a.k.a @ilya-stukalov) +- Stukalov, Ilya (a.k.a [@ilya](https://www.github.com/ilya)-stukalov) - Tulio, Marco - Turrubiates, Miguel diff --git a/core/displayablegraph.class.inc.php b/core/displayablegraph.class.inc.php index b87bfd25f..fdf72bd64 100644 --- a/core/displayablegraph.class.inc.php +++ b/core/displayablegraph.class.inc.php @@ -1421,13 +1421,14 @@ class DisplayableGraph extends SimpleGraph * @param int $iObjKey * @param string $sContextKey * @param array $aContextParams + * @param bool $bLazyLoading since 2.7.7 3.0.1 * * @throws \CoreException * @throws \DictExceptionMissingString */ - function Display(WebPage $oP, $aResults, $sRelation, ApplicationContext $oAppContext, $aExcludedObjects, $sObjClass, $iObjKey, $sContextKey, $aContextParams = array(), bool $sLazyLoading = false) + function Display(WebPage $oP, $aResults, $sRelation, ApplicationContext $oAppContext, $aExcludedObjects, $sObjClass, $iObjKey, $sContextKey, $aContextParams = array(), bool $bLazyLoading = false) { - list($aExcludedByClass, $aAdditionalContexts) = $this->DisplayFiltering($sContextKey, $aContextParams, $aExcludedObjects, $oP, $aResults, $sLazyLoading); + list($aExcludedByClass, $aAdditionalContexts) = $this->DisplayFiltering($sContextKey, $aContextParams, $aExcludedObjects, $oP, $aResults, $bLazyLoading); $iGroupingThreshold = utils::ReadParam('g', 5); @@ -1508,10 +1509,12 @@ class DisplayableGraph extends SimpleGraph // Export as Attachment requires GD (for building the PDF) AND a valid objclass/objkey couple unset($aParams['export_as_attachment']); } - if ($oP->IsPrintableVersion() || !$sLazyLoading) { + if ($oP->IsPrintableVersion() || !$bLazyLoading) { $oP->add_ready_script(" $('#$sId').simple_graph(".json_encode($aParams).");"); } else { $oP->add_script("function Load(){var aExcluded = []; $('input[name^=excluded]').each( function() {if (!$(this).prop('checked')) { aExcluded.push($(this).val()); }} ); var params= $.extend(".json_encode($aParams).", {excluded_classes: aExcluded}); $('#$sId').simple_graph(params);}"); + $oP->add_ready_script("$('#impacted_objects_lists').html('".utils::TextToHtml(Dict::S('Relation:impacts/NoFilteredData'))."');$('#impacted_groups').html('".utils::TextToHtml(Dict::S('Relation:impacts/NoFilteredData'))."');"); + } } catch(Exception $e) @@ -1551,6 +1554,7 @@ EOF * @param array $aExcludedObjects * @param \WebPage $oP * @param array $aResults + * @param bool $bLazyLoading * * @return array * @throws \CoreException @@ -1560,7 +1564,7 @@ EOF * @throws \Twig\Error\RuntimeError * @throws \Twig\Error\SyntaxError */ - public function DisplayFiltering(string $sContextKey, array $aContextParams, array $aExcludedObjects, WebPage $oP, array $aResults, bool $sLazyLoading = false): array + public function DisplayFiltering(string $sContextKey, array $aContextParams, array $aExcludedObjects, WebPage $oP, array $aResults, bool $bLazyLoading = false): array { $aContextDefs = static::GetContextDefinitions($sContextKey, true, $aContextParams); $aExcludedByClass = array(); @@ -1590,7 +1594,7 @@ EOF $("#ReloadMovieBtn").button().button("disable"); EOF ); - if ($sLazyLoading) { + if ($bLazyLoading) { $oP->add_ready_script("$('#ReloadMovieBtn').button('enable');"); } else { $oP->add_ready_script("$('#dh_flash').addClass('closed');"); @@ -1614,7 +1618,7 @@ EOF $idx++; } $oUiHtmlBlock->AddHtml(""); - if ($sLazyLoading) { + if ($bLazyLoading) { $sOnCLick = "Load(); $('#ReloadMovieBtn').attr('onclick','DoReload()');$('#ReloadMovieBtn').html('".Dict::S('UI:Button:Refresh')."');"; $oUiHtmlBlock->AddHtml(""); } else { diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php index 5812de6ef..4a6fe87e6 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/de.dict.itop-config-mgmt.php @@ -32,6 +32,8 @@ Dict::Add('DE DE', 'German', 'Deutsch', array( 'Relation:depends on/Description' => 'Elemente, von denen dieses Element abhängt.', 'Relation:depends on/DownStream' => 'Hängt ab von ...', 'Relation:depends on/UpStream' => 'Wirkt auf ...', + 'Relation:impacts/LoadData' => 'Load data~~', + 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~', )); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php index e3f3944db..387b8b4c1 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/es_cr.dict.itop-config-mgmt.php @@ -36,6 +36,8 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array( 'Relation:depends on/Description' => 'Elementos de los cuales depende', 'Relation:depends on/DownStream' => 'Depende de...', 'Relation:depends on/UpStream' => 'Impactos...', + 'Relation:impacts/LoadData' => 'Load data~~', + 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~', )); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php index e7fe025b4..03948b68c 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/hu.dict.itop-config-mgmt.php @@ -29,6 +29,8 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', array( 'Relation:depends on/Description' => 'Konfigurációs elemtől függnek', 'Relation:depends on/DownStream' => 'Függőségek', 'Relation:depends on/UpStream' => 'Hatások', + 'Relation:impacts/LoadData' => 'Load data~~', + 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~', )); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php index cd147da45..d0de9f1db 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/it.dict.itop-config-mgmt.php @@ -29,6 +29,8 @@ Dict::Add('IT IT', 'Italian', 'Italiano', array( 'Relation:depends on/Description' => 'Elementi di questo elemento dipende da', 'Relation:depends on/DownStream' => 'Dipende da...', 'Relation:depends on/UpStream' => 'Impatto...', + 'Relation:impacts/LoadData' => 'Load data~~', + 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~', )); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php index 991ace7b7..9b4e93c7f 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/ja.dict.itop-config-mgmt.php @@ -29,6 +29,8 @@ Dict::Add('JA JP', 'Japanese', '日本語', array( 'Relation:depends on/Description' => 'この要素が依存している要素', 'Relation:depends on/DownStream' => '依存...', 'Relation:depends on/UpStream' => 'インパクト...', + 'Relation:impacts/LoadData' => 'Load data~~', + 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~', )); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php index d5d22ed58..f6662efe8 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/nl.dict.itop-config-mgmt.php @@ -41,6 +41,8 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', array( 'Relation:depends on/Description' => 'Elementen waarvan dit object afhankelijk van is', 'Relation:depends on/DownStream' => 'Is afhankelijk van...', 'Relation:depends on/UpStream' => 'Impact op...', + 'Relation:impacts/LoadData' => 'Load data~~', + 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~', )); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php index 559281798..b82b0c1d1 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/pt_br.dict.itop-config-mgmt.php @@ -35,6 +35,8 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', array( 'Relation:depends on/Description' => 'Elementos estes, que dependem deste elemento', 'Relation:depends on/DownStream' => 'Depende de...', 'Relation:depends on/UpStream' => 'Impactos...', + 'Relation:impacts/LoadData' => 'Load data~~', + 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~', )); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php index 55cbc8d25..cb7e9daab 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/ru.dict.itop-config-mgmt.php @@ -22,6 +22,8 @@ Dict::Add('RU RU', 'Russian', 'Русский', array( 'Relation:depends on/Description' => 'Элементы, от которых зависит', 'Relation:depends on/DownStream' => 'Зависит от...', 'Relation:depends on/UpStream' => 'Влияет на...', + 'Relation:impacts/LoadData' => 'Load data~~', + 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~', )); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php index ddf37ffe3..a2a7691ab 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/sk.dict.itop-config-mgmt.php @@ -34,6 +34,8 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', array( 'Relation:depends on/Description' => 'Prvky, od ktorých závisí tento prvok', 'Relation:depends on/DownStream' => 'Depends on...~~', 'Relation:depends on/UpStream' => 'Impacts...~~', + 'Relation:impacts/LoadData' => 'Load data~~', + 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~', )); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php index b5c3cac66..02736e099 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/tr.dict.itop-config-mgmt.php @@ -36,6 +36,8 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', array( 'Relation:depends on/Description' => 'Bu kaleme bağımlı olan kalemler', 'Relation:depends on/DownStream' => 'Bağımlı olanlar...', 'Relation:depends on/UpStream' => 'Etkiledikleri...', + 'Relation:impacts/LoadData' => 'Load data~~', + 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~', )); diff --git a/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php b/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php index e5a92ad74..eb9177d51 100644 --- a/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php +++ b/datamodels/2.x/itop-config-mgmt/dictionaries/zh_cn.dict.itop-config-mgmt.php @@ -34,6 +34,8 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', array( 'Relation:depends on/Description' => '该元素依赖的元素...', 'Relation:depends on/DownStream' => '依赖于...', 'Relation:depends on/UpStream' => '影响...', + 'Relation:impacts/LoadData' => 'Load data~~', + 'Relation:impacts/NoFilteredData' => 'please select objects in Graphical view tag~~', )); diff --git a/datamodels/2.x/itop-portal-base/portal/public/css/portal.css b/datamodels/2.x/itop-portal-base/portal/public/css/portal.css index 965e0beea..f8fe934ec 100644 --- a/datamodels/2.x/itop-portal-base/portal/public/css/portal.css +++ b/datamodels/2.x/itop-portal-base/portal/public/css/portal.css @@ -34,7 +34,7 @@ */ /*! * Combodo portal template v1.0.0 - */ +*/ /*******************/ /* Global settings */ /*******************/ @@ -42,6 +42,7 @@ body { padding-top: 60px; } + body.home { padding-top: 70px; } @@ -50,6 +51,7 @@ footer { margin: 5em 1em; text-align: center; } + /* Environment banner */ #envbanner { position: relative; @@ -57,37 +59,48 @@ footer { padding: 5px 15px; text-align: center; } + #envbanner > button { margin-left: 5px; color: #000; } + /* Navigation menu */ -.navbar-nav .dropdown-menu a .glyphicon, .user_infos .dropdown-menu a .glyphicon { +.navbar-nav .dropdown-menu a .glyphicon, +.user_infos .dropdown-menu a .glyphicon { margin-right: 15px; } -.nav > li > a > span.brick_icon, .dropdown-menu > li > a > span.brick_icon { + +.nav > li > a > span.brick_icon, +.dropdown-menu > li > a > span.brick_icon { margin-right: 20px; vertical-align: sub; } + /* Topbar */ #topbar .navbar-header { position: relative; z-index: 2; } + #topbar .navbar-collapse { position: relative; z-index: 1; overflow-y: auto; } + #topbar .navbar-collapse > .navbar-nav { padding-top: 30px; } + #topbar .navbar-brand > img { max-height: 100%; } + #topbar .user_infos { text-decoration: none; } + #topbar .user_photo { position: absolute; display: block; @@ -102,6 +115,7 @@ footer { border-radius: 100%; box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.4); } + #topbar .user_fullname { display: inline-block; position: absolute; @@ -112,6 +126,7 @@ footer { text-overflow: ellipsis; overflow-x: hidden; } + /* Sidebar */ @media (min-width: 768px) { #sidebar { @@ -122,10 +137,12 @@ footer { /* Overriding BS */ height: 100%; } + #sidebar .user_card { padding: 30px 0px; text-align: center; } + #sidebar .user_card .user_photo { margin: 0px auto 10px auto; width: 80px; @@ -137,48 +154,59 @@ footer { border: 2px solid #FFFFFF; border-radius: 100%; } + #sidebar .user_card .user_infos { font-size: 1em; color: #FFFFFF; } + #sidebar .user_card .user_infos .dropdown-toggle { color: #FFFFFF; } + #sidebar .user_card .user_options.dropdown-menu { width: 92%; left: 4%; } + #sidebar .user_card .user_fullname { font-weight: 600; } + #sidebar .menu { max-height: 59%; overflow-y: auto; overflow-x: hidden; } + #sidebar .menu .navbar-nav { width: 100%; } + #sidebar .menu .navbar-nav > li { width: 100%; } + #sidebar .menu .navbar-nav > li > a > .brick_icon { width: 1.2em; vertical-align: sub; text-align: center; margin-right: 10px; } + #sidebar .logo { position: absolute; bottom: 15px; width: 100%; text-align: center; } + #sidebar .logo img { max-width: 100%; max-height: 50px; - /* Main content */ } + + /* Main content */ #main-wrapper { margin-top: 20px; } @@ -189,6 +217,7 @@ footer { width: 120px; height: 120px; } + #sidebar .menu .nav > li > a > .brick_icon { margin-right: 20px; } @@ -205,17 +234,21 @@ footer { background-color: black; opacity: 0.5; } + #page_overlay .overlay_content { margin-top: 20em; width: 100%; color: white; } + .overlay_content { text-align: center; } + .content_loader { text-align: center; } + .content_loader .icon { margin-bottom: 0.3em; /*width: 52px;*/ @@ -229,14 +262,17 @@ footer { -moz-animation: spin 1.2s linear infinite; -ms-animation: spin 1.2s linear infinite; } + .content_loader .message { font-size: 1.5em; /* 2em; */ } + .datatables_overlay { padding: 5% 0px !important; background-color: white; } + /******************/ /* Global classes */ /******************/ @@ -253,19 +289,22 @@ footer { -moz-box-align: center; -ms-flex-align: center; align-items: center; - -webkit-box-pack: center; /* Also 'margin: 0 auto' doesn't have any effect on flex items in such web browsers - hence the bootstrap's container won't be aligned to the center anymore. - Therefore, we should use the following declarations to get it centered again */ + hence the bootstrap's container won't be aligned to the center anymore. + + Therefore, we should use the following declarations to get it centered again */ + -webkit-box-pack: center; -moz-box-pack: center; -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; } + .text_decoration { vertical-align: baseline; margin-right: 8px; } + /*********************/ /* Global animations */ /*********************/ @@ -297,10 +336,12 @@ footer { margin-top: 11px; margin-bottom: -11px; } + .list-group.tree .list-group-item { padding-right: 0px; /* To align all actions on the right without indent */ } + /******************/ /* Modal settings */ /******************/ @@ -308,10 +349,12 @@ footer { z-index: 9999; /* Should always be on top to display errors messages */ } + .modal-content .content_loader { margin: 7em 0em; text-align: center; } + /*******************/ /* Clipboard icons */ /*******************/ @@ -323,23 +366,28 @@ footer { .url-to-clipboard.url-to-clipboard-icon:hover { opacity: 1; } + .url-to-clipboard-tooltip-copied { color: green; margin-right: 3px; } + /**************************/ /* MagnificPopup settings */ /**************************/ .mfp-bg { z-index: 1200; } + .mfp-wrap { z-index: 1210; } + .mfp-img { cursor: pointer; cursor: zoom-out; } + /********************/ /* Typeahead setting */ /********************/ @@ -347,6 +395,7 @@ footer { max-height: 200px; overflow-y: auto; } + @media (min-width: 768px) { .twitter-typeahead .tt-menu { max-height: 300px; @@ -357,19 +406,23 @@ footer { text-align: center; font-size: 0.6em; } + .twitter-typeahead .tt-dataset > .content_loader .icon { height: 25px; } + .twitter-typeahead .tt-dataset .no_result { text-align: center; font-style: italic; } + /*****************/ /* Home settings */ /*****************/ .home #main-wrapper { padding-top: 15px; } + .home .tile { display: block; margin-bottom: 8px; @@ -385,22 +438,27 @@ footer { 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: #777; } + .home .tile .tile_title > span.icon { color: #EA7D1E; } + .home .tile .tile_description { display: none; color: #555555; } + /**********************************/ /* ManageBrick badge tile display */ /**********************************/ @@ -408,12 +466,15 @@ footer { 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; @@ -422,6 +483,7 @@ footer { text-align: right; font-size: 1.2em; } + .home a.tile.tile_badge > div.tile_description { display: none; } @@ -435,9 +497,11 @@ footer { text-align: left; transition: all 0.2s linear; } + .home .tile:hover { box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.1); } + .home .tile .tile_decoration { display: block; position: relative; @@ -446,31 +510,38 @@ footer { 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: 1em; } + .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; @@ -478,12 +549,14 @@ footer { 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; @@ -492,6 +565,7 @@ footer { font-weight: bold; color: #777; } + .home a.tile.tile_badge .tile_description { display: none; } @@ -501,27 +575,35 @@ footer { 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; @@ -534,22 +616,28 @@ footer { 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; } @@ -560,6 +648,7 @@ footer { #main-header { text-align: center; } + #main-header-title { margin-bottom: 15px; } @@ -568,26 +657,30 @@ footer { margin-top: 8px; margin-bottom: 20px; } + #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; - }*/ + padding: 0em 1.5em; + line-height: 2.4em; + font-size: 14px; + background-image: none; +}*/ @media (min-width: 768px) { #main-header:after { clear: both; } + #main-header-title { float: left; margin-bottom: 0px; min-height: 6em; text-align: left; } + #main-header-actions { float: right; margin-bottom: 0px; @@ -596,24 +689,29 @@ footer { .dataTables_wrapper { padding: 10px 10px; } + .dataTable.table td img { max-width: 100%; height: initial !important; } + #brick_content_toolbar { /* margin: 10px 0px 6px 0px; */ padding: 10px; } + #brick_content_toolbar > div label { font-weight: normal; white-space: nowrap; text-align: left; } + #brick_content_toolbar > div label input { margin-left: 0.5em; display: inline-block; width: 130px; } + /***********************/ /* Brick communication */ /***********************/ @@ -624,11 +722,13 @@ footer { border: none; font-weight: initial; } + .home .tile_communication .carousel { margin-bottom: 0px; width: 100%; height: 200px; } + /**********************/ /* Brick user profile */ /**********************/ @@ -645,6 +745,7 @@ footer { background-color: black; opacity: 0.5; } + #user-profile-wrapper .user_profile_picture .preview { display: inline-block; position: relative; @@ -652,27 +753,33 @@ footer { max-height: 175px; overflow: hidden; } + #user-profile-wrapper .user_profile_picture .preview img { max-width: 100%; max-height: 100%; } + #user-profile-wrapper .user_profile_picture .actions { display: inline-block; vertical-align: top; /*middle;*/ margin-left: 5px; } + #user-profile-wrapper .user_profile_picture .actions .btn { display: block; position: relative; margin-bottom: 10px; } + #user-profile-wrapper .user_profile_picture .actions .btn:last-child { margin-bottom: 0px; } + #user-profile-wrapper .user_profile_picture .actions .btn.btn_edit { overflow: hidden; } + #user-profile-wrapper .user_profile_picture .actions .btn.btn_edit input { position: absolute; top: 0px; @@ -682,6 +789,7 @@ footer { opacity: 0; cursor: pointer; } + /****************/ /* Brick browse */ /****************/ @@ -691,9 +799,11 @@ footer { position: relative; margin-top: 0px; } + #brick_content_tree .list-group-item { padding-top: 0px; } + #brick_content_tree .list-group-item > .tree-item-wrapper { display: block; padding-top: 10px; @@ -701,41 +811,58 @@ footer { text-decoration: inherit; cursor: pointer; } + .list-group-item > .list-group-item-actions { /*display: none; Displaying actions only when hovering was not unanimous in the team */ position: absolute; top: 10px; right: 10px; } -.list-group-item:hover > .list-group-item-actions, .mosaic-group-item:hover > .mosaic-group-item-actions { + +.list-group-item:hover > .list-group-item-actions, +.mosaic-group-item:hover > .mosaic-group-item-actions { display: block; } -.list-group-item .list-group-item-actions a:not(:first-child), .mosaic-group-item .mosaic-group-item-actions a:not(:first-child) { + +.list-group-item .list-group-item-actions a:not(:first-child), +.mosaic-group-item .mosaic-group-item-actions a:not(:first-child) { margin-left: 10px; } + .list-group-item .keep-spinning { animation: spin 1s linear infinite; -webkit-animation: spin 1s linear infinite; -moz-animation: spin 1s linear infinite; -ms-animation: spin 1s linear infinite; } + .list-group.tree .list-group-item .list-group-item-description { display: block; margin-top: 3px; font-size: 0.8em; } + /* Secondary actions */ -.list-group-item-actions .group-actions-wrapper, .mosaic-group-item-actions .group-actions-wrapper, table .group-actions-wrapper { +.list-group-item-actions .group-actions-wrapper, +.mosaic-group-item-actions .group-actions-wrapper, +table .group-actions-wrapper { text-align: center; } + table .group-actions { position: relative; } -.list-group-item-actions a.glyphicon-menu-hamburger, .mosaic-group-item-actions a.glyphicon-menu-hamburger, table .group-actions a.glyphicon-menu-hamburger { + +.list-group-item-actions a.glyphicon-menu-hamburger, +.mosaic-group-item-actions a.glyphicon-menu-hamburger, +table .group-actions a.glyphicon-menu-hamburger { cursor: pointer; text-decoration: none; } -.list-group-item-actions .item-action-wrapper, .mosaic-group-item-actions .item-action-wrapper, table .group-actions .item-action-wrapper { + +.list-group-item-actions .item-action-wrapper, +.mosaic-group-item-actions .item-action-wrapper, +table .group-actions .item-action-wrapper { display: none; position: absolute; z-index: 5; @@ -745,32 +872,48 @@ table .group-actions { -moz-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15); box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.15); } -.list-group-item-actions .item-action-wrapper .glyphicon, .mosaic-group-item-actions .item-action-wrapper .glyphicon, table .group-actions .item-action-wrapper .glyphicon { + +.list-group-item-actions .item-action-wrapper .glyphicon, +.mosaic-group-item-actions .item-action-wrapper .glyphicon, +table .group-actions .item-action-wrapper .glyphicon { margin-right: 0.6em; } -.list-group-item-actions .item-action-wrapper.collapse.in, .mosaic-group-item-actions .item-action-wrapper.collapse.in, table .group-actions .item-action-wrapper.collapse.in { + +.list-group-item-actions .item-action-wrapper.collapse.in, +.mosaic-group-item-actions .item-action-wrapper.collapse.in, +table .group-actions .item-action-wrapper.collapse.in { display: block; } -.list-group-item-actions .item-action-wrapper .panel-body > p, .mosaic-group-item-actions .item-action-wrapper .panel-body > p, table .group-actions .item-action-wrapper .panel-body > p { + +.list-group-item-actions .item-action-wrapper .panel-body > p, +.mosaic-group-item-actions .item-action-wrapper .panel-body > p, +table .group-actions .item-action-wrapper .panel-body > p { text-align: left; white-space: nowrap; } -.list-group-item-actions .item-action-wrapper .panel-body > p:last-child, .mosaic-group-item-actions .item-action-wrapper .panel-body > p:last-child, table .group-actions .item-action-wrapper .panel-body > p:last-child { + +.list-group-item-actions .item-action-wrapper .panel-body > p:last-child, +.mosaic-group-item-actions .item-action-wrapper .panel-body > p:last-child, +table .group-actions .item-action-wrapper .panel-body > p:last-child { margin-bottom: 0px; } + #brick_content_empty { display: none; padding: 40px; font-size: 1.3em; font-style: italic; } + /* Loader */ -#brick_tree_overlay, #brick_mosaic_overlay { +#brick_tree_overlay, +#brick_mosaic_overlay { display: none; padding: 8% 0px; border-radius: 0px 0px 4px 4px; font-size: 1em; } + /****************************************************************/ /* - Mosaic mode */ /* */ @@ -788,6 +931,7 @@ table .group-actions { position: relative; padding: 10px 10px 1px 10px; } + /* Breadcrumb */ #mosaic-breadcrumb { margin-bottom: 5px; @@ -797,23 +941,29 @@ table .group-actions { overflow-x: hidden; text-overflow: ellipsis; } + .mosaic-group { display: none; } + /* Only the first level is showed by default */ .mosaic-group:first-of-type { display: block; } -.mosaic-group-back, .mosaic-group-item { + +.mosaic-group-back, +.mosaic-group-item { position: relative; height: 55px; margin-bottom: 10px; text-align: center; color: #FFFFFF; } + .mosaic-group-back { font-size: 25px; } + .mosaic-item { display: table; width: 100%; @@ -822,71 +972,95 @@ table .group-actions { background-color: #585653; transition: all linear 0.3s; } -.mosaic-item, .mosaic-item:hover, .mosaic-item:active, .mosaic-item:focus, .mosaic-item:visited { + +.mosaic-item, +.mosaic-item:hover, +.mosaic-item:active, +.mosaic-item:focus, +.mosaic-item:visited { color: #FFFFFF; text-decoration: none; } + .mosaic-item:active { background-color: #9e510f; } -.mosaic-item-image, .mosaic-item-text { + +.mosaic-item-image, +.mosaic-item-text { display: table-cell; text-align: center; vertical-align: middle; } + .mosaic-item-image > img { max-width: 85%; } + .mosaic-item-text { max-width: 1px; /* This is an arbitrary value. It is just here to make .mosaic-item-name wrap when there is a very long word in it. */ overflow: hidden; } + .mosaic-group-item > .mosaic-group-item-actions { position: absolute; top: 5px; right: 5px; } + .mosaic-group-item-actions > a { color: #FFFFFF; text-decoration: none; } -.mosaic-group-item-actions > a:hover, .mosaic-group-item-actions > a:focus { + +.mosaic-group-item-actions > a:hover, +.mosaic-group-item-actions > a:focus { color: #EEEEEE; } + @media (max-width: 768px) { .mosaic-group-item > .mosaic-group-item-actions { top: 12px; right: 6px; } + .mosaic-group-item > .mosaic-group-item-actions > .glyphicon { margin-top: 5px; } + .mosaic-group-item-actions > a { font-size: 20px; - /* All layouts */ } + + /* All layouts */ .mosaic-item-image { width: 55px; padding: 10px; } + .mosaic-item-image > img { max-height: 30px; } + .mosaic-item-name { font-size: 14px; max-height: 50px; overflow: hidden; } + .mosaic-item-description { display: none; - /* Layout 2 */ } + + /* Layout 2 */ .mosaic-item-layout-2 .mosaic-item-description { display: block; - /* Layout 5/7 */ } - .mosaic-item-layout-5 .mosaic-item-name, .mosaic-item-layout-7 .mosaic-item-name { + + /* Layout 5/7 */ + .mosaic-item-layout-5 .mosaic-item-name, +.mosaic-item-layout-7 .mosaic-item-name { padding-right: 40px; } } @@ -899,21 +1073,26 @@ table .group-actions { /* We don't put 2% to keep a margin in case of a bad browser rendering */ word-break: break-word; } + .mosaic-item { padding: 10px; } - .mosaic-item:hover, .mosaic-item:focus { + + .mosaic-item:hover, +.mosaic-item:focus { background-color: #EA7D1E; box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.2); - /* All layouts */ - /* .mosaic-item-image{ - vertical-align: inherit; Note: This was introduced to avoid image from going down the tile when .mosaic-item-name was way too long, but the .mosaic-item-image glitched by being a little too high. As a very long .mosaic-item-name is extremely rare, we decided that it was not worth it. - }*/ } + + /* All layouts */ + /* .mosaic-item-image{ + vertical-align: inherit; Note: This was introduced to avoid image from going down the tile when .mosaic-item-name was way too long, but the .mosaic-item-image glitched by being a little too high. As a very long .mosaic-item-name is extremely rare, we decided that it was not worth it. + }*/ .mosaic-item-text .mosaic-item-text-wrapper { max-height: 100px; /* Must be .mosaic-item absolute height (in px) */ } + .mosaic-item-name { max-height: 100%; /* It's ok if description is pushed down and not visible; but we truncate before it flows out of the tile */ @@ -921,32 +1100,41 @@ table .group-actions { font-weight: 600; font-size: 12px; } + .mosaic-item-description { overflow: hidden; text-overflow: ellipsis; - /* Layout 1 */ } + + /* Layout 1 */ .mosaic-item-layout-1 .mosaic-item-name { font-weight: inherit; font-size: 14px; - /* Layout 7 */ } + + /* Layout 7 */ .mosaic-item-layout-7 .mosaic-item-image { display: none; } - .mosaic-item-layout-3 .mosaic-item-description, .mosaic-item-layout-7 .mosaic-item-description { + + .mosaic-item-layout-3 .mosaic-item-description, +.mosaic-item-layout-7 .mosaic-item-description { margin-top: 10px; max-height: 40px; font-size: 10px; - /* Layout 5 & 7 */ } - .mosaic-item-layout-5 .mosaic-item-image, .mosaic-item-layout-7 .mosaic-item-image { + + /* Layout 5 & 7 */ + .mosaic-item-layout-5 .mosaic-item-image, +.mosaic-item-layout-7 .mosaic-item-image { display: table-cell; width: 65px; padding-left: 5px; padding-right: 10px; } - .mosaic-item-layout-5 .mosaic-item-image > img, .mosaic-item-layout-7 .mosaic-item-image > img { + + .mosaic-item-layout-5 .mosaic-item-image > img, +.mosaic-item-layout-7 .mosaic-item-image > img { max-width: 65px; /* Equals parent element width */ max-height: 100px; @@ -957,21 +1145,28 @@ table .group-actions { .mosaic-item { padding: 10px 15px; } + .mosaic-group-back { font-size: 40px; - /* Layout 5 & 7 */ } - .mosaic-item-layout-5 .mosaic-item-image, .mosaic-item-layout-7 .mosaic-item-image { + + /* Layout 5 & 7 */ + .mosaic-item-layout-5 .mosaic-item-image, +.mosaic-item-layout-7 .mosaic-item-image { width: 105px; padding-right: 18px; } - .mosaic-item-layout-5 .mosaic-item-image > img, .mosaic-item-layout-7 .mosaic-item-image > img { + + .mosaic-item-layout-5 .mosaic-item-image > img, +.mosaic-item-layout-7 .mosaic-item-image > img { max-width: 105px; /* Equals parent element width */ max-height: 100px; /* Equals parent element height */ } - .mosaic-item-layout-5 .mosaic-item-name, .mosaic-item-layout-7 .mosaic-item-name { + + .mosaic-item-layout-5 .mosaic-item-name, +.mosaic-item-layout-7 .mosaic-item-name { font-size: 12px; } } @@ -980,14 +1175,17 @@ table .group-actions { width: 24%; height: 140px; margin-right: 1.3%; - /* All layouts */ } + + /* All layouts */ .mosaic-item-text .mosaic-item-text-wrapper { max-height: 120px; /* Must be .mosaic-item absolute height (in px) */ /* overflow hidden inherited */ } - .mosaic-item-layout-5 .mosaic-item-image > img, .mosaic-item-layout-7 .mosaic-item-image > img { + + .mosaic-item-layout-5 .mosaic-item-image > img, +.mosaic-item-layout-7 .mosaic-item-image > img { max-height: 120px; /* Equals parent element height */ } @@ -1017,12 +1215,15 @@ table .group-actions { .tile.tile-filter-brick a.tile_decoration { cursor: default; } + .tile.tile-filter-brick .tile_filterbox .form-group:first-child { width: 100%; } -.tile.tile-filter-brick .tile_filterbox input[type="text"] { + +.tile.tile-filter-brick .tile_filterbox input[type=text] { width: 100%; } + @media (max-width: 768px) { .tile.tile-filter-brick .tile_filterbox .form-group:first-child { margin-bottom: 5px; @@ -1032,10 +1233,12 @@ table .group-actions { .tile.tile-filter-brick .tile_filterbox form { display: table; } + .tile.tile-filter-brick .tile_filterbox .form-group:first-child { display: table-cell; } - .tile.tile-filter-brick .tile_filterbox button[type="submit"] { + + .tile.tile-filter-brick .tile_filterbox button[type=submit] { margin-left: 5px; } } @@ -1047,7 +1250,7 @@ table .group-actions { /*********/ /* Forms */ /*********/ -.form_field_label > .control-label[data-tooltip-instantiated="true"]::after { +.form_field_label > .control-label[data-tooltip-instantiated=true]::after { content: "?"; padding-left: 3px; vertical-align: top; @@ -1055,33 +1258,39 @@ table .group-actions { color: #777; font-size: 0.85em; } + .form_field .form_mandatory .control-label:after { - content: "\002a"; + content: "*"; position: relative; left: 3px; color: #EA7D1E; font-size: 0.9em; } + /* Note: We don't put the .form_field selector as it must work for read-only */ .form-control-static img { max-width: 100% !important; height: initial !important; } + /* ExternalKey */ .selectobject .input-group-addon { cursor: pointer; } + /* InlineImage */ .inline-image { cursor: pointer; cursor: zoom-in; } + /* CaseLog field */ .caselog-thread { position: relative; border: 1px solid #ddd; border-top: none; } + .caselog-thread--header { padding: 8px; font-size: 11px; @@ -1092,6 +1301,7 @@ table .group-actions { color: #777; /* body: color */ } + .caselog-thread--header-toggler { cursor: pointer; color: inherit; @@ -1106,6 +1316,7 @@ table .group-actions { margin: 0 0.4em 0 0.2em; /* Note: Difference between left and right margin is due to a left space being output because the line break in the HTML isn't tidy */ } + .caselog-thread--header-info > span { margin-left: 0.5em; } @@ -1115,12 +1326,14 @@ table .group-actions { .caselog-thread--header-info > span:first-child { margin-left: 0; } + .caselog-thread--content { padding: 5px; /*max-height: 400px; - overflow: auto;*/ + overflow: auto;*/ background-color: #f2f2f2; } + .caselog-thread--date { margin-bottom: 10px; text-align: center; @@ -1129,6 +1342,7 @@ table .group-actions { .caselog-thread--date:first-child { display: none; } + .caselog-thread--block { position: relative; min-height: 40px; @@ -1138,9 +1352,12 @@ table .group-actions { .caselog-thread--block:last-child { margin-bottom: 0px; } -.caselog-thread--block-medallion, .caselog-thread--block-entries { + +.caselog-thread--block-medallion, +.caselog-thread--block-entries { box-shadow: 0 1px 1px rgba(0, 0, 0, 0.15); } + .caselog-thread--block-medallion { position: absolute; top: 0px; @@ -1160,6 +1377,7 @@ table .group-actions { background-repeat: no-repeat; border-radius: 100%; } + .caselog-thread--block-user { display: none; margin-left: 54px; @@ -1168,6 +1386,7 @@ table .group-actions { color: #FFFFFF; /* .caselog-thread--block-entries background-color */ } + .caselog-thread--block-entries { position: relative; display: inline-block; @@ -1176,6 +1395,7 @@ table .group-actions { background-color: #585653; color: #FFFFFF; } + .caselog-thread--block-entry { position: relative; padding: 8px 10px; @@ -1219,18 +1439,20 @@ table .group-actions { .caselog-thread--block-entry:hover:not(.closed) .caselog-thread--block-entry-toggler { opacity: 1; } + .caselog-thread--block-entry-content { display: block; overflow-x: auto; + /* Force user-generated tables to fit within the container as they often have an hard-coded width */ } .caselog-thread--block-entry-content > p:last-of-type { margin-bottom: 0px; - /* Force user-generated tables to fit within the container as they often have an hard-coded width */ } .caselog-thread--block-entry-content table { width: unset !important; max-width: max-content; } + .caselog-thread--block-entry-date { margin-top: 5px; opacity: 0.6; @@ -1238,6 +1460,7 @@ table .group-actions { text-align: right; transition: all 0.2s linear; } + .caselog-thread--block-entry-toggler { position: absolute; top: 2px; @@ -1249,6 +1472,7 @@ table .group-actions { /* .caselog-thread--block-entries background-color */ transition: all 0.2s linear; } + .caselog-thread--block-me { text-align: right; } @@ -1280,6 +1504,7 @@ table .group-actions { border-left-color: #585653; /* .caselog-thread--block-entries background-color */ } + .caselog-thread--block-color-1 .caselog-thread--block-medallion { color: #444; background-color: #FFFFFF; @@ -1298,6 +1523,7 @@ table .group-actions { border-top-color: #FFFFFF; border-right-color: #FFFFFF; } + .caselog-thread--block-color-2 .caselog-thread--block-medallion { color: #444; background-color: #FFFFFF; @@ -1316,6 +1542,7 @@ table .group-actions { border-top-color: #FFFFFF; border-right-color: #FFFFFF; } + .caselog-thread--block-color-3 .caselog-thread--block-medallion { color: #444; background-color: #FFFFFF; @@ -1334,6 +1561,7 @@ table .group-actions { border-top-color: #FFFFFF; border-right-color: #FFFFFF; } + .caselog-thread--block-color-4 .caselog-thread--block-medallion { color: #444; background-color: #FFFFFF; @@ -1352,6 +1580,7 @@ table .group-actions { border-top-color: #FFFFFF; border-right-color: #FFFFFF; } + .caselog-thread--block-color-5 .caselog-thread--block-medallion { color: #444; background-color: #FFFFFF; @@ -1370,8 +1599,9 @@ table .group-actions { border-top-color: #FFFFFF; border-right-color: #FFFFFF; } + /* collapsable sections*/ -.form_linkedset_toggler, .form_upload_toggler, .form_linkedset_toggler:hover, .form_upload_toggler:hover, .form_linkedset_toggler:focus, .form_upload_toggler:focus { +.form_linkedset_toggler, .form_linkedset_toggler:hover, .form_linkedset_toggler:focus, .form_upload_toggler, .form_upload_toggler:hover, .form_upload_toggler:focus { text-decoration: none; color: inherit; } @@ -1393,24 +1623,30 @@ table .group-actions { .form_linkedset_toggler > .glyphicon.collapsed, .form_upload_toggler > .glyphicon.collapsed { transform: rotateZ(-90deg); } + /* - DataTables : Loader */ .form_linkedset_wrapper .datatables_overlay { padding: 8px !important; } + .form_linkedset_wrapper .overlay_content { font-size: 0.6em; } + .form_linkedset_wrapper .content_loader { margin: 0px; } + .form_linkedset_wrapper .content_loader .icon { height: 23px; } + /* - DataTables : Fit the table in the form */ .form_linkedset_wrapper .dataTables_wrapper { margin-bottom: 5px; padding: 0px; } + /* FileUpload */ .attachments_container .attachments-list thead > tr > th { text-align: center; @@ -1420,29 +1656,28 @@ table .group-actions { text-align: left; vertical-align: middle; } -.attachments_container .attachments-list tbody > tr > td[role="icon"] { +.attachments_container .attachments-list tbody > tr > td[role=icon] { text-align: center; } -.attachments_container .attachments-list tbody > tr > td[role="icon"] img { +.attachments_container .attachments-list tbody > tr > td[role=icon] img { max-height: 32px; } -.attachments_container .attachments-list tbody > tr > td[role="formatted-size"] { +.attachments_container .attachments-list tbody > tr > td[role=formatted-size] { text-align: right; } -.attachments_container .attachments-list tbody > tr > td[role="delete"] { +.attachments_container .attachments-list tbody > tr > td[role=delete] { text-align: center; } + .attachment-tooltip { - width: 350px; - height: 300px; -} -.attachment-tooltip img { max-width: 100%; max-height: 100%; } + .upload_container input { display: inline; } + .upload_container .loader { visibility: hidden; margin-left: 7px; @@ -1452,23 +1687,28 @@ table .group-actions { -moz-animation: spin 1s linear infinite; -ms-animation: spin 1s linear infinite; } + #drag_overlay { display: block; top: inherit; bottom: 0px; height: 0px; } + #drag_overlay .overlay_content { margin-top: 5em; width: 100%; color: white; } + #drag_overlay .overlay_content .icon { font-size: 3em; } + #drag_overlay .overlay_content .message { font-size: 1.5em; } + /* Attachments drag & drop zone, only for none mobile devices */ @media (min-width: 768px) { #drag_overlay.drag_in { @@ -1477,12 +1717,14 @@ table .group-actions { -moz-animation: show-drop-zone 0.3s ease-out forwards; -ms-animation: show-drop-zone 0.3s ease-out forwards; } + #drag_overlay.drag_out { animation: hide-drop-zone 0.3s ease-out forwards; -webkit-animation: hide-drop-zone 0.3s ease-out forwards; -moz-animation: hide-drop-zone 0.3s ease-out forwards; -ms-animation: hide-drop-zone 0.3s ease-out forwards; } + @keyframes show-drop-zone { 100% { height: 20%; @@ -1540,37 +1782,47 @@ table .group-actions { .form_fields .file_open_link { margin-left: 10px; } + .form_buttons { padding-top: 20px; text-align: center; } + .form_buttons .form_btn_misc { margin-bottom: 20px; } + .form_buttons .form_btn_transitions { margin-bottom: 20px; } + .form_buttons .btn .glyphicon { margin-right: 0.5em; } + .form_btn_regular.sticky { display: none; } + @media (min-width: 768px) { .form_buttons .form_btn_misc { float: left !important; } + .form_buttons .form_btn_transitions { float: right !important; margin-left: 3px; } + .form_buttons .form_btn_regular { text-align: right; } + .form_buttons .form_btn_regular .btn { width: inherit; - /* Making regular button sticky */ } + + /* Making regular button sticky */ .form_btn_regular.sticky { display: block; position: fixed; @@ -1583,12 +1835,15 @@ table .group-actions { border-radius: 0px; transition: right 0.3s; } + .form_btn_regular.sticky.closed { right: -75px; } + .form_btn_regular.sticky button { display: block; } + .form_btn_regular.sticky button:first-child { margin-bottom: 4px; } @@ -1597,11 +1852,13 @@ table .group-actions { .form_field .cke { border: 1px solid #ddd; } + .form_field.has-error .cke { border: 1px solid #b94a48; border-radius: 0px; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); } + /* CKEditor : Styling notifications based on BS alerts */ .cke_notification { position: relative; @@ -1611,31 +1868,38 @@ table .group-actions { border-radius: 4px; background-color: #FFFFFF; } + .cke_notification_close { position: absolute; top: 2px; right: 5px; } + .cke_notification_message { margin-bottom: 0px; line-height: 1em; font-size: 1em; } + .cke_notification_success { display: none; background-color: #dff0d8; border-color: #58a959; color: #468847; } + .cke_notification_warning { background-color: #fcf8e3; border-color: #ceae78; color: #c09853; } + /* CKEditor : Misc */ -.cke_toolbox_collapser, .cke_toolbox_collapser .cke_arrow { +.cke_toolbox_collapser, +.cke_toolbox_collapser .cke_arrow { cursor: pointer !important; } + .cke_toolbox_collapser.cke_toolbox_collapser_min ~ .editor-fullscreen-button { display: block; width: 12px; @@ -1646,18 +1910,23 @@ table .group-actions { background-position: center center !important; background-repeat: no-repeat !important; background-size: 100% !important; - background-image: url('../../../../../images/full-screen.png') !important; + background-image: url("../../../../../images/full-screen.png") !important; } .cke_toolbox_collapser.cke_toolbox_collapser_min ~ .editor-fullscreen-button:hover { background-color: #E5E5E5; } + /* DataTables : Selection inputs */ -.dataTable.table th span.row_input, .dataTable.table td span.row_input { +.dataTable.table th span.row_input, +.dataTable.table td span.row_input { display: inline-block; width: 100%; text-align: center; } + /* Wiki text (hyperlinks) */ .wiki_broken_link { text-decoration: line-through; } + +/*# sourceMappingURL=portal.css.map */ diff --git a/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss b/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss index caa3de4bf..bcbd0a761 100644 --- a/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss +++ b/datamodels/2.x/itop-portal-base/portal/public/css/portal.scss @@ -1571,13 +1571,8 @@ table .group-actions .item-action-wrapper .panel-body > p:last-child{ } } .attachment-tooltip { - width: 350px; - height: 300px; - - img { max-width: 100%; max-height: 100%; - } } .upload_container input{ diff --git a/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php b/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php index c187b6f5c..43ace1e9d 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php @@ -1244,7 +1244,7 @@ class ObjectController extends BrickController } $aData['att_id'] = $iAttId; - $aData['preview'] = $oDocument->IsPreviewAvailable() ? 'true' : 'false'; + $aData['preview'] = $oDocument->IsPreviewAvailable() ; $aData['file_size'] = $oDocument->GetFormattedSize(); $aData['creation_date'] = $oAttachment->Get('creation_date'); $aData['user_id_friendlyname'] = $oAttachment->Get('user_id_friendlyname'); diff --git a/js/components/button-group.js b/js/components/button-group.js new file mode 100644 index 000000000..a459a2372 --- /dev/null +++ b/js/components/button-group.js @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2013-2022 Combodo SARL + * + * 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 + */ + +; +// Apply a listener to
element so we don't have to create one for every button on the page + +// ibo-button-group elements +$('body').on('enter_loading_state.button_group.itop', '[data-role="ibo-button-group"]', function(){ + $(this).find('[data-role="ibo-button"]').each(function(){ + $(this).prop('disabled', true); + }); + $(this).find('[data-role="ibo-button"]:first').trigger('enter_loading_state.button.itop'); +}) +.on('leave_loading_state.button_group.itop', '[data-role="ibo-button-group"]', function(){ + $(this).find('[data-role="ibo-button"]').each(function(){ + $(this).prop('disabled', false); + }); + $(this).find('[data-role="ibo-button"]:first').trigger('leave_loading_state.button.itop'); +}); \ No newline at end of file diff --git a/js/components/button.js b/js/components/button.js index c1050659d..8c404e8ed 100644 --- a/js/components/button.js +++ b/js/components/button.js @@ -26,17 +26,3 @@ $('body').on('enter_loading_state.button.itop', '[data-role="ibo-button"]', func .on('leave_loading_state.button.itop', '[data-role="ibo-button"]', function(){ $(this).removeClass('ibo-is-loading').prop('disabled', false); }); - -// ibo-button-group elements -$('body').on('enter_loading_state.button_group.itop', '[data-role="ibo-button-group"]', function(){ - $(this).find('[data-role="ibo-button"]').each(function(){ - $(this).prop('disabled', true); - }); - $(this).find('[data-role="ibo-button"]:first').trigger('enter_loading_state.button.itop'); -}) -.on('leave_loading_state.button_group.itop', '[data-role="ibo-button-group"]', function(){ - $(this).find('[data-role="ibo-button"]').each(function(){ - $(this).prop('disabled', false); - }); - $(this).find('[data-role="ibo-button"]:first').trigger('leave_loading_state.button.itop'); -}); \ No newline at end of file diff --git a/js/extkeywidget.js b/js/extkeywidget.js index 6014debc5..62210f4d0 100644 --- a/js/extkeywidget.js +++ b/js/extkeywidget.js @@ -564,6 +564,7 @@ function ExtKeyWidget(id, sTargetClass, sFilter, sTitle, bSelectMode, oWizHelper var oTemp = $('