| SKY MODULE - radio button and radio button group |
| <!-- accessibility handling not implemented yet, pending mojo service --> |
| |
| <!-- <radio> --> |
| <template id="radio-shadow"> |
| <style> |
| :host { width: 1em; height: 1em; border: solid; background: white; } |
| :host[checked] { background: black; } |
| </style> |
| </template> |
| <script> |
| module.exports.RadioElement = module.registerElement({ |
| tagName: 'radio', |
| shadow: true, |
| constructor: class extends Element { |
| constructor (module) { |
| super(module); |
| this.addEventListener('click', (event) => this.checked = true); |
| this.shadowRoot.append(module.document.findId('radio-shadow').content.cloneNode(true)); |
| } |
| get checked () { |
| return this.hasAttribute('checked'); |
| } |
| set checked (value) { |
| if (value) |
| this.setAttribute('checked', ''); |
| else |
| this.removeAttribute('checked'); |
| } |
| get value () { |
| return this.getAttribute('name'); |
| } |
| set value (value) { |
| this.setAttribute('value', value); |
| } |
| attributeChanged(name, oldValue, newValue) { |
| if ((name == 'checked') && (newValue != null)) |
| if (this.parentNode instanceof module.exports.RadioGroupElement) |
| this.parentNode.setChecked(this); |
| } |
| }, |
| }); |
| </script> |
| |
| <!-- <radiogroup> --> |
| <template id="radiogroup-shadow"> |
| <style> |
| :host { padding: 1em; border: thin solid; } |
| </style> |
| </template> |
| <script> |
| module.exports.RadioGroupElement = module.registerElement{ |
| tagName: 'radiogroup', |
| shadow: true, |
| constructor: (class extends Element { |
| constructor (module) { |
| super(module); |
| this.shadowRoot.append(module.document.findId('radiogroup-shadow').content.cloneNode(true)); |
| } |
| get value () { |
| let children = this.getChildNodes(); |
| for (let child of children) |
| if (child instanceof module.exports.RadioElement) |
| if (child.checked) |
| return child.name; |
| return ''; |
| } |
| set value (name) { |
| let children = this.getChildNodes(); |
| for (let child of children) |
| if (child instanceof module.exports.RadioElement) |
| if (child.value == name) |
| child.checked = true; |
| } |
| setChecked(radio) { |
| if (!((radio instanceof module.exports.Radio) && radio.parentNode == this)) |
| throw; |
| let children = this.getChildNodes(); |
| for (let child of children) |
| if (child instanceof module.exports.RadioElement) |
| if (child != radio) |
| child.checked = false; |
| } |
| }, |
| }); |
| </script> |