Split gr-app into two elements
The new outer element (gr-app) is for initialization and setup code
only. The inner element (gr-app-element) contains the root page and
the dependencies on all other gr elements.
This enables the outer element (gr-app) to be forked into a Polymer 2
specific variant with different initialization and setup.
Change-Id: I124241cd8bd7c407cdd0cb49572d69bd2a22f2e5
diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router.js b/polygerrit-ui/app/elements/core/gr-router/gr-router.js
index e6ad03e..44e5699 100644
--- a/polygerrit-ui/app/elements/core/gr-router/gr-router.js
+++ b/polygerrit-ui/app/elements/core/gr-router/gr-router.js
@@ -226,7 +226,11 @@
},
_setParams(params) {
- this._app.params = params;
+ this._appElement().params = params;
+ },
+
+ _appElement() {
+ return document.querySelector('#app-element');
},
_redirect(url) {
@@ -1468,7 +1472,7 @@
// Note: the app's 404 display is tightly-coupled with catching 404
// network responses, so we simulate a 404 response status to display it.
// TODO: Decouple the gr-app error view from network responses.
- this._app.dispatchEvent(new CustomEvent('page-error',
+ this._appElement().dispatchEvent(new CustomEvent('page-error',
{detail: {response: {status: 404}}}));
},
});
diff --git a/polygerrit-ui/app/elements/core/gr-router/gr-router_test.html b/polygerrit-ui/app/elements/core/gr-router/gr-router_test.html
index fe28f81..ebd9b9e 100644
--- a/polygerrit-ui/app/elements/core/gr-router/gr-router_test.html
+++ b/polygerrit-ui/app/elements/core/gr-router/gr-router_test.html
@@ -677,11 +677,12 @@
});
test('_handleDefaultRoute', () => {
- element._app = {dispatchEvent: sinon.stub()};
+ const appElementStub = {dispatchEvent: sinon.stub()};
+ element._appElement = () => appElementStub;
element._handleDefaultRoute();
- assert.isTrue(element._app.dispatchEvent.calledOnce);
+ assert.isTrue(appElementStub.dispatchEvent.calledOnce);
assert.equal(
- element._app.dispatchEvent.lastCall.args[0].detail.response.status,
+ appElementStub.dispatchEvent.lastCall.args[0].detail.response.status,
404);
});
diff --git a/polygerrit-ui/app/elements/gr-app-element.html b/polygerrit-ui/app/elements/gr-app-element.html
index babad7c..d0227c0 100644
--- a/polygerrit-ui/app/elements/gr-app-element.html
+++ b/polygerrit-ui/app/elements/gr-app-element.html
@@ -1,6 +1,6 @@
<!--
@license
-Copyright (C) 2015 The Android Open Source Project
+Copyright (C) 2019 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.
@@ -14,36 +14,10 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<script>
- if (!window.POLYMER2) {
- // This must be set prior to loading Polymer for the first time.
- if (localStorage.getItem('USE_SHADOW_DOM') === 'true') {
- window.Polymer = {
- dom: 'shadow',
- passiveTouchGestures: true,
- };
- } else if (!window.Polymer) {
- window.Polymer = {
- passiveTouchGestures: true,
- };
- }
- }
- window.Gerrit = window.Gerrit || {};
-</script>
+<script src="/bower_components/moment/moment.js"></script>
+<script src="../scripts/util.js"></script>
<link rel="import" href="/bower_components/polymer/polymer.html">
-<link rel="import" href="/bower_components/polymer-resin/standalone/polymer-resin.html">
-<link rel="import" href="/bower_components/polymer/lib/legacy/legacy-data-mixin.html">
-<link rel="import" href="../behaviors/safe-types-behavior/safe-types-behavior.html">
-<script>
- security.polymer_resin.install({
- allowedIdentifierPrefixes: [''],
- reportHandler: security.polymer_resin.CONSOLE_LOGGING_REPORT_HANDLER,
- safeTypesBridge: Gerrit.SafeTypes.safeTypesBridge,
- });
-</script>
-<script src="/bower_components/moment/moment.js"></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/shared-styles.html">
@@ -73,9 +47,7 @@
<link rel="import" href="./shared/gr-lib-loader/gr-lib-loader.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">
+<dom-module id="gr-app-element">
<template>
<style include="shared-styles">
:host {
@@ -256,5 +228,5 @@
<gr-lib-loader id="libLoader"></gr-lib-loader>
<gr-external-style id="externalStyle" name="app-theme"></gr-external-style>
</template>
- <script src="gr-app.js" crossorigin="anonymous"></script>
+ <script src="gr-app-element.js" crossorigin="anonymous"></script>
</dom-module>
diff --git a/polygerrit-ui/app/elements/gr-app-element.js b/polygerrit-ui/app/elements/gr-app-element.js
index de9a6ad..75abc3a 100644
--- a/polygerrit-ui/app/elements/gr-app-element.js
+++ b/polygerrit-ui/app/elements/gr-app-element.js
@@ -1,6 +1,6 @@
/**
* @license
- * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2019 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.
@@ -17,16 +17,8 @@
(function() {
'use strict';
- // Eagerly render Polymer components when backgrounded. (Skips
- // requestAnimationFrame.)
- // @see https://github.com/Polymer/polymer/issues/3851
- // @see Issue 4699
- if (!window.POLYMER2) {
- Polymer.RenderStatus._makeReady();
- }
-
Polymer({
- is: 'gr-app',
+ is: 'gr-app-element',
_legacyUndefinedCheck: true,
/**
diff --git a/polygerrit-ui/app/elements/gr-app.html b/polygerrit-ui/app/elements/gr-app.html
new file mode 100644
index 0000000..1a31d4c
--- /dev/null
+++ b/polygerrit-ui/app/elements/gr-app.html
@@ -0,0 +1,52 @@
+<!--
+@license
+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>
+ if (!window.POLYMER2) {
+ // This must be set prior to loading Polymer for the first time.
+ if (localStorage.getItem('USE_SHADOW_DOM') === 'true') {
+ window.Polymer = {
+ dom: 'shadow',
+ passiveTouchGestures: true,
+ };
+ } else if (!window.Polymer) {
+ window.Polymer = {
+ passiveTouchGestures: true,
+ };
+ }
+ }
+ window.Gerrit = window.Gerrit || {};
+</script>
+
+<link rel="import" href="/bower_components/polymer/polymer.html">
+<link rel="import" href="/bower_components/polymer-resin/standalone/polymer-resin.html">
+<link rel="import" href="/bower_components/polymer/lib/legacy/legacy-data-mixin.html">
+<link rel="import" href="../behaviors/safe-types-behavior/safe-types-behavior.html">
+<script>
+ security.polymer_resin.install({
+ allowedIdentifierPrefixes: [''],
+ reportHandler: security.polymer_resin.CONSOLE_LOGGING_REPORT_HANDLER,
+ safeTypesBridge: Gerrit.SafeTypes.safeTypesBridge,
+ });
+</script>
+
+<link rel="import" href="./gr-app-element.html">
+<dom-module id="gr-app">
+ <template>
+ <gr-app-element id="app-element"></gr-app-element>
+ </template>
+ <script src="gr-app.js" crossorigin="anonymous"></script>
+</dom-module>
diff --git a/polygerrit-ui/app/elements/gr-app.js b/polygerrit-ui/app/elements/gr-app.js
new file mode 100644
index 0000000..2298b2f
--- /dev/null
+++ b/polygerrit-ui/app/elements/gr-app.js
@@ -0,0 +1,31 @@
+/**
+ * @license
+ * Copyright (C) 2016 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.
+ */
+(function() {
+ 'use strict';
+
+ // Eagerly render Polymer components when backgrounded. (Skips
+ // requestAnimationFrame.)
+ // @see https://github.com/Polymer/polymer/issues/3851
+ // @see Issue 4699
+ if (!window.POLYMER2) {
+ Polymer.RenderStatus._makeReady();
+ }
+
+ Polymer({
+ is: 'gr-app',
+ });
+})();
diff --git a/polygerrit-ui/app/elements/gr-app_test.html b/polygerrit-ui/app/elements/gr-app_test.html
index 19d06a9..f934cff 100644
--- a/polygerrit-ui/app/elements/gr-app_test.html
+++ b/polygerrit-ui/app/elements/gr-app_test.html
@@ -70,21 +70,26 @@
sandbox.restore();
});
+ appElement = () => {
+ return element.$['app-element'];
+ };
+
test('reporting', () => {
- assert.isTrue(element.$.reporting.appStarted.calledOnce);
+ assert.isTrue(appElement().$.reporting.appStarted.calledOnce);
});
test('passes config to gr-plugin-host', () => {
- return element.$.restAPI.getConfig.lastCall.returnValue.then(config => {
- assert.deepEqual(element.$.plugins.config, config);
+ const config = appElement().$.restAPI.getConfig;
+ return config.lastCall.returnValue.then(config => {
+ assert.deepEqual(appElement().$.plugins.config, config);
});
});
test('_paramsChanged sets search page', () => {
- element._paramsChanged({base: {view: Gerrit.Nav.View.CHANGE}});
- assert.notOk(element._lastSearchPage);
- element._paramsChanged({base: {view: Gerrit.Nav.View.SEARCH}});
- assert.ok(element._lastSearchPage);
+ appElement()._paramsChanged({base: {view: Gerrit.Nav.View.CHANGE}});
+ assert.notOk(appElement()._lastSearchPage);
+ appElement()._paramsChanged({base: {view: Gerrit.Nav.View.SEARCH}});
+ assert.ok(appElement()._lastSearchPage);
});
});
</script>