diff --git a/README.md b/README.md index f79d8d17d..963f91c04 100644 --- a/README.md +++ b/README.md @@ -20,9 +20,9 @@ Installation instructions can be found at . The development of the supervisor is a bit tricky. Not difficult but tricky. -- You can use the builder to build your supervisor: https://github.com/home-assistant/hassio-build/tree/master/builder +- You can use the builder to build your supervisor: https://github.com/home-assistant/hassio-builder - Go into a HassOS device or VM and pull your supervisor. -- Set the developer modus on updater.json +- Set the developer modus with cli `hassio supervisor options --channel=dev` - Tag it as `homeassistant/xy-hassio-supervisor:latest` - Restart the service like `systemctl restart hassos-supervisor | journalctl -fu hassos-supervisor` - Test your changes diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py index 659de8fc6..82f1e8ef3 100644 --- a/hassio/addons/addon.py +++ b/hassio/addons/addon.py @@ -48,9 +48,9 @@ from ..const import ( ATTR_INGRESS_PORT, ATTR_INGRESS_TOKEN, ATTR_INGRESS_PANEL, - ATTR_INGRESS_PANEL_ADMIN, - ATTR_INGRESS_PANEL_ICON, - ATTR_INGRESS_PANEL_TITLE, + ATTR_PANEL_ADMIN, + ATTR_PANEL_ICON, + ATTR_PANEL_TITLE, ATTR_KERNEL_MODULES, ATTR_LEGACY, ATTR_LOCATON, @@ -454,19 +454,19 @@ class Addon(CoreSysAttributes): return port @property - def ingress_icon(self) -> str: + def panel_icon(self) -> str: """Return panel icon for Ingress frame.""" - return self._mesh[ATTR_INGRESS_PANEL_ICON] + return self._mesh[ATTR_PANEL_ICON] @property - def ingress_title(self) -> str: + def panel_title(self) -> str: """Return panel icon for Ingress frame.""" - return self._mesh.get(ATTR_INGRESS_PANEL_TITLE, self.name) + return self._mesh.get(ATTR_PANEL_TITLE, self.name) @property - def ingress_admin(self) -> str: + def panel_admin(self) -> str: """Return panel icon for Ingress frame.""" - return self._mesh[ATTR_INGRESS_PANEL_ADMIN] + return self._mesh[ATTR_PANEL_ADMIN] @property def host_network(self): diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index a618961a8..ac2c2efe6 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -42,9 +42,9 @@ from ..const import ( ATTR_INGRESS_PORT, ATTR_INGRESS_TOKEN, ATTR_INGRESS_PANEL, - ATTR_INGRESS_PANEL_ADMIN, - ATTR_INGRESS_PANEL_ICON, - ATTR_INGRESS_PANEL_TITLE, + ATTR_PANEL_ADMIN, + ATTR_PANEL_ICON, + ATTR_PANEL_TITLE, ATTR_KERNEL_MODULES, ATTR_LEGACY, ATTR_LOCATON, @@ -163,9 +163,9 @@ SCHEMA_ADDON_CONFIG = vol.Schema({ vol.Optional(ATTR_INGRESS, default=False): vol.Boolean(), vol.Optional(ATTR_INGRESS_PORT, default=8099): vol.Any(NETWORK_PORT, vol.Equal(0)), vol.Optional(ATTR_INGRESS_ENTRY): vol.Coerce(str), - vol.Optional(ATTR_INGRESS_PANEL_ICON, default="mdi:puzzle"): vol.Coerce(str), - vol.Optional(ATTR_INGRESS_PANEL_TITLE): vol.Coerce(str), - vol.Optional(ATTR_INGRESS_PANEL_ADMIN, default=True): vol.Boolean(), + vol.Optional(ATTR_PANEL_ICON, default="mdi:puzzle"): vol.Coerce(str), + vol.Optional(ATTR_PANEL_TITLE): vol.Coerce(str), + vol.Optional(ATTR_PANEL_ADMIN, default=True): vol.Boolean(), vol.Optional(ATTR_HOMEASSISTANT): vol.Maybe(vol.Coerce(str)), vol.Optional(ATTR_HOST_NETWORK, default=False): vol.Boolean(), vol.Optional(ATTR_HOST_PID, default=False): vol.Boolean(), diff --git a/hassio/api/ingress.py b/hassio/api/ingress.py index ac9ae289a..ef249483d 100644 --- a/hassio/api/ingress.py +++ b/hassio/api/ingress.py @@ -61,9 +61,9 @@ class APIIngress(CoreSysAttributes): addons = {} for addon in self.sys_ingress.addons: addons[addon.slug] = { - ATTR_TITLE: addon.ingress_title, - ATTR_ICON: addon.ingress_icon, - ATTR_ADMIN: addon.ingress_admin, + ATTR_TITLE: addon.panel_title, + ATTR_ICON: addon.panel_icon, + ATTR_ADMIN: addon.panel_admin, ATTR_ENABLE: addon.ingress_panel, } diff --git a/hassio/api/panel/chunk.61f4e5888ff9846fe4b8.js b/hassio/api/panel/chunk.1b30ffdc501071af245c.js similarity index 51% rename from hassio/api/panel/chunk.61f4e5888ff9846fe4b8.js rename to hassio/api/panel/chunk.1b30ffdc501071af245c.js index 0f4c58c44..04b130029 100644 --- a/hassio/api/panel/chunk.61f4e5888ff9846fe4b8.js +++ b/hassio/api/panel/chunk.1b30ffdc501071af245c.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{131:function(e,n,t){"use strict";t.r(n);t(94),t(108),t(41),t(25);var o=t(4),a=t(9),i=(t(116),t(15),t(14),t(127),t(128),t(117),t(26),t(30));function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(){var e=function(e,n){n||(n=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}(['\n \n \n
\n \n\n \n \n \n \n \n \n \n \n \n \n
\n
\n Save\n
\n
\n '],['\n \n \n
\n \n\n \n \n \n \n \n \n \n \n \n \n
\n
\n Save\n
\n
\n ']);return s=function(){return e},e}function c(e,n){for(var t=0;t\n :host {\n display: block;\n }\n paper-card {\n display: block;\n }\n .card-actions {\n @apply --layout;\n @apply --layout-justified;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n iron-autogrow-textarea {\n width: 100%;\n font-family: monospace;\n }\n .syntaxerror {\n color: var(--google-red-500);\n }\n \n \n
\n \n \n
\n
\n Reset to defaults\n Save\n
\n
\n ']);return f=function(){return e},e}function b(e,n){for(var t=0;t bit more top margin */\n font-weight: 500;\n overflow: hidden;\n text-transform: uppercase;\n text-overflow: ellipsis;\n transition: background-color 0.3s ease-in-out;\n text-transform: var(--ha-label-badge-label-text-transform, uppercase);\n }\n .label-badge .label.big span {\n font-size: 90%;\n padding: 10% 12% 7% 12%; /* push smaller text a bit down to center vertically */\n }\n .badge-container .title {\n margin-top: 1em;\n font-size: var(--ha-label-badge-title-font-size, 0.9em);\n width: var(--ha-label-badge-title-width, 5em);\n font-weight: var(--ha-label-badge-title-font-weight, 400);\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: normal;\n }\n "]);return E=function(){return e},e}function R(){var e=M(['\n
',"
\n "]);return R=function(){return e},e}function z(){var e=M(['\n \n ',"\n \n "]);return z=function(){return e},e}function D(){var e=M(["\n ","\n "]);return D=function(){return e},e}function H(){var e=M(['\n \n ']);return H=function(){return e},e}function N(){var e=M(['\n
\n
\n \n ',"\n ","\n
\n ","\n
\n ","\n \n "]);return N=function(){return e},e}function M(e,n){return n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}function U(e,n){for(var t=0;t4)}),!this.icon||this.value||this.image?"":Object(w.e)(H(),this.icon),this.value&&!this.image?Object(w.e)(D(),this.value):"",this.label?Object(w.e)(z(),Object(O.a)({label:!0,big:this.label.length>5}),this.label):"",this.description?Object(w.e)(R(),this.description):"")}},{key:"updated",value:function(e){$(q(n.prototype),"updated",this).call(this,e),e.has("image")&&(this.shadowRoot.getElementById("badge").style.backgroundImage=this.image?"url(".concat(this.image,")"):"")}}])&&U(t.prototype,o),a&&U(t,a),n}();customElements.define("ha-label-badge",W);t(70);var J=t(42),X=t(100);t(35);function F(e){return(F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function G(){var e=function(e,n){n||(n=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}(['\n \n\n \n\n \n
\n
\n [[addon.name]]\n
\n \n \n
\n
\n
\n [[addon.description]].
\n Visit\n [[addon.name]] page for\n details.\n
\n \n \n
\n

