mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-25 18:26:35 +00:00
Add a state badge with support for icon attribute
This commit is contained in:
parent
6ccbe17664
commit
56935cbc8a
11
src/components/entity/ha-state-icon.html
Normal file
11
src/components/entity/ha-state-icon.html
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
||||||
|
|
||||||
|
<link rel="import" href="../../../bower_components/iron-icon/iron-icon.html">
|
||||||
|
|
||||||
|
<link rel="import" href="../../resources/home-assistant-icons.html">
|
||||||
|
|
||||||
|
<dom-module id="ha-state-icon">
|
||||||
|
<template>
|
||||||
|
<iron-icon icon="[[computeIcon(stateObj)]]"></iron-icon>
|
||||||
|
</template>
|
||||||
|
</dom-module>
|
17
src/components/entity/ha-state-icon.js
Normal file
17
src/components/entity/ha-state-icon.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import Polymer from '../../polymer';
|
||||||
|
|
||||||
|
import stateIcon from '../../util/state-icon';
|
||||||
|
|
||||||
|
export default new Polymer({
|
||||||
|
is: 'ha-state-icon',
|
||||||
|
|
||||||
|
properties: {
|
||||||
|
stateObj: {
|
||||||
|
type: Object,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
computeIcon(stateObj) {
|
||||||
|
return stateIcon(stateObj);
|
||||||
|
},
|
||||||
|
});
|
@ -1,7 +1,7 @@
|
|||||||
<link rel='import' href='../../../bower_components/polymer/polymer.html'>
|
<link rel='import' href='../../../bower_components/polymer/polymer.html'>
|
||||||
<link rel='import' href='../../../bower_components/iron-image/iron-image.html'>
|
<link rel='import' href='../../../bower_components/iron-image/iron-image.html'>
|
||||||
|
|
||||||
<link rel='import' href='../domain-icon.html'>
|
<link rel='import' href='./ha-state-icon.html'>
|
||||||
|
|
||||||
<dom-module id='state-badge'>
|
<dom-module id='state-badge'>
|
||||||
<style>
|
<style>
|
||||||
@ -23,25 +23,24 @@
|
|||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
domain-icon {
|
ha-state-icon {
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
transition: color .3s ease-in-out;
|
transition: color .3s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Color the icon if light or sun is on */
|
/* Color the icon if light or sun is on */
|
||||||
domain-icon[data-domain=light][data-state=on],
|
ha-state-icon[data-domain=light][data-state=on],
|
||||||
domain-icon[data-domain=switch][data-state=on],
|
ha-state-icon[data-domain=switch][data-state=on],
|
||||||
domain-icon[data-domain=sun][data-state=above_horizon] {
|
ha-state-icon[data-domain=sun][data-state=above_horizon] {
|
||||||
color: #DCC91F;
|
color: #DCC91F;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class='layout horizontal center badge'>
|
<div class='layout horizontal center badge'>
|
||||||
<domain-icon id='icon'
|
<ha-state-icon id='icon' state-obj='[[stateObj]]'
|
||||||
domain='[[stateObj.domain]]' data-domain$='[[stateObj.domain]]'
|
data-domain$='[[stateObj.domain]]' data-state$='[[stateObj.state]]'>
|
||||||
state='[[stateObj.state]]' data-state$='[[stateObj.state]]'>
|
</ha-state-icon>
|
||||||
</domain-icon>
|
|
||||||
<template is='dom-if' if='[[stateObj.attributes.entity_picture]]'>
|
<template is='dom-if' if='[[stateObj.attributes.entity_picture]]'>
|
||||||
<iron-image
|
<iron-image
|
||||||
sizing='cover' class='fit'
|
sizing='cover' class='fit'
|
||||||
|
@ -2,7 +2,7 @@ import Polymer from '../../polymer';
|
|||||||
|
|
||||||
import xyBriToRgb from '../../util/xybri-to-rgb';
|
import xyBriToRgb from '../../util/xybri-to-rgb';
|
||||||
|
|
||||||
require('../domain-icon');
|
require('./ha-state-icon');
|
||||||
|
|
||||||
export default new Polymer({
|
export default new Polymer({
|
||||||
is: 'state-badge',
|
is: 'state-badge',
|
||||||
|
1
src/util/default-icon.js
Normal file
1
src/util/default-icon.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
export default 'bookmark';
|
@ -1,3 +1,5 @@
|
|||||||
|
import defaultIcon from './default-icon';
|
||||||
|
|
||||||
export default function domainIcon(domain, state) {
|
export default function domainIcon(domain, state) {
|
||||||
switch (domain) {
|
switch (domain) {
|
||||||
case 'homeassistant':
|
case 'homeassistant':
|
||||||
@ -36,7 +38,7 @@ export default function domainIcon(domain, state) {
|
|||||||
return 'announcement';
|
return 'announcement';
|
||||||
|
|
||||||
case 'thermostat':
|
case 'thermostat':
|
||||||
return 'homeassistant-100:thermostat';
|
return 'settings-brightness';
|
||||||
|
|
||||||
case 'sensor':
|
case 'sensor':
|
||||||
return 'visibility';
|
return 'visibility';
|
||||||
@ -58,6 +60,6 @@ export default function domainIcon(domain, state) {
|
|||||||
'icons:cloud-download' : 'icons:cloud-done';
|
'icons:cloud-download' : 'icons:cloud-done';
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 'bookmark';
|
return defaultIcon;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
25
src/util/state-icon.js
Normal file
25
src/util/state-icon.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import defaultIcon from './default-icon';
|
||||||
|
import domainIcon from './domain-icon.js';
|
||||||
|
import {
|
||||||
|
util,
|
||||||
|
} from './home-assistant-js-instance';
|
||||||
|
|
||||||
|
|
||||||
|
export default function stateIcon(state) {
|
||||||
|
if (!state) {
|
||||||
|
return defaultIcon;
|
||||||
|
} else if (state.attributes.icon) {
|
||||||
|
return state.attributes.icon;
|
||||||
|
}
|
||||||
|
|
||||||
|
const unit = state.attributes.unit_of_measurement;
|
||||||
|
|
||||||
|
if (unit && state.domain === 'sensor') {
|
||||||
|
if (unit === util.temperatureUnits.UNIT_TEMP_C ||
|
||||||
|
unit === util.temperatureUnits.UNIT_TEMP_F) {
|
||||||
|
return 'homeassistant-100:thermostat';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return domainIcon(state.domain, state.state);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user