| OLD | NEW |
| (Empty) |
| 1 <!DOCTYPE html> | |
| 2 <body> | |
| 3 | |
| 4 <form> | |
| 5 <input type="checkbox" name="foo" id="cb1" value="Shadow"> | |
| 6 <input type="submit"> | |
| 7 </form> | |
| 8 | |
| 9 <style> | |
| 10 #cb1 { | |
| 11 -webkit-appearance: none; | |
| 12 border: outset; | |
| 13 padding: 2px; | |
| 14 font-family: monospace; | |
| 15 font-size: 20px; | |
| 16 white-space: pre; | |
| 17 width: 30px; | |
| 18 height: 30px; | |
| 19 margin: 0; | |
| 20 } | |
| 21 | |
| 22 #cb1:focus { | |
| 23 outline: none; | |
| 24 } | |
| 25 </style> | |
| 26 <script> | |
| 27 cb1.updateAppearance_ = function() { | |
| 28 if (this.checked) | |
| 29 this.root_.innerHTML = '<span style="color:red;">✔</span>'; | |
| 30 else | |
| 31 this.root_.innerHTML = '<span> </span>'; | |
| 32 }; | |
| 33 | |
| 34 cb1.init = function() { | |
| 35 this.root_ = this.createShadowRoot(); | |
| 36 this.checked_ = this.hasAttribute('checked'); | |
| 37 this.updateAppearance_(); | |
| 38 | |
| 39 this.addEventListener('DOMActivate', function() { | |
| 40 this.checked = !cb1.checked; | |
| 41 this.dispatchEvent(new CustomEvent('change', true, false)); | |
| 42 }, false); | |
| 43 | |
| 44 this.__defineSetter__('checked', function(value) { | |
| 45 this.checked_ = !!value; | |
| 46 this.updateAppearance_(); | |
| 47 // FIXME: We'd like to update HTMLInputElement.prototype.checked, but it | |
| 48 // seems there are no ways to do it. Updating 'checked' HTML attribute | |
| 49 // (the default value) works for form submission because the checkbox is | |
| 50 // never dirty. | |
| 51 if (this.checked_) | |
| 52 this.setAttribute('checked', ''); | |
| 53 else | |
| 54 this.removeAttribute('checked', ''); | |
| 55 }); | |
| 56 | |
| 57 this.__defineGetter__('checked', function() { return this.checked_; }); | |
| 58 }; | |
| 59 | |
| 60 cb1.init(); | |
| 61 | |
| 62 window.onload = function() { | |
| 63 if (!window.eventSender) | |
| 64 return; | |
| 65 eventSender.mouseMoveTo(cb1.offsetLeft + 10, cb1.offsetTop + 10); | |
| 66 eventSender.mouseDown(); | |
| 67 eventSender.mouseUp(); | |
| 68 }; | |
| 69 </script> | |
| 70 </body> | |
| OLD | NEW |