| Index: js/io-toggle.js |
| =================================================================== |
| new file mode 100644 |
| --- /dev/null |
| +++ b/js/io-toggle.js |
| @@ -0,0 +1,89 @@ |
| +/* |
| + * This file is part of Adblock Plus <https://adblockplus.org/>, |
| + * Copyright (C) 2006-present eyeo GmbH |
| + * |
| + * Adblock Plus is free software: you can redistribute it and/or modify |
| + * it under the terms of the GNU General Public License version 3 as |
| + * published by the Free Software Foundation. |
| + * |
| + * Adblock Plus is distributed in the hope that it will be useful, |
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| + * GNU General Public License for more details. |
| + * |
| + * You should have received a copy of the GNU General Public License |
| + * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| + */ |
| + |
| +"use strict"; |
| + |
| +const IOElement = require("./io-element"); |
| +const {boolean} = IOElement.utils; |
| + |
| +class IOToggle extends IOElement |
| +{ |
| + // action, checked, and disabled should be reflected down the button |
| + static get observedAttributes() |
| + { |
| + return ["action", "checked", "disabled"]; |
| + } |
| + |
| + created() |
| + { |
| + this.addEventListener("click", this); |
| + this.render(); |
| + } |
| + |
| + get checked() |
| + { |
| + return this.hasAttribute("checked"); |
| + } |
| + |
| + set checked(value) |
| + { |
| + boolean.attribute(this, "checked", value); |
| + this.render(); |
| + } |
| + |
| + get disabled() |
| + { |
| + return this.hasAttribute("disabled"); |
| + } |
| + |
| + set disabled(value) |
| + { |
| + boolean.attribute(this, "disabled", value); |
| + this.render(); |
| + } |
| + |
| + onclick(event) |
| + { |
| + if (!this.disabled) |
| + { |
| + this.checked = !this.checked; |
| + if (this.ownerDocument.activeElement !== this.child) |
| + { |
| + this.child.focus(); |
| + } |
| + this.dispatchEvent(new CustomEvent("change", { |
| + bubbles: true, |
| + cancelable: true, |
| + detail: this.checked |
| + })); |
| + } |
| + } |
| + |
| + render() |
| + { |
| + this.html` |
| + <button |
| + role="checkbox" |
| + disabled="${this.disabled}" |
| + data-action="${this.action}" |
| + aria-checked="${this.checked}" |
| + aria-disabled="${this.disabled}" |
| + />`; |
| + } |
| +} |
| + |
| +IOToggle.define("io-toggle"); |