78 lines
1.6 KiB
HTML
78 lines
1.6 KiB
HTML
<link rel="import" href="../../bower_components/polymer/polymer.html">
|
|
|
|
<link rel="import" href="../../src/util/hass-behavior.html">
|
|
|
|
<dom-module id="services-list">
|
|
<template>
|
|
<style>
|
|
ul {
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
li {
|
|
list-style: none;
|
|
line-height: 2em;
|
|
}
|
|
|
|
a {
|
|
color: var(--dark-primary-color);
|
|
}
|
|
</style>
|
|
|
|
<ul>
|
|
<template is='dom-repeat' items="[[computeDomains(serviceDomains)]]" as="domain">
|
|
<template is='dom-repeat' items="[[computeServices(serviceDomains, domain)]]" as="service">
|
|
<li><a href='#' on-click='serviceClicked'>
|
|
<span>[[domain]]</span>/<span>[[service]]</span>
|
|
</a></li>
|
|
</template>
|
|
</template>
|
|
</ul>
|
|
</template>
|
|
</dom-module>
|
|
|
|
<script>
|
|
Polymer({
|
|
is: 'services-list',
|
|
|
|
behaviors: [window.hassBehavior],
|
|
|
|
properties: {
|
|
hass: {
|
|
type: Object,
|
|
},
|
|
|
|
serviceDomains: {
|
|
type: Array,
|
|
bindNuclear: function (hass) {
|
|
return hass.serviceGetters.entityMap;
|
|
},
|
|
},
|
|
},
|
|
|
|
computeDomains: function (serviceDomains) {
|
|
return serviceDomains
|
|
.valueSeq()
|
|
.map(function (domain) { return domain.domain; })
|
|
.sort()
|
|
.toJS();
|
|
},
|
|
|
|
computeServices: function (serviceDomains, domain) {
|
|
return serviceDomains
|
|
.get(domain)
|
|
.get('services')
|
|
.keySeq()
|
|
.toArray();
|
|
},
|
|
|
|
serviceClicked: function (ev) {
|
|
ev.preventDefault();
|
|
this.fire(
|
|
'service-selected', { domain: ev.model.domain,
|
|
service: ev.model.service });
|
|
},
|
|
});
|
|
</script>
|