|
1748 | 1748 | // List view header actions |
1749 | 1749 | if (listViewData.actions) { |
1750 | 1750 | $.each(listViewData.actions, function(actionName, action) { |
1751 | | - if (!action.isHeader || ( |
1752 | | - action.preFilter && !action.preFilter({ |
| 1751 | + var preFilter = function(extendContext) { |
| 1752 | + var context = $.extend(true, {}, |
| 1753 | + $listView.data('view-args').context ? $listView.data('view-args').context : cloudStack.context); |
| 1754 | + |
| 1755 | + if (extendContext) { |
| 1756 | + $.extend(context, extendContext); |
| 1757 | + } |
| 1758 | + |
| 1759 | + return action.preFilter ? action.preFilter({ |
1753 | 1760 | id: listViewData.id, |
1754 | | - context: $listView.data('view-args').context ? $listView.data('view-args').context : cloudStack.context |
1755 | | - }) |
1756 | | - )) return true; |
| 1761 | + context: context |
| 1762 | + }) : null; |
| 1763 | + } |
| 1764 | + |
| 1765 | + if (!action.isHeader || (action.preFilter && !preFilter())) return true; |
1757 | 1766 |
|
1758 | 1767 | var $action = $('<div>') |
1759 | 1768 | .addClass('button action main-action reduced-hide').addClass(actionName) |
|
1764 | 1773 | if (action.isMultiSelectAction) { |
1765 | 1774 | $action.addClass('multiSelectAction'); |
1766 | 1775 | $action.hide(); |
| 1776 | + |
| 1777 | + if (action.preFilter) { |
| 1778 | + $action.data('list-view-action-prefilter', preFilter); |
| 1779 | + } |
1767 | 1780 | } |
1768 | 1781 |
|
1769 | 1782 | $toolbar.append($action) |
|
2234 | 2247 | }; |
2235 | 2248 |
|
2236 | 2249 | var toggleMultiSelectActions = function($listView, enabled) { |
| 2250 | + var $multiSelectActions = $listView.find('div.main-action.multiSelectAction'); |
| 2251 | + |
2237 | 2252 | $listView.find('div.action.add')[enabled ? 'hide' : 'show'](); |
2238 | 2253 | $listView.find('div.main-action:not(.multiSelectAction)')[enabled ? 'hide' : 'show'](); |
2239 | | - $listView.find('div.main-action.multiSelectAction')[enabled ? 'show' : 'hide'](); |
| 2254 | + $multiSelectActions.hide(); |
| 2255 | + |
| 2256 | + if (enabled) { |
| 2257 | + $multiSelectActions.filter(function() { |
| 2258 | + var preFilter = $(this).data('list-view-action-prefilter'); |
| 2259 | + var $selectedVMs; |
| 2260 | + var context = {}; |
| 2261 | + |
| 2262 | + if (preFilter) { |
| 2263 | + $selectedVMs = $listView.find('tbody tr').filter(function() { |
| 2264 | + return $(this).find('td.multiselect input[type=checkbox]:checked').size() |
| 2265 | + }); |
| 2266 | + context[$listView.data('view-args').activeSection] = $selectedVMs.map(function(index, item) { |
| 2267 | + return $(item).data('json-obj'); |
| 2268 | + }); |
| 2269 | + |
| 2270 | + return preFilter(context); |
| 2271 | + } |
| 2272 | + |
| 2273 | + return true; |
| 2274 | + }).show(); |
| 2275 | + } |
2240 | 2276 | } |
2241 | 2277 |
|
2242 | 2278 | $.fn.listView = function(args, options) { |
|
0 commit comments