diff options
Diffstat (limited to 'module')
-rw-r--r-- | module/api/ConfigApi.py | 6 | ||||
-rwxr-xr-x | module/web/static/css/bootstrap.css | 458 | ||||
-rw-r--r-- | module/web/static/css/default/dashboard.less | 5 | ||||
-rw-r--r-- | module/web/static/css/default/style.less | 8 | ||||
-rwxr-xr-x[-rw-r--r--] | module/web/static/img/glyphicons-halflings-white.png | bin | 8777 -> 8777 bytes | |||
-rwxr-xr-x[-rw-r--r--] | module/web/static/img/glyphicons-halflings.png | bin | 12799 -> 12799 bytes | |||
-rw-r--r-- | module/web/static/js/config.js | 2 | ||||
-rwxr-xr-x | module/web/static/js/libs/bootstrap-2.3.js (renamed from module/web/static/js/libs/bootstrap-2.2.2.js) | 261 | ||||
-rw-r--r-- | module/web/static/js/utils/animations.js | 11 | ||||
-rw-r--r-- | module/web/static/js/views/headerView.js | 10 | ||||
-rw-r--r-- | module/web/templates/default/base.html | 2 |
11 files changed, 546 insertions, 217 deletions
diff --git a/module/api/ConfigApi.py b/module/api/ConfigApi.py index 451e4f832..fcc0bdd14 100644 --- a/module/api/ConfigApi.py +++ b/module/api/ConfigApi.py @@ -53,7 +53,7 @@ class ConfigApi(ApiComponent): :rtype: list of PluginInfo """ - return [PluginInfo(section, config.name, config.description, False, False) + return [ConfigInfo(section, config.name, config.description, False, False) for section, config, values in self.core.config.iterCoreSections()] @UserContext @@ -67,7 +67,7 @@ class ConfigApi(ApiComponent): data = [] for name, config, values in self.core.config.iterSections(self.user): if not values: continue - item = PluginInfo(name, config.name, config.description, + item = ConfigInfo(name, config.name, config.description, self.core.pluginManager.isPluginType(name, "addons"), self.core.pluginManager.isUserPlugin(name), values.get("activated", False)) @@ -83,7 +83,7 @@ class ConfigApi(ApiComponent): :rtype: list of PluginInfo """ # TODO: filter user_context / addons when not allowed - return [PluginInfo(name, config.name, config.description, + return [ConfigInfo(name, config.name, config.description, self.core.pluginManager.isPluginType(name, "addons"), self.core.pluginManager.isUserPlugin(name)) for name, config, values in self.core.config.iterSections(self.user)] diff --git a/module/web/static/css/bootstrap.css b/module/web/static/css/bootstrap.css index 5ff5dff3d..70dfd726b 100755 --- a/module/web/static/css/bootstrap.css +++ b/module/web/static/css/bootstrap.css @@ -1,5 +1,5 @@ /*! - * Bootstrap v2.2.2 + * Bootstrap v2.3.0 * * Copyright 2012 Twitter, Inc * Licensed under the Apache License v2.0 @@ -215,7 +215,8 @@ a { color: #0088cc; text-decoration: none; } -a:hover { +a:hover, +a:focus { color: #005580; text-decoration: underline; } @@ -568,33 +569,47 @@ cite { .muted { color: #999999; } -a.muted:hover { +a.muted:hover, +a.muted:focus { color: #808080; } .text-warning { color: #c09853; } -a.text-warning:hover { +a.text-warning:hover, +a.text-warning:focus { color: #a47e3c; } .text-error { color: #b94a48; } -a.text-error:hover { +a.text-error:hover, +a.text-error:focus { color: #953b39; } .text-info { color: #3a87ad; } -a.text-info:hover { +a.text-info:hover, +a.text-info:focus { color: #2d6987; } .text-success { color: #468847; } -a.text-success:hover { +a.text-success:hover, +a.text-success:focus { color: #356635; } +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} h1, h2, h3, @@ -682,9 +697,13 @@ ol.inline { margin-left: 0; list-style: none; } -ul.inline > li, -ol.inline > li { +ul.inline > li, +ol.inline > li { display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; padding-left: 5px; padding-right: 5px; } @@ -747,9 +766,9 @@ blockquote { } blockquote p { margin-bottom: 0; - font-size: 16px; + font-size: 17.5px; font-weight: 300; - line-height: 25px; + line-height: 1.25; } blockquote small { display: block; @@ -867,7 +886,9 @@ pre code { display: none; } a.label:hover, -a.badge:hover { +a.label:focus, +a.badge:hover, +a.badge:focus { color: #ffffff; text-decoration: none; cursor: pointer; @@ -988,27 +1009,33 @@ table { border-top: 0; } .table-bordered thead:first-child tr:first-child > th:first-child, -.table-bordered tbody:first-child tr:first-child > td:first-child { +.table-bordered tbody:first-child tr:first-child > td:first-child, +.table-bordered tbody:first-child tr:first-child > th:first-child { -webkit-border-top-left-radius: 4px; -moz-border-radius-topleft: 4px; border-top-left-radius: 4px; } .table-bordered thead:first-child tr:first-child > th:last-child, -.table-bordered tbody:first-child tr:first-child > td:last-child { +.table-bordered tbody:first-child tr:first-child > td:last-child, +.table-bordered tbody:first-child tr:first-child > th:last-child { -webkit-border-top-right-radius: 4px; -moz-border-radius-topright: 4px; border-top-right-radius: 4px; } .table-bordered thead:last-child tr:last-child > th:first-child, .table-bordered tbody:last-child tr:last-child > td:first-child, -.table-bordered tfoot:last-child tr:last-child > td:first-child { +.table-bordered tbody:last-child tr:last-child > th:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > th:first-child { -webkit-border-bottom-left-radius: 4px; -moz-border-radius-bottomleft: 4px; border-bottom-left-radius: 4px; } .table-bordered thead:last-child tr:last-child > th:last-child, .table-bordered tbody:last-child tr:last-child > td:last-child, -.table-bordered tfoot:last-child tr:last-child > td:last-child { +.table-bordered tbody:last-child tr:last-child > th:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > th:last-child { -webkit-border-bottom-right-radius: 4px; -moz-border-radius-bottomright: 4px; border-bottom-right-radius: 4px; @@ -1043,8 +1070,8 @@ table { .table-striped tbody > tr:nth-child(odd) > th { background-color: #f9f9f9; } -.table-hover tbody tr:hover td, -.table-hover tbody tr:hover th { +.table-hover tbody tr:hover > td, +.table-hover tbody tr:hover > th { background-color: #f5f5f5; } table td[class*="span"], @@ -1127,28 +1154,28 @@ table th[class*="span"], width: 924px; margin-left: 0; } -.table tbody tr.success td { +.table tbody tr.success > td { background-color: #dff0d8; } -.table tbody tr.error td { +.table tbody tr.error > td { background-color: #f2dede; } -.table tbody tr.warning td { +.table tbody tr.warning > td { background-color: #fcf8e3; } -.table tbody tr.info td { +.table tbody tr.info > td { background-color: #d9edf7; } -.table-hover tbody tr.success:hover td { +.table-hover tbody tr.success:hover > td { background-color: #d0e9c6; } -.table-hover tbody tr.error:hover td { +.table-hover tbody tr.error:hover > td { background-color: #ebcccc; } -.table-hover tbody tr.warning:hover td { +.table-hover tbody tr.warning:hover > td { background-color: #faf2cc; } -.table-hover tbody tr.info:hover td { +.table-hover tbody tr.info:hover > td { background-color: #c4e3f3; } form { @@ -1432,40 +1459,64 @@ textarea, .controls-row [class*="span"] + [class*="span"] { margin-left: 20px; } -input.span12, textarea.span12, .uneditable-input.span12 { +input.span12, +textarea.span12, +.uneditable-input.span12 { width: 926px; } -input.span11, textarea.span11, .uneditable-input.span11 { +input.span11, +textarea.span11, +.uneditable-input.span11 { width: 846px; } -input.span10, textarea.span10, .uneditable-input.span10 { +input.span10, +textarea.span10, +.uneditable-input.span10 { width: 766px; } -input.span9, textarea.span9, .uneditable-input.span9 { +input.span9, +textarea.span9, +.uneditable-input.span9 { width: 686px; } -input.span8, textarea.span8, .uneditable-input.span8 { +input.span8, +textarea.span8, +.uneditable-input.span8 { width: 606px; } -input.span7, textarea.span7, .uneditable-input.span7 { +input.span7, +textarea.span7, +.uneditable-input.span7 { width: 526px; } -input.span6, textarea.span6, .uneditable-input.span6 { +input.span6, +textarea.span6, +.uneditable-input.span6 { width: 446px; } -input.span5, textarea.span5, .uneditable-input.span5 { +input.span5, +textarea.span5, +.uneditable-input.span5 { width: 366px; } -input.span4, textarea.span4, .uneditable-input.span4 { +input.span4, +textarea.span4, +.uneditable-input.span4 { width: 286px; } -input.span3, textarea.span3, .uneditable-input.span3 { +input.span3, +textarea.span3, +.uneditable-input.span3 { width: 206px; } -input.span2, textarea.span2, .uneditable-input.span2 { +input.span2, +textarea.span2, +.uneditable-input.span2 { width: 126px; } -input.span1, textarea.span1, .uneditable-input.span1 { +input.span1, +textarea.span1, +.uneditable-input.span1 { width: 46px; } .controls-row { @@ -1689,7 +1740,9 @@ select:focus:invalid:focus { } .input-append, .input-prepend { - margin-bottom: 5px; + display: inline-block; + margin-bottom: 10px; + vertical-align: middle; font-size: 0; white-space: nowrap; } @@ -1700,7 +1753,9 @@ select:focus:invalid:focus { .input-append .uneditable-input, .input-prepend .uneditable-input, .input-append .dropdown-menu, -.input-prepend .dropdown-menu { +.input-prepend .dropdown-menu, +.input-append .popover, +.input-prepend .popover { font-size: 14px; } .input-append input, @@ -2002,9 +2057,9 @@ legend + .control-group { /* Darken IE7 buttons by default so they stand out more given they won't have borders */ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border: 1px solid #bbbbbb; + border: 1px solid #cccccc; *border: 0; - border-bottom-color: #a2a2a2; + border-bottom-color: #b3b3b3; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; @@ -2014,6 +2069,7 @@ legend + .control-group { box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); } .btn:hover, +.btn:focus, .btn:active, .btn.active, .btn.disabled, @@ -2029,7 +2085,8 @@ legend + .control-group { .btn:first-child { *margin-left: 0; } -.btn:hover { +.btn:hover, +.btn:focus { color: #333333; text-decoration: none; background-position: 0 -15px; @@ -2119,10 +2176,6 @@ input[type="button"].btn-block { .btn-inverse.active { color: rgba(255, 255, 255, 0.75); } -.btn { - border-color: #c5c5c5; - border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25); -} .btn-primary { color: #ffffff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); @@ -2142,6 +2195,7 @@ input[type="button"].btn-block { filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-primary:hover, +.btn-primary:focus, .btn-primary:active, .btn-primary.active, .btn-primary.disabled, @@ -2173,6 +2227,7 @@ input[type="button"].btn-block { filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-warning:hover, +.btn-warning:focus, .btn-warning:active, .btn-warning.active, .btn-warning.disabled, @@ -2204,6 +2259,7 @@ input[type="button"].btn-block { filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-danger:hover, +.btn-danger:focus, .btn-danger:active, .btn-danger.active, .btn-danger.disabled, @@ -2235,6 +2291,7 @@ input[type="button"].btn-block { filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-success:hover, +.btn-success:focus, .btn-success:active, .btn-success.active, .btn-success.disabled, @@ -2266,6 +2323,7 @@ input[type="button"].btn-block { filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-info:hover, +.btn-info:focus, .btn-info:active, .btn-info.active, .btn-info.disabled, @@ -2297,6 +2355,7 @@ input[type="button"].btn-block { filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .btn-inverse:hover, +.btn-inverse:focus, .btn-inverse:active, .btn-inverse.active, .btn-inverse.disabled, @@ -2351,12 +2410,14 @@ input[type="submit"].btn.btn-mini { -moz-border-radius: 0; border-radius: 0; } -.btn-link:hover { +.btn-link:hover, +.btn-link:focus { color: #005580; text-decoration: underline; background-color: transparent; } -.btn-link[disabled]:hover { +.btn-link[disabled]:hover, +.btn-link[disabled]:focus { color: #333333; text-decoration: none; } @@ -2373,7 +2434,7 @@ input[type="submit"].btn.btn-mini { background-repeat: no-repeat; margin-top: 1px; } -/* White icons with optional class, or on hover/active states of certain elements */ +/* White icons with optional class, or on hover/focus/active states of certain elements */ .icon-white, .nav-pills > .active > a > [class^="icon-"], .nav-pills > .active > a > [class*=" icon-"], @@ -2382,11 +2443,15 @@ input[type="submit"].btn.btn-mini { .navbar-inverse .nav > .active > a > [class^="icon-"], .navbar-inverse .nav > .active > a > [class*=" icon-"], .dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:focus > [class^="icon-"], .dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > li > a:focus > [class*=" icon-"], .dropdown-menu > .active > a > [class^="icon-"], .dropdown-menu > .active > a > [class*=" icon-"], .dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"] { +.dropdown-submenu:focus > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"], +.dropdown-submenu:focus > a > [class*=" icon-"] { background-image: url("../img/glyphicons-halflings-white.png"); } .icon-glass { @@ -2740,6 +2805,7 @@ input[type="submit"].btn.btn-mini { } .icon-folder-close { background-position: -384px -120px; + width: 16px; } .icon-folder-open { background-position: -408px -120px; @@ -2964,8 +3030,6 @@ input[type="submit"].btn.btn-mini { margin-top: 8px; margin-left: 0; } -.btn-mini .caret, -.btn-small .caret, .btn-large .caret { margin-top: 6px; } @@ -2974,6 +3038,10 @@ input[type="submit"].btn.btn-mini { border-right-width: 5px; border-top-width: 5px; } +.btn-mini .caret, +.btn-small .caret { + margin-top: 8px; +} .dropup .btn-large .caret { border-bottom-width: 5px; } @@ -3033,7 +3101,8 @@ input[type="submit"].btn.btn-mini { .nav > li > a { display: block; } -.nav > li > a:hover { +.nav > li > a:hover, +.nav > li > a:focus { text-decoration: none; background-color: #eeeeee; } @@ -3071,7 +3140,8 @@ input[type="submit"].btn.btn-mini { padding: 3px 15px; } .nav-list > .active > a, -.nav-list > .active > a:hover { +.nav-list > .active > a:hover, +.nav-list > .active > a:focus { color: #ffffff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); background-color: #0088cc; @@ -3131,11 +3201,13 @@ input[type="submit"].btn.btn-mini { -moz-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } -.nav-tabs > li > a:hover { +.nav-tabs > li > a:hover, +.nav-tabs > li > a:focus { border-color: #eeeeee #eeeeee #dddddd; } .nav-tabs > .active > a, -.nav-tabs > .active > a:hover { +.nav-tabs > .active > a:hover, +.nav-tabs > .active > a:focus { color: #555555; background-color: #ffffff; border: 1px solid #ddd; @@ -3152,7 +3224,8 @@ input[type="submit"].btn.btn-mini { border-radius: 5px; } .nav-pills > .active > a, -.nav-pills > .active > a:hover { +.nav-pills > .active > a:hover, +.nav-pills > .active > a:focus { color: #ffffff; background-color: #0088cc; } @@ -3187,7 +3260,8 @@ input[type="submit"].btn.btn-mini { -moz-border-radius-bottomleft: 4px; border-bottom-left-radius: 4px; } -.nav-tabs.nav-stacked > li > a:hover { +.nav-tabs.nav-stacked > li > a:hover, +.nav-tabs.nav-stacked > li > a:focus { border-color: #ddd; z-index: 2; } @@ -3212,7 +3286,8 @@ input[type="submit"].btn.btn-mini { border-bottom-color: #0088cc; margin-top: 6px; } -.nav .dropdown-toggle:hover .caret { +.nav .dropdown-toggle:hover .caret, +.nav .dropdown-toggle:focus .caret { border-top-color: #005580; border-bottom-color: #005580; } @@ -3228,25 +3303,29 @@ input[type="submit"].btn.btn-mini { border-top-color: #555555; border-bottom-color: #555555; } -.nav > .dropdown.active > a:hover { +.nav > .dropdown.active > a:hover, +.nav > .dropdown.active > a:focus { cursor: pointer; } .nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover { +.nav > li.dropdown.open.active > a:hover, +.nav > li.dropdown.open.active > a:focus { color: #ffffff; background-color: #999999; border-color: #999999; } .nav li.dropdown.open .caret, .nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret { +.nav li.dropdown.open a:hover .caret, +.nav li.dropdown.open a:focus .caret { border-top-color: #ffffff; border-bottom-color: #ffffff; opacity: 1; filter: alpha(opacity=100); } -.tabs-stacked .open > a:hover { +.tabs-stacked .open > a:hover, +.tabs-stacked .open > a:focus { border-color: #999999; } .tabbable { @@ -3289,12 +3368,14 @@ input[type="submit"].btn.btn-mini { -moz-border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px; } -.tabs-below > .nav-tabs > li > a:hover { +.tabs-below > .nav-tabs > li > a:hover, +.tabs-below > .nav-tabs > li > a:focus { border-bottom-color: transparent; border-top-color: #ddd; } .tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover { +.tabs-below > .nav-tabs > .active > a:hover, +.tabs-below > .nav-tabs > .active > a:focus { border-color: transparent #ddd #ddd #ddd; } .tabs-left > .nav-tabs > li, @@ -3318,11 +3399,13 @@ input[type="submit"].btn.btn-mini { -moz-border-radius: 4px 0 0 4px; border-radius: 4px 0 0 4px; } -.tabs-left > .nav-tabs > li > a:hover { +.tabs-left > .nav-tabs > li > a:hover, +.tabs-left > .nav-tabs > li > a:focus { border-color: #eeeeee #dddddd #eeeeee #eeeeee; } .tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover { +.tabs-left > .nav-tabs .active > a:hover, +.tabs-left > .nav-tabs .active > a:focus { border-color: #ddd transparent #ddd #ddd; *border-right-color: #ffffff; } @@ -3337,18 +3420,21 @@ input[type="submit"].btn.btn-mini { -moz-border-radius: 0 4px 4px 0; border-radius: 0 4px 4px 0; } -.tabs-right > .nav-tabs > li > a:hover { +.tabs-right > .nav-tabs > li > a:hover, +.tabs-right > .nav-tabs > li > a:focus { border-color: #eeeeee #eeeeee #eeeeee #dddddd; } .tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover { +.tabs-right > .nav-tabs .active > a:hover, +.tabs-right > .nav-tabs .active > a:focus { border-color: #ddd #ddd #ddd transparent; *border-left-color: #ffffff; } .nav > .disabled > a { color: #999999; } -.nav > .disabled > a:hover { +.nav > .disabled > a:hover, +.nav > .disabled > a:focus { text-decoration: none; background-color: transparent; cursor: default; @@ -3406,7 +3492,8 @@ input[type="submit"].btn.btn-mini { color: #777777; text-shadow: 0 1px 0 #ffffff; } -.navbar .brand:hover { +.navbar .brand:hover, +.navbar .brand:focus { text-decoration: none; } .navbar-text { @@ -3417,7 +3504,8 @@ input[type="submit"].btn.btn-mini { .navbar-link { color: #777777; } -.navbar-link:hover { +.navbar-link:hover, +.navbar-link:focus { color: #333333; } .navbar .divider-vertical { @@ -3432,7 +3520,9 @@ input[type="submit"].btn.btn-mini { } .navbar .btn-group .btn, .navbar .input-prepend .btn, -.navbar .input-append .btn { +.navbar .input-append .btn, +.navbar .input-prepend .btn-group, +.navbar .input-append .btn-group { margin-top: 0; } .navbar-form { @@ -3612,6 +3702,7 @@ input[type="submit"].btn.btn-mini { box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075); } .navbar .btn-navbar:hover, +.navbar .btn-navbar:focus, .navbar .btn-navbar:active, .navbar .btn-navbar.active, .navbar .btn-navbar.disabled, @@ -3673,9 +3764,10 @@ input[type="submit"].btn.btn-mini { bottom: -6px; top: auto; } -.navbar .nav li.dropdown > a:hover .caret { - border-top-color: #555555; - border-bottom-color: #555555; +.navbar .nav li.dropdown > a:hover .caret, +.navbar .nav li.dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; } .navbar .nav li.dropdown.open > .dropdown-toggle, .navbar .nav li.dropdown.active > .dropdown-toggle, @@ -3735,7 +3827,9 @@ input[type="submit"].btn.btn-mini { text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); } .navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover { +.navbar-inverse .nav > li > a:hover, +.navbar-inverse .brand:focus, +.navbar-inverse .nav > li > a:focus { color: #ffffff; } .navbar-inverse .brand { @@ -3758,7 +3852,8 @@ input[type="submit"].btn.btn-mini { .navbar-inverse .navbar-link { color: #999999; } -.navbar-inverse .navbar-link:hover { +.navbar-inverse .navbar-link:hover, +.navbar-inverse .navbar-link:focus { color: #ffffff; } .navbar-inverse .divider-vertical { @@ -3771,7 +3866,8 @@ input[type="submit"].btn.btn-mini { background-color: #111111; color: #ffffff; } -.navbar-inverse .nav li.dropdown > a:hover .caret { +.navbar-inverse .nav li.dropdown > a:hover .caret, +.navbar-inverse .nav li.dropdown > a:focus .caret { border-top-color: #ffffff; border-bottom-color: #ffffff; } @@ -3837,6 +3933,7 @@ input[type="submit"].btn.btn-mini { filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); } .navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:focus, .navbar-inverse .btn-navbar:active, .navbar-inverse .btn-navbar.active, .navbar-inverse .btn-navbar.disabled, @@ -3905,6 +4002,7 @@ input[type="submit"].btn.btn-mini { border-left-width: 0; } .pagination ul > li > a:hover, +.pagination ul > li > a:focus, .pagination ul > .active > a, .pagination ul > .active > span { background-color: #f5f5f5; @@ -3916,7 +4014,8 @@ input[type="submit"].btn.btn-mini { } .pagination ul > .disabled > span, .pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover { +.pagination ul > .disabled > a:hover, +.pagination ul > .disabled > a:focus { color: #999999; background-color: transparent; cursor: default; @@ -4029,7 +4128,8 @@ input[type="submit"].btn.btn-mini { -moz-border-radius: 15px; border-radius: 15px; } -.pager li > a:hover { +.pager li > a:hover, +.pager li > a:focus { text-decoration: none; background-color: #f5f5f5; } @@ -4043,6 +4143,7 @@ input[type="submit"].btn.btn-mini { } .pager .disabled > a, .pager .disabled > a:hover, +.pager .disabled > a:focus, .pager .disabled > span { color: #999999; background-color: #fff; @@ -4086,7 +4187,8 @@ input[type="submit"].btn.btn-mini { -o-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; } -a.thumbnail:hover { +a.thumbnail:hover, +a.thumbnail:focus { border-color: #0088cc; -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); @@ -4393,10 +4495,10 @@ a.thumbnail:hover { .media-heading { margin: 0 0 5px; } -.media .pull-left { +.media > .pull-left { margin-right: 10px; } -.media .pull-right { +.media > .pull-right { margin-left: 10px; } .media-list { @@ -4408,8 +4510,8 @@ a.thumbnail:hover { z-index: 1030; display: block; visibility: visible; - padding: 5px; font-size: 11px; + line-height: 1.4; opacity: 0; filter: alpha(opacity=0); } @@ -4419,19 +4521,23 @@ a.thumbnail:hover { } .tooltip.top { margin-top: -3px; + padding: 5px 0; } .tooltip.right { margin-left: 3px; + padding: 0 5px; } .tooltip.bottom { margin-top: 3px; + padding: 5px 0; } .tooltip.left { margin-left: -3px; + padding: 0 5px; } .tooltip-inner { max-width: 200px; - padding: 3px 8px; + padding: 8px; color: #ffffff; text-align: center; text-decoration: none; @@ -4481,7 +4587,7 @@ a.thumbnail:hover { left: 0; z-index: 1010; display: none; - width: 236px; + max-width: 276px; padding: 1px; text-align: left; background-color: #ffffff; @@ -4522,6 +4628,9 @@ a.thumbnail:hover { -moz-border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0; } +.popover-title:empty { + display: none; +} .popover-content { padding: 9px 14px; } @@ -4765,7 +4874,7 @@ a.thumbnail:hover { background-color: #e5e5e5; border-bottom: 1px solid #ffffff; } -.dropdown-menu li > a { +.dropdown-menu > li > a { display: block; padding: 3px 20px; clear: both; @@ -4774,9 +4883,10 @@ a.thumbnail:hover { color: #333333; white-space: nowrap; } -.dropdown-menu li > a:hover, -.dropdown-menu li > a:focus, -.dropdown-submenu:hover > a { +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { text-decoration: none; color: #ffffff; background-color: #0081c2; @@ -4788,8 +4898,9 @@ a.thumbnail:hover { background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); } -.dropdown-menu .active > a, -.dropdown-menu .active > a:hover { +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { color: #ffffff; text-decoration: none; outline: 0; @@ -4802,11 +4913,13 @@ a.thumbnail:hover { background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); } -.dropdown-menu .disabled > a, -.dropdown-menu .disabled > a:hover { +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { color: #999999; } -.dropdown-menu .disabled > a:hover { +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { text-decoration: none; background-color: transparent; background-image: none; @@ -4816,7 +4929,7 @@ a.thumbnail:hover { .open { *z-index: 1000; } -.open > .dropdown-menu { +.open > .dropdown-menu { display: block; } .pull-right > .dropdown-menu { @@ -4938,7 +5051,8 @@ a.thumbnail:hover { -o-transition: 0.6s ease-in-out left; transition: 0.6s ease-in-out left; } -.carousel-inner > .item > img { +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { display: block; line-height: 1; } @@ -4996,12 +5110,35 @@ a.thumbnail:hover { left: auto; right: 15px; } -.carousel-control:hover { +.carousel-control:hover, +.carousel-control:focus { color: #ffffff; text-decoration: none; opacity: 0.9; filter: alpha(opacity=90); } +.carousel-indicators { + position: absolute; + top: 15px; + right: 15px; + z-index: 5; + margin: 0; + list-style: none; +} +.carousel-indicators li { + display: block; + float: left; + width: 10px; + height: 10px; + margin-left: 5px; + text-indent: -999px; + background-color: #ccc; + background-color: rgba(255, 255, 255, 0.25); + border-radius: 5px; +} +.carousel-indicators .active { + background-color: #fff; +} .carousel-caption { position: absolute; left: 0; @@ -5061,7 +5198,8 @@ a.thumbnail:hover { opacity: 0.2; filter: alpha(opacity=20); } -.close:hover { +.close:hover, +.close:focus { color: #000000; text-decoration: none; cursor: pointer; @@ -5115,6 +5253,9 @@ button.close { .collapse.in { height: auto; } +@-ms-viewport { + width: device-width; +} .hidden { display: none; visibility: hidden; @@ -5159,6 +5300,17 @@ button.close { display: none !important; } } +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: inherit !important; + } + .hidden-print { + display: none !important; + } +} @media (max-width: 767px) { body { padding-left: 20px; @@ -5586,40 +5738,64 @@ button.close { .controls-row [class*="span"] + [class*="span"] { margin-left: 20px; } - input.span12, textarea.span12, .uneditable-input.span12 { + input.span12, + textarea.span12, + .uneditable-input.span12 { width: 710px; } - input.span11, textarea.span11, .uneditable-input.span11 { + input.span11, + textarea.span11, + .uneditable-input.span11 { width: 648px; } - input.span10, textarea.span10, .uneditable-input.span10 { + input.span10, + textarea.span10, + .uneditable-input.span10 { width: 586px; } - input.span9, textarea.span9, .uneditable-input.span9 { + input.span9, + textarea.span9, + .uneditable-input.span9 { width: 524px; } - input.span8, textarea.span8, .uneditable-input.span8 { + input.span8, + textarea.span8, + .uneditable-input.span8 { width: 462px; } - input.span7, textarea.span7, .uneditable-input.span7 { + input.span7, + textarea.span7, + .uneditable-input.span7 { width: 400px; } - input.span6, textarea.span6, .uneditable-input.span6 { + input.span6, + textarea.span6, + .uneditable-input.span6 { width: 338px; } - input.span5, textarea.span5, .uneditable-input.span5 { + input.span5, + textarea.span5, + .uneditable-input.span5 { width: 276px; } - input.span4, textarea.span4, .uneditable-input.span4 { + input.span4, + textarea.span4, + .uneditable-input.span4 { width: 214px; } - input.span3, textarea.span3, .uneditable-input.span3 { + input.span3, + textarea.span3, + .uneditable-input.span3 { width: 152px; } - input.span2, textarea.span2, .uneditable-input.span2 { + input.span2, + textarea.span2, + .uneditable-input.span2 { width: 90px; } - input.span1, textarea.span1, .uneditable-input.span1 { + input.span1, + textarea.span1, + .uneditable-input.span1 { width: 28px; } } @@ -5902,40 +6078,64 @@ button.close { .controls-row [class*="span"] + [class*="span"] { margin-left: 30px; } - input.span12, textarea.span12, .uneditable-input.span12 { + input.span12, + textarea.span12, + .uneditable-input.span12 { width: 1156px; } - input.span11, textarea.span11, .uneditable-input.span11 { + input.span11, + textarea.span11, + .uneditable-input.span11 { width: 1056px; } - input.span10, textarea.span10, .uneditable-input.span10 { + input.span10, + textarea.span10, + .uneditable-input.span10 { width: 956px; } - input.span9, textarea.span9, .uneditable-input.span9 { + input.span9, + textarea.span9, + .uneditable-input.span9 { width: 856px; } - input.span8, textarea.span8, .uneditable-input.span8 { + input.span8, + textarea.span8, + .uneditable-input.span8 { width: 756px; } - input.span7, textarea.span7, .uneditable-input.span7 { + input.span7, + textarea.span7, + .uneditable-input.span7 { width: 656px; } - input.span6, textarea.span6, .uneditable-input.span6 { + input.span6, + textarea.span6, + .uneditable-input.span6 { width: 556px; } - input.span5, textarea.span5, .uneditable-input.span5 { + input.span5, + textarea.span5, + .uneditable-input.span5 { width: 456px; } - input.span4, textarea.span4, .uneditable-input.span4 { + input.span4, + textarea.span4, + .uneditable-input.span4 { width: 356px; } - input.span3, textarea.span3, .uneditable-input.span3 { + input.span3, + textarea.span3, + .uneditable-input.span3 { width: 256px; } - input.span2, textarea.span2, .uneditable-input.span2 { + input.span2, + textarea.span2, + .uneditable-input.span2 { width: 156px; } - input.span1, textarea.span1, .uneditable-input.span1 { + input.span1, + textarea.span1, + .uneditable-input.span1 { width: 56px; } .thumbnails { @@ -6015,7 +6215,9 @@ button.close { margin-bottom: 2px; } .nav-collapse .nav > li > a:hover, - .nav-collapse .dropdown-menu a:hover { + .nav-collapse .nav > li > a:focus, + .nav-collapse .dropdown-menu a:hover, + .nav-collapse .dropdown-menu a:focus { background-color: #f2f2f2; } .navbar-inverse .nav-collapse .nav > li > a, @@ -6023,7 +6225,9 @@ button.close { color: #999999; } .navbar-inverse .nav-collapse .nav > li > a:hover, - .navbar-inverse .nav-collapse .dropdown-menu a:hover { + .navbar-inverse .nav-collapse .nav > li > a:focus, + .navbar-inverse .nav-collapse .dropdown-menu a:hover, + .navbar-inverse .nav-collapse .dropdown-menu a:focus { background-color: #111111; } .nav-collapse.in .btn-group { diff --git a/module/web/static/css/default/dashboard.less b/module/web/static/css/default/dashboard.less index 1cd9a1bc5..2677b4035 100644 --- a/module/web/static/css/default/dashboard.less +++ b/module/web/static/css/default/dashboard.less @@ -113,6 +113,11 @@ text-shadow: none;
}
+ .tooltip {
+ text-shadow: none;
+ width: 100%;
+ }
+
}
// Tag area with different effect on hover
diff --git a/module/web/static/css/default/style.less b/module/web/static/css/default/style.less index 3e2a42abf..7c857227f 100644 --- a/module/web/static/css/default/style.less +++ b/module/web/static/css/default/style.less @@ -241,6 +241,7 @@ header .logo { line-height: 16px;
.popover { // display: block;
+ max-width: none;
width: 120%;
left: -60%; // Half of width
margin-left: 50%;
@@ -251,8 +252,12 @@ header .logo { color: @greyDark;
}
- i.icon-tasks {
+ .iconf-list {
cursor: pointer;
+
+ &:hover {
+ color: @yellow;
+ }
}
.close {
@@ -311,7 +316,6 @@ header .logo { .header-area {
display: none; // hidden by default
- overflow: hidden;
position: absolute;
line-height: 18px;
top: @header-height;
diff --git a/module/web/static/img/glyphicons-halflings-white.png b/module/web/static/img/glyphicons-halflings-white.png Binary files differindex 3bf6484a2..3bf6484a2 100644..100755 --- a/module/web/static/img/glyphicons-halflings-white.png +++ b/module/web/static/img/glyphicons-halflings-white.png diff --git a/module/web/static/img/glyphicons-halflings.png b/module/web/static/img/glyphicons-halflings.png Binary files differindex a99699932..a99699932 100644..100755 --- a/module/web/static/img/glyphicons-halflings.png +++ b/module/web/static/img/glyphicons-halflings.png diff --git a/module/web/static/js/config.js b/module/web/static/js/config.js index 0c0eac3fc..5bdfcf201 100644 --- a/module/web/static/js/config.js +++ b/module/web/static/js/config.js @@ -11,7 +11,7 @@ require.config({ animate: "libs/jquery.animate-enhanced-0.99", omniwindow: "libs/jquery.omniwindow", select2: "libs/select2-3.2", - bootstrap: "libs/bootstrap-2.2.2", + bootstrap: "libs/bootstrap-2.3", underscore: "libs/lodash-1.0.rc3", backbone: "libs/backbone-0.9.10", diff --git a/module/web/static/js/libs/bootstrap-2.2.2.js b/module/web/static/js/libs/bootstrap-2.3.js index 56621401c..09b812c4f 100755 --- a/module/web/static/js/libs/bootstrap-2.2.2.js +++ b/module/web/static/js/libs/bootstrap-2.3.js @@ -1,5 +1,5 @@ /* =================================================== - * bootstrap-transition.js v2.2.2 + * bootstrap-transition.js v2.3.0 * http://twitter.github.com/bootstrap/javascript.html#transitions * =================================================== * Copyright 2012 Twitter, Inc. @@ -59,7 +59,7 @@ }(window.jQuery); /* ========================================================= - * bootstrap-modal.js v2.2.2 + * bootstrap-modal.js v2.3.0 * http://twitter.github.com/bootstrap/javascript.html#modals * ========================================================= * Copyright 2012 Twitter, Inc. @@ -120,8 +120,7 @@ that.$element.appendTo(document.body) //don't move modals dom position } - that.$element - .show() + that.$element.show() if (transition) { that.$element[0].offsetWidth // force reflow @@ -199,12 +198,13 @@ }) } - , hideModal: function (that) { - this.$element - .hide() - .trigger('hidden') - - this.backdrop() + , hideModal: function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.removeBackdrop() + that.$element.trigger('hidden') + }) } , removeBackdrop: function () { @@ -232,6 +232,8 @@ this.$backdrop.addClass('in') + if (!callback) return + doAnimate ? this.$backdrop.one($.support.transition.end, callback) : callback() @@ -240,8 +242,8 @@ this.$backdrop.removeClass('in') $.support.transition && this.$element.hasClass('fade')? - this.$backdrop.one($.support.transition.end, $.proxy(this.removeBackdrop, this)) : - this.removeBackdrop() + this.$backdrop.one($.support.transition.end, callback) : + callback() } else if (callback) { callback() @@ -305,7 +307,7 @@ }(window.jQuery); /* ============================================================ - * bootstrap-dropdown.js v2.2.2 + * bootstrap-dropdown.js v2.3.0 * http://twitter.github.com/bootstrap/javascript.html#dropdowns * ============================================================ * Copyright 2012 Twitter, Inc. @@ -387,7 +389,10 @@ isActive = $parent.hasClass('open') - if (!isActive || (isActive && e.keyCode == 27)) return $this.click() + if (!isActive || (isActive && e.keyCode == 27)) { + if (e.which == 27) $parent.find(toggle).focus() + return $this.click() + } $items = $('[role=menu] li:not(.divider):visible a', $parent) @@ -421,8 +426,9 @@ selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 } - $parent = $(selector) - $parent.length || ($parent = $this.parent()) + $parent = selector && $(selector) + + if (!$parent || !$parent.length) $parent = $this.parent() return $parent } @@ -458,15 +464,16 @@ * =================================== */ $(document) - .on('click.dropdown.data-api touchstart.dropdown.data-api', clearMenus) - .on('click.dropdown touchstart.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) - .on('touchstart.dropdown.data-api', '.dropdown-menu', function (e) { e.stopPropagation() }) - .on('click.dropdown.data-api touchstart.dropdown.data-api' , toggle, Dropdown.prototype.toggle) - .on('keydown.dropdown.data-api touchstart.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) + .on('click.dropdown.data-api', clearMenus) + .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('.dropdown-menu', function (e) { e.stopPropagation() }) + .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) + .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) }(window.jQuery); + /* ============================================================= - * bootstrap-scrollspy.js v2.2.2 + * bootstrap-scrollspy.js v2.3.0 * http://twitter.github.com/bootstrap/javascript.html#scrollspy * ============================================================= * Copyright 2012 Twitter, Inc. @@ -526,7 +533,7 @@ , $href = /^#\w/.test(href) && $(href) return ( $href && $href.length - && [[ $href.position().top + self.$scrollElement.scrollTop(), href ]] ) || null + && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null }) .sort(function (a, b) { return a[0] - b[0] }) .each(function () { @@ -628,7 +635,7 @@ }(window.jQuery); /* ======================================================== - * bootstrap-tab.js v2.2.2 + * bootstrap-tab.js v2.3.0 * http://twitter.github.com/bootstrap/javascript.html#tabs * ======================================================== * Copyright 2012 Twitter, Inc. @@ -772,7 +779,7 @@ }(window.jQuery); /* =========================================================== - * bootstrap-tooltip.js v2.2.2 + * bootstrap-tooltip.js v2.3.0 * http://twitter.github.com/bootstrap/javascript.html#tooltips * Inspired by the original jQuery.tipsy by Jason Frame * =========================================================== @@ -811,19 +818,27 @@ , init: function (type, element, options) { var eventIn , eventOut + , triggers + , trigger + , i this.type = type this.$element = $(element) this.options = this.getOptions(options) this.enabled = true - if (this.options.trigger == 'click') { - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) - } else if (this.options.trigger != 'manual') { - eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus' - eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur' - this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) - this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + triggers = this.options.trigger.split(' ') + + for (i = triggers.length; i--;) { + trigger = triggers[i] + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' + eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } } this.options.selector ? @@ -832,7 +847,7 @@ } , getOptions: function (options) { - options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data()) + options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options) if (options.delay && typeof options.delay == 'number') { options.delay = { @@ -870,14 +885,16 @@ , show: function () { var $tip - , inside , pos , actualWidth , actualHeight , placement , tp + , e = $.Event('show') if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return $tip = this.tip() this.setContent() @@ -889,19 +906,18 @@ this.options.placement.call(this, $tip[0], this.$element[0]) : this.options.placement - inside = /in/.test(placement) - $tip .detach() .css({ top: 0, left: 0, display: 'block' }) - .insertAfter(this.$element) - pos = this.getPosition(inside) + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + + pos = this.getPosition() actualWidth = $tip[0].offsetWidth actualHeight = $tip[0].offsetHeight - switch (inside ? placement.split(' ')[1] : placement) { + switch (placement) { case 'bottom': tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} break @@ -916,13 +932,58 @@ break } - $tip - .offset(tp) - .addClass(placement) - .addClass('in') + this.applyPlacement(tp, placement) + this.$element.trigger('shown') } } + , applyPlacement: function(offset, placement){ + var $tip = this.tip() + , width = $tip[0].offsetWidth + , height = $tip[0].offsetHeight + , actualWidth + , actualHeight + , delta + , replace + + $tip + .offset(offset) + .addClass(placement) + .addClass('in') + + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + replace = true + } + + if (placement == 'bottom' || placement == 'top') { + delta = 0 + + if (offset.left < 0){ + delta = offset.left * -2 + offset.left = 0 + $tip.offset(offset) + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight + } + + this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') + } else { + this.replaceArrow(actualHeight - height, actualHeight, 'top') + } + + if (replace) $tip.offset(offset) + } + + , replaceArrow: function(delta, dimension, position){ + this + .arrow() + .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') + } + , setContent: function () { var $tip = this.tip() , title = this.getTitle() @@ -934,6 +995,10 @@ , hide: function () { var that = this , $tip = this.tip() + , e = $.Event('hide') + + this.$element.trigger(e) + if (e.isDefaultPrevented()) return $tip.removeClass('in') @@ -952,13 +1017,15 @@ removeWithAnimation() : $tip.detach() + this.$element.trigger('hidden') + return this } , fixTitle: function () { var $e = this.$element if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { - $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title') + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') } } @@ -966,11 +1033,12 @@ return this.getTitle() } - , getPosition: function (inside) { - return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), { - width: this.$element[0].offsetWidth - , height: this.$element[0].offsetHeight - }) + , getPosition: function () { + var el = this.$element[0] + return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { + width: el.offsetWidth + , height: el.offsetHeight + }, this.$element.offset()) } , getTitle: function () { @@ -988,6 +1056,10 @@ return this.$tip = this.$tip || $(this.options.template) } + , arrow: function(){ + return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") + } + , validate: function () { if (!this.$element[0].parentNode) { this.hide() @@ -1009,8 +1081,8 @@ } , toggle: function (e) { - var self = $(e.currentTarget)[this.type](this._options).data(this.type) - self[self.tip().hasClass('in') ? 'hide' : 'show']() + var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this + self.tip().hasClass('in') ? self.hide() : self.show() } , destroy: function () { @@ -1042,10 +1114,11 @@ , placement: 'top' , selector: false , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' - , trigger: 'hover' + , trigger: 'hover focus' , title: '' , delay: 0 , html: false + , container: false } @@ -1058,8 +1131,9 @@ } }(window.jQuery); + /* =========================================================== - * bootstrap-popover.js v2.2.2 + * bootstrap-popover.js v2.3.0 * http://twitter.github.com/bootstrap/javascript.html#popovers * =========================================================== * Copyright 2012 Twitter, Inc. @@ -1118,8 +1192,8 @@ , $e = this.$element , o = this.options - content = $e.attr('data-content') - || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) + content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) + || $e.attr('data-content') return content } @@ -1159,7 +1233,7 @@ placement: 'right' , trigger: 'click' , content: '' - , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"></div></div></div>' + , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' }) @@ -1172,8 +1246,9 @@ } }(window.jQuery); + /* ========================================================== - * bootstrap-affix.js v2.2.2 + * bootstrap-affix.js v2.3.0 * http://twitter.github.com/bootstrap/javascript.html#affix * ========================================================== * Copyright 2012 Twitter, Inc. @@ -1290,7 +1365,7 @@ }(window.jQuery); /* ========================================================== - * bootstrap-alert.js v2.2.2 + * bootstrap-alert.js v2.3.0 * http://twitter.github.com/bootstrap/javascript.html#alerts * ========================================================== * Copyright 2012 Twitter, Inc. @@ -1389,7 +1464,7 @@ }(window.jQuery); /* ============================================================ - * bootstrap-button.js v2.2.2 + * bootstrap-button.js v2.3.0 * http://twitter.github.com/bootstrap/javascript.html#buttons * ============================================================ * Copyright 2012 Twitter, Inc. @@ -1494,7 +1569,7 @@ }(window.jQuery); /* ============================================================= - * bootstrap-collapse.js v2.2.2 + * bootstrap-collapse.js v2.3.0 * http://twitter.github.com/bootstrap/javascript.html#collapse * ============================================================= * Copyright 2012 Twitter, Inc. @@ -1547,7 +1622,7 @@ , actives , hasData - if (this.transitioning) return + if (this.transitioning || this.$element.hasClass('in')) return dimension = this.dimension() scroll = $.camelCase(['scroll', dimension].join('-')) @@ -1567,7 +1642,7 @@ , hide: function () { var dimension - if (this.transitioning) return + if (this.transitioning || !this.$element.hasClass('in')) return dimension = this.dimension() this.reset(this.$element[dimension]()) this.transition('removeClass', $.Event('hide'), 'hidden') @@ -1624,7 +1699,7 @@ return this.each(function () { var $this = $(this) , data = $this.data('collapse') - , options = typeof option == 'object' && option + , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) if (!data) $this.data('collapse', (data = new Collapse(this, options))) if (typeof option == 'string') data[option]() }) @@ -1661,7 +1736,7 @@ }(window.jQuery); /* ========================================================== - * bootstrap-carousel.js v2.2.2 + * bootstrap-carousel.js v2.3.0 * http://twitter.github.com/bootstrap/javascript.html#carousel * ========================================================== * Copyright 2012 Twitter, Inc. @@ -1690,6 +1765,7 @@ var Carousel = function (element, options) { this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') this.options = options this.options.pause == 'hover' && this.$element .on('mouseenter', $.proxy(this.pause, this)) @@ -1700,19 +1776,24 @@ cycle: function (e) { if (!e) this.paused = false + if (this.interval) clearInterval(this.interval); this.options.interval && !this.paused && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) return this } + , getActiveIndex: function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + return this.$items.index(this.$active) + } + , to: function (pos) { - var $active = this.$element.find('.item.active') - , children = $active.parent().children() - , activePos = children.index($active) + var activeIndex = this.getActiveIndex() , that = this - if (pos > (children.length - 1) || pos < 0) return + if (pos > (this.$items.length - 1) || pos < 0) return if (this.sliding) { return this.$element.one('slid', function () { @@ -1720,11 +1801,11 @@ }) } - if (activePos == pos) { + if (activeIndex == pos) { return this.pause().cycle() } - return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos])) + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) } , pause: function (e) { @@ -1765,10 +1846,19 @@ e = $.Event('slide', { relatedTarget: $next[0] + , direction: direction }) if ($next.hasClass('active')) return + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + if ($.support.transition && this.$element.hasClass('slide')) { this.$element.trigger(e) if (e.isDefaultPrevented()) return @@ -1813,7 +1903,7 @@ if (!data) $this.data('carousel', (data = new Carousel(this, options))) if (typeof option == 'number') data.to(option) else if (action) data[action]() - else if (options.interval) data.cycle() + else if (options.interval) data.pause().cycle() }) } @@ -1836,17 +1926,24 @@ /* CAROUSEL DATA-API * ================= */ - $(document).on('click.carousel.data-api', '[data-slide]', function (e) { + $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { var $this = $(this), href , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 , options = $.extend({}, $target.data(), $this.data()) + , slideIndex + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('carousel').pause().to(slideIndex).cycle() + } + e.preventDefault() }) }(window.jQuery); /* ============================================================= - * bootstrap-typeahead.js v2.2.2 + * bootstrap-typeahead.js v2.3.0 * http://twitter.github.com/bootstrap/javascript.html#typeahead * ============================================================= * Copyright 2012 Twitter, Inc. @@ -2019,6 +2116,7 @@ , listen: function () { this.$element + .on('focus', $.proxy(this.focus, this)) .on('blur', $.proxy(this.blur, this)) .on('keypress', $.proxy(this.keypress, this)) .on('keyup', $.proxy(this.keyup, this)) @@ -2030,6 +2128,7 @@ this.$menu .on('click', $.proxy(this.click, this)) .on('mouseenter', 'li', $.proxy(this.mouseenter, this)) + .on('mouseleave', 'li', $.proxy(this.mouseleave, this)) } , eventSupported: function(eventName) { @@ -2103,22 +2202,33 @@ e.preventDefault() } + , focus: function (e) { + this.focused = true + } + , blur: function (e) { - var that = this - setTimeout(function () { that.hide() }, 150) + this.focused = false + if (!this.mousedover && this.shown) this.hide() } , click: function (e) { e.stopPropagation() e.preventDefault() this.select() + this.$element.focus() } , mouseenter: function (e) { + this.mousedover = true this.$menu.find('.active').removeClass('active') $(e.currentTarget).addClass('active') } + , mouseleave: function (e) { + this.mousedover = false + if (!this.focused && this.shown) this.hide() + } + } @@ -2163,7 +2273,6 @@ $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { var $this = $(this) if ($this.data('typeahead')) return - e.preventDefault() $this.typeahead($this.data()) }) diff --git a/module/web/static/js/utils/animations.js b/module/web/static/js/utils/animations.js index 789359e0c..ea06669b3 100644 --- a/module/web/static/js/utils/animations.js +++ b/module/web/static/js/utils/animations.js @@ -44,7 +44,7 @@ define(['jquery', 'underscore', 'transit'], function(jQuery, _) { }; // calculate the height and write it to data, better used on invisible elements - jQuery.fn.calculateHeight = function() { + jQuery.fn.calculateHeight = function(setHeight) { var o = jQuery(this[0]); var height = o.height(); if (!height) { @@ -57,6 +57,9 @@ define(['jquery', 'underscore', 'transit'], function(jQuery, _) { o.css('visibility', ''); } + if (setHeight) + o.css('height', height); + o.data('height', height); return this; }; @@ -78,7 +81,11 @@ define(['jquery', 'underscore', 'transit'], function(jQuery, _) { placement || (placement = 'top'); var o = jQuery(this[0]); - o.find('[data-toggle="tooltip"]').tooltip({delay: {show: 500, hide: 100}, placement: placement}); + o.find('[data-toggle="tooltip"]').tooltip( + { + delay: {show: 800, hide: 100}, + placement: placement + }); return this; }; diff --git a/module/web/static/js/views/headerView.js b/module/web/static/js/views/headerView.js index 43c66b99f..cfceca6cd 100644 --- a/module/web/static/js/views/headerView.js +++ b/module/web/static/js/views/headerView.js @@ -5,7 +5,7 @@ define(['jquery', 'underscore', 'backbone', 'flot'], function($, _, Backbone) { el: 'header', events: { - 'click i.icon-tasks': 'show_taskList', + 'click i.iconf-list': 'toggle_taskList', 'click .popover .close': 'hide_taskList', 'click .btn-grabber': 'open_grabber' }, @@ -17,8 +17,8 @@ define(['jquery', 'underscore', 'backbone', 'flot'], function($, _, Backbone) { initialize: function() { - this.notifications = this.$('#notification-area').calculateHeight(); - this.selections = this.$('#selection-area').calculateHeight(); + this.notifications = this.$('#notification-area').calculateHeight().height(0); + this.selections = this.$('#selection-area').calculateHeight().height(0); var totalPoints = 100; var data = []; @@ -81,8 +81,8 @@ define(['jquery', 'underscore', 'backbone', 'flot'], function($, _, Backbone) { render: function() { }, - show_taskList: function() { - this.$('.popover').fadeIn(); + toggle_taskList: function() { + this.$('.popover').animate({opacity: 'toggle'}); }, hide_taskList: function() { diff --git a/module/web/templates/default/base.html b/module/web/templates/default/base.html index ad1480648..fddbf219c 100644 --- a/module/web/templates/default/base.html +++ b/module/web/templates/default/base.html @@ -83,7 +83,7 @@ <div id="progress-area" style="margin-top: 16px">
No running tasks
- <i class="icon-white icon-tasks pull-right"></i>
+ <i class="icon-white iconf-list pull-right"></i>
<div class="progress" id="globalprogress">
<div class="bar" style="width: 48%">48%</div>
|