[PATCH V2] [Wok 0/4] Add support to relative paths/URLs.

From: Paulo Vital <pvital@linux.vnet.ibm.com> V2: - Changed config name from relative_path to server_root V1: This patch-set adds support on Wok to handle the use of relative paths in configuration and command line, by setting the backend to use the new path in URL's. It was necessary update a few SCSS, JS and HTML files to handle, as well, generate new CSS files and update test cases. This is part of solution to Kimchi issue [1] and Wok issue [2]: [1] https://github.com/kimchi-project/kimchi/issues/733 [2] https://github.com/kimchi-project/wok/issues/25 Paulo Vital (4): Add support to relative paths. Fix UI to handle relative paths. CSS updates to handle relative path support. Update tests with relative path support src/nginx/wok.conf.in | 6 +- src/wok.conf.in | 5 + src/wok/config.py.in | 1 + src/wok/model/config.py | 1 + src/wok/proxy.py | 8 +- src/wok/reqlogger.py | 2 +- src/wok/server.py | 2 +- src/wok/utils.py | 11 +- src/wokd.in | 3 + tests/test_api.py | 3 +- tests/test_server_root.py | 71 ++++ tests/utils.py | 4 +- ui/css/bootstrap.custom.css | 651 +++++++++++++++++++++++---------- ui/css/datatables.bootstrap.css | 10 +- ui/css/settings.css | 12 +- ui/css/src/modules/_wok-variables.scss | 6 +- ui/css/wok.css | 91 +++-- ui/pages/tabs/settings.html.tmpl | 7 +- 18 files changed, 651 insertions(+), 243 deletions(-) create mode 100644 tests/test_server_root.py -- 2.7.4

