Zuul status page: Redesign and fix bugs

status.html:
- Added eventqueue-length status (was already present in production
  but not committed here yet).
- HTML5 markup.
- Remove unused jquery-visibility.min.js and jquery-graphite.js.

status.js:
- Clean up (various js best practices and consistent coding style)
- Use empty() instead of html('').
- Use text() for text instead of html().
  html() will trigger the parser where text will simply create
  a text node with the string literal, much faster, safer and
  semantically correct.
- Fix implied global variable leak 'result'.
- Fix reference error that crashes/freezes the page
  Property data.trigger_event_queue and data.trigger_event_queue
  can be undefined, in which case data.trigger_event_queue.length
  causes an uncaught TypeError to be thrown.
- Use a closure instead of polluting global scope.
- Rewrite object oriented.
- Added 'demo' feature for easy local testing.

Downstream commits at
https://gerrit.wikimedia.org/r/#/q/project:integration/docroot+topic:zuul-js+branch:master+owner:Krinkle+is:merged,n,z

Change-Id: Iddd4e2787f2e2eb27bf428f733fbb8b4a9d162d5
Reviewed-on: https://review.openstack.org/26416
Reviewed-by: James E. Blair <corvus@inaugust.com>
Reviewed-by: Clark Boylan <clark.boylan@gmail.com>
Reviewed-by: Jeremy Stanley <fungi@yuggoth.org>
Approved: James E. Blair <corvus@inaugust.com>
Tested-by: Jenkins
diff --git a/etc/status/public_html/status-openstack.json-sample b/etc/status/public_html/status-openstack.json-sample
new file mode 100644
index 0000000..5d16bdd
--- /dev/null
+++ b/etc/status/public_html/status-openstack.json-sample
@@ -0,0 +1,310 @@
+{
+    "pipelines": [
+        {
+            "name": "check",
+            "description": "Newly uploaded patchsets enter this pipeline to receive an initial +/-1 Verified vote from Jenkins.",
+            "change_queues": [
+                {
+                    "heads": [],
+                    "name": "stackforge/tripleo-image-elements"
+                }
+            ]
+        },
+        {
+            "description": "Changes that have been approved by core developers are enqueued in order in this pipeline, and .",
+            "change_queues": [
+                {
+                    "heads": [],
+                    "name": "openstack-detackforge/reddwarf-integration"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/moniker"
+                },
+                {
+                    "heads": [
+                        [
+                            {
+                                "url": "https://review.openstack.org/26292",
+                                "project": "openstack/quantum",
+                                "jobs": [
+                                    {
+                                        "url": "https://jenkins.openstack.org/job/gate-quantum-docs/5501/consoleFull",
+                                        "voting": true,
+                                        "result": "SUCCESS",
+                                        "name": "gate-quantum-docs"
+                                    },
+                                    {
+                                        "url": "https://jenkins.openstack.org/job/gate-quantum-pep8/6254/consoleFull",
+                                        "voting": true,
+                                        "result": "SUCCESS",
+                                        "name": "gate-quantum-pep8"
+                                    },
+                                    {
+                                        "url": "https://jenkins.openstack.org/job/gate-quantum-python26/5876/",
+                                        "voting": true,
+                                        "result": null,
+                                        "name": "gate-quantum-python26"
+                                    },
+                                    {
+                                        "url": "https://jenkins.openstack.org/job/gate-quantum-python27/5887/",
+                                        "voting": true,
+                                        "result": null,
+                                        "name": "gate-quantum-python27"
+                                    },
+                                    {
+                                        "url": "https://jenkins.openstack.org/job/gate-tempest-devstack-vm-quantum/17548/",
+                                        "voting": true,
+                                        "result": null,
+                                        "name": "gate-tempest-devstack-vm-quantum"
+                                    }
+                                ],
+                                "id": "26292,1"
+                            }
+                        ]
+                    ],
+                    "name": "openstack-dev/devstack, openstack-infra/devstack-gate, openstack/cinder, openstack/glance, openstack/horizon, openstack/keystone, openstack/nova, openstack/python-cinderclient, openstack/python-glanceclient, openstack/python-keystoneclient, openstack/python-novaclient, openstack/python-quantumclient, openstack/quantum, openstack/swift, openstack/tempest, z/tempest"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack/ceilometer"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/puppet-openstack"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/puppet-cinder"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/marconi"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack-infra/config"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/tripleo-image-elements"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/kwapi"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/python-reddwarfclient"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/python-savannaclient"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/python-monikerclient"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/packstack"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack/oslo.config"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack-infra/jenkins-job-builder"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/puppet-horizon"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack/heat-cfntools"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack/oslo-incubator"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/os-config-applier"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack/requirements"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/puppet-glance"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack-infra/gearman-plugin"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/puppet-keystone"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/puppet-nova"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/climate"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack/python-swiftclient"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack/python-ceilometerclient"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack-infra/git-review"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/bufunfa"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/puppet-swift"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack-infra/statusbot"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack/openstack-planet"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack/python-openstackclient"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/diskimage-builder"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack-infra/gerritlib"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack-infra/zuul"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/reddwarf"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack-dev/hacking"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack/python-heatclient"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/python-libraclient"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack-infra/reviewday"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack-infra/jeepyb"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack/heat"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/libra"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack-infra/gerrit"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/healthnmon"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack-infra/gerritbot"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack-dev/pbr"
+                },
+                {
+                    "heads": [],
+                    "name": "stackforge/savanna"
+                },
+                {
+                    "heads": [],
+                    "name": "openstack/openstack-manuals"
+                }
+            ],
+            "name": "gate"
+        },
+        {
+            "description": "This pipeline runs jobs that operate after each change is merged.",
+            "change_queues": [
+                {
+                    "heads": [],
+                    "name": "openstack-dev/hacking, openstack-dev/openstack-qa, openstack-dev/pbr, openstack-infra/config, openstack-infra/gearman-plugin, openstack-infra/gerrit, openstack-infra/gerritbot, openstack-infra/git-review, openstack-infra/jenkins-job-builder, openstack-infra/nose-html-output, openstack-infra/reviewday, openstack-infra/statusbot, openstack-infra/zuul, openstack/api-site, openstack/ceilometer, openstack/cinder, openstack/compute-api, openstack/glance, openstack/heat, openstack/heat-cfntools, openstack/horizon, openstack/identity-api, openstack/image-api, openstack/keystone, openstack/netconn-api, openstack/nova, openstack/object-api, openstack/openstack-manuals, openstack/oslo-incubator, openstack/oslo.config, openstack/python-ceilometerclient, openstack/python-cinderclient, openstack/python-glanceclient, openstack/python-heatclient, openstack/python-keystoneclient, openstack/python-novaclient, openstack/python-openstackclient, openstack/python-quantumclient, openstack/python-swiftclient, openstack/quantum, openstack/requirements, openstack/swift, openstack/volume-api, stackforge/bufunfa, stackforge/diskimage-builder, stackforge/moniker, stackforge/os-config-applier, stackforge/python-monikerclient, stackforge/python-savannaclient, stackforge/reddwarf, stackforge/savanna, stackforge/tripleo-image-elements"
+                }
+            ],
+            "name": "post"
+        },
+        {
+            "description": "This pipeline runs jobs on projects in response to pre-release tags.",
+            "change_queues": [
+                {
+                    "heads": [],
+                    "name": "openstack-dev/hacking, openstack-dev/pbr, openstack-infra/gerritbot, openstack-infra/gerritlib, openstack-infra/git-review, openstack-infra/jeepyb, openstack-infra/jenkins-job-builder, openstack-infra/nose-html-output, openstack-infra/reviewday, openstack-infra/statusbot, openstack-infra/zuul, openstack/ceilometer, openstack/cinder, openstack/glance, openstack/heat, openstack/heat-cfntools, openstack/horizon, openstack/keystone, openstack/nova, openstack/oslo.config, openstack/python-ceilometerclient, openstack/python-cinderclient, openstack/python-glanceclient, openstack/python-heatclient, openstack/python-keystoneclient, openstack/python-novaclient, openstack/python-openstackclient, openstack/python-quantumclient, openstack/python-swiftclient, openstack/quantum, openstack/swift, stackforge/moniker, stackforge/python-monikerclient, stackforge/python-reddwarfclient, stackforge/python-savannaclient, stackforge/savanna"
+                }
+            ],
+            "name": "pre-release"
+        },
+        {
+            "description": "When a commit is tagged as a release, this pipeline runs jobs that publish archives and documentation.",
+            "change_queues": [
+                {
+                    "heads": [],
+                    "name": "openstack-dev/hacking, openstack-dev/openstack-qa, openstack-dev/pbr, openstack-infra/gerritbot, openstack-infra/gerritlib, openstack-infra/git-review, openstack-infra/jeepyb, openstack-infra/jenkins-job-builder, openstack-infra/nose-html-output, openstack-infra/reviewday, openstack-infra/statusbot, openstack-infra/zuul, openstack/ceilometer, openstack/cinder, openstack/glance, openstack/heat, openstack/heat-cfntools, openstack/horizon, openstack/keystone, openstack/nova, openstack/oslo-incubator, openstack/oslo.config, openstack/python-ceilometerclient, openstack/python-cinderclient, openstack/python-glanceclient, openstack/python-heatclient, openstack/python-keystoneclient, openstack/python-novaclient, openstack/python-openstackclient, openstack/python-quantumclient, openstack/python-swiftclient, openstack/quantum, openstack/swift, stackforge/moniker, stackforge/python-monikerclient, stackforge/python-reddwarfclient, stackforge/python-savannaclient, stackforge/savanna"
+                }
+            ],
+            "name": "release"
+        },
+        {
+            "description": "This pipeline is used for silently testing new jobs.",
+            "change_queues": [
+                {
+                    "heads": [],
+                    "name": ""
+                }
+            ],
+            "name": "silent"
+        }
+    ],
+    "trigger_event_queue": {
+        "length": 0
+    },
+    "result_event_queue": {
+        "length": 0
+    }
+}