From: Kenneth Keiter <kenkeiter(a)redhat.com>
Implemented expandable pool "pretty view" bar. Fixed
alerting on the pools pretty page.
---
src/app/stylesheets/layout.scss | 709 ++++++++++++++++++-
src/app/views/pools/_alerts_index.haml | 20 +-
src/app/views/pools/_pretty_list.haml | 75 ++-
src/app/views/pools/index.haml | 11 +-
src/public/images/alert_icon_critical.png | Bin 0 -> 337 bytes
src/public/images/alert_icon_warn.png | Bin 0 -> 364 bytes
src/public/images/alert_icon_warn_white.png | Bin 0 -> 329 bytes
.../images/header_icon_provider-accounts.png | Bin 0 -> 662 bytes
src/public/images/header_icon_provider.png | Bin 0 -> 505 bytes
src/public/images/header_icon_providers.png | Bin 0 -> 505 bytes
src/public/images/header_icon_roles.png | Bin 0 -> 1274 bytes
src/public/images/header_icon_settings.png | Bin 0 -> 666 bytes
src/public/images/header_icon_users.png | Bin 0 -> 649 bytes
src/public/images/pool_bar_expand-btn.png | Bin 0 -> 2799 bytes
src/public/images/pool_bar_icon-normal.png | Bin 0 -> 386 bytes
src/public/images/pool_bar_name-bg-alert.png | Bin 0 -> 842 bytes
src/public/images/pool_bar_name-bg-normal.png | Bin 0 -> 750 bytes
src/public/images/pool_bar_prop-gradient.png | Bin 0 -> 229 bytes
src/public/images/section-border.png | Bin 0 -> 193 bytes
19 files changed, 731 insertions(+), 84 deletions(-)
create mode 100644 src/public/images/alert_icon_critical.png
create mode 100644 src/public/images/alert_icon_warn.png
create mode 100644 src/public/images/alert_icon_warn_white.png
create mode 100644 src/public/images/header_icon_provider-accounts.png
create mode 100644 src/public/images/header_icon_provider.png
create mode 100644 src/public/images/header_icon_providers.png
create mode 100644 src/public/images/header_icon_roles.png
create mode 100644 src/public/images/header_icon_settings.png
create mode 100644 src/public/images/header_icon_users.png
create mode 100644 src/public/images/pool_bar_expand-btn.png
create mode 100644 src/public/images/pool_bar_icon-normal.png
create mode 100644 src/public/images/pool_bar_name-bg-alert.png
create mode 100644 src/public/images/pool_bar_name-bg-normal.png
create mode 100644 src/public/images/pool_bar_prop-gradient.png
create mode 100644 src/public/images/section-border.png
diff --git a/src/app/stylesheets/layout.scss b/src/app/stylesheets/layout.scss
index 6068db0..419cd81 100644
--- a/src/app/stylesheets/layout.scss
+++ b/src/app/stylesheets/layout.scss
@@ -1,6 +1,6 @@
/* ###########################################################################
Generated SCSS for Aeolus UI [aeolus_ui]
-Compiled on 2011-06-05 21:07:09 -0700
+Compiled on 2011-06-06 20:38:44 -0700
########################################################################### */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -642,7 +642,7 @@ $font-family-primary: Helvetica, Arial, "Lucida Grande",
sans-serif;
html, body{ height: 100%; }
body{
- background: url('/../../images/body-bg.png');
+ background: url('/images/body-bg.png');
font-family: $font-family-base;
font-size: 12px; /* 12px base */
color: #333;
@@ -777,7 +777,7 @@
http://github.com/necolas/css3-github-buttons
width: 12px;
height: 12px;
margin: 0 0.75em 0 -0.25em;
- background: url(/../../images/button-icons.png) 0 99px no-repeat;
+ background: url(/images/button-icons.png) 0 99px no-repeat;
}
.button.arrowup.icon:before { background-position: 0 0; }
@@ -1117,15 +1117,75 @@ div.query-input input[type="text"]{
div.query-input input[type="submit"]{
display:inline;
- background: transparent url('/../../images/button-search.png') no-repeat left
center;
+ background: transparent url('/images/button-search.png') no-repeat left
center;
color: transparent;
border: 0px;
width: 25px; height: 25px;
margin-left: -25px;
outline: none;
cursor: pointer;
- &:hover{ background: transparent
url('/../../images/button-search-over.png') no-repeat left center; }
- &:active{ background: transparent
url('/../../images/button-search-down.png') no-repeat left center; }
+ &:hover{ background: transparent url('/images/button-search-over.png')
no-repeat left center; }
+ &:active{ background: transparent url('/images/button-search-down.png')
no-repeat left center; }
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Textual Labels -- v.0.0.1 [label] (label.scss)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+$font-family-base: "Lucida Sans Unicode", "Lucida Grande", Verdana,
Arial, Helvetica, sans-serif;
+$font-family-em: "Lucida Sans", "Lucida Sans Unicode", "Lucida
Grande", Verdana, Arial, Helvetica, sans-serif;
+$font-family-primary: "Helvetica Neue", Helvetica, Arial, "Lucida
Grande", sans-serif;
+
+.label{
+ font-family: $font-family-base;
+ font-size: 12px;
+}
+
+.label.micro{ font-size: 9px; }
+.label.small{ font-size: 11px; }
+
+.label.invert{
+ color: #fff;
+}
+
+.label.light{
+ font-weight: normal;
+ color: #666;
+}
+
+.label.strong{
+ font-weight: bold;
+ color: #333;
+}
+
+.label.caps{
+ text-transform: uppercase;
+}
+
+.label.badge{
+ display: inline-block;
+ -webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px;
+ background-color: #efefef;
+ border: 1px solid transparent;
+ padding: 0px 4px 0px 4px;
+ min-width: 10px;
+ font-size: 11px;
+ color: #000;
+ font-family: $font-family-primary;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.50);
+ -moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.50);
+ -webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.50);
+ text-align: center;
+}
+
+.label.badge.alert{
+ background-color: #c00;
+ color: #fff;
+}
+
+.label.badge.dark{
+ color: #fff;
+ background: #333;
}
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1135,7 +1195,7 @@ App Masthead -- v.0.0.2 [masthead] (masthead.scss)
header#masthead{
height: 49px;
background-color: #E7E7E7;
- background: url('/../../images/masthead-bg.png') repeat-x;
+ background: url('/images/masthead-bg.png') repeat-x;
position: relative;
img#logo{
@@ -1152,9 +1212,9 @@ header#masthead{
a.user-dropdown{
border: 1px solid #ccc;
- background: url('/../../images/button-userdrop.png') no-repeat center
center;
- background: url('/../../images/button-userdrop.png') no-repeat center center,
-moz-linear-gradient(top, rgba(239,239,239,0), rgba(204,204,204,0));
- background: url('/../../images/button-userdrop.png') no-repeat center center,
-webkit-gradient(linear,left top,left bottom,color-stop(0, rgb(239,239,239)),color-stop(1,
rgb(204,204,204)));
+ background: url('/images/button-userdrop.png') no-repeat center center;
+ background: url('/images/button-userdrop.png') no-repeat center center,
-moz-linear-gradient(top, rgba(239,239,239,0), rgba(204,204,204,0));
+ background: url('/images/button-userdrop.png') no-repeat center center,
-webkit-gradient(linear,left top,left bottom,color-stop(0, rgb(239,239,239)),color-stop(1,
rgb(204,204,204)));
width: 46px;
margin-left: 4px;
padding: 5px 2px 5px 2px;
@@ -1162,9 +1222,9 @@ header#masthead{
font-size: 12px; /* match the font-size of the query box, for proper valign */
&:active{
- background: url('/../../images/button-userdrop.png') no-repeat center
center;
- background: url('/../../images/button-userdrop.png') no-repeat center
center, -moz-linear-gradient(top, rgba(232,232,232,0), rgba(210,210,210,0));
- background: url('/../../images/button-userdrop.png') no-repeat center
center, -webkit-gradient(linear,left top,left bottom,color-stop(0,
rgb(232,232,232)),color-stop(1, rgb(210,210,210)));
+ background: url('/images/button-userdrop.png') no-repeat center center;
+ background: url('/images/button-userdrop.png') no-repeat center center,
-moz-linear-gradient(top, rgba(232,232,232,0), rgba(210,210,210,0));
+ background: url('/images/button-userdrop.png') no-repeat center center,
-webkit-gradient(linear,left top,left bottom,color-stop(0, rgb(232,232,232)),color-stop(1,
rgb(210,210,210)));
}
}
@@ -1177,7 +1237,7 @@ header#masthead{
li{ display: inline; }
li + li{ margin-left: 10px; }
li.separator{
- background: url('/../../images/masthead-nav-separator.gif') no-repeat
left top;
+ background: url('/images/masthead-nav-separator.gif') no-repeat left
top;
padding: 8px 1px 8px 1px;
}
}
@@ -1261,13 +1321,13 @@ nav#primary {
float: left;
position: relative;
display: inline-block;
- background: url('/../../images/tab-inactive-right.png') no-repeat right
top;
+ background: url('/images/tab-inactive-right.png') no-repeat right top;
height: 34px;
margin-right: 6px;
z-index: 1;
a{
display: block;
- background:url('/../../images/tab-inactive-left.png') no-repeat left
top;
+ background:url('/images/tab-inactive-left.png') no-repeat left top;
padding: 10px 16px 14px 16px;
margin-left: -11px;
font-family: $font-family-nav-primary;
@@ -1282,11 +1342,11 @@ nav#primary {
}
li.active{
margin-top: -5px;
- background: url('/../../images/tab-active-right.png') no-repeat right top;
+ background: url('/images/tab-active-right.png') no-repeat right top;
z-index: 1000;
height: 43px;
a{
- background:url('/../../images/tab-active-left.png') no-repeat left top;
+ background:url('/images/tab-active-left.png') no-repeat left top;
padding: 12px 20px 12px 20px;
font-size: 16px;
color: #666;
@@ -1347,7 +1407,7 @@ div#content .page-header{
padding: 6px;
position: relative;
z-index: 900;
- background: transparent url('/../../images/header_bg.png') repeat-x top
center;
+ background: transparent url('/images/header_bg.png') repeat-x top center;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.40);
-moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.40);
@@ -1365,32 +1425,32 @@ div#content .page-header{
}
h1.pools{
- background: transparent url('/../../images/header_icon_pools.png') no-repeat
8px center;
+ background: transparent url('/images/header_icon_pools.png') no-repeat 8px
center;
}
h1.section-index{
- background: transparent url('/../../images/header_icon_section-index.png')
no-repeat 8px center;
+ background: transparent url('/images/header_icon_section-index.png')
no-repeat 8px center;
}
h1.users{
- background: transparent url('/../../images/header_icon_users.png') no-repeat
8px center;
+ background: transparent url('/images/header_icon_users.png') no-repeat 8px
center;
}
h1.roles{
- background: transparent url('/../../images/header_icon_roles.png') no-repeat
8px center;
+ background: transparent url('/images/header_icon_roles.png') no-repeat 8px
center;
}
h1.providers{
- background: transparent url('/../../images/header_icon_providers.png')
no-repeat 8px center;
+ background: transparent url('/images/header_icon_providers.png') no-repeat
8px center;
}
h1.provider-accounts{
- background: transparent
url('/../../images/header_icon_provider-accounts.png') no-repeat 8px center;
+ background: transparent url('/images/header_icon_provider-accounts.png')
no-repeat 8px center;
padding: 6px 7px 7px 60px;
}
h1.settings{
- background: transparent url('/../../images/header_icon_settings.png')
no-repeat 8px center;
+ background: transparent url('/images/header_icon_settings.png') no-repeat 8px
center;
}
#obj_actions{
@@ -1402,7 +1462,7 @@ div#content .page-header{
}
.corner{
- background: transparent url('/../../images/header_corner.png') no-repeat top
center;
+ background: transparent url('/images/header_corner.png') no-repeat top
center;
width: 10px;
height: 10px;
position: absolute;
@@ -1440,7 +1500,7 @@ $dd_icon_padding_right: 4px;
margin: 0px;
}
ul.groups > li + li{
- background: transparent url('/../../images/sb_separator.png') repeat-y 0px
0px;
+ background: transparent url('/images/sb_separator.png') repeat-y 0px 0px;
padding-left: 2px;
margin-left: -6px;
}
@@ -1475,58 +1535,631 @@ $dd_icon_padding_right: 4px;
/* icons */
dd.pool{
- background: transparent url('/../../images/sb_icon_pool.png') no-repeat
$dd_padding 4px;
+ background: transparent url('/images/sb_icon_pool.png') no-repeat $dd_padding
4px;
padding-left: ($dd_padding + $dd_icon_padding_right) + 15px;
}
dd.pool.partial{
- background: transparent url('/../../images/sb_icon_poolsemi.png') no-repeat
$dd_padding 4px;
+ background: transparent url('/images/sb_icon_poolsemi.png') no-repeat
$dd_padding 4px;
padding-left: ($dd_padding + $dd_icon_padding_right) + 15px;
}
dd.provider{
- background: transparent url('/../../images/sb_icon_provider.png') no-repeat
$dd_padding 4px;
+ background: transparent url('/images/sb_icon_provider.png') no-repeat
$dd_padding 4px;
padding-left: ($dd_padding + $dd_icon_padding_right) + 22px;
}
dd.deployment{
- background: transparent url('/../../images/sb_icon_deployment.png') no-repeat
$dd_padding 4px;
+ background: transparent url('/images/sb_icon_deployment.png') no-repeat
$dd_padding 4px;
padding-left: ($dd_padding + $dd_icon_padding_right) + 23px;
}
dd.instance{
- background: transparent url('/../../images/sb_icon_instance.png') no-repeat
$dd_padding 4px;
+ background: transparent url('/images/sb_icon_instance.png') no-repeat
$dd_padding 4px;
padding-left: ($dd_padding + $dd_icon_padding_right) + 14px;
}
dd.instance.pending{
- background: transparent url('/../../images/sb_icon_instance_pending.png')
no-repeat $dd_padding 4px;
+ background: transparent url('/images/sb_icon_instance_pending.png') no-repeat
$dd_padding 4px;
padding-left: ($dd_padding + $dd_icon_padding_right) + 15px;
}
dd.instance.failure{
- background: transparent url('/../../images/sb_icon_instance_failure.png')
no-repeat $dd_padding 4px;
+ background: transparent url('/images/sb_icon_instance_failure.png') no-repeat
$dd_padding 4px;
padding-left: ($dd_padding + $dd_icon_padding_right) + 16px;
}
dd.alert{
- background: transparent url('/../../images/sb_icon_alert.png') no-repeat
$dd_padding 4px;
+ background: transparent url('/images/sb_icon_alert.png') no-repeat
$dd_padding 4px;
padding-left: ($dd_padding + $dd_icon_padding_right) + 29px;
}
dd.update{
- background: transparent url('/../../images/sb_icon_update.png') no-repeat
$dd_padding 4px;
+ background: transparent url('/images/sb_icon_update.png') no-repeat
$dd_padding 4px;
padding-left: ($dd_padding + $dd_icon_padding_right) + 14px;
}
dd.quota{
- background: transparent url('/../../images/sb_icon_quota.png') no-repeat
$dd_padding 4px;
+ background: transparent url('/images/sb_icon_quota.png') no-repeat
$dd_padding 4px;
padding-left: ($dd_padding + $dd_icon_padding_right) + 16px;
}
}
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Content Section Container -- v.0.0.1 [section] (section.scss)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+$font-family-base: "Lucida Sans Unicode", "Lucida Grande", Verdana,
Arial, Helvetica, sans-serif;
+$font-family-em: "Lucida Sans", "Lucida Sans Unicode", "Lucida
Grande", Verdana, Arial, Helvetica, sans-serif;
+$font-family-primary: Helvetica, Arial, "Lucida Grande", sans-serif;
+
+header.page-header + section.content-section{ margin-bottom: 36px; }
+#scoreboard + section.content-section{ margin-top: 36px; }
+section.content-section + section.content-section{ margin-top: 36px; }
+
+section.content-section{
+ padding: 4px;
+ margin-bottom: 36px;
+
+ /* Header code */
+ header{
+ background: transparent url('/images/section-border.png') repeat-x bottom
left;
+ position: relative;
+ h2{
+ font-family: $font-family-primary;
+ font-size: 21px;
+ font-weight: 200;
+ display: inline-block;
+ margin-bottom: 4px;
+ }
+ .badge{
+ vertical-align: 2px;
+ bottom: 4px;
+ }
+ .section-controls{
+ position: absolute;
+ right: 0px;
+ bottom: 4px;
+ display: inline-block;
+ font-size: 11px;
+
+ a.collapse{
+ text-decoration: none;
+ color: #666;
+ }
+ }
+
+ /* nav */
+ nav.faceted{
+ ul{ list-style: none; display: inline-block; font-family: $font-family-primary; }
+ li{ display: inline-block; margin-bottom: 1px; }
+ li + li{ margin-left: 40px; }
+ a{
+ display: inline-block;
+ padding-bottom: 6px;
+ text-decoration: none;
+ color: #666;
+ font-weight: 200;
+ }
+ a.active{
+ border-bottom: 4px solid #0084b7;
+ font-weight: bold;
+ color: #000;
+ }
+ }
+ }
+
+ /* Content */
+
+ .content{
+ margin-top: 10px;
+ }
+
+ .content.tight{
+ margin-top: 0px;
+ }
+
+ /* Deployment Array */
+
+ ul.deployable-cards{
+ margin-top: 16px;
+ list-style: none;
+ }
+
+ ul.deployable-cards > li{
+ display: inline-block;
+ }
+
+ ul.deployable-cards > li + li{
+ margin-left: 26px;
+ }
+
+ div.deployable{
+ background-color: #e5e5e5;
+ -webkit-border-radius: 7px; -moz-border-radius: 7px; border-radius: 7px;
+ border: 1px solid #ccc;
+ width: 154px;
+ height: 154px;
+ font-family: $font-family-primary;
+
+ h3{
+ font-size: 13px;
+ font-weight: 200;
+ color: #333;
+ padding: 6px;
+ display: block;
+ }
+
+ hr{
+ background-image: url('/images/deploy_separator_dark.png') repeat-x bottom
left;
+ display: block;
+ height: 2px;
+ }
+
+ span.alert{
+ display: block;
+ margin: 10px;
+ font-size: 13px;
+ font-weight: 200;
+ color: #fff;
+ }
+
+ span.alert.warn{
+ padding-left: 24px;
+ background: transparent url('/images/alert_icon_warn_white.png') no-repeat
6px 0px;
+ }
+
+ ul.statistics{
+ list-style: none;
+ margin: 8px;
+ li{
+ display: block;
+
+ span.uptime{
+ display: inline-block;
+ font-size: 14px;
+ height: 16px;
+ padding: 2px;
+ padding-left: 24px;
+ color: #fff;
+ background: transparent url('/images/deploy_icon_uptime.png') no-repeat
6px 0px;
+ }
+
+ span.instance{
+ display: inline-block;
+ height: 16px;
+ padding: 2px;
+ padding-left: 24px;
+ font-size: 14px;
+ color: #fff;
+ background: transparent url('/images/deploy_icon_instance.png')
no-repeat 6px 0px;
+ }
+
+ }
+ li + li{
+ margin-top: 6px;
+ }
+ }
+
+ span.provider{
+ display: block;
+ margin: 10px;
+ font-size: 13px;
+ font-weight: 200;
+ color: #fff;
+ padding-left: 34px;
+ background: transparent url('/images/deploy_icon_provider.png') no-repeat
6px 0px;
+ }
+ }
+
+ div.deployable.alert{
+ background-image: -moz-linear-gradient(top, rgba(174,4,4,1), rgba(136,0,0, 1));
+ background-image: -webkit-gradient(linear, left top, left bottom,
from(rgba(174,4,4,1)), to(rgba(136,0,0, 1)));
+ -webkit-border-radius: 7px; -moz-border-radius: 7px; border-radius: 7px;
+ border: 1px solid #990000;
+ width: 154px;
+ height: 154px;
+ font-family: $font-family-primary;
+
+ h3{
+ font-size: 13px;
+ font-weight: 200;
+ color: #fff;
+ padding: 6px;
+ display: block;
+ background-color: #A10303;
+ }
+
+ hr{
+ background-image: url('/images/deploy_separator_dark.png') repeat-x bottom
left;
+ display: block;
+ height: 2px;
+ }
+
+ span.alert{
+ display: block;
+ margin: 10px;
+ font-size: 13px;
+ font-weight: 200;
+ color: #fff;
+ }
+
+ span.alert.warn{
+ padding-left: 24px;
+ background: transparent url('/images/alert_icon_warn_white.png') no-repeat
6px 0px;
+ }
+
+ ul.statistics{
+ list-style: none;
+ margin: 8px;
+ li{
+ display: block;
+
+ span.uptime{
+ display: inline-block;
+ font-size: 14px;
+ height: 16px;
+ padding: 2px;
+ padding-left: 24px;
+ color: #fff;
+ background: transparent url('/images/deploy_icon_uptime.png') no-repeat
6px 0px;
+ }
+
+ span.instance{
+ display: inline-block;
+ height: 16px;
+ padding: 2px;
+ padding-left: 24px;
+ font-size: 14px;
+ color: #fff;
+ background: transparent url('/images/deploy_icon_instance.png')
no-repeat 6px 0px;
+ }
+
+ }
+ li + li{
+ margin-top: 6px;
+ }
+ }
+
+ span.provider{
+ display: block;
+ margin: 10px;
+ font-size: 13px;
+ font-weight: 200;
+ color: #fff;
+ padding-left: 34px;
+ background: transparent url('/images/deploy_icon_provider.png') no-repeat
6px 0px;
+ }
+
+ }
+
+}
+
+section.content-section + section.content-section {
+ margin-top: 36px;
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Alert Components -- v.0.0.1 [alert] (alert.scss)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+$font-family-base: "Lucida Sans Unicode", "Lucida Grande", Verdana,
Arial, Helvetica, sans-serif;
+$font-family-em: "Lucida Sans", "Lucida Sans Unicode", "Lucida
Grande", Verdana, Arial, Helvetica, sans-serif;
+$font-family-primary: Helvetica, Arial, "Lucida Grande", sans-serif;
+
+.content.closed{
+ border-bottom: 1px solid #efefef;
+}
+
+$alert_padding: 8px;
+
+/* Alerts list */
+dl.alerts{
+
+ font-family: $font-family-base;
+
+ ul{
+ list-style: none;
+ display: table;
+ width: 100%;
+ }
+
+ li.alert{
+
+ display: table-row;
+ height: 14px;
+ width: 100%;
+
+ dt{
+ display: table-cell;
+ padding: $alert_padding;
+ }
+
+ dt.subject{
+ font-family: $font-family-primary;
+ font-size: 13px;
+ color: #333;
+ }
+
+ dt.subject.warn{
+ padding-left: $alert_padding*2 + 14px;
+ background: transparent url('/images/alert_icon_warn.png') no-repeat
$alert_padding 8px;
+ }
+
+ dt.subject.critical{
+ padding-left: $alert_padding*2 + 16px;
+ background: transparent url('/images/alert_icon_critical.png') no-repeat
$alert_padding 7px;
+ }
+
+ dd{
+ display: table-cell;
+ padding: $alert_padding;
+ }
+
+ dd.type{
+ font-family: $font-family-primary;
+ font-size: 13px;
+ font-weight: 200;
+ color: #666;
+ padding-left: 10px;
+ }
+
+ dd.desc{
+ font-family: $font-family-base;
+ font-size: 11px;
+ color: #999;
+ padding-left: 10px;
+ }
+
+ }
+
+ li.alert + li.alert{
+ dt{border-top: 1px solid #efefef;}
+ dd{border-top: 1px solid #efefef;}
+ }
+
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Pool Components -- v.0.0.1 [pool] (pool.scss)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+$font-family-primary: Helvetica, Arial, "Lucida Grande", sans-serif;
+$dd_padding: 10px;
+$dd_icon_padding_right: 4px;
+$bar_height: 37px;
+
+div.pool.overview{
+
+ header{
+ position: relative;
+ height: $bar_height;
+ width: 100%;
+ background-color: #e5e5e5;
+ -webkit-border-radius: 7px; -moz-border-radius: 7px; border-radius: 7px;
+ border: 1px solid #bcbcbc;
+
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.20);
+ -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.20);
+ -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.20);
+
+ h3.name{
+ display: block;
+ float: left;
+ width: 230px;
+ height: $bar_height;
+ background: transparent url('/images/pool_bar_name-bg-normal.png')
no-repeat 0px 0px;
+ border-right: 1px solid #a9a9a9;
+ vertical-align: top;
+
+ a{
+ display: block;
+ text-decoration: none;
+ padding: 9px;
+ padding-left: 30px;
+ font-family: $font-family-primary;
+ font-size: 17px;
+ color: #666;
+ &:hover{color: #333;}
+ }
+ /* text-shadow: -1px -1px 1px rgba(0,0,0,0.3); */
+ }
+
+ a.control{
+ display: block;
+ float: right;
+ position: absolute;
+ outline: 0;
+ top: 0;
+ right: 0;
+ text-align: left;
+ margin: 5px 5px;
+ float: right;
+ font-size: 11px;
+ color: transparent;
+ height: 28px;
+ width: 28px;
+ background: transparent url('/images/pool_bar_expand-btn.png') no-repeat
0px -56px;
+ &:active{
+ background-position: 0px -84px;
+ };
+
+ span{
+ position: absolute;
+ top: -999em;
+ }
+ }
+
+ dl.statistics{
+ display: inline-block;
+ height: $bar_height;
+ background: transparent url('/images/pool_bar_prop-gradient.png') repeat-y
0px 0px;
+ }
+
+ /* statistic group list */
+ ul.groups{ list-style: none; padding: 7px; }
+ ul.groups > li{
+ display: inline-block;
+ text-align: center;
+ margin: 0px;
+ }
+ ul.groups > li + li{
+ background: transparent url('/images/sb_separator.png') repeat-y 0px 0px;
+ padding-left: $dd_padding;
+ margin-left: -6px;
+ }
+
+ /* statistic sub-group list */
+ ul.subgroup{ list-style: none; }
+ ul.subgroup > li{ display: inline-block; text-align: center; }
+ ul.subgroup > li + li{ margin-left: -$dd_padding; }
+
+ dt{
+ display: inline;
+ font-size: 11px;
+ font-weight: normal;
+ color: #999;
+ text-transform: uppercase;
+ padding: 0px 0px 0px 0px;
+ }
+
+ dd{
+ display: inline;
+ padding: 0px $dd_padding 0px $dd_padding;
+ font-size: 20px;
+ color: #999;
+ font-family: $font-family-primary;
+ vertical-align: middle;
+ }
+
+ dd + dd{
+ margin-left: -$dd_padding; /* compensate for padding-right */
+ }
+
+ /* icons */
+
+ $icon_y: 2px;
+
+ dd.pool{
+ background: transparent url('/images/sb_icon_pool.png') no-repeat
$dd_padding $icon_y;
+ padding-left: ($dd_padding + $dd_icon_padding_right) + 15px;
+ }
+
+ dd.pool.partial{
+ background: transparent url('/images/sb_icon_poolsemi.png') no-repeat
$dd_padding $icon_y;
+ padding-left: ($dd_padding + $dd_icon_padding_right) + 15px;
+ }
+
+ dd.provider{
+ background: transparent url('/images/sb_icon_provider.png') no-repeat
$dd_padding $icon_y;
+ padding-left: ($dd_padding + $dd_icon_padding_right) + 22px;
+ }
+
+ dd.deployment{
+ background: transparent url('/images/sb_icon_deployment.png') no-repeat
$dd_padding $icon_y;
+ padding-left: ($dd_padding + $dd_icon_padding_right) + 23px;
+ }
+
+ dd.instance{
+ background: transparent url('/images/sb_icon_instance.png') no-repeat
$dd_padding $icon_y;
+ padding-left: ($dd_padding + $dd_icon_padding_right) + 14px;
+ }
+
+ dd.instance.pending{
+ background: transparent url('/images/sb_icon_instance_pending.png')
no-repeat $dd_padding $icon_y;
+ padding-left: ($dd_padding + $dd_icon_padding_right) + 15px;
+ }
+
+ dd.instance.failure{
+ background: transparent url('/images/sb_icon_instance_failure.png')
no-repeat $dd_padding $icon_y;
+ padding-left: ($dd_padding + $dd_icon_padding_right) + 16px;
+ }
+
+ dd.alert{
+ background: transparent url('/images/sb_icon_alert.png') no-repeat
$dd_padding $icon_y;
+ padding-left: ($dd_padding + $dd_icon_padding_right) + 29px;
+ }
+
+ dd.update{
+ background: transparent url('/images/sb_icon_update.png') no-repeat
$dd_padding $icon_y;
+ padding-left: ($dd_padding + $dd_icon_padding_right) + 14px;
+ }
+
+ dd.quota{
+ background: transparent url('/images/sb_icon_quota.png') no-repeat
$dd_padding $icon_y;
+ padding-left: ($dd_padding + $dd_icon_padding_right) + 16px;
+ }
+
+ }
+
+ ul.actions{
+ list-style: none;
+ display: block;
+ text-align: right;
+ width: 100%;
+ margin: 10px 0px 0px 0px;
+ font-size: 11px;
+
+ li{
+ display: inline-block;
+ }
+ li + li{
+ margin-left: 14px;
+ }
+ }
+
+}
+
+div.pool.overview.alert{
+ header{
+ h3.name{ background: transparent url('/images/pool_bar_name-bg-alert.png')
no-repeat 0px 0px; }
+ h3.name a{
+ color: #FF6666;
+ &:hover{ color: #ff0000;};
+ }
+ }
+}
+
+div.pool.overview.collapsed{
+
+ header{
+ box-shadow: none;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ border: 1px solid #ccc;
+
+ a.control{
+ background-position: 0px -0px;
+ &:active{background-position: 0px -28px;}
+ &:hover{color: #333;}
+ }
+
+ }
+ .content{ display: none; }
+}
+
+div.pool.overview + div.pool.overview{
+ margin-top: 28px;
+}
+
+div.pool.overview + div.pool.overview.collapsed{
+ margin-top: 28px;
+}
+
+div.pool.overview.collapsed + div.pool.overview.collapsed{
+ margin-top: 6px;
+}
+
+div.pool.overview.collapsed + div.pool.overview{
+ margin-top: 6px;
+}
+
+header + div.pool.overview{
+ margin-top: 16px;
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Page Footer -- v.0.0.1 [footer] (footer.scss)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
diff --git a/src/app/views/pools/_alerts_index.haml
b/src/app/views/pools/_alerts_index.haml
index 631f381..58f4656 100644
--- a/src/app/views/pools/_alerts_index.haml
+++ b/src/app/views/pools/_alerts_index.haml
@@ -1,7 +1,15 @@
- if @failed_instances.count > 0
- %div.alerts
- Alerts
- %ul
- - @failed_instances.each do |i|
- %li
- = "#{i.name}: #{i.last_error.blank? ? i.state : i.last_error}"
+ %section.content-section.alerts
+ %header
+ %h2 Alerts
+ %span.label.badge.alert.count= @failed_instances.length
+ .section-controls
+ %a.collapse{'href'=>'#'} Collapse
+ .content.collapsible.closed
+ %dl.alerts
+ %ul
+ - @failed_instances.each do |inst|
+ %li.alert
+ %dt.subject.critical= inst
+ %dd.type Instance Failure
+ %dd.desc= "#{i.last_error.blank? ? i.state : i.last_error}"
\ No newline at end of file
diff --git a/src/app/views/pools/_pretty_list.haml
b/src/app/views/pools/_pretty_list.haml
index ffe6db1..3a0c2ca 100644
--- a/src/app/views/pools/_pretty_list.haml
+++ b/src/app/views/pools/_pretty_list.haml
@@ -1,38 +1,45 @@
-= link_to "expand all", "#", :class => "reveal_all"
-= link_to "New Pool", new_pool_path
-%table#pools_pretty_view
- - @pools.each do |pool|
- %tr
- %td
- = link_to pool.name, pool_path(pool)
- %td
- Deployments:
- = pool.deployments.count
- %td
- Instances:
- = pool.instances.count
- %td
- Pending:
- = pool.instances.select {|i| i.state == Instance::STATE_PENDING }.length
- %td
- Failed:
- = pool.instances.select {|i| i.state == Instance::STATE_ERROR }.length
- %td
- Instance quota usage:
- = pool.quota ? pool.quota.percentage_used.to_s + "%" :
'unlimited'
- %td
- = link_to "+", "#", :class => "toggle"
- %tr
- %td{:colspan => 7}
- = render :partial => 'deployments', :locals => {:deployments =>
pool.deployments}
+%section.content-section.pools
+ %header
+ %h2 Your Pools
+ %span.label.badge.dark.count= @pools.length
+
+ .content
+ - @pools.each do |pool|
+ %div.pool.overview{:id => ['pool', pool.id]}
+ %header
+ %h3.name
+ %a{:href => pool_path(pool)}= pool.name
+ %dl.statistics
+ %ul.groups
+ %li
+ %dt Deployments
+ %dd.count.deployment= pool.deployments.count
+ %li
+ %dt Instances
+ %dd.count.instance= pool.instances.count
+ %dd.count.instance.pending= pool.instances.select {|i| i.state ==
Instance::STATE_PENDING }.length
+ %dd.count.instance.failure= pool.instances.select {|i| i.state ==
Instance::STATE_ERROR }.length
+ %li
+ %dt Quota Used
+ %dd.percentage.quota= pool.quota ? pool.quota.percentage_used.to_s +
"%" : 'unlimited'
+ %a.control{:href => '#'}
+ %span Expand/Collapse
+ %div.content.deployment-array
+ = render :partial => 'deployments', :locals => {:deployments
=> pool.deployments}
+ %ul.content.actions
+ %li
+ %a{:href => pool_path(pool)}= "#{pool.name} Pool details
»"
+ %li
+ = link_to 'New Deployment', launch_new_deployments_path, :class =>
'button primary', :id => 'new_deployment_button'
:javascript
$(document).ready(function() {
- $('ul.deployments_list').hide()
- $('a.toggle').click( function() {
- $(this).closest('tr').next().find('ul').toggle();
- });
- $('a.reveal_all').click( function() {
- $('#pools_pretty_view').find('tr td ul').toggle();
- });
+ $('div.pool').each(function(){
+ var this_pool = this;
+ $(this).addClass('collapsed');
+ $(this).find('header a.control').click(function(){
+ $(this_pool).toggleClass('collapsed');
+ return false;
+ });
+ })
});
diff --git a/src/app/views/pools/index.haml b/src/app/views/pools/index.haml
index a89b180..f188428 100644
--- a/src/app/views/pools/index.haml
+++ b/src/app/views/pools/index.haml
@@ -1,13 +1,12 @@
%header.page-header
%h1.section-index Overview
-# Insert appropriate controls here, or ommit %ul.controls
+ = pretty_filter_toggle(pools_path(:view => 'pretty'), pools_path(:view =>
'filter'))
.corner
= render :partial => 'scoreboard_index'
= render :partial => 'alerts_index'
-= pretty_filter_toggle(pools_path(:view => 'pretty'), pools_path(:view =>
'filter'))
-%div#view
- - if params[:view] == 'filter'
- = render :partial => 'layouts/tabpanel'
- - else
- = render :partial => 'pretty_list'
+- if params[:view] == 'filter'
+ = render :partial => 'layouts/tabpanel'
+- else
+ = render :partial => 'pretty_list'
diff --git a/src/public/images/alert_icon_critical.png
b/src/public/images/alert_icon_critical.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa412d130645d4e305dc179e6759502534c6815f
GIT binary patch
literal 337
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf<Z~8yL>4nJ
za0`Jj<E6WGe}IBAC9V-A!TD(=<%vb942~)JNvR5MnMJAP`9;~q3eLf%g<Bt+0o93u
z)HxTWCYEI8=P86_=B6^3>Khs88yd!U$43Dbtnzem46*24I(ehuAp;)Q_#C!`Rv(9V
zdm3h{ghVliEeM^OGhtdEYs>~t<qJ>e?3OtCJl^a3yd_SukuFbo_B3+;o*DXens^N>
zk3oyTuPK){3CgsTtKMsve}KC~wbNKlf7LIIFK&V}?;PCfEg8$q<FNTb%9q6*N5l@^
zy>-Cq;i^@0RcEZ#tpD_q!6k+1Sd>JEoWjyAEdo^uD;h(;?zRhVO=(s9eXMyBFV6?&
YYAJ`Pc>T>2fv#roboFyt=akR{0D(Dp>i_@%
literal 0
HcmV?d00001
diff --git a/src/public/images/alert_icon_warn.png
b/src/public/images/alert_icon_warn.png
new file mode 100644
index 0000000000000000000000000000000000000000..0e64c05f4ff797c82a1d66d7a3c112a9fbb43dd9
GIT binary patch
literal 364
zcmeAS@N?(olHy`uVBq!ia0vp^d>}Rl8<3oNC%zs?u@pObhHwBu4M$1`kk47*5n0T@
zz%2yAjF;}#{Q(Nfl(<He1m~xflqVLYGB~E>C#5R5WfrBD=NDxcD>w(67H)lP22>{s
zQs-Qhnpl#VpQjL#nVZUBs&8bVZ)h0b9Ulc$aMaVqF+^ix?WDb;O%4Jr_BBs#FqS;n
z%(R8sdP0VW=0PEkg`D0SSl>EWU*IxGs9d+h;^dvX_uicOtHLs&gyGx)?i*ig>*r=2
zHelG$)#8vnXXi)px|T^=3gzBQRU^c_qO9B53udcEl;r5hIiwah!~{JyS2NzeTlihC
z{xSUpFLu4NEYF#%;q*+X$H|km;E(dG3s*{G8J3*O?aR<*_H&r(aqFXH`|*;+vlndh
zUF$4y+9K=LGKZZCJoP;beI(_r_`3p+aBesEovLkE+++S4=phDAS3j3^P6<r_hR}kg
literal 0
HcmV?d00001
diff --git a/src/public/images/alert_icon_warn_white.png
b/src/public/images/alert_icon_warn_white.png
new file mode 100644
index 0000000000000000000000000000000000000000..04011d5c7f6af63c501a902b55ebe99ec8ce34d6
GIT binary patch
literal 329
zcmeAS@N?(olHy`uVBq!ia0vp^d>}Rl8<3oNC%zs?u@pObhHwBu4M$1`kk47*5n0T@
zz%2yAjF;}#{Q(Nfl(<He1m~xflqVLYGB~E>C#5R5WfrBD=NDxcD>w(67H)lP22>{s
zQs-Qhnpl#VpQjL#nVZUBs&8bVZ)h0b9Ulc$u*lQJF+^ix@1#V*Lk1$v#ykzo&l)@(
z4yh<43QcHWQBhbZ)W)oG=HT)Ey-w>>q<6mFTAmqKl&Q+RApICiiKzO4lPV96ioeuX
zEO;pXca?yJi_M|ZGtYG&ZY{7peoA7^hN9v_n(sI+tTWi-dF%JCB@f!HlCrs0%5Kj7
z-N|LsQ=oH7vyffIxYV2D0;dP}lI~d(r6PXWR~@S>N;&*z$MLCVZ!efX(&?$0)YfGS
PbS;CYtDnm{r-UW|iI#O5
literal 0
HcmV?d00001
diff --git a/src/public/images/header_icon_provider-accounts.png
b/src/public/images/header_icon_provider-accounts.png
new file mode 100644
index 0000000000000000000000000000000000000000..7dfd4cf9d836c5ecaf84ec628e7ab4dee5ca4971
GIT binary patch
literal 662
zcmV;H0%`q;P)<h;3K|Lk000e1NJLTq001ih000>X1^@s6sPETi00004b3#c}2nYxW
zd<bNS00009a7bBm000XT000XT0n*)m`~Uy|9CSrkbW?9;ba!ELWdK2BZ(?O2Mrm?o
zcW-iQb09-gHF34$HUIzs6m&&cbVG7wVRUJ4ZXi@?ZDjy9FE%eRF-ve9MF0Q+@JU2L
zR9J<*m*IJ$KoEvsdGbHG3bX_5K*AIdQ^AoAEWr}E3PLK#S-=?5fvMoMgQNoQ$1cwS
z!Z8b)_aE*u^D#SoBNGBp)jMDfq`(yT0t#R)A_q&1)9DnFvc|-^(F-krdCT$_5R1sZ
zFU}aTQNZ3c?Lq-=f!~8w7zq{oKc=d>8Y89;lUP-aan<W%F-lDj*2>-)_r(Ksn6Qey
zYQ?PF825c%D&cOon*keOMZL8?fJ{X4<~^l@SS#CWNtS)8ngV}-pPat~bKqH3_o~`@
zl2)+?<GxO@Ug)zS#vCZTuh%fOfruPbbx(iq7GBs2XLX-Ij(dpAlFL*2c3k~2#Ako?
ztiM!7?iyGE55TKWY_Yy7%Vs;6#kMtmgX#pEHP*T&Umvw06H-}#_pSvIsfwKj#_b}m
zUWAIZ@`!7j<H$G*Ro#>qm-^QQ@Iyq-{Me7`6lYgMc}bEa?G>x4GulnOH7L&5&n(Qx
z$#5^-5S}{4R_tdvAn-eox4o3!Z!^N(;aC&vpFZW^m%vz#IG@d{UlP7G-a>;-{LKs8
zQ4c*L3tM1Qwuq|c1om;{t66Yeq4@ZP&j+sJK}5KUhW5`;ZhbyPqzJrs8_}2&-@wp(
wS;Y5MwPZ-XrzA;=YfZ3Au?6mvB*_8(0{Hfrb{bKxW&i*H07*qoM6N<$f>j0~x&QzG
literal 0
HcmV?d00001
diff --git a/src/public/images/header_icon_provider.png
b/src/public/images/header_icon_provider.png
new file mode 100644
index 0000000000000000000000000000000000000000..b68807646e6e0f767e05682b78f7ba52e0b143a7
GIT binary patch
literal 505
zcmeAS@N?(olHy`uVBq!ia0vp^ia;#E!3HEtCQboKuoOFahHwBu4M$1`kk47*5n0T@
zz%2yAjF;}#{Q(Nfl(<He1m~xflqVLYGB~E>C#5R5WfrBD=NDxcD>w(67H)lP22>{k
zQs-Qhnpl#VpQjL#nVZUBrf;TiXy{!a<I2Fm80_id7~;`+blTnALk1#l{43tSW%E^U
z;FWqQyn=K$LU-d&6@*-9F;Q&~1K<}e6fXurYX>X&kY|GDNg-RD1^-Fw}$L)dsW
zlePluJ?+c&4tg)2&$D$e-}8s}M8o=yr|t==nb&8wSl9CHIksm1!{|%PwzhO1c*xk8
zF|qK7+HNr>hHUYZ$5qbgu-Zj)R7eS%{;)ig!>Dp#$_|&Fht8K2O#;O`St80c7*aji
zJ5P45^T<+-c`^T##0@r=vICVGofBuq-uWC9^h`a<WQ7`60)NV+PZL}`R2KG}TH-8t
zUOzS4K2*3kJ5AcYKy_-+yan0McKi$MJ#sbZ(joqs*XLfUE1ljYG<SC7GxkY-U&JSd
z2G5_dbIu19lPgu+YNbNy3SV=#E%(|fH0cA=Z$%a-p=NG|<I$bz91JOOk0O~`mz>?9
t^<W0CV#Drx@k~s$!2$PVukT-5za+c0Y>HJu7%=!5JYD@<);T3K0RT{c!4Cic
literal 0
HcmV?d00001
diff --git a/src/public/images/header_icon_providers.png
b/src/public/images/header_icon_providers.png
new file mode 100644
index 0000000000000000000000000000000000000000..b68807646e6e0f767e05682b78f7ba52e0b143a7
GIT binary patch
literal 505
zcmeAS@N?(olHy`uVBq!ia0vp^ia;#E!3HEtCQboKuoOFahHwBu4M$1`kk47*5n0T@
zz%2yAjF;}#{Q(Nfl(<He1m~xflqVLYGB~E>C#5R5WfrBD=NDxcD>w(67H)lP22>{k
zQs-Qhnpl#VpQjL#nVZUBrf;TiXy{!a<I2Fm80_id7~;`+blTnALk1#l{43tSW%E^U
z;FWqQyn=K$LU-d&6@*-9F;Q&~1K<}e6fXurYX>X&kY|GDNg-RD1^-Fw}$L)dsW
zlePluJ?+c&4tg)2&$D$e-}8s}M8o=yr|t==nb&8wSl9CHIksm1!{|%PwzhO1c*xk8
zF|qK7+HNr>hHUYZ$5qbgu-Zj)R7eS%{;)ig!>Dp#$_|&Fht8K2O#;O`St80c7*aji
zJ5P45^T<+-c`^T##0@r=vICVGofBuq-uWC9^h`a<WQ7`60)NV+PZL}`R2KG}TH-8t
zUOzS4K2*3kJ5AcYKy_-+yan0McKi$MJ#sbZ(joqs*XLfUE1ljYG<SC7GxkY-U&JSd
z2G5_dbIu19lPgu+YNbNy3SV=#E%(|fH0cA=Z$%a-p=NG|<I$bz91JOOk0O~`mz>?9
t^<W0CV#Drx@k~s$!2$PVukT-5za+c0Y>HJu7%=!5JYD@<);T3K0RT{c!4Cic
literal 0
HcmV?d00001
diff --git a/src/public/images/header_icon_roles.png
b/src/public/images/header_icon_roles.png
new file mode 100644
index 0000000000000000000000000000000000000000..6c7f392467bfda8c8916bdc397dcb3db2b721f65
GIT binary patch
literal 1274
zcmV<W1O@wvP)<h;3K|Lk000e1NJLTq0015U0015c1^@s6J20-I00004b3#c}2nYxW
zd<bNS00009a7bBm000XT000XT0n*)m`~Uy|9CSrkbW?9;ba!ELWdK2BZ(?O2Mrm?o
zcW-iQb09-gHF34$HUIzs6m&&cbVG7wVRUJ4ZXi@?ZDjy9FE%eRF-ve9MF0Q<R7pfZ
zR7i=vmtSmDRS?F17cPZX%GwRqHM9*rRGaDpniOpy5t|qiFhI3u3~H)kS|TwiDrnFb
zG=&h+m?8)Uqta+g=BPA{M#BSvl=>&Mkq4vI!Xj2FYj8`uxW#tE`p~=0b!E#|ij&;r
z?3tPGJ9Ey=oU=|cnIs!=949L~09Bm}lo?}=X0ma!M$3+H>FDTa{ovqW<@D*(zX7f-
zv8p~6kH@$4_4VbpwY3FZ*QL6;dSD`-X;VRb{`~ptfZ)!ZJA)k^9R!0xLZQ%C6B0X)
zL;7c}ooTJjO&M8hUr^OqUUV~5b-5p;zP|pgyu7?M4Gj&06%`c}6&3vf^k%@$v)1M~
zs`@an0(eP8PO54E*bEFCV_x)#w*!U1THpy_xrp4KB39KLU_Wps8jUV?9A|bxK|vL;
z8Ylr8MWkO<OMusawrRjez+qsEs#XHqfmtb1PhJLwfCIpNKttNjZ36~@4Z&b=Q9(gL
zr!nRipb6*)-dEL|fgM1HF{Wj_MpShv&<=D0D~vH0QaZ<RP}O<BN#Kx(Ec5xT1R6x7
z%D<9iGC5v?s@ec-1r8Wv9)*7<*J|KH;8&p0S{w9%-{9@US|F^dyS(|^fk%L6$snp4
z0xEz#z%*;^25W7upZI4HSp%&1elPavHUVJ~+2@gLRMpwQd%&k6ay%2UCr3r(Ibb8O
z2q<xVooll<j{3+`au}}}h{y;qqN=X~Uoy5!mlY51EU?EL{{~c#E3^6hqN*!Z_0U8i
zUI}l~4aCdNHTcd|Rm)X%q2JD0dylntNhX~C(lR##pQoK`5%9RGeg;@zA@DS?D-+11
zB39L>fMVbS|GbDC1YQB21eyT_nv5}rubSAq>Xre|i^zp^y@>PxjlcrN>iz6Qc$0~^
z0yrZgT^SY@U@Y2oz&>EBwf4?TV3RrHTp%x#GLc9OxvqPghztUUR5c8o%Vh6l`vUQ9
zt9OBR5ox`W{grUDCiePuIj{xj0CtE-;(s9qP}M@91^6D=BqD#NY+71c9M^Sk1nvT6
zGFEo6%W+J)fr!ZOz$)MZ@UeHR0pPmsy5ZsBpSrrb-adBhSW`3_{n5L<{vF8GyfRhw
zZs2+m`9f76>gnm(*52Mezr4Jh-ripN`}?V@tLrT-Eq%Zk^PS%}>#WYOz^_w-cs%}k
zXJ_ZU+S=N0L!r<ou~_WE*4EZr!r^dfadGi8j5U{WnUcqzs@@ujM4UNu<`4>n-V~9>
z{QUfy+S*#m%F0M4lS|Tlri2)n8;iwe3=9l#@#4ihyt#A9Wb#rV5Fn9A^j$0Ba7jst
z+uhyGsZ*zFnwy*77#SI9I&tE}rPHTR$Mf^^x2HQy)jx@d>$(SPYHC*P-o5*#%F4?1
zLqkIZgF&jQs*V6h(jBtS>WL(k@q72~eP?uZR3eecUxkH*Gjnoseh35t_Znm3*OVAQ
kRTlvB8GFMWhs#&Q-$ph6?P@Lh(EtDd07*qoM6N<$g6xk@P5=M^
literal 0
HcmV?d00001
diff --git a/src/public/images/header_icon_settings.png
b/src/public/images/header_icon_settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..e85061e5bc0b5f7a65f66b997e25c37cc97af43f
GIT binary patch
literal 666
zcmV;L0%iS)P)<h;3K|Lk000e1NJLTq000{R000~a1^@s6kkQ2L00004b3#c}2nYxW
zd<bNS00009a7bBm000XT000XT0n*)m`~Uy|9CSrkbW?9;ba!ELWdK2BZ(?O2Mrm?o
zcW-iQb09-gHF34$HUIzs6m&&cbVG7wVRUJ4ZXi@?ZDjy9FE%eRF-ve9MF0Q+^hrcP
zR7i=vmG5oaFc8ImGW@;Xpz;J!HW2g%NHRe(LN}<rfk$XIum_;(PEcurIvY3>xF1ZS
z^qG_t)a?TV=*T-h-d`3>fOBpOJa};@=`p8!I-RoT%%+e5i|D_cXmf=k7MybnVDAsC
zC3ViZ8u)JP){<7vxeC|<N3VYz^30NTz}>`)_C~jtRDC3ji=<W>_EP1TfhEf(p0g+Y
zz<&K9GD%(Hz#XuZR7t9UrC%dqI|!Sz74S7C%9Xik2Y@F@+tC8?h9%c|SV}r%$V%Xs
zS?+;D(=^Eo&V2bkB#8PP5rE&bA;06&+e@<C#=pSKCw52TmOfNT_`R!WkSLyjIY20a
z#I)FuZ-<SM*OFF~Cx|Ds+B@J&$e;IU!)0!I-xh;|*p_|;{LJWvFz3eEy`*l4Y;NRz
zR&#u2?im?(wi*vc9vV*;)^?Pv_5|;o!%_k3gx!;*0=Ng>yiE;I6a{VDmTlXXMR8dY
zR|S%Sd3t_Gsz>xs0FsJ0hc;(993rygz=gu&8`idM+m--L(^T`J>WOgCYq5<9)o0*2
zl0$p+aNBWpi2h&w7tjF|6Ftkqhp7WT1tLi=0M5B@{PFbtzYgNR_AKPgco9Mv<XzJ=
zk5j903aaS;+3b~Y`}fQ~F|VAP9=Kr`W8|9pHv_QGvknM^XaE2J07*qoM6N<$f?$Ov
AmH+?%
literal 0
HcmV?d00001
diff --git a/src/public/images/header_icon_users.png
b/src/public/images/header_icon_users.png
new file mode 100644
index 0000000000000000000000000000000000000000..0df6625550494a62b599b3e76378ee3f058c02b2
GIT binary patch
literal 649
zcmV;40(Sk0P)<h;3K|Lk000e1NJLTq001EX000&U1^@s6PMh_500004b3#c}2nYxW
zd<bNS00009a7bBm000XT000XT0n*)m`~Uy|9CSrkbW?9;ba!ELWdK2BZ(?O2Mrm?o
zcW-iQb09-gHF34$HUIzs6m&&cbVG7wVRUJ4ZXi@?ZDjy9FE%eRF-ve9MF0Q+<4Ht8
zR7i=%mceb}Koo{QgN0?;Qqlo*01e<I6>Ls(-IS6NwgmR-Q?`OlUIQT=kPd=0*2u^(
zdx&8jGd9@CYJUj{y*K{mv&Rer|2fuL{5}_^X*vV$fp2B$1-MsAJ@nyuJp?X+6>#Bb
z-zcRXyYQ^F47y72{sdeC06%*0nk7VJCL-64)@=)Knx^UGOisImh%A6-;J1h@Ywd9x
z5I9Jj;518!$PD;iDNRMB?e3lF!f`!`OGj<iRiX>$T#0H{C;D$^a#|%^lT_F9sfD*v
zO6|v<;xtPnNwTaBeoK<1x(O{>Bz|__G)t8ERr&r>ZIqkQs^Pl2U?ZnhqI|2bE2T+U
ztLD`OQ%W7=&g206{qGQwJKzqus*M=~&m!^!ERrNyxImxbc;#;PK=W37$acHM7?W$Q
z3m~fZ<2cU4Fbsyn;VBfr8n~U$=Z`+`>)0x=*=#VzV2l9>%Fj`>)`8ZVFboO9kkM$=
zhP^1~p7=Cu!@J#%JkQCpjG`z`+|<YHg?-;AiXws_U@&n02F8H<JfXEF%QCFBohGlR
zC<@l=HJ;}YMG<ivJI5XA8Dr2|e_Eg#Yb{#q{c;}V=unfU=@OWJnZd`rDy1gXLert<
jUkO0N``71W_2u~k<0jBLq`Y~j00000NkvXXu0mjfekLAP
literal 0
HcmV?d00001
diff --git a/src/public/images/pool_bar_expand-btn.png
b/src/public/images/pool_bar_expand-btn.png
new file mode 100644
index 0000000000000000000000000000000000000000..a065effec72e83178b5aa1c17ff6b90681e624b1
GIT binary patch
literal 2799
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
BT(<xK
literal 0
HcmV?d00001
diff --git a/src/public/images/pool_bar_icon-normal.png
b/src/public/images/pool_bar_icon-normal.png
new file mode 100644
index 0000000000000000000000000000000000000000..8703caeb7ea921240d8313ba2167095b081b8d94
GIT binary patch
literal 386
zcmeAS@N?(olHy`uVBq!ia0vp^f<P?H!3HGDmOlFkq*#ibJVQ8upoSx*1IXtr@Q5sC
zVBi)4Va7{$>;3=*WlCHlN`mv#O3D+9QW+dm@{>{(+%k(&%kzt}ixr%MO$)a^HUp{?
z0jYB?N=+=u%+FH@$;?e<Fw-~FH#GDvkZ}dd-|=*D46*1vdugv8tD^|RgZ!H=i*{^n
zaawsr^L?$zthv(zDww~9>}iNg&oA`ubdTWd{N$#n(sF3RNujc^$06#Ii}zW64n8WO
zZ*Vx5Bk}Zs4#Rs1!nsq$;x-;gTou_Su&&NA%4hbnm9KL49y57*{fFR5W%qf8=gVgC
zzCAmU)32cY^CZTiC!EtOWEg7JKV*&7yx@Lq<NQwx-G4RNJjgktq8+*K+26}=rz!na
zfA^=od+q~`r?P&>6~0RbiTpgeE=gLt-tpB&kN>x~FLjW=srlybn*R=b1wDJ2QfB_z
a!>G5(@SuCG=SHAE89ZJ6T-G@yGywo~4w+8?
literal 0
HcmV?d00001
diff --git a/src/public/images/pool_bar_name-bg-alert.png
b/src/public/images/pool_bar_name-bg-alert.png
new file mode 100644
index 0000000000000000000000000000000000000000..30f2341c63c661c5f4ee40fd69bfcab556563e48
GIT binary patch
literal 842
zcmV-Q1GW5#P)<h;3K|Lk000e1NJLTq00Arj001Qj1^@s6_yyDn00004b3#c}2nYxW
zd<bNS00009a7bBm000XT000XT0n*)m`~Uy|9CSrkbW?9;ba!ELWdK2BZ(?O2Mrm?o
zcW-iQb09-gHF34$HUIzs6m&&cbVG7wVRUJ4ZXi@?ZDjy9FE%eRF-ve9MF0Q-q)9|U
zRCt{2-M?!SVI0Tt&o$Q{1e#U^TS>t<2<_w~E<!H|{sYcRQ|SNE!BOby){Y`}mBuCM
zDi$*7Qt*l?M2K?s=cOb)hk7DPbI;KSt_Sbeas-}xp6~SG`#g8y9R20v^77iq*w`~?
zbo8bG;F@tH>8&(<cV(qDGBI%{>w*B_GL9s@o1OhMJ~g$Fbuj=ijQd7f4ZGciUbmZd
zEdVf-^I8fdO=VpO03>lE!U{l6xKY*>0DvI^3qWoVSO9XvJx>_$q|wlf=jmjBUz>At
z#uGnnw^b~c^{v^|`)c)SRRVwvI;?uNs^?LpBj4AI=Sh;zf<Ql7t)cfF?(V8sE~`#h
z0kFh)OE}`Xy0y3{Njl!!)AxkHim~McV2g2Jo%j3dY;XVh9d}!oaa>mtfd#-G<G>m%
zmGo$RU8kLn+FM(R;|VMPwiyT3px0A(XGeoDOtk=k1;CcXr-ZTd!9a(;Z#;1vRHpL-
zKoa8)%PkglZ)r)AblU0YtHHKVqQe4Uk8xo2Pfqk@b2Ie<1Qq~Wj03AMKCauIr?VhX
z*YK4FiNFG2kNFu^zpn$|*B}gyLWnag0JfRGhn4csJw}HGz!u}c8Y`9bV0BfJbm;r~
zys=?)AAtqH7URG=J2=pX-+`3|fd#-8<G^wX1x;2e8ib*aJDtSw(LYxJxGLjAcgJ-#
zS*fTO1UfPZtQd#x0BlM1*PM2<nR)>_EC99`2iA@G`BW3f;|VMPwipFgy;hUAwx-#K
z4~-}81%c|d8i57C8s{ZV5P+QEBNPB~!}uv70A!603qWqTk@Qo1t{y-R6dp?xlDw=7
z0e~cqB)yPYlI~|*3jhq|N>X&uVKqf)0l3BrlGKpGhV-g>ah|mxX*%1o0N{VW09IVg
Uy<77hNB{r;07*qoM6N<$f`aO6EC2ui
literal 0
HcmV?d00001
diff --git a/src/public/images/pool_bar_name-bg-normal.png
b/src/public/images/pool_bar_name-bg-normal.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8b3a40c8518ceb20618db984cb015a207b34784
GIT binary patch
literal 750
zcmV<K0ulX*P)<h;3K|Lk000e1NJLTq00Arj001Qj1^@s6_yyDn00004b3#c}2nYxW
zd<bNS00009a7bBm000XT000XT0n*)m`~Uy|9CSrkbW?9;ba!ELWdK2BZ(?O2Mrm?o
zcW-iQb09-gHF34$HUIzs6m&&cbVG7wVRUJ4ZXi@?ZDjy9FE%eRF-ve9MF0Q-NJ&IN
zRCt{2-LY=sKoo`HgBh@i5`_dAN*emCWcs{H-ei+E+4o3AAEY$&Udf0KibzpFf!QL<
z7AwVEb_Y3@{;xwCU)}2H&Uj=R`fWa+-%GlaG!y`QK@CYNisD()O~t(cK&hxGihB`O
z0BXQ_@9(N^0st(W_ntE=0JRWR-2ebsIq!YdJph0Sfd!y8*b)M$jnWD0>FG(!<x+7R
z>-P56Ty!#-XuV$R`ubYq@i;`E08k!SS(fSX@ll;lN6Y2%;{oS%adA;v^z7_R>-Ab$
zmWeGVfKZ%ek@sG!)k>0-B+0?R0)SI69lAFf4RyQSKfm|W)@SxLnXUkYWD2bJ_jk=^
zGsSVNUaxm>{cg9DL|_33%d{noqDWU)SBfHDDgvmE`5so1B$AGsnwYQvgk%b=?RKlh
zVj)Rtx7(&|p+sN-2+Oo3Y&M(f_xq>r1prE!Cam3Vr`2jD=bX;Z&&|b|umFT)zSfW=
z$<c@I1QvjhOk2WzU;#jt%=fVJJeTzGws0^Ql&<IED1cKi1y-}!)NpwGhe-)603n$U
zrM&lgdwbJnvpID?0Prc(gtZSW=bT!tmbo|+7J!gUffYrOE-x>SE>2(p2+0&!udlC1
z72U5VumFT~@LI!YG*X`DdU<)V7j;gf(dfS#1AxCBoUqa~Rhp*%RGbM5KuG*+4uIO=
z16KfQg9!^jZ4g)hY9o^Lv+5=Qz`}X&e@OaXbt3?9NJEmQ)9JIMn~Hk@fKrhpWm)!3
g(u3F@0{Fsy0gk}h-4wirIRF3v07*qoM6N<$f;etPu>b%7
literal 0
HcmV?d00001
diff --git a/src/public/images/pool_bar_prop-gradient.png
b/src/public/images/pool_bar_prop-gradient.png
new file mode 100644
index 0000000000000000000000000000000000000000..6c7eb7009642ed24e788d92c3cce9d4d1d460060
GIT binary patch
literal 229
zcmeAS@N?(olHy`uVBq!ia0vp^B0#Ll!3HFq)}LerQY^(zo*^7SP{WbZ0pxQQctjR6
zFmMZjFyp1Wb$@_@G9|7NCBgY=CFO}lsSJ)O`AMk?Zka`?<@rU~#R|^BriEJ{n*r5{
zfYdn`r6!hS=I1GdWag$anCYA88yb2S$hZRK?LA!_Lp(a)p4rIBpupo2SpO|v_p%Ce
zL`Gs_=5v0T#>W*YX^gUhymMB1U$2gyp7;0T4;EG!uxD3)#V*DiZa(uN&?p8^S3j3^
HP6<r_Q$9ae
literal 0
HcmV?d00001
diff --git a/src/public/images/section-border.png b/src/public/images/section-border.png
new file mode 100644
index 0000000000000000000000000000000000000000..91e6f415ff00a81595cbf31d4ce4e33e41de82cf
GIT binary patch
literal 193
zcmeAS@N?(olHy`uVBq!ia0vp^Od!m`1|*BN@u~nRmSQK*5Dp-y;YjHK@;M7UB8wRq
zxP?HN@zUM8KR`j564!{5;QX|b^2DN42FH~Aq*MjB%%art{G#k)1?OPX!mW?Zfa*j+
z>YR&G6H7Al^Atidb5j{i^^FYl4GrVF<D-BIq&!_5LpWx#9%N)>VBk2c@FxE4T(vvf
c9;|x6=;z9wWUKV28>ouG)78&qol`;+0GF#X!2kdN
literal 0
HcmV?d00001
--
1.7.4.4