diff --git a/.gitmodules b/.gitmodules index 49d8dace9a4b8c..e69de29bb2d1d6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "homeassistant/components/frontend/www_static/home-assistant-polymer"] - path = homeassistant/components/frontend/www_static/home-assistant-polymer - url = https://github.com/home-assistant/home-assistant-polymer.git diff --git a/MANIFEST.in b/MANIFEST.in index 6f8652fe270e14..490b550e705e52 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,4 @@ include README.rst include LICENSE.md graft homeassistant -prune homeassistant/components/frontend/www_static/home-assistant-polymer recursive-exclude * *.py[co] diff --git a/homeassistant/components/config/__init__.py b/homeassistant/components/config/__init__.py index 9ce7f30529beba..886355c2d1e2ff 100644 --- a/homeassistant/components/config/__init__.py +++ b/homeassistant/components/config/__init__.py @@ -8,7 +8,6 @@ from homeassistant.const import EVENT_COMPONENT_LOADED, CONF_ID from homeassistant.setup import ( async_prepare_setup_platform, ATTR_COMPONENT) -from homeassistant.components.frontend import register_built_in_panel from homeassistant.components.http import HomeAssistantView from homeassistant.util.yaml import load_yaml, dump @@ -21,7 +20,8 @@ @asyncio.coroutine def async_setup(hass, config): """Set up the config component.""" - register_built_in_panel(hass, 'config', 'Configuration', 'mdi:settings') + yield from hass.components.frontend.async_register_built_in_panel( + 'config', 'Configuration', 'mdi:settings') @asyncio.coroutine def setup_panel(panel_name): diff --git a/homeassistant/components/frontend/__init__.py b/homeassistant/components/frontend/__init__.py index 941de4574cffba..b1cf267aa8acbe 100644 --- a/homeassistant/components/frontend/__init__.py +++ b/homeassistant/components/frontend/__init__.py @@ -13,22 +13,23 @@ from homeassistant.const import CONF_NAME, EVENT_THEMES_UPDATED from homeassistant.core import callback from homeassistant.loader import bind_hass -from homeassistant.components import api from homeassistant.components.http import HomeAssistantView from homeassistant.components.http.auth import is_trusted_ip -from homeassistant.components.http.const import KEY_DEVELOPMENT -from .version import FINGERPRINTS DOMAIN = 'frontend' DEPENDENCIES = ['api', 'websocket_api'] +REQUIREMENTS = ['home-assistant-frontend==20171021.2'] URL_PANEL_COMPONENT = '/frontend/panels/{}.html' URL_PANEL_COMPONENT_FP = '/frontend/panels/{}-{}.html' -STATIC_PATH = os.path.join(os.path.dirname(__file__), 'www_static/') +POLYMER_PATH = os.path.join(os.path.dirname(__file__), + 'home-assistant-polymer/') +FINAL_PATH = os.path.join(POLYMER_PATH, 'final') -ATTR_THEMES = 'themes' -ATTR_EXTRA_HTML_URL = 'extra_html_url' +CONF_THEMES = 'themes' +CONF_EXTRA_HTML_URL = 'extra_html_url' +CONF_FRONTEND_REPO = 'development_repo' DEFAULT_THEME_COLOR = '#03A9F4' MANIFEST_JSON = { 'background_color': '#FFFFFF', @@ -50,9 +51,9 @@ 'type': 'image/png' }) +DATA_FINALIZE_PANEL = 'frontend_finalize_panel' DATA_PANELS = 'frontend_panels' DATA_EXTRA_HTML_URL = 'frontend_extra_html_url' -DATA_INDEX_VIEW = 'frontend_index_view' DATA_THEMES = 'frontend_themes' DATA_DEFAULT_THEME = 'frontend_default_theme' DEFAULT_THEME = 'default' @@ -60,15 +61,16 @@ PRIMARY_COLOR = 'primary-color' # To keep track we don't register a component twice (gives a warning) -_REGISTERED_COMPONENTS = set() +# _REGISTERED_COMPONENTS = set() _LOGGER = logging.getLogger(__name__) CONFIG_SCHEMA = vol.Schema({ DOMAIN: vol.Schema({ - vol.Optional(ATTR_THEMES): vol.Schema({ + vol.Optional(CONF_FRONTEND_REPO): cv.isdir, + vol.Optional(CONF_THEMES): vol.Schema({ cv.string: {cv.string: cv.string} }), - vol.Optional(ATTR_EXTRA_HTML_URL): + vol.Optional(CONF_EXTRA_HTML_URL): vol.All(cv.ensure_list, [cv.string]), }), }, extra=vol.ALLOW_EXTRA) @@ -80,101 +82,172 @@ }) +class AbstractPanel: + """Abstract class for panels.""" + + # Name of the webcomponent + component_name = None + + # Icon to show in the sidebar (optional) + sidebar_icon = None + + # Title to show in the sidebar (optional) + sidebar_title = None + + # Url to the webcomponent + webcomponent_url = None + + # Url to show the panel in the frontend + frontend_url_path = None + + # Config to pass to the webcomponent + config = None + + @asyncio.coroutine + def async_register(self, hass): + """Register panel with HASS.""" + panels = hass.data.get(DATA_PANELS) + if panels is None: + panels = hass.data[DATA_PANELS] = {} + + if self.frontend_url_path in panels: + _LOGGER.warning("Overwriting component %s", self.frontend_url_path) + + if DATA_FINALIZE_PANEL in hass.data: + yield from hass.data[DATA_FINALIZE_PANEL](self) + + panels[self.frontend_url_path] = self + + @callback + def async_register_index_routes(self, router, index_view): + """Register routes for panel to be served by index view.""" + router.add_route( + 'get', '/{}'.format(self.frontend_url_path), index_view.get) + router.add_route( + 'get', '/{}/{{extra:.+}}'.format(self.frontend_url_path), + index_view.get) + + def as_dict(self): + """Panel as dictionary.""" + return { + 'component_name': self.component_name, + 'icon': self.sidebar_icon, + 'title': self.sidebar_title, + 'url': self.webcomponent_url, + 'url_path': self.frontend_url_path, + 'config': self.config, + } + + +class BuiltInPanel(AbstractPanel): + """Panel that is part of hass_frontend.""" + + def __init__(self, component_name, sidebar_title, sidebar_icon, + frontend_url_path, config): + """Initialize a built-in panel.""" + self.component_name = component_name + self.sidebar_title = sidebar_title + self.sidebar_icon = sidebar_icon + self.frontend_url_path = frontend_url_path or component_name + self.config = config + + @asyncio.coroutine + def async_finalize(self, hass, frontend_repository_path): + """Finalize this panel for usage. + + If frontend_repository_path is set, will be prepended to path of + built-in components. + """ + panel_path = 'panels/ha-panel-{}.html'.format(self.component_name) + + if frontend_repository_path is None: + import hass_frontend + + self.webcomponent_url = \ + '/static/panels/ha-panel-{}-{}.html'.format( + self.component_name, + hass_frontend.FINGERPRINTS[panel_path]) + + else: + # Dev mode + self.webcomponent_url = \ + '/home-assistant-polymer/panels/{}/ha-panel-{}.html'.format( + self.component_name, self.component_name) + + +class ExternalPanel(AbstractPanel): + """Panel that is added by a custom component.""" + + REGISTERED_COMPONENTS = set() + + def __init__(self, component_name, path, md5, sidebar_title, sidebar_icon, + frontend_url_path, config): + """Initialize an external panel.""" + self.component_name = component_name + self.path = path + self.md5 = md5 + self.sidebar_title = sidebar_title + self.sidebar_icon = sidebar_icon + self.frontend_url_path = frontend_url_path or component_name + self.config = config + + @asyncio.coroutine + def async_finalize(self, hass, frontend_repository_path): + """Finalize this panel for usage. + + frontend_repository_path is set, will be prepended to path of built-in + components. + """ + try: + if self.md5 is None: + yield from hass.async_add_job(_fingerprint, self.path) + except OSError: + _LOGGER.error('Cannot find or access %s at %s', + self.component_name, self.path) + hass.data[DATA_PANELS].pop(self.frontend_url_path) + + self.webcomponent_url = \ + URL_PANEL_COMPONENT_FP.format(self.component_name, self.md5) + + if self.component_name not in self.REGISTERED_COMPONENTS: + hass.http.register_static_path(self.webcomponent_url, self.path) + self.REGISTERED_COMPONENTS.add(self.component_name) + + @bind_hass -def register_built_in_panel(hass, component_name, sidebar_title=None, - sidebar_icon=None, url_path=None, config=None): +@asyncio.coroutine +def async_register_built_in_panel(hass, component_name, sidebar_title=None, + sidebar_icon=None, frontend_url_path=None, + config=None): """Register a built-in panel.""" - nondev_path = 'panels/ha-panel-{}.html'.format(component_name) - - if hass.http.development: - url = ('/static/home-assistant-polymer/panels/' - '{0}/ha-panel-{0}.html'.format(component_name)) - path = os.path.join( - STATIC_PATH, 'home-assistant-polymer/panels/', - '{0}/ha-panel-{0}.html'.format(component_name)) - else: - url = None # use default url generate mechanism - path = os.path.join(STATIC_PATH, nondev_path) - - # Fingerprint doesn't exist when adding new built-in panel - register_panel(hass, component_name, path, - FINGERPRINTS.get(nondev_path, 'dev'), sidebar_title, - sidebar_icon, url_path, url, config) + panel = BuiltInPanel(component_name, sidebar_title, sidebar_icon, + frontend_url_path, config) + yield from panel.async_register(hass) @bind_hass -def register_panel(hass, component_name, path, md5=None, sidebar_title=None, - sidebar_icon=None, url_path=None, url=None, config=None): +@asyncio.coroutine +def async_register_panel(hass, component_name, path, md5=None, + sidebar_title=None, sidebar_icon=None, + frontend_url_path=None, config=None): """Register a panel for the frontend. component_name: name of the web component path: path to the HTML of the web component (required unless url is provided) - md5: the md5 hash of the web component (for versioning, optional) + md5: the md5 hash of the web component (for versioning in url, optional) sidebar_title: title to show in the sidebar (optional) sidebar_icon: icon to show next to title in sidebar (optional) url_path: name to use in the url (defaults to component_name) - url: for the web component (optional) config: config to be passed into the web component """ - panels = hass.data.get(DATA_PANELS) - if panels is None: - panels = hass.data[DATA_PANELS] = {} - - if url_path is None: - url_path = component_name - - if url_path in panels: - _LOGGER.warning("Overwriting component %s", url_path) - - if url is None: - if not os.path.isfile(path): - _LOGGER.error( - "Panel %s component does not exist: %s", component_name, path) - return - - if md5 is None: - with open(path) as fil: - md5 = hashlib.md5(fil.read().encode('utf-8')).hexdigest() - - data = { - 'url_path': url_path, - 'component_name': component_name, - } - - if sidebar_title: - data['title'] = sidebar_title - if sidebar_icon: - data['icon'] = sidebar_icon - if config is not None: - data['config'] = config - - if url is not None: - data['url'] = url - else: - url = URL_PANEL_COMPONENT.format(component_name) - - if url not in _REGISTERED_COMPONENTS: - hass.http.register_static_path(url, path) - _REGISTERED_COMPONENTS.add(url) - - fprinted_url = URL_PANEL_COMPONENT_FP.format(component_name, md5) - data['url'] = fprinted_url - - panels[url_path] = data - - # Register index view for this route if IndexView already loaded - # Otherwise it will be done during setup. - index_view = hass.data.get(DATA_INDEX_VIEW) - - if index_view: - hass.http.app.router.add_route( - 'get', '/{}'.format(url_path), index_view.get) - hass.http.app.router.add_route( - 'get', '/{}/{{extra:.+}}'.format(url_path), index_view.get) + panel = ExternalPanel(component_name, path, md5, sidebar_title, + sidebar_icon, frontend_url_path, config) + yield from panel.async_register(hass) @bind_hass +@callback def add_extra_html_url(hass, url): """Register extra html url to load.""" url_set = hass.data.get(DATA_EXTRA_HTML_URL) @@ -188,57 +261,72 @@ def add_manifest_json_key(key, val): MANIFEST_JSON[key] = val -def setup(hass, config): +@asyncio.coroutine +def async_setup(hass, config): """Set up the serving of the frontend.""" - hass.http.register_view(BootstrapView) + import hass_frontend + hass.http.register_view(ManifestJSONView) - if hass.http.development: - sw_path = "home-assistant-polymer/build/service_worker.js" + conf = config.get(DOMAIN, {}) + + frontend_path = hass_frontend.where() + repo_path = conf.get(CONF_FRONTEND_REPO) + is_dev = repo_path is not None + + if is_dev: + hass.http.register_static_path("/home-assistant-polymer", repo_path) + sw_path = os.path.join(repo_path, "build/service_worker.js") + static_path = os.path.join(repo_path, 'hass_frontend') + else: - sw_path = "service_worker.js" + sw_path = os.path.join(frontend_path, "service_worker.js") + static_path = frontend_path - hass.http.register_static_path("/service_worker.js", - os.path.join(STATIC_PATH, sw_path), False) + hass.http.register_static_path("/service_worker.js", sw_path, False) hass.http.register_static_path("/robots.txt", - os.path.join(STATIC_PATH, "robots.txt")) - hass.http.register_static_path("/static", STATIC_PATH) + os.path.join(frontend_path, "robots.txt")) + hass.http.register_static_path("/static", static_path) local = hass.config.path('www') if os.path.isdir(local): hass.http.register_static_path("/local", local) - index_view = hass.data[DATA_INDEX_VIEW] = IndexView() + index_view = IndexView(is_dev) hass.http.register_view(index_view) - # Components have registered panels before frontend got setup. - # Now register their urls. - if DATA_PANELS in hass.data: - for url_path in hass.data[DATA_PANELS]: - hass.http.app.router.add_route( - 'get', '/{}'.format(url_path), index_view.get) - hass.http.app.router.add_route( - 'get', '/{}/{{extra:.+}}'.format(url_path), index_view.get) - else: - hass.data[DATA_PANELS] = {} + @asyncio.coroutine + def finalize_panel(panel): + """Finalize setup of a panel.""" + yield from panel.async_finalize(hass, repo_path) + panel.async_register_index_routes(hass.http.app.router, index_view) - if DATA_EXTRA_HTML_URL not in hass.data: - hass.data[DATA_EXTRA_HTML_URL] = set() + yield from asyncio.wait([ + async_register_built_in_panel(hass, panel) + for panel in ('dev-event', 'dev-info', 'dev-service', 'dev-state', + 'dev-template', 'dev-mqtt', 'kiosk')], loop=hass.loop) - for panel in ('dev-event', 'dev-info', 'dev-service', 'dev-state', - 'dev-template', 'dev-mqtt', 'kiosk'): - register_built_in_panel(hass, panel) + hass.data[DATA_FINALIZE_PANEL] = finalize_panel - themes = config.get(DOMAIN, {}).get(ATTR_THEMES) - setup_themes(hass, themes) + # Finalize registration of panels that registered before frontend was setup + # This includes the built-in panels from line above. + yield from asyncio.wait( + [finalize_panel(panel) for panel in hass.data[DATA_PANELS].values()], + loop=hass.loop) - for url in config.get(DOMAIN, {}).get(ATTR_EXTRA_HTML_URL, []): + if DATA_EXTRA_HTML_URL not in hass.data: + hass.data[DATA_EXTRA_HTML_URL] = set() + + for url in conf.get(CONF_EXTRA_HTML_URL, []): add_extra_html_url(hass, url) + yield from async_setup_themes(hass, conf.get(CONF_THEMES)) + return True -def setup_themes(hass, themes): +@asyncio.coroutine +def async_setup_themes(hass, themes): """Set up themes data and services.""" hass.http.register_view(ThemesView) hass.data[DATA_DEFAULT_THEME] = DEFAULT_THEME @@ -278,40 +366,22 @@ def set_theme(call): def reload_themes(_): """Reload themes.""" path = find_config_file(hass.config.config_dir) - new_themes = load_yaml_config_file(path)[DOMAIN].get(ATTR_THEMES, {}) + new_themes = load_yaml_config_file(path)[DOMAIN].get(CONF_THEMES, {}) hass.data[DATA_THEMES] = new_themes if hass.data[DATA_DEFAULT_THEME] not in new_themes: hass.data[DATA_DEFAULT_THEME] = DEFAULT_THEME update_theme_and_fire_event() - descriptions = load_yaml_config_file( + descriptions = yield from hass.async_add_job( + load_yaml_config_file, os.path.join(os.path.dirname(__file__), 'services.yaml')) - hass.services.register(DOMAIN, SERVICE_SET_THEME, - set_theme, - descriptions[SERVICE_SET_THEME], - SERVICE_SET_THEME_SCHEMA) - hass.services.register(DOMAIN, SERVICE_RELOAD_THEMES, reload_themes, - descriptions[SERVICE_RELOAD_THEMES]) - -class BootstrapView(HomeAssistantView): - """View to bootstrap frontend with all needed data.""" - - url = '/api/bootstrap' - name = 'api:bootstrap' - - @callback - def get(self, request): - """Return all data needed to bootstrap Home Assistant.""" - hass = request.app['hass'] - - return self.json({ - 'config': hass.config.as_dict(), - 'states': hass.states.async_all(), - 'events': api.async_events_json(hass), - 'services': api.async_services_json(hass), - 'panels': hass.data[DATA_PANELS], - }) + hass.services.async_register(DOMAIN, SERVICE_SET_THEME, + set_theme, + descriptions[SERVICE_SET_THEME], + SERVICE_SET_THEME_SCHEMA) + hass.services.async_register(DOMAIN, SERVICE_RELOAD_THEMES, reload_themes, + descriptions[SERVICE_RELOAD_THEMES]) class IndexView(HomeAssistantView): @@ -322,10 +392,11 @@ class IndexView(HomeAssistantView): requires_auth = False extra_urls = ['/states', '/states/{extra}'] - def __init__(self): + def __init__(self, use_repo): """Initialize the frontend view.""" from jinja2 import FileSystemLoader, Environment + self.use_repo = use_repo self.templates = Environment( autoescape=True, loader=FileSystemLoader( @@ -336,20 +407,22 @@ def __init__(self): @asyncio.coroutine def get(self, request, extra=None): """Serve the index view.""" + import hass_frontend + hass = request.app['hass'] - if request.app[KEY_DEVELOPMENT]: - core_url = '/static/home-assistant-polymer/build/core.js' + if self.use_repo: + core_url = '/home-assistant-polymer/build/core.js' compatibility_url = \ - '/static/home-assistant-polymer/build/compatibility.js' - ui_url = '/static/home-assistant-polymer/src/home-assistant.html' + '/home-assistant-polymer/build/compatibility.js' + ui_url = '/home-assistant-polymer/src/home-assistant.html' else: core_url = '/static/core-{}.js'.format( - FINGERPRINTS['core.js']) + hass_frontend.FINGERPRINTS['core.js']) compatibility_url = '/static/compatibility-{}.js'.format( - FINGERPRINTS['compatibility.js']) + hass_frontend.FINGERPRINTS['compatibility.js']) ui_url = '/static/frontend-{}.html'.format( - FINGERPRINTS['frontend.html']) + hass_frontend.FINGERPRINTS['frontend.html']) if request.path == '/': panel = 'states' @@ -359,17 +432,15 @@ def get(self, request, extra=None): if panel == 'states': panel_url = '' else: - panel_url = hass.data[DATA_PANELS][panel]['url'] + panel_url = hass.data[DATA_PANELS][panel].webcomponent_url no_auth = 'true' - if hass.config.api.api_password: - # require password if set + if hass.config.api.api_password and not is_trusted_ip(request): + # do not try to auto connect on load no_auth = 'false' - if is_trusted_ip(request): - # bypass for trusted networks - no_auth = 'true' - icons_url = '/static/mdi-{}.html'.format(FINGERPRINTS['mdi.html']) + icons_fp = hass_frontend.FINGERPRINTS['mdi.html'] + icons_url = '/static/mdi-{}.html'.format(icons_fp) template = yield from hass.async_add_job( self.templates.get_template, 'index.html') @@ -379,9 +450,9 @@ def get(self, request, extra=None): resp = template.render( core_url=core_url, ui_url=ui_url, compatibility_url=compatibility_url, no_auth=no_auth, - icons_url=icons_url, icons=FINGERPRINTS['mdi.html'], + icons_url=icons_url, icons=icons_fp, panel_url=panel_url, panels=hass.data[DATA_PANELS], - dev_mode=request.app[KEY_DEVELOPMENT], + dev_mode=self.use_repo, theme_color=MANIFEST_JSON['theme_color'], extra_urls=hass.data[DATA_EXTRA_HTML_URL]) @@ -418,3 +489,9 @@ def get(self, request): 'themes': hass.data[DATA_THEMES], 'default_theme': hass.data[DATA_DEFAULT_THEME], }) + + +def _fingerprint(path): + """Fingerprint a file.""" + with open(path) as fil: + return hashlib.md5(fil.read().encode('utf-8')).hexdigest() diff --git a/homeassistant/components/frontend/templates/index.html b/homeassistant/components/frontend/templates/index.html index 70e7e777510a7b..9a1c4e54e9c492 100644 --- a/homeassistant/components/frontend/templates/index.html +++ b/homeassistant/components/frontend/templates/index.html @@ -10,9 +10,11 @@ href='/static/icons/favicon-apple-180x180.png'> - {% for panel in panels.values() -%} - - {% endfor -%} + {% if not dev_mode %} + {% for panel in panels.values() -%} + + {% endfor -%} + {% endif %} diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py deleted file mode 100644 index 052bd7e86feeb3..00000000000000 --- a/homeassistant/components/frontend/version.py +++ /dev/null @@ -1,24 +0,0 @@ -"""DO NOT MODIFY. Auto-generated by script/fingerprint_frontend.""" - -FINGERPRINTS = { - "compatibility.js": "1686167ff210e001f063f5c606b2e74b", - "core.js": "2a7d01e45187c7d4635da05065b5e54e", - "frontend.html": "2de1bde3b4a6c6c47dd95504fc098906", - "mdi.html": "2e848b4da029bf73d426d5ba058a088d", - "micromarkdown-js.html": "93b5ec4016f0bba585521cf4d18dec1a", - "panels/ha-panel-config.html": "52e2e1d477bfd6dc3708d65b8337f0af", - "panels/ha-panel-dev-event.html": "d409e7ab537d9fe629126d122345279c", - "panels/ha-panel-dev-info.html": "b0e55eb657fd75f21aba2426ac0cedc0", - "panels/ha-panel-dev-mqtt.html": "94b222b013a98583842de3e72d5888c6", - "panels/ha-panel-dev-service.html": "422b2c181ee0713fa31d45a64e605baf", - "panels/ha-panel-dev-state.html": "7948d3dba058f31517d880df8ed0e857", - "panels/ha-panel-dev-template.html": "928e7b81b9c113b70edc9f4a1d051827", - "panels/ha-panel-hassio.html": "b46e7619f3c355f872d5370741d89f6a", - "panels/ha-panel-history.html": "fe2daac10a14f51fa3eb7d23978df1f7", - "panels/ha-panel-iframe.html": "56930204d6e067a3d600cf030f4b34c8", - "panels/ha-panel-kiosk.html": "b40aa5cb52dd7675bea744afcf9eebf8", - "panels/ha-panel-logbook.html": "771afdcf48dc7e308b0282417d2e02d8", - "panels/ha-panel-mailbox.html": "a8cca44ca36553e91565e3c894ea6323", - "panels/ha-panel-map.html": "565db019147162080c21af962afc097f", - "panels/ha-panel-shopping-list.html": "d8cfd0ecdb3aa6214c0f6908c34c7141" -} diff --git a/homeassistant/components/frontend/www_static/compatibility.js b/homeassistant/components/frontend/www_static/compatibility.js deleted file mode 100644 index 566f3310d9ae76..00000000000000 --- a/homeassistant/components/frontend/www_static/compatibility.js +++ /dev/null @@ -1 +0,0 @@ -!function(){"use strict";function e(e,t){if(void 0===e||null===e)throw new TypeError("Cannot convert first argument to object");for(var r=Object(e),n=1;n{'use strict';if(!window.customElements)return;const a=window.HTMLElement,b=window.customElements.define,c=window.customElements.get,d=new Map,e=new Map;let f=!1,g=!1;window.HTMLElement=function(){if(!f){const a=d.get(this.constructor),b=c.call(window.customElements,a);g=!0;const e=new b;return e}f=!1;},window.HTMLElement.prototype=a.prototype;Object.defineProperty(window,'customElements',{value:window.customElements,configurable:!0,writable:!0}),Object.defineProperty(window.customElements,'define',{value:(c,h)=>{const i=h.prototype,j=class extends a{constructor(){super(),Object.setPrototypeOf(this,i),g||(f=!0,h.call(this)),g=!1;}},k=j.prototype;j.observedAttributes=h.observedAttributes,k.connectedCallback=i.connectedCallback,k.disconnectedCallback=i.disconnectedCallback,k.attributeChangedCallback=i.attributeChangedCallback,k.adoptedCallback=i.adoptedCallback,d.set(h,c),e.set(c,h),b.call(window.customElements,c,j);},configurable:!0,writable:!0}),Object.defineProperty(window.customElements,'get',{value:(a)=>e.get(a),configurable:!0,writable:!0});})(); - -/** -@license -Copyright (c) 2017 The Polymer Project Authors. All rights reserved. -This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt -The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt -The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt -Code distributed by Google as part of the polymer project is also -subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt -*/ - -}()); diff --git a/homeassistant/components/frontend/www_static/custom-elements-es5-adapter.js.gz b/homeassistant/components/frontend/www_static/custom-elements-es5-adapter.js.gz deleted file mode 100644 index 42759b325adb4b..00000000000000 Binary files a/homeassistant/components/frontend/www_static/custom-elements-es5-adapter.js.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/COPYRIGHT.txt b/homeassistant/components/frontend/www_static/fonts/roboto/COPYRIGHT.txt deleted file mode 100644 index a7ef69930cbf04..00000000000000 --- a/homeassistant/components/frontend/www_static/fonts/roboto/COPYRIGHT.txt +++ /dev/null @@ -1 +0,0 @@ -Copyright 2011 Google Inc. All Rights Reserved. \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/DESCRIPTION.en_us.html b/homeassistant/components/frontend/www_static/fonts/roboto/DESCRIPTION.en_us.html deleted file mode 100644 index 3a6834fd4c468c..00000000000000 --- a/homeassistant/components/frontend/www_static/fonts/roboto/DESCRIPTION.en_us.html +++ /dev/null @@ -1,17 +0,0 @@ -

