Files
trweb/js/trtorrent.js
2025-10-13 15:50:31 +02:00

81 lines
2.4 KiB
JavaScript

"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));
}
#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) {
super();
this.#hash = hash;
// 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);
}
}