Kimchi-devel
Threads by month
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- 3775 discussions
[RFC] [Wok] Issue #139: Do not generate logrotate config file on the fly
by Ramon Medeiros 26 Oct '16
by Ramon Medeiros 26 Oct '16
26 Oct '16
Propose:
Do not regenerate logrotate conf at startup of wok.
Questions:
1) The wok conf will be generated at make ? And then copied at make rpm?
2) The [logging] configuration at wok.conf will be removed? letting to
the user to change parameters?
3) This is the template for logrotate file
LOGROTATE_TEMPLATE = """
${log_dir}/*log {
daily
nomail
maxsize ${log_size}
rotate 10
nomissingok
compress
}
"""
which vales for log_dir and log_size we will use?
--
Ramon Nunes Medeiros
Kimchi Developer
Linux Technology Center Brazil
IBM Systems & Technology Group
Phone : +55 19 2132 7878
ramonn(a)br.ibm.com
2
1
26 Oct '16
From: Daniel Henrique Barboza <danielhb(a)linux.vnet.ibm.com>
This patch is applicable in the master branch of WoK.
Signed-off-by: Daniel Henrique Barboza <danielhb(a)linux.vnet.ibm.com>
---
ui/css/bootstrap.custom.css | 649 ++++++++++++----------------------------
ui/css/datatables.bootstrap.css | 10 +-
ui/css/settings.css | 12 +-
ui/css/wok.css | 83 ++---
4 files changed, 220 insertions(+), 534 deletions(-)
diff --git a/ui/css/bootstrap.custom.css b/ui/css/bootstrap.custom.css
index d4894f5..1b615a0 100644
--- a/ui/css/bootstrap.custom.css
+++ b/ui/css/bootstrap.custom.css
@@ -1,3 +1,4 @@
+@charset "UTF-8";
/*
* Project Wok
*
@@ -166,7 +167,8 @@ select {
}
button,
-html input[type="button"], input[type="reset"],
+html input[type="button"],
+input[type="reset"],
input[type="submit"] {
-webkit-appearance: button;
cursor: pointer;
@@ -349,8 +351,7 @@ a {
text-decoration: none;
}
-a:hover,
-a:focus {
+a:hover, a:focus {
color: #141314;
text-decoration: underline;
}
@@ -415,8 +416,7 @@ hr {
border: 0;
}
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
+.sr-only-focusable:active, .sr-only-focusable:focus {
position: static;
width: auto;
height: auto;
@@ -597,7 +597,7 @@ a.text-primary:focus {
a.text-success:hover,
a.text-success:focus {
- color: #525252;
+ color: #535353;
}
.text-info {
@@ -606,7 +606,7 @@ a.text-success:focus {
a.text-info:hover,
a.text-info:focus {
- color: #525252;
+ color: #535353;
}
.text-warning {
@@ -615,7 +615,7 @@ a.text-info:focus {
a.text-warning:hover,
a.text-warning:focus {
- color: #525252;
+ color: #535353;
}
.text-danger {
@@ -624,7 +624,7 @@ a.text-warning:focus {
a.text-danger:hover,
a.text-danger:focus {
- color: #525252;
+ color: #535353;
}
.bg-primary {
@@ -730,8 +730,7 @@ dd {
margin-left: 0;
}
-.dl-horizontal dd:before,
-.dl-horizontal dd:after {
+.dl-horizontal dd:before, .dl-horizontal dd:after {
content: " ";
display: table;
}
@@ -892,8 +891,7 @@ pre code {
padding-right: 0;
}
-.container:before,
-.container:after {
+.container:before, .container:after {
content: " ";
display: table;
}
@@ -929,8 +927,7 @@ pre code {
padding-right: 0;
}
-.container-fluid:before,
-.container-fluid:after {
+.container-fluid:before, .container-fluid:after {
content: " ";
display: table;
}
@@ -944,8 +941,7 @@ pre code {
margin-right: 0;
}
-.row:before,
-.row:after {
+.row:before, .row:after {
content: " ";
display: table;
}
@@ -2031,8 +2027,7 @@ output {
color: #999;
}
-.form-control[disabled],
-.form-control[readonly],
+.form-control[disabled], .form-control[readonly],
fieldset[disabled] .form-control {
background-color: #eee;
opacity: 1;
@@ -2058,8 +2053,7 @@ input[type="search"] {
input[type="month"].form-control {
line-height: 34px;
}
- input[type="date"].input-sm,
- .input-group-sm > input[type="date"].form-control,
+ input[type="date"].input-sm, .input-group-sm > input[type="date"].form-control,
.input-group-sm > input[type="date"].input-group-addon,
.input-group-sm > .input-group-btn > input[type="date"].btn,
.input-group-sm input[type="date"],
@@ -2067,21 +2061,23 @@ input[type="search"] {
.input-group-sm > input[type="time"].form-control,
.input-group-sm > input[type="time"].input-group-addon,
.input-group-sm > .input-group-btn > input[type="time"].btn,
- .input-group-sm input[type="time"],
+ .input-group-sm
+ input[type="time"],
input[type="datetime-local"].input-sm,
.input-group-sm > input[type="datetime-local"].form-control,
.input-group-sm > input[type="datetime-local"].input-group-addon,
.input-group-sm > .input-group-btn > input[type="datetime-local"].btn,
- .input-group-sm input[type="datetime-local"],
+ .input-group-sm
+ input[type="datetime-local"],
input[type="month"].input-sm,
.input-group-sm > input[type="month"].form-control,
.input-group-sm > input[type="month"].input-group-addon,
.input-group-sm > .input-group-btn > input[type="month"].btn,
- .input-group-sm input[type="month"] {
+ .input-group-sm
+ input[type="month"] {
line-height: 30px;
}
- input[type="date"].input-lg,
- .input-group-lg > input[type="date"].form-control,
+ input[type="date"].input-lg, .input-group-lg > input[type="date"].form-control,
.input-group-lg > input[type="date"].input-group-addon,
.input-group-lg > .input-group-btn > input[type="date"].btn,
.input-group-lg input[type="date"],
@@ -2089,17 +2085,20 @@ input[type="search"] {
.input-group-lg > input[type="time"].form-control,
.input-group-lg > input[type="time"].input-group-addon,
.input-group-lg > .input-group-btn > input[type="time"].btn,
- .input-group-lg input[type="time"],
+ .input-group-lg
+ input[type="time"],
input[type="datetime-local"].input-lg,
.input-group-lg > input[type="datetime-local"].form-control,
.input-group-lg > input[type="datetime-local"].input-group-addon,
.input-group-lg > .input-group-btn > input[type="datetime-local"].btn,
- .input-group-lg input[type="datetime-local"],
+ .input-group-lg
+ input[type="datetime-local"],
input[type="month"].input-lg,
.input-group-lg > input[type="month"].form-control,
.input-group-lg > input[type="month"].input-group-addon,
.input-group-lg > .input-group-btn > input[type="month"].btn,
- .input-group-lg input[type="month"] {
+ .input-group-lg
+ input[type="month"] {
line-height: 46px;
}
}
@@ -2156,26 +2155,28 @@ input[type="search"] {
margin-left: 10px;
}
-input[type="radio"][disabled],
-input[type="radio"].disabled,
+input[type="radio"][disabled], input[type="radio"].disabled,
fieldset[disabled] input[type="radio"],
input[type="checkbox"][disabled],
input[type="checkbox"].disabled,
-fieldset[disabled] input[type="checkbox"] {
+fieldset[disabled]
+input[type="checkbox"] {
cursor: not-allowed;
}
.radio-inline.disabled,
fieldset[disabled] .radio-inline,
.checkbox-inline.disabled,
-fieldset[disabled] .checkbox-inline {
+fieldset[disabled]
+.checkbox-inline {
cursor: not-allowed;
}
.radio.disabled label,
fieldset[disabled] .radio label,
.checkbox.disabled label,
-fieldset[disabled] .checkbox label {
+fieldset[disabled]
+.checkbox label {
cursor: not-allowed;
}
@@ -2186,11 +2187,9 @@ fieldset[disabled] .checkbox label {
min-height: 34px;
}
-.form-control-static.input-lg,
-.input-group-lg > .form-control-static.form-control,
+.form-control-static.input-lg, .input-group-lg > .form-control-static.form-control,
.input-group-lg > .form-control-static.input-group-addon,
-.input-group-lg > .input-group-btn > .form-control-static.btn,
-.form-control-static.input-sm, .input-group-sm > .form-control-static.form-control,
+.input-group-lg > .input-group-btn > .form-control-static.btn, .form-control-static.input-sm, .input-group-sm > .form-control-static.form-control,
.input-group-sm > .form-control-static.input-group-addon,
.input-group-sm > .input-group-btn > .form-control-static.btn {
padding-left: 0;
@@ -2214,11 +2213,11 @@ select.input-sm, .input-group-sm > select.form-control,
line-height: 30px;
}
-textarea.input-sm,
-.input-group-sm > textarea.form-control,
+textarea.input-sm, .input-group-sm > textarea.form-control,
.input-group-sm > textarea.input-group-addon,
.input-group-sm > .input-group-btn > textarea.btn,
-select[multiple].input-sm, .input-group-sm > select[multiple].form-control,
+select[multiple].input-sm,
+.input-group-sm > select[multiple].form-control,
.input-group-sm > select[multiple].input-group-addon,
.input-group-sm > .input-group-btn > select[multiple].btn {
height: auto;
@@ -2267,11 +2266,11 @@ select.input-lg, .input-group-lg > select.form-control,
line-height: 46px;
}
-textarea.input-lg,
-.input-group-lg > textarea.form-control,
+textarea.input-lg, .input-group-lg > textarea.form-control,
.input-group-lg > textarea.input-group-addon,
.input-group-lg > .input-group-btn > textarea.btn,
-select[multiple].input-lg, .input-group-lg > select[multiple].form-control,
+select[multiple].input-lg,
+.input-group-lg > select[multiple].form-control,
.input-group-lg > select[multiple].input-group-addon,
.input-group-lg > .input-group-btn > select[multiple].btn {
height: auto;
@@ -2324,8 +2323,7 @@ select[multiple].input-lg, .input-group-lg > select[multiple].form-control,
pointer-events: none;
}
-.input-lg + .form-control-feedback,
-.input-group-lg > .form-control + .form-control-feedback,
+.input-lg + .form-control-feedback, .input-group-lg > .form-control + .form-control-feedback,
.input-group-lg > .input-group-addon + .form-control-feedback,
.input-group-lg > .input-group-btn > .btn + .form-control-feedback,
.input-group-lg + .form-control-feedback,
@@ -2335,8 +2333,7 @@ select[multiple].input-lg, .input-group-lg > select[multiple].form-control,
line-height: 46px;
}
-.input-sm + .form-control-feedback,
-.input-group-sm > .form-control + .form-control-feedback,
+.input-sm + .form-control-feedback, .input-group-sm > .form-control + .form-control-feedback,
.input-group-sm > .input-group-addon + .form-control-feedback,
.input-group-sm > .input-group-btn > .btn + .form-control-feedback,
.input-group-sm + .form-control-feedback,
@@ -2366,7 +2363,7 @@ select[multiple].input-lg, .input-group-lg > select[multiple].form-control,
}
.has-success .form-control:focus {
- border-color: #525252;
+ border-color: #535353;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #9f9f9f;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #9f9f9f;
}
@@ -2401,7 +2398,7 @@ select[multiple].input-lg, .input-group-lg > select[multiple].form-control,
}
.has-warning .form-control:focus {
- border-color: #525252;
+ border-color: #535353;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #9f9f9f;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #9f9f9f;
}
@@ -2436,7 +2433,7 @@ select[multiple].input-lg, .input-group-lg > select[multiple].form-control,
}
.has-error .form-control:focus {
- border-color: #525252;
+ border-color: #535353;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #9f9f9f;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #9f9f9f;
}
@@ -2536,8 +2533,7 @@ select[multiple].input-lg, .input-group-lg > select[multiple].form-control,
margin-right: 0;
}
-.form-horizontal .form-group:before,
-.form-horizontal .form-group:after {
+.form-horizontal .form-group:before, .form-horizontal .form-group:after {
content: " ";
display: table;
}
@@ -2593,34 +2589,25 @@ select[multiple].input-lg, .input-group-lg > select[multiple].form-control,
user-select: none;
}
-.btn:focus,
-.btn.focus,
-.btn:active:focus,
-.btn:active.focus,
-.btn.active:focus,
-.btn.active.focus {
+.btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
-.btn:hover,
-.btn:focus,
-.btn.focus {
+.btn:hover, .btn:focus, .btn.focus {
color: #444;
text-decoration: none;
}
-.btn:active,
-.btn.active {
+.btn:active, .btn.active {
outline: 0;
background-image: none;
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
-.btn.disabled,
-.btn[disabled],
+.btn.disabled, .btn[disabled],
fieldset[disabled] .btn {
cursor: not-allowed;
opacity: 0.65;
@@ -2640,8 +2627,7 @@ fieldset[disabled] a.btn {
border-color: #ccc;
}
-.btn-default:focus,
-.btn-default.focus {
+.btn-default:focus, .btn-default.focus {
color: #444;
background-color: #e6e6e6;
border-color: #8c8c8c;
@@ -2653,20 +2639,14 @@ fieldset[disabled] a.btn {
border-color: #adadad;
}
-.btn-default:active,
-.btn-default.active,
+.btn-default:active, .btn-default.active,
.open > .btn-default.dropdown-toggle {
color: #444;
background-color: #e6e6e6;
border-color: #adadad;
}
-.btn-default:active:hover,
-.btn-default:active:focus,
-.btn-default:active.focus,
-.btn-default.active:hover,
-.btn-default.active:focus,
-.btn-default.active.focus,
+.btn-default:active:hover, .btn-default:active:focus, .btn-default:active.focus, .btn-default.active:hover, .btn-default.active:focus, .btn-default.active.focus,
.open > .btn-default.dropdown-toggle:hover,
.open > .btn-default.dropdown-toggle:focus,
.open > .btn-default.dropdown-toggle.focus {
@@ -2675,24 +2655,12 @@ fieldset[disabled] a.btn {
border-color: #8c8c8c;
}
-.btn-default:active,
-.btn-default.active,
+.btn-default:active, .btn-default.active,
.open > .btn-default.dropdown-toggle {
background-image: none;
}
-.btn-default.disabled,
-.btn-default.disabled:hover,
-.btn-default.disabled:focus,
-.btn-default.disabled.focus,
-.btn-default.disabled:active,
-.btn-default.disabled.active,
-.btn-default[disabled],
-.btn-default[disabled]:hover,
-.btn-default[disabled]:focus,
-.btn-default[disabled].focus,
-.btn-default[disabled]:active,
-.btn-default[disabled].active,
+.btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled.focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled].focus, .btn-default[disabled]:active, .btn-default[disabled].active,
fieldset[disabled] .btn-default,
fieldset[disabled] .btn-default:hover,
fieldset[disabled] .btn-default:focus,
@@ -2714,8 +2682,7 @@ fieldset[disabled] .btn-default.active {
border-color: #3a393b;
}
-.btn-primary:focus,
-.btn-primary.focus {
+.btn-primary:focus, .btn-primary.focus {
color: #fff;
background-color: #212021;
border-color: black;
@@ -2727,20 +2694,14 @@ fieldset[disabled] .btn-default.active {
border-color: #1b1b1c;
}
-.btn-primary:active,
-.btn-primary.active,
+.btn-primary:active, .btn-primary.active,
.open > .btn-primary.dropdown-toggle {
color: #fff;
background-color: #212021;
border-color: #1b1b1c;
}
-.btn-primary:active:hover,
-.btn-primary:active:focus,
-.btn-primary:active.focus,
-.btn-primary.active:hover,
-.btn-primary.active:focus,
-.btn-primary.active.focus,
+.btn-primary:active:hover, .btn-primary:active:focus, .btn-primary:active.focus, .btn-primary.active:hover, .btn-primary.active:focus, .btn-primary.active.focus,
.open > .btn-primary.dropdown-toggle:hover,
.open > .btn-primary.dropdown-toggle:focus,
.open > .btn-primary.dropdown-toggle.focus {
@@ -2749,24 +2710,12 @@ fieldset[disabled] .btn-default.active {
border-color: black;
}
-.btn-primary:active,
-.btn-primary.active,
+.btn-primary:active, .btn-primary.active,
.open > .btn-primary.dropdown-toggle {
background-image: none;
}
-.btn-primary.disabled,
-.btn-primary.disabled:hover,
-.btn-primary.disabled:focus,
-.btn-primary.disabled.focus,
-.btn-primary.disabled:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled],
-.btn-primary[disabled]:hover,
-.btn-primary[disabled]:focus,
-.btn-primary[disabled].focus,
-.btn-primary[disabled]:active,
-.btn-primary[disabled].active,
+.btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled.focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled].focus, .btn-primary[disabled]:active, .btn-primary[disabled].active,
fieldset[disabled] .btn-primary,
fieldset[disabled] .btn-primary:hover,
fieldset[disabled] .btn-primary:focus,
@@ -2788,8 +2737,7 @@ fieldset[disabled] .btn-primary.active {
border-color: #5cb85c;
}
-.btn-success:focus,
-.btn-success.focus {
+.btn-success:focus, .btn-success.focus {
color: #fff;
background-color: #449d44;
border-color: #2d672d;
@@ -2801,20 +2749,14 @@ fieldset[disabled] .btn-primary.active {
border-color: #419641;
}
-.btn-success:active,
-.btn-success.active,
+.btn-success:active, .btn-success.active,
.open > .btn-success.dropdown-toggle {
color: #fff;
background-color: #449d44;
border-color: #419641;
}
-.btn-success:active:hover,
-.btn-success:active:focus,
-.btn-success:active.focus,
-.btn-success.active:hover,
-.btn-success.active:focus,
-.btn-success.active.focus,
+.btn-success:active:hover, .btn-success:active:focus, .btn-success:active.focus, .btn-success.active:hover, .btn-success.active:focus, .btn-success.active.focus,
.open > .btn-success.dropdown-toggle:hover,
.open > .btn-success.dropdown-toggle:focus,
.open > .btn-success.dropdown-toggle.focus {
@@ -2823,24 +2765,12 @@ fieldset[disabled] .btn-primary.active {
border-color: #2d672d;
}
-.btn-success:active,
-.btn-success.active,
+.btn-success:active, .btn-success.active,
.open > .btn-success.dropdown-toggle {
background-image: none;
}
-.btn-success.disabled,
-.btn-success.disabled:hover,
-.btn-success.disabled:focus,
-.btn-success.disabled.focus,
-.btn-success.disabled:active,
-.btn-success.disabled.active,
-.btn-success[disabled],
-.btn-success[disabled]:hover,
-.btn-success[disabled]:focus,
-.btn-success[disabled].focus,
-.btn-success[disabled]:active,
-.btn-success[disabled].active,
+.btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled.focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled].focus, .btn-success[disabled]:active, .btn-success[disabled].active,
fieldset[disabled] .btn-success,
fieldset[disabled] .btn-success:hover,
fieldset[disabled] .btn-success:focus,
@@ -2862,8 +2792,7 @@ fieldset[disabled] .btn-success.active {
border-color: #5bc0de;
}
-.btn-info:focus,
-.btn-info.focus {
+.btn-info:focus, .btn-info.focus {
color: #fff;
background-color: #31b0d5;
border-color: #1f7e9a;
@@ -2875,20 +2804,14 @@ fieldset[disabled] .btn-success.active {
border-color: #2aabd2;
}
-.btn-info:active,
-.btn-info.active,
+.btn-info:active, .btn-info.active,
.open > .btn-info.dropdown-toggle {
color: #fff;
background-color: #31b0d5;
border-color: #2aabd2;
}
-.btn-info:active:hover,
-.btn-info:active:focus,
-.btn-info:active.focus,
-.btn-info.active:hover,
-.btn-info.active:focus,
-.btn-info.active.focus,
+.btn-info:active:hover, .btn-info:active:focus, .btn-info:active.focus, .btn-info.active:hover, .btn-info.active:focus, .btn-info.active.focus,
.open > .btn-info.dropdown-toggle:hover,
.open > .btn-info.dropdown-toggle:focus,
.open > .btn-info.dropdown-toggle.focus {
@@ -2897,24 +2820,12 @@ fieldset[disabled] .btn-success.active {
border-color: #1f7e9a;
}
-.btn-info:active,
-.btn-info.active,
+.btn-info:active, .btn-info.active,
.open > .btn-info.dropdown-toggle {
background-image: none;
}
-.btn-info.disabled,
-.btn-info.disabled:hover,
-.btn-info.disabled:focus,
-.btn-info.disabled.focus,
-.btn-info.disabled:active,
-.btn-info.disabled.active,
-.btn-info[disabled],
-.btn-info[disabled]:hover,
-.btn-info[disabled]:focus,
-.btn-info[disabled].focus,
-.btn-info[disabled]:active,
-.btn-info[disabled].active,
+.btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled.focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled].focus, .btn-info[disabled]:active, .btn-info[disabled].active,
fieldset[disabled] .btn-info,
fieldset[disabled] .btn-info:hover,
fieldset[disabled] .btn-info:focus,
@@ -2936,8 +2847,7 @@ fieldset[disabled] .btn-info.active {
border-color: #f0ad4e;
}
-.btn-warning:focus,
-.btn-warning.focus {
+.btn-warning:focus, .btn-warning.focus {
color: #fff;
background-color: #ec971f;
border-color: #b06d0f;
@@ -2949,20 +2859,14 @@ fieldset[disabled] .btn-info.active {
border-color: #eb9316;
}
-.btn-warning:active,
-.btn-warning.active,
+.btn-warning:active, .btn-warning.active,
.open > .btn-warning.dropdown-toggle {
color: #fff;
background-color: #ec971f;
border-color: #eb9316;
}
-.btn-warning:active:hover,
-.btn-warning:active:focus,
-.btn-warning:active.focus,
-.btn-warning.active:hover,
-.btn-warning.active:focus,
-.btn-warning.active.focus,
+.btn-warning:active:hover, .btn-warning:active:focus, .btn-warning:active.focus, .btn-warning.active:hover, .btn-warning.active:focus, .btn-warning.active.focus,
.open > .btn-warning.dropdown-toggle:hover,
.open > .btn-warning.dropdown-toggle:focus,
.open > .btn-warning.dropdown-toggle.focus {
@@ -2971,24 +2875,12 @@ fieldset[disabled] .btn-info.active {
border-color: #b06d0f;
}
-.btn-warning:active,
-.btn-warning.active,
+.btn-warning:active, .btn-warning.active,
.open > .btn-warning.dropdown-toggle {
background-image: none;
}
-.btn-warning.disabled,
-.btn-warning.disabled:hover,
-.btn-warning.disabled:focus,
-.btn-warning.disabled.focus,
-.btn-warning.disabled:active,
-.btn-warning.disabled.active,
-.btn-warning[disabled],
-.btn-warning[disabled]:hover,
-.btn-warning[disabled]:focus,
-.btn-warning[disabled].focus,
-.btn-warning[disabled]:active,
-.btn-warning[disabled].active,
+.btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled.focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled].focus, .btn-warning[disabled]:active, .btn-warning[disabled].active,
fieldset[disabled] .btn-warning,
fieldset[disabled] .btn-warning:hover,
fieldset[disabled] .btn-warning:focus,
@@ -3010,8 +2902,7 @@ fieldset[disabled] .btn-warning.active {
border-color: #d9534f;
}
-.btn-danger:focus,
-.btn-danger.focus {
+.btn-danger:focus, .btn-danger.focus {
color: #fff;
background-color: #c9302c;
border-color: #8b211e;
@@ -3023,20 +2914,14 @@ fieldset[disabled] .btn-warning.active {
border-color: #c12e2a;
}
-.btn-danger:active,
-.btn-danger.active,
+.btn-danger:active, .btn-danger.active,
.open > .btn-danger.dropdown-toggle {
color: #fff;
background-color: #c9302c;
border-color: #c12e2a;
}
-.btn-danger:active:hover,
-.btn-danger:active:focus,
-.btn-danger:active.focus,
-.btn-danger.active:hover,
-.btn-danger.active:focus,
-.btn-danger.active.focus,
+.btn-danger:active:hover, .btn-danger:active:focus, .btn-danger:active.focus, .btn-danger.active:hover, .btn-danger.active:focus, .btn-danger.active.focus,
.open > .btn-danger.dropdown-toggle:hover,
.open > .btn-danger.dropdown-toggle:focus,
.open > .btn-danger.dropdown-toggle.focus {
@@ -3045,24 +2930,12 @@ fieldset[disabled] .btn-warning.active {
border-color: #8b211e;
}
-.btn-danger:active,
-.btn-danger.active,
+.btn-danger:active, .btn-danger.active,
.open > .btn-danger.dropdown-toggle {
background-image: none;
}
-.btn-danger.disabled,
-.btn-danger.disabled:hover,
-.btn-danger.disabled:focus,
-.btn-danger.disabled.focus,
-.btn-danger.disabled:active,
-.btn-danger.disabled.active,
-.btn-danger[disabled],
-.btn-danger[disabled]:hover,
-.btn-danger[disabled]:focus,
-.btn-danger[disabled].focus,
-.btn-danger[disabled]:active,
-.btn-danger[disabled].active,
+.btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled.focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled].focus, .btn-danger[disabled]:active, .btn-danger[disabled].active,
fieldset[disabled] .btn-danger,
fieldset[disabled] .btn-danger:hover,
fieldset[disabled] .btn-danger:focus,
@@ -3084,32 +2957,24 @@ fieldset[disabled] .btn-danger.active {
border-radius: 0;
}
-.btn-link,
-.btn-link:active,
-.btn-link.active,
-.btn-link[disabled],
+.btn-link, .btn-link:active, .btn-link.active, .btn-link[disabled],
fieldset[disabled] .btn-link {
background-color: transparent;
-webkit-box-shadow: none;
box-shadow: none;
}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
+.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {
border-color: transparent;
}
-.btn-link:hover,
-.btn-link:focus {
+.btn-link:hover, .btn-link:focus {
color: #141314;
text-decoration: underline;
background-color: transparent;
}
-.btn-link[disabled]:hover,
-.btn-link[disabled]:focus,
+.btn-link[disabled]:hover, .btn-link[disabled]:focus,
fieldset[disabled] .btn-link:hover,
fieldset[disabled] .btn-link:focus {
color: #999;
@@ -3256,30 +3121,24 @@ tbody.collapse.in {
white-space: nowrap;
}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
+.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
text-decoration: none;
color: #151515;
background-color: #f5f5f5;
}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
+.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {
color: #fff;
text-decoration: none;
outline: 0;
background-color: #3a393b;
}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
+.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
color: #999;
}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
+.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
text-decoration: none;
background-color: transparent;
background-image: none;
@@ -3367,10 +3226,7 @@ tbody.collapse.in {
float: left;
}
-.btn-group > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group > .btn:active,
-.btn-group > .btn.active,
+.btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,
.btn-group-vertical > .btn:hover,
.btn-group-vertical > .btn:focus,
.btn-group-vertical > .btn:active,
@@ -3389,8 +3245,7 @@ tbody.collapse.in {
margin-left: -5px;
}
-.btn-toolbar:before,
-.btn-toolbar:after {
+.btn-toolbar:before, .btn-toolbar:after {
content: " ";
display: table;
}
@@ -3496,8 +3351,7 @@ tbody.collapse.in {
max-width: 100%;
}
-.btn-group-vertical > .btn-group:before,
-.btn-group-vertical > .btn-group:after {
+.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {
content: " ";
display: table;
}
@@ -3631,14 +3485,16 @@ tbody.collapse.in {
border-radius: 3px;
}
-.input-group-addon.input-sm, .input-group-sm > .input-group-addon,
+.input-group-addon.input-sm,
+.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .input-group-addon.btn {
padding: 5px 10px;
font-size: 12px;
border-radius: 3px;
}
-.input-group-addon.input-lg, .input-group-lg > .input-group-addon,
+.input-group-addon.input-lg,
+.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .input-group-addon.btn {
padding: 10px 16px;
font-size: 18px;
@@ -3694,9 +3550,7 @@ tbody.collapse.in {
margin-left: -1px;
}
-.input-group-btn > .btn:hover,
-.input-group-btn > .btn:focus,
-.input-group-btn > .btn:active {
+.input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active {
z-index: 2;
}
@@ -3717,8 +3571,7 @@ tbody.collapse.in {
list-style: none;
}
-.nav:before,
-.nav:after {
+.nav:before, .nav:after {
content: " ";
display: table;
}
@@ -3738,8 +3591,7 @@ tbody.collapse.in {
padding: 10px 15px;
}
-.nav > li > a:hover,
-.nav > li > a:focus {
+.nav > li > a:hover, .nav > li > a:focus {
text-decoration: none;
background-color: #fff;
}
@@ -3748,17 +3600,14 @@ tbody.collapse.in {
color: #999;
}
-.nav > li.disabled > a:hover,
-.nav > li.disabled > a:focus {
+.nav > li.disabled > a:hover, .nav > li.disabled > a:focus {
color: #999;
text-decoration: none;
background-color: transparent;
cursor: not-allowed;
}
-.nav .open > a,
-.nav .open > a:hover,
-.nav .open > a:focus {
+.nav .open > a, .nav .open > a:hover, .nav .open > a:focus {
background-color: #fff;
border-color: #3a393b;
}
@@ -3794,9 +3643,7 @@ tbody.collapse.in {
border-color: #fff #fff #ddd;
}
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
+.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
color: #444;
background-color: #fff;
border: 1px solid #ddd;
@@ -3816,9 +3663,7 @@ tbody.collapse.in {
margin-left: 2px;
}
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
+.nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus {
color: #fff;
background-color: #3a393b;
}
@@ -3869,9 +3714,9 @@ tbody.collapse.in {
border-radius: 3px;
}
-.nav-tabs-justified > .active > a,
-.nav-tabs.nav-justified > .active > a, .nav-tabs-justified > .active > a:hover,
-.nav-tabs.nav-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {
+.nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,
+.nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,
+.nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {
border: 1px solid #ddd;
}
@@ -3880,9 +3725,9 @@ tbody.collapse.in {
border-bottom: 1px solid #ddd;
border-radius: 3px 3px 0 0;
}
- .nav-tabs-justified > .active > a,
- .nav-tabs.nav-justified > .active > a, .nav-tabs-justified > .active > a:hover,
- .nav-tabs.nav-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {
+ .nav-tabs-justified > .active > a, .nav-tabs.nav-justified > .active > a,
+ .nav-tabs-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:hover,
+ .nav-tabs-justified > .active > a:focus, .nav-tabs.nav-justified > .active > a:focus {
border-bottom-color: #fff;
}
}
@@ -3908,8 +3753,7 @@ tbody.collapse.in {
border: 0;
}
-.navbar:before,
-.navbar:after {
+.navbar:before, .navbar:after {
content: " ";
display: table;
}
@@ -3924,8 +3768,7 @@ tbody.collapse.in {
}
}
-.navbar-header:before,
-.navbar-header:after {
+.navbar-header:before, .navbar-header:after {
content: " ";
display: table;
}
@@ -3949,8 +3792,7 @@ tbody.collapse.in {
-webkit-overflow-scrolling: touch;
}
-.navbar-collapse:before,
-.navbar-collapse:after {
+.navbar-collapse:before, .navbar-collapse:after {
content: " ";
display: table;
}
@@ -4069,8 +3911,7 @@ tbody.collapse.in {
user-select: none;
}
-.navbar-brand:hover,
-.navbar-brand:focus {
+.navbar-brand:hover, .navbar-brand:focus {
text-decoration: none;
}
@@ -4142,8 +3983,7 @@ tbody.collapse.in {
.navbar-nav .open .dropdown-menu > li > a {
line-height: 20px;
}
- .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-nav .open .dropdown-menu > li > a:focus {
+ .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus {
background-image: none;
}
}
@@ -4330,8 +4170,7 @@ tbody.collapse.in {
white-space: nowrap;
}
-.navbar-nav > li > .dropdown-menu > li > a:hover,
-.navbar-nav > li > .dropdown-menu > li > a:focus,
+.navbar-nav > li > .dropdown-menu > li > a:hover, .navbar-nav > li > .dropdown-menu > li > a:focus,
.navbar-nav > li > .dropdown-menu > li > span:hover,
.navbar-nav > li > .dropdown-menu > li > span:focus {
text-decoration: none;
@@ -4425,8 +4264,7 @@ tbody.collapse.in {
color: #fff;
}
-.navbar-default .navbar-brand:hover,
-.navbar-default .navbar-brand:focus {
+.navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {
color: #e6e6e6;
background-color: transparent;
}
@@ -4438,8 +4276,7 @@ tbody.collapse.in {
padding-right: 0;
}
-.navbar-default .container:before,
-.navbar-default .container:after {
+.navbar-default .container:before, .navbar-default .container:after {
content: " ";
display: table;
}
@@ -4500,108 +4337,79 @@ tbody.collapse.in {
}
}
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
+.navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {
color: #fff;
background-color: transparent;
}
-.navbar-default .navbar-nav > .active > a,
-.navbar-default .navbar-nav > .active > a:hover,
-.navbar-default .navbar-nav > .active > a:focus {
+.navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {
color: #fff;
background-color: transparent;
}
-.navbar-default .navbar-nav > .disabled > a,
-.navbar-default .navbar-nav > .disabled > a:hover,
-.navbar-default .navbar-nav > .disabled > a:focus {
+.navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus {
cursor: default;
color: #999;
background-color: transparent;
}
-.navbar-default .navbar-nav > .active > a.hostSelected,
-.navbar-default .navbar-nav > .active > a.hostSelected:hover,
-.navbar-default .navbar-nav > .active > a.hostSelected:focus {
+.navbar-default .navbar-nav > .active > a.hostSelected, .navbar-default .navbar-nav > .active > a.hostSelected:hover, .navbar-default .navbar-nav > .active > a.hostSelected:focus {
height: 41px;
background-color: #008abf !important;
}
-.navbar-default .navbar-nav > .active > a.host,
-.navbar-default .navbar-nav > .active > a.host:hover,
-.navbar-default .navbar-nav > .active > a.host:focus {
+.navbar-default .navbar-nav > .active > a.host, .navbar-default .navbar-nav > .active > a.host:hover, .navbar-default .navbar-nav > .active > a.host:focus {
height: 41px;
background-color: #008abf !important;
}
-.navbar-default .navbar-nav > .active > a.guests,
-.navbar-default .navbar-nav > .active > a.guests:hover,
-.navbar-default .navbar-nav > .active > a.guests:focus {
+.navbar-default .navbar-nav > .active > a.guests, .navbar-default .navbar-nav > .active > a.guests:hover, .navbar-default .navbar-nav > .active > a.guests:focus {
height: 41px;
background-color: #8cc63f !important;
}
-.navbar-default .navbar-nav > .active > a.templates,
-.navbar-default .navbar-nav > .active > a.templates:hover,
-.navbar-default .navbar-nav > .active > a.templates:focus {
+.navbar-default .navbar-nav > .active > a.templates, .navbar-default .navbar-nav > .active > a.templates:hover, .navbar-default .navbar-nav > .active > a.templates:focus {
height: 41px;
background-color: #00a6a0 !important;
}
-.navbar-default .navbar-nav > .active > a.storage,
-.navbar-default .navbar-nav > .active > a.storage:hover,
-.navbar-default .navbar-nav > .active > a.storage:focus {
+.navbar-default .navbar-nav > .active > a.storage, .navbar-default .navbar-nav > .active > a.storage:hover, .navbar-default .navbar-nav > .active > a.storage:focus {
height: 41px;
background-color: #feb813 !important;
color: #000 !important;
}
-.navbar-default .navbar-nav > .active > a.network,
-.navbar-default .navbar-nav > .active > a.network:hover,
-.navbar-default .navbar-nav > .active > a.network:focus {
+.navbar-default .navbar-nav > .active > a.network, .navbar-default .navbar-nav > .active > a.network:hover, .navbar-default .navbar-nav > .active > a.network:focus {
height: 41px;
background-color: #7f1c7d !important;
}
-.navbar-default .navbar-nav > .active > a.wok,
-.navbar-default .navbar-nav > .active > a.wok:hover,
-.navbar-default .navbar-nav > .active > a.wok:focus {
+.navbar-default .navbar-nav > .active > a.wok, .navbar-default .navbar-nav > .active > a.wok:hover, .navbar-default .navbar-nav > .active > a.wok:focus {
height: 41px;
background-color: #d9182d !important;
}
-.navbar-default .navbar-nav > .active > a.virtualizationTab,
-.navbar-default .navbar-nav > .active > a.virtualizationTab:hover,
-.navbar-default .navbar-nav > .active > a.virtualizationTab:focus {
+.navbar-default .navbar-nav > .active > a.virtualizationTab, .navbar-default .navbar-nav > .active > a.virtualizationTab:hover, .navbar-default .navbar-nav > .active > a.virtualizationTab:focus {
height: 41px;
background-color: #59930c !important;
}
-.navbar-default .navbar-nav > .active > a.hostTab,
-.navbar-default .navbar-nav > .active > a.hostTab:hover,
-.navbar-default .navbar-nav > .active > a.hostTab:focus {
+.navbar-default .navbar-nav > .active > a.hostTab, .navbar-default .navbar-nav > .active > a.hostTab:hover, .navbar-default .navbar-nav > .active > a.hostTab:focus {
height: 41px;
background-color: #00578c !important;
}
-.navbar-default .navbar-nav > .active > a.virtualizationSelected,
-.navbar-default .navbar-nav > .active > a.virtualizationSelected:hover,
-.navbar-default .navbar-nav > .active > a.virtualizationSelected:focus {
+.navbar-default .navbar-nav > .active > a.virtualizationSelected, .navbar-default .navbar-nav > .active > a.virtualizationSelected:hover, .navbar-default .navbar-nav > .active > a.virtualizationSelected:focus {
height: 41px;
background-color: #8cc63f !important;
}
-.navbar-default .navbar-nav > .active > a.wokTab,
-.navbar-default .navbar-nav > .active > a.wokTab:hover,
-.navbar-default .navbar-nav > .active > a.wokTab:focus {
+.navbar-default .navbar-nav > .active > a.wokTab, .navbar-default .navbar-nav > .active > a.wokTab:hover, .navbar-default .navbar-nav > .active > a.wokTab:focus {
height: 41px;
background-color: #930c0c !important;
}
-.navbar-default .navbar-nav > .active > a.wokSelected,
-.navbar-default .navbar-nav > .active > a.wokSelected:hover,
-.navbar-default .navbar-nav > .active > a.wokSelected:focus {
+.navbar-default .navbar-nav > .active > a.wokSelected, .navbar-default .navbar-nav > .active > a.wokSelected:hover, .navbar-default .navbar-nav > .active > a.wokSelected:focus {
height: 41px;
background-color: #d9182d !important;
}
@@ -4650,8 +4458,7 @@ tbody.collapse.in {
border-color: #ddd;
}
-.navbar-default .navbar-toggle:hover,
-.navbar-default .navbar-toggle:focus {
+.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {
background-color: #ddd;
}
@@ -4664,9 +4471,7 @@ tbody.collapse.in {
border-color: #3a393b;
}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
+.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {
background-color: transparent;
color: #fff;
}
@@ -4675,20 +4480,15 @@ tbody.collapse.in {
.navbar-default .navbar-nav .open .dropdown-menu > li > a {
color: #fff;
}
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
color: #fff;
background-color: transparent;
}
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff;
background-color: transparent;
}
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
color: #999;
background-color: transparent;
}
@@ -4706,13 +4506,11 @@ tbody.collapse.in {
color: #fff;
}
-.navbar-default .btn-link:hover,
-.navbar-default .btn-link:focus {
+.navbar-default .btn-link:hover, .navbar-default .btn-link:focus {
color: #fff;
}
-.navbar-default .btn-link[disabled]:hover,
-.navbar-default .btn-link[disabled]:focus,
+.navbar-default .btn-link[disabled]:hover, .navbar-default .btn-link[disabled]:focus,
fieldset[disabled] .navbar-default .btn-link:hover,
fieldset[disabled] .navbar-default .btn-link:focus {
color: #999;
@@ -4727,8 +4525,7 @@ fieldset[disabled] .navbar-default .btn-link:focus {
color: #fff;
}
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
+.navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {
color: #fff;
background-color: transparent;
}
@@ -4741,22 +4538,17 @@ fieldset[disabled] .navbar-default .btn-link:focus {
color: #fff;
}
-.navbar-inverse .navbar-nav > li > a:hover,
-.navbar-inverse .navbar-nav > li > a:focus {
+.navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus {
color: #fff;
background-color: transparent;
}
-.navbar-inverse .navbar-nav > .active > a,
-.navbar-inverse .navbar-nav > .active > a:hover,
-.navbar-inverse .navbar-nav > .active > a:focus {
+.navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {
color: #fff;
background-color: transparent;
}
-.navbar-inverse .navbar-nav > .disabled > a,
-.navbar-inverse .navbar-nav > .disabled > a:hover,
-.navbar-inverse .navbar-nav > .disabled > a:focus {
+.navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus {
color: #999;
background-color: transparent;
}
@@ -4765,8 +4557,7 @@ fieldset[disabled] .navbar-default .btn-link:focus {
border-color: #333;
}
-.navbar-inverse .navbar-toggle:hover,
-.navbar-inverse .navbar-toggle:focus {
+.navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {
background-color: transparent;
}
@@ -4779,9 +4570,7 @@ fieldset[disabled] .navbar-default .btn-link:focus {
border-color: #101010;
}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .open > a:hover,
-.navbar-inverse .navbar-nav > .open > a:focus {
+.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {
background-color: transparent;
color: #fff;
}
@@ -4796,20 +4585,15 @@ fieldset[disabled] .navbar-default .btn-link:focus {
.navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
color: #fff;
}
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
color: #fff;
background-color: transparent;
}
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff;
background-color: transparent;
}
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
color: #999;
background-color: transparent;
}
@@ -4827,13 +4611,11 @@ fieldset[disabled] .navbar-default .btn-link:focus {
color: #fff;
}
-.navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link:focus {
+.navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus {
color: #fff;
}
-.navbar-inverse .btn-link[disabled]:hover,
-.navbar-inverse .btn-link[disabled]:focus,
+.navbar-inverse .btn-link[disabled]:hover, .navbar-inverse .btn-link[disabled]:focus,
fieldset[disabled] .navbar-inverse .btn-link:hover,
fieldset[disabled] .navbar-inverse .btn-link:focus {
color: #999;
@@ -4852,7 +4634,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
}
.breadcrumb > li + li:before {
- content: "/\\00a0";
+ content: "/ ";
padding: 0 5px;
color: #ccc;
}
@@ -4898,8 +4680,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
border-top-right-radius: 3px;
}
-.pagination > li > a:hover,
-.pagination > li > a:focus,
+.pagination > li > a:hover, .pagination > li > a:focus,
.pagination > li > span:hover,
.pagination > li > span:focus {
z-index: 3;
@@ -4908,9 +4689,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
border-color: #ddd;
}
-.pagination > .active > a,
-.pagination > .active > a:hover,
-.pagination > .active > a:focus,
+.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus,
.pagination > .active > span,
.pagination > .active > span:hover,
.pagination > .active > span:focus {
@@ -4978,8 +4757,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
text-align: center;
}
-.pager:before,
-.pager:after {
+.pager:before, .pager:after {
content: " ";
display: table;
}
@@ -5028,7 +4806,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
.label {
display: inline;
- padding: 0.2em 0.6em 0.3em;
+ padding: .2em .6em .3em;
font-size: 75%;
font-weight: bold;
line-height: 1;
@@ -5048,8 +4826,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
top: -1px;
}
-a.label:hover,
-a.label:focus {
+a.label:hover, a.label:focus {
color: #fff;
text-decoration: none;
cursor: pointer;
@@ -5059,8 +4836,7 @@ a.label:focus {
background-color: #999;
}
-.label-default[href]:hover,
-.label-default[href]:focus {
+.label-default[href]:hover, .label-default[href]:focus {
background-color: gray;
}
@@ -5068,8 +4844,7 @@ a.label:focus {
background-color: #3a393b;
}
-.label-primary[href]:hover,
-.label-primary[href]:focus {
+.label-primary[href]:hover, .label-primary[href]:focus {
background-color: #212021;
}
@@ -5077,8 +4852,7 @@ a.label:focus {
background-color: #5cb85c;
}
-.label-success[href]:hover,
-.label-success[href]:focus {
+.label-success[href]:hover, .label-success[href]:focus {
background-color: #449d44;
}
@@ -5086,8 +4860,7 @@ a.label:focus {
background-color: #5bc0de;
}
-.label-info[href]:hover,
-.label-info[href]:focus {
+.label-info[href]:hover, .label-info[href]:focus {
background-color: #31b0d5;
}
@@ -5095,8 +4868,7 @@ a.label:focus {
background-color: #f0ad4e;
}
-.label-warning[href]:hover,
-.label-warning[href]:focus {
+.label-warning[href]:hover, .label-warning[href]:focus {
background-color: #ec971f;
}
@@ -5104,8 +4876,7 @@ a.label:focus {
background-color: #d9534f;
}
-.label-danger[href]:hover,
-.label-danger[href]:focus {
+.label-danger[href]:hover, .label-danger[href]:focus {
background-color: #c9302c;
}
@@ -5133,8 +4904,7 @@ a.label:focus {
top: -1px;
}
-.btn-xs .badge,
-.btn-group-xs > .btn .badge,
+.btn-xs .badge, .btn-group-xs > .btn .badge,
.btn-group-xs > .btn .badge {
top: 0;
padding: 1px 5px;
@@ -5158,8 +4928,7 @@ a.label:focus {
margin-left: 3px;
}
-a.badge:hover,
-a.badge:focus {
+a.badge:hover, a.badge:focus {
color: #fff;
text-decoration: none;
cursor: pointer;
@@ -5279,11 +5048,13 @@ a.thumbnail.active {
margin-top: 5px;
}
-.alert-dismissable, .alert-dismissible {
+.alert-dismissable,
+.alert-dismissible {
padding-right: 8px 15px20;
}
-.alert-dismissable .close, .alert-dismissible .close {
+.alert-dismissable .close,
+.alert-dismissible .close {
opacity: 1;
position: absolute;
top: 6px;
@@ -5302,7 +5073,7 @@ a.thumbnail.active {
}
.alert-success .alert-link {
- color: #525252;
+ color: #535353;
}
.alert-info {
@@ -5316,7 +5087,7 @@ a.thumbnail.active {
}
.alert-info .alert-link {
- color: #525252;
+ color: #535353;
}
.alert-warning {
@@ -5330,7 +5101,7 @@ a.thumbnail.active {
}
.alert-warning .alert-link {
- color: #525252;
+ color: #535353;
}
.alert-danger {
@@ -5344,7 +5115,7 @@ a.thumbnail.active {
}
.alert-danger .alert-link {
- color: #525252;
+ color: #535353;
}
@-webkit-keyframes progress-bar-stripes {
@@ -5542,8 +5313,7 @@ button.list-group-item .list-group-item-heading {
color: #333;
}
-a.list-group-item:hover,
-a.list-group-item:focus,
+a.list-group-item:hover, a.list-group-item:focus,
button.list-group-item:hover,
button.list-group-item:focus {
text-decoration: none;
@@ -5556,29 +5326,21 @@ button.list-group-item {
text-align: left;
}
-.list-group-item.disabled,
-.list-group-item.disabled:hover,
-.list-group-item.disabled:focus {
+.list-group-item.disabled, .list-group-item.disabled:hover, .list-group-item.disabled:focus {
background-color: #fff;
color: #999;
cursor: not-allowed;
}
-.list-group-item.disabled .list-group-item-heading,
-.list-group-item.disabled:hover .list-group-item-heading,
-.list-group-item.disabled:focus .list-group-item-heading {
+.list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading {
color: inherit;
}
-.list-group-item.disabled .list-group-item-text,
-.list-group-item.disabled:hover .list-group-item-text,
-.list-group-item.disabled:focus .list-group-item-text {
+.list-group-item.disabled .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text {
color: #999;
}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
+.list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus {
z-index: 2;
color: #fff;
background-color: #3a393b;
@@ -5587,19 +5349,15 @@ button.list-group-item {
.list-group-item.active .list-group-item-heading,
.list-group-item.active .list-group-item-heading > small,
-.list-group-item.active .list-group-item-heading > .small,
-.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading,
.list-group-item.active:hover .list-group-item-heading > small,
-.list-group-item.active:hover .list-group-item-heading > .small,
-.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading,
.list-group-item.active:focus .list-group-item-heading > small,
.list-group-item.active:focus .list-group-item-heading > .small {
color: inherit;
}
-.list-group-item.active .list-group-item-text,
-.list-group-item.active:hover .list-group-item-text,
-.list-group-item.active:focus .list-group-item-text {
+.list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text {
color: #a09ea2;
}
@@ -5618,17 +5376,14 @@ button.list-group-item-success .list-group-item-heading {
color: inherit;
}
-a.list-group-item-success:hover,
-a.list-group-item-success:focus,
+a.list-group-item-success:hover, a.list-group-item-success:focus,
button.list-group-item-success:hover,
button.list-group-item-success:focus {
color: #6c6c6c;
background-color: #cedeba;
}
-a.list-group-item-success.active,
-a.list-group-item-success.active:hover,
-a.list-group-item-success.active:focus,
+a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus,
button.list-group-item-success.active,
button.list-group-item-success.active:hover,
button.list-group-item-success.active:focus {
@@ -5652,17 +5407,14 @@ button.list-group-item-info .list-group-item-heading {
color: inherit;
}
-a.list-group-item-info:hover,
-a.list-group-item-info:focus,
+a.list-group-item-info:hover, a.list-group-item-info:focus,
button.list-group-item-info:hover,
button.list-group-item-info:focus {
color: #6c6c6c;
background-color: #c4e3f3;
}
-a.list-group-item-info.active,
-a.list-group-item-info.active:hover,
-a.list-group-item-info.active:focus,
+a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus,
button.list-group-item-info.active,
button.list-group-item-info.active:hover,
button.list-group-item-info.active:focus {
@@ -5686,17 +5438,14 @@ button.list-group-item-warning .list-group-item-heading {
color: inherit;
}
-a.list-group-item-warning:hover,
-a.list-group-item-warning:focus,
+a.list-group-item-warning:hover, a.list-group-item-warning:focus,
button.list-group-item-warning:hover,
button.list-group-item-warning:focus {
color: #6c6c6c;
background-color: #ecd9ad;
}
-a.list-group-item-warning.active,
-a.list-group-item-warning.active:hover,
-a.list-group-item-warning.active:focus,
+a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus,
button.list-group-item-warning.active,
button.list-group-item-warning.active:hover,
button.list-group-item-warning.active:focus {
@@ -5720,17 +5469,14 @@ button.list-group-item-danger .list-group-item-heading {
color: inherit;
}
-a.list-group-item-danger:hover,
-a.list-group-item-danger:focus,
+a.list-group-item-danger:hover, a.list-group-item-danger:focus,
button.list-group-item-danger:hover,
button.list-group-item-danger:focus {
color: #6c6c6c;
background-color: #e3b0b5;
}
-a.list-group-item-danger.active,
-a.list-group-item-danger.active:hover,
-a.list-group-item-danger.active:focus,
+a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus,
button.list-group-item-danger.active,
button.list-group-item-danger.active:hover,
button.list-group-item-danger.active:focus {
@@ -5762,8 +5508,7 @@ button.list-group-item-danger.active:focus {
padding: 11px 0;
}
-.panel-body:before,
-.panel-body:after {
+.panel-body:before, .panel-body:after {
content: " ";
display: table;
}
@@ -6238,8 +5983,7 @@ button.list-group-item-danger.active:focus {
filter: alpha(opacity=20);
}
-.close:hover,
-.close:focus {
+.close:hover, .close:focus {
color: #555;
text-decoration: none;
cursor: pointer;
@@ -6367,8 +6111,7 @@ button.close {
background-color: #8cc63f;
}
-.modal-footer:before,
-.modal-footer:after {
+.modal-footer:before, .modal-footer:after {
content: " ";
display: table;
}
@@ -6684,8 +6427,7 @@ button.close {
padding: 9px 14px;
}
-.popover > .arrow,
-.popover > .arrow:after {
+.popover > .arrow, .popover > .arrow:after {
position: absolute;
display: block;
width: 0;
@@ -6771,8 +6513,7 @@ button.close {
bottom: -10px;
}
-.clearfix:before,
-.clearfix:after {
+.clearfix:before, .clearfix:after {
content: " ";
display: table;
}
diff --git a/ui/css/datatables.bootstrap.css b/ui/css/datatables.bootstrap.css
index 87eec2a..6d4e19d 100644
--- a/ui/css/datatables.bootstrap.css
+++ b/ui/css/datatables.bootstrap.css
@@ -111,9 +111,7 @@ div.dataTables_wrapper div.dataTables_processing {
padding: 1em 0;
}
-table.dataTable thead > tr > th.sorting_asc,
-table.dataTable thead > tr > th.sorting_desc,
-table.dataTable thead > tr > th.sorting,
+table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
table.dataTable thead > tr > td.sorting_asc,
table.dataTable thead > tr > td.sorting_desc,
table.dataTable thead > tr > td.sorting {
@@ -134,8 +132,7 @@ table.dataTable thead .sorting_desc_disabled {
position: relative;
}
-table.dataTable thead .sorting:before,
-table.dataTable thead .sorting:after,
+table.dataTable thead .sorting:before, table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:before,
@@ -246,8 +243,7 @@ table.table-bordered.dataTable td {
border-left-width: 0;
}
-table.table-bordered.dataTable th:last-child,
-table.table-bordered.dataTable th:last-child,
+table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,
table.table-bordered.dataTable td:last-child,
table.table-bordered.dataTable td:last-child {
border-right-width: 0;
diff --git a/ui/css/settings.css b/ui/css/settings.css
index 1fe0a04..8c0b8cb 100644
--- a/ui/css/settings.css
+++ b/ui/css/settings.css
@@ -121,8 +121,7 @@ div#user-log-actions {
background-color: #d9182d;
}
-.label-primary.label-wok[href]:hover,
-.label-primary.label-wok[href]:focus {
+.label-primary.label-wok[href]:hover, .label-primary.label-wok[href]:focus {
background-color: #ab1323;
}
@@ -130,8 +129,7 @@ div#user-log-actions {
background-color: #8cc63f;
}
-.label-primary.label-kimchi[href]:hover,
-.label-primary.label-kimchi[href]:focus {
+.label-primary.label-kimchi[href]:hover, .label-primary.label-kimchi[href]:focus {
background-color: #71a230;
}
@@ -139,8 +137,7 @@ div#user-log-actions {
background-color: #00578c;
}
-.label-primary.label-ginger[href]:hover,
-.label-primary.label-ginger[href]:focus {
+.label-primary.label-ginger[href]:hover, .label-primary.label-ginger[href]:focus {
background-color: #003759;
}
@@ -148,8 +145,7 @@ div#user-log-actions {
background-color: #008abf;
}
-.label-primary.label-gingerbase[href]:hover,
-.label-primary.label-gingerbase[href]:focus {
+.label-primary.label-gingerbase[href]:hover, .label-primary.label-gingerbase[href]:focus {
background-color: #00658c;
}
diff --git a/ui/css/wok.css b/ui/css/wok.css
index 95d903b..ca98e38 100644
--- a/ui/css/wok.css
+++ b/ui/css/wok.css
@@ -137,9 +137,7 @@ html.in-progress .disabled {
position: relative;
}
-.pagination > .active > a,
-.pagination > .active > a:hover,
-.pagination > .active > a:focus,
+.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus,
.pagination > .active > span,
.pagination > .active > span:hover,
.pagination > .active > span:focus {
@@ -430,8 +428,7 @@ html.in-progress .disabled {
border-color: #008abf;
}
-.btn-login:focus,
-.btn-login.focus {
+.btn-login:focus, .btn-login.focus {
color: #fff;
background-color: #00658c;
border-color: #002e40;
@@ -443,20 +440,14 @@ html.in-progress .disabled {
border-color: #005e82;
}
-.btn-login:active,
-.btn-login.active,
+.btn-login:active, .btn-login.active,
.open > .btn-login.dropdown-toggle {
color: #fff;
background-color: #00658c;
border-color: #005e82;
}
-.btn-login:active:hover,
-.btn-login:active:focus,
-.btn-login:active.focus,
-.btn-login.active:hover,
-.btn-login.active:focus,
-.btn-login.active.focus,
+.btn-login:active:hover, .btn-login:active:focus, .btn-login:active.focus, .btn-login.active:hover, .btn-login.active:focus, .btn-login.active.focus,
.open > .btn-login.dropdown-toggle:hover,
.open > .btn-login.dropdown-toggle:focus,
.open > .btn-login.dropdown-toggle.focus {
@@ -465,24 +456,12 @@ html.in-progress .disabled {
border-color: #002e40;
}
-.btn-login:active,
-.btn-login.active,
+.btn-login:active, .btn-login.active,
.open > .btn-login.dropdown-toggle {
background-image: none;
}
-.btn-login.disabled,
-.btn-login.disabled:hover,
-.btn-login.disabled:focus,
-.btn-login.disabled.focus,
-.btn-login.disabled:active,
-.btn-login.disabled.active,
-.btn-login[disabled],
-.btn-login[disabled]:hover,
-.btn-login[disabled]:focus,
-.btn-login[disabled].focus,
-.btn-login[disabled]:active,
-.btn-login[disabled].active,
+.btn-login.disabled, .btn-login.disabled:hover, .btn-login.disabled:focus, .btn-login.disabled.focus, .btn-login.disabled:active, .btn-login.disabled.active, .btn-login[disabled], .btn-login[disabled]:hover, .btn-login[disabled]:focus, .btn-login[disabled].focus, .btn-login[disabled]:active, .btn-login[disabled].active,
fieldset[disabled] .btn-login,
fieldset[disabled] .btn-login:hover,
fieldset[disabled] .btn-login:focus,
@@ -509,8 +488,7 @@ fieldset[disabled] .btn-login.active {
padding: 4px 12px;
}
-.btn-group > span > .btn:focus,
-.btn-group > span > .btn.focus {
+.btn-group > span > .btn:focus, .btn-group > span > .btn.focus {
color: #fff;
background-color: #343334;
border-color: #0d0d0d;
@@ -522,20 +500,14 @@ fieldset[disabled] .btn-login.active {
border-color: #2e2e2f;
}
-.btn-group > span > .btn:active,
-.btn-group > span > .btn.active,
+.btn-group > span > .btn:active, .btn-group > span > .btn.active,
.open > .btn-group > span > .btn.dropdown-toggle {
color: #fff;
background-color: #343334;
border-color: #2e2e2f;
}
-.btn-group > span > .btn:active:hover,
-.btn-group > span > .btn:active:focus,
-.btn-group > span > .btn:active.focus,
-.btn-group > span > .btn.active:hover,
-.btn-group > span > .btn.active:focus,
-.btn-group > span > .btn.active.focus,
+.btn-group > span > .btn:active:hover, .btn-group > span > .btn:active:focus, .btn-group > span > .btn:active.focus, .btn-group > span > .btn.active:hover, .btn-group > span > .btn.active:focus, .btn-group > span > .btn.active.focus,
.open > .btn-group > span > .btn.dropdown-toggle:hover,
.open > .btn-group > span > .btn.dropdown-toggle:focus,
.open > .btn-group > span > .btn.dropdown-toggle.focus {
@@ -544,24 +516,12 @@ fieldset[disabled] .btn-login.active {
border-color: #0d0d0d;
}
-.btn-group > span > .btn:active,
-.btn-group > span > .btn.active,
+.btn-group > span > .btn:active, .btn-group > span > .btn.active,
.open > .btn-group > span > .btn.dropdown-toggle {
background-image: none;
}
-.btn-group > span > .btn.disabled,
-.btn-group > span > .btn.disabled:hover,
-.btn-group > span > .btn.disabled:focus,
-.btn-group > span > .btn.disabled.focus,
-.btn-group > span > .btn.disabled:active,
-.btn-group > span > .btn.disabled.active,
-.btn-group > span > .btn[disabled],
-.btn-group > span > .btn[disabled]:hover,
-.btn-group > span > .btn[disabled]:focus,
-.btn-group > span > .btn[disabled].focus,
-.btn-group > span > .btn[disabled]:active,
-.btn-group > span > .btn[disabled].active,
+.btn-group > span > .btn.disabled, .btn-group > span > .btn.disabled:hover, .btn-group > span > .btn.disabled:focus, .btn-group > span > .btn.disabled.focus, .btn-group > span > .btn.disabled:active, .btn-group > span > .btn.disabled.active, .btn-group > span > .btn[disabled], .btn-group > span > .btn[disabled]:hover, .btn-group > span > .btn[disabled]:focus, .btn-group > span > .btn[disabled].focus, .btn-group > span > .btn[disabled]:active, .btn-group > span > .btn[disabled].active,
fieldset[disabled] .btn-group > span > .btn,
fieldset[disabled] .btn-group > span > .btn:hover,
fieldset[disabled] .btn-group > span > .btn:focus,
@@ -668,15 +628,14 @@ fieldset[disabled] .btn-group > span > .btn.active {
text-decoration: inherit;
width: 1.2em;
height: 1.2em;
- margin: 0.5em 0.85em;
+ margin: .5em .85em;
text-align: center;
font-variant: normal;
text-transform: none;
line-height: 2em;
}
-.menu-flat.dropup,
-.menu-flat.dropdown {
+.menu-flat.dropup, .menu-flat.dropdown {
position: relative;
}
@@ -757,16 +716,13 @@ fieldset[disabled] .btn-group > span > .btn.active {
display: inline-block;
}
-.menu-flat .dropdown-menu > li > a:hover,
-.menu-flat .dropdown-menu > li > a:focus {
+.menu-flat .dropdown-menu > li > a:hover, .menu-flat .dropdown-menu > li > a:focus {
text-decoration: none;
color: #fff;
background-color: #3a393b;
}
-.menu-flat .dropdown-menu > .active > a,
-.menu-flat .dropdown-menu > .active > a:hover,
-.menu-flat .dropdown-menu > .active > a:focus {
+.menu-flat .dropdown-menu > .active > a, .menu-flat .dropdown-menu > .active > a:hover, .menu-flat .dropdown-menu > .active > a:focus {
color: #fff;
text-decoration: none;
outline: 0;
@@ -783,14 +739,11 @@ fieldset[disabled] .btn-group > span > .btn.active {
background-color: #3a393b;
}
-.menu-flat .dropdown-menu > .disabled > a,
-.menu-flat .dropdown-menu > .disabled > a:hover,
-.menu-flat .dropdown-menu > .disabled > a:focus {
+.menu-flat .dropdown-menu > .disabled > a, .menu-flat .dropdown-menu > .disabled > a:hover, .menu-flat .dropdown-menu > .disabled > a:focus {
color: #999;
}
-.menu-flat .dropdown-menu > .disabled > a:hover,
-.menu-flat .dropdown-menu > .disabled > a:focus {
+.menu-flat .dropdown-menu > .disabled > a:hover, .menu-flat .dropdown-menu > .disabled > a:focus {
text-decoration: none;
background-color: transparent;
background-image: none;
@@ -1353,7 +1306,7 @@ input[type=checkbox].wok-checkbox + label:before {
input[type=checkbox].wok-checkbox:checked + label:before {
content: "\f14a";
letter-spacing: 8px;
- margin-right: 0.9px // Sub-pixel unit for Chrome and Firefox anti-alias;
+ margin-right: 0.9px;
}
input[type=radio].wok-radio + label:before {
--
2.7.4
2
1
25 Oct '16
From: Daniel Henrique Barboza <danielhb(a)linux.vnet.ibm.com>
This patch updates kimchi.css generated by latest UI
libs versions.
This patch is applicable in the stable-2.3.x branch.
Signed-off-by: Daniel Henrique Barboza <danielhb(a)linux.vnet.ibm.com>
---
ui/css/kimchi.css | 76 +++++++++++++++++++++++++++----------------------------
1 file changed, 38 insertions(+), 38 deletions(-)
diff --git a/ui/css/kimchi.css b/ui/css/kimchi.css
index 9a9ff25..0a0aada 100644
--- a/ui/css/kimchi.css
+++ b/ui/css/kimchi.css
@@ -231,37 +231,37 @@
#template-add-window.modal-content h3.iso-title.centos,
#guest-add-window.modal-content h3.iso-title.centos {
- background-image: url("/images/theme-default/icon-centos.png");
+ background-image: url("../images/theme-default/icon-centos.png");
}
#template-add-window.modal-content h3.iso-title.debian,
#guest-add-window.modal-content h3.iso-title.debian {
- background-image: url("/images/theme-default/icon-debian.png");
+ background-image: url("../images/theme-default/icon-debian.png");
}
#template-add-window.modal-content h3.iso-title.fedora,
#guest-add-window.modal-content h3.iso-title.fedora {
- background-image: url("/images/theme-default/icon-fedora.png");
+ background-image: url("../images/theme-default/icon-fedora.png");
}
#template-add-window.modal-content h3.iso-title.opensuse,
#guest-add-window.modal-content h3.iso-title.opensuse {
- background-image: url("/images/theme-default/icon-opensuse.png");
+ background-image: url("../images/theme-default/icon-opensuse.png");
}
#template-add-window.modal-content h3.iso-title.ubuntu,
#guest-add-window.modal-content h3.iso-title.ubuntu {
- background-image: url("/images/theme-default/icon-ubuntu.png");
+ background-image: url("../images/theme-default/icon-ubuntu.png");
}
#template-add-window.modal-content h3.iso-title.gentoo,
#guest-add-window.modal-content h3.iso-title.gentoo {
- background-image: url("/images/theme-default/icon-gentoo.png");
+ background-image: url("../images/theme-default/icon-gentoo.png");
}
#template-add-window.modal-content h3.iso-title.unknown,
#guest-add-window.modal-content h3.iso-title.unknown {
- background-image: url("/images/theme-default/icon-unknown.png");
+ background-image: url("../images/theme-default/icon-unknown.png");
}
/* Create Guest Modal */
@@ -1037,31 +1037,31 @@
}
#guest-content-container .distro-icon.icon-centos {
- background-image: url("/images/theme-default/icon-centos.png");
+ background-image: url("../images/theme-default/icon-centos.png");
}
#guest-content-container .distro-icon.icon-debian {
- background-image: url("/images/theme-default/icon-debian.png");
+ background-image: url("../images/theme-default/icon-debian.png");
}
#guest-content-container .distro-icon.icon-fedora {
- background-image: url("/images/theme-default/icon-fedora.png");
+ background-image: url("../images/theme-default/icon-fedora.png");
}
#guest-content-container .distro-icon.icon-opensuse {
- background-image: url("/images/theme-default/icon-opensuse.png");
+ background-image: url("../images/theme-default/icon-opensuse.png");
}
#guest-content-container .distro-icon.icon-ubuntu {
- background-image: url("/images/theme-default/icon-ubuntu.png");
+ background-image: url("../images/theme-default/icon-ubuntu.png");
}
#guest-content-container .distro-icon.icon-gentoo {
- background-image: url("/images/theme-default/icon-gentoo.png");
+ background-image: url("../images/theme-default/icon-gentoo.png");
}
#guest-content-container .distro-icon.icon-unknown {
- background-image: url("/images/theme-default/icon-unknown.png");
+ background-image: url("../images/theme-default/icon-unknown.png");
}
body.wok-gallery {
@@ -2021,31 +2021,31 @@ body.wok-gallery {
}
#templates-root-container .wok-vm-list .distro-icon.icon-centos {
- background-image: url("/images/theme-default/icon-centos.png");
+ background-image: url("../images/theme-default/icon-centos.png");
}
#templates-root-container .wok-vm-list .distro-icon.icon-debian {
- background-image: url("/images/theme-default/icon-debian.png");
+ background-image: url("../images/theme-default/icon-debian.png");
}
#templates-root-container .wok-vm-list .distro-icon.icon-fedora {
- background-image: url("/images/theme-default/icon-fedora.png");
+ background-image: url("../images/theme-default/icon-fedora.png");
}
#templates-root-container .wok-vm-list .distro-icon.icon-opensuse {
- background-image: url("/images/theme-default/icon-opensuse.png");
+ background-image: url("../images/theme-default/icon-opensuse.png");
}
#templates-root-container .wok-vm-list .distro-icon.icon-ubuntu {
- background-image: url("/images/theme-default/icon-ubuntu.png");
+ background-image: url("../images/theme-default/icon-ubuntu.png");
}
#templates-root-container .wok-vm-list .distro-icon.icon-gentoo {
- background-image: url("/images/theme-default/icon-gentoo.png");
+ background-image: url("../images/theme-default/icon-gentoo.png");
}
#templates-root-container .wok-vm-list .distro-icon.icon-unknown {
- background-image: url("/images/theme-default/icon-unknown.png");
+ background-image: url("../images/theme-default/icon-unknown.png");
}
#templates-root-container .wok-vm-gallery {
@@ -2152,31 +2152,31 @@ body.wok-gallery {
}
#templates-root-container .wok-vm-gallery .name-distro-icon.icon-centos {
- background-image: url("/images/theme-default/icon-centos.png");
+ background-image: url("../images/theme-default/icon-centos.png");
}
#templates-root-container .wok-vm-gallery .name-distro-icon.icon-debian {
- background-image: url("/images/theme-default/icon-debian.png");
+ background-image: url("../images/theme-default/icon-debian.png");
}
#templates-root-container .wok-vm-gallery .name-distro-icon.icon-fedora {
- background-image: url("/images/theme-default/icon-fedora.png");
+ background-image: url("../images/theme-default/icon-fedora.png");
}
#templates-root-container .wok-vm-gallery .name-distro-icon.icon-opensuse {
- background-image: url("/images/theme-default/icon-opensuse.png");
+ background-image: url("../images/theme-default/icon-opensuse.png");
}
#templates-root-container .wok-vm-gallery .name-distro-icon.icon-ubuntu {
- background-image: url("/images/theme-default/icon-ubuntu.png");
+ background-image: url("../images/theme-default/icon-ubuntu.png");
}
#templates-root-container .wok-vm-gallery .name-distro-icon.icon-gentoo {
- background-image: url("/images/theme-default/icon-gentoo.png");
+ background-image: url("../images/theme-default/icon-gentoo.png");
}
#templates-root-container .wok-vm-gallery .name-distro-icon.icon-unknown {
- background-image: url("/images/theme-default/icon-unknown.png");
+ background-image: url("../images/theme-default/icon-unknown.png");
}
#templates-root-container span.template-status {
@@ -2230,7 +2230,7 @@ body.wok-gallery {
}
#network-root-container .wok-nw-loading-icon {
- background: transparent url("/images/theme-default/spin5.svg") no-repeat 50% 50%;
+ background: transparent url("../images/theme-default/spin5.svg") no-repeat 50% 50%;
-webkit-animation: spin 3s infinite linear;
-o-animation: spin 3s infinite linear;
animation: spin 3s infinite linear;
@@ -2337,15 +2337,15 @@ body.wok-gallery {
}
#storage-root-container .wok-datagrid-body .inactive .usage-icon.icon-high {
- background-image: url("/images/theme-default/high_disabled.png") !important;
+ background-image: url("../images/theme-default/high_disabled.png") !important;
}
#storage-root-container .wok-datagrid-body .inactive .usage-icon.icon-med {
- background-image: url("/images/theme-default/med_disabled.png") !important;
+ background-image: url("../images/theme-default/med_disabled.png") !important;
}
#storage-root-container .wok-datagrid-body .inactive .usage-icon.icon-low {
- background-image: url("/images/theme-default/low_disabled.png") !important;
+ background-image: url("../images/theme-default/low_disabled.png") !important;
}
#storage-root-container .volumes {
@@ -2417,15 +2417,15 @@ body.wok-gallery {
}
#storage-root-container .volumes .volume-icon.icon-high {
- background-image: url("/images/theme-default/high.png");
+ background-image: url("../images/theme-default/high.png");
}
#storage-root-container .volumes .volume-icon.icon-med {
- background-image: url("/images/theme-default/med.png");
+ background-image: url("../images/theme-default/med.png");
}
#storage-root-container .volumes .volume-icon.icon-low {
- background-image: url("/images/theme-default/low.png");
+ background-image: url("../images/theme-default/low.png");
}
#storage-root-container .volumes .volume-progress {
@@ -2866,17 +2866,17 @@ body.wok-gallery {
#storage-root-container .wok-datagrid > .wok-datagrid-header > span.column-usage .usage-icon.icon-high,
#storage-root-container .wok-datagrid > .wok-datagrid-body > .wok-datagrid-row > span.column-usage .usage-icon.icon-high {
- background-image: url("/images/theme-default/high.png");
+ background-image: url("../images/theme-default/high.png");
}
#storage-root-container .wok-datagrid > .wok-datagrid-header > span.column-usage .usage-icon.icon-med,
#storage-root-container .wok-datagrid > .wok-datagrid-body > .wok-datagrid-row > span.column-usage .usage-icon.icon-med {
- background-image: url("/images/theme-default/med.png");
+ background-image: url("../images/theme-default/med.png");
}
#storage-root-container .wok-datagrid > .wok-datagrid-header > span.column-usage .usage-icon.icon-low,
#storage-root-container .wok-datagrid > .wok-datagrid-body > .wok-datagrid-row > span.column-usage .usage-icon.icon-low {
- background-image: url("/images/theme-default/low.png");
+ background-image: url("../images/theme-default/low.png");
}
#storage-root-container .wok-datagrid > .wok-datagrid-header > span.column-capacity,
--
2.7.4
1
0
[RFC] Issues #970: ISOs that do not have proper permission is still being allowed to be used when creating a template
by Ramon Medeiros 24 Oct '16
by Ramon Medeiros 24 Oct '16
24 Oct '16
Issue:
User is allowed to create templates without permission to ISO
Solutions propose:
1) Check permissions by os.access(). This function can verify read
(os.R_OK), write (os.W_OK) and execution (os.X_OK) access.
2) Iterate over all storagevolumes and use kimchi storagevolumes
management (each volumes has "has_permission" item)
Both of the solutions will raise an error if permissions are insufficient.
--
Ramon Nunes Medeiros
Kimchi Developer
Linux Technology Center Brazil
IBM Systems & Technology Group
Phone : +55 19 2132 7878
ramonn(a)br.ibm.com
2
2
[PATCH] [Kimchi] s390x specific changes to support storage path and storage pool disk.
by archus@linux.vnet.ibm.com 24 Oct '16
by archus@linux.vnet.ibm.com 24 Oct '16
24 Oct '16
From: Archana Singh <archus(a)linux.vnet.ibm.com>
1) Added s390x specific error message for storage pool and network.
2) As on s390x, default is storage path, but if pool explicitly specified in
template_s390x.conf it takes preference. So added code to ensure that
if storage pool explicitly specified in file conf then check for default
storage pool gets called.
3) Code changes in tmpl default creation which ensure that on s390x, default
disk is path but if conf file has explicitly pool specified then defult disk
is the sepecified pool. And also ensures that disk is either pool or path
and not both.
4) Code changes in vmtemplate, to ensure that on s390x either a path disk
or a pool disk can be added to template. And if disk to add does not have
both path nad pool then tmpl default storage is used.
5) Added template conf file specific to s390x.
Signed-off-by: Archana Singh <archus(a)linux.vnet.ibm.com>
---
IBM-license-blacklist | 1 +
model/networks.py | 7 +++++++
model/storagepools.py | 13 +++++++++++--
osinfo.py | 36 ++++++++++++++++++++++++++++++++--
template_s390x.conf | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++
vmtemplate.py | 33 +++++++++++++++++++++++---------
6 files changed, 130 insertions(+), 13 deletions(-)
create mode 100644 template_s390x.conf
diff --git a/IBM-license-blacklist b/IBM-license-blacklist
index 78fd2cb..a0d1407 100644
--- a/IBM-license-blacklist
+++ b/IBM-license-blacklist
@@ -27,6 +27,7 @@ po/Makevars
po/POTFILES.in
po/kimchi.pot
template.conf
+template_s390x.conf
ui/config/tab-ext.xml
ui/images/.*.svg
ui/pages/help/dita-help.xsl
diff --git a/model/networks.py b/model/networks.py
index be4eec2..57ff487 100644
--- a/model/networks.py
+++ b/model/networks.py
@@ -35,6 +35,7 @@ from wok.plugins.kimchi import network as knetwork
from wok.plugins.kimchi.config import kimchiPaths
from wok.plugins.kimchi.model.config import CapabilitiesModel
from wok.plugins.kimchi.osinfo import defaults as tmpl_defaults
+from wok.plugins.kimchi.utils import is_s390x
from wok.plugins.kimchi.xmlutils.interface import get_iface_xml
from wok.plugins.kimchi.xmlutils.network import create_linux_bridge_xml
from wok.plugins.kimchi.xmlutils.network import create_vlan_tagged_bridge_xml
@@ -64,6 +65,12 @@ class NetworksModel(object):
"active. Please, check the configuration in "
"%s/template.conf to ensure it lists only valid "
"networks." % (net_name, kimchiPaths.sysconf_dir))
+ if is_s390x():
+ error_msg = ("Network %s does not exist or is not "
+ "active. Please, check the "
+ "configuration in %s/template_s390x.conf "
+ "to ensure it lists only valid "
+ "networks." % (net_name, kimchiPaths.sysconf_dir))
try:
net = conn.networkLookupByName(net_name)
diff --git a/model/storagepools.py b/model/storagepools.py
index 5942b31..a8a2356 100644
--- a/model/storagepools.py
+++ b/model/storagepools.py
@@ -73,7 +73,9 @@ class StoragePoolsModel(object):
def _check_default_pools(self):
pools = {}
- if is_s390x():
+ # Don't create default pool if it's not
+ # explicitly specified in template_s390x.conf
+ if is_s390x() and 'pool' not in tmpl_defaults['disks'][0]:
return
default_pool = tmpl_defaults['disks'][0]['pool']['name']
@@ -91,7 +93,14 @@ class StoragePoolsModel(object):
error_msg = ("Storage pool %s does not exist or is not "
"active. Please, check the configuration in "
"%s/template.conf to ensure it lists only valid "
- "networks." % (pool_name, kimchiPaths.sysconf_dir))
+ "storage." % (pool_name, kimchiPaths.sysconf_dir))
+ if is_s390x:
+ error_msg = ("Network %s does not exist or is not "
+ "active. Please, check the "
+ "configuration in %s/template_s390x.conf "
+ "to ensure it lists only valid "
+ "storage." % (pool_name, kimchiPaths.sysconf_dir))
+
try:
pool = conn.storagePoolLookupByName(pool_name)
except libvirt.libvirtError, e:
diff --git a/osinfo.py b/osinfo.py
index c51d6e0..4f0e1fa 100644
--- a/osinfo.py
+++ b/osinfo.py
@@ -27,9 +27,9 @@ from configobj import ConfigObj
from distutils.version import LooseVersion
from wok.config import PluginPaths
+from wok.exception import InvalidParameter
from wok.plugins.kimchi.config import kimchiPaths
-
SUPPORTED_ARCHS = {'x86': ('i386', 'i686', 'x86_64'),
'power': ('ppc', 'ppc64'),
'ppc64le': ('ppc64le'),
@@ -129,7 +129,8 @@ def _get_default_template_mem():
def _get_tmpl_defaults():
"""
ConfigObj returns a dict like below when no changes were made in the
- template configuration file (template.conf)
+ template configuration file (template.conf and in case of s390x its
+ template_s390x.conf)
{'main': {}, 'memory': {}, 'storage': {'disk.0': {}}, 'processor': {},
'graphics': {}}
@@ -184,6 +185,37 @@ def _get_tmpl_defaults():
config_file = os.path.join(kimchiPaths.sysconf_dir, 'template.conf')
config = ConfigObj(config_file)
+ # File configuration takes preference.
+ # In s390x, file configuration can have storage pool or path.
+ # Default configuration for s390x is storage path.
+ # In case file conf has storage pool then storage pool takes preference.
+ # When conf file has explicitly storage pool: "defaults" should
+ # have storage pool and default configured path should be removed,
+ # as either storage can be path or pool, cannot be both.
+ # When conf file does not explicity storage pool or have explicitly
+ # storage path: "default" should have storage path only and cannot
+ # have default pool.
+ #
+ # Check file conf has storage configured.
+ if is_on_s390x and config.get('storage').get('disk.0'):
+ # remove storage from default_config as file configuration takes
+ # preference.
+ default_config.pop('storage')
+
+ # Get storage configuration present in conf file
+ config_pool = config.get('storage').get('disk.0').get('pool')
+ config_path = config.get('storage').get('disk.0').get('path')
+
+ # If storage configured in conf file then it should have either
+ # pool or path.
+ if not config_pool and not config_path:
+ raise InvalidParameter('KCHTMPL0040E')
+
+ # On s390x if config file has both path and pool uncommented
+ # then path should take preference.
+ if config_pool and config_path:
+ config.get('storage').get('disk.0').pop('pool')
+
# Merge default configuration with file configuration
default_config.merge(config)
diff --git a/template_s390x.conf b/template_s390x.conf
new file mode 100644
index 0000000..c4598f1
--- /dev/null
+++ b/template_s390x.conf
@@ -0,0 +1,53 @@
+#
+# Configuration file for Kimchi Templates
+#
+
+[main]
+# List of networks separated by comma
+# Represents the virtual network interfaces to be assigned to guest
+#networks = default,
+
+[memory]
+# Memory in MB
+# current = 1024
+
+# Maximum value of memory to be assigned to guest in MB
+# maxmemory = 1024
+
+[storage]
+
+# Specify multiple [[disk.X]] sub-sections to add multiples disks to guest
+# Each disk files will be created in respective storage pool set
+[[disk.0]]
+# Disk size in GB
+#size = 10
+
+# Disk format
+#format = qcow2
+
+# Storage pool used to handle the guest disk
+#pool = default
+
+[graphics]
+# Graphics type
+# Valid options: vnc | spice
+#type = vnc
+
+# The network which the vnc/spice server listens on
+#listen = 127.0.0.1
+
+[processor]
+# Number of vcpus
+# When specifying CPU topology, make sure maxvcpus value is equal to the
+# product of sockets, cores, and threads.
+#vcpus = 1
+#maxvcpus = 1
+
+# Number of sockets (not set by default)
+#sockets =
+
+# Number of cores per socket (not set by default)
+#cores =
+
+# Number of threads per core (not set by default)
+#threads =
diff --git a/vmtemplate.py b/vmtemplate.py
index c3390fe..b249873 100644
--- a/vmtemplate.py
+++ b/vmtemplate.py
@@ -106,14 +106,25 @@ class VMTemplate(object):
for index, disk in enumerate(disks):
disk_info = dict(default_disk)
- # on s390x/s390 either pool or path should be present in
- # default disk.
- if is_s390x() and 'pool' not in default_disk and \
- 'path' not in default_disk:
- raise InvalidParameter('KCHTMPL0040E')
- # On s390x/s390 pool is optional attribute for disk.
- pool = disk.get('pool', default_disk.get('pool'))
+ if is_s390x():
+ # Default disk should have either pool or path.
+ if 'pool' not in default_disk and 'path' not in default_disk:
+ raise InvalidParameter('KCHTMPL0040E')
+
+ # Each disk should have either pool or path.
+ # if not then use "default_disk" configuration.
+ pool = disk.get('pool')
+ path = disk.get('path')
+ if not path and not pool:
+ # If default disk is path then set disk with default path
+ if default_disk.get('path'):
+ path = default_disk.get('path')
+ # If default disk is pool then set disk with default pool
+ if default_disk.get('pool'):
+ pool = default_disk.get('pool')
+ else:
+ pool = disk.get('pool', default_disk.get('pool'))
if pool:
pool_type = self._get_storage_type(pool['name'])
@@ -148,8 +159,12 @@ class VMTemplate(object):
disk_info['index'] = disk_info.get('index', index)
self.info['disks'][index] = disk_info
elif is_s390x():
- # For now support 'path' only on s390x
- path = disk.get('path', default_disk.get('path'))
+ # This check is required where 'path' disk
+ # has to be added and hence default pool
+ # has to be removed during template update.
+ if 'pool' in disk_info:
+ del disk_info['pool']
+
disk_info.update(disk)
keys = sorted(disk_info.keys())
if ((keys != sorted(basic_path_disk)) and
--
2.7.4
4
3
21 Oct '16
The javascript was iterating a dict without any propose, and copying the
same objects inside of it. Just remove the iteration and adequate the
correct vars.
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
---
ui/js/src/kimchi.network_edit_main.js | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/ui/js/src/kimchi.network_edit_main.js b/ui/js/src/kimchi.network_edit_main.js
index 4dd830a..ab1e285 100644
--- a/ui/js/src/kimchi.network_edit_main.js
+++ b/ui/js/src/kimchi.network_edit_main.js
@@ -93,16 +93,10 @@ kimchi.setupNetworkFormEventForEdit = function(network) {
var loadIfaces = function(interfaceFilterArray){
var buildInterfaceOpts = function(result) {
- var currentIfaces = network['interfaces'];
- for (var i = 0; i < currentIfaces.length; i++) {
- kimchi.getInterface(currentIfaces[i], function(iface) {
- result.push(iface);
- } , null, true);
- }
kimchi.createInterfacesOpts(result, interfaceFilterArray);
- for (var i = 0; i < currentIfaces.length; i++) {
- $("#networkDestinationID option[value='" + currentIfaces[i] + "']").attr('selected','selected');
+ for (var i = 0; i < result.length; i++) {
+ $("#networkDestinationID option[value='" + result[i]["name"] + "']").attr('selected','selected');
}
$('#networkDestinationID').selectpicker('refresh');
};
--
2.7.4
3
8
[PATCH v2][Kimchi] Issue #651: Windows guests - default mouse type causing problems
by Ramon Medeiros 21 Oct '16
by Ramon Medeiros 21 Oct '16
21 Oct '16
Add <input type='tablet' bus='usb'/> for winxp guests.
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
---
Changes:
v2:
Last patch i added two dicts with same index. Now, add all changes to only one
index.
osinfo.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/osinfo.py b/osinfo.py
index 1527896..c51d6e0 100644
--- a/osinfo.py
+++ b/osinfo.py
@@ -85,7 +85,8 @@ template_specs = {'x86': {'old': dict(disk_bus='ide',
custom_specs = {'fedora': {'22': {'x86': dict(video_model='qxl')}},
- 'windows': {'xp': {'x86': dict(nic_model='pcnet')}}}
+ 'windows': {'xp': {'x86': dict(nic_model='pcnet',
+ tablet_bus="usb")}}}
modern_version_bases = {'x86': {'debian': '6.0', 'ubuntu': '7.10',
--
2.7.4
3
2
[PATCH V2] [Kimchi] PCI hotplug: Check USB controller, define in template, add test in Power
by Lucio Correia 21 Oct '16
by Lucio Correia 21 Oct '16
21 Oct '16
- Today it is not possible to hotplug a PCI in Power Systems without an
existing USB controller in the VM. This commit checks if there
is such controller in the VM, displaying an error message if not.
- When creating VMs using Kimchi in a Power System, the USB xhci
controller is defined by default to have PCI hotplug support.
- From now on all templates are created with xhci usb controller, so a
hotplug must be performed flawlessly. If anything wrong the test case
will fail.
Signed-off-by: Jose Ricardo Ziviani <joserz(a)linux.vnet.ibm.com>
Signed-off-by: Lucio Correia <luciojhc(a)linux.vnet.ibm.com>
---
i18n.py | 1 +
model/vmhostdevs.py | 35 +++++++++++++++++++++++++++++++++++
tests/test_model.py | 25 +++++++++++++++++++++++++
vmtemplate.py | 13 +++++++++++++
xmlutils/usb.py | 45 +++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 119 insertions(+)
create mode 100644 xmlutils/usb.py
Changes in V2:
* fixed import platform
* added xmlutils/usb.py for better code organization
diff --git a/i18n.py b/i18n.py
index 814a8d9..03929e5 100644
--- a/i18n.py
+++ b/i18n.py
@@ -152,6 +152,7 @@ messages = {
"KCHVMHDEV0005E": _('The device %(name)s is probably in use by the host. Unable to attach it to the guest.'),
"KCHVMHDEV0006E": _('Hot-(un)plug of device %(name)s is not supported.'),
"KCHVMHDEV0007E": _('Failed to attach %(device)s to %(vm)s'),
+ "KCHVMHDEV0008E": _('VM %(vmid)s does not have a USB controller to accept PCI hotplug.'),
"KCHVMIF0001E": _("Interface %(iface)s does not exist in virtual machine %(name)s"),
"KCHVMIF0002E": _("Network %(network)s specified for virtual machine %(name)s does not exist"),
diff --git a/model/vmhostdevs.py b/model/vmhostdevs.py
index 4039240..1f893f2 100644
--- a/model/vmhostdevs.py
+++ b/model/vmhostdevs.py
@@ -20,6 +20,7 @@
import glob
import libvirt
import os
+import platform
import threading
from lxml import etree, objectify
from lxml.builder import E, ElementMaker
@@ -42,6 +43,9 @@ from wok.plugins.kimchi.xmlutils.qemucmdline import QEMU_NAMESPACE
CMDLINE_FIELD_NAME = 'spapr-pci-host-bridge.mem_win_size'
+USB_MODELS_PCI_HOTPLUG = ["piix3-uhci", "piix4-uhci", "ehci", "ich9-ehci1",
+ "ich9-uhci1", "ich9-uhci2", "ich9-uhci3",
+ "vt82c686b-uhci", "pci-ohci", "nec-xhci"]
WINDOW_SIZE_BAR = 0x800000000
@@ -134,6 +138,28 @@ class VMHostDevsModel(object):
return '<devices>%s</devices>' % hostdevs
+ def have_usb_controller(self, vmid):
+ dom = VMModel.get_vm(vmid, self.conn)
+
+ root = objectify.fromstring(dom.XMLDesc(0))
+
+ try:
+ controllers = root.devices.controller
+
+ except AttributeError:
+ return False
+
+ for controller in controllers:
+
+ if 'model' not in controller.attrib:
+ continue
+
+ if controller.attrib['type'] == 'usb' and \
+ controller.attrib['model'] in USB_MODELS_PCI_HOTPLUG:
+ return True
+
+ return False
+
def _get_pci_device_xml(self, dev_info, slot, is_multifunction):
if 'detach_driver' not in dev_info:
dev_info['detach_driver'] = 'kvm'
@@ -233,6 +259,15 @@ class VMHostDevsModel(object):
dom = VMModel.get_vm(vmid, self.conn)
driver = 'vfio' if self.caps.kernel_vfio else 'kvm'
+ # 'vfio' systems requires a usb controller in order to support pci
+ # hotplug on Power.
+ if driver == 'vfio' and platform.machine().startswith('ppc') and \
+ DOM_STATE_MAP[dom.info()[0]] != "shutoff" and \
+ not self.have_usb_controller(vmid):
+ msg = WokMessage('KCHVMHDEV0008E', {'vmid': vmid})
+ cb(msg.get_text(), False)
+ raise InvalidOperation("KCHVMHDEV0008E", {'vmid': vmid})
+
# Attach all PCI devices in the same IOMMU group
affected_names = self.devs_model.get_list(
_passthrough_affected_by=dev_info['name'])
diff --git a/tests/test_model.py b/tests/test_model.py
index 082cb9d..05d7415 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -24,6 +24,7 @@ import base64
import grp
import lxml.etree as ET
import os
+import platform
import pwd
import mock
import re
@@ -1626,6 +1627,30 @@ class ModelTests(unittest.TestCase):
volumes = inst.storagevolumes_get_list(args['name'])
self.assertEquals(len(volumes), 2)
+ def _host_is_power():
+ return platform.machine().startswith('ppc')
+
+ @unittest.skipUnless(_host_is_power(), 'Only required for Power hosts')
+ def test_pci_hotplug_requires_usb_controller(self):
+ config.set("authentication", "method", "pam")
+ inst = model.Model(None, objstore_loc=self.tmp_store)
+ tpl_params = {'name': 'test', 'memory': 1024, 'cdrom': UBUNTU_ISO}
+ inst.templates_create(tpl_params)
+
+ with RollbackContext() as rollback:
+ vm_params = {'name': 'kimchi-vm1', 'template': '/templates/test'}
+ task1 = inst.vms_create(vm_params)
+ inst.task_wait(task1['id'])
+ rollback.prependDefer(utils.rollback_wrapper, inst.vm_delete,
+ 'kimchi-vm1')
+ # Start vm
+ inst.vm_start('kimchi-vm1')
+ rollback.prependDefer(utils.rollback_wrapper, inst.vm_poweroff,
+ 'kimchi-vm1')
+ # check if create VM has USB controller
+ self.assertTrue(
+ inst.vmhostdevs_have_usb_controller('kimchi-vm1'))
+
class BaseModelTests(unittest.TestCase):
class FoosModel(object):
diff --git a/vmtemplate.py b/vmtemplate.py
index 06ee845..c3390fe 100644
--- a/vmtemplate.py
+++ b/vmtemplate.py
@@ -18,6 +18,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
import os
+import platform
import stat
import time
import urlparse
@@ -40,6 +41,7 @@ from wok.plugins.kimchi.xmlutils.graphics import get_graphics_xml
from wok.plugins.kimchi.xmlutils.interface import get_iface_xml
from wok.plugins.kimchi.xmlutils.qemucmdline import get_qemucmdline_xml
from wok.plugins.kimchi.xmlutils.serial import get_serial_xml
+from wok.plugins.kimchi.xmlutils.usb import get_usb_controller_xml
class VMTemplate(object):
@@ -358,6 +360,13 @@ class VMTemplate(object):
self.info['os_version'])
return unicode(interfaces, 'utf-8')
+ def _get_usb_controller(self):
+ # Power systems must include USB controller model
+ if not platform.machine().startswith('ppc'):
+ return ''
+
+ return get_usb_controller_xml('nec-xhci')
+
def _get_input_output_xml(self):
sound = """
<sound model='%(sound_model)s' />
@@ -469,6 +478,9 @@ class VMTemplate(object):
# cpu_info element
params['cpu_info_xml'] = self._get_cpu_xml()
+ # usb controller
+ params['usb_controller'] = self._get_usb_controller()
+
xml = """
<domain type='%(domain)s'>
%(qemu-stream-cmdline)s
@@ -503,6 +515,7 @@ class VMTemplate(object):
%(interfaces)s
%(graphics)s
%(input_output)s
+ %(usb_controller)s
%(serial)s
<memballoon model='virtio' />
</devices>
diff --git a/xmlutils/usb.py b/xmlutils/usb.py
new file mode 100644
index 0000000..84d2aeb
--- /dev/null
+++ b/xmlutils/usb.py
@@ -0,0 +1,45 @@
+#
+# Project Kimchi
+#
+# Copyright IBM Corp, 2016
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+import lxml.etree as ET
+from lxml.builder import E
+
+
+def get_usb_controller_xml(model):
+ """
+ Returns a XML string defining USB controller. Example for model='nec-xhci':
+ <controller type='usb' index='0' model='nec-xhci'>
+ <address type='pci' domain='0x0000'
+ bus='0x00' slot='0x0f' function='0x0'/>
+ </controller>
+ """
+ m = E.controller(
+ E.address(
+ type='pci',
+ domain='0x0000',
+ bus='0x00',
+ slot='0x0f',
+ function='0x0'
+ ),
+ type='usb',
+ index='0',
+ model=model
+ )
+
+ return ET.tostring(m)
--
2.7.4
2
1
[PATCH] [WoK] Github #143: non-ASCII characters in the password field
by dhbarboza82@gmail.com 21 Oct '16
by dhbarboza82@gmail.com 21 Oct '16
21 Oct '16
From: Daniel Henrique Barboza <danielhb(a)linux.vnet.ibm.com>
This patch enables WoK backend to read non-ASCII characters from
the password field.
Signed-off-by: Daniel Henrique Barboza <danielhb(a)linux.vnet.ibm.com>
---
src/wok/auth.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/wok/auth.py b/src/wok/auth.py
index 421f8f3..6b1c160 100644
--- a/src/wok/auth.py
+++ b/src/wok/auth.py
@@ -301,8 +301,8 @@ def check_auth_httpba():
def login(username, password, **kwargs):
auth_args = {'auth_type': config.get("authentication", "method"),
- 'username': username,
- 'password': password}
+ 'username': username.encode('utf-8'),
+ 'password': password.encode('utf-8')}
user = User.get(auth_args)
if not user:
--
2.7.4
3
2
20 Oct '16
The list of interfaces was being appended to a non-clean list. Just
create it and add the results.
Signed-off-by: Ramon Medeiros <ramonn(a)linux.vnet.ibm.com>
---
Changes:
v4:
List all unused interfaces when editing a vepa network. User now can add new
interfaces while editting
v3:
Only list interfaces that are not being used when creating VEPA interface
v2:
Create empty result var
ui/js/src/kimchi.api.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js
index 55fd55f..3dccfe9 100644
--- a/ui/js/src/kimchi.api.js
+++ b/ui/js/src/kimchi.api.js
@@ -693,7 +693,7 @@ var kimchi = {
getVEPAInterfaces : function(suc, err) {
wok.requestJSON({
- url : 'plugins/kimchi/interfaces?module=^(?!mlx5_core|mlx5-core).*$',
+ url : 'plugins/kimchi/interfaces?_inuse=false&module=^(?!mlx5_core|mlx5-core).*$',
type : 'GET',
contentType : 'application/json',
dataType : 'json',
--
2.7.4
1
0