50 lines
1 KiB
TypeScript
50 lines
1 KiB
TypeScript
|
import { Communicator } from "../../communication";
|
||
|
import "./popup.scss";
|
||
|
|
||
|
const con = new Communicator();
|
||
|
|
||
|
class ExtensionToggle extends HTMLButtonElement {
|
||
|
isON: boolean = false;
|
||
|
textContent: string = "OFF";
|
||
|
|
||
|
public set on(v: boolean) {
|
||
|
if (this.isON == v) {
|
||
|
return;
|
||
|
}
|
||
|
this.isON = v;
|
||
|
this.render();
|
||
|
}
|
||
|
public get on(): boolean {
|
||
|
return this.isON;
|
||
|
}
|
||
|
|
||
|
public render() {
|
||
|
this.textContent = this.on ? "ON" : "OFF";
|
||
|
}
|
||
|
|
||
|
constructor() {
|
||
|
super();
|
||
|
this.addEventListener("click", () => {
|
||
|
this.on = !this.on;
|
||
|
|
||
|
const toggleEvent = new CustomEvent("extensionToggled", {
|
||
|
detail: this.on,
|
||
|
});
|
||
|
this.dispatchEvent(toggleEvent);
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
customElements.define("extension-toggle", ExtensionToggle, {
|
||
|
extends: "button",
|
||
|
});
|
||
|
|
||
|
const toggle = <ExtensionToggle>(
|
||
|
document.querySelector("button[is=extension-toggle]")
|
||
|
);
|
||
|
toggle.addEventListener("extensionToggled", (e: CustomEvent) =>
|
||
|
Communicator.setEnabled(e.detail)
|
||
|
);
|
||
|
|
||
|
con.setEnabledCallback = (v) => (toggle.on = v);
|
||
|
Communicator.getEnabled().then((v) => (toggle.on = v));
|