Roboto has a dual nature. It has a mechanical skeleton and the forms are -largely geometric. At the same time, the font features friendly and open -curves. While some grotesks distort their letterforms to force a rigid rhythm, -Roboto doesn’t compromise, allowing letters to be settled into their natural -width. This makes for a more natural reading rhythm more commonly found in -humanist and serif types.

- -

This is the normal family, which can be used alongside the -Roboto Condensed family and the -Roboto Slab family.

- -

-Updated January 14 2015: -Christian Robertson and the Material Design team unveiled the latest version of Roboto at Google I/O last year, and it is now available from Google Fonts. -Existing websites using Roboto via Google Fonts will start using the latest version automatically. -If you have installed the fonts on your computer, please download them again and re-install. -

\ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/LICENSE.txt b/homeassistant/components/frontend/www_static/fonts/roboto/LICENSE.txt deleted file mode 100644 index d645695673349e..00000000000000 --- a/homeassistant/components/frontend/www_static/fonts/roboto/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/METADATA.json b/homeassistant/components/frontend/www_static/fonts/roboto/METADATA.json deleted file mode 100644 index 061bc67688beaa..00000000000000 --- a/homeassistant/components/frontend/www_static/fonts/roboto/METADATA.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "name": "Roboto", - "designer": "Christian Robertson", - "license": "Apache2", - "visibility": "External", - "category": "Sans Serif", - "size": 86523, - "fonts": [ - { - "name": "Roboto", - "style": "normal", - "weight": 100, - "filename": "Roboto-Thin.ttf", - "postScriptName": "Roboto-Thin", - "fullName": "Roboto Thin", - "copyright": "Copyright 2011 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto", - "style": "italic", - "weight": 100, - "filename": "Roboto-ThinItalic.ttf", - "postScriptName": "Roboto-ThinItalic", - "fullName": "Roboto Thin Italic", - "copyright": "Copyright 2011 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto", - "style": "normal", - "weight": 300, - "filename": "Roboto-Light.ttf", - "postScriptName": "Roboto-Light", - "fullName": "Roboto Light", - "copyright": "Copyright 2011 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto", - "style": "italic", - "weight": 300, - "filename": "Roboto-LightItalic.ttf", - "postScriptName": "Roboto-LightItalic", - "fullName": "Roboto Light Italic", - "copyright": "Copyright 2011 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto", - "style": "normal", - "weight": 400, - "filename": "Roboto-Regular.ttf", - "postScriptName": "Roboto-Regular", - "fullName": "Roboto", - "copyright": "Copyright 2011 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto", - "style": "italic", - "weight": 400, - "filename": "Roboto-Italic.ttf", - "postScriptName": "Roboto-Italic", - "fullName": "Roboto Italic", - "copyright": "Copyright 2011 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto", - "style": "normal", - "weight": 500, - "filename": "Roboto-Medium.ttf", - "postScriptName": "Roboto-Medium", - "fullName": "Roboto Medium", - "copyright": "Copyright 2011 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto", - "style": "italic", - "weight": 500, - "filename": "Roboto-MediumItalic.ttf", - "postScriptName": "Roboto-MediumItalic", - "fullName": "Roboto Medium Italic", - "copyright": "Copyright 2011 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto", - "style": "normal", - "weight": 700, - "filename": "Roboto-Bold.ttf", - "postScriptName": "Roboto-Bold", - "fullName": "Roboto Bold", - "copyright": "Copyright 2011 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto", - "style": "italic", - "weight": 700, - "filename": "Roboto-BoldItalic.ttf", - "postScriptName": "Roboto-BoldItalic", - "fullName": "Roboto Bold Italic", - "copyright": "Copyright 2011 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto", - "style": "normal", - "weight": 900, - "filename": "Roboto-Black.ttf", - "postScriptName": "Roboto-Black", - "fullName": "Roboto Black", - "copyright": "Copyright 2011 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto", - "style": "italic", - "weight": 900, - "filename": "Roboto-BlackItalic.ttf", - "postScriptName": "Roboto-BlackItalic", - "fullName": "Roboto Black Italic", - "copyright": "Copyright 2011 Google Inc. All Rights Reserved." - } - ], - "subsets": [ - "cyrillic", - "cyrillic-ext", - "greek", - "greek-ext", - "latin", - "latin-ext", - "menu", - "vietnamese" - ], - "dateAdded": "2013-01-09" -} diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Black.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Black.ttf deleted file mode 100644 index fbde625d403cc1..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Black.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Black.ttf.gz b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Black.ttf.gz deleted file mode 100644 index ffbf4a965e32c0..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Black.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BlackItalic.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BlackItalic.ttf deleted file mode 100644 index 60f7782a2e4aba..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BlackItalic.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BlackItalic.ttf.gz b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BlackItalic.ttf.gz deleted file mode 100644 index 38c32845ad9a45..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BlackItalic.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Bold.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Bold.ttf deleted file mode 100644 index a355c27cde02b1..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Bold.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Bold.ttf.gz b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Bold.ttf.gz deleted file mode 100644 index 9d9d303b98d0eb..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Bold.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BoldItalic.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BoldItalic.ttf deleted file mode 100644 index 3c9a7a37361b6a..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BoldItalic.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BoldItalic.ttf.gz b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BoldItalic.ttf.gz deleted file mode 100644 index 681577fb32b406..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-BoldItalic.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Italic.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Italic.ttf deleted file mode 100644 index ff6046d5bfa7cd..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Italic.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Italic.ttf.gz b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Italic.ttf.gz deleted file mode 100644 index 5b29473a7d2c33..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Italic.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Light.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Light.ttf deleted file mode 100644 index 94c6bcc67e0960..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Light.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Light.ttf.gz b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Light.ttf.gz deleted file mode 100644 index 22d96d0f3f55de..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Light.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-LightItalic.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-LightItalic.ttf deleted file mode 100644 index 04cc002302024c..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-LightItalic.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-LightItalic.ttf.gz b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-LightItalic.ttf.gz deleted file mode 100644 index 03952b1992329d..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-LightItalic.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Medium.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Medium.ttf deleted file mode 100644 index 39c63d74617960..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Medium.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Medium.ttf.gz b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Medium.ttf.gz deleted file mode 100644 index 2c62e686f6ac07..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Medium.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-MediumItalic.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-MediumItalic.ttf deleted file mode 100644 index dc743f0a66cf37..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-MediumItalic.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-MediumItalic.ttf.gz b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-MediumItalic.ttf.gz deleted file mode 100644 index 0d0131bf8acd3b..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-MediumItalic.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Regular.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Regular.ttf deleted file mode 100644 index 8c082c8de09086..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Regular.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Regular.ttf.gz b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Regular.ttf.gz deleted file mode 100644 index ff39470ca87293..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Regular.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Thin.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Thin.ttf deleted file mode 100644 index d69555029c3e18..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Thin.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Thin.ttf.gz b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Thin.ttf.gz deleted file mode 100644 index 80cca9828edca3..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-Thin.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-ThinItalic.ttf b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-ThinItalic.ttf deleted file mode 100644 index 07172ff666ad2d..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-ThinItalic.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-ThinItalic.ttf.gz b/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-ThinItalic.ttf.gz deleted file mode 100644 index 3935ec50be8110..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/roboto/Roboto-ThinItalic.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/DESCRIPTION.en_us.html b/homeassistant/components/frontend/www_static/fonts/robotomono/DESCRIPTION.en_us.html deleted file mode 100644 index eb6ba3a2e3cca8..00000000000000 --- a/homeassistant/components/frontend/www_static/fonts/robotomono/DESCRIPTION.en_us.html +++ /dev/null @@ -1,17 +0,0 @@ -

