|
58 | 58 |
|
59 | 59 | <script> |
60 | 60 |
|
| 61 | + |
61 | 62 | (function auto_save({mod,dom,host}){ |
62 | 63 |
|
63 | 64 | var obj = { |
|
100 | 101 | obj.init = function(){ |
101 | 102 |
|
102 | 103 |
|
| 104 | + var registry = new CustomElementRegistry(); |
| 105 | + registry.define('check-box',checkbox); |
| 106 | + |
| 107 | + var content = host.shadowRoot.cloneNode(true); |
| 108 | + |
| 109 | + var shadow = host.attachShadow({mode:'open',customElements:registry}); |
| 110 | + shadow.append(content); |
| 111 | + |
| 112 | + |
103 | 113 | }//init |
104 | 114 |
|
105 | 115 |
|
|
185 | 195 | }//savetimer |
186 | 196 |
|
187 | 197 |
|
| 198 | + //: |
| 199 | + |
| 200 | + class checkbox extends HTMLElement { |
| 201 | + |
| 202 | + constructor() { |
| 203 | + //console.log('checkbox-one'); |
| 204 | + super(); |
| 205 | + |
| 206 | + var root = this; |
| 207 | + var shadow = host.shadowRoot; |
| 208 | + var template = $(shadow,'check-box'); |
| 209 | + var content = template.content; |
| 210 | + var shadow = root.attachShadow({mode:"open"}); |
| 211 | + shadow.appendChild(content); |
| 212 | + |
| 213 | + |
| 214 | + var chk = shadow.querySelector('[type=checkbox]'); |
| 215 | + chk.onchange = e=>{ |
| 216 | + |
| 217 | + root.checked = chk.checked; |
| 218 | + if(typeof root.onchange=='function'){ |
| 219 | + root.onchange(e); |
| 220 | + } |
| 221 | + |
| 222 | + }; |
| 223 | + |
| 224 | + Object.defineProperty(root,'checked',{get:()=>chk.checked,set:v=>chk.checked=v}); |
| 225 | + |
| 226 | + if(root.hasAttribute('checked')){ |
| 227 | + root.checked = true; |
| 228 | + } |
| 229 | + if('checked' in root){ |
| 230 | + chk.checked = root.checked; |
| 231 | + } |
| 232 | + |
| 233 | + setTimeout(()=>{ |
| 234 | + |
| 235 | + var str = root.innerHTML.trim(); |
| 236 | + if(str==''){ |
| 237 | + root.innerHTML = root.id; |
| 238 | + } |
| 239 | + |
| 240 | + },50); |
| 241 | + |
| 242 | + }//constructor |
| 243 | + |
| 244 | + }//class |
| 245 | + |
| 246 | + |
188 | 247 | //: |
189 | 248 |
|
190 | 249 |
|
|
210 | 269 |
|
211 | 270 | </script> |
212 | 271 |
|
| 272 | + |
| 273 | + |
| 274 | + |
| 275 | + |
| 276 | + <template id=check-box> |
| 277 | + |
| 278 | + <style> |
| 279 | + |
| 280 | + .slider |
| 281 | + {position:relative;display:inline-flex;align-items:center;cursor:pointer;border:1px solid gray;border-radius:3px;height:30px;box-sizing:border-box;padding:0 5px} |
| 282 | + .slider input |
| 283 | + {opacity:0;width:0;height:0} |
| 284 | + .slider .label |
| 285 | + {margin-left:30px} |
| 286 | + .slider .hldr |
| 287 | + {position:absolute;top:4px;left:5px;width:30px;height:20px;background-color:#ccc} |
| 288 | + .slider .hldr:before |
| 289 | + {position:absolute;content:"";height:17px;width:17px;left:2px;bottom:2px;background-color:white;transition:.2s} |
| 290 | + .slider input:checked + .hldr |
| 291 | + {background-color:#2196F3} |
| 292 | + .slider input:checked + .hldr:before |
| 293 | + {transform:translateX(9px)} |
| 294 | + .slider .hldr |
| 295 | + {border-radius:34px} |
| 296 | + .slider .hldr:before |
| 297 | + {border-radius:50%} |
| 298 | + |
| 299 | + </style> |
| 300 | + |
| 301 | + <label id=autosave class=slider> |
| 302 | + <span class=track></span> |
| 303 | + <input type=checkbox> |
| 304 | + <span class=hldr></span> |
| 305 | + <span class=label> |
| 306 | + <slot></slot> |
| 307 | + </span> |
| 308 | + </label> |
| 309 | + |
| 310 | + </template> |
| 311 | + |
| 312 | + |
| 313 | + |
| 314 | + |
| 315 | + |
| 316 | + |
| 317 | + |
| 318 | + |
| 319 | + |
213 | 320 | </auto-save> |
214 | 321 |
|
215 | 322 |
|
0 commit comments