From: Paulo Vital <pvital@linux.vnet.ibm.com> This patch adds support to handle the use of relative paths in configuration and command line, as well, set the backend to use the new path in URL's. This is part of solution to: https://github.com/kimchi-project/kimchi/issues/733 and https://github.com/kimchi-project/wok/issues/25 Signed-off-by: Paulo Vital <pvital@linux.vnet.ibm.com> --- src/nginx/wok.conf.in | 6 +++--- src/wok.conf.in | 5 +++++ src/wok/config.py.in | 1 + src/wok/model/config.py | 1 + src/wok/proxy.py | 8 +++++--- src/wok/reqlogger.py | 2 +- src/wok/server.py | 2 +- src/wok/utils.py | 11 ++++++++++- src/wokd.in | 3 +++ 9 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/nginx/wok.conf.in b/src/nginx/wok.conf.in index 512b00b..5d2bb17 100644 --- a/src/nginx/wok.conf.in +++ b/src/nginx/wok.conf.in @@ -56,15 +56,15 @@ server { add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; - location / { + location ${server_root}/ { proxy_pass http://127.0.0.1:${cherrypy_port}; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_redirect http://127.0.0.1:${cherrypy_port}/ https://$host:${proxy_ssl_port}/; + proxy_redirect http://127.0.0.1:${cherrypy_port}/ https://$host:${proxy_ssl_port}${server_root}/; } - location /websockify { + location ${server_root}/websockify { proxy_pass http://websocket; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; diff --git a/src/wok.conf.in b/src/wok.conf.in index 67dc75a..5e04b20 100644 --- a/src/wok.conf.in +++ b/src/wok.conf.in @@ -43,6 +43,11 @@ # Max request body size in KB, default value is 4GB #max_body_size = 4 * 1024 * 1024 +# Wok server root. Set the following variable to configure any relative path to +# the server. For example, to have Wok pointing to https://localhost:8001/wok/ +# uncomment the following: +#server_root=/wok + [logging] # Log directory #log_dir = @localstatedir@/log/wok diff --git a/src/wok/config.py.in b/src/wok/config.py.in index cbe585c..46544fa 100644 --- a/src/wok/config.py.in +++ b/src/wok/config.py.in @@ -272,6 +272,7 @@ def _get_config(): config.set("server", "ssl_key", "") config.set("server", "environment", "production") config.set('server', 'max_body_size', '4*1024*1024') + config.set("server", "server_root", "") config.add_section("authentication") config.set("authentication", "method", "pam") config.set("authentication", "ldap_server", "") diff --git a/src/wok/model/config.py b/src/wok/model/config.py index 415098a..3748a6e 100644 --- a/src/wok/model/config.py +++ b/src/wok/model/config.py @@ -28,4 +28,5 @@ class ConfigModel(object): return {'ssl_port': config.get('server', 'ssl_port'), 'websockets_port': config.get('server', 'websockets_port'), 'auth': config.get('authentication', 'method'), + 'server_root': config.get('server', 'server_root'), 'version': get_version()} diff --git a/src/wok/proxy.py b/src/wok/proxy.py index 4b06fc2..5f646e4 100644 --- a/src/wok/proxy.py +++ b/src/wok/proxy.py @@ -37,7 +37,7 @@ from wok.utils import run_command HTTP_CONFIG = """ server { listen %(host_addr)s:%(proxy_port)s; - rewrite ^/(.*)$ https://$host:%(proxy_ssl_port)s/$1 redirect; + rewrite ^/(.*)$ https://$host:%(proxy_ssl_port)s%(rel_path)s/$1 redirect; } """ @@ -88,7 +88,8 @@ def _create_proxy_config(options): if options.https_only == 'false': http_config = HTTP_CONFIG % {'host_addr': options.host, 'proxy_port': options.port, - 'proxy_ssl_port': options.ssl_port} + 'proxy_ssl_port': options.ssl_port, + 'rel_path': options.server_root} # Read template file and create a new config file # with the specified parameters. @@ -104,7 +105,8 @@ def _create_proxy_config(options): cert_pem=cert, cert_key=key, max_body_size=eval(options.max_body_size), session_timeout=options.session_timeout, - dhparams_pem=dhparams_pem) + dhparams_pem=dhparams_pem, + server_root=options.server_root) # Write file to be used for nginx. config_file = open(os.path.join(nginx_config_dir, "wok.conf"), "w") diff --git a/src/wok/reqlogger.py b/src/wok/reqlogger.py index 37190dc..b51abf1 100644 --- a/src/wok/reqlogger.py +++ b/src/wok/reqlogger.py @@ -40,7 +40,7 @@ from wok.utils import remove_old_files # Log search setup FILTER_FIELDS = ['app', 'date', 'ip', 'req', 'status', 'user', 'time'] -LOG_DOWNLOAD_URI = "/data/logs/%s" +LOG_DOWNLOAD_URI = "data/logs/%s" LOG_DOWNLOAD_TIMEOUT = 6 LOG_FORMAT = "[%(date)s %(time)s %(zone)s] %(req)-6s %(status)s %(app)-11s " \ "%(ip)-15s %(user)s: %(message)s\n" diff --git a/src/wok/server.py b/src/wok/server.py index 04f4330..fecca48 100644 --- a/src/wok/server.py +++ b/src/wok/server.py @@ -178,7 +178,7 @@ class Server(object): cfg[ident] = {'tools.wokauth.on': True} self.app = cherrypy.tree.mount(WokRoot(model_instance, dev_env), - config=self.configObj) + options.server_root, self.configObj) self._load_plugins(options) cherrypy.lib.sessions.init() diff --git a/src/wok/utils.py b/src/wok/utils.py index 1cdc025..0b74fd8 100644 --- a/src/wok/utils.py +++ b/src/wok/utils.py @@ -39,7 +39,7 @@ from datetime import datetime, timedelta from multiprocessing import Process, Queue from threading import Timer -from wok.config import paths, PluginPaths +from wok.config import config, paths, PluginPaths from wok.exception import InvalidParameter, TimeoutExpired from wok.stringutils import decode_value @@ -71,6 +71,14 @@ def _load_plugin_conf(name): (plugin_conf, e.message)) +def _check_plugin_relative_path(plugin_config): + rel_path = config.get("server", "server_root") + plugin_uri = plugin_config['wok']['uri'] + if (rel_path is not "") and (not plugin_uri.startswith(rel_path)): + plugin_config['wok']['uri'] = rel_path + plugin_uri + return plugin_config + + def get_enabled_plugins(): plugin_dir = paths.plugins_dir try: @@ -82,6 +90,7 @@ def get_enabled_plugins(): plugin_config = _load_plugin_conf(name) try: if plugin_config['wok']['enable']: + plugin_config = _check_plugin_relative_path(plugin_config) yield (name, plugin_config) except (TypeError, KeyError): continue diff --git a/src/wokd.in b/src/wokd.in index 962581d..c1b302c 100644 --- a/src/wokd.in +++ b/src/wokd.in @@ -51,6 +51,7 @@ def main(options): websockets_port = config.config.get("server", "websockets_port") session_timeout = config.config.get("server", "session_timeout") runningEnv = config.config.get("server", "environment") + server_root = config.config.get("server", "server_root") logDir = config.config.get("logging", "log_dir") logLevel = config.config.get("logging", "log_level") @@ -85,6 +86,8 @@ def main(options): help="Running environment of wok server") parser.add_option('--test', action='store_true', help="Run server in mock model") + parser.add_option('--server_root', type="string", default=server_root, + help="Relative path to server") (options, args) = parser.parse_args() # Update config.config with the command line values -- 2.7.4