-Roboto Mono is a monospaced addition to the Roboto type family. -Like the other members of the Roboto family, the fonts are optimized for readability on screens across a wide variety of devices and reading environments. -While the monospaced version is related to its variable width cousin, it doesn’t hesitate to change forms to better fit the constraints of a monospaced environment. -For example, narrow glyphs like ‘I’, ‘l’ and ‘i’ have added serifs for more even texture while wider glyphs are adjusted for weight. -Curved caps like ‘C’ and ‘O’ take on the straighter sides from Roboto Condensed. -

- -

-Special consideration is given to glyphs important for reading and writing software source code. -Letters with similar shapes are easy to tell apart. -Digit ‘1’, lowercase ‘l’ and capital ‘I’ are easily differentiated as are zero and the letter ‘O’. -Punctuation important for code has also been considered. -For example, the curly braces ‘{ }’ have exaggerated points to clearly differentiate them from parenthesis ‘( )’ and braces ‘[ ]’. -Periods and commas are also exaggerated to identify them more quickly. -The scale and weight of symbols commonly used as operators have also been optimized. -

diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/LICENSE.txt b/homeassistant/components/frontend/www_static/fonts/robotomono/LICENSE.txt deleted file mode 100644 index d645695673349e..00000000000000 --- a/homeassistant/components/frontend/www_static/fonts/robotomono/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/METADATA.json b/homeassistant/components/frontend/www_static/fonts/robotomono/METADATA.json deleted file mode 100644 index a2a212bfa8f06a..00000000000000 --- a/homeassistant/components/frontend/www_static/fonts/robotomono/METADATA.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "name": "Roboto Mono", - "designer": "Christian Robertson", - "license": "Apache2", - "visibility": "External", - "category": "Monospace", - "size": 51290, - "fonts": [ - { - "name": "Roboto Mono", - "postScriptName": "RobotoMono-Thin", - "fullName": "Roboto Mono Thin", - "style": "normal", - "weight": 100, - "filename": "RobotoMono-Thin.ttf", - "copyright": "Copyright 2015 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto Mono", - "postScriptName": "RobotoMono-ThinItalic", - "fullName": "Roboto Mono Thin Italic", - "style": "italic", - "weight": 100, - "filename": "RobotoMono-ThinItalic.ttf", - "copyright": "Copyright 2015 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto Mono", - "postScriptName": "RobotoMono-Light", - "fullName": "Roboto Mono Light", - "style": "normal", - "weight": 300, - "filename": "RobotoMono-Light.ttf", - "copyright": "Copyright 2015 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto Mono", - "postScriptName": "RobotoMono-LightItalic", - "fullName": "Roboto Mono Light Italic", - "style": "italic", - "weight": 300, - "filename": "RobotoMono-LightItalic.ttf", - "copyright": "Copyright 2015 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto Mono", - "postScriptName": "RobotoMono-Regular", - "fullName": "Roboto Mono", - "style": "normal", - "weight": 400, - "filename": "RobotoMono-Regular.ttf", - "copyright": "Copyright 2015 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto Mono", - "postScriptName": "RobotoMono-Italic", - "fullName": "Roboto Mono Italic", - "style": "italic", - "weight": 400, - "filename": "RobotoMono-Italic.ttf", - "copyright": "Copyright 2015 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto Mono", - "postScriptName": "RobotoMono-Medium", - "fullName": "Roboto Mono Medium", - "style": "normal", - "weight": 500, - "filename": "RobotoMono-Medium.ttf", - "copyright": "Copyright 2015 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto Mono", - "postScriptName": "RobotoMono-MediumItalic", - "fullName": "Roboto Mono Medium Italic", - "style": "italic", - "weight": 500, - "filename": "RobotoMono-MediumItalic.ttf", - "copyright": "Copyright 2015 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto Mono", - "postScriptName": "RobotoMono-Bold", - "fullName": "Roboto Mono Bold", - "style": "normal", - "weight": 700, - "filename": "RobotoMono-Bold.ttf", - "copyright": "Copyright 2015 Google Inc. All Rights Reserved." - }, - { - "name": "Roboto Mono", - "postScriptName": "RobotoMono-BoldItalic", - "fullName": "Roboto Mono Bold Italic", - "style": "italic", - "weight": 700, - "filename": "RobotoMono-BoldItalic.ttf", - "copyright": "Copyright 2015 Google Inc. All Rights Reserved." - } - ], - "subsets": [ - "cyrillic", - "cyrillic-ext", - "greek", - "greek-ext", - "latin", - "latin-ext", - "menu", - "vietnamese" - ], - "dateAdded": "2015-05-13" -} diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Bold.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Bold.ttf deleted file mode 100644 index c6a81a570c208e..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Bold.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Bold.ttf.gz b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Bold.ttf.gz deleted file mode 100644 index 11e5df422841d3..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Bold.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-BoldItalic.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-BoldItalic.ttf deleted file mode 100644 index b2261d6649a285..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-BoldItalic.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-BoldItalic.ttf.gz b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-BoldItalic.ttf.gz deleted file mode 100644 index 7ce6b8d8f5f48f..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-BoldItalic.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Italic.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Italic.ttf deleted file mode 100644 index 6e4001e1967817..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Italic.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Italic.ttf.gz b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Italic.ttf.gz deleted file mode 100644 index 42e30d27831db9..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Italic.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Light.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Light.ttf deleted file mode 100644 index 5ca4889ebac196..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Light.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Light.ttf.gz b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Light.ttf.gz deleted file mode 100644 index dd6ed496c7d3e5..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Light.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-LightItalic.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-LightItalic.ttf deleted file mode 100644 index db7c368471cf94..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-LightItalic.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-LightItalic.ttf.gz b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-LightItalic.ttf.gz deleted file mode 100644 index 452274f2a8915a..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-LightItalic.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Medium.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Medium.ttf deleted file mode 100644 index 0bcdc740c66c52..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Medium.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Medium.ttf.gz b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Medium.ttf.gz deleted file mode 100644 index d7cccfe5dda86f..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Medium.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-MediumItalic.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-MediumItalic.ttf deleted file mode 100644 index b4f5e20e3d9551..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-MediumItalic.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-MediumItalic.ttf.gz b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-MediumItalic.ttf.gz deleted file mode 100644 index 934c7252d33d62..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-MediumItalic.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Regular.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Regular.ttf deleted file mode 100644 index 495a82ce92ede8..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Regular.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Regular.ttf.gz b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Regular.ttf.gz deleted file mode 100644 index cb043e8fef6599..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Regular.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Thin.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Thin.ttf deleted file mode 100644 index 1b5085eed8cc32..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Thin.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Thin.ttf.gz b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Thin.ttf.gz deleted file mode 100644 index 398aac158378c3..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-Thin.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-ThinItalic.ttf b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-ThinItalic.ttf deleted file mode 100644 index dfa1d139ba8448..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-ThinItalic.ttf and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-ThinItalic.ttf.gz b/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-ThinItalic.ttf.gz deleted file mode 100644 index 1b60ee9dcbb641..00000000000000 Binary files a/homeassistant/components/frontend/www_static/fonts/robotomono/RobotoMono-ThinItalic.ttf.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/frontend.html b/homeassistant/components/frontend/www_static/frontend.html deleted file mode 100644 index c873d66777e4e4..00000000000000 --- a/homeassistant/components/frontend/www_static/frontend.html +++ /dev/null @@ -1,168 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/frontend.html.gz b/homeassistant/components/frontend/www_static/frontend.html.gz deleted file mode 100644 index 6da11b7083da26..00000000000000 Binary files a/homeassistant/components/frontend/www_static/frontend.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/home-assistant-polymer b/homeassistant/components/frontend/www_static/home-assistant-polymer deleted file mode 160000 index b0791abb9a6121..00000000000000 --- a/homeassistant/components/frontend/www_static/home-assistant-polymer +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b0791abb9a61216476cb3a637c410cdddef7e91c diff --git a/homeassistant/components/frontend/www_static/icons/favicon-1024x1024.png b/homeassistant/components/frontend/www_static/icons/favicon-1024x1024.png deleted file mode 100644 index 4bcc7924726b10..00000000000000 Binary files a/homeassistant/components/frontend/www_static/icons/favicon-1024x1024.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/icons/favicon-192x192.png b/homeassistant/components/frontend/www_static/icons/favicon-192x192.png deleted file mode 100644 index 2959efdf89d84a..00000000000000 Binary files a/homeassistant/components/frontend/www_static/icons/favicon-192x192.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/icons/favicon-384x384.png b/homeassistant/components/frontend/www_static/icons/favicon-384x384.png deleted file mode 100644 index 51f67770790077..00000000000000 Binary files a/homeassistant/components/frontend/www_static/icons/favicon-384x384.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/icons/favicon-512x512.png b/homeassistant/components/frontend/www_static/icons/favicon-512x512.png deleted file mode 100644 index 28239a05ad57cd..00000000000000 Binary files a/homeassistant/components/frontend/www_static/icons/favicon-512x512.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/icons/favicon-apple-180x180.png b/homeassistant/components/frontend/www_static/icons/favicon-apple-180x180.png deleted file mode 100644 index 20117d00f22756..00000000000000 Binary files a/homeassistant/components/frontend/www_static/icons/favicon-apple-180x180.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/icons/favicon.ico b/homeassistant/components/frontend/www_static/icons/favicon.ico deleted file mode 100644 index 6d12158c18b174..00000000000000 Binary files a/homeassistant/components/frontend/www_static/icons/favicon.ico and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/icons/home-assistant-icon.svg b/homeassistant/components/frontend/www_static/icons/home-assistant-icon.svg deleted file mode 100644 index 1ff4c190f593be..00000000000000 --- a/homeassistant/components/frontend/www_static/icons/home-assistant-icon.svg +++ /dev/null @@ -1,2814 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/homeassistant/components/frontend/www_static/icons/tile-win-150x150.png b/homeassistant/components/frontend/www_static/icons/tile-win-150x150.png deleted file mode 100644 index 20039166df63bd..00000000000000 Binary files a/homeassistant/components/frontend/www_static/icons/tile-win-150x150.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/icons/tile-win-310x150.png b/homeassistant/components/frontend/www_static/icons/tile-win-310x150.png deleted file mode 100644 index 6320cb6b210527..00000000000000 Binary files a/homeassistant/components/frontend/www_static/icons/tile-win-310x150.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/icons/tile-win-310x310.png b/homeassistant/components/frontend/www_static/icons/tile-win-310x310.png deleted file mode 100644 index 33bb1223c75707..00000000000000 Binary files a/homeassistant/components/frontend/www_static/icons/tile-win-310x310.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/icons/tile-win-70x70.png b/homeassistant/components/frontend/www_static/icons/tile-win-70x70.png deleted file mode 100644 index 9adf95d56d5922..00000000000000 Binary files a/homeassistant/components/frontend/www_static/icons/tile-win-70x70.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/card_media_player_bg.png b/homeassistant/components/frontend/www_static/images/card_media_player_bg.png deleted file mode 100644 index 6c97dd2f511e45..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/card_media_player_bg.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/config_ecobee_thermostat.png b/homeassistant/components/frontend/www_static/images/config_ecobee_thermostat.png deleted file mode 100644 index e62a4165c9becb..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/config_ecobee_thermostat.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/config_fitbit_app.png b/homeassistant/components/frontend/www_static/images/config_fitbit_app.png deleted file mode 100644 index 271a0c6dd47984..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/config_fitbit_app.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/config_icloud.png b/homeassistant/components/frontend/www_static/images/config_icloud.png deleted file mode 100644 index 2058986018b9f4..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/config_icloud.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/config_insteon.png b/homeassistant/components/frontend/www_static/images/config_insteon.png deleted file mode 100644 index 0039cf3d160f84..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/config_insteon.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/config_philips_hue.jpg b/homeassistant/components/frontend/www_static/images/config_philips_hue.jpg deleted file mode 100644 index f10d258bf34f8e..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/config_philips_hue.jpg and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/config_webos.png b/homeassistant/components/frontend/www_static/images/config_webos.png deleted file mode 100644 index 757aec76270b50..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/config_webos.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/config_wink.png b/homeassistant/components/frontend/www_static/images/config_wink.png deleted file mode 100644 index 6b91f8cb58ee80..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/config_wink.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/darksky/weather-cloudy.svg b/homeassistant/components/frontend/www_static/images/darksky/weather-cloudy.svg deleted file mode 100644 index a0c80c53611abc..00000000000000 --- a/homeassistant/components/frontend/www_static/images/darksky/weather-cloudy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/images/darksky/weather-fog.svg b/homeassistant/components/frontend/www_static/images/darksky/weather-fog.svg deleted file mode 100644 index 42571dfb738556..00000000000000 --- a/homeassistant/components/frontend/www_static/images/darksky/weather-fog.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/images/darksky/weather-hail.svg b/homeassistant/components/frontend/www_static/images/darksky/weather-hail.svg deleted file mode 100644 index 7934e54f7ae0e7..00000000000000 --- a/homeassistant/components/frontend/www_static/images/darksky/weather-hail.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/images/darksky/weather-night.svg b/homeassistant/components/frontend/www_static/images/darksky/weather-night.svg deleted file mode 100644 index d880912be93b1a..00000000000000 --- a/homeassistant/components/frontend/www_static/images/darksky/weather-night.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/images/darksky/weather-partlycloudy.svg b/homeassistant/components/frontend/www_static/images/darksky/weather-partlycloudy.svg deleted file mode 100644 index af93dfa0b2a0bd..00000000000000 --- a/homeassistant/components/frontend/www_static/images/darksky/weather-partlycloudy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/images/darksky/weather-pouring.svg b/homeassistant/components/frontend/www_static/images/darksky/weather-pouring.svg deleted file mode 100644 index bf20e9bc0c9524..00000000000000 --- a/homeassistant/components/frontend/www_static/images/darksky/weather-pouring.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/images/darksky/weather-rainy.svg b/homeassistant/components/frontend/www_static/images/darksky/weather-rainy.svg deleted file mode 100644 index 27ae4d033ffbd4..00000000000000 --- a/homeassistant/components/frontend/www_static/images/darksky/weather-rainy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/images/darksky/weather-snowy.svg b/homeassistant/components/frontend/www_static/images/darksky/weather-snowy.svg deleted file mode 100644 index 9c56c2bb46972d..00000000000000 --- a/homeassistant/components/frontend/www_static/images/darksky/weather-snowy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/images/darksky/weather-sunny.svg b/homeassistant/components/frontend/www_static/images/darksky/weather-sunny.svg deleted file mode 100644 index 8f9733041a1fe9..00000000000000 --- a/homeassistant/components/frontend/www_static/images/darksky/weather-sunny.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/images/darksky/weather-windy.svg b/homeassistant/components/frontend/www_static/images/darksky/weather-windy.svg deleted file mode 100644 index de0b444fd01f89..00000000000000 --- a/homeassistant/components/frontend/www_static/images/darksky/weather-windy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/images/leaflet/layers-2x.png b/homeassistant/components/frontend/www_static/images/leaflet/layers-2x.png deleted file mode 100644 index a2cf7f9efef65d..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/leaflet/layers-2x.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/leaflet/layers.png b/homeassistant/components/frontend/www_static/images/leaflet/layers.png deleted file mode 100644 index bca0a0e4296b0d..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/leaflet/layers.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/leaflet/leaflet.css b/homeassistant/components/frontend/www_static/images/leaflet/leaflet.css deleted file mode 100644 index a3ea996ead227e..00000000000000 --- a/homeassistant/components/frontend/www_static/images/leaflet/leaflet.css +++ /dev/null @@ -1,631 +0,0 @@ -/* required styles */ - -.leaflet-pane, -.leaflet-tile, -.leaflet-marker-icon, -.leaflet-marker-shadow, -.leaflet-tile-container, -.leaflet-pane > svg, -.leaflet-pane > canvas, -.leaflet-zoom-box, -.leaflet-image-layer, -.leaflet-layer { - position: absolute; - left: 0; - top: 0; - } -.leaflet-container { - overflow: hidden; - } -.leaflet-tile, -.leaflet-marker-icon, -.leaflet-marker-shadow { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - -webkit-user-drag: none; - } -/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ -.leaflet-safari .leaflet-tile { - image-rendering: -webkit-optimize-contrast; - } -/* hack that prevents hw layers "stretching" when loading new tiles */ -.leaflet-safari .leaflet-tile-container { - width: 1600px; - height: 1600px; - -webkit-transform-origin: 0 0; - } -.leaflet-marker-icon, -.leaflet-marker-shadow { - display: block; - } -/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ -/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ -.leaflet-container .leaflet-overlay-pane svg, -.leaflet-container .leaflet-marker-pane img, -.leaflet-container .leaflet-shadow-pane img, -.leaflet-container .leaflet-tile-pane img, -.leaflet-container img.leaflet-image-layer { - max-width: none !important; - } - -.leaflet-container.leaflet-touch-zoom { - -ms-touch-action: pan-x pan-y; - touch-action: pan-x pan-y; - } -.leaflet-container.leaflet-touch-drag { - -ms-touch-action: pinch-zoom; - } -.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom { - -ms-touch-action: none; - touch-action: none; -} -.leaflet-container { - -webkit-tap-highlight-color: transparent; -} -.leaflet-container a { - -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4); -} -.leaflet-tile { - filter: inherit; - visibility: hidden; - } -.leaflet-tile-loaded { - visibility: inherit; - } -.leaflet-zoom-box { - width: 0; - height: 0; - -moz-box-sizing: border-box; - box-sizing: border-box; - z-index: 800; - } -/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ -.leaflet-overlay-pane svg { - -moz-user-select: none; - } - -.leaflet-pane { z-index: 400; } - -.leaflet-tile-pane { z-index: 200; } -.leaflet-overlay-pane { z-index: 400; } -.leaflet-shadow-pane { z-index: 500; } -.leaflet-marker-pane { z-index: 600; } -.leaflet-tooltip-pane { z-index: 650; } -.leaflet-popup-pane { z-index: 700; } - -.leaflet-map-pane canvas { z-index: 100; } -.leaflet-map-pane svg { z-index: 200; } - -.leaflet-vml-shape { - width: 1px; - height: 1px; - } -.lvml { - behavior: url(#default#VML); - display: inline-block; - position: absolute; - } - - -/* control positioning */ - -.leaflet-control { - position: relative; - z-index: 800; - pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ - pointer-events: auto; - } -.leaflet-top, -.leaflet-bottom { - position: absolute; - z-index: 1000; - pointer-events: none; - } -.leaflet-top { - top: 0; - } -.leaflet-right { - right: 0; - } -.leaflet-bottom { - bottom: 0; - } -.leaflet-left { - left: 0; - } -.leaflet-control { - float: left; - clear: both; - } -.leaflet-right .leaflet-control { - float: right; - } -.leaflet-top .leaflet-control { - margin-top: 10px; - } -.leaflet-bottom .leaflet-control { - margin-bottom: 10px; - } -.leaflet-left .leaflet-control { - margin-left: 10px; - } -.leaflet-right .leaflet-control { - margin-right: 10px; - } - - -/* zoom and fade animations */ - -.leaflet-fade-anim .leaflet-tile { - will-change: opacity; - } -.leaflet-fade-anim .leaflet-popup { - opacity: 0; - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - -o-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; - } -.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { - opacity: 1; - } -.leaflet-zoom-animated { - -webkit-transform-origin: 0 0; - -ms-transform-origin: 0 0; - transform-origin: 0 0; - } -.leaflet-zoom-anim .leaflet-zoom-animated { - will-change: transform; - } -.leaflet-zoom-anim .leaflet-zoom-animated { - -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); - -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); - -o-transition: -o-transform 0.25s cubic-bezier(0,0,0.25,1); - transition: transform 0.25s cubic-bezier(0,0,0.25,1); - } -.leaflet-zoom-anim .leaflet-tile, -.leaflet-pan-anim .leaflet-tile { - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; - } - -.leaflet-zoom-anim .leaflet-zoom-hide { - visibility: hidden; - } - - -/* cursors */ - -.leaflet-interactive { - cursor: pointer; - } -.leaflet-grab { - cursor: -webkit-grab; - cursor: -moz-grab; - } -.leaflet-crosshair, -.leaflet-crosshair .leaflet-interactive { - cursor: crosshair; - } -.leaflet-popup-pane, -.leaflet-control { - cursor: auto; - } -.leaflet-dragging .leaflet-grab, -.leaflet-dragging .leaflet-grab .leaflet-interactive, -.leaflet-dragging .leaflet-marker-draggable { - cursor: move; - cursor: -webkit-grabbing; - cursor: -moz-grabbing; - } - -/* marker & overlays interactivity */ -.leaflet-marker-icon, -.leaflet-marker-shadow, -.leaflet-image-layer, -.leaflet-pane > svg path, -.leaflet-tile-container { - pointer-events: none; - } - -.leaflet-marker-icon.leaflet-interactive, -.leaflet-image-layer.leaflet-interactive, -.leaflet-pane > svg path.leaflet-interactive { - pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ - pointer-events: auto; - } - -/* visual tweaks */ - -.leaflet-container { - background: #ddd; - outline: 0; - } -.leaflet-container a { - color: #0078A8; - } -.leaflet-container a.leaflet-active { - outline: 2px solid orange; - } -.leaflet-zoom-box { - border: 2px dotted #38f; - background: rgba(255,255,255,0.5); - } - - -/* general typography */ -.leaflet-container { - font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif; - } - - -/* general toolbar styles */ - -.leaflet-bar { - box-shadow: 0 1px 5px rgba(0,0,0,0.65); - border-radius: 4px; - } -.leaflet-bar a, -.leaflet-bar a:hover { - background-color: #fff; - border-bottom: 1px solid #ccc; - width: 26px; - height: 26px; - line-height: 26px; - display: block; - text-align: center; - text-decoration: none; - color: black; - } -.leaflet-bar a, -.leaflet-control-layers-toggle { - background-position: 50% 50%; - background-repeat: no-repeat; - display: block; - } -.leaflet-bar a:hover { - background-color: #f4f4f4; - } -.leaflet-bar a:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - } -.leaflet-bar a:last-child { - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - border-bottom: none; - } -.leaflet-bar a.leaflet-disabled { - cursor: default; - background-color: #f4f4f4; - color: #bbb; - } - -.leaflet-touch .leaflet-bar a { - width: 30px; - height: 30px; - line-height: 30px; - } -.leaflet-touch .leaflet-bar a:first-child { - border-top-left-radius: 2px; - border-top-right-radius: 2px; - } -.leaflet-touch .leaflet-bar a:last-child { - border-bottom-left-radius: 2px; - border-bottom-right-radius: 2px; - } - -/* zoom control */ - -.leaflet-control-zoom-in, -.leaflet-control-zoom-out { - font: bold 18px 'Lucida Console', Monaco, monospace; - text-indent: 1px; - } - -.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out { - font-size: 22px; - } - - -/* layers control */ - -.leaflet-control-layers { - box-shadow: 0 1px 5px rgba(0,0,0,0.4); - background: #fff; - border-radius: 5px; - } -.leaflet-control-layers-toggle { - background-image: url(images/layers.png); - width: 36px; - height: 36px; - } -.leaflet-retina .leaflet-control-layers-toggle { - background-image: url(images/layers-2x.png); - background-size: 26px 26px; - } -.leaflet-touch .leaflet-control-layers-toggle { - width: 44px; - height: 44px; - } -.leaflet-control-layers .leaflet-control-layers-list, -.leaflet-control-layers-expanded .leaflet-control-layers-toggle { - display: none; - } -.leaflet-control-layers-expanded .leaflet-control-layers-list { - display: block; - position: relative; - } -.leaflet-control-layers-expanded { - padding: 6px 10px 6px 6px; - color: #333; - background: #fff; - } -.leaflet-control-layers-scrollbar { - overflow-y: scroll; - padding-right: 5px; - } -.leaflet-control-layers-selector { - margin-top: 2px; - position: relative; - top: 1px; - } -.leaflet-control-layers label { - display: block; - } -.leaflet-control-layers-separator { - height: 0; - border-top: 1px solid #ddd; - margin: 5px -10px 5px -6px; - } - -/* Default icon URLs */ -.leaflet-default-icon-path { - background-image: url(images/marker-icon.png); - } - - -/* attribution and scale controls */ - -.leaflet-container .leaflet-control-attribution { - background: #fff; - background: rgba(255, 255, 255, 0.7); - margin: 0; - } -.leaflet-control-attribution, -.leaflet-control-scale-line { - padding: 0 5px; - color: #333; - } -.leaflet-control-attribution a { - text-decoration: none; - } -.leaflet-control-attribution a:hover { - text-decoration: underline; - } -.leaflet-container .leaflet-control-attribution, -.leaflet-container .leaflet-control-scale { - font-size: 11px; - } -.leaflet-left .leaflet-control-scale { - margin-left: 5px; - } -.leaflet-bottom .leaflet-control-scale { - margin-bottom: 5px; - } -.leaflet-control-scale-line { - border: 2px solid #777; - border-top: none; - line-height: 1.1; - padding: 2px 5px 1px; - font-size: 11px; - white-space: nowrap; - overflow: hidden; - -moz-box-sizing: border-box; - box-sizing: border-box; - - background: #fff; - background: rgba(255, 255, 255, 0.5); - } -.leaflet-control-scale-line:not(:first-child) { - border-top: 2px solid #777; - border-bottom: none; - margin-top: -2px; - } -.leaflet-control-scale-line:not(:first-child):not(:last-child) { - border-bottom: 2px solid #777; - } - -.leaflet-touch .leaflet-control-attribution, -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - box-shadow: none; - } -.leaflet-touch .leaflet-control-layers, -.leaflet-touch .leaflet-bar { - border: 2px solid rgba(0,0,0,0.2); - background-clip: padding-box; - } - - -/* popup */ - -.leaflet-popup { - position: absolute; - text-align: center; - margin-bottom: 20px; - } -.leaflet-popup-content-wrapper { - padding: 1px; - text-align: left; - border-radius: 12px; - } -.leaflet-popup-content { - margin: 13px 19px; - line-height: 1.4; - } -.leaflet-popup-content p { - margin: 18px 0; - } -.leaflet-popup-tip-container { - width: 40px; - height: 20px; - position: absolute; - left: 50%; - margin-left: -20px; - overflow: hidden; - pointer-events: none; - } -.leaflet-popup-tip { - width: 17px; - height: 17px; - padding: 1px; - - margin: -10px auto 0; - - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - } -.leaflet-popup-content-wrapper, -.leaflet-popup-tip { - background: white; - color: #333; - box-shadow: 0 3px 14px rgba(0,0,0,0.4); - } -.leaflet-container a.leaflet-popup-close-button { - position: absolute; - top: 0; - right: 0; - padding: 4px 4px 0 0; - border: none; - text-align: center; - width: 18px; - height: 14px; - font: 16px/14px Tahoma, Verdana, sans-serif; - color: #c3c3c3; - text-decoration: none; - font-weight: bold; - background: transparent; - } -.leaflet-container a.leaflet-popup-close-button:hover { - color: #999; - } -.leaflet-popup-scrolled { - overflow: auto; - border-bottom: 1px solid #ddd; - border-top: 1px solid #ddd; - } - -.leaflet-oldie .leaflet-popup-content-wrapper { - zoom: 1; - } -.leaflet-oldie .leaflet-popup-tip { - width: 24px; - margin: 0 auto; - - -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; - filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); - } -.leaflet-oldie .leaflet-popup-tip-container { - margin-top: -1px; - } - -.leaflet-oldie .leaflet-control-zoom, -.leaflet-oldie .leaflet-control-layers, -.leaflet-oldie .leaflet-popup-content-wrapper, -.leaflet-oldie .leaflet-popup-tip { - border: 1px solid #999; - } - - -/* div icon */ - -.leaflet-div-icon { - background: #fff; - border: 1px solid #666; - } - - -/* Tooltip */ -/* Base styles for the element that has a tooltip */ -.leaflet-tooltip { - position: absolute; - padding: 6px; - background-color: #fff; - border: 1px solid #fff; - border-radius: 3px; - color: #222; - white-space: nowrap; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - pointer-events: none; - box-shadow: 0 1px 3px rgba(0,0,0,0.4); - } -.leaflet-tooltip.leaflet-clickable { - cursor: pointer; - pointer-events: auto; - } -.leaflet-tooltip-top:before, -.leaflet-tooltip-bottom:before, -.leaflet-tooltip-left:before, -.leaflet-tooltip-right:before { - position: absolute; - pointer-events: none; - border: 6px solid transparent; - background: transparent; - content: ""; - } - -/* Directions */ - -.leaflet-tooltip-bottom { - margin-top: 6px; -} -.leaflet-tooltip-top { - margin-top: -6px; -} -.leaflet-tooltip-bottom:before, -.leaflet-tooltip-top:before { - left: 50%; - margin-left: -6px; - } -.leaflet-tooltip-top:before { - bottom: 0; - margin-bottom: -12px; - border-top-color: #fff; - } -.leaflet-tooltip-bottom:before { - top: 0; - margin-top: -12px; - margin-left: -6px; - border-bottom-color: #fff; - } -.leaflet-tooltip-left { - margin-left: -6px; -} -.leaflet-tooltip-right { - margin-left: 6px; -} -.leaflet-tooltip-left:before, -.leaflet-tooltip-right:before { - top: 50%; - margin-top: -6px; - } -.leaflet-tooltip-left:before { - right: 0; - margin-right: -12px; - border-left-color: #fff; - } -.leaflet-tooltip-right:before { - left: 0; - margin-left: -12px; - border-right-color: #fff; - } diff --git a/homeassistant/components/frontend/www_static/images/leaflet/marker-icon-2x.png b/homeassistant/components/frontend/www_static/images/leaflet/marker-icon-2x.png deleted file mode 100644 index 0015b6495fa458..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/leaflet/marker-icon-2x.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/leaflet/marker-icon.png b/homeassistant/components/frontend/www_static/images/leaflet/marker-icon.png deleted file mode 100644 index e2e9f757f515de..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/leaflet/marker-icon.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/leaflet/marker-shadow.png b/homeassistant/components/frontend/www_static/images/leaflet/marker-shadow.png deleted file mode 100644 index d1e773c715a9b5..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/leaflet/marker-shadow.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/logo_automatic.png b/homeassistant/components/frontend/www_static/images/logo_automatic.png deleted file mode 100644 index ab03fa93b4c6cb..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/logo_automatic.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/logo_axis.png b/homeassistant/components/frontend/www_static/images/logo_axis.png deleted file mode 100644 index 5eeb9b7b2a78f2..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/logo_axis.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/logo_philips_hue.png b/homeassistant/components/frontend/www_static/images/logo_philips_hue.png deleted file mode 100644 index ae4df811fa8d14..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/logo_philips_hue.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/logo_plex_mediaserver.png b/homeassistant/components/frontend/www_static/images/logo_plex_mediaserver.png deleted file mode 100644 index 97a1b4b352cdbf..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/logo_plex_mediaserver.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/notification-badge.png b/homeassistant/components/frontend/www_static/images/notification-badge.png deleted file mode 100644 index 2d254444915e9d..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/notification-badge.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/images/smart-tv.png b/homeassistant/components/frontend/www_static/images/smart-tv.png deleted file mode 100644 index 5ecda68b402903..00000000000000 Binary files a/homeassistant/components/frontend/www_static/images/smart-tv.png and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/mdi.html b/homeassistant/components/frontend/www_static/mdi.html deleted file mode 100644 index 962626edadf689..00000000000000 --- a/homeassistant/components/frontend/www_static/mdi.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/mdi.html.gz b/homeassistant/components/frontend/www_static/mdi.html.gz deleted file mode 100644 index 1befb4958ade21..00000000000000 Binary files a/homeassistant/components/frontend/www_static/mdi.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/micromarkdown-js.html b/homeassistant/components/frontend/www_static/micromarkdown-js.html deleted file mode 100644 index a80c564cb7b51e..00000000000000 --- a/homeassistant/components/frontend/www_static/micromarkdown-js.html +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/homeassistant/components/frontend/www_static/micromarkdown-js.html.gz b/homeassistant/components/frontend/www_static/micromarkdown-js.html.gz deleted file mode 100644 index 341f96c260ec55..00000000000000 Binary files a/homeassistant/components/frontend/www_static/micromarkdown-js.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-config.html b/homeassistant/components/frontend/www_static/panels/ha-panel-config.html deleted file mode 100644 index 3fd7ef594a25eb..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-config.html +++ /dev/null @@ -1,7 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-config.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-config.html.gz deleted file mode 100644 index 7618031d1a3dae..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-config.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-event.html b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-event.html deleted file mode 100644 index e32d8306061cf9..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-event.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-event.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-event.html.gz deleted file mode 100644 index 18406f9cad6b80..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-event.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-info.html b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-info.html deleted file mode 100644 index 47b283e0a513c6..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-info.html +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-info.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-info.html.gz deleted file mode 100644 index d534814718118a..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-info.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-mqtt.html b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-mqtt.html deleted file mode 100644 index 80201efa386c6e..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-mqtt.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-mqtt.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-mqtt.html.gz deleted file mode 100644 index 28a28a9647dba0..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-mqtt.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-service.html b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-service.html deleted file mode 100644 index c65c92d1b4f1ad..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-service.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-service.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-service.html.gz deleted file mode 100644 index 9a5e3896a8281a..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-service.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-state.html b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-state.html deleted file mode 100644 index 5f4337b017109d..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-state.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-state.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-state.html.gz deleted file mode 100644 index 686dd7b7cc298a..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-state.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-template.html b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-template.html deleted file mode 100644 index 53638dd582b071..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-template.html +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-template.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-dev-template.html.gz deleted file mode 100644 index 24fd95f17a7b7f..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-dev-template.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-hassio.html b/homeassistant/components/frontend/www_static/panels/ha-panel-hassio.html deleted file mode 100644 index 68bcffbb13dd48..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-hassio.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-hassio.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-hassio.html.gz deleted file mode 100644 index 4c6d52d6448420..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-hassio.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-history.html b/homeassistant/components/frontend/www_static/panels/ha-panel-history.html deleted file mode 100644 index 3b5f128b763039..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-history.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-history.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-history.html.gz deleted file mode 100644 index f4e4ce09f4130f..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-history.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-iframe.html b/homeassistant/components/frontend/www_static/panels/ha-panel-iframe.html deleted file mode 100644 index 68bd07459e74ab..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-iframe.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-iframe.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-iframe.html.gz deleted file mode 100644 index 949d08e0674133..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-iframe.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-kiosk.html b/homeassistant/components/frontend/www_static/panels/ha-panel-kiosk.html deleted file mode 100644 index 803c3696726fe7..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-kiosk.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-kiosk.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-kiosk.html.gz deleted file mode 100644 index 63279686866240..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-kiosk.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html b/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html deleted file mode 100644 index fc9aa01d0b1cde..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html.gz deleted file mode 100644 index 904aecb6acb36f..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-logbook.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-mailbox.html b/homeassistant/components/frontend/www_static/panels/ha-panel-mailbox.html deleted file mode 100644 index 62948d65f07cd8..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-mailbox.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-mailbox.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-mailbox.html.gz deleted file mode 100644 index d96d49785acf3e..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-mailbox.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-map.html b/homeassistant/components/frontend/www_static/panels/ha-panel-map.html deleted file mode 100644 index 5f34f7bc28a624..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-map.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-map.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-map.html.gz deleted file mode 100644 index d9dd4c687fbc9f..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-map.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-shopping-list.html b/homeassistant/components/frontend/www_static/panels/ha-panel-shopping-list.html deleted file mode 100644 index 35954d7dc5f097..00000000000000 --- a/homeassistant/components/frontend/www_static/panels/ha-panel-shopping-list.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/panels/ha-panel-shopping-list.html.gz b/homeassistant/components/frontend/www_static/panels/ha-panel-shopping-list.html.gz deleted file mode 100644 index 4af82c430637de..00000000000000 Binary files a/homeassistant/components/frontend/www_static/panels/ha-panel-shopping-list.html.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/robots.txt b/homeassistant/components/frontend/www_static/robots.txt deleted file mode 100644 index 77470cb39f05f7..00000000000000 --- a/homeassistant/components/frontend/www_static/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: / \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/service_worker.js b/homeassistant/components/frontend/www_static/service_worker.js deleted file mode 100644 index 3c5f09f3daf8af..00000000000000 --- a/homeassistant/components/frontend/www_static/service_worker.js +++ /dev/null @@ -1,346 +0,0 @@ -/** - * Copyright 2016 Google Inc. All rights reserved. - * - * 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. -*/ - -// DO NOT EDIT THIS GENERATED OUTPUT DIRECTLY! -// This file should be overwritten as part of your build process. -// If you need to extend the behavior of the generated service worker, the best approach is to write -// additional code and include it using the importScripts option: -// https://github.com/GoogleChrome/sw-precache#importscripts-arraystring -// -// Alternatively, it's possible to make changes to the underlying template file and then use that as the -// new base for generating output, via the templateFilePath option: -// https://github.com/GoogleChrome/sw-precache#templatefilepath-string -// -// If you go that route, make sure that whenever you update your sw-precache dependency, you reconcile any -// changes made to this original template file with your modified copy. - -// This generated service worker JavaScript will precache your site's resources. -// The code needs to be saved in a .js file at the top-level of your site, and registered -// from your pages in order to be used. See -// https://github.com/googlechrome/sw-precache/blob/master/demo/app/js/service-worker-registration.js -// for an example of how you can register this script and handle various service worker events. - -/* eslint-env worker, serviceworker */ -/* eslint-disable indent, no-unused-vars, no-multiple-empty-lines, max-nested-callbacks, space-before-function-paren, quotes, comma-spacing */ -'use strict'; - -var precacheConfig = [["/","517bbe13d945f188a0896870cd3055d0"],["/frontend/panels/dev-event-d409e7ab537d9fe629126d122345279c.html","936814991f2a5e23d61d29f0d40f81b8"],["/frontend/panels/dev-info-b0e55eb657fd75f21aba2426ac0cedc0.html","1fa953b0224470f70d4e87bbe4dff191"],["/frontend/panels/dev-mqtt-94b222b013a98583842de3e72d5888c6.html","dc3ddfac58397feda97317358f0aecbb"],["/frontend/panels/dev-service-422b2c181ee0713fa31d45a64e605baf.html","ae7d26b1c8c3309fd3c65944f89ea03f"],["/frontend/panels/dev-state-7948d3dba058f31517d880df8ed0e857.html","ff8156bb1a52490fcc07466556fce0e1"],["/frontend/panels/dev-template-928e7b81b9c113b70edc9f4a1d051827.html","312c8313800b44c83bcb8dc2df30c759"],["/frontend/panels/map-565db019147162080c21af962afc097f.html","a1a360042395682335e2f471dddad309"],["/static/compatibility-1686167ff210e001f063f5c606b2e74b.js","6ee7b5e2dd82b510c3bd92f7e215988e"],["/static/core-2a7d01e45187c7d4635da05065b5e54e.js","90a0a8a6a6dd0ca41b16f40e7d23924d"],["/static/frontend-2de1bde3b4a6c6c47dd95504fc098906.html","51faf83c8a2d86529bc76a67fe6b5234"],["/static/mdi-89074face5529f5fe6fbae49ecb3e88b.html","97754e463f9e56a95c813d4d8e792347"],["static/fonts/roboto/Roboto-Bold.ttf","d329cc8b34667f114a95422aaad1b063"],["static/fonts/roboto/Roboto-Light.ttf","7b5fb88f12bec8143f00e21bc3222124"],["static/fonts/roboto/Roboto-Medium.ttf","fe13e4170719c2fc586501e777bde143"],["static/fonts/roboto/Roboto-Regular.ttf","ac3f799d5bbaf5196fab15ab8de8431c"],["static/icons/favicon-192x192.png","419903b8422586a7e28021bbe9011175"],["static/icons/favicon.ico","04235bda7843ec2fceb1cbe2bc696cf4"],["static/images/card_media_player_bg.png","a34281d1c1835d338a642e90930e61aa"]]; -var cacheName = 'sw-precache-v3--' + (self.registration ? self.registration.scope : ''); - - -var ignoreUrlParametersMatching = [/^utm_/]; - - - -var addDirectoryIndex = function (originalUrl, index) { - var url = new URL(originalUrl); - if (url.pathname.slice(-1) === '/') { - url.pathname += index; - } - return url.toString(); - }; - -var cleanResponse = function (originalResponse) { - // If this is not a redirected response, then we don't have to do anything. - if (!originalResponse.redirected) { - return Promise.resolve(originalResponse); - } - - // Firefox 50 and below doesn't support the Response.body stream, so we may - // need to read the entire body to memory as a Blob. - var bodyPromise = 'body' in originalResponse ? - Promise.resolve(originalResponse.body) : - originalResponse.blob(); - - return bodyPromise.then(function(body) { - // new Response() is happy when passed either a stream or a Blob. - return new Response(body, { - headers: originalResponse.headers, - status: originalResponse.status, - statusText: originalResponse.statusText - }); - }); - }; - -var createCacheKey = function (originalUrl, paramName, paramValue, - dontCacheBustUrlsMatching) { - // Create a new URL object to avoid modifying originalUrl. - var url = new URL(originalUrl); - - // If dontCacheBustUrlsMatching is not set, or if we don't have a match, - // then add in the extra cache-busting URL parameter. - if (!dontCacheBustUrlsMatching || - !(url.pathname.match(dontCacheBustUrlsMatching))) { - url.search += (url.search ? '&' : '') + - encodeURIComponent(paramName) + '=' + encodeURIComponent(paramValue); - } - - return url.toString(); - }; - -var isPathWhitelisted = function (whitelist, absoluteUrlString) { - // If the whitelist is empty, then consider all URLs to be whitelisted. - if (whitelist.length === 0) { - return true; - } - - // Otherwise compare each path regex to the path of the URL passed in. - var path = (new URL(absoluteUrlString)).pathname; - return whitelist.some(function(whitelistedPathRegex) { - return path.match(whitelistedPathRegex); - }); - }; - -var stripIgnoredUrlParameters = function (originalUrl, - ignoreUrlParametersMatching) { - var url = new URL(originalUrl); - // Remove the hash; see https://github.com/GoogleChrome/sw-precache/issues/290 - url.hash = ''; - - url.search = url.search.slice(1) // Exclude initial '?' - .split('&') // Split into an array of 'key=value' strings - .map(function(kv) { - return kv.split('='); // Split each 'key=value' string into a [key, value] array - }) - .filter(function(kv) { - return ignoreUrlParametersMatching.every(function(ignoredRegex) { - return !ignoredRegex.test(kv[0]); // Return true iff the key doesn't match any of the regexes. - }); - }) - .map(function(kv) { - return kv.join('='); // Join each [key, value] array into a 'key=value' string - }) - .join('&'); // Join the array of 'key=value' strings into a string with '&' in between each - - return url.toString(); - }; - - -var hashParamName = '_sw-precache'; -var urlsToCacheKeys = new Map( - precacheConfig.map(function(item) { - var relativeUrl = item[0]; - var hash = item[1]; - var absoluteUrl = new URL(relativeUrl, self.location); - var cacheKey = createCacheKey(absoluteUrl, hashParamName, hash, false); - return [absoluteUrl.toString(), cacheKey]; - }) -); - -function setOfCachedUrls(cache) { - return cache.keys().then(function(requests) { - return requests.map(function(request) { - return request.url; - }); - }).then(function(urls) { - return new Set(urls); - }); -} - -self.addEventListener('install', function(event) { - event.waitUntil( - caches.open(cacheName).then(function(cache) { - return setOfCachedUrls(cache).then(function(cachedUrls) { - return Promise.all( - Array.from(urlsToCacheKeys.values()).map(function(cacheKey) { - // If we don't have a key matching url in the cache already, add it. - if (!cachedUrls.has(cacheKey)) { - var request = new Request(cacheKey, {credentials: 'same-origin'}); - return fetch(request).then(function(response) { - // Bail out of installation unless we get back a 200 OK for - // every request. - if (!response.ok) { - throw new Error('Request for ' + cacheKey + ' returned a ' + - 'response with status ' + response.status); - } - - return cleanResponse(response).then(function(responseToCache) { - return cache.put(cacheKey, responseToCache); - }); - }); - } - }) - ); - }); - }).then(function() { - - // Force the SW to transition from installing -> active state - return self.skipWaiting(); - - }) - ); -}); - -self.addEventListener('activate', function(event) { - var setOfExpectedUrls = new Set(urlsToCacheKeys.values()); - - event.waitUntil( - caches.open(cacheName).then(function(cache) { - return cache.keys().then(function(existingRequests) { - return Promise.all( - existingRequests.map(function(existingRequest) { - if (!setOfExpectedUrls.has(existingRequest.url)) { - return cache.delete(existingRequest); - } - }) - ); - }); - }).then(function() { - - return self.clients.claim(); - - }) - ); -}); - - -self.addEventListener('fetch', function(event) { - if (event.request.method === 'GET') { - // Should we call event.respondWith() inside this fetch event handler? - // This needs to be determined synchronously, which will give other fetch - // handlers a chance to handle the request if need be. - var shouldRespond; - - // First, remove all the ignored parameters and hash fragment, and see if we - // have that URL in our cache. If so, great! shouldRespond will be true. - var url = stripIgnoredUrlParameters(event.request.url, ignoreUrlParametersMatching); - shouldRespond = urlsToCacheKeys.has(url); - - // If shouldRespond is false, check again, this time with 'index.html' - // (or whatever the directoryIndex option is set to) at the end. - var directoryIndex = 'index.html'; - if (!shouldRespond && directoryIndex) { - url = addDirectoryIndex(url, directoryIndex); - shouldRespond = urlsToCacheKeys.has(url); - } - - // If shouldRespond is still false, check to see if this is a navigation - // request, and if so, whether the URL matches navigateFallbackWhitelist. - var navigateFallback = '/'; - if (!shouldRespond && - navigateFallback && - (event.request.mode === 'navigate') && - isPathWhitelisted(["^((?!(static|api|local|service_worker.js|manifest.json)).)*$"], event.request.url)) { - url = new URL(navigateFallback, self.location).toString(); - shouldRespond = urlsToCacheKeys.has(url); - } - - // If shouldRespond was set to true at any point, then call - // event.respondWith(), using the appropriate cache key. - if (shouldRespond) { - event.respondWith( - caches.open(cacheName).then(function(cache) { - return cache.match(urlsToCacheKeys.get(url)).then(function(response) { - if (response) { - return response; - } - throw Error('The cached response that was expected is missing.'); - }); - }).catch(function(e) { - // Fall back to just fetch()ing the request if some unexpected error - // prevented the cached response from being valid. - console.warn('Couldn\'t serve response for "%s" from cache: %O', event.request.url, e); - return fetch(event.request); - }) - ); - } - } -}); - - - - - - - - -self.addEventListener("push", function(event) { - var data; - if (event.data) { - data = event.data.json(); - event.waitUntil( - self.registration.showNotification(data.title, data) - .then(function(notification){ - firePushCallback({ - type: "received", - tag: data.tag, - data: data.data - }, data.data.jwt); - }) - ); - } -}); -self.addEventListener('notificationclick', function(event) { - var url; - - notificationEventCallback('clicked', event); - - event.notification.close(); - - if (!event.notification.data || !event.notification.data.url) { - return; - } - - url = event.notification.data.url; - - if (!url) return; - - event.waitUntil( - clients.matchAll({ - type: 'window', - }) - .then(function (windowClients) { - var i; - var client; - for (i = 0; i < windowClients.length; i++) { - client = windowClients[i]; - if (client.url === url && 'focus' in client) { - return client.focus(); - } - } - if (clients.openWindow) { - return clients.openWindow(url); - } - return undefined; - }) - ); -}); -self.addEventListener('notificationclose', function(event) { - notificationEventCallback('closed', event); -}); - -function notificationEventCallback(event_type, event){ - firePushCallback({ - action: event.action, - data: event.notification.data, - tag: event.notification.tag, - type: event_type - }, event.notification.data.jwt); -} -function firePushCallback(payload, jwt){ - // Don't send the JWT in the payload.data - delete payload.data.jwt; - // If payload.data is empty then just remove the entire payload.data object. - if (Object.keys(payload.data).length === 0 && payload.data.constructor === Object) { - delete payload.data; - } - fetch('/api/notify.html5/callback', { - method: 'POST', - headers: new Headers({'Content-Type': 'application/json', - 'Authorization': 'Bearer '+jwt}), - body: JSON.stringify(payload) - }); -} diff --git a/homeassistant/components/frontend/www_static/service_worker.js.gz b/homeassistant/components/frontend/www_static/service_worker.js.gz deleted file mode 100644 index f0ad1b7c4264d5..00000000000000 Binary files a/homeassistant/components/frontend/www_static/service_worker.js.gz and /dev/null differ diff --git a/homeassistant/components/frontend/www_static/webcomponents-lite.js b/homeassistant/components/frontend/www_static/webcomponents-lite.js deleted file mode 100644 index 1cce53a0b30ad4..00000000000000 --- a/homeassistant/components/frontend/www_static/webcomponents-lite.js +++ /dev/null @@ -1,196 +0,0 @@ -(function(){/* - - Copyright (c) 2016 The Polymer Project Authors. All rights reserved. - This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt - The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt - The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt - Code distributed by Google as part of the polymer project is also - subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt - -Copyright (c) 2017 The Polymer Project Authors. All rights reserved. -This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt -The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt -The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt -Code distributed by Google as part of the polymer project is also -subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt - - Copyright (c) 2014 The Polymer Project Authors. All rights reserved. - This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt - The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt - The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt - Code distributed by Google as part of the polymer project is also - subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt - -Copyright (c) 2016 The Polymer Project Authors. All rights reserved. -This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt -The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt -The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt -Code distributed by Google as part of the polymer project is also -subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt -*/ -'use strict';var N="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this,Oa="function"==typeof Object.defineProperties?Object.defineProperty:function(g,t,R){g!=Array.prototype&&g!=Object.prototype&&(g[t]=R.value)};function Pb(){Pb=function(){};N.Symbol||(N.Symbol=Qb)}var Qb=function(){var g=0;return function(t){return"jscomp_symbol_"+(t||"")+g++}}(); -function Od(){Pb();var g=N.Symbol.iterator;g||(g=N.Symbol.iterator=N.Symbol("iterator"));"function"!=typeof Array.prototype[g]&&Oa(Array.prototype,g,{configurable:!0,writable:!0,value:function(){return Pd(this)}});Od=function(){}}function Pd(g){var t=0;return Qd(function(){return t":return">";case '"':return""";case "\u00a0":return" "}}function tc(a){for(var b={},c=0;c";break a;case Node.TEXT_NODE:k=k.data;k=m&&ze[m.localName]?k:k.replace(Ae,sc);break a;case Node.COMMENT_NODE:k="\x3c!--"+k.data+"--\x3e";break a;default:throw window.console.error(k),Error("not implemented");}}c+=k}return c}function da(a){E.currentNode=a;return E.parentNode()}function Ya(a){E.currentNode=a;return E.firstChild()}function Za(a){E.currentNode=a;return E.lastChild()}function uc(a){E.currentNode= -a;return E.previousSibling()}function vc(a){E.currentNode=a;return E.nextSibling()}function X(a){var b=[];E.currentNode=a;for(a=E.firstChild();a;)b.push(a),a=E.nextSibling();return b}function wc(a){F.currentNode=a;return F.parentNode()}function xc(a){F.currentNode=a;return F.firstChild()}function yc(a){F.currentNode=a;return F.lastChild()}function zc(a){F.currentNode=a;return F.previousSibling()}function Ac(a){F.currentNode=a;return F.nextSibling()}function Bc(a){var b=[];F.currentNode=a;for(a=F.firstChild();a;)b.push(a), -a=F.nextSibling();return b}function Cc(a){return mb(a,function(a){return X(a)})}function Dc(a){switch(a.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:a=document.createTreeWalker(a,NodeFilter.SHOW_TEXT,null,!1);for(var b="",c;c=a.nextNode();)b+=c.nodeValue;return b;default:return a.nodeValue}}function O(a,b,c){for(var d in b){var e=Object.getOwnPropertyDescriptor(a,d);e&&e.configurable||!e&&c?Object.defineProperty(a,d,b[d]):c&&console.warn("Could not define",d,"on",a)}}function U(a){O(a, -Ec);O(a,nb);O(a,ob)}function Fc(a,b,c){fc(a);c=c||null;a.__shady=a.__shady||{};b.__shady=b.__shady||{};c&&(c.__shady=c.__shady||{});a.__shady.previousSibling=c?c.__shady.previousSibling:b.lastChild;var d=a.__shady.previousSibling;d&&d.__shady&&(d.__shady.nextSibling=a);(d=a.__shady.nextSibling=c)&&d.__shady&&(d.__shady.previousSibling=a);a.__shady.parentNode=b;c?c===b.__shady.firstChild&&(b.__shady.firstChild=a):(b.__shady.lastChild=a,b.__shady.firstChild||(b.__shady.firstChild=a));b.__shady.childNodes= -null}function pb(a,b,c){if(b===a)throw Error("Failed to execute 'appendChild' on 'Node': The new child element contains the parent.");if(c){var d=c.__shady&&c.__shady.parentNode;if(void 0!==d&&d!==a||void 0===d&&da(c)!==a)throw Error("Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.");}if(c===b)return b;b.parentNode&&qb(b.parentNode,b);d=ma(a);var e;if(e=d)a:{if(!b.__noInsertionPoint){var f;"slot"===b.localName?f=[b]:b.querySelectorAll&& -(f=b.querySelectorAll("slot"));if(f&&f.length){e=f;break a}}e=void 0}(f=e)&&d.$a(f);d&&("slot"===a.localName||f)&&d.O();if(ca(a)){d=c;ec(a);a.__shady=a.__shady||{};void 0!==a.__shady.firstChild&&(a.__shady.childNodes=null);if(b.nodeType===Node.DOCUMENT_FRAGMENT_NODE){f=b.childNodes;for(e=0;e":return">";case "\u00a0":return" "}},k=function(b){Object.defineProperty(b,"innerHTML",{get:function(){for(var a="",b=this.content.firstChild;b;b=b.nextSibling)a+=b.outerHTML||b.data.replace(u,h);return a},set:function(b){g.body.innerHTML=b;for(a.b(g);this.content.firstChild;)this.content.removeChild(this.content.firstChild);for(;g.body.firstChild;)this.content.appendChild(g.body.firstChild)}, -configurable:!0})},g=document.implementation.createHTMLDocument("template"),q=!0,l=document.createElement("style");l.textContent="template{display:none;}";var p=document.head;p.insertBefore(l,p.firstElementChild);a.prototype=Object.create(HTMLElement.prototype);var t=!document.createElement("div").hasOwnProperty("innerHTML");a.R=function(b){if(!b.content){b.content=g.createDocumentFragment();for(var c;c=b.firstChild;)b.content.appendChild(c);if(t)b.__proto__=a.prototype;else if(b.cloneNode=function(b){return a.a(this, -b)},q)try{k(b)}catch(rf){q=!1}a.b(b.content)}};k(a.prototype);a.b=function(b){b=b.querySelectorAll("template");for(var c=0,d=b.length,e;c]/g}if(b||f)a.a=function(a,b){var d=c.call(a,!1);this.R&&this.R(d);b&&(d.content.appendChild(c.call(a.content,!0)),this.ta(d.content, -a.content));return d},a.prototype.cloneNode=function(b){return a.a(this,b)},a.ta=function(a,b){if(b.querySelectorAll){b=b.querySelectorAll("template");a=a.querySelectorAll("template");for(var c=0,d=a.length,e,f;c]*)(rel=['|"]?stylesheet['|"]?[^>]*>)/g,r={mb:function(a,b){a.href&&a.setAttribute("href",r.fa(a.getAttribute("href"),b));a.src&&a.setAttribute("src",r.fa(a.getAttribute("src"),b));if("style"===a.localName){var c= -r.Ma(a.textContent,b,t);a.textContent=r.Ma(c,b,u)}},Ma:function(a,b,c){return a.replace(c,function(a,c,d,e){a=d.replace(/["']/g,"");b&&(a=r.fa(a,b));return c+"'"+a+"'"+e})},fa:function(a,b){if(void 0===r.na){r.na=!1;try{var c=new URL("b","http://a");c.pathname="c%20d";r.na="http://a/c%20d"===c.href}catch(sf){}}if(r.na)return(new URL(a,b)).href;c=r.Za;c||(c=document.implementation.createHTMLDocument("temp"),r.Za=c,c.ya=c.createElement("base"),c.head.appendChild(c.ya),c.xa=c.createElement("a"));c.ya.href= -b;c.xa.href=a;return c.xa.href||a}},w={async:!0,load:function(a,b,c){if(a)if(a.match(/^data:/)){a=a.split(",");var d=a[1];d=-1e.status?b(d,a):c(d)}; -e.send()}else c("error: href must be specified")}},z=/Trident/.test(navigator.userAgent)||/Edge\/\d./i.test(navigator.userAgent);m.prototype.c=function(a){var b=this;a=a.querySelectorAll("link[rel=import]");l(a,function(a){return b.h(a)})};m.prototype.h=function(a){var b=this,c=a.href;if(void 0!==this.a[c]){var d=this.a[c];d&&d.__loaded&&(a.import=d,this.g(a))}else this.b++,this.a[c]="pending",w.load(c,function(a,d){a=b.s(a,d||c);b.a[c]=a;b.b--;b.c(a);b.i()},function(){b.a[c]=null;b.b--;b.i()})}; -m.prototype.s=function(a,b){if(!a)return document.createDocumentFragment();z&&(a=a.replace(v,function(a,b,c){return-1===a.indexOf("type=")?b+" type=import-disable "+c:a}));var c=document.createElement("template");c.innerHTML=a;if(c.content)a=c.content;else for(a=document.createDocumentFragment();c.firstChild;)a.appendChild(c.firstChild);if(c=a.querySelector("base"))b=r.fa(c.getAttribute("href"),b),c.removeAttribute("href");c=a.querySelectorAll('link[rel=import], link[rel=stylesheet][href][type=import-disable],\n style:not([type]), link[rel=stylesheet][href]:not([type]),\n script:not([type]), script[type="application/javascript"],\n script[type="text/javascript"]'); -var d=0;l(c,function(a){h(a);r.mb(a,b);a.setAttribute("import-dependency","");"script"===a.localName&&!a.src&&a.textContent&&(a.setAttribute("src","data:text/javascript;charset=utf-8,"+encodeURIComponent(a.textContent+("\n//# sourceURL="+b+(d?"-"+d:"")+".js\n"))),a.textContent="",d++)});return a};m.prototype.i=function(){var a=this;if(!this.b){this.f.disconnect();this.flatten(document);var b=!1,c=!1,d=function(){c&&b&&(a.c(document),a.b||(a.f.observe(document.head,{childList:!0,subtree:!0}),a.j()))}; -this.v(function(){c=!0;d()});this.u(function(){b=!0;d()})}};m.prototype.flatten=function(a){var b=this;a=a.querySelectorAll("link[rel=import]");l(a,function(a){var c=b.a[a.href];(a.import=c)&&c.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&(b.a[a.href]=a,a.readyState="loading",a.import=a,b.flatten(c),a.appendChild(c))})};m.prototype.u=function(a){function b(e){if(e]/g,ye=tc("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),ze=tc("style script xmp iframe noembed noframes plaintext noscript".split(" ")),E=document.createTreeWalker(document,NodeFilter.SHOW_ALL,null,!1),F=document.createTreeWalker(document,NodeFilter.SHOW_ELEMENT,null,!1),Ve=Object.freeze({parentNode:da,firstChild:Ya,lastChild:Za,previousSibling:uc,nextSibling:vc,childNodes:X,parentElement:wc,firstElementChild:xc,lastElementChild:yc,previousElementSibling:zc, -nextElementSibling:Ac,children:Bc,innerHTML:Cc,textContent:Dc}),Hb=Object.getOwnPropertyDescriptor(Element.prototype,"innerHTML")||Object.getOwnPropertyDescriptor(HTMLElement.prototype,"innerHTML"),Ga=document.implementation.createHTMLDocument("inert").createElement("div"),Ib=Object.getOwnPropertyDescriptor(Document.prototype,"activeElement"),Ec={parentElement:{get:function(){var a=this.__shady&&this.__shady.parentNode;a&&a.nodeType!==Node.ELEMENT_NODE&&(a=null);return void 0!==a?a:wc(this)},configurable:!0}, -parentNode:{get:function(){var a=this.__shady&&this.__shady.parentNode;return void 0!==a?a:da(this)},configurable:!0},nextSibling:{get:function(){var a=this.__shady&&this.__shady.nextSibling;return void 0!==a?a:vc(this)},configurable:!0},previousSibling:{get:function(){var a=this.__shady&&this.__shady.previousSibling;return void 0!==a?a:uc(this)},configurable:!0},className:{get:function(){return this.getAttribute("class")||""},set:function(a){this.setAttribute("class",a)},configurable:!0},nextElementSibling:{get:function(){if(this.__shady&& -void 0!==this.__shady.nextSibling){for(var a=this.nextSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}return Ac(this)},configurable:!0},previousElementSibling:{get:function(){if(this.__shady&&void 0!==this.__shady.previousSibling){for(var a=this.previousSibling;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}return zc(this)},configurable:!0}},nb={childNodes:{get:function(){if(ca(this)){if(!this.__shady.childNodes){this.__shady.childNodes=[];for(var a=this.firstChild;a;a= -a.nextSibling)this.__shady.childNodes.push(a)}var b=this.__shady.childNodes}else b=X(this);b.item=function(a){return b[a]};return b},configurable:!0},childElementCount:{get:function(){return this.children.length},configurable:!0},firstChild:{get:function(){var a=this.__shady&&this.__shady.firstChild;return void 0!==a?a:Ya(this)},configurable:!0},lastChild:{get:function(){var a=this.__shady&&this.__shady.lastChild;return void 0!==a?a:Za(this)},configurable:!0},textContent:{get:function(){if(ca(this)){for(var a= -[],b=0,c=this.childNodes,d;d=c[b];b++)d.nodeType!==Node.COMMENT_NODE&&a.push(d.textContent);return a.join("")}return Dc(this)},set:function(a){switch(this.nodeType){case Node.ELEMENT_NODE:case Node.DOCUMENT_FRAGMENT_NODE:for(;this.firstChild;)this.removeChild(this.firstChild);(0b.__shady.assignedNodes.length&&(b.__shady.sa=!0)}b.__shady.sa&&(b.__shady.sa=!1,this.i(b))}};l.prototype.h=function(a,b){a.__shady=a.__shady||{};var c=a.__shady.oa;a.__shady.oa=null;b||(b=(b=this.a[a.slot||"__catchall"])&&b[0]);b?(b.__shady.assignedNodes.push(a),a.__shady.assignedSlot=b):a.__shady.assignedSlot=void 0;c!==a.__shady.assignedSlot&&a.__shady.assignedSlot&&(a.__shady.assignedSlot.__shady.sa=!0)};l.prototype.u=function(a){var b=a.__shady.assignedNodes;a.__shady.assignedNodes= -[];a.__shady.W=[];if(a.__shady.Ea=b)for(var c=0;cb.indexOf(d))||b.push(d)}for(a=0;a "+b}))}a=a.replace(mf,function(a,b,c){return'[dir="'+c+'"] '+b+", "+b+'[dir="'+ -c+'"]'});return{value:a,kb:b,stop:f}};v.prototype.u=function(a,b){a=a.split(Ad);a[0]+=b;return a.join(Ad)};v.prototype.H=function(a,b){var c=a.match(Bd);return(c=c&&c[2].trim()||"")?c[0].match(Cd)?a.replace(Bd,function(a,c,f){return b+f}):c.split(Cd)[0]===b?c:nf:a.replace(Kb,b)};v.prototype.J=function(a){a.selector=a.parsedSelector;this.B(a);this.l(a,this.N)};v.prototype.B=function(a){a.selector===of&&(a.selector="html")};v.prototype.N=function(a){return a.match(Lb)?this.g(a,Dd):this.u(a.trim(),Dd)}; -N.Object.defineProperties(v.prototype,{a:{configurable:!0,enumerable:!0,get:function(){return"style-scope"}}});var Jb=/:(nth[-\w]+)\(([^)]+)\)/,Dd=":not(.style-scope)",zd=",",kf=/(^|[\s>+~]+)((?:\[.+?\]|[^\s>+~=[])+)/g,Cd=/[[.:#*]/,Kb=":host",of=":root",Lb="::slotted",jf=new RegExp("^("+Lb+")"),Bd=/(:host)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,lf=/(?:::slotted)(?:\(((?:\([^)(]*\)|[^)(]*)+?)\))/,mf=/(.*):dir\((?:(ltr|rtl))\)/,hf=".",Ad=":",gf="class",nf="should_not_match",r=new v;w.get=function(a){return a? -a.__styleInfo:null};w.set=function(a,b){return a.__styleInfo=b};w.prototype.c=function(){return this.G};w.prototype._getStyleRules=w.prototype.c;var Ed=function(a){return a.matches||a.matchesSelector||a.mozMatchesSelector||a.msMatchesSelector||a.oMatchesSelector||a.webkitMatchesSelector}(window.Element.prototype),pf=navigator.userAgent.match("Trident");p.prototype.J=function(a){var b=this,c={},d=[],e=0;fa(a,function(a){b.c(a);a.index=e++;b.I(a.w.cssText,c)},function(a){d.push(a)});a.b=d;a=[];for(var f in c)a.push(f); -return a};p.prototype.c=function(a){if(!a.w){var b={},c={};this.b(a,c)&&(b.F=c,a.rules=null);b.cssText=this.H(a);a.w=b}};p.prototype.b=function(a,b){var c=a.w;if(c){if(c.F)return Object.assign(b,c.F),!0}else{c=a.parsedCssText;for(var d;a=Ia.exec(c);){d=(a[2]||a[3]).trim();if("inherit"!==d||"unset"!==d)b[a[1].trim()]=d;d=!0}return d}};p.prototype.H=function(a){return this.N(a.parsedCssText)};p.prototype.N=function(a){return a.replace(ff,"").replace(Ia,"")};p.prototype.I=function(a,b){for(var c;c=df.exec(a);){var d= -c[1];":"!==c[2]&&(b[d]=!0)}};p.prototype.ga=function(a){for(var b=Object.getOwnPropertyNames(a),c=0,d;c *"===f||"html"===f,k=0===f.indexOf(":host")&&!g;"shady"===c&&(g=f===e+" > *."+e||-1!== -f.indexOf("html"),k=!g&&0===f.indexOf(e));"shadow"===c&&(g=":host > *"===f||"html"===f,k=k&&!g);if(g||k)c=e,k&&(z&&!b.A&&(b.A=r.s(b,r.g,r.i(a),e)),c=b.A||e),d({vb:c,pb:k,Gb:g})}};p.prototype.K=function(a,b){var c={},d={},e=this,f=b&&b.__cssBuild;fa(b,function(b){e.ia(a,b,f,function(f){Ed.call(a.Db||a,f.vb)&&(f.pb?e.b(b,c):e.b(b,d))})},null,!0);return{tb:d,ob:c}};p.prototype.ha=function(a,b,c){var d=this,e=W(a),f=r.f(e.is,e.$),g=new RegExp("(?:^|[^.#[:])"+(a.extends?"\\"+f.slice(0,-1)+"\\]":f)+"($|[.:[\\s>+~])"); -e=w.get(a).G;var k=this.h(e,c);return r.c(a,e,function(a){d.D(a,b);z||kd(a)||!a.cssText||(d.B(a,k),d.l(a,g,f,c))})};p.prototype.h=function(a,b){a=a.b;var c={};if(!z&&a)for(var d=0,e=a[d];d=f._useCount&&f.parentNode&&f.parentNode.removeChild(f)); -z?e.a?(e.a.textContent=b,d=e.a):b&&(d=Ab(b,c,a.shadowRoot,e.b)):d?d.parentNode||(pf&&-1this.c&&e.shift();this.cache[a]= -e};ta.prototype.fetch=function(a,b,c){if(a=this.cache[a])for(var d=a.length-1;0<=d;d--){var e=a[d];if(this.a(e,b,c))return e}};if(!z){var Fd=new MutationObserver(nd),Gd=function(a){Fd.observe(a,{childList:!0,subtree:!0})};if(window.customElements&&!window.customElements.polyfillWrapFlushCallback)Gd(document);else{var Nb=function(){Gd(document.body)};window.HTMLImports?window.HTMLImports.whenReady(Nb):requestAnimationFrame(function(){if("loading"===document.readyState){var a=function(){Nb();document.removeEventListener("readystatechange", -a)};document.addEventListener("readystatechange",a)}else Nb()})}R=function(){nd(Fd.takeRecords())}}var Ea={},Pe=Promise.resolve(),Bb=null,pd=window.HTMLImports&&window.HTMLImports.whenReady||null,Cb,La=null,sa=null;t.prototype.Ha=function(){!this.enqueued&&sa&&(this.enqueued=!0,Rb(sa))};t.prototype.b=function(a){a.__seenByShadyCSS||(a.__seenByShadyCSS=!0,this.customStyles.push(a),this.Ha())};t.prototype.a=function(a){return a.__shadyCSSCachedStyle?a.__shadyCSSCachedStyle:a.getStyle?a.getStyle():a}; -t.prototype.c=function(){for(var a=this.customStyles,b=0;b str: return file_in +def isdir(value: Any) -> str: + """Validate that the value is an existing dir.""" + if value is None: + raise vol.Invalid('not a directory') + dir_in = os.path.expanduser(str(value)) + + if not os.path.isdir(dir_in): + raise vol.Invalid('not a directory') + if not os.access(dir_in, os.R_OK): + raise vol.Invalid('directory not readable') + return dir_in + + def ensure_list(value: Union[T, Sequence[T]]) -> Sequence[T]: """Wrap value in list if it is not one.""" if value is None: diff --git a/requirements_all.txt b/requirements_all.txt index e4831f5144355c..b78e8834a2ef3e 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -321,6 +321,9 @@ hipnotify==1.0.8 # homeassistant.components.binary_sensor.workday holidays==0.8.1 +# homeassistant.components.frontend +home-assistant-frontend==20171021.2 + # homeassistant.components.camera.onvif http://github.com/tgaugry/suds-passworddigest-py3/archive/86fc50e39b4d2b8997481967d6a7fe1c57118999.zip#suds-passworddigest-py3==0.1.2a diff --git a/requirements_test_all.txt b/requirements_test_all.txt index b6a378b3d789c1..ffe4b01d7603eb 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -70,6 +70,9 @@ hbmqtt==0.8 # homeassistant.components.binary_sensor.workday holidays==0.8.1 +# homeassistant.components.frontend +home-assistant-frontend==20171021.2 + # homeassistant.components.influxdb # homeassistant.components.sensor.influxdb influxdb==4.1.1 diff --git a/script/bootstrap b/script/bootstrap index 05e69cc4db74cf..e7034f1c33ceb5 100755 --- a/script/bootstrap +++ b/script/bootstrap @@ -5,10 +5,6 @@ set -e cd "$(dirname "$0")/.." -script/bootstrap_server -if command -v yarn >/dev/null ; then - script/bootstrap_frontend -else - echo "Frontend development not possible without Node/yarn" -fi +echo "Installing test dependencies..." +python3 -m pip install tox colorlog diff --git a/script/bootstrap_frontend b/script/bootstrap_frontend deleted file mode 100755 index d8338161e7473e..00000000000000 --- a/script/bootstrap_frontend +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -# Resolve all frontend dependencies that the application requires to develop. - -# Stop on errors -set -e - -cd "$(dirname "$0")/.." - -echo "Bootstrapping frontend..." - -git submodule update --init -cd homeassistant/components/frontend/www_static/home-assistant-polymer - -# Install node modules -yarn install - -# Install bower web components. Allow to download the components as root since the user in docker is root. -./node_modules/.bin/bower install --allow-root - -# Build files that need to be generated to run development mode -yarn dev - -cd ../../../../.. diff --git a/script/bootstrap_server b/script/bootstrap_server deleted file mode 100755 index 791adc3a0c1825..00000000000000 --- a/script/bootstrap_server +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# Resolve all server dependencies that the application requires to develop. - -# Stop on errors -set -e - -cd "$(dirname "$0")/.." - -echo "Installing test dependencies..." -python3 -m pip install tox colorlog diff --git a/script/build_frontend b/script/build_frontend deleted file mode 100755 index 3eee66daf36ad5..00000000000000 --- a/script/build_frontend +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh -# Builds the frontend for production - -# Stop on errors -set -e - -cd "$(dirname "$0")/.." - -# Clean up -rm -rf homeassistant/components/frontend/www_static/core.js* \ - homeassistant/components/frontend/www_static/compatibility.js* \ - homeassistant/components/frontend/www_static/frontend.html* \ - homeassistant/components/frontend/www_static/webcomponents-lite.js* \ - homeassistant/components/frontend/www_static/custom-elements-es5-adapter.js* \ - homeassistant/components/frontend/www_static/panels -cd homeassistant/components/frontend/www_static/home-assistant-polymer - -# Build frontend -BUILD_DEV=0 ./node_modules/.bin/gulp -cp bower_components/webcomponentsjs/webcomponents-lite.js .. -cp bower_components/webcomponentsjs/custom-elements-es5-adapter.js .. -cp build/*.js build/*.html .. -mkdir ../panels -cp build/panels/*.html ../panels -BUILD_DEV=0 ./node_modules/.bin/gulp gen-service-worker -cp build/service_worker.js .. -cd .. - -# Pack frontend -gzip -f -n -k -9 *.html *.js ./panels/*.html -cd ../../../.. - -# Generate the MD5 hash of the new frontend -script/fingerprint_frontend.py diff --git a/script/fingerprint_frontend.py b/script/fingerprint_frontend.py deleted file mode 100755 index 591d68690d2328..00000000000000 --- a/script/fingerprint_frontend.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env python3 -"""Generate a file with all md5 hashes of the assets.""" - -from collections import OrderedDict -import glob -import hashlib -import json - -fingerprint_file = 'homeassistant/components/frontend/version.py' -base_dir = 'homeassistant/components/frontend/www_static/' - - -def fingerprint(): - """Fingerprint the frontend files.""" - files = (glob.glob(base_dir + '**/*.html') + - glob.glob(base_dir + '*.html') + - glob.glob(base_dir + 'core.js') + - glob.glob(base_dir + 'compatibility.js')) - - md5s = OrderedDict() - - for fil in sorted(files): - name = fil[len(base_dir):] - with open(fil) as fp: - md5 = hashlib.md5(fp.read().encode('utf-8')).hexdigest() - md5s[name] = md5 - - template = """\"\"\"DO NOT MODIFY. Auto-generated by script/fingerprint_frontend.\"\"\" - -FINGERPRINTS = {} -""" - - result = template.format(json.dumps(md5s, indent=4)) - - with open(fingerprint_file, 'w') as fp: - fp.write(result) - - -if __name__ == '__main__': - fingerprint() diff --git a/script/gen_requirements_all.py b/script/gen_requirements_all.py index fa2cedda8abebd..d438f833cd5d87 100755 --- a/script/gen_requirements_all.py +++ b/script/gen_requirements_all.py @@ -50,6 +50,7 @@ 'haversine', 'hbmqtt', 'holidays', + 'home-assistant-frontend', 'influxdb', 'libpurecoollink', 'libsoundtouch', diff --git a/script/update_mdi.py b/script/update_mdi.py deleted file mode 100755 index f9a0a8aca9f919..00000000000000 --- a/script/update_mdi.py +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env python3 -"""Download the latest Polymer v1 iconset for materialdesignicons.com.""" - -import gzip -import os -import re -import requests -import sys - -from fingerprint_frontend import fingerprint - -GETTING_STARTED_URL = ('https://raw.githubusercontent.com/Templarian/' - 'MaterialDesign/master/site/getting-started.savvy') -DOWNLOAD_LINK = re.compile(r'(/api/download/polymer/v1/([A-Z0-9-]{36}))') -START_ICONSET = '