[PATCH] [Kimchi] Fix issue #1019: Hide storage volume actions menu for iSCSI/SCSI pools

Signed-off-by: Aline Manera <alinefm@linux.vnet.ibm.com> --- ui/js/src/kimchi.storage_main.js | 57 +++++++++++++++++++++++++++------------- ui/pages/tabs/storage.html.tmpl | 4 +-- 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/ui/js/src/kimchi.storage_main.js b/ui/js/src/kimchi.storage_main.js index 0d7a6d7..3208bd2 100644 --- a/ui/js/src/kimchi.storage_main.js +++ b/ui/js/src/kimchi.storage_main.js @@ -234,24 +234,37 @@ kimchi.storageBindClick = function() { var checkbox = $(this); var volumeBlock = $(this).closest('.wok-datagrid-row'); var volumesBlock = $(this).closest('.volumeslist'); + var poolType = volumesBlock.data('type') + var selectedVolumes = $('[name="selected-volume[]"]:checked',volumesBlock) var disabled = []; - if($('[name="selected-volume[]"]:checked',volumesBlock).length > 1) { - disabled = ['volume-clone','volume-wipe','volume-delete']; - $('.volume-resize',volumesBlock).parent().addClass('disabled'); - for (i = 0; i < disabled.length; i++) { - $('.'+disabled[i],volumesBlock).parent().removeClass('disabled'); - } - }else if($('[name="selected-volume[]"]:checked',volumesBlock).length === 1){ - disabled = ['volume-resize','volume-clone','volume-wipe','volume-delete']; - for (i = 0; i < disabled.length; i++) { - $('.'+disabled[i],volumesBlock).parent().removeClass('disabled'); - } - }else { + var enabled = []; + + // No volume selected + if (selectedVolumes.length === 0) { disabled = ['volume-resize','volume-clone','volume-wipe','volume-delete']; - for (i = 0; i < disabled.length; i++) { - $('.'+disabled[i],volumesBlock).parent().addClass('disabled'); + enabled = []; + // One or more volumes selected + } else { + // Read-write pools + if (poolType !== 'scsi' && poolType !== 'iscsi') { + if (selectedVolumes.length > 1) { + disabled = ['volume-resize']; + enabled = ['volume-clone','volume-wipe','volume-delete']; + } else { + disabled = []; + enabled = ['volume-resize','volume-clone','volume-wipe', 'volume-delete']; + } } } + + for (i = 0; i < disabled.length; i++) { + $('.'+disabled[i],volumesBlock).parent().addClass('disabled'); + } + + for (i = 0; i < enabled.length; i++) { + $('.'+enabled[i],volumesBlock).parent().removeClass('disabled'); + } + if(checkbox.is(":checked")){ volumeBlock.addClass('selected'); }else { @@ -293,19 +306,27 @@ kimchi.storageBindClick = function() { } }); - $('.pool-add-volume').each(function(index) { + $('.volume-add').each(function(index) { var canAddVolume = $(this).data('stat') === 'active' && $(this).data('type') !== 'iscsi' && $(this).data('type') !== 'scsi'; if(canAddVolume) { - $(this).parent().show(); + $(this).parent().removeClass('disabled'); } else { - $(this).parent().hide(); + $(this).parent().addClass('disabled'); } }); + $('.volumeslist').each(function(index) { + var rwpool = $(this).data('type') !== 'iscsi' && + $(this).data('type') !== 'scsi' + + if (!rwpool) + $('.pool-action', $(this)).addClass('hidden'); + }); + if(wok.tabMode['storage'] === 'admin') { $('.pool-delete').on('click', function(event) { event.preventDefault(); @@ -382,7 +403,7 @@ kimchi.storageBindClick = function() { } }); - $('.pool-add-volume').on('click', function(event) { + $('.volume-add').on('click', function(event) { event.preventDefault(); var poolName = $(this).data('name'); kimchi.selectedSP = poolName; diff --git a/ui/pages/tabs/storage.html.tmpl b/ui/pages/tabs/storage.html.tmpl index 92d9b75..65d6d19 100644 --- a/ui/pages/tabs/storage.html.tmpl +++ b/ui/pages/tabs/storage.html.tmpl @@ -125,13 +125,13 @@ </span> </span> <div class="volumes"> - <div id="volume-{name}" class="volumeslist" data-name="{name}"> + <div id="volume-{name}" class="volumeslist" data-name="{name}" data-type="{type}"> <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="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="disabled"><a href="#" class="volume-add" data-stat="{state}" data-name="{name}" data-type="{type}"><i class="fa fa-plus-circle"></i> $_("Add Volume")</a></li> <li class="disabled"><a href="#" class="volume-resize" data-name="{name}"><i class="fa fa-external-link-square"></i> $_("Resize")</a></li> <li class="disabled"><a href="#" class="volume-clone" data-name="{name}"><i class="fa fa-copy"></i> $_("Clone")</a></li> <li class="disabled"><a href="#" class="volume-wipe" data-name="{name}"><i class="fa fa-eraser"></i> $_("Wipe")</a></li> -- 2.5.5

Reviewed-By: Lucio Correia <luciojhc@linux.vnet.ibm.com> On 28-09-2016 11:34, Aline Manera wrote:
Signed-off-by: Aline Manera <alinefm@linux.vnet.ibm.com> --- ui/js/src/kimchi.storage_main.js | 57 +++++++++++++++++++++++++++------------- ui/pages/tabs/storage.html.tmpl | 4 +-- 2 files changed, 41 insertions(+), 20 deletions(-)
diff --git a/ui/js/src/kimchi.storage_main.js b/ui/js/src/kimchi.storage_main.js index 0d7a6d7..3208bd2 100644 --- a/ui/js/src/kimchi.storage_main.js +++ b/ui/js/src/kimchi.storage_main.js @@ -234,24 +234,37 @@ kimchi.storageBindClick = function() { var checkbox = $(this); var volumeBlock = $(this).closest('.wok-datagrid-row'); var volumesBlock = $(this).closest('.volumeslist'); + var poolType = volumesBlock.data('type') + var selectedVolumes = $('[name="selected-volume[]"]:checked',volumesBlock) var disabled = []; - if($('[name="selected-volume[]"]:checked',volumesBlock).length > 1) { - disabled = ['volume-clone','volume-wipe','volume-delete']; - $('.volume-resize',volumesBlock).parent().addClass('disabled'); - for (i = 0; i < disabled.length; i++) { - $('.'+disabled[i],volumesBlock).parent().removeClass('disabled'); - } - }else if($('[name="selected-volume[]"]:checked',volumesBlock).length === 1){ - disabled = ['volume-resize','volume-clone','volume-wipe','volume-delete']; - for (i = 0; i < disabled.length; i++) { - $('.'+disabled[i],volumesBlock).parent().removeClass('disabled'); - } - }else { + var enabled = []; + + // No volume selected + if (selectedVolumes.length === 0) { disabled = ['volume-resize','volume-clone','volume-wipe','volume-delete']; - for (i = 0; i < disabled.length; i++) { - $('.'+disabled[i],volumesBlock).parent().addClass('disabled'); + enabled = []; + // One or more volumes selected + } else { + // Read-write pools + if (poolType !== 'scsi' && poolType !== 'iscsi') { + if (selectedVolumes.length > 1) { + disabled = ['volume-resize']; + enabled = ['volume-clone','volume-wipe','volume-delete']; + } else { + disabled = []; + enabled = ['volume-resize','volume-clone','volume-wipe', 'volume-delete']; + } } } + + for (i = 0; i < disabled.length; i++) { + $('.'+disabled[i],volumesBlock).parent().addClass('disabled'); + } + + for (i = 0; i < enabled.length; i++) { + $('.'+enabled[i],volumesBlock).parent().removeClass('disabled'); + } + if(checkbox.is(":checked")){ volumeBlock.addClass('selected'); }else { @@ -293,19 +306,27 @@ kimchi.storageBindClick = function() { } });
- $('.pool-add-volume').each(function(index) { + $('.volume-add').each(function(index) { var canAddVolume = $(this).data('stat') === 'active' && $(this).data('type') !== 'iscsi' && $(this).data('type') !== 'scsi'; if(canAddVolume) { - $(this).parent().show(); + $(this).parent().removeClass('disabled'); } else { - $(this).parent().hide(); + $(this).parent().addClass('disabled'); } });
+ $('.volumeslist').each(function(index) { + var rwpool = $(this).data('type') !== 'iscsi' && + $(this).data('type') !== 'scsi' + + if (!rwpool) + $('.pool-action', $(this)).addClass('hidden'); + }); + if(wok.tabMode['storage'] === 'admin') { $('.pool-delete').on('click', function(event) { event.preventDefault(); @@ -382,7 +403,7 @@ kimchi.storageBindClick = function() { } });
- $('.pool-add-volume').on('click', function(event) { + $('.volume-add').on('click', function(event) { event.preventDefault(); var poolName = $(this).data('name'); kimchi.selectedSP = poolName; diff --git a/ui/pages/tabs/storage.html.tmpl b/ui/pages/tabs/storage.html.tmpl index 92d9b75..65d6d19 100644 --- a/ui/pages/tabs/storage.html.tmpl +++ b/ui/pages/tabs/storage.html.tmpl @@ -125,13 +125,13 @@ </span> </span> <div class="volumes"> - <div id="volume-{name}" class="volumeslist" data-name="{name}"> + <div id="volume-{name}" class="volumeslist" data-name="{name}" data-type="{type}"> <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="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="disabled"><a href="#" class="volume-add" data-stat="{state}" data-name="{name}" data-type="{type}"><i class="fa fa-plus-circle"></i> $_("Add Volume")</a></li> <li class="disabled"><a href="#" class="volume-resize" data-name="{name}"><i class="fa fa-external-link-square"></i> $_("Resize")</a></li> <li class="disabled"><a href="#" class="volume-clone" data-name="{name}"><i class="fa fa-copy"></i> $_("Clone")</a></li> <li class="disabled"><a href="#" class="volume-wipe" data-name="{name}"><i class="fa fa-eraser"></i> $_("Wipe")</a></li>
-- Lucio Correia Software Engineer IBM LTC Brazil
participants (2)
-
Aline Manera
-
Lucio Correia