From: Paulo Vital <pvital@linux.vnet.ibm.com> Updated necessary SCSS, JS and HTML files to handle the usage of relative paths. This is part of solution to: https://github.com/kimchi-project/kimchi/issues/733 and https://github.com/kimchi-project/wok/issues/25 Signed-off-by: Paulo Vital <pvital@linux.vnet.ibm.com> --- ui/css/src/modules/_wok-variables.scss | 6 +++--- ui/pages/tabs/settings.html.tmpl | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/ui/css/src/modules/_wok-variables.scss b/ui/css/src/modules/_wok-variables.scss index 61d4216..ceefe56 100644 --- a/ui/css/src/modules/_wok-variables.scss +++ b/ui/css/src/modules/_wok-variables.scss @@ -21,9 +21,9 @@ $bootstrap-sass-asset-helper: false !default; // Variables // -------------------------------------------------- -$wok-logo: '/images/wok-logo.png'; -$wok-icon-path: '/images/theme-default'; -$icon-font-path: '/css/fontawesome/fontawesome-webfont.ttf'; +$wok-logo: '../images/wok-logo.png'; +$wok-icon-path: '../images/theme-default'; +$icon-font-path: 'css/fontawesome/fontawesome-webfont.ttf'; //== Colors // diff --git a/ui/pages/tabs/settings.html.tmpl b/ui/pages/tabs/settings.html.tmpl index 8701885..7bb03d4 100644 --- a/ui/pages/tabs/settings.html.tmpl +++ b/ui/pages/tabs/settings.html.tmpl @@ -18,15 +18,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --> #unicode UTF-8 #import gettext +#from wok.cachebust import href #silent t = gettext.translation($lang.domain, $lang.localedir, languages=$lang.lang) #silent _ = t.gettext #silent _t = t.gettext <html> <head> - <link rel="stylesheet" type="text/css" href="../../css/settings.css"> - <script type="text/javascript" src="../../js/wok.user-log.js"></script> - <script type="text/javascript" src="../../js/wok.bootgrid.js"></script> + <link rel="stylesheet" type="text/css" href="$href('css/settings.css')"> + <script type="text/javascript" src="$href('js/wok.user-log.js')"></script> + <script type="text/javascript" src="$href('js/wok.bootgrid.js')"></script> </head> <body> -- 2.7.4

