From 51aaccb65bb4ce087e2b9ba69486f3db870825e7 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Wed, 3 Dec 2014 17:26:23 -0500 Subject: [PATCH] 4525: Call enable_disable_selection_actions once per container to avoid crosstalk between containers. Also, separate event binding setup from enable/disable hook, and avoid binding many copies of the selection dispatch click handler. --- .../app/assets/javascripts/selection.js.erb | 30 +++++++++---------- .../app/assets/javascripts/tab_panes.js | 1 - 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/apps/workbench/app/assets/javascripts/selection.js.erb b/apps/workbench/app/assets/javascripts/selection.js.erb index 34a5d7a838..0032ebd3f9 100644 --- a/apps/workbench/app/assets/javascripts/selection.js.erb +++ b/apps/workbench/app/assets/javascripts/selection.js.erb @@ -41,40 +41,38 @@ function dispatch_selection_action() { } function enable_disable_selection_actions() { - var $container = $(this).closest('.selection-action-container'); - var $checked = $('.persistent-selection:checkbox:checked:visible', $container); - $('[data-selection-action]'). + var $container = $(this); + var $checked = $('.persistent-selection:checkbox:checked', $container); + $('[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) || ($checked.length != $checked.filter('[value*=-4zz18-]').length)); } -function update_selection_actions() { - var $btn = $('[data-selection-action]'); - $btn.click(dispatch_selection_action); - enable_disable_selection_actions.call($btn); -} - $(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'); }); diff --git a/apps/workbench/app/assets/javascripts/tab_panes.js b/apps/workbench/app/assets/javascripts/tab_panes.js index 11990b0dea..07e46fe65f 100644 --- a/apps/workbench/app/assets/javascripts/tab_panes.js +++ b/apps/workbench/app/assets/javascripts/tab_panes.js @@ -2,7 +2,6 @@ // Fire when a tab is selected/clicked. $(document).on('shown.bs.tab', '[data-toggle="tab"]', function(event) { - update_selection_actions(); // reload the pane (unless it's already loaded) $($(event.target).attr('href')). not('.pane-loaded'). -- 2.30.2