| <!-- |
| 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. |
| --> |
| <script> |
| // This must be set prior to loading Polymer for the first time. |
| if (localStorage.getItem('USE_SHADOW_DOM') === 'true') { |
| window.Polymer = { |
| dom: 'shadow', |
| }; |
| } |
| </script> |
| |
| <link rel="import" href="../bower_components/polymer/polymer.html"> |
| <link rel="import" href="../bower_components/polymer-resin/standalone/polymer-resin.html"> |
| <script> |
| security.polymer_resin.install({ |
| allowedIdentifierPrefixes: [''], |
| reportHandler: security.polymer_resin.CONSOLE_LOGGING_REPORT_HANDLER, |
| }); |
| </script> |
| |
| <link rel="import" href="../behaviors/base-url-behavior/base-url-behavior.html"> |
| <link rel="import" href="../behaviors/keyboard-shortcut-behavior/keyboard-shortcut-behavior.html"> |
| <link rel="import" href="../styles/app-theme.html"> |
| <link rel="import" href="../styles/shared-styles.html"> |
| <link rel="import" href="./admin/gr-admin-view/gr-admin-view.html"> |
| <link rel="import" href="./change-list/gr-change-list-view/gr-change-list-view.html"> |
| <link rel="import" href="./change-list/gr-dashboard-view/gr-dashboard-view.html"> |
| <link rel="import" href="./change/gr-change-view/gr-change-view.html"> |
| <link rel="import" href="./core/gr-error-manager/gr-error-manager.html"> |
| <link rel="import" href="./core/gr-keyboard-shortcuts-dialog/gr-keyboard-shortcuts-dialog.html"> |
| <link rel="import" href="./core/gr-main-header/gr-main-header.html"> |
| <link rel="import" href="./core/gr-navigation/gr-navigation.html"> |
| <link rel="import" href="./core/gr-reporting/gr-reporting.html"> |
| <link rel="import" href="./core/gr-router/gr-router.html"> |
| <link rel="import" href="./diff/gr-diff-view/gr-diff-view.html"> |
| <link rel="import" href="./edit/gr-editor-view/gr-editor-view.html"> |
| <link rel="import" href="./plugins/gr-endpoint-decorator/gr-endpoint-decorator.html"> |
| <link rel="import" href="./plugins/gr-endpoint-param/gr-endpoint-param.html"> |
| <link rel="import" href="./plugins/gr-external-style/gr-external-style.html"> |
| <link rel="import" href="./plugins/gr-plugin-host/gr-plugin-host.html"> |
| <link rel="import" href="./settings/gr-cla-view/gr-cla-view.html"> |
| <link rel="import" href="./settings/gr-registration-dialog/gr-registration-dialog.html"> |
| <link rel="import" href="./settings/gr-settings-view/gr-settings-view.html"> |
| <link rel="import" href="./shared/gr-rest-api-interface/gr-rest-api-interface.html"> |
| |
| <script src="../scripts/util.js"></script> |
| |
| <dom-module id="gr-app"> |
| <template> |
| <style include="shared-styles"> |
| :host { |
| /* This needs to be inline-flex so that the app container inherits the |
| width of its children. From here, can use position: sticky to display |
| items that we want to be 'floating' like the header and footer, with |
| a combination of: position: sticky, width=100vw, and left: 0. */ |
| display: inline-flex; |
| min-height: 100%; |
| flex-direction: column; |
| } |
| gr-main-header, |
| footer { |
| color: var(--primary-text-color); |
| } |
| gr-main-header.shadow { |
| /* Make it obvious for shadow dom testing */ |
| border-bottom: 1px solid pink; |
| } |
| gr-main-header { |
| /* The combination of left, width, position allow this to be |
| floating. */ |
| left: 0; |
| width: 100vw; |
| background-color: var(--header-background-color); |
| padding: 0 var(--default-horizontal-margin); |
| position: sticky; |
| /* Needed for the menu dropdowns to display on top of the sticky |
| headers with z-index of 1.*/ |
| z-index: 2; |
| } |
| footer { |
| /* The combination of left, width, position allow this to be |
| floating. */ |
| background-color: var(--footer-background-color); |
| display: flex; |
| left: 0; |
| width: 100vw; |
| justify-content: space-between; |
| padding: .5rem var(--default-horizontal-margin); |
| position: sticky; |
| z-index: 100; |
| } |
| main { |
| flex: 1; |
| padding-bottom: 2em; |
| position: relative; |
| } |
| .errorView { |
| align-items: center; |
| display: none; |
| flex-direction: column; |
| justify-content: center; |
| position: absolute; |
| top: 0; |
| right: 0; |
| bottom: 0; |
| left: 0; |
| } |
| .errorView.show { |
| display: flex; |
| } |
| .errorEmoji { |
| font-size: 2.6rem; |
| } |
| .errorText, |
| .errorMoreInfo { |
| margin-top: .75em; |
| } |
| .errorText { |
| font-size: 1.2rem; |
| } |
| .errorMoreInfo { |
| color: #999; |
| } |
| .feedback { |
| color: #b71c1c; |
| } |
| </style> |
| <gr-main-header |
| id="mainHeader" |
| search-query="{{params.query}}" |
| class$="[[_computeShadowClass(_isShadowDom)]]"> |
| </gr-main-header> |
| <main> |
| <template is="dom-if" if="[[_showChangeListView]]" restamp="true"> |
| <gr-change-list-view |
| params="[[params]]" |
| account="[[_account]]" |
| view-state="{{_viewState.changeListView}}"></gr-change-list-view> |
| </template> |
| <template is="dom-if" if="[[_showDashboardView]]" restamp="true"> |
| <gr-dashboard-view |
| account="[[_account]]" |
| params="[[params]]" |
| view-state="{{_viewState.dashboardView}}"></gr-dashboard-view> |
| </template> |
| <template is="dom-if" if="[[_showChangeView]]" restamp="true"> |
| <gr-change-view |
| params="[[params]]" |
| view-state="{{_viewState.changeView}}" |
| back-page="[[_lastSearchPage]]"></gr-change-view> |
| </template> |
| <template is="dom-if" if="[[_showEditorView]]" restamp="true"> |
| <gr-editor-view |
| params="[[params]]"></gr-editor-view> |
| </template> |
| <template is="dom-if" if="[[_showDiffView]]" restamp="true"> |
| <gr-diff-view |
| params="[[params]]" |
| change-view-state="{{_viewState.changeView}}"></gr-diff-view> |
| </template> |
| <template is="dom-if" if="[[_showSettingsView]]" restamp="true"> |
| <gr-settings-view |
| params="[[params]]" |
| on-account-detail-update="_handleAccountDetailUpdate"> |
| </gr-settings-view> |
| </template> |
| <template is="dom-if" if="[[_showAdminView]]" restamp="true"> |
| <gr-admin-view path="[[_path]]" |
| params=[[params]]></gr-admin-view> |
| </template> |
| <template is="dom-if" if="[[_showPluginScreen]]" restamp="true"> |
| <gr-endpoint-decorator name="[[_pluginScreenName]]"> |
| <gr-endpoint-param name="token" value="[[params.screen]]"></gr-endpoint-param> |
| </gr-endpoint-decorator> |
| </template> |
| <template is="dom-if" if="[[_showCLAView]]" restamp="true"> |
| <gr-cla-view></gr-cla-view> |
| </template> |
| <div id="errorView" class="errorView"> |
| <div class="errorEmoji">[[_lastError.emoji]]</div> |
| <div class="errorText">[[_lastError.text]]</div> |
| <div class="errorMoreInfo">[[_lastError.moreInfo]]</div> |
| </div> |
| </main> |
| <footer r="contentinfo" class$="[[_computeShadowClass(_isShadowDom)]]"> |
| <div> |
| Powered by <a href="https://www.gerritcodereview.com/" rel="noopener" |
| target="_blank">Gerrit Code Review</a> |
| ([[_version]]) |
| </div> |
| <div> |
| <a class="feedback" |
| href="https://bugs.chromium.org/p/gerrit/issues/entry?template=PolyGerrit%20Issue" |
| rel="noopener" target="_blank">Send feedback</a> |
| <template is="dom-if" if="[[_computeShowGwtUiLink(_serverConfig)]]"> |
| | |
| <a id="gwtLink" href$="[[computeGwtUrl(_path)]]" rel="external">Switch to Old UI</a> |
| </template> |
| | Press “?” for keyboard shortcuts |
| </div> |
| </footer> |
| <gr-overlay id="keyboardShortcuts" with-backdrop> |
| <gr-keyboard-shortcuts-dialog |
| view="[[params.view]]" |
| on-close="_handleKeyboardShortcutDialogClose"></gr-keyboard-shortcuts-dialog> |
| </gr-overlay> |
| <gr-overlay id="registration" with-backdrop> |
| <gr-registration-dialog |
| settings-url="[[_settingsUrl]]" |
| on-account-detail-update="_handleAccountDetailUpdate" |
| on-close="_handleRegistrationDialogClose"> |
| </gr-registration-dialog> |
| </gr-overlay> |
| <gr-endpoint-decorator name="plugin-overlay"></gr-endpoint-decorator> |
| <gr-error-manager id="errorManager"></gr-error-manager> |
| <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> |
| <gr-reporting id="reporting"></gr-reporting> |
| <gr-router id="router"></gr-router> |
| <gr-plugin-host id="plugins" |
| config="[[_serverConfig]]"> |
| </gr-plugin-host> |
| <gr-external-style id="externalStyle" name="app-theme"></gr-external-style> |
| </template> |
| <script src="gr-app.js" crossorigin="anonymous"></script> |
| </dom-module> |