N°2847 - Refactor Button block for a better use of semantic colors, also change "primary" action color to something less flashy

This commit is contained in:
Molkobain
2020-11-02 17:39:10 +01:00
parent 680f522065
commit b454958742
11 changed files with 155 additions and 52 deletions

View File

@@ -2619,7 +2619,7 @@ CSS
$oCancelButton = ButtonFactory::MakeForSecondaryAction(Dict::S('UI:Button:Cancel'));
$oCancelButton->AddCSSClasses('action cancel');
$oToolbarTop->AddSubBlock($oCancelButton);
$oApplyButton = ButtonFactory::MakeForValidationAction($sApplyButton, null, null, true);
$oApplyButton = ButtonFactory::MakeForPrimaryAction($sApplyButton, null, null, true);
$oApplyButton->AddCSSClasses('action');
$oToolbarTop->AddSubBlock($oApplyButton);
@@ -2633,7 +2633,7 @@ CSS
$sStimulusCode, $oSetToCheckRights) : UR_ALLOWED_NO;
switch ($iActionAllowed) {
case UR_ALLOWED_YES:
$oButton = ButtonFactory::MakeForValidationAction($aStimuli[$sStimulusCode]->GetLabel(), 'next_action', $sStimulusCode, true);
$oButton = ButtonFactory::MakeForPrimaryAction($aStimuli[$sStimulusCode]->GetLabel(), 'next_action', $sStimulusCode, true);
$oButton->AddCSSClasses('action');
$oButton->SetColor(Button::ENUM_COLOR_NEUTRAL);
$oToolbarTop->AddSubBlock($oButton);

View File

@@ -10,6 +10,7 @@ $ibo-button--label--margin-left: 4px !default;
$ibo-button-colors: (
'regular': (
/* Semantics */
'neutral': (
'': (
$ibo-color-secondary-100,
@@ -32,21 +33,22 @@ $ibo-button-colors: (
$ibo-button--box-shadow-top $ibo-color-grey-300,
),
),
/* Primary action does not have the colors from the primary brand color, at least not for now */
'primary': (
'': (
$ibo-color-primary-400,
$ibo-color-grey-900,
$ibo-button--box-shadow-bottom $ibo-color-primary-600,
$ibo-color-cyan-700,
$ibo-color-white-100,
$ibo-button--box-shadow-bottom $ibo-color-cyan-900,
),
':hover': (
$ibo-color-primary-600,
$ibo-color-grey-900,
$ibo-button--box-shadow-bottom $ibo-color-primary-800,
$ibo-color-cyan-800,
$ibo-color-white-100,
$ibo-button--box-shadow-bottom $ibo-color-cyan-900,
),
':active': (
$ibo-color-primary-600,
$ibo-color-grey-900,
$ibo-button--box-shadow-top $ibo-color-primary-800 #{','} $ibo-button--box-shadow-bottom $ibo-color-primary-600,
$ibo-color-cyan-800,
$ibo-color-white-100,
$ibo-button--box-shadow-top $ibo-color-cyan-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-cyan-800,
),
':disabled': (
$ibo-color-grey-300,
@@ -76,6 +78,51 @@ $ibo-button-colors: (
$ibo-button--box-shadow-top $ibo-color-grey-300,
),
),
'danger': (
'': (
$ibo-color-danger-600,
$ibo-color-white-100,
$ibo-button--box-shadow-bottom $ibo-color-danger-800,
),
':hover': (
$ibo-color-danger-700,
$ibo-color-white-100,
$ibo-button--box-shadow-bottom $ibo-color-danger-800,
),
':active': (
$ibo-color-danger-700,
$ibo-color-white-100,
$ibo-button--box-shadow-top $ibo-color-danger-800 #{','} $ibo-button--box-shadow-bottom $ibo-color-danger-700,
),
':disabled': (
$ibo-color-grey-300,
$ibo-color-grey-700,
$ibo-button--box-shadow-top $ibo-color-grey-300,
),
),
'success': (
'': (
$ibo-color-success-700,
$ibo-color-white-100,
$ibo-button--box-shadow-bottom $ibo-color-success-900,
),
':hover': (
$ibo-color-success-800,
$ibo-color-white-100,
$ibo-button--box-shadow-bottom $ibo-color-success-900,
),
':active': (
$ibo-color-success-800,
$ibo-color-white-100,
$ibo-button--box-shadow-top $ibo-color-success-900 #{','} $ibo-button--box-shadow-bottom $ibo-color-success-800,
),
':disabled': (
$ibo-color-grey-300,
$ibo-color-grey-700,
$ibo-button--box-shadow-top $ibo-color-grey-300,
),
),
/* Colors */
'red': (
'': (
$ibo-color-red-600,
@@ -144,6 +191,7 @@ $ibo-button-colors: (
)
),
'alternative': (
/* Semantics */
'neutral': (
'': (
transparent,
@@ -166,21 +214,22 @@ $ibo-button-colors: (
$ibo-button--box-shadow-top transparent,
),
),
/* Primary action does not have the colors from the primary brand color, at least not for now */
'primary': (
'': (
transparent,
$ibo-color-primary-600,
$ibo-color-cyan-800,
$ibo-button--box-shadow-bottom transparent,
),
':hover': (
$ibo-color-primary-300,
$ibo-color-white-100,
$ibo-color-grey-900,
$ibo-button--box-shadow-bottom $ibo-color-primary-300,
$ibo-button--box-shadow-bottom $ibo-color-white-100,
),
':active': (
$ibo-color-primary-300,
$ibo-color-white-100,
$ibo-color-grey-900,
$ibo-button--box-shadow-top $ibo-color-primary-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-primary-300,
$ibo-button--box-shadow-top $ibo-color-white-100 #{','} $ibo-button--box-shadow-bottom $ibo-color-white-100,
),
':disabled': (
transparent,
@@ -210,6 +259,51 @@ $ibo-button-colors: (
$ibo-button--box-shadow-top transparent,
),
),
'danger': (
'': (
transparent,
$ibo-color-danger-700,
$ibo-button--box-shadow-bottom transparent,
),
':hover': (
$ibo-color-danger-200,
$ibo-color-danger-900,
$ibo-button--box-shadow-bottom $ibo-color-danger-200,
),
':active': (
$ibo-color-danger-200,
$ibo-color-danger-900,
$ibo-button--box-shadow-top $ibo-color-danger-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-danger-200,
),
':disabled': (
transparent,
$ibo-color-grey-600,
$ibo-button--box-shadow-top transparent,
),
),
'success': (
'': (
transparent,
$ibo-color-success-900,
$ibo-button--box-shadow-bottom transparent,
),
':hover': (
$ibo-color-success-100,
$ibo-color-success-900,
$ibo-button--box-shadow-bottom $ibo-color-success-100,
),
':active': (
$ibo-color-success-100,
$ibo-color-success-900,
$ibo-button--box-shadow-top $ibo-color-success-700 #{','} $ibo-button--box-shadow-bottom $ibo-color-success-100,
),
':disabled': (
transparent,
$ibo-color-grey-600,
$ibo-button--box-shadow-top transparent,
),
),
/* Colors */
'red': (
'': (
transparent,

View File

@@ -16,7 +16,7 @@
* You should have received a copy of the GNU Affero General Public License
*/
/* Color palettes */
/* base color palettes */
$ibo-color-white-100: hsla(0, 0%, 100%, 1) !default;
$ibo-color-white-200: hsla(0, 0%, 94.9%, 1) !default;
$ibo-color-transparent: hsla(0, 0%, 100%, 0) !default;
@@ -105,6 +105,7 @@ $ibo-color-pink-900: hsla(318, 51%, 29%, 1) !default;
$ibo-colors: ('grey', 'blue-grey', 'blue', 'cyan', 'green', 'orange', 'red', 'pink', 'primary', 'secondary', 'information', 'success', 'warning', 'danger');
/* CSS variables */
:root{
--ibo-color-white-100: #{$ibo-color-white-100};
--ibo-color-white-200: #{$ibo-color-white-200};

View File

@@ -17,32 +17,13 @@ $ibo-lifecycle-failure-state-primary-color: $ibo-color-pink-700 !default;
$ibo-lifecycle-failure-state-secondary-color: $ibo-color-white-100 !default;
$ibo-lifecycle-frozen-state-primary-color: $ibo-color-grey-200 !default;
$ibo-lifecycle-frozen-state-secondary-color: $ibo-color-grey-700 !default;
/* - For basic lifecycle */
$ibo-lifecycle-active-state-primary-color: $ibo-color-green-700 !default;
$ibo-lifecycle-active-state-secondary-color: $ibo-color-white-100 !default;
$ibo-lifecycle-inactive-state-primary-color: $ibo-color-orange-400 !default;
$ibo-lifecycle-inactive-state-secondary-color: $ibo-color-white-100 !default;
:root{
--ibo-lifecycle-new-state-primary-color: #{$ibo-lifecycle-new-state-primary-color};
--ibo-lifecycle-new-state-secondary-color: #{$ibo-lifecycle-new-state-secondary-color};
--ibo-lifecycle-neutral-state-primary-color: #{$ibo-lifecycle-neutral-state-primary-color};
--ibo-lifecycle-neutral-state-secondary-color: #{$ibo-lifecycle-neutral-state-secondary-color};
--ibo-lifecycle-waiting-state-primary-color: #{$ibo-lifecycle-waiting-state-primary-color};
--ibo-lifecycle-waiting-state-secondary-color: #{$ibo-lifecycle-waiting-state-secondary-color};
--ibo-lifecycle-success-state-primary-color: #{$ibo-lifecycle-success-state-primary-color};
--ibo-lifecycle-success-state-secondary-color: #{$ibo-lifecycle-success-state-secondary-color};
--ibo-lifecycle-failure-state-primary-color: #{$ibo-lifecycle-failure-state-primary-color};
--ibo-lifecycle-failure-state-secondary-color: #{$ibo-lifecycle-failure-state-secondary-color};
--ibo-lifecycle-frozen-state-primary-color: #{$ibo-lifecycle-frozen-state-primary-color};
--ibo-lifecycle-frozen-state-secondary-color: #{$ibo-lifecycle-frozen-state-secondary-color};
--ibo-lifecycle-active-state-primary-color: #{$ibo-lifecycle-active-state-primary-color};
--ibo-lifecycle-active-state-secondary-color: #{$ibo-lifecycle-active-state-secondary-color};
--ibo-lifecycle-inactive-state-primary-color: #{$ibo-lifecycle-inactive-state-primary-color};
--ibo-lifecycle-inactive-state-secondary-color: #{$ibo-lifecycle-inactive-state-secondary-color};
}
$ibo-lifecycle-states-colors: (
'new': (
'primary-color': $ibo-lifecycle-new-state-primary-color,
@@ -77,4 +58,25 @@ $ibo-lifecycle-states-colors: (
'primary-color': $ibo-lifecycle-inactive-state-primary-color,
'secondary-color': $ibo-lifecycle-inactive-state-secondary-color,
),
);
);
/* CSS varibales */
:root{
--ibo-lifecycle-new-state-primary-color: #{$ibo-lifecycle-new-state-primary-color};
--ibo-lifecycle-new-state-secondary-color: #{$ibo-lifecycle-new-state-secondary-color};
--ibo-lifecycle-neutral-state-primary-color: #{$ibo-lifecycle-neutral-state-primary-color};
--ibo-lifecycle-neutral-state-secondary-color: #{$ibo-lifecycle-neutral-state-secondary-color};
--ibo-lifecycle-waiting-state-primary-color: #{$ibo-lifecycle-waiting-state-primary-color};
--ibo-lifecycle-waiting-state-secondary-color: #{$ibo-lifecycle-waiting-state-secondary-color};
--ibo-lifecycle-success-state-primary-color: #{$ibo-lifecycle-success-state-primary-color};
--ibo-lifecycle-success-state-secondary-color: #{$ibo-lifecycle-success-state-secondary-color};
--ibo-lifecycle-failure-state-primary-color: #{$ibo-lifecycle-failure-state-primary-color};
--ibo-lifecycle-failure-state-secondary-color: #{$ibo-lifecycle-failure-state-secondary-color};
--ibo-lifecycle-frozen-state-primary-color: #{$ibo-lifecycle-frozen-state-primary-color};
--ibo-lifecycle-frozen-state-secondary-color: #{$ibo-lifecycle-frozen-state-secondary-color};
--ibo-lifecycle-active-state-primary-color: #{$ibo-lifecycle-active-state-primary-color};
--ibo-lifecycle-active-state-secondary-color: #{$ibo-lifecycle-active-state-secondary-color};
--ibo-lifecycle-inactive-state-primary-color: #{$ibo-lifecycle-inactive-state-primary-color};
--ibo-lifecycle-inactive-state-secondary-color: #{$ibo-lifecycle-inactive-state-secondary-color};
}

View File

@@ -4,6 +4,7 @@
*/
/* Semantic palettes */
/* - Primary color of the brand */
$ibo-color-primary-100: $ibo-color-orange-100 !default;
$ibo-color-primary-200: $ibo-color-orange-200 !default;
$ibo-color-primary-300: $ibo-color-orange-300 !default;
@@ -14,6 +15,7 @@ $ibo-color-primary-700: $ibo-color-orange-700 !default;
$ibo-color-primary-800: $ibo-color-orange-800 !default;
$ibo-color-primary-900: $ibo-color-orange-900 !default;
/* - Secondary color of the brand */
$ibo-color-secondary-100: $ibo-color-grey-100 !default;
$ibo-color-secondary-200: $ibo-color-grey-200 !default;
$ibo-color-secondary-300: $ibo-color-grey-300 !default;
@@ -24,6 +26,7 @@ $ibo-color-secondary-700: $ibo-color-grey-700 !default;
$ibo-color-secondary-800: $ibo-color-grey-800 !default;
$ibo-color-secondary-900: $ibo-color-grey-900 !default;
/* - Information: messages / actions that should neither seem as success, warning or failure */
$ibo-color-information-100: $ibo-color-blue-100 !default;
$ibo-color-information-200: $ibo-color-blue-200 !default;
$ibo-color-information-300: $ibo-color-blue-300 !default;
@@ -34,6 +37,7 @@ $ibo-color-information-700: $ibo-color-blue-700 !default;
$ibo-color-information-800: $ibo-color-blue-800 !default;
$ibo-color-information-900: $ibo-color-blue-900 !default;
/* Success: messages of success, safe actions, ... */
$ibo-color-success-100: $ibo-color-green-100 !default;
$ibo-color-success-200: $ibo-color-green-200 !default;
$ibo-color-success-300: $ibo-color-green-300 !default;
@@ -44,6 +48,7 @@ $ibo-color-success-700: $ibo-color-green-700 !default;
$ibo-color-success-800: $ibo-color-green-800 !default;
$ibo-color-success-900: $ibo-color-green-900 !default;
/* Warning: messages of warning, actions that would be done carefully, ... */
$ibo-color-warning-100: $ibo-color-orange-100 !default;
$ibo-color-warning-200: $ibo-color-orange-200 !default;
$ibo-color-warning-300: $ibo-color-orange-300 !default;
@@ -54,6 +59,7 @@ $ibo-color-warning-700: $ibo-color-orange-700 !default;
$ibo-color-warning-800: $ibo-color-orange-800 !default;
$ibo-color-warning-900: $ibo-color-orange-900 !default;
/* Danger: messages of danger / failure, actions that cannot be undone, ... */
$ibo-color-danger-100: $ibo-color-red-100 !default;
$ibo-color-danger-200: $ibo-color-red-200 !default;
$ibo-color-danger-300: $ibo-color-red-300 !default;
@@ -73,6 +79,7 @@ $ibo-caselog-highlight-color-4: $ibo-color-orange-400 !default;
$ibo-caselog-highlight-color-5: $ibo-color-cyan-200 !default;
$ibo-caselog-highlight-colors: ($ibo-caselog-highlight-color-1, $ibo-caselog-highlight-color-2, $ibo-caselog-highlight-color-3, $ibo-caselog-highlight-color-4, $ibo-caselog-highlight-color-5) !default;
/* CSS variables */
:root {
--ibo-color-primary-100: #{$ibo-color-primary-100};
--ibo-color-primary-200: #{$ibo-color-primary-200};

View File

@@ -179,7 +179,7 @@ try {
$oForm->AddSubBlock($oCancelButton);
// - Submit button
$oSubmitButton = ButtonFactory::MakeForValidationAction(Dict::S('config-apply'), null, Dict::S('config-apply'), true, 'submit_button');
$oSubmitButton = ButtonFactory::MakeForPrimaryAction(Dict::S('config-apply'), null, Dict::S('config-apply'), true, 'submit_button');
$oForm->AddSubBlock($oSubmitButton);
$oForm->AddSubBlock(InputFactory::MakeForHidden('prev_config', $sOriginalConfigEscaped, 'prev_config'));
$oForm->AddSubBlock(InputFactory::MakeForHidden('new_config', $sConfigEscaped));

View File

@@ -82,7 +82,7 @@ function DisplayPreferences($oP)
$oMiscSettingsCancelButton = ButtonFactory::MakeForSecondaryAction(Dict::S('UI:Button:Cancel'));
$oMiscSettingsCancelButton->SetOnClickJsCode("window.location.href = '$sURL'");
// - Submit button
$oMiscSettingsSubmitButton = ButtonFactory::MakeForValidationAction(Dict::S('UI:Button:Apply'), 'operation', 'apply_others', true);
$oMiscSettingsSubmitButton = ButtonFactory::MakeForPrimaryAction(Dict::S('UI:Button:Apply'), 'operation', 'apply_others', true);
$oMiscSettingsEndHtmlBlock = new Html('</form>');
@@ -143,7 +143,7 @@ EOF
$oFavoriteOrganizationsCancelButton = ButtonFactory::MakeForSecondaryAction(Dict::S('UI:Button:Cancel'));
$oFavoriteOrganizationsCancelButton->SetOnClickJsCode("window.location.href = '$sURL'");
// - Submit button
$oFavoriteOrganizationsSubmitButton = ButtonFactory::MakeForValidationAction(Dict::S('UI:Button:Apply'), 'operation', 'apply', true);
$oFavoriteOrganizationsSubmitButton = ButtonFactory::MakeForPrimaryAction(Dict::S('UI:Button:Apply'), 'operation', 'apply', true);
$sFavoriteOrganizationsEndHtml = '</form>';
$oFavoriteOrganizationsEndHtmlBlock = new Html($sFavoriteOrganizationsEndHtml);
@@ -367,7 +367,7 @@ EOF
$oNewsroomCancelButton = ButtonFactory::MakeForSecondaryAction(Dict::S('UI:Button:Cancel'));
$oNewsroomCancelButton->SetOnClickJsCode("window.location.href = '$sURL'");
// - Submit button
$oNewsroomSubmitButton = ButtonFactory::MakeForValidationAction(Dict::S('UI:Button:Apply'), 'operation',
$oNewsroomSubmitButton = ButtonFactory::MakeForPrimaryAction(Dict::S('UI:Button:Apply'), 'operation',
'apply_newsroom_preferences', true);
@@ -479,7 +479,7 @@ function GetUserLanguageForm(ApplicationContext $oAppContext, string $sURL): For
$oUserLanguageCancelButton->SetOnClickJsCode("window.location.href = '$sURL'");
$oUserLanguageForm->AddSubBlock($oUserLanguageCancelButton);
// - Submit button
$oUserLanguageSubmitButton = ButtonFactory::MakeForValidationAction(Dict::S('UI:Button:Apply'), null, null, true);
$oUserLanguageSubmitButton = ButtonFactory::MakeForPrimaryAction(Dict::S('UI:Button:Apply'), null, null, true);
$oUserLanguageForm->AddSubBlock($oUserLanguageSubmitButton);
return $oUserLanguageForm;
}

View File

@@ -56,9 +56,9 @@ class Button extends UIBlock
/** @var string ENUM_COLOR_NEUTRAL */
public const ENUM_COLOR_NEUTRAL = 'neutral';
/** @var string ENUM_COLOR_VALIDATION */
public const ENUM_COLOR_VALIDATION = 'green';
public const ENUM_COLOR_VALIDATION = 'success';
/** @var string ENUM_COLOR_DESTRUCTIVE */
public const ENUM_COLOR_DESTRUCTIVE = 'red';
public const ENUM_COLOR_DESTRUCTIVE = 'danger';
/** @var string ENUM_COLOR_PRIMARY */
public const ENUM_COLOR_PRIMARY = 'primary';
/** @var string ENUM_COLOR_SECONDARY */

View File

@@ -94,8 +94,7 @@ class ButtonFactory
}
/**
* Make a Button component for a validation action, should be used to tell the user he/she going to save / validate / confirm his/her
* choices
* Make a Button component for a success action, should be used to tell the user he/she going to make a positive action/choice
*
* @param string $sLabel
* @param string|null $sName See Button::$sName
@@ -105,7 +104,7 @@ class ButtonFactory
*
* @return \Combodo\iTop\Application\UI\Component\Button\Button
*/
public static function MakeForValidationAction(
public static function MakeForPositiveAction(
string $sLabel,
string $sName = null,
string $sValue = null,

View File

@@ -29,7 +29,7 @@ class ActivityNewEntryFormFactory
$oActivityNewEntryForm->SetFormTextInput(new RichText());
$oActivityNewEntryForm->AddFormActionButtons(ButtonFactory::MakeForSecondaryAction('Cancel')
->SetOnClickJsCode("$(this).parents('[data-role=\"ibo-activity-new-entry-form--action-buttons--right-actions\"]').trigger('cancel');"));
$oActivityNewEntryForm->AddFormActionButtons(ButtonFactory::MakeForValidationAction('Send')
$oActivityNewEntryForm->AddFormActionButtons(ButtonFactory::MakeForPrimaryAction('Send')
->SetColor('cyan')
->SetIconClass('fas fa-paper-plane')
->SetOnClickJsCode("$(this).parents('[data-role=\"ibo-activity-new-entry-form--action-buttons--right-actions\"]').trigger('submit');"));

View File

@@ -66,8 +66,8 @@ $oPageContentLayout->AddMainBlock(ButtonFactory::MakeForPrimaryAction('Primary')
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeForPrimaryAction('Primary dis.')->SetIsDisabled(true));
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeForSecondaryAction('Secondary'));
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeForSecondaryAction('Secondary dis.')->SetIsDisabled(true));
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeForValidationAction('Validation'));
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeForValidationAction('Validation dis.')->SetIsDisabled(true));
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeForPositiveAction('Validation'));
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeForPositiveAction('Validation dis.')->SetIsDisabled(true));
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeForDestructiveAction('Destructive'));
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeForDestructiveAction('Destructive dis.')->SetIsDisabled(true));
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeAlternativeNeutral('Alt. neutral', 'alt-neutral'));
@@ -81,7 +81,7 @@ $oPageContentLayout->AddMainBlock(ButtonFactory::MakeForAlternativeValidationAct
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeForAlternativeDestructiveAction('Alt. destructive'));
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeForAlternativeDestructiveAction('Alt. destructive dis.')->SetIsDisabled(true));
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeLinkNeutral(utils::GetAbsoluteUrlAppRoot(), 'Link neutral'));
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeForAlternativeDestructiveAction('Alt. destructive dis.')->SetIsDisabled(true));
$oPageContentLayout->AddMainBlock(ButtonFactory::MakeLinkNeutral(utils::GetAbsoluteUrlAppRoot(), 'Link neutral dis.')->SetIsDisabled(true));
$oPageContentLayout->AddMainBlock(new Html('<hr/>'));