class WebRTCStreamerOptionsElement extends HTMLElement {
constructor() {
super();
this.shadowDOM = this.attachShadow({mode: 'open'});
this.shadowDOM.innerHTML = `
Options
`;
this.button = this.shadowDOM.getElementById("apply");
this.button.onclick = () => this.notifyOptions();
this.params = new URLSearchParams();
}
static get observedAttributes() {
return ['options'];
}
attributeChangedCallback(attrName, oldVal, newVal) {
if (attrName === "options") {
this.fillOptions();
}
}
connectedCallback() {
this.fillOptions();
}
fillOptions() {
const options = this.getAttribute("options") || "";
this.params = new URLSearchParams(options);
let optElement = this.shadowDOM.getElementById("options");
optElement.innerHTML = "";
for (let [k,v] of this.params.entries()) {
let label = document.createTextNode(k+":");
optElement.appendChild(label);
let input = document.createElement("input");
input.type = "text";
input.value = v;
input.onchange = () => this.params.set(k, input.value);
optElement.appendChild(input);
optElement.appendChild(document.createElement("br"));
}
}
notifyOptions()
{
this.setAttribute("options", this.params.toString());
this.dispatchEvent(new CustomEvent('change', {
detail: {
options: this.params.toString(),
}
}));
}
}
customElements.define('webrtc-streamer-options', WebRTCStreamerOptionsElement);