X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/4211e34c99a068e8beb0baa6522c655c35b47b20..0561bd0c3c07257fd58ded6c7cfa5feeae97af57:/apps/workbench/app/assets/javascripts/selection.js.erb diff --git a/apps/workbench/app/assets/javascripts/selection.js.erb b/apps/workbench/app/assets/javascripts/selection.js.erb index 0068b738ec..e8f21eefd5 100644 --- a/apps/workbench/app/assets/javascripts/selection.js.erb +++ b/apps/workbench/app/assets/javascripts/selection.js.erb @@ -1,3 +1,7 @@ +<%# Copyright (C) The Arvados Authors. All rights reserved. + +SPDX-License-Identifier: AGPL-3.0 %> + //= require jquery //= require jquery_ujs @@ -11,34 +15,50 @@ jQuery(function($){ }); function dispatch_selection_action() { - // Build a new "href" attribute for this link by starting with the - // "data-href" attribute and appending ?foo[]=bar&foo[]=baz (or - // &foo=... as appropriate) to reflect the current object - // selections. - var data = []; - var param_name = $(this).attr('data-selection-param-name'); - var href = $(this).attr('data-href'); - if ($(this).closest('.disabled').length > 0) { + /* When the user clicks a selection action link, build a form to perform + the action on the selected data, and submit it. + This is based on handleMethod from rails-ujs, extended to add the + selections to the submitted form. + Copyright (c) 2007-2010 Contributors at http://github.com/rails/jquery-ujs/contributors + */ + var $container = $(this); + if ($container.closest('.disabled').length) { return false; } - $(this). + $container.closest('.dropdown-menu').dropdown('toggle'); + + var href = $container.data('href'), + method = $container.data('method') || 'GET', + paramName = $container.data('selection-param-name'), + csrfToken = $('meta[name=csrf-token]').attr('content'), + csrfParam = $('meta[name=csrf-param]').attr('content'), + form = $('
'), + metadataInput = (''); + + if (csrfParam !== undefined && csrfToken !== undefined) { + metadataInput += (''); + } + $container. closest('.selection-action-container'). find(':checkbox:checked:visible'). - each(function() { - data.push({name: param_name, value: $(this).val()}); + each(function(index, elem) { + metadataInput += (''); }); - if (href.indexOf('?') >= 0) - href += '&'; - else - href += '?'; - href += $.param(data, true); - $(this).attr('href', href); - return true; + + form.data('remote', $container.data('remote')); + form.hide().append(metadataInput).appendTo('body'); + form.submit(); + return false; } function enable_disable_selection_actions() { var $container = $(this); var $checked = $('.persistent-selection:checkbox:checked', $container); + var collection_lock_classes = $('.lock-collection-btn').attr('class') + $('[data-selection-action]', $container). closest('div.btn-group-sm'). find('ul li'). @@ -60,6 +80,15 @@ function enable_disable_selection_actions() { toggleClass('disabled', ($checked.filter('[value*=-4zz18-]').length < 1) || ($checked.length != $checked.filter('[value*=-4zz18-]').length)); + $('[data-selection-action=remove-selected-files]', $container). + closest('li'). + toggleClass('disabled', + ($checked.length < 0) || + !($checked.length > 0 && collection_lock_classes && collection_lock_classes.indexOf("fa-unlock") !=-1)); + $('[data-selection-action=untrash-selected-items]', $container). + closest('li'). + toggleClass('disabled', + ($checked.length < 1)); } $(document). @@ -72,3 +101,11 @@ $(document). on('click', dispatch_selection_action); $(this).trigger('selections-updated'); }); + +function select_all_items() { + $(".arv-selectable-items :checkbox").filter(":visible").prop("checked", true).trigger("change"); +} + +function unselect_all_items() { + $(".arv-selectable-items :checkbox").filter(":visible").prop("checked", false).trigger("change"); +}