From: Samuel Guimarães <sguimaraes943(a)gmail.com>
This commit adds the UI for Storage Volume management action button, filter input, gallery
view and gallery / list view toggleswitch button with multi-selection enabled.
Signed-off-by: Samuel Guimarães <sguimaraes943(a)gmail.com>
---
ui/css/kimchi.css | 266 +++++++++++++++++++++++++++++-------
ui/css/src/modules/_storage.scss | 287 +++++++++++++++++++++++++++++++++------
ui/js/src/kimchi.storage_main.js | 82 +++++------
ui/pages/tabs/storage.html.tmpl | 121 +++++++++++------
4 files changed, 576 insertions(+), 180 deletions(-)
diff --git a/ui/css/kimchi.css b/ui/css/kimchi.css
index 49ea39a..728f816 100644
--- a/ui/css/kimchi.css
+++ b/ui/css/kimchi.css
@@ -2183,6 +2183,8 @@ body.wok-gallery {
}
#storage-root-container .wok-datagrid-body .handle {
+ -webkit-user-select: none;
+ -moz-user-select: none;
user-select: none;
position: relative;
}
@@ -2226,69 +2228,38 @@ body.wok-gallery {
}
#storage-root-container .volumes .volumeslist {
- padding: 11px;
+ padding: 22px;
max-height: 285px;
min-height: 136px;
+ max-height: 505px;
overflow: auto;
}
-#storage-root-container .volumes .volume-box {
- background: #fff;
- padding: 4px 20px;
- margin: 11px;
- display: inline-block;
- width: 409px;
- height: 110px;
+#storage-root-container .volumes .volumeslist .row {
+ font-size: 0;
+ margin-bottom: 22px;
}
-#storage-root-container .volumes .volume-title {
- height: 46px;
- width: 100%;
- border-bottom: 1px solid #ccc;
- position: relative;
+#storage-root-container .volumes .volumeslist .filter {
+ width: 514px;
}
-#storage-root-container .volumes .volume-name {
- font-size: 15pt;
- font-weight: 300;
- width: 274px;
- line-height: 46px;
+#storage-root-container .volumes .pool-action {
display: inline-block;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-#storage-root-container .volumes .volume-utilization {
- vertical-align: top;
- text-align: right;
- display: inline-block;
- width: 90px;
- height: 46px;
- line-height: 46px;
+ margin-right: 20px;
}
#storage-root-container .volumes .volume-icon {
display: inline-block;
+ vertical-align: middle;
width: 27px;
- height: 46px;
- line-height: 46px;
+ height: 27px;
+ line-height: 27px;
background-repeat: no-repeat;
background-position: 50%;
background-color: transparent;
}
-#storage-root-container .volumes .volume-usage {
- vertical-align: top;
- font-size: 15pt;
- font-weight: 400;
- display: inline-block;
- text-align: right;
- line-height: 46px;
- padding-left: 0;
- margin-left: 5px;
-}
-
#storage-root-container .volumes .volume-icon.icon-high {
background-image: url("/images/theme-default/high.png");
}
@@ -2304,13 +2275,13 @@ body.wok-gallery {
#storage-root-container .volumes .volume-progress {
position: absolute;
margin: 0;
- width: 409px;
- top: -4px;
- left: -20px;
+ width: 407px;
+ top: 4px;
+ left: 4px;
}
#storage-root-container .volumes .volume-progress .progress-bar-outer {
- background: transparent;
+ background: #ddd;
height: 6px;
overflow: hidden;
width: 100%;
@@ -2351,6 +2322,207 @@ body.wok-gallery {
line-height: 136px;
}
+#storage-root-container .volumes .wok-gallery .volume-inline-progress {
+ display: none;
+}
+
+#storage-root-container .volumes .wok-gallery.wok-datagrid {
+ background: transparent;
+ margin-top: -12px;
+}
+
+#storage-root-container .volumes .wok-gallery.wok-datagrid > .wok-datagrid-header {
+ display: none;
+}
+
+#storage-root-container .volumes .wok-gallery.wok-datagrid > .wok-datagrid-body {
+ margin-left: -3px;
+}
+
+#storage-root-container .volumes .wok-gallery.wok-datagrid .wok-datagrid-body >
.wok-datagrid-row {
+ position: relative;
+ cursor: pointer;
+ background: #fff !important;
+ border: 0 !important;
+ display: inline-block !important;
+ width: 415px !important;
+ margin: 12px 4px 0;
+}
+
+#storage-root-container .volumes .wok-gallery.wok-datagrid .wok-datagrid-body >
.wok-datagrid-row, #storage-root-container .volumes .wok-gallery.wok-datagrid
.wok-datagrid-body > .wok-datagrid-row * {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+}
+
+#storage-root-container .volumes .wok-gallery.wok-datagrid .wok-datagrid-body >
.wok-datagrid-row.selected .volume-box-border {
+ border-color: #8cc63f;
+}
+
+#storage-root-container .volumes .wok-gallery.wok-datagrid .wok-datagrid-body >
.wok-datagrid-row.selected .volume-box-inner {
+ border-color: #000;
+}
+
+#storage-root-container .volumes .wok-gallery .volume-box-outer {
+ border-radius: 3px;
+ overflow: hidden;
+}
+
+#storage-root-container .volumes .wok-gallery .volume-box-border {
+ display: block;
+ border: 3px solid transparent;
+ transition: border-color .1s ease-in-out;
+}
+
+#storage-root-container .volumes .wok-gallery .volume-box-inner {
+ padding: 0 16px;
+ width: 409px;
+ height: 110px;
+ display: flex;
+ flex-flow: row wrap;
+ justify-content: space-around;
+ border: 1px solid #fff;
+ background: #fff;
+ transition: border-color .1s ease-in-out;
+}
+
+#storage-root-container .volumes .wok-gallery span.column-name,
+#storage-root-container .volumes .wok-gallery span.column-used {
+ height: 52px;
+ line-height: 52px;
+ border-bottom: 1px solid #ccc;
+}
+
+#storage-root-container .volumes .wok-gallery span.column-name {
+ width: 303px;
+ order: 1;
+}
+
+#storage-root-container .volumes .wok-gallery span.column-used {
+ width: 72px;
+ order: 2;
+}
+
+#storage-root-container .volumes .wok-gallery span.column-name label.volume-name {
+ width: 100%;
+ height: 52px;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ display: block;
+ margin: 0;
+ padding-right: 6px;
+}
+
+#storage-root-container .volumes .wok-gallery span.column-allocated,
+#storage-root-container .volumes .wok-gallery span.column-capacity,
+#storage-root-container .volumes .wok-gallery span.column-format,
+#storage-root-container .volumes .wok-gallery span.column-type {
+ order: 3;
+ width: 72px;
+ margin-top: -5px;
+}
+
+#storage-root-container .volumes .wok-gallery span.gallery-header {
+ font-weight: 600;
+ display: block;
+}
+
+#storage-root-container .volumes .wok-list span.gallery-header {
+ display: none;
+}
+
+#storage-root-container .volumes .wok-list .volume-inline-progress {
+ vertical-align: middle;
+ display: inline-block;
+}
+
+#storage-root-container .volumes .wok-list .volume-inline-progress >
span.wok-loading-icon {
+ margin-right: 0;
+}
+
+#storage-root-container .volumes .wok-list .volume-progress {
+ width: 100%;
+ top: 0px;
+ left: 0px;
+}
+
+#storage-root-container .volumes .wok-list .volume-progress .progress-bar-outer {
+ height: 3px;
+}
+
+#storage-root-container .volumes .wok-list .volume-box-inner {
+ font-size: 0;
+}
+
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-header >
span.column-name {
+ padding-left: 41px;
+}
+
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-body >
.wok-datagrid-row {
+ position: relative;
+ cursor: pointer;
+}
+
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-body >
.wok-datagrid-row.selected {
+ background: #ddd !important;
+}
+
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-body >
.wok-datagrid-row > div > div > div > span {
+ font-family: "Open Sans", Helvetica, Arial, "Lucida Grande",
sans-serif;
+ line-height: 2.42857;
+ vertical-align: top;
+ font-size: 12.5pt;
+ font-weight: 400;
+}
+
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-body >
.wok-datagrid-row > div > div > div > span.column-name {
+ padding-left: 15px;
+}
+
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-header >
span,
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-body >
.wok-datagrid-row > div > div > div > span {
+ display: inline-block;
+ vertical-align: middle;
+}
+
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-header
span.column-format,
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-body >
.wok-datagrid-row > div > div > div span.column-format {
+ width: 173px;
+}
+
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-header
span.column-used,
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-header
span.column-type,
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-header
span.column-capacity,
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-header
span.column-allocated,
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-body >
.wok-datagrid-row > div > div > div span.column-used,
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-body >
.wok-datagrid-row > div > div > div span.column-type,
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-body >
.wok-datagrid-row > div > div > div span.column-capacity,
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-body >
.wok-datagrid-row > div > div > div span.column-allocated {
+ width: 165px;
+ text-transform: capitalize;
+}
+
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-header >
span.column-name,
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-body >
.wok-datagrid-row > div > div > div > span.column-name {
+ width: 444px;
+}
+
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-header >
span.column-name label,
+#storage-root-container .volumes .wok-list.wok-datagrid > .wok-datagrid-body >
.wok-datagrid-row > div > div > div > span.column-name label {
+ padding: 0 5px 0 0;
+ margin-right: 0;
+ margin-bottom: 0;
+ font-size: inherit;
+ font-weight: inherit;
+ width: 100%;
+ display: block;
+ height: auto;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
#storage-root-container .wok-datagrid > .wok-datagrid-body >
.wok-datagrid-row[data-stat="inactive"] {
color: #999 !important;
}
diff --git a/ui/css/src/modules/_storage.scss b/ui/css/src/modules/_storage.scss
index 4a9f9e1..23fbb3c 100644
--- a/ui/css/src/modules/_storage.scss
+++ b/ui/css/src/modules/_storage.scss
@@ -25,6 +25,8 @@
position: relative;
}
.handle {
+ -webkit-user-select: none;
+ -moz-user-select: none;
user-select: none;
position: relative;
}
@@ -58,66 +60,44 @@
width: 100%;
background: $navbar-default-toggle-hover-bg;
display: none;
+
.footer {
z-index: 100;
}
+
.volumeslist {
- padding: 11px;
+ padding: 22px;
max-height: 285px;
min-height: 136px;
+ max-height: 505px;
overflow: auto;
}
- .volume-box {
- background: $navbar-inverse-toggle-icon-bar-bg;
- padding: 4px 20px;
- margin: 11px;
- display: inline-block;
- width: 409px;
- height: 110px;
- }
- .volume-title {
- height: 46px;
- width: 100%;
- border-bottom: 1px solid $input-border;
- position: relative;
+
+ .volumeslist .row {
+ font-size: 0;
+ margin-bottom: 22px;
}
- .volume-name {
- font-size: 15pt;
- font-weight: 300;
- width: 274px;
- line-height: 46px;
- display: inline-block;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
+
+ .volumeslist .filter {
+ width: 514px;
}
- .volume-utilization {
- vertical-align: top;
- text-align: right;
+
+ .pool-action {
display: inline-block;
- width: 90px;
- height: 46px;
- line-height: 46px;
+ margin-right: 20px;
}
+
.volume-icon {
display: inline-block;
+ vertical-align: middle;
width: 27px;
- height: 46px;
- line-height: 46px;
+ height: 27px;
+ line-height: 27px;
background-repeat: no-repeat;
background-position: 50%;
background-color: transparent;
}
- .volume-usage {
- vertical-align: top;
- font-size: 15pt;
- font-weight: 400;
- display: inline-block;
- text-align: right;
- line-height: 46px;
- padding-left: 0;
- margin-left: 5px;
- }
+
.volume-icon.icon-high {
background-image: url('#{$wok-icon-path}/high.png');
}
@@ -127,14 +107,16 @@
.volume-icon.icon-low {
background-image: url('#{$wok-icon-path}/low.png');
}
+
.volume-progress {
position: absolute;
margin: 0;
- width: 409px;
- top: -4px;
- left: -20px;
+ width: 407px;
+ top: 4px;
+ left: 4px;
+
.progress-bar-outer {
- background: transparent;
+ background: $table-bg-hover;
height: 6px;
overflow: hidden;
width: 100%;
@@ -145,6 +127,7 @@
width: 100%;
}
}
+
.volume-data {
margin: 0;
padding: 0;
@@ -168,6 +151,220 @@
text-align: center;
line-height: 136px;
}
+
+ .wok-gallery {
+
+ .volume-inline-progress {
+ display: none;
+ }
+
+ &.wok-datagrid {
+ background: transparent;
+ margin-top: -12px;
+ }
+
+ &.wok-datagrid > .wok-datagrid-header {
+ display: none;
+ }
+
+ &.wok-datagrid > .wok-datagrid-body {
+ margin-left: -3px;
+ }
+
+ &.wok-datagrid .wok-datagrid-body > .wok-datagrid-row {
+ position: relative;
+ cursor: pointer;
+ background: $body-bg !important;
+ border: 0 !important;
+ display: inline-block !important;
+ width: 415px !important;
+ margin: 12px 4px 0;
+ &, * {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ }
+ }
+
+ &.wok-datagrid .wok-datagrid-body > .wok-datagrid-row.selected
.volume-box-border {
+ border-color: $guests-color;
+ }
+
+ &.wok-datagrid .wok-datagrid-body > .wok-datagrid-row.selected
.volume-box-inner {
+ border-color: $gray-base;
+ }
+
+ .volume-box-outer {
+ border-radius: 3px;
+ overflow: hidden;
+ }
+
+ .volume-box-border {
+ display: block;
+ border: 3px solid transparent;
+ transition: border-color .1s ease-in-out
+ }
+
+ .volume-box-inner {
+ padding: 0 16px;
+ width: 409px;
+ height: 110px;
+ display: flex;
+ flex-flow: row wrap;
+ justify-content: space-around;
+ border: 1px solid #fff;
+ background: #fff;
+ transition: border-color .1s ease-in-out;
+ }
+
+ span.column-name,
+ span.column-used {
+ height: 52px;
+ line-height: 52px;
+ border-bottom: 1px solid $input-border;
+ }
+
+ span.column-name {
+ width: 303px;
+ order: 1;
+ }
+
+ span.column-used {
+ width: 72px;
+ order: 2;
+ }
+
+ span.column-name label.volume-name {
+ width: 100%;
+ height: 52px;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ display: block;
+ margin: 0;
+ padding-right: 6px;
+ }
+
+ span.column-allocated,
+ span.column-capacity,
+ span.column-format,
+ span.column-type {
+ order: 3;
+ width: 72px;
+ margin-top: -5px;
+ }
+
+ span.gallery-header {
+ font-weight: 600;
+ display: block;
+ }
+
+ }
+
+ .wok-list {
+
+ span.gallery-header {
+ display: none;
+ }
+
+ .volume-inline-progress {
+ vertical-align: middle;
+ display: inline-block;
+ }
+
+ .volume-inline-progress > span.wok-loading-icon {
+ margin-right: 0;
+ }
+
+ .volume-progress {
+ width: 100%;
+ top: 0px;
+ left: 0px;
+
+ .progress-bar-outer {
+ height: 3px;
+ }
+ }
+
+ .volume-box-inner {
+ font-size: 0;
+ }
+
+ &.wok-datagrid > .wok-datagrid-header {
+
+ > span.column-name {
+ padding-left: 41px;
+ }
+
+ }
+
+ &.wok-datagrid > .wok-datagrid-body > .wok-datagrid-row {
+ position: relative;
+ cursor: pointer;
+ }
+
+ &.wok-datagrid > .wok-datagrid-body > .wok-datagrid-row.selected {
+ background: $table-bg-hover !important;
+ }
+
+ &.wok-datagrid > .wok-datagrid-body > .wok-datagrid-row > div >
div > div {
+
+ > span {
+ font-family: $font-family-sans-serif;
+ line-height: (1 + $line-height-base);
+ vertical-align: top;
+ font-size: 12.5pt;
+ font-weight: 400;
+ }
+
+ > span.column-name {
+ padding-left: 15px;
+ }
+
+ }
+
+ &.wok-datagrid > .wok-datagrid-header,
+ &.wok-datagrid > .wok-datagrid-body > .wok-datagrid-row > div >
div > div {
+
+ >span {
+ display: inline-block;
+ vertical-align: middle;
+ }
+
+ span.column-format {
+ width: 173px;
+ }
+
+ span.column-used,
+ span.column-type,
+ span.column-capacity,
+ span.column-allocated {
+ width: 165px;
+ text-transform: capitalize;
+ }
+
+ > span.column-name {
+ width: 444px;
+
+ label {
+ padding: 0 5px 0 0;
+ margin-right: 0;
+ margin-bottom: 0;
+ font-size: inherit;
+ font-weight: inherit;
+ width: 100%;
+ display: block;
+ height: auto;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ }
+ }
+
+ }
+
+
}
.wok-datagrid > .wok-datagrid-body >
.wok-datagrid-row[data-stat="inactive"] {
color: $gray-light !important;
diff --git a/ui/js/src/kimchi.storage_main.js b/ui/js/src/kimchi.storage_main.js
index 5312388..1d1781f 100644
--- a/ui/js/src/kimchi.storage_main.js
+++ b/ui/js/src/kimchi.storage_main.js
@@ -65,6 +65,34 @@ kimchi.doListStoragePools = function() {
kimchi.storageBindClick = function() {
+ $('.volumes').on('click','.toggle-gallery',function(e){
+ e.preventDefault();
+ e.stopPropagation();
+ var button = $(this);
+ var volumeBlock = $(this).parent().parent().parent();
+ var text = $('span.text', button).text();
+ $(".wok-list, .wok-gallery",volumeBlock).toggleClass("wok-list
wok-gallery");
+ $('span.text', button).text(text == i18n['KCHTMPL6005M'] ?
i18n['KCHTMPL6004M'] : i18n['KCHTMPL6005M']);
+ });
+
+ $('.volumes').on('click','.wok-datagrid-row',function(e){
+ if (!$(e.target).is("input[type='checkbox']") &&
!$(e.target).is("label")) {
+ var volumeBlock = $(this);
+ var checkbox =
volumeBlock.find('[name="selected-volume[]"]');
+ checkbox.trigger('click');
+ }
+ });
+
+
$('.volumes').on('change','[name="selected-volume[]"]',function(e){
+ var checkbox = $(this);
+ var volumeBlock = $(this).parent().parent().parent().parent().parent();
+ if(checkbox.is(":checked")){
+ volumeBlock.addClass('selected');
+ }else {
+ volumeBlock.removeClass('selected');
+ }
+ });
+
$('.inactive').each(function(index) {
if ('active' === $(this).data('state')) {
$(this).hide();
@@ -229,7 +257,8 @@ kimchi._generateVolumeHTML = function(volume) {
if(volume['type'] === 'kimchi-iso') {
return '';
}
- var volumeHtml = $('#volumeTmpl').html();
+ var volumeHtml = $('#volumeTmpl2').html();
+ volume.checkbox =
volume.name.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi,'-'),
volume.capacityLevel = Math.round(volume.allocation / volume.capacity * 100) || 0;
if (volume.capacityLevel > 100) {
volume.capacityIcon = 'icon-high';
@@ -273,7 +302,7 @@ kimchi.doListVolumes = function(poolObj) {
return result;
};
- var volumeDiv = $('#volume' + poolName);
+ var volumeDiv = $('#volume' + poolName + ' > .wok-datagrid >
.wok-datagrid-body');
$(volumeDiv).empty();
var slide = $('.volumes', poolObj);
var handleArrow = $('.arrow-down', poolObj);
@@ -312,7 +341,7 @@ kimchi.doListVolumes = function(poolObj) {
if (listHtml.length > 0) {
volumeDiv.html(listHtml);
} else {
- volumeDiv.html("<div class='pool-empty'>" +
i18n['KCHPOOL6002M'] + "</div>");
+ volumeDiv.parent().parent().parent().html("<div
class='pool-empty'>" + i18n['KCHPOOL6002M'] +
"</div>");
}
$.each(ongoingVolumesMap, function(volumeName, task) {
@@ -329,53 +358,6 @@ kimchi.doListVolumes = function(poolObj) {
kimchi.initLogicalPoolExtend = function() {
- // $("#logicalPoolExtend").dialog({
- // autoOpen : false,
- // modal : true,
- // width : 600,
- // resizable : false,
- // closeText: "X",
- // open : function(){
- // $('#loading-info',
'#logicalPoolExtend').removeClass('hidden');
- // $(".ui-dialog-titlebar-close",
$("#logicalPoolExtend").parent()).removeAttr("title");
- // kimchi.listHostPartitions(function(data) {
- // $('#loading-info',
'#logicalPoolExtend').addClass('hidden');
- // if (data.length > 0) {
- // for(var i=0;i<data.length;i++){
- // if (data[i].type === 'part' || data[i].type ===
'disk') {
- // $('.host-partition',
'#logicalPoolExtend').append(wok.substitute($('#logicalPoolExtendTmpl').html(),
data[i]));
- // }
- // }
- // } else {
- // $('.host-partition').html(i18n['KCHPOOL6011M']);
- // $('.host-partition').addClass('text-help');
- // }
- // }, function(err) {
- // $('#loading-info',
'#logicalPoolExtend').addClass('hidden');
- // $('.host-partition').html(i18n['KCHPOOL6013M'] +
'<br/>(' + err.responseJSON.reason + ')');
- // $('.host-partition').addClass('text-help');
- // });
- // },
- // beforeClose : function() { $('.host-partition',
'#logicalPoolExtend').empty(); },
- // buttons : [{
- // class: "ui-button-primary",
- // text: i18n.KCHAPI6007M,
- // click: function(){
- // var devicePaths = [];
- // $("input[type='checkbox']:checked",
"#logicalPoolExtend").each(function(){
- // devicePaths.push($(this).prop('value'));
- // })
- //
kimchi.updateStoragePool($("#logicalPoolExtend").dialog("option",
"poolName"),{disks: devicePaths},function(data){
- // var item =
$("#"+$("#logicalPoolExtend").dialog("option",
"poolName"));
- // $(".usage", $(".storage-name",
item)).text((Math.round(data.allocated/data.capacity*100)||0)+"%");
- // $(".storage-text", $(".storage-capacity",
item)).text(wok.changetoProperUnit(data.capacity,1));
- // $(".storage-text", $(".storage-allocate",
item)).text(wok.changetoProperUnit(data.allocated,1));
- // });
- // $(this).dialog("close");
- // }
- // }]
- // });
-
$('#logicalPoolExtend').on('hidden.bs.modal', function () {
$('.host-partition', '#logicalPoolExtend').empty();
});
diff --git a/ui/pages/tabs/storage.html.tmpl b/ui/pages/tabs/storage.html.tmpl
index fa51e48..8302730 100644
--- a/ui/pages/tabs/storage.html.tmpl
+++ b/ui/pages/tabs/storage.html.tmpl
@@ -102,50 +102,67 @@
</div>
</div>
<script id="storageTmpl" type="html/text">
- <div id="{name}" class="storage-li in"
data-name="{name}" data-stat="{state}">
- <span class='column-state' val="{state}">
- <span class='storage-state {state}'>
- <i class="fa fa-power-off"></i>
- </span>
- </span><!--
- --><span class='column-name' title="{name}"
val="{name}">{name}</span><!--
- --><span class='column-type'
val="{type}">{type}</span><!--
- --><span class='column-location'
val="{path}">{path}</span><!--
- --><span class='column-usage {state}' val="{usage}"
><span class='usage-icon
{icon}'>{usage}</span>%</span><!--
- --><span class='column-allocated'
val="{allocated}">{allocated}</span><!--
- --><span class='column-capacity'
val="{capacity}">{capacity}</span><!--
- --><span class="column-disks {state}">
- <div class="handle arrow-down"></div>
- </span><!--
- --><span class="column-action storage-button"
style="display:none">
- <span class="pull-right">
+<div id="{name}" class="storage-li in"
data-name="{name}" data-stat="{state}">
+ <span class='column-state' val="{state}"><span
class='storage-state {state}'><i class="fa
fa-power-off"></i></span></span><!--
+ --><span class='column-name' title="{name}"
val="{name}">{name}</span><!--
+ --><span class='column-type'
val="{type}">{type}</span><!--
+ --><span class='column-location'
val="{path}">{path}</span><!--
+ --><span class='column-usage {state}' val="{usage}"
><span class='usage-icon
{icon}'>{usage}</span>%</span><!--
+ --><span class='column-allocated'
val="{allocated}">{allocated}</span><!--
+ --><span class='column-capacity'
val="{capacity}">{capacity}</span><!--
+ --><span class="column-disks {state}"><div class="handle
arrow-down"></div></span><!--
+ --><span class="column-action storage-button"
style="display:none">
+ <span class="pull-right">
<div class="dropdown menu-flat storage-action"
data-state="{state}" data-type="{type}"
data-name="{name}">
<button class="btn btn-primary dropdown-toggle"
type="button" data-toggle="dropdown" aria-expanded="false"
aria-haspopup="true"><span
class="edit-alt"></span>$_("Actions")<span
class="caret"></span></button>
<ul class="dropdown-menu actionsheet">
- <li role="presentation">
- <a href="#" class="pool-deactivate"
data-inuse="{in_use}" data-stat="{state}" data-name="{name}"
data-persistent="{persistent}" href="#"><i class="fa
fa-minus-circle"></i>$_("Deactivate")</a>
- </li>
- <li role="presentation">
- <a href="#" class="pool-activate"
data-stat="{state}" data-name="{name}"><i class="fa
fa-power-off"></i>$_("Activate")</a>
- </li>
- <li role="presentation">
- <a href="#" class="pool-add-volume"
data-stat="{state}" data-name="{name}"
data-type="{type}"><i class="fa
fa-plus-circle"></i>$_("Add Volume")</a>
- </li>
- <li role="presentation"
class="{enableExt}">
- <a href="#" class="pool-extend"
data-stat="{state}" data-name="{name}" data-toggle="modal"
data-target="#logicalPoolExtend"><i class="fa
fa-external-link-square"></i>$_("Extend")</a>
- </li>
- <li role="presentation"
class="critical">
- <a href="#" class="pool-delete"
data-inuse="{in_use}" data-stat="{state}"
data-name="{name}"><i class="fa
fa-ban"></i>$_("Undefine")</a>
- </li>
+ <li><a href="#"
class="pool-deactivate" data-inuse="{in_use}"
data-stat="{state}" data-name="{name}"
data-persistent="{persistent}"><i class="fa
fa-minus-circle"></i>$_("Deactivate")</a></li>
+ <li><a href="#"
class="pool-activate" data-stat="{state}"
data-name="{name}"><i class="fa
fa-power-off"></i>$_("Activate")</a></li>
+ <li><a href="#"
class="pool-add-volume" data-stat="{state}"
data-name="{name}" data-type="{type}"><i class="fa
fa-plus-circle"></i>$_("Add Volume")</a></li>
+ <li class="{enableExt}"><a href="#"
class="pool-extend" data-stat="{state}" data-name="{name}"
data-toggle="modal" data-target="#logicalPoolExtend"><i
class="fa
fa-external-link-square"></i>$_("Extend")</a></li>
+ <li class="critical"><a href="#"
class="pool-delete" data-inuse="{in_use}"
data-stat="{state}" data-name="{name}"><i class="fa
fa-ban"></i>$_("Undefine")</a></li>
</ul>
</div>
- </span>
</span>
- <div class="volumes">
- <div id="volume{name}" class="volumeslist"
data-name="{name}" ></div>
- <div class="clear"></div>
- </div>
- </div>
+ </span>
+ <div class="volumes">
+ <div id="volume{name}" class="volumeslist"
data-name="{name}">
+ <div class="row">
+ <div class="pull-left">
+ <div class="dropdown menu-flat pool-action">
+ <button class="btn btn-primary dropdown-toggle"
type="button" data-toggle="dropdown" aria-expanded="false"
aria-haspopup="true"><span
class="edit-alt"></span>$_("Actions")<span
class="caret"></span></button>
+ <ul class="dropdown-menu actionsheet">
+ <li><a href="#"
class="volume-create"><i class="fa fa-plus-circle"></i>
$_("Create")</a></li>
+ <li><a href="#"
class="volume-resize"><i class="fa
fa-external-link-square"></i> $_("Resize")</a></li>
+ <li><a href="#"
class="volume-clone"><i class="fa fa-copy"></i>
$_("Clone")</a></li>
+ <li><a href="#"
class="volume-wipe"><i class="fa fa-eraser"></i>
$_("Wipe")</a></li>
+ <li class="critical"><a
href="#" class="volume-delete"><i class="fa
fa-minus-circle"></i> $_("Delete")</a></li>
+ </ul>
+ </div>
+ <button type="button" class="btn btn-default
toggle-gallery"><span class="text">$_('View
Gallery')</span> <i class="fa fa-angle-right"></i><i
class="fa fa-angle-right"></i><i class="fa
fa-angle-right"></i></button>
+ </div>
+ <div class="pull-right">
+ <label><span
class="sr-only">$_('Filter:')</span>
+ <input type="text" class="filter
form-control" placeholder="$_('Filter')">
+ </label>
+ </div>
+ </div>
+ <div class="wok-datagrid wok-list">
+ <div class="wok-datagrid-header">
+ <span
class="column-name">$_('Name')</span><!--
+ --><span
class="column-format">$_('Format')</span><!--
+ --><span
class="column-type">$_('Type')</span><!--
+ --><span
class="column-used">$_('Used')</span><!--
+ --><span
class="column-allocated">$_('Allocated')</span><!--
+ --><span
class="column-capacity">$_('Capacity')</span>
+ </div>
+ <ul class="wok-datagrid-body">
+ </ul>
+ </div>
+ </div>
+ <div class="clear"></div>
+ </div>
+</div>
</script>
<script id="volumeTmpl" type="html/text">
<div class="volume-box" data-volume-name="{name}">
@@ -187,6 +204,34 @@
</ul>
</div>
</script>
+<script id="volumeTmpl2" type="html/text">
+<li class="wok-datagrid-row">
+ <div class="volume-progress hidden">
+ <div class="progress-bar-outer">
+ <div class="progress-bar-inner"></div>
+ </div>
+ <div class="progress-label">
+ <span class="progress-status"></span>
+ <span class="progress-transferred"></span>
+ </div>
+ </div>
+ <div class="volume-box-outer">
+ <div class="volume-box-border">
+ <div class="volume-box-inner"
data-volume-name="{name}">
+ <span class="column-name" title="{name}">
+ <input type="checkbox" class="wok-checkbox"
name="selected-volume[]" id="{checkbox}"
value="{volume-id}">
+ <label class="volume-name"
for="{checkbox}"><span class="volume-inline-progress
hidden"><span class="wok-loading-icon"></span></span>
{name}</label><!--
+ --></span><!--
+ --><span class="column-format"><span
class="gallery-header">$_('Format')</span>{format}</span><!--
+ --><span class="column-type"><span
class="gallery-header">$_('Type')</span>{type}</span><!--
+ --><span class="column-used"><span
role="presentation" class="volume-icon
{capacityIcon}"></span> {capacityLevel}%</span><!--
+ --><span class="column-allocated"><span
class="gallery-header">$_('Allocation')</span>{allocation}</span><!--
+ --><span class="column-capacity"><span
class="gallery-header">$_('Capacity')</span>{capacity}</span>
+ </div>
+ </div>
+ </div>
+</li>
+</script>
<script id="logicalPoolExtendTmpl" type="html/text">
<div>
<input type="checkbox" class="wok-checkbox"
id="{name}" value="{path}" name="devices">
--
1.9.3