/* @license This file Copyright © Mnemosyne LLC. It may be used under GPLv2 (SPDX: GPL-2.0-only), GPLv3 (SPDX: GPL-3.0-only), or any future license endorsed by Mnemosyne LLC. License text can be found in the licenses/ folder. */ 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; } 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 = torrents[0].getDownloadDir(); 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(); 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; } }