| <!-- |
| 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"> |
| <link rel="import" href="../styles/app-theme.html"> |
| <link rel="import" href="gr-account-dropdown.html"> |
| <link rel="import" href="gr-ajax.html"> |
| <link rel="import" href="gr-change-list-view.html"> |
| <link rel="import" href="gr-change-view.html"> |
| <link rel="import" href="gr-dashboard-view.html"> |
| <link rel="import" href="gr-diff-view.html"> |
| <link rel="import" href="gr-search-bar.html"> |
| |
| <script src="../bower_components/page/page.js"></script> |
| <script src="../scripts/app.js"></script> |
| <script src="../scripts/changes.js"></script> |
| <script src="../scripts/util.js"></script> |
| |
| <dom-module id="gr-app"> |
| <template> |
| <style> |
| :host { |
| background-color: var(--secondary-color); |
| display: flex; |
| min-height: 100vh; |
| flex-direction: column; |
| } |
| :host([constrained]) main { |
| margin: 0 auto; |
| width: 100%; |
| max-width: var(--max-constrained-width); |
| } |
| header, |
| footer { |
| background-color: var(--primary-color); |
| color: var(--primary-text-color); |
| padding: .5rem 1.25rem; |
| } |
| header { |
| display: flex; |
| align-items: center; |
| } |
| main { |
| flex: 1; |
| } |
| .bigTitle { |
| color: var(--primary-text-color); |
| font-size: 1.75em; |
| text-decoration: none; |
| } |
| .bigTitle:hover { |
| text-decoration: underline; |
| } |
| .headerRightItems { |
| display: flex; |
| flex: 1; |
| justify-content: flex-end; |
| } |
| gr-search-bar { |
| width: 500px; |
| } |
| .accountContainer:not(.loggedIn):not(.loggedOut) .loginButton, |
| .accountContainer:not(.loggedIn):not(.loggedOut) gr-account-dropdown, |
| .accountContainer.loggedIn .loginButton, |
| .accountContainer.loggedOut gr-account-dropdown { |
| display: none; |
| } |
| .accountContainer { |
| align-items: center; |
| display: flex; |
| margin-left: var(--default-horizontal-margin); |
| } |
| </style> |
| <gr-ajax auto url="/accounts/self/detail" last-response="{{account}}"></gr-ajax> |
| <gr-ajax auto url="/config/server/info" last-response="{{config}}"></gr-ajax> |
| <gr-ajax auto url="/config/server/version" last-response="{{version}}"></gr-ajax> |
| <header role="banner"> |
| <a href="/" class="bigTitle">PolyGerrit</a> |
| <div class="headerRightItems"> |
| <gr-search-bar value="{{params.query}}" role="search"></gr-search-bar> |
| <div class="accountContainer" id="accountContainer"> |
| <a class="loginButton" href="/login" on-tap="_loginTapHandler">Login</a> |
| <gr-account-dropdown account="[[account]]"></gr-account-dropdown> |
| </div> |
| </div> |
| </header> |
| <main> |
| <template is="dom-if" if="{{_showChangeListView}}" restamp="true"> |
| <gr-change-list-view params="[[params]]"></gr-change-list-view> |
| </template> |
| <template is="dom-if" if="{{_showDashboardView}}" restamp="true"> |
| <gr-dashboard-view params="[[params]]"></gr-dashboard-view> |
| </template> |
| <template is="dom-if" if="{{_showChangeView}}" restamp="true"> |
| <gr-change-view server-config="[[config]]" |
| params="[[params]]"></gr-change-view> |
| </template> |
| <template is="dom-if" if="{{_showDiffView}}" restamp="true"> |
| <gr-diff-view params="[[params]]"></gr-diff-view> |
| </template> |
| </main> |
| <footer role="contentinfo"> |
| Powered by <a href="https://www.gerritcodereview.com/" target="_blank">Gerrit Code Review</a> |
| (<span>[[version]]</span>) |
| <span hidden$="[[!config.gerrit.report_bug_url]]"> |
| | |
| <a href$="[[config.gerrit.report_bug_url]]" target="_blank"> |
| <span hidden$="[[!config.gerrit.report_bug_text]]"> |
| [[config.gerrit.report_bug_text]] |
| </span> |
| <span hidden$="[[config.gerrit.report_bug_text]]"> |
| Report Bug |
| </span> |
| </a> |
| </span> |
| </footer> |
| </template> |
| <script> |
| (function() { |
| 'use strict'; |
| |
| Polymer({ |
| is: 'gr-app', |
| |
| properties: { |
| account: { |
| type: Object, |
| observer: '_accountChanged', |
| }, |
| accountReady: { |
| type: Object, |
| readOnly: true, |
| notify: true, |
| value: function() { |
| return new Promise(function(resolve) { |
| this._resolveAccountReady = resolve; |
| }.bind(this)); |
| }, |
| }, |
| config: { |
| type: Object, |
| observer: '_configChanged', |
| }, |
| configReady: { |
| type: Object, |
| readOnly: true, |
| notify: true, |
| value: function() { |
| return new Promise(function(resolve) { |
| this._resolveConfigReady = resolve; |
| }.bind(this)); |
| }, |
| }, |
| version: String, |
| constrained: { |
| type: Boolean, |
| value: false, |
| reflectToAttribute: true, |
| }, |
| params: Object, |
| route: { |
| type: String, |
| observer: '_routeChanged', |
| }, |
| }, |
| |
| get loggedIn() { |
| return !!(this.account && Object.keys(this.account).length > 0); |
| }, |
| |
| _accountChanged: function() { |
| this._resolveAccountReady(); |
| this.$.accountContainer.classList.toggle('loggedIn', this.loggedIn); |
| this.$.accountContainer.classList.toggle('loggedOut', !this.loggedIn); |
| }, |
| |
| _configChanged: function(config) { |
| this._resolveConfigReady(config); |
| }, |
| |
| _routeChanged: function(route) { |
| this.set('_showChangeListView', route == 'gr-change-list-view'); |
| this.set('_showDashboardView', route == 'gr-dashboard-view'); |
| this.set('_showChangeView', route == 'gr-change-view'); |
| this.set('_showDiffView', route == 'gr-diff-view'); |
| this.constrained = route == 'gr-change-view'; |
| }, |
| |
| _loginTapHandler: function(e) { |
| e.preventDefault(); |
| page.show('/login/' + encodeURIComponent( |
| window.location.pathname + window.location.hash)); |
| }, |
| |
| }); |
| })(); |
| </script> |
| </dom-module> |