Scaffold for user's logged-in dashboard

This change introduces a dependency of the routing behavior on
whether the user is logged in. Since the WebComponentsReady event
can fire before OR after the account info is retrieved, a Promise
is used to ensure deterministic ordering via `accountReady`.

There is also some minor cleanup of which element is being used
as the global `app` object.

Feature: Issue 3700

Change-Id: I9768f2eabd5cdb7c62ead16ae97df5c1c321eaf6
diff --git a/polygerrit-ui/app/elements/gr-dashboard-view.html b/polygerrit-ui/app/elements/gr-dashboard-view.html
new file mode 100644
index 0000000..73de392
--- /dev/null
+++ b/polygerrit-ui/app/elements/gr-dashboard-view.html
@@ -0,0 +1,59 @@
+<!--
+Copyright (C) 2015 The Android Open Source Project
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<link rel="import" href="../bower_components/polymer/polymer.html">
+
+<dom-module id="gr-dashboard-view">
+  <template>
+    <iron-ajax id="xhr"
+        auto
+        url="/changes/"
+        params="[[_computeQueryParams()]]"
+        last-response="{{_results}}"
+        json-prefix=")]}'"
+        debounce-duration="300"></iron-ajax>
+  </template>
+  <script>
+  (function() {
+    'use strict';
+
+    Polymer({
+      is: 'gr-dashboard-view',
+
+      properties: {
+        _results: Array,
+      },
+
+      _computeQueryParams: function() {
+        var options = Changes.listChangesOptionsToHex(
+            Changes.ListChangesOption.LABELS,
+            Changes.ListChangesOption.DETAILED_ACCOUNTS,
+            Changes.ListChangesOption.REVIEWED
+        );
+        return {
+          O: options,
+          q: [
+            'is:open owner:self',
+            'is:open reviewer:self -owner:self',
+            'is:closed (owner:self OR reviewer:self) -age:4w limit:10',
+          ],
+        };
+      },
+
+    });
+  })();
+  </script>
+</dom-module>