4525: Call enable_disable_selection_actions once per container to
authorTom Clegg <tom@curoverse.com>
Wed, 3 Dec 2014 22:26:23 +0000 (17:26 -0500)
committerTom Clegg <tom@curoverse.com>
Wed, 3 Dec 2014 22:26:23 +0000 (17:26 -0500)
avoid crosstalk between containers.

Also, separate event binding setup from enable/disable hook, and avoid
binding many copies of the selection dispatch click handler.

apps/workbench/app/assets/javascripts/selection.js.erb
apps/workbench/app/assets/javascripts/tab_panes.js

index 34a5d7a838c16afb9c8061df59e29dfd351cfc70..0032ebd3f934cfca235b25840a5a913528d76c07 100644 (file)
@@ -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');
     });
index 11990b0dea63784283105d5f98e51a00419d7dbc..07e46fe65fc845328eb21c0c0bc7dd6042ba5d21 100644 (file)
@@ -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').