"use strict"; class trtorrent extends EventTarget { #element = document.createElement('div'); get element() { return this.#element; } #hash; #name; get name() { return this.#name == null ? this.#hash : this.#name; } set name(value) { this.#name = value; nukeChildren(this.element.element_name); this.element.element_name.appendChild(document.createTextNode(this.name)); } #magnetLink; get magnet() { return this.#magnetLink; } #serverControls = {}; addControl(srv, control) { this.#serverControls[srv] = control; this.#element.appendChild(control.element); control.addEventListener('torrent-updated', this); } getControl(srv) { return this.#serverControls[srv]; } #servers = {}; getStatus(srv) { return this.#servers[srv]; } setStatus(srv, status) { this.#servers[srv] = status; } handleEvent(e) { switch (e.type) { case 'click': if (e.currentTarget.hasAttributeNS('trweb', 'torrentlistfield')) { switch (e.currentTarget.getAttributeNS('trweb', 'torrentlistfield')) { case 'entry': e.currentTarget.classList.toggle('trweb_hide_buttons'); e.stopPropagation(); break; } } break; case 'torrent-updated': if (this.#name == null) { this.name = e.detail.torrentInfo.name; let nameChangeEvent = new CustomEvent('torrent-renamed', { detail: { torrentHash: this.#hash } }); this.dispatchEvent(nameChangeEvent); } break; } } constructor(hash, magnet = null) { super(); this.#hash = hash; this.#magnetLink = magnet; // set up DOM structure let element_name = document.createElement('div'); element_name.classList.add('trweb_torrentlistname', 'col'); element_name.setAttributeNS('trweb', 'fieldid', 'displayname'); this.#element.torrent = this; this.#element.classList.add('trweb_torrentlistentry', 'trweb_hide_buttons', 'row'); this.#element.setAttributeNS('trweb', 'torrentlistfield', 'entry'); this.#element.addEventListener('click', this); this.#element.element_name = element_name; this.#element.appendChild(element_name); } }