From: Paulo Vital <pvital@linux.vnet.ibm.com> This is part of solution to: https://github.com/kimchi-project/kimchi/issues/733 and https://github.com/kimchi-project/wok/issues/25 Signed-off-by: Paulo Vital <pvital@linux.vnet.ibm.com> --- ui/css/bootstrap.custom.css | 651 ++++++++++++++++++++++++++++------------ ui/css/datatables.bootstrap.css | 10 +- ui/css/settings.css | 12 +- ui/css/wok.css | 91 ++++-- 4 files changed, 539 insertions(+), 225 deletions(-) diff --git a/ui/css/bootstrap.custom.css b/ui/css/bootstrap.custom.css index 950e41b..d4894f5 100644 --- a/ui/css/bootstrap.custom.css +++ b/ui/css/bootstrap.custom.css @@ -1,4 +1,3 @@ -@charset "UTF-8"; /* * Project Wok * @@ -167,8 +166,7 @@ select { } button, -html input[type="button"], -input[type="reset"], +html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; cursor: pointer; @@ -351,7 +349,8 @@ a { text-decoration: none; } -a:hover, a:focus { +a:hover, +a:focus { color: #141314; text-decoration: underline; } @@ -416,7 +415,8 @@ 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: #535353; + color: #525252; } .text-info { @@ -606,7 +606,7 @@ a.text-success:focus { a.text-info:hover, a.text-info:focus { - color: #535353; + color: #525252; } .text-warning { @@ -615,7 +615,7 @@ a.text-info:focus { a.text-warning:hover, a.text-warning:focus { - color: #535353; + color: #525252; } .text-danger { @@ -624,7 +624,7 @@ a.text-warning:focus { a.text-danger:hover, a.text-danger:focus { - color: #535353; + color: #525252; } .bg-primary { @@ -730,7 +730,8 @@ dd { margin-left: 0; } -.dl-horizontal dd:before, .dl-horizontal dd:after { +.dl-horizontal dd:before, +.dl-horizontal dd:after { content: " "; display: table; } @@ -891,7 +892,8 @@ pre code { padding-right: 0; } -.container:before, .container:after { +.container:before, +.container:after { content: " "; display: table; } @@ -927,7 +929,8 @@ pre code { padding-right: 0; } -.container-fluid:before, .container-fluid:after { +.container-fluid:before, +.container-fluid:after { content: " "; display: table; } @@ -941,7 +944,8 @@ pre code { margin-right: 0; } -.row:before, .row:after { +.row:before, +.row:after { content: " "; display: table; } @@ -2027,7 +2031,8 @@ output { color: #999; } -.form-control[disabled], .form-control[readonly], +.form-control[disabled], +.form-control[readonly], fieldset[disabled] .form-control { background-color: #eee; opacity: 1; @@ -2053,7 +2058,8 @@ 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"], @@ -2061,23 +2067,21 @@ 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"], @@ -2085,20 +2089,17 @@ 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; } } @@ -2155,28 +2156,26 @@ 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; } @@ -2187,9 +2186,11 @@ fieldset[disabled] 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; @@ -2213,11 +2214,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; @@ -2266,11 +2267,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; @@ -2323,7 +2324,8 @@ select[multiple].input-lg, 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, @@ -2333,7 +2335,8 @@ select[multiple].input-lg, 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, @@ -2363,7 +2366,7 @@ select[multiple].input-lg, } .has-success .form-control:focus { - border-color: #535353; + border-color: #525252; -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; } @@ -2398,7 +2401,7 @@ select[multiple].input-lg, } .has-warning .form-control:focus { - border-color: #535353; + border-color: #525252; -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; } @@ -2433,7 +2436,7 @@ select[multiple].input-lg, } .has-error .form-control:focus { - border-color: #535353; + border-color: #525252; -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; } @@ -2533,7 +2536,8 @@ select[multiple].input-lg, 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; } @@ -2589,25 +2593,34 @@ select[multiple].input-lg, 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; @@ -2627,7 +2640,8 @@ 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; @@ -2639,14 +2653,20 @@ 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 { @@ -2655,12 +2675,24 @@ 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, @@ -2682,7 +2714,8 @@ 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; @@ -2694,14 +2727,20 @@ 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 { @@ -2710,12 +2749,24 @@ 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, @@ -2737,7 +2788,8 @@ 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; @@ -2749,14 +2801,20 @@ 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 { @@ -2765,12 +2823,24 @@ 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, @@ -2792,7 +2862,8 @@ 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; @@ -2804,14 +2875,20 @@ 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 { @@ -2820,12 +2897,24 @@ 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, @@ -2847,7 +2936,8 @@ 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; @@ -2859,14 +2949,20 @@ 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 { @@ -2875,12 +2971,24 @@ 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, @@ -2902,7 +3010,8 @@ 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; @@ -2914,14 +3023,20 @@ 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 { @@ -2930,12 +3045,24 @@ 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, @@ -2957,24 +3084,32 @@ 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; @@ -3121,24 +3256,30 @@ 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; @@ -3226,7 +3367,10 @@ 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, @@ -3245,7 +3389,8 @@ tbody.collapse.in { margin-left: -5px; } -.btn-toolbar:before, .btn-toolbar:after { +.btn-toolbar:before, +.btn-toolbar:after { content: " "; display: table; } @@ -3351,7 +3496,8 @@ 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; } @@ -3485,16 +3631,14 @@ 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; @@ -3550,7 +3694,9 @@ 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; } @@ -3571,7 +3717,8 @@ tbody.collapse.in { list-style: none; } -.nav:before, .nav:after { +.nav:before, +.nav:after { content: " "; display: table; } @@ -3591,7 +3738,8 @@ 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; } @@ -3600,14 +3748,17 @@ 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; } @@ -3643,7 +3794,9 @@ 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; @@ -3663,7 +3816,9 @@ 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; } @@ -3714,9 +3869,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; } @@ -3725,9 +3880,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; } } @@ -3753,7 +3908,8 @@ tbody.collapse.in { border: 0; } -.navbar:before, .navbar:after { +.navbar:before, +.navbar:after { content: " "; display: table; } @@ -3768,7 +3924,8 @@ tbody.collapse.in { } } -.navbar-header:before, .navbar-header:after { +.navbar-header:before, +.navbar-header:after { content: " "; display: table; } @@ -3792,7 +3949,8 @@ tbody.collapse.in { -webkit-overflow-scrolling: touch; } -.navbar-collapse:before, .navbar-collapse:after { +.navbar-collapse:before, +.navbar-collapse:after { content: " "; display: table; } @@ -3899,7 +4057,7 @@ tbody.collapse.in { display: block; padding: 0 0 0 60px; height: 55px; - background: transparent url("/images/wok-logo.png") no-repeat 4px 5px; + background: transparent url("../images/wok-logo.png") no-repeat 4px 5px; color: #fff; font-family: "Open Sans", Helvetica, Arial, "Lucida Grande", sans-serif; font-weight: 700; @@ -3911,7 +4069,8 @@ tbody.collapse.in { user-select: none; } -.navbar-brand:hover, .navbar-brand:focus { +.navbar-brand:hover, +.navbar-brand:focus { text-decoration: none; } @@ -3983,7 +4142,8 @@ 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; } } @@ -4170,7 +4330,8 @@ 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; @@ -4264,7 +4425,8 @@ 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; } @@ -4276,7 +4438,8 @@ 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; } @@ -4337,79 +4500,108 @@ 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; } @@ -4458,7 +4650,8 @@ 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; } @@ -4471,7 +4664,9 @@ 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; } @@ -4480,15 +4675,20 @@ 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; } @@ -4506,11 +4706,13 @@ 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; @@ -4525,7 +4727,8 @@ 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; } @@ -4538,17 +4741,22 @@ 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; } @@ -4557,7 +4765,8 @@ 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; } @@ -4570,7 +4779,9 @@ 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; } @@ -4585,15 +4796,20 @@ 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; } @@ -4611,11 +4827,13 @@ 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; @@ -4634,7 +4852,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { } .breadcrumb > li + li:before { - content: "/ "; + content: "/\\00a0"; padding: 0 5px; color: #ccc; } @@ -4680,7 +4898,8 @@ 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; @@ -4689,7 +4908,9 @@ 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 { @@ -4757,7 +4978,8 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { text-align: center; } -.pager:before, .pager:after { +.pager:before, +.pager:after { content: " "; display: table; } @@ -4806,7 +5028,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { .label { display: inline; - padding: .2em .6em .3em; + padding: 0.2em 0.6em 0.3em; font-size: 75%; font-weight: bold; line-height: 1; @@ -4826,7 +5048,8 @@ 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; @@ -4836,7 +5059,8 @@ a.label:hover, 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; } @@ -4844,7 +5068,8 @@ a.label:hover, 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; } @@ -4852,7 +5077,8 @@ a.label:hover, 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; } @@ -4860,7 +5086,8 @@ a.label:hover, 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; } @@ -4868,7 +5095,8 @@ a.label:hover, 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; } @@ -4876,7 +5104,8 @@ a.label:hover, 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; } @@ -4904,7 +5133,8 @@ a.label:hover, 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; @@ -4928,7 +5158,8 @@ a.label:hover, 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; @@ -5048,13 +5279,11 @@ 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; @@ -5073,7 +5302,7 @@ a.thumbnail.active { } .alert-success .alert-link { - color: #535353; + color: #525252; } .alert-info { @@ -5087,7 +5316,7 @@ a.thumbnail.active { } .alert-info .alert-link { - color: #535353; + color: #525252; } .alert-warning { @@ -5101,7 +5330,7 @@ a.thumbnail.active { } .alert-warning .alert-link { - color: #535353; + color: #525252; } .alert-danger { @@ -5115,7 +5344,7 @@ a.thumbnail.active { } .alert-danger .alert-link { - color: #535353; + color: #525252; } @-webkit-keyframes progress-bar-stripes { @@ -5313,7 +5542,8 @@ 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; @@ -5326,21 +5556,29 @@ 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; @@ -5349,15 +5587,19 @@ 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; } @@ -5376,14 +5618,17 @@ 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 { @@ -5407,14 +5652,17 @@ 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 { @@ -5438,14 +5686,17 @@ 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 { @@ -5469,14 +5720,17 @@ 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 { @@ -5508,7 +5762,8 @@ 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; } @@ -5983,7 +6238,8 @@ 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; @@ -6111,7 +6367,8 @@ button.close { background-color: #8cc63f; } -.modal-footer:before, .modal-footer:after { +.modal-footer:before, +.modal-footer:after { content: " "; display: table; } @@ -6427,7 +6684,8 @@ button.close { padding: 9px 14px; } -.popover > .arrow, .popover > .arrow:after { +.popover > .arrow, +.popover > .arrow:after { position: absolute; display: block; width: 0; @@ -6513,7 +6771,8 @@ 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 6d4e19d..87eec2a 100644 --- a/ui/css/datatables.bootstrap.css +++ b/ui/css/datatables.bootstrap.css @@ -111,7 +111,9 @@ 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 { @@ -132,7 +134,8 @@ 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, @@ -243,7 +246,8 @@ 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 8c0b8cb..1fe0a04 100644 --- a/ui/css/settings.css +++ b/ui/css/settings.css @@ -121,7 +121,8 @@ 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; } @@ -129,7 +130,8 @@ 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; } @@ -137,7 +139,8 @@ 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; } @@ -145,7 +148,8 @@ 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 18727b3..95d903b 100644 --- a/ui/css/wok.css +++ b/ui/css/wok.css @@ -137,7 +137,9 @@ 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 { @@ -428,7 +430,8 @@ 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; @@ -440,14 +443,20 @@ 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 { @@ -456,12 +465,24 @@ 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, @@ -488,7 +509,8 @@ 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; @@ -500,14 +522,20 @@ 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 { @@ -516,12 +544,24 @@ 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, @@ -594,7 +634,7 @@ fieldset[disabled] .btn-group > span > .btn.active { } .menu-flat .btn span.edit-alt { - background: transparent url("/images/theme-default/edit-alt.svg") no-repeat 50% 50%; + background: transparent url("../images/theme-default/edit-alt.svg") no-repeat 50% 50%; background-size: 100%; vertical-align: bottom; width: 22px; @@ -628,14 +668,15 @@ fieldset[disabled] .btn-group > span > .btn.active { text-decoration: inherit; width: 1.2em; height: 1.2em; - margin: .5em .85em; + margin: 0.5em 0.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; } @@ -716,13 +757,16 @@ 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; @@ -739,11 +783,14 @@ 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; @@ -906,7 +953,7 @@ fieldset[disabled] .btn-group > span > .btn.active { } .wok-list-loading-icon-inline { - 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; @@ -1181,7 +1228,7 @@ fieldset[disabled] .btn-group > span > .btn.active { } .wok-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; @@ -1221,7 +1268,7 @@ fieldset[disabled] .btn-group > span > .btn.active { } .wok-mask-loading-icon, .wok-grid-loading-icon, .wok-list-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 2s infinite linear; -o-animation: spin 2s infinite linear; animation: spin 2s infinite linear; @@ -1306,7 +1353,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; + margin-right: 0.9px // Sub-pixel unit for Chrome and Firefox anti-alias; } input[type=radio].wok-radio + label:before { -- 2.7.4

