X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/12d990a6590e5f23a5998d29a2d8efdb0f733688..bff57ea5cd61b02b829d831e3637151b1cf4b94c:/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 59e6425698..0068b738ec 100644 --- a/apps/workbench/app/assets/javascripts/selection.js.erb +++ b/apps/workbench/app/assets/javascripts/selection.js.erb @@ -1,175 +1,15 @@ //= require jquery //= require jquery_ujs -/** Javascript for local persistent selection. */ - -get_selection_list = null; -form_selection_sources = {}; +/** Javascript for selection. */ jQuery(function($){ - var storage = localStorage; // sessionStorage - - get_selection_list = function() { - if (!storage.persistentSelection) { - storage.persistentSelection = JSON.stringify([]); - } - return JSON.parse(storage.persistentSelection); - } - - var put_storage = function(lst) { - storage.persistentSelection = JSON.stringify(lst); - } - - var add_selection = function(uuid, name, href, type) { - var lst = get_selection_list(); - lst.push({"uuid": uuid, "name": name, "href": href, "type": type}); - put_storage(lst); - update_count(); - }; - - var remove_selection = function(uuid) { - var lst = get_selection_list(); - for (var i = 0; i < lst.length; i++) { - if (lst[i].uuid == uuid) { - lst.splice(i, 1); - i--; - } - } - put_storage(lst); - update_count(); - }; - - var remove_selection_click = function(e) { - remove_selection($(this).val()); - }; - - var clear_selections = function() { - put_storage([]); - update_count(); - } - - var update_count = function(e) { - var html; - var this_object_uuid = $('#selection-form-content'). - closest('form'). - find('input[name=uuid]').val(); - var lst = get_selection_list(); - $("#persistent-selection-count").text(lst.length); - if (lst.length > 0) { - html = '
  • Clear selections
  • '; - $('#selection-form-content').html(html); - - for (var i = 0; i < lst.length; i++) { - $('#selection-form-content > li > table').append("" - + "" - + "" - + "" - - + "" - + "
    " + lst[i].name + "
    " - + "" - - + "" - + "" + lst[i].type + "" - + "" - - + ""); - } - } else { - $('#selection-form-content').html("
  • No selections.
  • "); - } - - var checkboxes = $('.persistent-selection:checkbox'); - for (i = 0; i < checkboxes.length; i++) { - for (var j = 0; j < lst.length; j++) { - if (lst[j].uuid == $(checkboxes[i]).val()) { - checkboxes[i].checked = true; - break; - } - } - if (j == lst.length) { - checkboxes[i].checked = false; - } - } - - $('.remove-selection').on('click', remove_selection_click); - $('#clear_selections_button').on('click', clear_selections); - $(document).trigger('selections-updated', [lst]); - }; - $(document). on('change', '.persistent-selection:checkbox', function(e) { - var inc = 0; - if ($(this).is(":checked")) { - add_selection($(this).val(), $(this).attr('friendly_name'), $(this).attr('href'), $(this).attr('friendly_type')); - } - else { - remove_selection($(this).val()); - } + $(document).trigger('selections-updated'); }); - - $(window).on('load storage', update_count); - - $('#selection-form-content').on("click", function(e) { - e.stopPropagation(); - }); }); -add_form_selection_sources = null; -select_form_sources = null; - -(function() { - var form_selection_sources = {}; - add_form_selection_sources = function (src) { - for (var i = 0; i < src.length; i++) { - var t = form_selection_sources[src[i].type]; - if (!t) { - t = form_selection_sources[src[i].type] = {}; - } - if (!t[src[i].uuid]) { - t[src[i].uuid] = src[i]; - } - } - }; - - select_form_sources = function(type) { - var ret = []; - - if (get_selection_list) { - var lst = get_selection_list(); - if (lst.length > 0) { - var text = "― Selections ―"; - var span = document.createElement('span'); - span.innerHTML = text; - ret.push({text: span.innerHTML, value: "***invalid***"}); - - for (var i = 0; i < lst.length; i++) { - if (lst[i].type == type) { - var n = lst[i].name; - n = n.replace(/]*>/i, "["); - n = n.replace(/<\/span>/i, "]"); - ret.push({text: n, value: lst[i].uuid}) - } - } - } - } - - var text = "― Recent ―"; - var span = document.createElement('span'); - span.innerHTML = text; - ret.push({text: span.innerHTML, value: "***invalid***"}); - - var t = form_selection_sources[type]; - for (var key in t) { - if (t.hasOwnProperty(key)) { - var obj = t[key]; - ret.push({text: obj.name, value: obj.uuid}) - } - } - return ret; - }; -})(); - 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 @@ -179,11 +19,11 @@ function dispatch_selection_action() { var param_name = $(this).attr('data-selection-param-name'); var href = $(this).attr('data-href'); if ($(this).closest('.disabled').length > 0) { - return false; + return false; } $(this). closest('.selection-action-container'). - find(':checkbox:checked'). + find(':checkbox:checked:visible'). each(function() { data.push({name: param_name, value: $(this).val()}); }); @@ -197,25 +37,25 @@ function dispatch_selection_action() { } function enable_disable_selection_actions() { - var $container = $(this).closest('.selection-action-container'); + var $container = $(this); var $checked = $('.persistent-selection:checkbox:checked', $container); - $('[data-selection-action]'). + $('[data-selection-action]', $container). closest('div.btn-group-sm'). find('ul li'). toggleClass('disabled', ($checked.length == 0)); - $('[data-selection-action=compare]'). + $('[data-selection-action=compare]', $container). closest('li'). toggleClass('disabled', ($checked.filter('[value*=-d1hrv-]').length < 2) || ($checked.not('[value*=-d1hrv-]').length > 0)); <% unless Group.copies_to_projects? %> - $('[data-selection-action=copy]'). + $('[data-selection-action=copy]', $container). closest('li'). toggleClass('disabled', ($checked.filter('[value*=-j7d0g-]').length > 0) || ($checked.length < 1)); <% end %> - $('[data-selection-action=combine-project-contents]'). + $('[data-selection-action=combine-project-contents]', $container). closest('li'). toggleClass('disabled', ($checked.filter('[value*=-4zz18-]').length < 1) || @@ -223,8 +63,12 @@ function enable_disable_selection_actions() { } $(document). - on('selections-updated ready ajax:complete', function() { - var $btn = $('[data-selection-action]'); - $btn.click(dispatch_selection_action); - enable_disable_selection_actions.call($btn); + on('selections-updated', function() { + $('.selection-action-container').each(enable_disable_selection_actions); + }). + on('ready ajax:complete', function() { + $('[data-selection-action]'). + off('click', dispatch_selection_action). + on('click', dispatch_selection_action); + $(this).trigger('selections-updated'); });