@@ -6,12 +6,48 @@ window.customCards.push({
6
6
preview : false ,
7
7
} ) ;
8
8
9
- class CustomBinaryRow extends Polymer . Element {
9
+ const LitElement = customElements . get ( "ha-panel-lovelace" ) ? Object . getPrototypeOf ( customElements . get ( "ha-panel-lovelace" ) ) : Object . getPrototypeOf ( customElements . get ( "hc-lovelace" ) ) ;
10
+ const html = LitElement . prototype . html ;
11
+ const css = LitElement . prototype . css ;
10
12
11
- static get template ( ) {
12
- return Polymer . html `
13
- < style is ="custom-style " include ="iron-flex iron-flex-alignment "> </ style >
14
- < style >
13
+ class CustomBinaryRow extends LitElement {
14
+
15
+ constructor ( ) {
16
+ super ( ) ;
17
+ this . _config = {
18
+ customTheme : false ,
19
+ reverseButtons : false ,
20
+ width : '30px' ,
21
+ height : '30px' ,
22
+ isOnColor : '#43A047' ,
23
+ isOffColor : '#f44c09' ,
24
+ buttonInactiveColor : '#759aaa' ,
25
+ customOffText : 'OFF' ,
26
+ customOnText : 'ON' ,
27
+
28
+ } ;
29
+ }
30
+
31
+ static get properties ( ) {
32
+ return {
33
+ hass : Object ,
34
+ _config : Object ,
35
+ _stateObj : Object ,
36
+ _width : String ,
37
+ _height : String ,
38
+ _leftColor : String ,
39
+ _leftText : String ,
40
+ _leftName : String ,
41
+ _leftState : Boolean ,
42
+ _rightColor : String ,
43
+ _rightText : String ,
44
+ _rightName : String ,
45
+ _rightState : Boolean ,
46
+ } ;
47
+ }
48
+
49
+ static get styles ( ) {
50
+ return css `
15
51
:host {
16
52
line-height: inherit;
17
53
}
@@ -24,72 +60,52 @@ class CustomBinaryRow extends Polymer.Element {
24
60
font-size: 10px !important;
25
61
color: inherit;
26
62
text-align: center;
27
- float : right !important ;
63
+ float: left !important;
28
64
padding: 1px;
29
65
cursor: pointer;
30
66
}
31
- </ style >
32
- < hui-generic-entity-row hass ="[[hass]] " config ="[[_config]] ">
33
- < div class ='horizontal justified layout ' on-click ="stopPropagation ">
34
- < button
35
- class ='switch '
36
- style ='[[_leftColor]];min-width:[[_width]];max-width:[[_width]];height:[[_height]] '
37
- toggles name ='[[_leftName]] '
38
- on-click ='setState '
39
- disabled ='[[_leftState]] '> [[_leftText]]</ button >
40
- < button
41
- class ='switch '
42
- style ='[[_rightColor]];min-width:[[_width]];max-width:[[_width]];height:[[_height]] '
43
- toggles name ='[[_rightName]] '
44
- on-click ='setState '
45
- disabled ='[[_rightState]] '> [[_rightText]]</ button >
46
- </ div >
47
- </ hui-generic-entity-row >
48
67
` ;
49
68
}
50
69
51
- static get properties ( ) {
52
- return {
53
- hass : {
54
- type : Object ,
55
- observer : 'hassChanged'
56
- } ,
57
- _config : Object ,
58
- _stateObj : Object ,
59
- _width : String ,
60
- _height : String ,
61
- _leftColor : String ,
62
- _leftText : String ,
63
- _leftName : String ,
64
- _leftState : Boolean ,
65
- _rightColor : String ,
66
- _rightText : String ,
67
- _rightName : String ,
68
- _rightState : Boolean ,
69
- }
70
- }
70
+ render ( ) {
71
+ return html `
72
+ < hui-generic-entity-row .hass ="${ this . hass } " .config ="${ this . _config } ">
73
+ < div id ='button-container ' class ='horizontal justified layout '>
74
+ < button
75
+ class ='switch '
76
+ style ='${ this . _leftColor } ;min-width:${ this . _width } ;max-width:${ this . _width } ;height: ${ this . _height } '
77
+ toggles name ="${ this . _leftName } "
78
+ @click =${ this . setState }
79
+ .disabled =${ this . _leftState } > ${ this . _leftText } </ button >
80
+ < button
81
+ class ='switch '
82
+ style ='${ this . _rightColor } ;min-width:${ this . _width } ;max-width:${ this . _width } ;height: ${ this . _height } '
83
+ toggles name ="${ this . _rightName } "
84
+ @click =${ this . setState }
85
+ .disabled =${ this . _rightState } > ${ this . _rightText } </ button >
86
+ </ div >
87
+ </ hui-generic-entity-row >
88
+ ` ;
89
+ }
90
+
91
+ firstUpdated ( ) {
92
+ super . firstUpdated ( ) ;
93
+ this . shadowRoot . getElementById ( 'button-container' ) . addEventListener ( 'click' , ( ev ) => ev . stopPropagation ( ) ) ;
94
+ }
71
95
72
96
setConfig ( config ) {
73
- this . _config = config ;
97
+ this . _config = { ...this . _config , ...config } ;
98
+ }
74
99
75
- this . _config = {
76
- customTheme : false ,
77
- reverseButtons : false ,
78
- width : '30px' ,
79
- height : '30px' ,
80
- isOnColor : '#43A047' ,
81
- isOffColor : '#f44c09' ,
82
- buttonInactiveColor : '#759aaa' ,
83
- customOffText : 'OFF' ,
84
- customOnText : 'ON' ,
85
- ...config
86
- } ;
100
+ updated ( changedProperties ) {
101
+ if ( changedProperties . has ( "hass" ) ) {
102
+ this . hassChanged ( ) ;
103
+ }
87
104
}
88
105
89
106
hassChanged ( hass ) {
90
-
91
107
const config = this . _config ;
92
- const stateObj = hass . states [ config . entity ] ;
108
+ const stateObj = this . hass . states [ config . entity ] ;
93
109
const custTheme = config . customTheme ;
94
110
const revButtons = config . reverseButtons ;
95
111
const buttonWidth = config . width ;
@@ -155,41 +171,33 @@ class CustomBinaryRow extends Polymer.Element {
155
171
let onname = 'on' ;
156
172
157
173
if ( revButtons ) {
158
- this . setProperties ( {
159
- _stateObj : stateObj ,
160
- _rightState : stateObj . state === 'on' ,
161
- _leftState : stateObj . state == 'off' ,
162
- _width : buttonwidth ,
163
- _height : buttonheight ,
164
- _rightName : onname ,
165
- _leftName : offname ,
166
- _rightColor : oncolor ,
167
- _leftColor : offcolor ,
168
- _rightText : ontext ,
169
- _leftText : offtext ,
170
- } ) ;
174
+ this . _stateObj = stateObj ;
175
+ this . _rightState = stateObj . state === 'on' ;
176
+ this . _leftState = stateObj . state == 'off' ;
177
+ this . _width = buttonwidth ;
178
+ this . _height = buttonheight ;
179
+ this . _rightName = onname ;
180
+ this . _leftName = offname ;
181
+ this . _rightColor = oncolor ;
182
+ this . _leftColor = offcolor ;
183
+ this . _rightText = ontext ;
184
+ this . _leftText = offtext ;
171
185
} else {
172
- this . setProperties ( {
173
- _stateObj : stateObj ,
174
- _leftState : stateObj . state === 'on' ,
175
- _rightState : stateObj . state == 'off' ,
176
- _width : buttonwidth ,
177
- _height : buttonheight ,
178
- _leftName : onname ,
179
- _rightName : offname ,
180
- _leftColor : oncolor ,
181
- _rightColor : offcolor ,
182
- _leftText : ontext ,
183
- _rightText : offtext ,
184
- } ) ;
186
+ this . _stateObj = stateObj ;
187
+ this . _leftState = stateObj . state === 'on' ;
188
+ this . _rightState = stateObj . state == 'off' ;
189
+ this . _width = buttonwidth ;
190
+ this . _height = buttonheight ;
191
+ this . _leftName = onname ;
192
+ this . _rightName = offname ;
193
+ this . _leftColor = oncolor ;
194
+ this . _rightColor = offcolor ;
195
+ this . _leftText = ontext ;
196
+ this . _rightText = offtext ;
185
197
}
186
- }
198
+ }
187
199
188
200
189
- stopPropagation ( e ) {
190
- e . stopPropagation ( ) ;
191
- }
192
-
193
201
setState ( e ) {
194
202
const state = e . currentTarget . getAttribute ( 'name' ) ;
195
203
if ( state == 'off' ) {
0 commit comments