Separate per-server controls from torrents

The buttons are still broken, will fix later
This commit is contained in:
2025-10-09 10:06:29 +02:00
parent 9d13a71dc1
commit f21bac01f4
5 changed files with 273 additions and 181 deletions

59
js/trtorrent.js Normal file
View File

@@ -0,0 +1,59 @@
"use strict";
class trtorrent {
#element = document.createElement('div');
getElement() {
return this.#element;
}
#hash;
#name = '## NAME NOT SET ##';
#element_server = {};
addControl(srv, control) {
this.#element_server[srv] = control;
this.#element.appendChild(control.getElement());
}
getControl(srv) {
return this.#element_server[srv];
}
#servers = {};
getStatus(srv) {
return this.#servers[srv];
}
setStatus(srv, status) {
this.#servers[srv] = status;
}
#handler(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;
}
}
constructor(hash) {
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.#handler.bind(this));
this.#element.element_name = element_name;
this.#element.appendChild(element_name);
}
}