3149: Fix user-controlled filters overwriting page-controlled filters.
authorTom Clegg <tom@curoverse.com>
Mon, 25 Aug 2014 01:36:40 +0000 (21:36 -0400)
committerTom Clegg <tom@curoverse.com>
Mon, 25 Aug 2014 02:24:54 +0000 (22:24 -0400)
apps/workbench/app/assets/javascripts/filterable.js
apps/workbench/app/assets/javascripts/infinite_scroll.js
apps/workbench/app/views/projects/_show_tab_contents.html.erb

index 182924b880be4303720183fc4ac707dd8e251190..51a1060f188e2b9a41c33ad4257bb0e8d06918c2 100644 (file)
@@ -24,9 +24,9 @@ $(document).
                 // 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') || {};
-                params.filters = JSON.stringify([['any', 'ilike', '%' + newquery + '%']]);
-                $target.data('infinite-content-params', params);
+                var params = $target.data('infiniteContentParamsFilterable') || {};
+                params.filters = [['any', 'ilike', '%' + newquery + '%']];
+                $target.data('infiniteContentParamsFilterable', params);
                 $target.data('filterable-query', newquery);
                 $target.trigger('refresh-content');
             }, 250));
index 84494eda065bf5fca9e26faeff134809b486c135..8e6bbf0a818e7527057fe273d023a79bc4581dbd 100644 (file)
@@ -5,6 +5,7 @@ function maybe_load_more_content(event) {
     var scrollHeight;
     var spinner, colspan;
     var serial = Date.now();
+    var params;
     scrollHeight = scroller.scrollHeight || $('body')[0].scrollHeight;
     if ($(scroller).scrollTop() + $(scroller).height()
         >
@@ -39,10 +40,36 @@ function maybe_load_more_content(event) {
         $container.find(".spinner").detach();
         $container.append(spinner);
         $container.attr('data-infinite-serial', serial);
+
+        // Combine infiniteContentParams from multiple
+        // sources. filterable.js might put its params in
+        // infiniteContentParamsFilterable, etc.
+        params = {};
+        $.each($container.data(), function(datakey, datavalue) {
+            if (/^infiniteContentParams/.exec(datakey)) {
+                if (datavalue instanceof Object) {
+                    $.each(datavalue, function(hkey, hvalue) {
+                        if (hvalue instanceof Array) {
+                            params[hkey] = (params[hkey] || []).concat(hvalue);
+                        } else if (hvalue instanceof Object) {
+                            $.extend(params[hkey], hvalue);
+                        } else {
+                            params[hkey] = hvalue;
+                        }
+                    });
+                }
+            }
+        });
+        $.each(params, function(k,v) {
+            if (v instanceof Object) {
+                params[k] = JSON.stringify(v);
+            }
+        });
+
         $.ajax(src,
                {dataType: 'json',
                 type: 'GET',
-                data: ($container.data('infinite-content-params') || {}),
+                data: params,
                 context: {container: $container, src: src, serial: serial}}).
             fail(function(jqxhr, status, error) {
                 var $faildiv;
@@ -81,11 +108,12 @@ function maybe_load_more_content(event) {
 $(document).
     on('click', 'div.infinite-retry button', function() {
         var $retry_div = $(this).closest('.infinite-retry');
-        var $scroller = $(this).closest('.infinite-scroller')
-        $scroller.attr('data-infinite-content-href',
-                       $retry_div.attr('data-infinite-content-href'));
-        $retry_div.replaceWith('<div class="spinner spinner-32px spinner-h-center" />');
-        $scroller.trigger('scroll');
+        var $container = $(this).closest('.infinite-scroller-ready')
+        $container.attr('data-infinite-content-href',
+                        $retry_div.attr('data-infinite-content-href'));
+        $retry_div.
+            replaceWith('<div class="spinner spinner-32px spinner-h-center" />');
+        $('.infinite-scroller').trigger('scroll');
     }).
     on('refresh-content', '[data-infinite-scroller]', function() {
         // Clear all rows, reset source href to initial state, and
index 8ea2e6cc181ac893ea6a4a02d967336d2d1538d0..8fb588ff6b33936ebf85add1e83ff3c79672802b 100644 (file)
@@ -46,7 +46,7 @@
       <col width="60%" style="width: 60%;" />
       <col width="40%" style="width: 40%;" />
     </colgroup>
-    <tbody data-infinite-scroller="#<%= tab_pane %>-scroll" data-infinite-content-href="<%= url_for partial: :contents_rows, filters: filters.to_json %>">
+    <tbody data-infinite-scroller="#<%= tab_pane %>-scroll" data-infinite-content-href="<%= url_for partial: :contents_rows %>" data-infinite-content-params-projecttab="<%= {filters: filters}.to_json %>">
     </tbody>
     <thead>
       <tr>