From: Paulo Vital <pvital@linux.vnet.ibm.com> Signed-off-by: Paulo Vital <pvital@linux.vnet.ibm.com> --- tests/test_api.py | 3 +- tests/test_server_root.py | 71 +++++++++++++++++++++++++++++++++++++++++++++++ tests/utils.py | 4 +-- 3 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 tests/test_server_root.py diff --git a/tests/test_api.py b/tests/test_api.py index 0ddf627..c93aff0 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -55,7 +55,8 @@ class APITests(unittest.TestCase): def test_config(self): resp = self.request('/config').read() conf = json.loads(resp) - keys = ["auth", "ssl_port", "websockets_port", "version"] + keys = ["auth", "ssl_port", "websockets_port", "version", + "server_root"] self.assertEquals(sorted(keys), sorted(conf.keys())) def test_user_log(self): diff --git a/tests/test_server_root.py b/tests/test_server_root.py new file mode 100644 index 0000000..fb5cf6c --- /dev/null +++ b/tests/test_server_root.py @@ -0,0 +1,71 @@ +# +# Project Wok +# +# 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 json +import unittest + +from utils import get_free_port, patch_auth, request, run_server + + +test_server = None +model = None +host = None +port = None +ssl_port = None + + +def setup_server(environment='development', server_root=''): + global test_server, model, host, port, ssl_port + + patch_auth() + host = '127.0.0.1' + port = get_free_port('http') + ssl_port = get_free_port('https') + test_server = run_server(host, port, ssl_port, test_mode=True, + environment=environment, + server_root=server_root) + + +class ServerRootTests(unittest.TestCase): + def tearDown(self): + test_server.stop() + + def test_production_env(self): + """ + Test reasons sanitized in production env + """ + server_root = '/test' + setup_server('production', server_root) + + # check if server_root in config is the same used to start server + resp = request(host, ssl_port, server_root + '/config').read() + conf = json.loads(resp) + self.assertEquals(len(conf), 5) + + def test_development_env(self): + """ + Test traceback thrown in development env + """ + server_root = '/test' + setup_server(server_root=server_root) + + # check if server_root in config is the same used to start server + resp = request(host, ssl_port, server_root + '/config').read() + conf = json.loads(resp) + self.assertEquals(len(conf), 5) diff --git a/tests/utils.py b/tests/utils.py index 0fa8a53..d518f13 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -105,7 +105,7 @@ def get_free_port(name='http'): def run_server(host, port, ssl_port, test_mode, cherrypy_port=None, - model=None, environment='development'): + model=None, environment='development', server_root=''): if cherrypy_port is None: cherrypy_port = get_free_port('cherrypy_port') @@ -120,7 +120,7 @@ def run_server(host, port, ssl_port, test_mode, cherrypy_port=None, 'max_body_size': '4*1024', 'test': test_mode, 'access_log': '/dev/null', 'error_log': '/dev/null', 'environment': environment, 'log_level': 'debug', - 'session_timeout': 10})() + 'session_timeout': 10, 'server_root': server_root})() if model is not None: setattr(args, 'model', model) -- 2.7.4
participants (2)
-
Aline Manera
-
pvital@linux.vnet.ibm.com