2025-10-09 10:06:29 +02:00
|
|
|
"use strict";
|
|
|
|
|
|
2025-10-09 15:42:31 +02:00
|
|
|
class trtorrent extends EventTarget {
|
2025-10-09 10:06:29 +02:00
|
|
|
#element = document.createElement('div');
|
2025-10-09 15:42:31 +02:00
|
|
|
get element() {
|
2025-10-09 10:06:29 +02:00
|
|
|
return this.#element;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#hash;
|
2025-10-09 15:42:31 +02:00
|
|
|
#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));
|
|
|
|
|
}
|
2025-10-09 10:06:29 +02:00
|
|
|
|
2025-10-09 15:42:31 +02:00
|
|
|
#serverControls = {};
|
2025-10-09 10:06:29 +02:00
|
|
|
addControl(srv, control) {
|
2025-10-09 15:42:31 +02:00
|
|
|
this.#serverControls[srv] = control;
|
|
|
|
|
this.#element.appendChild(control.element);
|
|
|
|
|
control.addEventListener('torrent-updated', this);
|
2025-10-09 10:06:29 +02:00
|
|
|
}
|
|
|
|
|
getControl(srv) {
|
2025-10-09 15:42:31 +02:00
|
|
|
return this.#serverControls[srv];
|
2025-10-09 10:06:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#servers = {};
|
|
|
|
|
getStatus(srv) {
|
|
|
|
|
return this.#servers[srv];
|
|
|
|
|
}
|
|
|
|
|
setStatus(srv, status) {
|
|
|
|
|
this.#servers[srv] = status;
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-09 11:35:35 +02:00
|
|
|
handleEvent(e) {
|
2025-10-09 10:06:29 +02:00
|
|
|
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;
|
2025-10-09 15:42:31 +02:00
|
|
|
case 'torrent-updated':
|
|
|
|
|
if (this.#name == null) {
|
|
|
|
|
this.name = e.detail.torrentInfo.name;
|
2025-10-13 15:50:31 +02:00
|
|
|
let nameChangeEvent = new CustomEvent('torrent-renamed', {
|
|
|
|
|
detail: {
|
|
|
|
|
torrentHash: this.#hash
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
this.dispatchEvent(nameChangeEvent);
|
2025-10-09 15:42:31 +02:00
|
|
|
}
|
|
|
|
|
break;
|
2025-10-09 10:06:29 +02:00
|
|
|
}
|
2025-10-09 11:35:35 +02:00
|
|
|
}
|
2025-10-09 10:06:29 +02:00
|
|
|
|
|
|
|
|
constructor(hash) {
|
2025-10-09 15:42:31 +02:00
|
|
|
super();
|
2025-10-09 10:06:29 +02:00
|
|
|
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');
|
2025-10-09 11:35:35 +02:00
|
|
|
this.#element.addEventListener('click', this);
|
2025-10-09 10:06:29 +02:00
|
|
|
this.#element.element_name = element_name;
|
|
|
|
|
this.#element.appendChild(element_name);
|
|
|
|
|
}
|
|
|
|
|
}
|