| SKY MODULE - button widgets for calculator |
| <!-- TODO(ianh): implement accessibility handling once the ax service exists --> |
| |
| <script> |
| class AbstractButton extends Element { |
| constructor (hostModule) { |
| super(hostModule); |
| let selector = new SelectorQuery('.dynamic'); |
| this.addEventListener('pointer-down', (event) => { |
| selector.findAll(this.shadowRoot).every((element) => element.setAttribute('clicked')); |
| // TODO(ianh): track the pointer; if it leaves the button, cancel the click |
| // TOOD(ianh): if the pointer doesn't leave the button before being released, then fire some event on ourselves |
| module.application.document.addEventListener('pointer-up', function upHandler (event) { |
| module.application.document.removeEventListener('pointer-up', upHandler); |
| selector.findAll(this.shadowRoot).every((element) => element.removeAttribute('clicked')); |
| }); |
| }); |
| } |
| } |
| </script> |
| |
| <template id="threed-button-shadow-tree"> |
| <style> |
| /* TODO(ianh): make this shrink-wrap the contents */ |
| div { border: solid 1px; } |
| #a { border-color: #666666 #333333 #333333 #666666; } |
| #b { border-color: #EEEEEE #666666 #666666 #EEEEEE; } |
| #c { border-color: #EEEEEE #666666 #666666 #EEEEEE; } |
| #d { border-color: #EEEEEE #999999 #999999 #EEEEEE; padding: 2px 0 0 0; background: #DDDDDD; color: black; text-align: center; } |
| #a[clicked] { border-color: #666666 #333333 #333333 #666666; width: 6em; } |
| #b[clicked] { border-color: #666666 #DDDDDD #DDDDDD #666666; border-width: 1px 0 0 1px; } |
| #c[clicked] { border-color: #666666 #DDDDDD #DDDDDD #666666; border-width: 1px 0 0 1px; } |
| #d[clicked] { border-color: #999999 #DDDDDD #DDDDDD #999999; padding: 4px 0 0 2px; } |
| </style> |
| <div class="dynamic" id="a"> |
| <div class="dynamic" id="b"> |
| <div class="dynamic" id="c"> |
| <div class="dynamic" id="d"> |
| <content/> |
| </div> |
| </div> |
| </div> |
| </div> |
| </template> |
| |
| <template id="flat-button-shadow-tree"> |
| <style> |
| div { background: green; color: yellow; } |
| div[clicked] { background: yellow; color: green; } |
| </style> |
| <div class=dynamic> |
| <content/> |
| </div> |
| </template> |
| |
| <script> |
| module.exports = { |
| ThreeDButtonElement: module.registerElement( |
| class extends AbstractButton { |
| static get tagName() { return 'graybutton'; } |
| static get shadow() { return true; } |
| constructor (hostModule) { |
| super(hostModule); |
| this.shadowRoot.append(module.document.findId('threed-button-shadow-tree').cloneNode(true)); |
| } |
| } |
| ), |
| FlatButtonElement: module.registerElement( |
| class extends AbstractButton { |
| static get tagName() { return 'flatbutton'; } |
| static get shadow() { return true; } |
| constructor (hostModule) { |
| super(hostModule); |
| this.shadowRoot.append(module.document.findId('flat-shadow-tree').cloneNode(true)); |
| } |
| } |
| ), |
| }; |
| </script> |