Merge remote-tracking branch 'origin/support/3.2' into develop

This commit is contained in:
Molkobain
2024-04-04 15:22:25 +02:00
29 changed files with 1102 additions and 77 deletions

View File

@@ -49,10 +49,7 @@ $ibo-input-select--autocomplete-item-image--border: 1px solid $ibo-color-grey-60
.ibo-input-select {
display: inline-flex;
min-width: $ibo-input-select--value--min-midth;
&:not(.ibo-input-select-autocomplete):not(.ibo-input-selectize) {
appearance: none;
}
appearance: none;
&.ibo-input-selectize {
padding-right: 0;
@@ -108,7 +105,7 @@ $ibo-input-select--autocomplete-item-image--border: 1px solid $ibo-color-grey-60
outline: none !important; /* Overwrite browsers default focus outline */
}
}
&.input-active{
border: 1px solid $ibo-input--focus--border-color;
}
@@ -123,15 +120,16 @@ $ibo-input-select--autocomplete-item-image--border: 1px solid $ibo-color-grey-60
}
.ibo-input-select-wrapper::after{
position: absolute;
z-index: 1;
content: "\f0d7";
font-family: "Font Awesome 5 Free";
font-weight: 600;
height: $ibo-input-select-wrapper--after--height;
margin-left: $ibo-input-select-wrapper--after--margin-left;
margin-top: $ibo-input-select-wrapper--after--margin-top;
padding-top: $ibo-input-select-wrapper--after--padding-top;
background-color: $ibo-input-select-wrapper--after--background-color;
color: $ibo-input-select-wrapper--after--color;
pointer-events: none;
@@ -146,6 +144,7 @@ $ibo-input-select--autocomplete-item-image--border: 1px solid $ibo-color-grey-60
.ibo-input-select-wrapper--with-buttons:not(.ibo-input-select-autocomplete-wrapper)::after {
position: absolute;
z-index: 1;
content: "\f0d7";
font-family: "Font Awesome 5 Free";
font-weight: 600;
@@ -163,6 +162,7 @@ $ibo-input-select--autocomplete-item-image--border: 1px solid $ibo-color-grey-60
}
.ibo-input-select--action-buttons{
position: absolute;
z-index: 1;
display: flex;
height: $ibo-input-select--action-button--height;
margin-top: $ibo-input-select--action-button--margin-top;

View File

@@ -8,7 +8,11 @@ $ibo-input--width: 100% !default;
$ibo-input--color: $ibo-color-grey-900 !default;
$ibo-input--background-color: $ibo-color-white-100 !default;
$ibo-input--border-color: $ibo-color-grey-500 !default;
$ibo-input--border-size: 1px !default;
$ibo-input--border-style: solid !default;
$ibo-input--border: $ibo-input--border-size $ibo-input--border-style $ibo-input--border-color !default;
$ibo-input--padding-x: 10px !default;
$ibo-input--padding-y: $ibo-spacing-0 !default;
@@ -34,13 +38,13 @@ $ibo-input--margin-x: $ibo-spacing-200 !default;
background-color: $ibo-input--background-color;
color: $ibo-input--color;
padding: $ibo-input--padding-y $ibo-input--padding-x;
border: 1px solid $ibo-input--border-color;
border: $ibo-input--border;
border-radius: $ibo-input--border-radius;
@extend %ibo-font-ral-nor-150;
&:focus{
border: 1px solid $ibo-input--focus--border-color;
border-color: $ibo-input--focus--border-color;
}
&:disabled{
background-color: $ibo-input--disabled--background-color;
@@ -54,8 +58,8 @@ textarea.ibo-input{
height:unset;
}
.ibo-input-wrapper.is-error, .ibo-input-field-wrapper.is-error {
.ibo-input, .ibo-input-vanilla, .cke, textarea {
border: 1px solid $ibo-input-wrapper--is-error--border-color;
.ibo-input, .ibo-input-vanilla, .cke, textarea {
border-color: $ibo-input-wrapper--is-error--border-color;
}
.ibo-input-vanilla input{
border: 0;

View File

@@ -21,82 +21,87 @@ $ibo-vendors-selectize--item--ignore-partial--background-color: $ibo-color-grey-
$ibo-vendors-selectize--input-error--border: 1px solid $ibo-color-red-600 !default;
.selectize-dropdown-content {
max-height: unset; /* Overloaded as it will be handled by the _input-select.scss partial */
}
.selectize-input input{
color: $ibo-vendors-selectize-input--color;
.selectize-control.single .selectize-input {
box-shadow: unset;
background-color: unset;
background-image: unset;
background-repeat: unset;
}
.selectize-input,
.selectize-control.single .selectize-input.input-active {
background: unset;
cursor: text;
display: inline-flex;
}
.selectize-control.plugin-combodo_add_button{
display: flex;
.selectize-control.single .selectize-input.dropdown-active:after {
margin-top: unset;
border-width: unset;
border-color: unset;
}
.selectize-control.single .selectize-input:after {
content: unset;
}
.selectize-input::after {
content: unset;
}
.selectize-add-option {
display: inline-flex;
justify-content: center;
align-items: center;
position: absolute;
right: $ibo-vendors-selectize-control--plugin-add-button--add-option--right;
height: $ibo-vendors-selectize-control--plugin-add-button--add-option--height;
width: $ibo-vendors-selectize-control--plugin-add-button--add-option--width;
z-index: 1;
color: $ibo-vendors-selectize-control--plugin-add-button--add-option--color;
@extend %ibo-font-size-100;
.selectize-input>* {
display: inline-flex;
}
.selectize-control.single .selectize-input, .selectize-dropdown.single {
border-color: $ibo-color-grey-500;
}
.selectize-dropdown {
.selected,
.active,
.active:not(.selected){
background: #f5fafd;
color: #495c68;
}
[data-selectable],
.optgroup-header {
padding: 5px 8px;
}
.option {
opacity: 1;
}
}
// Simple options renderer
.simple-option-renderer--container {
display: flex;
align-items: center;
}
.simple-option-renderer--container--icon {
width: 25px;
text-align: center;
}
.simple-option-renderer--container--label {
margin-left: 3px;
flex-grow: 1;
}
.selectize-input{
.attribute-set-item{
>* {
// Bulk modification: add / remove / partial items states
.selectize-input {
.attribute-set-item {
> * {
display: inline;
}
&.item-add::before,&.item-remove::before{
&.item-add::before,&.item-remove::before {
@extend %fa-solid-base;
margin-right: $ibo-vendors-selectize--item--icon--margin-right;
}
&.item-add{
&.item-add {
background-color: $ibo-vendors-selectize--item--add--background-color !important;
&::before{
&::before {
color: $ibo-vendors-selectize--item--add--icon--color;
content: '\f067';
}
}
&.item-remove{
&.item-remove {
background-color: $ibo-vendors-selectize--item--remove--background-color !important;
&::before{
&::before {
color: $ibo-vendors-selectize--item--remove--icon--color;
content: '\f1f8';
}
}
&.item-ignore-partial{
&.item-ignore-partial {
background-color: $ibo-vendors-selectize--item--ignore-partial--background-color !important;
}
}
&.selectize-input-error{
&.selectize-input-error {
border: $ibo-vendors-selectize--input-error--border;
}
}
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<branding>
<themes>
<theme id="fullmoon-high-contrast" _delta="define">
<variables>
</variables>
<imports>
<import id="fullmoon-high-contrast-scss-variables" xsi:type="variables">combodo-backoffice-fullmoon-high-contrast-theme/scss/scss-variables.scss</import>
</imports>
<stylesheets>
<stylesheet id="fullmoon">../css/backoffice/main.scss</stylesheet>
<stylesheet id="high-contrast-stylesheet">combodo-backoffice-fullmoon-high-contrast-theme/scss/stylesheet.scss</stylesheet>
</stylesheets>
<precompiled_stylesheet>combodo-backoffice-fullmoon-high-contrast-theme/precompiled-themes/main.css</precompiled_stylesheet>
</theme>
</themes>
</branding>
</itop_design>

View File

@@ -0,0 +1,26 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2023 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*
* 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/>
*/
Dict::Add('EN US', 'English', 'English', array(
'theme:fullmoon-high-contrast' => 'Fullmoon (High contrast)',
));

View File

@@ -0,0 +1,25 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2023 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*
* 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/>
*/
Dict::Add('FR FR', 'French', 'Français', array(
'theme:fullmoon-high-contrast' => 'Fullmoon (Contraste élevé)',
));

View File

@@ -0,0 +1,51 @@
<?php
//
// iTop module definition file
//
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'combodo-backoffice-fullmoon-high-contrast-theme/3.2.0',
array(
// Identification
//
'label' => 'Backoffice: Fullmoon with high contrast accessibility theme',
'category' => 'business',
// Setup
//
'dependencies' => array(
),
'mandatory' => true,
'visible' => false,
// Components
//
'datamodel' => array(
),
'webservice' => array(
),
'data.struct' => array(
// add your 'structure' definition XML files here,
),
'data.sample' => array(
// add your sample data XML files here,
),
// Documentation
//
'doc.manual_setup' => '', // hyperlink to manual setup documentation, if any
'doc.more_information' => '', // hyperlink to more information, if any
// Default settings
//
'settings' => array(
// Module specific settings go here, if any
),
)
);
?>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,145 @@
$ibo-high-contrast--thin-border: solid 1px $ibo-color-grey-900 !default;
$ibo-high-contrast--medium-border: solid 2px $ibo-color-grey-900 !default;
$ibo-alert--icon--font-size: 3rem !default;
$ibo-alert--icon--top: calc(50% - #{$ibo-alert--icon--font-size} / 2) !default;
$ibo-alert--icon--left: $ibo-spacing-500 !default;
$ibo-alert--icon--opacity: 0.8 !default;
$ibo-alert--icons: (
'success': '\f00c',
'information': '\f129',
'warning': '\f12a',
'danger': '\f071',
'failure': '\f071',
'error': '\f071',
) !default;
$ibo-toast--icon--font-size: 2rem !default;
$ibo-toast--icon--top: calc(50% - #{$ibo-toast--icon--font-size} / 2) !default;
$ibo-toast--icon--left: $ibo-spacing-400 !default;
@each $sName, $sIcon in $ibo-alert--icons {
%ibo-alert-#{$sName}, .ibo-alert.ibo-is-#{$sName} {
&::after {
content: $sIcon;
@extend %fa-solid-base;
position: absolute;
top: $ibo-alert--icon--top;
left: $ibo-alert--icon--left;
opacity: $ibo-alert--icon--opacity;
font-size: $ibo-alert--icon--font-size;
width: $ibo-alert--icon--font-size;
text-align: center;
}
.ibo-alert--body, .ibo-alert--title {
padding-left: calc(#{$ibo-alert--icon--left} + #{$ibo-alert--icon--font-size});
}
}
.ibo-toast.ibo-is-#{$sName} {
&::after{
font-size: $ibo-toast--icon--font-size !important;
top: $ibo-toast--icon--top !important;
left: $ibo-toast--icon--left !important;
width: $ibo-toast--icon--font-size !important;
}
padding-left: calc(#{$ibo-toast--padding-left} / 2 + #{$ibo-toast--icon--left} + #{$ibo-toast--icon--font-size});
}
}
.ibo-navigation-menu--notifications--item--new-message-indicator{
border: none !important;
background-color: transparent !important;
&.ibo-is-priority-1::before{
content: "\f12a \f12a \f12a";
@extend %fa-solid-base;
color: $ibo-color-danger-900;
}
&.ibo-is-priority-2::before{
content: "\f12a \f12a";
@extend %fa-solid-base;
color: $ibo-color-warning-900;
}
&.ibo-is-priority-3::before{
content: "\f12a";
@extend %fa-solid-base;
color: $ibo-color-success-900;
}
&.ibo-is-priority-4::before{
content: "\f129";
@extend %fa-solid-base;
color: $ibo-color-information-900;
}
}
.ibo-navigation-menu--menu-nodes ul li > a:hover, .ibo-navigation-menu--menu-node-counter{
border: $ibo-high-contrast--thin-border;
}
.ibo-top-bar{
box-shadow: none;
border-bottom: $ibo-high-contrast--medium-border;
}
.ibo-breadcrumbs--item-icon > span, .ibo-breadcrumbs--item-icon > img{
opacity: 1 !important;
}
.ibo-tab-container--tabs-list{
border-bottom: $ibo-high-contrast--thin-border;
}
.ibo-tab-container--extra-tabs-list{
border: $ibo-high-contrast--thin-border;
}
.ibo-datatable tbody > tr {
border-bottom: $ibo-high-contrast--thin-border;
}
.ibo-activity-panel--tab-toolbar{
border-bottom: $ibo-high-contrast--thin-border;
border-top: $ibo-high-contrast--thin-border;
}
.ibo-activity-entry--main-information{
border: $ibo-high-contrast--thin-border;
}
.ibo-activity-entry--medallion.ibo-has-image{
box-shadow: none;
border: $ibo-high-contrast--thin-border;
}
.ibo-activity-panel--tab-toggler.ibo-is-active .ibo-activity-panel--tab-title{
border-left: $ibo-high-contrast--thin-border;
border-right: $ibo-high-contrast--thin-border;
font-weight: 800;
}
.ibo-button{
border: $ibo-high-contrast--thin-border;
}
@each $sColor, $aColorValues in $ibo-alert-colors {
$highlight-color: nth($aColorValues, 2);
%ibo-alert-#{$sColor}, .ibo-alert.ibo-is-#{$sColor} {
border: 1px solid $highlight-color;
}
}
.ibo-pill{
border: 1px solid var(--ibo-main-color--900);
}
@each $sType, $aColors in $ibo-pill-states-colors {
.ibo-pill.ibo-is-#{$sType} {
border: 1px solid map-get($aColors, 'secondary-color');
}
}
.ibo-quick-create, .ibo-global-search{
border-left: $ibo-high-contrast--thin-border;
border-right: $ibo-high-contrast--thin-border;
}
.ibo-popover-menu{
border: $ibo-high-contrast--thin-border;
}
.ibo-popover-menu--item:not(:last-child){
border-bottom: $ibo-high-contrast--thin-border;
}

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<branding>
<themes>
<theme id="fullmoon-protanopia-deuteranopia" _delta="define">
<variables>
</variables>
<imports>
<import id="fullmoon-prota-deutera-scss-variables" xsi:type="variables">combodo-backoffice-fullmoon-protanopia-deuteranopia-theme/scss/scss-variables.scss</import>
</imports>
<stylesheets>
<stylesheet id="fullmoon">../css/backoffice/main.scss</stylesheet>
<stylesheet id="stylesheet">combodo-backoffice-fullmoon-protanopia-deuteranopia-theme/scss/stylesheet.scss</stylesheet>
</stylesheets>
<precompiled_stylesheet>combodo-backoffice-fullmoon-protanopia-deuteranopia-theme/precompiled-themes/main.css</precompiled_stylesheet>
</theme>
</themes>
</branding>
</itop_design>

View File

@@ -0,0 +1,26 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2023 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*
* 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/>
*/
Dict::Add('EN US', 'English', 'English', array(
'theme:fullmoon-protanopia-deuteranopia' => 'Fullmoon (Protanopia & Deuteranopia)'
));

View File

@@ -0,0 +1,25 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2023 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*
* 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/>
*/
Dict::Add('FR FR', 'French', 'Français', array(
'theme:fullmoon-protanopia-deuteranopia' => 'Fullmoon (Protanopie et Deuteranopie)'
));

View File

@@ -0,0 +1,51 @@
<?php
//
// iTop module definition file
//
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'combodo-backoffice-fullmoon-protanopia-deuteranopia-theme/3.2.0',
array(
// Identification
//
'label' => 'Backoffice: Fullmoon with protonopia & deuteranopia accessibility theme',
'category' => 'business',
// Setup
//
'dependencies' => array(
),
'mandatory' => true,
'visible' => false,
// Components
//
'datamodel' => array(
),
'webservice' => array(
),
'data.struct' => array(
// add your 'structure' definition XML files here,
),
'data.sample' => array(
// add your sample data XML files here,
),
// Documentation
//
'doc.manual_setup' => '', // hyperlink to manual setup documentation, if any
'doc.more_information' => '', // hyperlink to more information, if any
// Default settings
//
'settings' => array(
// Module specific settings go here, if any
),
)
);
?>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,114 @@
$ibo-color-primary-100: $ibo-color-blue-100;
$ibo-color-primary-200: $ibo-color-blue-200;
$ibo-color-primary-300: $ibo-color-blue-300;
$ibo-color-primary-400: $ibo-color-blue-400;
$ibo-color-primary-500: $ibo-color-blue-500;
$ibo-color-primary-600: $ibo-color-blue-600;
$ibo-color-primary-700: $ibo-color-blue-700;
$ibo-color-primary-800: $ibo-color-blue-800;
$ibo-color-primary-900: $ibo-color-blue-900;
$ibo-color-primary-950: $ibo-color-blue-950;
$ibo-color-danger-100: $ibo-color-orange-100;
$ibo-color-danger-200: $ibo-color-orange-200;
$ibo-color-danger-300: $ibo-color-orange-300;
$ibo-color-danger-400: $ibo-color-orange-400;
$ibo-color-danger-500: $ibo-color-orange-500;
$ibo-color-danger-600: $ibo-color-orange-600;
$ibo-color-danger-700: $ibo-color-orange-700;
$ibo-color-danger-800: $ibo-color-orange-800;
$ibo-color-danger-900: $ibo-color-orange-900;
$ibo-color-danger-950: $ibo-color-orange-950;
$ibo-color-yellow-100: #fefce8;
$ibo-color-yellow-200: #fef9c3;
$ibo-color-yellow-300: #fef08a;
$ibo-color-yellow-400: #fde047;
$ibo-color-yellow-500: #facc15;
$ibo-color-yellow-600: #eab308;
$ibo-color-yellow-700: #ca8a04;
$ibo-color-yellow-800: #a16207;
$ibo-color-yellow-900: #854d0e;
$ibo-color-yellow-950: #713f12;
$ibo-color-warning-100: $ibo-color-yellow-100;
$ibo-color-warning-200: $ibo-color-yellow-200;
$ibo-color-warning-300: $ibo-color-yellow-300;
$ibo-color-warning-400: $ibo-color-yellow-400;
$ibo-color-warning-500: $ibo-color-yellow-500;
$ibo-color-warning-600: $ibo-color-yellow-600;
$ibo-color-warning-700: $ibo-color-yellow-700;
$ibo-color-warning-800: $ibo-color-yellow-800;
$ibo-color-warning-900: $ibo-color-yellow-900;
$ibo-color-warning-950: $ibo-color-yellow-950;
$ibo-color-success-100: $ibo-color-blue-100;
$ibo-color-success-200: $ibo-color-blue-200;
$ibo-color-success-300: $ibo-color-blue-300;
$ibo-color-success-400: $ibo-color-blue-400;
$ibo-color-success-500: $ibo-color-blue-500;
$ibo-color-success-600: $ibo-color-blue-600;
$ibo-color-success-700: $ibo-color-blue-700;
$ibo-color-success-800: $ibo-color-blue-800;
$ibo-color-success-900: $ibo-color-blue-900;
$ibo-color-success-950: $ibo-color-blue-950;
$ibo-color-information-100: #f1f5f9;
$ibo-color-information-200: #e2e8f0;
$ibo-color-information-300: #cbd5e1;
$ibo-color-information-400: #94a3b8;
$ibo-color-information-500: #64748b;
$ibo-color-information-600: #475569;
$ibo-color-information-700: #334155;
$ibo-color-information-800: #1e293b;
$ibo-color-information-900: #0f172a;
$ibo-color-information-950: #020617;
$ibo-lifecycle-new-state-primary-color: $ibo-color-information-600;
$ibo-lifecycle-new-state-secondary-color: $ibo-color-white-100;
$ibo-lifecycle-neutral-state-primary-color: $ibo-color-information-600;
$ibo-lifecycle-neutral-state-secondary-color: $ibo-color-white-100;
$ibo-lifecycle-waiting-state-primary-color: $ibo-color-yellow-700;
$ibo-lifecycle-waiting-state-secondary-color: $ibo-color-white-100;
$ibo-lifecycle-success-state-primary-color: $ibo-color-blue-700;
$ibo-lifecycle-success-state-secondary-color: $ibo-color-white-100;
$ibo-lifecycle-failure-state-primary-color: $ibo-color-orange-800;
$ibo-lifecycle-failure-state-secondary-color: $ibo-color-white-100;
$ibo-lifecycle-frozen-state-primary-color: $ibo-color-information-200;
$ibo-lifecycle-frozen-state-secondary-color: $ibo-color-information-700;
$ibo-lifecycle-active-state-primary-color: $ibo-color-blue-700;
$ibo-lifecycle-active-state-secondary-color: $ibo-color-white-100;
$ibo-lifecycle-inactive-state-primary-color: $ibo-color-yellow-700;
$ibo-lifecycle-inactive-state-secondary-color: $ibo-color-white-100;
$ibo-caselog-highlight-color-1: $ibo-color-blue-700;
$ibo-caselog-highlight-color-2: $ibo-color-yellow-700;
$ibo-caselog-highlight-color-3: $ibo-color-information-600;
$ibo-caselog-highlight-color-4: $ibo-color-yellow-500;
$ibo-caselog-highlight-color-5: $ibo-color-blue-500;
$ibo-caselog-highlight-color-6: $ibo-color-yellow-300;
$ibo-caselog-highlight-color-7: $ibo-color-blue-300;
$ibo-input-wrapper--is-error--border-color: $ibo-color-warning-700;
$ibo-field-validation: $ibo-color-warning-800;
$ibo-navigation-menu--visual-hint--background-color: $ibo-color-blue-400;
$ibo-wizard-container--background-color: $ibo-color-information-200;
$ibo-wizard-container--border-color: $ibo-color-information-600;
$ibo-navigation-menu--notifications--item--new-message-indicator--background-color: $ibo-color-white-100;
$ibo-navigation-menu--notifications--item--new-message-indicator--border: solid 2px $ibo-color-grey-500;
$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-1--background-color: $ibo-color-danger-100;
$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-1--border: solid 2px $ibo-color-danger-500;
$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-2--background-color: $ibo-color-warning-100;
$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-2--border: solid 2px $ibo-color-warning-500;
$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-3--background-color: $ibo-color-success-100;
$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-3--border: solid 2px $ibo-color-success-500;
$ibo-notifications--view-all--item--unread--highlight--background-color: $ibo-color-blue-600;

View File

@@ -0,0 +1,73 @@
$ibo-alert--icon--font-size: 3rem !default;
$ibo-alert--icon--top: calc(50% - #{$ibo-alert--icon--font-size} / 2) !default;
$ibo-alert--icon--left: $ibo-spacing-500 !default;
$ibo-alert--icon--opacity: 0.3 !default;
$ibo-alert--icons: (
'success': '\f00c',
'information': '\f129',
'warning': '\f12a',
'danger': '\f071',
'failure': '\f071',
'error': '\f071',
) !default;
$ibo-toast--icon--font-size: 2rem !default;
$ibo-toast--icon--top: calc(50% - #{$ibo-toast--icon--font-size} / 2) !default;
$ibo-toast--icon--left: $ibo-spacing-400 !default;
@each $sName, $sIcon in $ibo-alert--icons {
%ibo-alert-#{$sName}, .ibo-alert.ibo-is-#{$sName} {
&::after {
content: $sIcon;
@extend %fa-solid-base;
position: absolute;
top: $ibo-alert--icon--top;
left: $ibo-alert--icon--left;
opacity: $ibo-alert--icon--opacity;
font-size: $ibo-alert--icon--font-size;
width: $ibo-alert--icon--font-size;
text-align: center;
}
.ibo-alert--body, .ibo-alert--title {
padding-left: calc(#{$ibo-alert--icon--left} + #{$ibo-alert--icon--font-size});
}
}
.ibo-toast.ibo-is-#{$sName} {
&::after{
font-size: $ibo-toast--icon--font-size !important;
top: $ibo-toast--icon--top !important;
left: $ibo-toast--icon--left !important;
width: $ibo-toast--icon--font-size !important;
}
padding-left: calc(#{$ibo-toast--padding-left} / 2 + #{$ibo-toast--icon--left} + #{$ibo-toast--icon--font-size});
}
}
.ibo-navigation-menu--notifications--item--new-message-indicator{
border: none !important;
background-color: transparent !important;
&.ibo-is-priority-1::before{
content: "\f12a \f12a \f12a";
@extend %fa-solid-base;
color: $ibo-color-danger-700;
}
&.ibo-is-priority-2::before{
content: "\f12a \f12a";
@extend %fa-solid-base;
color: $ibo-color-warning-700;
}
&.ibo-is-priority-3::before{
content: "\f12a";
@extend %fa-solid-base;
color: $ibo-color-success-700;
}
&.ibo-is-priority-4::before{
content: "\f129";
@extend %fa-solid-base;
color: $ibo-color-information-700;
}
}

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.2">
<branding>
<themes>
<theme id="fullmoon-tritanopia" _delta="define">
<variables>
</variables>
<imports>
<import id="fullmoon-trita-scss-variables" xsi:type="variables">combodo-backoffice-fullmoon-tritanopia-theme/scss/scss-variables.scss</import>
</imports>
<stylesheets>
<stylesheet id="fullmoon">../css/backoffice/main.scss</stylesheet>
<stylesheet id="stylesheet">combodo-backoffice-fullmoon-tritanopia-theme/scss/stylesheet.scss</stylesheet>
</stylesheets>
<precompiled_stylesheet>combodo-backoffice-fullmoon-tritanopia-theme/precompiled-themes/main.css</precompiled_stylesheet>
</theme>
</themes>
</branding>
</itop_design>

View File

@@ -0,0 +1,26 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2023 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*
* 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/>
*/
Dict::Add('EN US', 'English', 'English', array(
'theme:fullmoon-tritanopia' => 'Fullmoon (Tritanopia)',
));

View File

@@ -0,0 +1,25 @@
<?php
/**
* Localized data
*
* @copyright Copyright (C) 2010-2023 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*
* 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/>
*/
Dict::Add('FR FR', 'French', 'Français', array(
'theme:fullmoon-tritanopia' => 'Fullmoon (Tritanopie)',
));

View File

@@ -0,0 +1,51 @@
<?php
//
// iTop module definition file
//
SetupWebPage::AddModule(
__FILE__, // Path to the current file, all other file names are relative to the directory containing this file
'combodo-backoffice-fullmoon-tritanopia-theme/3.2.0',
array(
// Identification
//
'label' => 'Backoffice: Fullmoon with tritanopia accessibility theme',
'category' => 'business',
// Setup
//
'dependencies' => array(
),
'mandatory' => true,
'visible' => false,
// Components
//
'datamodel' => array(
),
'webservice' => array(
),
'data.struct' => array(
// add your 'structure' definition XML files here,
),
'data.sample' => array(
// add your sample data XML files here,
),
// Documentation
//
'doc.manual_setup' => '', // hyperlink to manual setup documentation, if any
'doc.more_information' => '', // hyperlink to more information, if any
// Default settings
//
'settings' => array(
// Module specific settings go here, if any
),
)
);
?>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,78 @@
$ibo-color-yellow-100: #fefce8;
$ibo-color-yellow-200: #fef9c3;
$ibo-color-yellow-300: #fef08a;
$ibo-color-yellow-400: #fde047;
$ibo-color-yellow-500: #facc15;
$ibo-color-yellow-600: #eab308;
$ibo-color-yellow-700: #ca8a04;
$ibo-color-yellow-800: #a16207;
$ibo-color-yellow-900: #854d0e;
$ibo-color-yellow-950: #713f12;
$ibo-color-success-100: $ibo-color-blue-100;
$ibo-color-success-200: $ibo-color-blue-200;
$ibo-color-success-300: $ibo-color-blue-300;
$ibo-color-success-400: $ibo-color-blue-400;
$ibo-color-success-500: $ibo-color-blue-500;
$ibo-color-success-600: $ibo-color-blue-600;
$ibo-color-success-700: $ibo-color-blue-700;
$ibo-color-success-800: $ibo-color-blue-800;
$ibo-color-success-900: $ibo-color-blue-900;
$ibo-color-success-950: $ibo-color-blue-950;
$ibo-color-information-100: #f1f5f9;
$ibo-color-information-200: #e2e8f0;
$ibo-color-information-300: #cbd5e1;
$ibo-color-information-400: #94a3b8;
$ibo-color-information-500: #64748b;
$ibo-color-information-600: #475569;
$ibo-color-information-700: #334155;
$ibo-color-information-800: #1e293b;
$ibo-color-information-900: #0f172a;
$ibo-color-information-950: #020617;
$ibo-lifecycle-new-state-primary-color: $ibo-color-information-600;
$ibo-lifecycle-new-state-secondary-color: $ibo-color-white-100;
$ibo-lifecycle-neutral-state-primary-color: $ibo-color-information-600;
$ibo-lifecycle-neutral-state-secondary-color: $ibo-color-white-100;
$ibo-lifecycle-waiting-state-primary-color: $ibo-color-red-200;
$ibo-lifecycle-waiting-state-secondary-color: $ibo-color-red-800;
$ibo-lifecycle-success-state-primary-color: $ibo-color-blue-700;
$ibo-lifecycle-success-state-secondary-color: $ibo-color-white-100;
$ibo-lifecycle-failure-state-primary-color: $ibo-color-red-800;
$ibo-lifecycle-failure-state-secondary-color: $ibo-color-white-100;
$ibo-lifecycle-frozen-state-primary-color: $ibo-color-information-200;
$ibo-lifecycle-frozen-state-secondary-color: $ibo-color-information-700;
$ibo-lifecycle-active-state-primary-color: $ibo-color-blue-700;
$ibo-lifecycle-active-state-secondary-color: $ibo-color-white-100;
$ibo-lifecycle-inactive-state-primary-color: $ibo-color-red-700;
$ibo-lifecycle-inactive-state-secondary-color: $ibo-color-white-100;
$ibo-caselog-highlight-color-1: $ibo-color-blue-700;
$ibo-caselog-highlight-color-2: $ibo-color-red-700;
$ibo-caselog-highlight-color-3: $ibo-color-information-600;
$ibo-caselog-highlight-color-4: $ibo-color-red-500;
$ibo-caselog-highlight-color-5: $ibo-color-blue-500;
$ibo-caselog-highlight-color-6: $ibo-color-red-300;
$ibo-caselog-highlight-color-7: $ibo-color-blue-300;
$ibo-input-wrapper--is-error--border-color: $ibo-color-pink-700;
$ibo-field-validation: $ibo-color-pink-800;
$ibo-navigation-menu--visual-hint--background-color: $ibo-color-pink-600;
$ibo-wizard-container--background-color: $ibo-color-information-200;
$ibo-wizard-container--border-color: $ibo-color-information-600;
$ibo-navigation-menu--notifications--item--new-message-indicator--background-color: $ibo-color-white-100;
$ibo-navigation-menu--notifications--item--new-message-indicator--border: solid 2px $ibo-color-grey-500;
$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-1--background-color: $ibo-color-pink-100;
$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-1--border: solid 2px $ibo-color-pink-600;
$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-2--background-color: $ibo-color-warning-100;
$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-2--border: solid 2px $ibo-color-warning-400;
$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-3--background-color: $ibo-color-success-100;
$ibo-navigation-menu--notifications--item--new-message-indicator--is-priority-3--border: solid 2px $ibo-color-success-500;
$ibo-notifications--view-all--item--unread--highlight--background-color: $ibo-color-pink-500;

View File

@@ -0,0 +1,73 @@
$ibo-alert--icon--font-size: 3rem !default;
$ibo-alert--icon--top: calc(50% - #{$ibo-alert--icon--font-size} / 2) !default;
$ibo-alert--icon--left: $ibo-spacing-500 !default;
$ibo-alert--icon--opacity: 0.3 !default;
$ibo-alert--icons: (
'success': '\f00c',
'information': '\f129',
'warning': '\f12a',
'danger': '\f071',
'failure': '\f071',
'error': '\f071',
) !default;
$ibo-toast--icon--font-size: 2rem !default;
$ibo-toast--icon--top: calc(50% - #{$ibo-toast--icon--font-size} / 2) !default;
$ibo-toast--icon--left: $ibo-spacing-400 !default;
@each $sName, $sIcon in $ibo-alert--icons {
%ibo-alert-#{$sName}, .ibo-alert.ibo-is-#{$sName} {
&::after {
content: $sIcon;
@extend %fa-solid-base;
position: absolute;
top: $ibo-alert--icon--top;
left: $ibo-alert--icon--left;
opacity: $ibo-alert--icon--opacity;
font-size: $ibo-alert--icon--font-size;
width: $ibo-alert--icon--font-size;
text-align: center;
}
.ibo-alert--body, .ibo-alert--title {
padding-left: calc(#{$ibo-alert--icon--left} + #{$ibo-alert--icon--font-size});
}
}
.ibo-toast.ibo-is-#{$sName} {
&::after{
font-size: $ibo-toast--icon--font-size !important;
top: $ibo-toast--icon--top !important;
left: $ibo-toast--icon--left !important;
width: $ibo-toast--icon--font-size !important;
}
padding-left: calc(#{$ibo-toast--padding-left} / 2 + #{$ibo-toast--icon--left} + #{$ibo-toast--icon--font-size});
}
}
.ibo-navigation-menu--notifications--item--new-message-indicator{
border: none !important;
background-color: transparent !important;
&.ibo-is-priority-1::before{
content: "\f12a \f12a \f12a";
@extend %fa-solid-base;
color: $ibo-color-danger-700;
}
&.ibo-is-priority-2::before{
content: "\f12a \f12a";
@extend %fa-solid-base;
color: $ibo-color-warning-700;
}
&.ibo-is-priority-3::before{
content: "\f12a";
@extend %fa-solid-base;
color: $ibo-color-success-700;
}
&.ibo-is-priority-4::before{
content: "\f129";
@extend %fa-solid-base;
color: $ibo-color-information-700;
}
}

View File

@@ -23,6 +23,9 @@
<module>itop-hub-connector</module>
<module>itop-oauth-client</module>
<module>combodo-backoffice-darkmoon-theme</module>
<module>combodo-backoffice-fullmoon-high-contrast-theme</module>
<module>combodo-backoffice-fullmoon-protanopia-deuteranopia-theme</module>
<module>combodo-backoffice-fullmoon-tritanopia-theme</module>
<module>itop-themes-compat</module>
</modules>
<mandatory>true</mandatory>

View File

@@ -321,6 +321,11 @@ function ExtKeyWidget(id, sTargetClass, sFilter, sTitle, bSelectMode, oWizHelper
* @return {void}
*/
this.UpdateDropdownPosition = function (oControlElem, oDropdownElem) {
// First fix width to ensure it's not too long
const fControlWidth = oControlElem.outerWidth();
oDropdownElem.css('width', fControlWidth);
// Then, fix height / position to ensure it's within the viewport
const fWindowHeight = window.innerHeight;
const fControlTopY = oControlElem.offset().top;

View File

@@ -70,7 +70,7 @@
* ```
*/
// If these constants aren't defined by the main page, define them (global) ourselves
// If these constants aren't defined by the main page, define them (global) ourselves
if (typeof aLoadedJsFilesRegister === "undefined") {
Object.defineProperty(window, "aLoadedJsFilesRegister", {
value: new Map(),
@@ -186,11 +186,27 @@
{% endif %}
{% block iboPageCssFiles %}
{% for aCssFileData in aPage.aCssFiles %}
{% if aPage.aCssFiles is not empty %}
<script type="text/javascript">
if (!$('link[href="{{ aCssFileData.link }}"]').length) $('<link href="{{ aCssFileData.link }}" rel="stylesheet">').appendTo('head');
// If this constant isn't defined by the main page, define it (global) ourselves
if (typeof aLoadedCssFilesRegister === "undefined") {
Object.defineProperty(window, "aLoadedCssFilesRegister", {
value: new Map(),
writable: false,
configurable: false,
enumerable: true
});
}
{% for aCssFileData in aPage.aCssFiles %}
// Only if file is NOT already present in the register (see it declaration in WebPage TWIG template), add it to the page and register
if (aLoadedCssFilesRegister.has("{{ aCssFileData['link']|raw }}") === false) {
$('<link href="{{ aCssFileData['link'] }}" rel="stylesheet">').appendTo('head');
aLoadedCssFilesRegister.set("{{ aCssFileData['link']|raw }}", true);
}
{% endfor %}
</script>
{% endfor %}
{% endif %}
{% endblock %}
{{ aPage.sCapturedOutput|raw }}

View File

@@ -24,8 +24,9 @@
- jQuery scripts spurious problems (like failing on a 'reload') #}
{% block iboPageCssFiles %}
{% for aCssFileData in aPage.aCssFiles %}
{# Mind that CSS files are registered in a JS variable below (@see aLoadedCssFilesRegister), to ensure that a file isn't loaded twice through an async call #}
{% if aCssFileData['condition'] != '' %}<!--[if {{ aCssFileData['condition'] }}]>{% endif %}
<link type="text/css" href="{{ aCssFileData['link']|add_itop_version|raw }}" rel="stylesheet">
<link type="text/css" href="{{ aCssFileData['link']|add_itop_version|raw }}" rel="stylesheet">
{% if aCssFileData['condition'] != '' %}<![endif]-->{% endif %}
{% endfor %}
{% endblock %}
@@ -66,11 +67,26 @@
{% block iboPageTemplates %}
{% endblock %}
{# CSS files can either be loaded initially or requested by an XHR response #}
{# In order to ensure that a file isn't loaded twice, we register them here so async calls can check if they to load their dependencies or not #}
{# Note that unlike for the JS files, we don't need to use promises, as we don't need them to wait for the previous one to be loaded #}
{# (Having a CSS loaded again can lead to rule overloads being reverted) #}
<script type="text/javascript">
/**
* @var {Map} aLoadedCssFilesRegister
* Register of all CSS files loaded in this page.
* A CSS file MUST NOT be loaded more than once as it could compromise rules overloads loaded after the first time.
*/
const aLoadedCssFilesRegister = new Map();
{% for aCssFileData in aPage.aCssFiles %}
aLoadedCssFilesRegister.set("{{ aCssFileData['link']|raw }}", true);
{% endfor %}
</script>
{# JS files can either be loaded initially or requested by an XHR response #}
{# - For the initial page, all files are loaded before running inline snippets #}
{# - For XHR responses, we need to ensure that all required files are fully loaded before running inline snippets #}
<script type="text/javascript">
/**
* @var {Map} aLoadedJsFilesRegister
* Register of all JS files loaded in this page, including the Promise corresponding to the loading state of each file.
@@ -83,11 +99,11 @@ const aLoadedJsFilesRegister = new Map();
*/
const aLoadedJsFilesResolveCallbacks = new Map();
{% for sJsFile in aPage.aJsFiles %}
aLoadedJsFilesRegister.set("{{ sJsFile|raw }}", new Promise(function(resolve) {
aLoadedJsFilesResolveCallbacks.set("{{ sJsFile|raw }}", resolve);
// Resolve promise right away as these files are loaded immediately before any inline JS is executed
aLoadedJsFilesResolveCallbacks.get("{{ sJsFile|raw }}")();
}));
aLoadedJsFilesRegister.set("{{ sJsFile|raw }}", new Promise(function(resolve) {
aLoadedJsFilesResolveCallbacks.set("{{ sJsFile|raw }}", resolve);
// Resolve promise right away as these files are loaded immediately before any inline JS is executed
aLoadedJsFilesResolveCallbacks.get("{{ sJsFile|raw }}")();
}));
{% endfor %}
</script>