Add-on Security Rating

\n
\n Hass.io provides a security rating to each of the add-ons, which indicates the risks involved when using this add-on. The more access an add-on requires on your system, the lower the score, thus raising the possible security risks.\n
\n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n \n Open web UI\n \n \n \n
\n
\n \n ']);return G=function(){return e},e}function V(e,n){for(var t=0;t4?"green":e>2?"yellow":"red"}},{key:"startOnBootToggled",value:function(){var e={boot:"auto"===this.addon.boot?"manual":"auto"};this.hass.callApi("POST","hassio/addons/".concat(this.addonSlug,"/options"),e)}},{key:"autoUpdateToggled",value:function(){var e={auto_update:!this.addon.auto_update};this.hass.callApi("POST","hassio/addons/".concat(this.addonSlug,"/options"),e)}},{key:"protectionToggled",value:function(){var e={protected:!this.addon.protected};this.hass.callApi("POST","hassio/addons/".concat(this.addonSlug,"/security"),e),this.set("addon.protected",!this.addon.protected)}},{key:"panelToggled",value:function(){var e={ingress_panel:!this.addon.ingress_panel};this.hass.callApi("POST","hassio/addons/".concat(this.addonSlug,"/options"),e)}},{key:"showMoreInfo",value:function(e){var n=e.target.getAttribute("id");Object(X.a)(this,{title:Z[n].title,content:Z[n].description})}},{key:"openChangelog",value:function(){var e=this;this.hass.callApi("get","hassio/addons/".concat(this.addonSlug,"/changelog")).then(function(e){return e},function(){return"Error getting changelog"}).then(function(n){Object(X.a)(e,{title:"Changelog",content:n})})}},{key:"_unistallClicked",value:function(){var e=this;if(confirm("Are you sure you want to uninstall this add-on?")){var n="hassio/addons/".concat(this.addonSlug,"/uninstall"),t={path:n};this.hass.callApi("post",n).then(function(e){t.success=!0,t.response=e},function(e){t.success=!1,t.response=e}).then(function(){e.fire("hass-api-called",t)})}}}])&&V(t.prototype,r),s&&V(t,s),n}();customElements.define("hassio-addon-info",ee);var ne=t(101);function te(e){return(te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function oe(){var e=function(e,n){n||(n=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}(['\n \n ','\n \n
\n
\n Refresh\n
\n
\n ']);return oe=function(){return e},e}function ae(e,n){for(var t=0;t\n :host {\n display: block;\n }\n paper-card {\n display: block;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n .card-actions {\n @apply --layout;\n @apply --layout-justified;\n }\n \n \n
\n \n\n \n \n \n \n \n \n \n \n \n
ContainerHostDescription
\n
\n
\n Reset to defaults\n Save\n
\n
\n ']);return de=function(){return e},e}function ue(e,n){for(var t=0;t\n :host {\n color: var(--primary-text-color);\n --paper-card-header-color: var(--primary-text-color);\n }\n .content {\n padding: 24px 0 32px;\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config {\n margin-bottom: 24px;\n width: 600px;\n }\n hassio-addon-logs {\n max-width: calc(100% - 8px);\n min-width: 600px;\n }\n @media only screen and (max-width: 600px) {\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config,\n hassio-addon-logs {\n max-width: 100%;\n min-width: 100%;\n }\n }\n \n \n
\n \n\n \n
\n
\n ']);return ge=function(){return e},e}function ye(e,n){for(var t=0;t=0?n:null}:null}),e._resize();for(var n=document.createTreeWalker(e,1,null,!1);n.nextNode();){var t=n.currentNode;"A"===t.tagName&&t.host!==document.location.host?t.target="_blank":"IMG"===t.tagName&&t.addEventListener("load",e._resize)}}else 2===e._scriptLoaded&&(e.innerText=e.content)}))}}])&&r(i.prototype,h),f&&r(i,f),n}();customElements.define("ha-markdown",h)}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{131:function(e,n,t){"use strict";t.r(n);t(94),t(108),t(41),t(25);var o=t(4),a=t(9),i=(t(116),t(15),t(14),t(127),t(128),t(117),t(26),t(30));function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(){var e=function(e,n){n||(n=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}(['\n \n \n
\n \n\n \n \n \n \n \n \n \n \n \n \n
\n
\n Save\n
\n
\n '],['\n \n \n
\n \n\n \n \n \n \n \n \n \n \n \n \n
\n
\n Save\n
\n
\n ']);return s=function(){return e},e}function c(e,n){for(var t=0;t\n :host {\n display: block;\n }\n paper-card {\n display: block;\n }\n .card-actions {\n @apply --layout;\n @apply --layout-justified;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n iron-autogrow-textarea {\n width: 100%;\n font-family: monospace;\n }\n .syntaxerror {\n color: var(--google-red-500);\n }\n \n \n
\n \n \n
\n
\n Reset to defaults\n Save\n
\n
\n ']);return f=function(){return e},e}function b(e,n){for(var t=0;t bit more top margin */\n font-weight: 500;\n overflow: hidden;\n text-transform: uppercase;\n text-overflow: ellipsis;\n transition: background-color 0.3s ease-in-out;\n text-transform: var(--ha-label-badge-label-text-transform, uppercase);\n }\n .label-badge .label.big span {\n font-size: 90%;\n padding: 10% 12% 7% 12%; /* push smaller text a bit down to center vertically */\n }\n .badge-container .title {\n margin-top: 1em;\n font-size: var(--ha-label-badge-title-font-size, 0.9em);\n width: var(--ha-label-badge-title-width, 5em);\n font-weight: var(--ha-label-badge-title-font-weight, 400);\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: normal;\n }\n "]);return E=function(){return e},e}function R(){var e=M(['\n
',"
\n "]);return R=function(){return e},e}function z(){var e=M(['\n \n ',"\n \n "]);return z=function(){return e},e}function D(){var e=M(["\n ","\n "]);return D=function(){return e},e}function H(){var e=M(['\n \n ']);return H=function(){return e},e}function N(){var e=M(['\n
\n
\n \n ',"\n ","\n
\n ","\n
\n ","\n \n "]);return N=function(){return e},e}function M(e,n){return n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}function U(e,n){for(var t=0;t4)}),!this.icon||this.value||this.image?"":Object(w.e)(H(),this.icon),this.value&&!this.image?Object(w.e)(D(),this.value):"",this.label?Object(w.e)(z(),Object(O.a)({label:!0,big:this.label.length>5}),this.label):"",this.description?Object(w.e)(R(),this.description):"")}},{key:"updated",value:function(e){$(q(n.prototype),"updated",this).call(this,e),e.has("image")&&(this.shadowRoot.getElementById("badge").style.backgroundImage=this.image?"url(".concat(this.image,")"):"")}}])&&U(t.prototype,o),a&&U(t,a),n}();customElements.define("ha-label-badge",W);t(70);var J=t(42),X=t(100);t(35);function F(e){return(F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function G(){var e=function(e,n){n||(n=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}(['\n \n\n \n\n \n
\n
\n [[addon.name]]\n
\n \n \n
\n
\n
\n [[addon.description]].
\n Visit\n [[addon.name]] page for\n details.\n
\n \n \n
\n

