diff --git a/ui/plugins/netapp b/ui/plugins/netapp new file mode 120000 index 00000000000..21f67e4ad49 --- /dev/null +++ b/ui/plugins/netapp @@ -0,0 +1 @@ +/Users/csuich/CloudStack/workspace/ui-plugin/ \ No newline at end of file diff --git a/ui/scripts/ui/widgets/dataTable.js b/ui/scripts/ui/widgets/dataTable.js index 66d70956a42..4c025314be0 100644 --- a/ui/scripts/ui/widgets/dataTable.js +++ b/ui/scripts/ui/widgets/dataTable.js @@ -83,12 +83,12 @@ .addClass('data-table') .appendTo($table.parent()) .append( - $table.remove() + $table.detach() ); $table = $mainContainer; var $theadContainer = $('
| ').appendTo($thead.find('tr')); + var content = $('') + .attr('type', 'checkbox') + .addClass('multiSelectMasterCheckbox') + .appendTo($th); + + content.click(function() { + var checked = $(this).is(':checked'); + $('.multiSelectCheckbox').attr('checked', checked); + toggleMultiSelectActions(checked); + }); + } + $.each(fields, function(key) { if ($.inArray(key, hiddenFields) != -1) return true; @@ -717,7 +815,7 @@ } ); - if (actions && renderActionCol(actions) && actionsArray.length != headerActionsArray.length) { + if (actions && !options.noActionCol && renderActionCol(actions) && actionsArray.length != headerActionsArray.length) { $thead.find('tr').append( $(' | ') .html(_l('label.actions')) @@ -918,6 +1016,7 @@ var rows = []; var reorder = options.reorder; var detailView = options.detailView; + var multiSelect = options.multiSelect; var $listView = $tbody.closest('.list-view'); var listViewArgs = $listView.data('view-args'); var uiCustom = listViewArgs.uiCustom; @@ -953,6 +1052,27 @@ if (preFilter != null) hiddenFields = preFilter(); + if (multiSelect) { + var $td = $(' | ')
+ .appendTo($tr);
+ var content = $('')
+ .attr('type', 'checkbox')
+ .addClass('multiSelectCheckbox')
+ .click(function() {
+ var checked = $(this).is(':checked');
+ var numRows = $(this).parents('tbody').find('input.multiSelectCheckbox').size();
+ var numRowsChecked = $(this).parents('tbody').find('input.multiSelectCheckbox:checked').size();
+ var enabled = checked || (numRowsChecked > 0);
+ toggleMultiSelectActions(enabled);
+
+ $('input.multiSelectMasterCheckbox').attr('checked', (numRows === numRowsChecked));
+ });
+
+ $td.append(
+ $('').html(content)
+ );
+ }
+
// Add field data
$.each(fields, function(key) {
if ($.inArray(key, hiddenFields) != -1)
@@ -995,8 +1115,11 @@
$td.attr('title', _s(content));
});
-
- $tr.find('td:first').addClass('first');
+
+ var $first = $tr.find('td:first');
+ if (multiSelect)
+ $first = $first.next();
+ $first.addClass('first');
// Add reorder actions
if (reorder) {
@@ -1103,7 +1226,7 @@
}
);
- if (actions && renderActionCol(actions) && actionsArray.length != headerActionsArray.length) {
+ if (actions && !options.noActionCol && renderActionCol(actions) && actionsArray.length != headerActionsArray.length) {
var allowedActions = $.map(actions, function(value, key) {
return key;
});
@@ -1308,6 +1431,7 @@
if (!options) options = {};
var context = options.context;
var reorder = options.reorder;
+ var multiSelect = options.multiSelect;
var $tbody = $table.find('tbody');
if (!loadArgs) loadArgs = {
@@ -1338,7 +1462,9 @@
actionFilter: args.actionFilter,
context: context,
reorder: reorder,
- detailView: options.detailView
+ detailView: options.detailView,
+ 'multiSelect': options.multiSelect,
+ noActionCol: options.noActionCol
});
$table.dataTable(null, {
noSelect: uiCustom
@@ -1494,6 +1620,7 @@
var page = 1;
var actions = listViewData.actions;
var reorder = listViewData.reorder;
+ var multiSelect = listViewData.multiSelect;
var tableHeight = $table.height();
var endTable = false;
var setEndTable = function() {
@@ -1557,14 +1684,18 @@
})
)) return true;
- $toolbar
- .append(
- $(' ')
- .addClass('button action main-action reduced-hide').addClass(actionName)
- .data('list-view-action-id', actionName)
- .append($('').addClass('icon'))
- .append($('').html(_l(action.label)))
- );
+ var $action = $(' ')
+ .addClass('button action main-action reduced-hide').addClass(actionName)
+ .data('list-view-action-id', actionName)
+ .append($('').addClass('icon'))
+ .append($('').html(_l(action.label)));
+
+ if (action.isMultiSelectAction) {
+ $action.addClass('multiSelectAction');
+ $action.hide();
+ }
+
+ $toolbar.append($action)
return true;
});
@@ -1577,7 +1708,9 @@
$table,
listViewData.actions, {
reorder: reorder,
- detailView: listViewData.detailView
+ detailView: listViewData.detailView,
+ 'multiSelect': multiSelect,
+ noActionCol: listViewData.noActionCol
});
createFilters($toolbar, listViewData.filters);
createSearchBar($toolbar, listViewData);
@@ -1602,7 +1735,9 @@
context: args.context,
reorder: reorder,
detailView: listViewData.detailView,
- setEndTable: setEndTable
+ setEndTable: setEndTable,
+ 'multiSelect': multiSelect,
+ noActionCol: listViewData.noActionCol
}
);
@@ -1654,7 +1789,9 @@
context: $listView.data('view-args').context,
reorder: listViewData.reorder,
detailView: listViewData.detailView,
- setEndTable: setEndTable
+ setEndTable: setEndTable,
+ 'multiSelect': multiSelect,
+ noActionCol: listViewData.noActionCol
}
);
};
@@ -1703,7 +1840,9 @@
context: $listView.data('view-args').context,
reorder: listViewData.reorder,
detailView: listViewData.detailView,
- setEndTable: setEndTable
+ setEndTable: setEndTable,
+ 'multiSelect': multiSelect,
+ noActionCol: listViewData.noActionCol
}
);
};
@@ -1793,7 +1932,9 @@
}, actions, {
reorder: listViewData.reorder,
detailView: listViewData.detailView,
- setEndTable: setEndTable
+ setEndTable: setEndTable,
+ 'multiSelect': multiSelect,
+ noActionCol: listViewData.noActionCol
});
$table.height() == tableHeight ? endTable = true : tableHeight = $table.height();
}
@@ -1824,8 +1965,7 @@
var id = $target.closest('tr').data('list-view-item-id');
var jsonObj = $target.closest('tr').data('jsonObj');
var detailViewArgs;
- var detailViewPresent = ($target.closest('div.data-table tr td').size() &&
- $target.closest('div.data-table tr td').index() == 0 &&
+ var detailViewPresent = ($target.closest('div.data-table tr td.first').size() &&
listViewData.detailView && !$target.closest('div.edit').size());
var uiCustom = args.uiCustom == true ? true : false;
@@ -1896,10 +2036,14 @@
}
if ($target.closest('.action.add').size() ||
- $target.closest('.action.main-action').size()) {
+ $target.closest('.action.main-action:not(.multiSelectAction)').size()) {
$tr = $target.closest('div.list-view').find('tr:first'); // Dummy row
} else {
- $tr = $target.closest('tr');
+ if (listViewData.actions[actionID].isMultiSelectAction) {
+ $tr = $('div.list-view').find('input.multiSelectCheckbox:checked').parents('tr');
+ } else {
+ $tr = $target.closest('tr');
+ }
}
var uiCallback = uiActions[actionID];
@@ -1960,7 +2104,9 @@
prepend: true,
actionFilter: actionFilter,
reorder: reorder,
- detailView: targetArgs.detailView
+ detailView: targetArgs.detailView,
+ 'multiSelect': targetArgs.multiSelect,
+ noActionCol: targetArgs.noActionCol
}
)[0];
listView.find('table').dataTable('refresh');
@@ -1980,6 +2126,7 @@
listViewArgs.activeSection
].listView : listViewArgs;
var reorder = targetArgs.reorder;
+ var multiSelect = targetArgs.multiSelect;
var $table = $row.closest('table');
var defaultActionFilter = $row.data('list-view-action-filter');
@@ -1991,7 +2138,9 @@
targetArgs.actions, {
actionFilter: actionFilter ? actionFilter : defaultActionFilter,
reorder: reorder,
- detailView: targetArgs.detailView
+ detailView: targetArgs.detailView,
+ 'multiSelect': multiSelect,
+ noActionCol: targetArgs.noActionCol
}
)[0];
@@ -2004,6 +2153,13 @@
return $newRow;
};
+ var toggleMultiSelectActions = function(enabled) {
+ var $listView = $('div.list-view');
+ $listView.find('div.action.add')[enabled ? 'hide' : 'show']();
+ $listView.find('div.main-action:not(.multiSelectAction)')[enabled ? 'hide' : 'show']();
+ $listView.find('div.main-action.multiSelectAction')[enabled ? 'show' : 'hide']();
+ }
+
$.fn.listView = function(args, options) {
if (!options) options = {};
if (args == 'prependItem') {
|
|---|