+
diff --git a/src/layouts/login-form.js b/src/layouts/login-form.js
index e2f4e98f84..539ff4df3c 100644
--- a/src/layouts/login-form.js
+++ b/src/layouts/login-form.js
@@ -11,10 +11,9 @@ export default new Polymer({
behaviors: [nuclearObserver],
properties: {
- isValidating: {
- type: Boolean,
- observer: 'isValidatingChanged',
- bindNuclear: authGetters.isValidating,
+ errorMessage: {
+ type: String,
+ bindNuclear: authGetters.attemptErrorMessage,
},
isInvalid: {
@@ -22,9 +21,25 @@ export default new Polymer({
bindNuclear: authGetters.isInvalidAttempt,
},
- errorMessage: {
- type: String,
- bindNuclear: authGetters.attemptErrorMessage,
+ isValidating: {
+ type: Boolean,
+ observer: 'isValidatingChanged',
+ bindNuclear: authGetters.isValidating,
+ },
+
+ loadingResources: {
+ type: Boolean,
+ value: false,
+ },
+
+ forceShowLoading: {
+ type: Boolean,
+ value: false,
+ },
+
+ showLoading: {
+ type: Boolean,
+ computed: 'computeShowSpinner(forceShowLoading, isValidating)',
},
},
@@ -37,6 +52,10 @@ export default new Polymer({
'validatingChanged(isValidating, isInvalid)',
],
+ computeShowSpinner(forceShowLoading, isValidating) {
+ return forceShowLoading || isValidating;
+ },
+
validatingChanged(isValidating, isInvalid) {
if (!isValidating && !isInvalid) {
this.$.passwordInput.value = '';
diff --git a/src/layouts/partial-base.html b/src/layouts/partial-base.html
index e92fe7e711..a397426242 100644
--- a/src/layouts/partial-base.html
+++ b/src/layouts/partial-base.html
@@ -16,7 +16,7 @@
-
+
diff --git a/src/layouts/partial-history.html b/src/layouts/partial-history.html
index bc32594766..b57f1a96f0 100644
--- a/src/layouts/partial-history.html
+++ b/src/layouts/partial-history.html
@@ -30,7 +30,7 @@
History
-
diff --git a/src/layouts/partial-logbook.html b/src/layouts/partial-logbook.html
index a53461d189..75d8c0c3ad 100644
--- a/src/layouts/partial-logbook.html
+++ b/src/layouts/partial-logbook.html
@@ -24,7 +24,7 @@
Logbook
-
diff --git a/src/layouts/partial-map.html b/src/layouts/partial-map.html
index 28846eea04..e00fc6771e 100644
--- a/src/layouts/partial-map.html
+++ b/src/layouts/partial-map.html
@@ -26,7 +26,7 @@
-
+
Map
diff --git a/src/layouts/partial-zone.html b/src/layouts/partial-zone.html
index fbdd92d068..4b28f8412a 100644
--- a/src/layouts/partial-zone.html
+++ b/src/layouts/partial-zone.html
@@ -31,11 +31,11 @@
-
+
[[locationName]]
diff --git a/src/layouts/partial-zone.js b/src/layouts/partial-zone.js
index 90dc73ab10..669cb43a80 100644
--- a/src/layouts/partial-zone.js
+++ b/src/layouts/partial-zone.js
@@ -132,7 +132,7 @@ export default new Polymer({
},
computeListenButtonIcon(isListening) {
- return isListening ? 'av:mic-off' : 'av:mic';
+ return isListening ? 'mdi:microphone-off' : 'mdi:microphone';
},
computeRefreshButtonClass(isFetching) {
diff --git a/src/more-infos/more-info-camera.js b/src/more-infos/more-info-camera.js
index 4b3e42a724..f8d304646e 100644
--- a/src/more-infos/more-info-camera.js
+++ b/src/more-infos/more-info-camera.js
@@ -20,7 +20,7 @@ export default new Polymer({
if (__DEMO__) {
return '/demo/webcam.jpg';
} else if (dialogOpen) {
- return '/api/camera_proxy_stream/' + this.stateObj.entityId;
+ return `/api/camera_proxy_stream/${this.stateObj.entityId}`;
}
// Return an empty image if dialog is not open
return 'data:image/gif;base64,R0lGODlhAQABAAAAACw=';
diff --git a/src/more-infos/more-info-media_player.html b/src/more-infos/more-info-media_player.html
index e6e12a9841..2ba1b51b91 100644
--- a/src/more-infos/more-info-media_player.html
+++ b/src/more-infos/more-info-media_player.html
@@ -28,17 +28,17 @@
diff --git a/src/more-infos/more-info-media_player.js b/src/more-infos/more-info-media_player.js
index 1e49d2ed57..f7abd86028 100644
--- a/src/more-infos/more-info-media_player.js
+++ b/src/more-infos/more-info-media_player.js
@@ -98,14 +98,14 @@ export default new Polymer({
},
computeMuteVolumeIcon(isMuted) {
- return isMuted ? 'av:volume-off' : 'av:volume-up';
+ return isMuted ? 'mdi:volume-off' : 'mdi:volume-high';
},
computePlaybackControlIcon() {
if (this.isPlaying) {
- return this.supportsPause ? 'av:pause' : 'av:stop';
+ return this.supportsPause ? 'mdi:pause' : 'mdi:stop';
}
- return 'av:play-arrow';
+ return 'mdi:play';
},
computeHidePowerButton(isOff, supportsTurnOn, supportsTurnOff) {
diff --git a/src/resources/home-assistant-icons.html b/src/resources/home-assistant-icons.html
deleted file mode 100644
index cec92cb391..0000000000
--- a/src/resources/home-assistant-icons.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/state-summary/state-card-scene.html b/src/state-summary/state-card-scene.html
index bb2b443d66..d9bd233c87 100644
--- a/src/state-summary/state-card-scene.html
+++ b/src/state-summary/state-card-scene.html
@@ -16,7 +16,7 @@
diff --git a/src/util/domain-icon.js b/src/util/domain-icon.js
index a45dcd27b1..5eb454b693 100644
--- a/src/util/domain-icon.js
+++ b/src/util/domain-icon.js
@@ -2,64 +2,66 @@ import defaultIcon from './default-icon';
export default function domainIcon(domain, state) {
switch (domain) {
- case 'homeassistant':
- return 'home';
+ case 'alarm_control_panel':
+ return state && state === 'disarmed' ? 'mdi:lock-open' : 'mdi:lock';
- case 'group':
- return 'homeassistant-24:group';
+ case 'camera':
+ return 'mdi:video';
+
+ case 'configurator':
+ return 'mdi:settings';
+
+ case 'conversation':
+ return 'mdi:text-to-speech';
case 'device_tracker':
- return 'social:person';
+ return 'mdi:account';
- case 'switch':
- return 'image:flash-on';
+ case 'group':
+ return 'mdi:google-circles-communities';
- case 'alarm_control_panel':
- return state && state === 'disarmed' ? 'icons:lock-open' : 'icons:lock';
+ case 'homeassistant':
+ return 'mdi:home';
+
+ case 'light':
+ return 'mdi:lightbulb';
case 'media_player':
- let icon = 'hardware:cast';
+ let icon = 'mdi:cast';
if (state && state !== 'off' && state !== 'idle') {
icon += '-connected';
}
return icon;
- case 'sun':
- return 'image:wb-sunny';
+ case 'notify':
+ return 'mdi:comment-alert';
- case 'light':
- return 'image:wb-incandescent';
+ case 'sun':
+ return 'mdi:white-balance-sunny';
+
+ case 'switch':
+ return 'mdi:flash';
case 'simple_alarm':
- return 'social:notifications';
-
- case 'notify':
- return 'announcement';
-
- case 'thermostat':
- return 'settings-brightness';
-
- case 'sensor':
- return 'visibility';
-
- case 'configurator':
- return 'settings';
-
- case 'conversation':
- return 'av:hearing';
-
- case 'script':
- return 'description';
+ return 'mdi:bell';
case 'scene':
- return 'social:pages';
+ return 'mdi:google-pages';
- case 'updater':
- return state === 'update_available' ?
- 'icons:cloud-download' : 'icons:cloud-done';
+ case 'script':
+ return 'mdi:file-document';
+
+ case 'sensor':
+ return 'mdi:eye';
+
+ case 'thermostat':
+ return 'mdi:nest-thermostat';
default:
+ /* eslint-disable no-console */
+ console.warn(`Unable to find icon for domain ${domain} (${state})`);
+ /* eslint-enable no-console */
return defaultIcon;
}
}
diff --git a/src/util/state-icon.js b/src/util/state-icon.js
index deceb5e925..80d537a24c 100644
--- a/src/util/state-icon.js
+++ b/src/util/state-icon.js
@@ -17,7 +17,7 @@ export default function stateIcon(state) {
if (unit && state.domain === 'sensor') {
if (unit === util.temperatureUnits.UNIT_TEMP_C ||
unit === util.temperatureUnits.UNIT_TEMP_F) {
- return 'homeassistant-100:thermostat';
+ return 'mdi:thermometer';
}
}