Add-on Security Rating

\n
\n Hass.io provides a security rating to each of the add-ons, which indicates the risks involved when using this add-on. The more access an add-on requires on your system, the lower the score, thus raising the possible security risks.\n
\n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n \n Open web UI\n \n \n \n
\n
\n \n ']);return G=function(){return e},e}function V(e,n){for(var t=0;t4?"green":e>2?"yellow":"red"}},{key:"startOnBootToggled",value:function(){var e={boot:"auto"===this.addon.boot?"manual":"auto"};this.hass.callApi("POST","hassio/addons/".concat(this.addonSlug,"/options"),e)}},{key:"autoUpdateToggled",value:function(){var e={auto_update:!this.addon.auto_update};this.hass.callApi("POST","hassio/addons/".concat(this.addonSlug,"/options"),e)}},{key:"protectionToggled",value:function(){var e={protected:!this.addon.protected};this.hass.callApi("POST","hassio/addons/".concat(this.addonSlug,"/security"),e),this.set("addon.protected",!this.addon.protected)}},{key:"panelToggled",value:function(){var e={ingress_panel:!this.addon.ingress_panel};this.hass.callApi("POST","hassio/addons/".concat(this.addonSlug,"/options"),e)}},{key:"showMoreInfo",value:function(e){var n=e.target.getAttribute("id");Object(X.a)(this,{title:Z[n].title,content:Z[n].description})}},{key:"openChangelog",value:function(){var e=this;this.hass.callApi("get","hassio/addons/".concat(this.addonSlug,"/changelog")).then(function(e){return e},function(){return"Error getting changelog"}).then(function(n){Object(X.a)(e,{title:"Changelog",content:n})})}},{key:"_unistallClicked",value:function(){var e=this;if(confirm("Are you sure you want to uninstall this add-on?")){var n="hassio/addons/".concat(this.addonSlug,"/uninstall"),t={path:n};this.hass.callApi("post",n).then(function(e){t.success=!0,t.response=e},function(e){t.success=!1,t.response=e}).then(function(){e.fire("hass-api-called",t)})}}}])&&V(t.prototype,r),s&&V(t,s),n}();customElements.define("hassio-addon-info",ee);var ne=t(101);function te(e){return(te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function oe(){var e=function(e,n){n||(n=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}(['\n \n ','\n \n
\n
\n Refresh\n
\n
\n ']);return oe=function(){return e},e}function ae(e,n){for(var t=0;t\n :host {\n display: block;\n }\n paper-card {\n display: block;\n }\n .errors {\n color: var(--google-red-500);\n margin-bottom: 16px;\n }\n .card-actions {\n @apply --layout;\n @apply --layout-justified;\n }\n \n \n
\n \n\n \n \n \n \n \n \n \n \n \n
ContainerHostDescription
\n
\n
\n Reset to defaults\n Save\n
\n
\n ']);return de=function(){return e},e}function ue(e,n){for(var t=0;t\n :host {\n color: var(--primary-text-color);\n --paper-card-header-color: var(--primary-text-color);\n }\n .content {\n padding: 24px 0 32px;\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config {\n margin-bottom: 24px;\n width: 600px;\n }\n hassio-addon-logs {\n max-width: calc(100% - 8px);\n min-width: 600px;\n }\n @media only screen and (max-width: 600px) {\n hassio-addon-info,\n hassio-addon-network,\n hassio-addon-audio,\n hassio-addon-config,\n hassio-addon-logs {\n max-width: 100%;\n min-width: 100%;\n }\n }\n \n \n
\n \n\n \n
\n
\n ']);return ge=function(){return e},e}function ye(e,n){for(var t=0;t=0?n:null}:null}),e._resize();for(var n=document.createTreeWalker(e,1,null,!1);n.nextNode();){var t=n.currentNode;"A"===t.tagName&&t.host!==document.location.host?t.target="_blank":"IMG"===t.tagName&&t.addEventListener("load",e._resize)}}else 2===e._scriptLoaded&&(e.innerText=e.content)}))}}])&&r(i.prototype,h),f&&r(i,f),n}();customElements.define("ha-markdown",h)}}]); \ No newline at end of file diff --git a/hassio/api/panel/chunk.1b30ffdc501071af245c.js.gz b/hassio/api/panel/chunk.1b30ffdc501071af245c.js.gz new file mode 100644 index 000000000..c1fdb900b Binary files /dev/null and b/hassio/api/panel/chunk.1b30ffdc501071af245c.js.gz differ diff --git a/hassio/api/panel/chunk.61f4e5888ff9846fe4b8.js.gz b/hassio/api/panel/chunk.61f4e5888ff9846fe4b8.js.gz deleted file mode 100644 index d4513f4d3..000000000 Binary files a/hassio/api/panel/chunk.61f4e5888ff9846fe4b8.js.gz and /dev/null differ diff --git a/hassio/api/panel/entrypoint.js b/hassio/api/panel/entrypoint.js index f656416b2..2264c16a3 100644 --- a/hassio/api/panel/entrypoint.js +++ b/hassio/api/panel/entrypoint.js @@ -1 +1 @@ -!function(e){function n(n){for(var t,o,a=n[0],i=n[1],f=0,u=[];f