Add expand by default option to status page

If selected all of the patchset jobs will be visible by default
rather than collapsed.

Change-Id: Ib1be50924aee057201ee7a4b4937abac0b45d752
diff --git a/etc/status/public_html/app.js b/etc/status/public_html/app.js
index 22c1ed7..2649090 100644
--- a/etc/status/public_html/app.js
+++ b/etc/status/public_html/app.js
@@ -442,17 +442,40 @@
                 return $form_group;
             },
 
-            filter_form: function() {
+            expand_form_group: function() {
+                expand_by_default = (
+                    read_cookie('zuul_expand_by_default', false) === 'true');
+
+                $checkbox = $('<input />')
+                    .attr('type', 'checkbox')
+                    .attr('id', 'expand_by_default')
+                    .prop('checked', expand_by_default)
+                    .change(zuul.handle_expand_by_default);
+
+                $label = $('<label />')
+                    .css('padding-left', '1em')
+                    .html('Expand by default: ')
+                    .append($checkbox);
+
+                var $form_group = $('<div />')
+                    .addClass('checkbox')
+                    .append($label);
+                return $form_group;
+            },
+
+            control_form: function() {
                 // Build the filter form filling anything from cookies
 
-                $filter_form = $('<form />')
+                $control_form = $('<form />')
                     .attr('role', 'form')
                     .addClass('form-inline')
                     .submit(zuul.handle_filter_change);
 
-                $filter_form.append(zuul.format.filter_form_group(
-                    current_filter));
-                return $filter_form;
+                $control_form
+                    .append(zuul.format.filter_form_group(current_filter))
+                    .append(zuul.format.expand_form_group());
+
+                return $control_form;
             },
         },
 
@@ -493,16 +516,16 @@
 
             // See if we should hide the body/results
             var $body = $panel.children(':not(.patchset-header)');
+            var expand_by_default = $('#expand_by_default').prop('checked');
             var collapsed_index = zuul.collapsed_exceptions.indexOf(
                 $panel.attr('id'));
-            if (collapsed_index == -1 ) {
-                // Currently not an exception
-                // we are hiding by default
-                $body.hide();
+            if (expand_by_default && collapsed_index == -1 ||
+                !expand_by_default && collapsed_index != -1) {
+                // Expand by default, or is an exception
+                $body.show(animate);
             }
             else {
-                // Currently an exception
-                // Do nothing more (will display)
+                $body.hide(animate);
             }
 
             // Check if we should hide the whole panel
@@ -553,6 +576,16 @@
             })
             return false;
         },
+
+        handle_expand_by_default: function(e) {
+            // Handle toggling expand by default
+            set_cookie('zuul_expand_by_default', e.target.checked);
+            zuul.collapsed_exceptions = [];
+            $('.zuul-change').each(function(index, obj) {
+                $panel = $(obj);
+                zuul.display_patchset($panel, 200);
+            })
+        },
     };
 
     current_filter = read_cookie('zuul_filter_string', current_filter);
@@ -591,7 +624,7 @@
         $queueEventsNum = $queueInfo.find('span').eq(0);
         $queueResultsNum = $queueEventsNum.next();
 
-        $filter_form = zuul.format.filter_form();
+        $control_form = zuul.format.control_form();
 
         $pipelines = $('<div class="row"></div>');
         $zuulVersion = $('<p>Zuul version: <span id="zuul-version-span">' +
@@ -600,7 +633,7 @@
                         '<span id="last-reconfigured-span"></span></p>');
 
         $container = $('#zuul-container').append($msg, $indicator,
-                                                 $queueInfo, $filter_form,
+                                                 $queueInfo, $control_form,
                                                  $pipelines, $zuulVersion,
                                                  $lastReconf);