diff --git a/polygerrit-ui/app/elements/custom-dark-theme_test.js b/polygerrit-ui/app/elements/custom-dark-theme_test.js
index 31c78a17c0..cc955ce68a 100644
--- a/polygerrit-ui/app/elements/custom-dark-theme_test.js
+++ b/polygerrit-ui/app/elements/custom-dark-theme_test.js
@@ -16,32 +16,45 @@
*/
import '../test/common-test-setup-karma.js';
+import {getComputedStyleValue} from '../utils/dom-util.js';
import './shared/gr-rest-api-interface/gr-rest-api-interface.js';
import './gr-app.js';
import {pluginLoader} from './shared/gr-js-api-interface/gr-plugin-loader.js';
+import {removeTheme} from '../styles/themes/dark-theme.js';
+
const basicFixture = fixtureFromElement('gr-app');
+
suite('gr-app custom dark theme tests', () => {
let sandbox;
+ let element;
setup(done => {
window.localStorage.setItem('dark-theme', 'true');
sandbox = sinon.sandbox.create();
- basicFixture.instantiate();
+ element = basicFixture.instantiate();
pluginLoader.loadPlugins([]);
pluginLoader.awaitPluginsLoaded().then(() => flush(done));
});
+
teardown(() => {
sandbox.restore();
window.localStorage.removeItem('dark-theme');
- const addedTheme = document
- .querySelector('link[href="/styles/themes/dark-theme.html"]');
- if (addedTheme) {
- addedTheme.remove();
- }
+ removeTheme();
});
test('should tried to load dark theme', () => {
assert.isTrue(
- !!document.querySelector('link[href="/styles/themes/dark-theme.html"]')
+ !!document.head.querySelector('#dark-theme')
);
});
+
+ test('applies the right theme', () => {
+ assert.equal(
+ getComputedStyleValue('--header-background-color', element)
+ .toLowerCase(),
+ '#3b3d3f');
+ assert.equal(
+ getComputedStyleValue('--footer-background-color', element)
+ .toLowerCase(),
+ '#3b3d3f');
+ });
});
\ No newline at end of file
diff --git a/polygerrit-ui/app/elements/custom-light-theme_test.js b/polygerrit-ui/app/elements/custom-light-theme_test.js
index fa1f93f455..a866bb3e12 100644
--- a/polygerrit-ui/app/elements/custom-light-theme_test.js
+++ b/polygerrit-ui/app/elements/custom-light-theme_test.js
@@ -20,6 +20,7 @@ import {getComputedStyleValue} from '../utils/dom-util.js';
import './shared/gr-rest-api-interface/gr-rest-api-interface.js';
import './gr-app.js';
import {pluginLoader} from './shared/gr-js-api-interface/gr-plugin-loader.js';
+
const basicFixture = fixtureFromElement('gr-app');
suite('gr-app custom light theme tests', () => {
@@ -45,16 +46,11 @@ suite('gr-app custom light theme tests', () => {
});
test('should not load dark theme', () => {
- assert.isFalse(
- !!document.querySelector('link[href="/styles/themes/dark-theme.html"]')
- );
+ assert.isFalse(!!document.head.querySelector('#dark-theme'));
+ assert.isTrue(!!document.head.querySelector('#light-theme'));
});
test('applies the right theme', () => {
- assert.equal(
- getComputedStyleValue('--primary-text-color', element)
- .toLowerCase(),
- 'black');
assert.equal(
getComputedStyleValue('--header-background-color', element)
.toLowerCase(),
diff --git a/polygerrit-ui/app/elements/gr-app-element.js b/polygerrit-ui/app/elements/gr-app-element.js
index 4915eda00c..91af97c077 100644
--- a/polygerrit-ui/app/elements/gr-app-element.js
+++ b/polygerrit-ui/app/elements/gr-app-element.js
@@ -16,6 +16,7 @@
*/
import '../styles/shared-styles.js';
import '../styles/themes/app-theme.js';
+import {applyTheme as applyDarkTheme} from '../styles/themes/dark-theme.js';
import './admin/gr-admin-view/gr-admin-view.js';
import './documentation/gr-documentation-search/gr-documentation-search.js';
import './change-list/gr-change-list-view/gr-change-list-view.js';
@@ -202,9 +203,7 @@ class GrAppElement extends mixinBehaviors( [
});
if (window.localStorage.getItem('dark-theme')) {
- // No need to add the style module to element again as it's imported
- // by importHref already
- this.$.libLoader.getDarkTheme();
+ applyDarkTheme();
}
// Note: this is evaluated here to ensure that it only happens after the
diff --git a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.js b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.js
index 95f7a2c06d..0e8c68af46 100644
--- a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.js
+++ b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view.js
@@ -20,6 +20,7 @@ import '../../../styles/gr-form-styles.js';
import '../../../styles/gr-menu-page-styles.js';
import '../../../styles/gr-page-nav-styles.js';
import '../../../styles/shared-styles.js';
+import {applyTheme as applyDarkTheme, removeTheme as removeDarkTheme} from '../../../styles/themes/dark-theme.js';
import '../../plugins/gr-endpoint-decorator/gr-endpoint-decorator.js';
import '../gr-change-table-editor/gr-change-table-editor.js';
import '../../shared/gr-button/gr-button.js';
@@ -68,8 +69,6 @@ const GERRIT_DOCS_FILTER_PATH = '/user-notify.html';
const ABSOLUTE_URL_PATTERN = /^https?:/;
const TRAILING_SLASH_PATTERN = /\/$/;
-const RELOAD_MESSAGE = 'Reloading...';
-
const HTTP_AUTH = [
'HTTP',
'HTTP_LDAP',
@@ -475,17 +474,19 @@ class GrSettingsView extends mixinBehaviors( [
_handleToggleDark() {
if (this._isDark) {
window.localStorage.removeItem('dark-theme');
+ removeDarkTheme();
} else {
window.localStorage.setItem('dark-theme', 'true');
+ applyDarkTheme();
}
+ this._isDark = !!window.localStorage.getItem('dark-theme');
this.dispatchEvent(new CustomEvent('show-alert', {
- detail: {message: RELOAD_MESSAGE},
+ detail: {
+ message: `Theme changed to ${this._isDark ? 'dark' : 'light'}.`,
+ },
bubbles: true,
composed: true,
}));
- this.async(() => {
- window.location.reload();
- }, 1);
}
_showHttpAuth(config) {
diff --git a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.html b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.js
similarity index 90%
rename from polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.html
rename to polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.js
index e430ecbd0a..09ad0e371d 100644
--- a/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.html
+++ b/polygerrit-ui/app/elements/settings/gr-settings-view/gr-settings-view_test.js
@@ -1,46 +1,28 @@
-
-
-
-
-
-
gr-settings-view
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+});
\ No newline at end of file
diff --git a/polygerrit-ui/app/elements/shared/gr-lib-loader/gr-lib-loader.js b/polygerrit-ui/app/elements/shared/gr-lib-loader/gr-lib-loader.js
index e9cd441b9e..3c3fc6ad0d 100644
--- a/polygerrit-ui/app/elements/shared/gr-lib-loader/gr-lib-loader.js
+++ b/polygerrit-ui/app/elements/shared/gr-lib-loader/gr-lib-loader.js
@@ -15,7 +15,6 @@
* limitations under the License.
*/
import '../gr-js-api-interface/gr-js-api-interface.js';
-import {importHref} from '../../../scripts/import-href.js';
import {dom} from '@polymer/polymer/lib/legacy/polymer.dom.js';
import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-listeners.js';
import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin.js';
@@ -23,7 +22,6 @@ import {PolymerElement} from '@polymer/polymer/polymer-element.js';
import {htmlTemplate} from './gr-lib-loader_html.js';
const HLJS_PATH = 'bower_components/highlightjs/highlight.min.js';
-const DARK_THEME_PATH = 'styles/themes/dark-theme.html';
/** @extends PolymerElement */
class GrLibLoader extends GestureEventListeners(
@@ -75,28 +73,6 @@ class GrLibLoader extends GestureEventListeners(
});
}
- /**
- * Loads the dark theme document. Returns a promise that resolves with a
- * custom-style DOM element.
- *
- * @return {!Promise}
- * @suppress {checkTypes}
- */
- getDarkTheme() {
- return new Promise((resolve, reject) => {
- importHref(
- this._getLibRoot() + DARK_THEME_PATH, () => {
- const module = document.createElement('style');
- module.setAttribute('include', 'dark-theme');
- const cs = document.createElement('custom-style');
- cs.appendChild(module);
-
- resolve(cs);
- },
- reject);
- });
- }
-
/**
* Execute callbacks awaiting the HLJS lib load.
*/
diff --git a/polygerrit-ui/app/elements/shared/gr-lib-loader/gr-lib-loader_test.html b/polygerrit-ui/app/elements/shared/gr-lib-loader/gr-lib-loader_test.js
similarity index 68%
rename from polygerrit-ui/app/elements/shared/gr-lib-loader/gr-lib-loader_test.html
rename to polygerrit-ui/app/elements/shared/gr-lib-loader/gr-lib-loader_test.js
index f2e5e3dfb6..6208252064 100644
--- a/polygerrit-ui/app/elements/shared/gr-lib-loader/gr-lib-loader_test.html
+++ b/polygerrit-ui/app/elements/shared/gr-lib-loader/gr-lib-loader_test.js
@@ -1,39 +1,25 @@
-
-
-
-
-
-gr-lib-loader
-
-
-
-
-
-
-
-
-
-
-
-
-
+});
\ No newline at end of file
diff --git a/polygerrit-ui/app/rules.bzl b/polygerrit-ui/app/rules.bzl
index bc2830d7ee..5ccf92d54f 100644
--- a/polygerrit-ui/app/rules.bzl
+++ b/polygerrit-ui/app/rules.bzl
@@ -45,15 +45,6 @@ def polygerrit_bundle(name, srcs, outs, entry_point):
srcs = native.glob(["styles/**/*.css"]),
)
- native.filegroup(
- name = name + "_theme_sources",
- srcs = native.glob(
- ["styles/themes/*.html"],
- # app-theme.html already included via an import in gr-app.html.
- exclude = ["styles/themes/app-theme.html"],
- ),
- )
-
native.filegroup(
name = name + "_top_sources",
srcs = [
@@ -68,7 +59,6 @@ def polygerrit_bundle(name, srcs, outs, entry_point):
srcs = [
name + "_app_sources",
name + "_css_sources",
- name + "_theme_sources",
name + "_top_sources",
"//lib/fonts:robotofonts",
"//lib/js:highlightjs__files",
@@ -84,7 +74,6 @@ def polygerrit_bundle(name, srcs, outs, entry_point):
"cp $(locations //lib/fonts:robotofonts) $$TMP/polygerrit_ui/fonts/",
"for f in $(locations " + name + "_top_sources); do cp $$f $$TMP/polygerrit_ui/; done",
"for f in $(locations " + name + "_css_sources); do cp $$f $$TMP/polygerrit_ui/styles; done",
- "for f in $(locations " + name + "_theme_sources); do cp $$f $$TMP/polygerrit_ui/styles/themes; done",
"for f in $(locations //lib/js:highlightjs__files); do cp $$f $$TMP/polygerrit_ui/bower_components/highlightjs/ ; done",
"cp $(location @ui_npm//:node_modules/@webcomponents/webcomponentsjs/webcomponents-lite.js) $$TMP/polygerrit_ui/bower_components/webcomponentsjs/webcomponents-lite.js",
"cp $$FONT_DIR/roboto/*.ttf $$TMP/polygerrit_ui/fonts/roboto/",
diff --git a/polygerrit-ui/app/styles/themes/app-theme.js b/polygerrit-ui/app/styles/themes/app-theme.js
index 718d6a5e73..1a8296f636 100644
--- a/polygerrit-ui/app/styles/themes/app-theme.js
+++ b/polygerrit-ui/app/styles/themes/app-theme.js
@@ -16,217 +16,211 @@
*/
const $_documentContainer = document.createElement('template');
-$_documentContainer.innerHTML = ``;
-document.head.appendChild($_documentContainer.content);
-
-/*
- FIXME(polymer-modulizer): the above comments were extracted
- from HTML and may be out of place here. Review them and
- then delete this comment!
-*/
-
+document.head.appendChild($_documentContainer.content);
\ No newline at end of file
diff --git a/polygerrit-ui/app/styles/themes/dark-theme.html b/polygerrit-ui/app/styles/themes/dark-theme.js
similarity index 82%
rename from polygerrit-ui/app/styles/themes/dark-theme.html
rename to polygerrit-ui/app/styles/themes/dark-theme.js
index 18b2fd6e85..6968b12cc7 100644
--- a/polygerrit-ui/app/styles/themes/dark-theme.html
+++ b/polygerrit-ui/app/styles/themes/dark-theme.js
@@ -1,21 +1,24 @@
-
-
-
-
+ `;
+
+ return $_documentContainer;
+}
+
+export function applyTheme() {
+ document.head.appendChild(getStyleEl().content);
+}
+
+export function removeTheme() {
+ const darkThemeEls = document.head.querySelectorAll('#dark-theme');
+ if (darkThemeEls.length) {
+ darkThemeEls.forEach(darkThemeEl => darkThemeEl.remove());
+ }
+}
diff --git a/polygerrit-ui/app/test/tests.js b/polygerrit-ui/app/test/tests.js
index 2d795eca4a..712b48dbc1 100644
--- a/polygerrit-ui/app/test/tests.js
+++ b/polygerrit-ui/app/test/tests.js
@@ -143,7 +143,6 @@ const elements = [
'settings/gr-identities/gr-identities_test.html',
'settings/gr-menu-editor/gr-menu-editor_test.html',
'settings/gr-registration-dialog/gr-registration-dialog_test.html',
- 'settings/gr-settings-view/gr-settings-view_test.html',
'settings/gr-ssh-editor/gr-ssh-editor_test.html',
'settings/gr-watched-projects-editor/gr-watched-projects-editor_test.html',
'shared/gr-account-entry/gr-account-entry_test.html',
@@ -185,7 +184,6 @@ const elements = [
'shared/gr-fixed-panel/gr-fixed-panel_test.html',
'shared/gr-labeled-autocomplete/gr-labeled-autocomplete_test.html',
'shared/gr-label-info/gr-label-info_test.html',
- 'shared/gr-lib-loader/gr-lib-loader_test.html',
'shared/gr-limited-text/gr-limited-text_test.html',
'shared/gr-linked-chip/gr-linked-chip_test.html',
'shared/gr-linked-text/gr-linked-text_test.html',