Files
ncdownloader/src/inputAction.js
2021-09-11 15:01:51 +08:00

105 lines
3.7 KiB
JavaScript

import helper from './helper'
import $ from 'jquery'
import Http from './http'
import 'tippy.js/dist/tippy.css';
import { translate as t, translatePlural as n } from '@nextcloud/l10n'
import inputBox from './inputBox'
import nctable from './ncTable'
const basePath = "/apps/ncdownloader";
const createInputBox = (event, type) => {
event.preventDefault();
event.stopPropagation();
//let id = event.target.closest("div").getAttribute('id');
let inputID = event.target.closest("div").dataset.inputbox;
let inputElement = inputID ? document.getElementById(inputID) : null;
if (inputElement) {
inputElement.remove();
}
let height = $(window).scrollTop();
if (height > 50)
$("html, body").animate({ scrollTop: 0 }, "fast");
let name;
switch (type) {
case "ytdl":
name = t("ncdownloader", 'YTDL Download');
break;
case "search":
name = t("ncdownloader", 'Search');
break;
default:
name = t("ncdownloader", 'New Download');
}
let container;
if (type === 'search') {
container = inputBox.getInstance(name, type).addSpinner().create();
//container.appendChild(inputBox.createLoading());
} else {
container = inputBox.getInstance(name, type).create();
}
$("#ncdownloader-form-wrapper").append(container);
}
const toggleButton = element => {
if (!element.previousSibling) {
return;
}
if (element.style.display === 'none') {
element.style.display = 'block'
element.previousSibling.style.display = 'none';
} else {
element.style.display = 'none'
element.previousSibling.style.display = 'block';
}
}
const inputHandler = (event) => {
event.preventDefault();
let element = event.target;
// element.textContent = '';
//$(element).append(inputBox.createLoading());
toggleButton(element);
let inputData = helper.getData('form-input-wrapper');
let inputValue = inputData.form_input_text;
if (inputData.type !== 'search' && !helper.isURL(inputValue) && !helper.isMagnetURI(inputValue)) {
helper.message(t("ncdownloader", "Invalid url"));
return;
}
if (inputData.type === 'ytdl') {
helper.message(t("ncdownloader", "YTDL Download initiated"));
}
if (inputData.type === 'search') {
//there is a scheduled 60s-interval update running in the background, this is to prevent it from running when searching
helper.enabledPolling = 0;
nctable.getInstance().loading();
}
const successCallback = (data, element) => {
//data = JSON.parse(data.target.response)
if (data !== null && data.hasOwnProperty("file")) {
helper.message(t("ncdownloader", "Downloading" + " " + data.file));
}
toggleButton(element);
if (data && data.title) {
const tableInst = nctable.getInstance(data.title, data.row);
tableInst.actionLink = false;
tableInst.rowClass = "table-row-search";
tableInst.create();
}
}
const path = inputData.path || basePath + "/new";
let url = helper.generateUrl(path);
Http.getInstance(url).setData(inputData).setHandler(function (data) {
successCallback(data, element);
}).send();
}
export default {
run: function () {
$("#app-navigation").on("click", "#new-download-ytdl", (event) => createInputBox(event, 'ytdl'));
$("#app-navigation").on("click", "#new-download", (event) => createInputBox(event, ''));
$("#app-navigation").on("click", "#torrent-search-button", (event) => createInputBox(event, 'search'));
$("#ncdownloader-form-wrapper").on("click", "#form-input-button", (event) => inputHandler(event))
}
}