mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-09 10:26:35 +00:00
Merge pull request #281 from home-assistant/hassio-panel-on-demand
Hassio panel on demand
This commit is contained in:
commit
a341ccf944
@ -1,69 +1,19 @@
|
|||||||
<link rel="import" href="../../bower_components/polymer/polymer.html">
|
<link rel="import" href="../../bower_components/polymer/polymer.html">
|
||||||
|
<link rel="import" href="./hassio-main.html">
|
||||||
<link rel="import" href="./dashboard/hassio-dashboard.html">
|
|
||||||
<link rel="import" href="./addon-view/hassio-addon-view.html">
|
|
||||||
<link rel="import" href="./addon-store/hassio-addon-store.html">
|
|
||||||
<link rel="import" href="./supervisor/hassio-supervisor.html">
|
|
||||||
<link rel="import" href="./hassio-loading.html">
|
|
||||||
<link rel="import" href="./hassio-data.html">
|
|
||||||
|
|
||||||
<dom-module id="ha-panel-hassio">
|
<dom-module id="ha-panel-hassio">
|
||||||
<template>
|
<template>
|
||||||
<style>
|
<style>
|
||||||
iron-pages {
|
[hidden] {
|
||||||
height: 100%;
|
display: none !important;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<hassio-data
|
|
||||||
id='data'
|
<hassio-main
|
||||||
hass='[[hass]]'
|
hass='[[hass]]'
|
||||||
supervisor='{{supervisorInfo}}'
|
narrow='[[narrow]]'
|
||||||
homeassistant='{{hassInfo}}'
|
show-menu='[[showMenu]]'
|
||||||
host='{{hostInfo}}'
|
></hassio-main>
|
||||||
></hassio-data>
|
|
||||||
|
|
||||||
<template is='dom-if' if='[[dashboardSelected(currentPage)]]'>
|
|
||||||
<template is='dom-if' if='[[!loaded]]'>
|
|
||||||
<hassio-loading
|
|
||||||
narrow='[[narrow]]'
|
|
||||||
hass='[[hass]]'
|
|
||||||
show-menu='[[showMenu]]'
|
|
||||||
></hassio-loading>
|
|
||||||
</template>
|
|
||||||
<template is='dom-if' if='[[loaded]]'>
|
|
||||||
<hassio-dashboard
|
|
||||||
hass='[[hass]]'
|
|
||||||
narrow='[[narrow]]'
|
|
||||||
show-menu='[[showMenu]]'
|
|
||||||
supervisor-info='[[supervisorInfo]]'
|
|
||||||
host-info='[[hostInfo]]'
|
|
||||||
hass-info='[[hassInfo]]'
|
|
||||||
></hassio-dashboard>
|
|
||||||
</template>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<template is='dom-if' if='[[addonViewSelected(currentPage)]]' restamp>
|
|
||||||
<hassio-addon-view
|
|
||||||
hass='[[hass]]'
|
|
||||||
supervisor-info='[[supervisorInfo]]'
|
|
||||||
host-info='[[hostInfo]]'
|
|
||||||
addon='[[addon]]'
|
|
||||||
></hassio-addon-view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<template is='dom-if' if='[[addonStoreSelected(currentPage)]]'>
|
|
||||||
<hassio-addon-store
|
|
||||||
hass='[[hass]]'
|
|
||||||
supervisor-info='[[supervisorInfo]]'
|
|
||||||
></hassio-addon-store>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<template is='dom-if' if='[[supervisorSelected(currentPage)]]'>
|
|
||||||
<hassio-supervisor
|
|
||||||
hass='[[hass]]'
|
|
||||||
supervisor-info='[[supervisorInfo]]'
|
|
||||||
></hassio-supervisor>
|
|
||||||
</template>
|
|
||||||
</template>
|
</template>
|
||||||
</dom-module>
|
</dom-module>
|
||||||
|
|
||||||
@ -85,114 +35,19 @@ Polymer({
|
|||||||
value: false,
|
value: false,
|
||||||
},
|
},
|
||||||
|
|
||||||
addon: {
|
loaded: {
|
||||||
type: String,
|
|
||||||
value: '',
|
|
||||||
},
|
|
||||||
|
|
||||||
supervisorInfo: {
|
|
||||||
type: Object,
|
|
||||||
value: null,
|
|
||||||
},
|
|
||||||
|
|
||||||
hostInfo: {
|
|
||||||
type: Object,
|
|
||||||
value: null,
|
|
||||||
},
|
|
||||||
|
|
||||||
hassInfo: {
|
|
||||||
type: Object,
|
|
||||||
value: null,
|
|
||||||
},
|
|
||||||
|
|
||||||
forceLoading: {
|
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
value: false,
|
value: false,
|
||||||
},
|
},
|
||||||
|
|
||||||
loaded: {
|
|
||||||
type: Boolean,
|
|
||||||
computed: 'computeIsLoaded(supervisorInfo, hostInfo, hassInfo, forceLoading)',
|
|
||||||
},
|
|
||||||
|
|
||||||
currentPage: {
|
|
||||||
type: String,
|
|
||||||
value: 'dashboard',
|
|
||||||
},
|
|
||||||
|
|
||||||
lastPage: {
|
|
||||||
type: String,
|
|
||||||
value: 'dashboard',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
|
||||||
listeners: {
|
attached: function () {
|
||||||
'hassio-select-addon': 'addonSelected',
|
if (!window.HASS_DEV) {
|
||||||
'hassio-show-page': 'showPage',
|
this.importHref('/api/hassio/panel', null, function () {
|
||||||
'hass-api-called': 'apiCalled',
|
// eslint-disable-next-line
|
||||||
},
|
alert('Failed to load the Hass.io panel from supervisor.');
|
||||||
|
});
|
||||||
apiCalled: function (ev) {
|
|
||||||
if (ev.detail.success) {
|
|
||||||
var tries = 1;
|
|
||||||
|
|
||||||
var tryUpdate = function () {
|
|
||||||
this.$.data.refresh().catch(function () {
|
|
||||||
tries += 1;
|
|
||||||
setTimeout(tryUpdate, Math.min(tries, 5) * 1000);
|
|
||||||
});
|
|
||||||
}.bind(this);
|
|
||||||
|
|
||||||
tryUpdate();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
computeIsLoaded: function (supervisorInfo, hostInfo, hassInfo, forceLoading) {
|
|
||||||
return (supervisorInfo !== null &&
|
|
||||||
hostInfo !== null &&
|
|
||||||
hassInfo !== null &&
|
|
||||||
!forceLoading);
|
|
||||||
},
|
|
||||||
|
|
||||||
addonSelected: function (ev) {
|
|
||||||
var addon = ev.detail.addon;
|
|
||||||
|
|
||||||
if (this.currentPage === this.lastPage) {
|
|
||||||
this.lastPage = 'dashboard';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (addon) {
|
|
||||||
this.lastPage = this.currentPage;
|
|
||||||
this.currentPage = 'addon-view';
|
|
||||||
this.addon = addon;
|
|
||||||
} else {
|
|
||||||
this.currentPage = this.lastPage;
|
|
||||||
// Give time to cleanup the addon-view panel or it crashes
|
|
||||||
setTimeout(function () {
|
|
||||||
this.addon = addon;
|
|
||||||
}.bind(this), 0);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
showPage: function (ev) {
|
|
||||||
this.currentPage = ev.detail.page;
|
|
||||||
},
|
|
||||||
|
|
||||||
dashboardSelected: function (currentPage) {
|
|
||||||
return currentPage === 'dashboard';
|
|
||||||
},
|
|
||||||
|
|
||||||
addonStoreSelected: function (currentPage) {
|
|
||||||
return currentPage === 'addon-store';
|
|
||||||
},
|
|
||||||
|
|
||||||
addonViewSelected: function (currentPage) {
|
|
||||||
return currentPage === 'addon-view';
|
|
||||||
},
|
|
||||||
|
|
||||||
supervisorSelected: function (currentPage) {
|
|
||||||
return currentPage === 'supervisor';
|
|
||||||
},
|
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
193
panels/hassio/hassio-main.html
Normal file
193
panels/hassio/hassio-main.html
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
<link rel="import" href="../../bower_components/polymer/polymer.html">
|
||||||
|
|
||||||
|
<link rel="import" href="../../src/layouts/hass-loading-screen.html">
|
||||||
|
|
||||||
|
<link rel="import" href="./dashboard/hassio-dashboard.html">
|
||||||
|
<link rel="import" href="./addon-view/hassio-addon-view.html">
|
||||||
|
<link rel="import" href="./addon-store/hassio-addon-store.html">
|
||||||
|
<link rel="import" href="./supervisor/hassio-supervisor.html">
|
||||||
|
<link rel="import" href="./hassio-data.html">
|
||||||
|
|
||||||
|
<dom-module id="hassio-main">
|
||||||
|
<template>
|
||||||
|
<hassio-data
|
||||||
|
id='data'
|
||||||
|
hass='[[hass]]'
|
||||||
|
supervisor='{{supervisorInfo}}'
|
||||||
|
homeassistant='{{hassInfo}}'
|
||||||
|
host='{{hostInfo}}'
|
||||||
|
></hassio-data>
|
||||||
|
|
||||||
|
<template is='dom-if' if='[[dashboardSelected(currentPage)]]'>
|
||||||
|
<template is='dom-if' if='[[!loaded]]'>
|
||||||
|
<hass-loading-screen
|
||||||
|
narrow='[[narrow]]'
|
||||||
|
show-menu='[[showMenu]]'
|
||||||
|
></hass-loading-screen>
|
||||||
|
</template>
|
||||||
|
<template is='dom-if' if='[[loaded]]'>
|
||||||
|
<hassio-dashboard
|
||||||
|
hass='[[hass]]'
|
||||||
|
narrow='[[narrow]]'
|
||||||
|
show-menu='[[showMenu]]'
|
||||||
|
supervisor-info='[[supervisorInfo]]'
|
||||||
|
host-info='[[hostInfo]]'
|
||||||
|
hass-info='[[hassInfo]]'
|
||||||
|
></hassio-dashboard>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template is='dom-if' if='[[addonViewSelected(currentPage)]]' restamp>
|
||||||
|
<hassio-addon-view
|
||||||
|
hass='[[hass]]'
|
||||||
|
supervisor-info='[[supervisorInfo]]'
|
||||||
|
host-info='[[hostInfo]]'
|
||||||
|
addon='[[addon]]'
|
||||||
|
></hassio-addon-view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template is='dom-if' if='[[addonStoreSelected(currentPage)]]'>
|
||||||
|
<hassio-addon-store
|
||||||
|
hass='[[hass]]'
|
||||||
|
supervisor-info='[[supervisorInfo]]'
|
||||||
|
></hassio-addon-store>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template is='dom-if' if='[[supervisorSelected(currentPage)]]'>
|
||||||
|
<hassio-supervisor
|
||||||
|
hass='[[hass]]'
|
||||||
|
supervisor-info='[[supervisorInfo]]'
|
||||||
|
></hassio-supervisor>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</dom-module>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
Polymer({
|
||||||
|
is: 'hassio-main',
|
||||||
|
|
||||||
|
properties: {
|
||||||
|
hass: {
|
||||||
|
type: Object,
|
||||||
|
},
|
||||||
|
|
||||||
|
narrow: {
|
||||||
|
type: Boolean,
|
||||||
|
},
|
||||||
|
|
||||||
|
showMenu: {
|
||||||
|
type: Boolean,
|
||||||
|
value: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
addon: {
|
||||||
|
type: String,
|
||||||
|
value: '',
|
||||||
|
},
|
||||||
|
|
||||||
|
supervisorInfo: {
|
||||||
|
type: Object,
|
||||||
|
value: null,
|
||||||
|
},
|
||||||
|
|
||||||
|
hostInfo: {
|
||||||
|
type: Object,
|
||||||
|
value: null,
|
||||||
|
},
|
||||||
|
|
||||||
|
hassInfo: {
|
||||||
|
type: Object,
|
||||||
|
value: null,
|
||||||
|
},
|
||||||
|
|
||||||
|
forceLoading: {
|
||||||
|
type: Boolean,
|
||||||
|
value: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
loaded: {
|
||||||
|
type: Boolean,
|
||||||
|
computed: 'computeIsLoaded(supervisorInfo, hostInfo, hassInfo, forceLoading)',
|
||||||
|
},
|
||||||
|
|
||||||
|
currentPage: {
|
||||||
|
type: String,
|
||||||
|
value: 'dashboard',
|
||||||
|
},
|
||||||
|
|
||||||
|
lastPage: {
|
||||||
|
type: String,
|
||||||
|
value: 'dashboard',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
listeners: {
|
||||||
|
'hassio-select-addon': 'addonSelected',
|
||||||
|
'hassio-show-page': 'showPage',
|
||||||
|
'hass-api-called': 'apiCalled',
|
||||||
|
},
|
||||||
|
|
||||||
|
apiCalled: function (ev) {
|
||||||
|
if (ev.detail.success) {
|
||||||
|
var tries = 1;
|
||||||
|
|
||||||
|
var tryUpdate = function () {
|
||||||
|
this.$.data.refresh().catch(function () {
|
||||||
|
tries += 1;
|
||||||
|
setTimeout(tryUpdate, Math.min(tries, 5) * 1000);
|
||||||
|
});
|
||||||
|
}.bind(this);
|
||||||
|
|
||||||
|
tryUpdate();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
computeIsLoaded: function (supervisorInfo, hostInfo, hassInfo, forceLoading) {
|
||||||
|
return (supervisorInfo !== null &&
|
||||||
|
hostInfo !== null &&
|
||||||
|
hassInfo !== null &&
|
||||||
|
!forceLoading);
|
||||||
|
},
|
||||||
|
|
||||||
|
addonSelected: function (ev) {
|
||||||
|
var addon = ev.detail.addon;
|
||||||
|
|
||||||
|
if (this.currentPage === this.lastPage) {
|
||||||
|
this.lastPage = 'dashboard';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (addon) {
|
||||||
|
this.lastPage = this.currentPage;
|
||||||
|
this.currentPage = 'addon-view';
|
||||||
|
this.addon = addon;
|
||||||
|
} else {
|
||||||
|
this.currentPage = this.lastPage;
|
||||||
|
// Give time to cleanup the addon-view panel or it crashes
|
||||||
|
setTimeout(function () {
|
||||||
|
this.addon = addon;
|
||||||
|
}.bind(this), 0);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
showPage: function (ev) {
|
||||||
|
this.currentPage = ev.detail.page;
|
||||||
|
},
|
||||||
|
|
||||||
|
dashboardSelected: function (currentPage) {
|
||||||
|
return currentPage === 'dashboard';
|
||||||
|
},
|
||||||
|
|
||||||
|
addonStoreSelected: function (currentPage) {
|
||||||
|
return currentPage === 'addon-store';
|
||||||
|
},
|
||||||
|
|
||||||
|
addonViewSelected: function (currentPage) {
|
||||||
|
return currentPage === 'addon-view';
|
||||||
|
},
|
||||||
|
|
||||||
|
supervisorSelected: function (currentPage) {
|
||||||
|
return currentPage === 'supervisor';
|
||||||
|
},
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
@ -38,7 +38,9 @@ const panelVulcan = new Vulcanize({
|
|||||||
inlineCss: true,
|
inlineCss: true,
|
||||||
implicitStrip: true,
|
implicitStrip: true,
|
||||||
stripComments: true,
|
stripComments: true,
|
||||||
stripExcludes: undefined,
|
stripExcludes: [
|
||||||
|
'panels/hassio/hassio-main.html'
|
||||||
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
const baseExcludes = [
|
const baseExcludes = [
|
||||||
@ -47,6 +49,7 @@ const baseExcludes = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
const toProcess = [
|
const toProcess = [
|
||||||
|
// This is the main entry point
|
||||||
{
|
{
|
||||||
source: './src/home-assistant.html',
|
source: './src/home-assistant.html',
|
||||||
output: './build/frontend.html',
|
output: './build/frontend.html',
|
||||||
@ -54,9 +57,18 @@ const toProcess = [
|
|||||||
stripExcludes: baseExcludes,
|
stripExcludes: baseExcludes,
|
||||||
})),
|
})),
|
||||||
},
|
},
|
||||||
|
// This is the Hass.io configuration panel
|
||||||
|
// It's build standalone because it is embedded in the supervisor.
|
||||||
|
{
|
||||||
|
source: './panels/hassio/hassio-main.html',
|
||||||
|
output: './build-temp/hassio-main.html',
|
||||||
|
vulcan: new Vulcanize(Object.assign({}, baseVulcanOptions, {
|
||||||
|
stripExcludes: baseExcludes,
|
||||||
|
})),
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
fs.readdirSync('./panels').forEach(panel => {
|
fs.readdirSync('./panels').forEach((panel) => {
|
||||||
toProcess.push({
|
toProcess.push({
|
||||||
source: `./panels/${panel}/ha-panel-${panel}.html`,
|
source: `./panels/${panel}/ha-panel-${panel}.html`,
|
||||||
output: `./build/panels/ha-panel-${panel}.html`,
|
output: `./build/panels/ha-panel-${panel}.html`,
|
||||||
@ -85,7 +97,9 @@ hyd.Analyzer.analyze('src/home-assistant.html')
|
|||||||
.then(function (analyzer) {
|
.then(function (analyzer) {
|
||||||
return analyzer._getDependencies('src/home-assistant.html');
|
return analyzer._getDependencies('src/home-assistant.html');
|
||||||
})
|
})
|
||||||
.then(deps => { panelVulcan.stripExcludes = deps; })
|
.then((deps) => {
|
||||||
|
panelVulcan.stripExcludes = panelVulcan.stripExcludes.concat(deps);
|
||||||
|
})
|
||||||
// Chain all vulcanizing work as promises
|
// Chain all vulcanizing work as promises
|
||||||
.then(() => toProcess.reduce(
|
.then(() => toProcess.reduce(
|
||||||
(p, entry) => p.then(() => vulcanizeEntry(entry)),
|
(p, entry) => p.then(() => vulcanizeEntry(entry)),
|
||||||
|
@ -2,6 +2,7 @@ import * as HAWS from 'home-assistant-js-websocket';
|
|||||||
|
|
||||||
window.HAWS = HAWS;
|
window.HAWS = HAWS;
|
||||||
window.HASS_DEMO = __DEMO__;
|
window.HASS_DEMO = __DEMO__;
|
||||||
|
window.HASS_DEV = __DEV__;
|
||||||
|
|
||||||
const init = window.createHassConnection = function (password) {
|
const init = window.createHassConnection = function (password) {
|
||||||
const proto = window.location.protocol === 'https:' ? 'wss' : 'ws';
|
const proto = window.location.protocol === 'https:' ? 'wss' : 'ws';
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<link rel="import" href="../../bower_components/app-layout/app-toolbar/app-toolbar.html">
|
<link rel="import" href="../../bower_components/app-layout/app-toolbar/app-toolbar.html">
|
||||||
|
|
||||||
<dom-module id='hassio-loading'>
|
<dom-module id='hass-loading-screen'>
|
||||||
<template>
|
<template>
|
||||||
<style include='iron-flex ha-style'>
|
<style include='iron-flex ha-style'>
|
||||||
[hidden] {
|
[hidden] {
|
||||||
@ -23,7 +23,7 @@
|
|||||||
<div class='placeholder'>
|
<div class='placeholder'>
|
||||||
<app-toolbar>
|
<app-toolbar>
|
||||||
<ha-menu-button narrow='[[narrow]]' show-menu='[[showMenu]]'></ha-menu-button>
|
<ha-menu-button narrow='[[narrow]]' show-menu='[[showMenu]]'></ha-menu-button>
|
||||||
<div main-title>Hass.io</div>
|
<div main-title>[[title]]</div>
|
||||||
</app-toolbar>
|
</app-toolbar>
|
||||||
<div class='layout horizontal center-center'>
|
<div class='layout horizontal center-center'>
|
||||||
<paper-spinner active></paper-spinner>
|
<paper-spinner active></paper-spinner>
|
||||||
@ -34,13 +34,9 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
Polymer({
|
Polymer({
|
||||||
is: 'hassio-loading',
|
is: 'hass-loading-screen',
|
||||||
|
|
||||||
properties: {
|
properties: {
|
||||||
hass: {
|
|
||||||
type: Object,
|
|
||||||
},
|
|
||||||
|
|
||||||
narrow: {
|
narrow: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
value: false,
|
value: false,
|
||||||
@ -50,6 +46,11 @@ Polymer({
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
value: false,
|
value: false,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
value: '',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
@ -1,41 +1,21 @@
|
|||||||
<link rel='import' href='../../bower_components/paper-spinner/paper-spinner.html'>
|
<link rel='import' href='../../bower_components/polymer/polymer.html'>
|
||||||
|
|
||||||
<link rel="import" href="../../bower_components/iron-flex-layout/iron-flex-layout-classes.html">
|
<link rel="import" href="./hass-loading-screen.html">
|
||||||
|
|
||||||
<link rel="import" href="../../bower_components/app-layout/app-toolbar/app-toolbar.html">
|
|
||||||
|
|
||||||
<link rel='import' href='../components/ha-menu-button.html'>
|
|
||||||
<link rel="import" href="../resources/ha-style.html">
|
|
||||||
|
|
||||||
<dom-module id='partial-panel-resolver'>
|
<dom-module id='partial-panel-resolver'>
|
||||||
<template>
|
<template>
|
||||||
<style include='iron-flex ha-style'>
|
<style>
|
||||||
[hidden] {
|
[hidden] {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.placeholder {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.layout {
|
|
||||||
height: calc(100% - 64px);
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<div hidden$='[[resolved]]' class='placeholder'>
|
<template is='dom-if' if='[[!resolved]]'>
|
||||||
<app-toolbar>
|
<hass-loading-screen
|
||||||
<ha-menu-button narrow='[[narrow]]' show-menu='[[showMenu]]'></ha-menu-button>
|
narrow='[[narrow]]'
|
||||||
</app-toolbar>
|
show-menu='[[showMenu]]'
|
||||||
<div class='layout horizontal center-center'>
|
></hass-loading-screen>
|
||||||
<template is='dom-if' if='[[!errorLoading]]'>
|
</template>
|
||||||
<paper-spinner active></paper-spinner>
|
|
||||||
</template>
|
|
||||||
<template is='dom-if' if='[[errorLoading]]'>
|
|
||||||
Error loading panel :(
|
|
||||||
</template>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<span id='panel' hidden$='[[!resolved]]'></span>
|
<span id='panel' hidden$='[[!resolved]]'></span>
|
||||||
</template>
|
</template>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user