/*! Icinga Web 2 | (c) 2019 Icinga Development Team | GPLv2+ */ /** Rules found in here are structured with two layers: 1) form.icinga-form, that's what defines the general structure of our single/individual forms. It's not supposed to be used for any other forms that are not the only content on the page (e.g. inline-forms) 2) .icinga-controls, this defines the design of our controls. Any input that's part of a container with this class gets our design applied */ // General form layout form.icinga-form { max-width: 70em; width: 80%; .control-group { display: flex; flex-wrap: wrap; align-items: flex-start; // Negative margin-right because every child gets 1em right but we can't exclude // the last element as it's impossible to identify the last *visible* element margin: 1em -1em 1em 0; } &:not(.inline) .control-group > * { margin-right: 1em; } .form-controls { display: flex; justify-content: flex-end; } } // Minimal form layout #layout.minimal-layout, #layout.twocols:not(.wide-layout) { form.icinga-form { &:not(.inline) { width: 100%; } .control-label-group { text-align: left; padding-bottom: 0; padding-left: 0; margin-bottom: 0; } .toggle-switch ~ .control-info:before { margin-left: 0; } .control-info { opacity: .5; } .errors { margin: 0; } } } // Label styles form.icinga-form .control-label-group { display: flex; flex-direction: column; justify-content: center; line-height: 1.1em; padding: .5625em .5625em .5625em 0; max-height: 2.5em; text-align: right; width: 14em; } .icinga-controls fieldset { margin: 0; padding: 0; border: none; border-top: 1px solid @gray-light; legend, .description { margin-left: .7em; } } .icinga-controls .control-info { line-height: 2.25em; opacity: .6; &:before { margin-right: 0; } &:hover:before { color: black; } } form.icinga-form .control-group .control-info { margin-left: -.5em; } form.icinga-form .control-group .toggle-switch ~ .control-info { margin-left: 0; } form.inline { display: inline-block; width: auto; .control-group { margin: 0; } .control-label-group { width: auto; line-height: 0.857em; } .control-group .spinner { line-height: 1.5; margin: 0 auto; } } // General input styles .icinga-controls { input[type="text"], input[type="password"], input[type="number"], input[type="datetime-local"], input[type="date"], input[type="time"], textarea, select { background-color: @low-sat-blue; } } form.icinga-form { input[type="text"], input[type="password"], input[type="number"], input[type="datetime-local"], input[type="date"], input[type="time"], textarea, select { flex: 1 1 auto; width: 0; } } .icinga-controls { input:not([type="checkbox"]):not([type="radio"]), .toggle-switch, button, select, textarea { border: none; .rounded-corners(.25em); .appearance(none); } input[type="radio"] { margin-right: .25em; } } .icinga-controls { input:not([type="checkbox"]), .toggle-switch, select, textarea, button, .toggle-switch { font-size: inherit; padding: @vertical-padding; } } form.icinga-form { .control-group .toggle-switch, .form-controls .toggle-switch { margin-top: 0.5em*0.666666667; margin-bottom: 0.5em*0.666666667; } } form.icinga-form select:not([multiple]) { // Compensate inconsistent select height calculations line-height: 1em; height: 2.25em; } // Remove native dropdown arrow in IE10+ .icinga-controls select::-ms-expand { display: none; opacity: 0; } .icinga-controls select:not([multiple]) { padding-right: 1.5625em; background-image: url(../img/select-icon.svg); background-repeat: no-repeat; background-position: right center; background-size: contain; } form.icinga-form select { width: 0; // Prevent selects with long option values from exceeding the container } form.inline select { width: auto; } // Specific input styles .link-button { .action-link(); // Reset defaults background: none; border: none; display: inline-block; padding: 0; text-align: left; } .icinga-controls { input ~ .spinner, button ~ .spinner, select ~ .spinner, textarea ~ .spinner { line-height: normal; padding: .5em 0; &:before { vertical-align: middle; margin-left: .5em; opacity: 0.4; } } } /* selects get their spinner specifically placed */ .icinga-controls select:not([multiple]) + .spinner { height: 2.25em; margin: 0; &:before { margin-left: -3.75em; } } form.icinga-form .form-controls { .spinner { order: -1; } .btn-primary { order: 99; } } // Button styles .icinga-controls { input[type="submit"], input[type="submit"].btn-confirm { .button(); } input[type="submit"].btn-remove { .button(@body-bg-color, @color-critical, darken(@color-critical, 10%)); } input[type="submit"].btn-cancel { .button(@body-bg-color, @gray, @black); } } // Toggle styles .icinga-controls .toggle-switch { cursor: pointer; position: relative; display: inline-block; height: 1.5em; width: 2.625em; } .icinga-controls .toggle-switch .toggle-slider { position: absolute; left: 0; top: 0; display: inline-block; background: @low-sat-blue; border: 1px solid @low-sat-blue; box-sizing: content-box; border-radius: 1em; height: 4/3em; width: 8/3em; vertical-align: middle; } .icinga-controls .toggle-switch .toggle-slider:before { position: absolute; top: 0; left: 0; background: @text-color-inverted; border-radius: 1em; border: 1px solid @low-sat-blue; box-sizing: border-box; content: ""; display: block; height: 4/3em; margin-left: 0; width: 4/3em; @transition: left .2s ease, margin .2s ease; -webkit-transition: @transition; -moz-transition: @transition; -o-transition: @transition; transition: @transition; } .icinga-controls input[type="checkbox"]:checked + .toggle-switch .toggle-slider { background-color: @icinga-blue; border: 1px solid @icinga-blue; } .icinga-controls input[type="checkbox"]:focus + .toggle-switch .toggle-slider { box-shadow: 0 0 0 2px @body-bg-color, 0 0 0 4px fade(@icinga-blue, 40); } .icinga-controls input[type="checkbox"]:checked + .toggle-switch .toggle-slider:before { border: 1px solid @icinga-blue; left: 100%; margin-left: -4/3em; } // Disabled inputs .icinga-controls .toggle-switch.disabled { cursor: default; & > .toggle-slider { background-color: @gray-light; border-color: @gray-light; &:before { background-color: @gray-lighter; border-color: @gray-light; } } } form.icinga-form .control-group.disabled .control-label-group { color: @disabled-gray; } .icinga-controls { input[disabled], select[disabled] { background: @gray-lighter; border-color: transparent; } } // Errors and additional information form.icinga-form { .form-notifications, .form-description { border-radius: .25em; display: flex; list-style: none; align-items: center; margin: 0 0 1em 0; padding: .25em .5em; ul { list-style: none; margin: 0; padding: 0 .5em; } li { list-style: none; } & .form-notification-icon, & .form-description-icon { font-size: 2em; margin-left: .25em; opacity: .4; align-self: flex-start; } } .form-notifications { &.info { background-color: fade(@color-ok, 20%); } &.error { background-color: fade(@color-critical, 30%); } &.warning { background-color: fade(@color-warning, 40%); } } .form-description { background-color: fade(@gray, 5%); } .errors { list-style: none; display: block; width: 100%; margin: 0 0 0 15em; padding: 0; & > li { margin: 0.5em; color: #f56; } } } form.icinga-form .form-info { color: @text-color-light; font-size: @font-size-small; list-style: none; padding-left: 0; } // Placeholder styles .icinga-controls { input::placeholder { color: @disabled-gray; font-style: italic; opacity: 1; } input:-ms-input-placeholder { color: @disabled-gray; font-style: italic; opacity: 1; } } // Specific form styles .search.inline { display: inline-block; } .sort-control > * { display: inline-block; } /* Flyover form styles */ .flyover-content form:not(.inline):not([role="search"]) { width: auto; } .flyover-content .control-label-group { text-align: left; }