[ARVADOS] updated: 75759abc62c0204dbaba016e0fc556843bb94b33

git at public.curoverse.com git at public.curoverse.com
Thu Nov 13 18:30:05 EST 2014


Summary of changes:
 .../workbench/app/assets/javascripts/filterable.js | 42 ++++++++++++++++++----
 .../app/assets/javascripts/infinite_scroll.js      |  8 +++++
 .../integration/filterable_infinite_scroll_test.rb |  2 ++
 3 files changed, 46 insertions(+), 6 deletions(-)

       via  75759abc62c0204dbaba016e0fc556843bb94b33 (commit)
      from  95323ba327cadff2d1cb8c3f38c5dbb65dbd3694 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 75759abc62c0204dbaba016e0fc556843bb94b33
Author: Tom Clegg <tom at curoverse.com>
Date:   Thu Nov 13 18:29:49 2014 -0500

    4024: Use filterable-control input values (if any) when first loading dynamic content.

diff --git a/apps/workbench/app/assets/javascripts/filterable.js b/apps/workbench/app/assets/javascripts/filterable.js
index 8ac1953..6860144 100644
--- a/apps/workbench/app/assets/javascripts/filterable.js
+++ b/apps/workbench/app/assets/javascripts/filterable.js
@@ -49,8 +49,42 @@
 // Combining "select" filterable-controls with infinite-scroll is not
 // yet supported.
 
+function updateFilterableQueryNow($target) {
+    var newquery = $target.data('filterable-query-new');
+    var params = $target.data('infinite-content-params-filterable') || {};
+    params.filters = [['any', 'ilike', '%' + newquery + '%']];
+    $target.data('infinite-content-params-filterable', params);
+    $target.data('filterable-query', newquery);
+}
+
+$(document).on('refresh-content', '[data-infinite-scroller][data-filterable-query]', function(e) {
+    // If some other event causes a refresh-content event while there
+    // is a new query waiting to cooloff, we should use the new query
+    // right away -- otherwise we'd launch an extra ajax request that
+    // would have to be reloaded as soon as the cooloff period ends.
+    if (this != e.target)
+        return;
+    if ($(this).data('filterable-query') == $(this).data('filterable-query-new'))
+        return;
+    updateFilterableQueryNow($(this));
+});
+
 $(document).
-    on('paste keyup input', 'input[type=text].filterable-control', function() {
+    on('ready ajax:success', function() {
+        // Copy any initial input values into
+        // data-filterable-query[-new].
+        $('input[type=text].filterable-control').each(function() {
+            var $this = $(this);
+            var $target = $($this.attr('data-filterable-target'));
+            if ($target.data('filterable-query-new') === undefined) {
+                $target.data('filterable-query', $this.val());
+                $target.data('filterable-query-new', $this.val());
+                updateFilterableQueryNow($target);
+            }
+        });
+    }).
+    on('paste keyup input', 'input[type=text].filterable-control', function(e) {
+        if (this != e.target) return;
         var $target = $($(this).attr('data-filterable-target'));
         var currentquery = $target.data('filterable-query');
         if (currentquery === undefined) currentquery = '';
@@ -74,11 +108,7 @@ $(document).
                 // in the next 1/4 second (like type or erase
                 // characters in the search box), hide the stale
                 // content and ask the server for new results.
-                var newquery = $target.data('filterable-query-new');
-                var params = $target.data('infinite-content-params-filterable') || {};
-                params.filters = [['any', 'ilike', '%' + newquery + '%']];
-                $target.data('infinite-content-params-filterable', params);
-                $target.data('filterable-query', newquery);
+                updateFilterableQueryNow($target);
                 $target.trigger('refresh-content');
             }, 250));
         } else {
diff --git a/apps/workbench/app/assets/javascripts/infinite_scroll.js b/apps/workbench/app/assets/javascripts/infinite_scroll.js
index 0472576..915b445 100644
--- a/apps/workbench/app/assets/javascripts/infinite_scroll.js
+++ b/apps/workbench/app/assets/javascripts/infinite_scroll.js
@@ -1,4 +1,12 @@
 function maybe_load_more_content(event) {
+    // We use setTimeout here to ensure other handlers have a chance
+    // to run before any loading really starts happening.
+    setTimeout(function() {
+        return maybe_load_more_content_now(event);
+    }, 0);
+}
+
+function maybe_load_more_content_now(event) {
     var scroller = this;        // element with scroll bars
     var $container;             // element that receives new content
     var src;                    // url for retrieving content
diff --git a/apps/workbench/test/integration/filterable_infinite_scroll_test.rb b/apps/workbench/test/integration/filterable_infinite_scroll_test.rb
index 14a0677..4434f9a 100644
--- a/apps/workbench/test/integration/filterable_infinite_scroll_test.rb
+++ b/apps/workbench/test/integration/filterable_infinite_scroll_test.rb
@@ -2,6 +2,8 @@ require 'integration_helper'
 
 class FilterableInfiniteScrollTest < ActionDispatch::IntegrationTest
   setup do
+    headless = Headless.new
+    headless.start
     Capybara.current_driver = :selenium
   end
 

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list