transmission/web/src/move-dialog.js

85 lines
2.0 KiB
JavaScript

/*
* This file Copyright (C) 2020 Mnemosyne LLC
*
* It may be used under the GNU GPL versions 2 or 3
* or any future license endorsed by Mnemosyne LLC.
*/
let default_path = '';
import { createDialogContainer } from './utils.js';
export class MoveDialog extends EventTarget {
constructor(controller, remote) {
super();
this.controller = controller;
this.remote = remote;
this.elements = {};
this.torrents = [];
this.show();
}
show() {
const torrents = this.controller.getSelectedTorrents();
if (torrents.length === 0) {
return;
}
default_path = default_path || torrents[0].getDownloadDir();
this.torrents = torrents;
this.elements = MoveDialog._create();
this.elements.confirm.addEventListener('click', () => this._onConfirm());
this.elements.dismiss.addEventListener('click', () => this._onDismiss());
this.elements.entry.value = default_path;
document.body.append(this.elements.root);
this.elements.entry.focus();
}
close() {
this.elements.root.remove();
this.dispatchEvent(new Event('close'));
delete this.controller;
delete this.remote;
delete this.elements;
delete this.torrents;
}
_onDismiss() {
this.close();
}
_onConfirm() {
const ids = this.torrents.map((tor) => tor.getId());
const path = this.elements.entry.value.trim();
default_path = path;
this.remote.moveTorrents(ids, path);
this.close();
}
static _create() {
const elements = createDialogContainer('move-dialog');
elements.root.setAttribute('aria-label', 'Move Torrent');
elements.heading.textContent = 'Set Torrent Location';
confirm.textContent = 'Apply';
const label = document.createElement('label');
label.setAttribute('for', 'torrent-path');
label.textContent = 'Location:';
elements.workarea.append(label);
const entry = document.createElement('input');
entry.setAttribute('type', 'text');
entry.id = 'torrent-path';
elements.entry = entry;
elements.workarea.append(entry);
return elements;
}
}