544 lines
9.6 KiB
Plaintext
544 lines
9.6 KiB
Plaintext
/*! 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;
|
|
}
|
|
|
|
.control-group > :not(.control-label-group) {
|
|
margin-right: 1em;
|
|
}
|
|
|
|
.form-controls {
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
&.inline {
|
|
width: auto;
|
|
|
|
.control-group {
|
|
margin: 0;
|
|
align-items: center;
|
|
|
|
> :not(.control-label-group) {
|
|
margin-right: .5em;
|
|
}
|
|
|
|
&:last-child {
|
|
margin-right: -.5em;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
form.inline {
|
|
display: inline-block;
|
|
|
|
fieldset {
|
|
display: inline-block;
|
|
vertical-align: top;
|
|
border: none;
|
|
}
|
|
}
|
|
|
|
// 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;
|
|
}
|
|
|
|
.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;
|
|
}
|
|
|
|
form.icinga-form.inline .control-label-group {
|
|
width: auto;
|
|
line-height: 0.857em;
|
|
}
|
|
|
|
.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 {
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
form.icinga-form .control-group .control-info {
|
|
margin-left: -.5em;
|
|
}
|
|
form.icinga-form .control-group .toggle-switch ~ .control-info {
|
|
margin-left: 0;
|
|
}
|
|
|
|
// 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="radio"]),
|
|
.toggle-switch,
|
|
button,
|
|
select,
|
|
textarea {
|
|
border: none;
|
|
.rounded-corners(.25em);
|
|
.appearance(none);
|
|
}
|
|
}
|
|
|
|
.icinga-controls {
|
|
input:not([type="checkbox"]),
|
|
.toggle-switch,
|
|
select,
|
|
textarea,
|
|
button,
|
|
.toggle-switch {
|
|
font-size: inherit;
|
|
padding: @vertical-padding;
|
|
}
|
|
|
|
input[type="radio"] {
|
|
margin-right: .25em;
|
|
}
|
|
}
|
|
|
|
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 {
|
|
button:not([type]),
|
|
button[type="submit"],
|
|
input[type="submit"],
|
|
input[type="submit"].btn-confirm {
|
|
.button();
|
|
}
|
|
|
|
input[type="submit"].btn-remove {
|
|
.button(~"var(--body-bg-color, @{body-bg-color})", @color-critical, darken(@color-critical, 10%));
|
|
}
|
|
|
|
input[type="submit"].btn-cancel {
|
|
.button(~"var(--body-bg-color, @{body-bg-color})", @gray, @black);
|
|
}
|
|
|
|
button.noscript-apply {
|
|
color: @gray;
|
|
background-color: @gray-lightest;
|
|
border-color: @gray;
|
|
border-width: 1px;
|
|
}
|
|
}
|
|
|
|
form.inline {
|
|
:not([type="hidden"]) {
|
|
& ~ button:not([type]),
|
|
& ~ button[type="submit"],
|
|
& ~ input[type="submit"],
|
|
& ~ input[type="submit"].btn-confirm {
|
|
margin-left: @horizontal-padding;
|
|
}
|
|
}
|
|
|
|
button.noscript-apply {
|
|
margin-left: .5em;
|
|
padding: .1em;
|
|
}
|
|
}
|
|
|
|
// 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);
|
|
box-shadow: 0 0 0 2px var(--body-bg-color, @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;
|
|
}
|
|
|
|
/* Flyover form styles */
|
|
|
|
.flyover-content form:not(.inline):not([role="search"]) {
|
|
width: auto;
|
|
}
|
|
|
|
.flyover-content .control-label-group {
|
|
text-align: left;
|
|
}
|
|
|
|
.theme-mode-input {
|
|
display: none;
|
|
|
|
&:checked + img {
|
|
border-color: @icinga-blue;
|
|
border-radius: .25em;
|
|
}
|
|
|
|
& + img {
|
|
margin: 0 auto;
|
|
border: .25em solid transparent;
|
|
display: block;
|
|
width: 6em;
|
|
overflow: hidden;
|
|
box-shadow: 0 0 .25em 0 rgba(0,0,0,.4);
|
|
}
|
|
|
|
&[disabled] ~ * {
|
|
opacity: .25;
|
|
}
|
|
|
|
& ~ span {
|
|
display: block;
|
|
text-align: center;
|
|
}
|
|
}
|