diff --git a/src/lib/contentTable.ts b/src/lib/contentTable.ts index 620c189..b199da0 100644 --- a/src/lib/contentTable.ts +++ b/src/lib/contentTable.ts @@ -51,7 +51,7 @@ class contentTable { div.appendChild(document.createTextNode(helper.t('No items'))); this.table.appendChild(div); } - createHeading(prefix = "table-heading") { + createHeading(prefix = "table-heading"):HTMLElement { let thead = document.createElement("section"); thead.classList.add(this.headingClass); let headRow = document.createElement("header"); @@ -134,7 +134,7 @@ class contentTable { } - createActionButton(name: string, path: string, data: string) { + createActionButton(name: string, path: string, data: string):HTMLElement { let button = document.createElement("button"); button.classList.add("icon-" + name); button.setAttribute("path", path); diff --git a/src/lib/eventHandler.js b/src/lib/eventHandler.js deleted file mode 100644 index f68047c..0000000 --- a/src/lib/eventHandler.js +++ /dev/null @@ -1,42 +0,0 @@ -const eventHandler = { - add: function (eventType, target, selector, callback) { - if (typeof selector === 'function' && !callback) { - callback = selector; - selector = target; - } - if (typeof target === 'object') { - if (target.attachEvent) { - target.attachEvent('on' + eventType, function (e) { - callback.call(target, e); - }); - } - else { - target.addEventListener(eventType, function (e) { - callback.call(target, e); - }); - } - return; - } - let el = document.querySelector(target); - if (!el) { - return; - } - el.addEventListener(eventType, function (e) { - let element = e.target; - if (element === this && selector === target) { - callback.call(element, e); - return; - } - for (; element && element != this; element = element.parentNode) { - if (element.matches(selector)) { - callback.call(element, e); - break; - } - } - }); - }, - off: function (element, eventType, callback) { - element.removeEventListener(eventType, callback); - } -} -export default eventHandler; diff --git a/src/lib/http.js b/src/lib/http.js deleted file mode 100644 index cdfdab9..0000000 --- a/src/lib/http.js +++ /dev/null @@ -1,67 +0,0 @@ -const Http = class { - data; - constructor(url) { - this.url = url; - this.method = 'POST'; - this.data = null; - this.dataType = 'application/json'; - this.xhr = new XMLHttpRequest(); - } - static getInstance(url) { - return new Http(url); - } - setData(data) { - this.data = data - return this - } - setDataType($value) { - this.dataType = $value; - } - send() { - let token = this.getToken(); - this.xhr.open(this.method, this.url); - this.xhr.setRequestHeader('requesttoken', token) - this.xhr.setRequestHeader('OCS-APIREQUEST', 'true') - if (this.dataType) - this.xhr.setRequestHeader('Content-Type', this.dataType); - let callback = this.handler; - this.xhr.onload = () => { - if (typeof callback === 'function') - callback(JSON.parse(this.xhr.response)); - } - this.xhr.onerror = this.errorHandler; - this.xhr.send(JSON.stringify(this.data)); - } - getToken() { - return document.getElementsByTagName('head')[0].getAttribute('data-requesttoken') - } - setUrl(url) { - this.url = url - return this - } - setMethod(method) { - this.method = method - return this - } - setHandler(handler) { - this.handler = handler || function (data) { }; - return this; - } - setErrorHandler(handler) { - this.errorHandler = handler - return this; - } - upload(file) { - const fd = new FormData(); - this.xhr.open(this.method, this.url, true); - let callback = this.handler; - this.xhr.onload = () => { - if (typeof callback === 'function') - callback(JSON.parse(this.xhr.response)); - } - fd.append('torrentfile', file); - return this.xhr.send(fd); - } -} - -export default Http \ No newline at end of file diff --git a/src/lib/msg.js b/src/lib/msg.js deleted file mode 100644 index 814310e..0000000 --- a/src/lib/msg.js +++ /dev/null @@ -1,120 +0,0 @@ -/** - * A little class to manage a status field for a "saving" process. - * It can be used to display a starting message (e.g. "Saving...") and then - * replace it with a green success message or a red error message. - * - * - */ -export default { - /** - * Displayes a "Saving..." message in the given message placeholder - * - * @param {Object} selector Placeholder to display the message in - */ - startSaving(selector) { - this.startAction(selector, t('core', 'Saving …')) - }, - - /** - * Displayes a custom message in the given message placeholder - * - * @param {Object} selector Placeholder to display the message in - * @param {string} message Plain text message to display (no HTML allowed) - */ - startAction(selector, message) { - let el = document.querySelector(selector); - el.style.removeProperty("display") - el.textContent = message; - }, - - /** - * Displayes an success/error message in the given selector - * - * @param {Object} selector Placeholder to display the message in - * @param {Object} response Response of the server - * @param {Object} response.data Data of the servers response - * @param {string} response.data.message Plain text message to display (no HTML allowed) - * @param {string} response.status is being used to decide whether the message - * is displayed as an error/success - */ - finishedSaving(selector, response) { - this.finishedAction(selector, response) - }, - - /** - * Displayes an success/error message in the given selector - * - * @param {Object} selector Placeholder to display the message in - * @param {Object} response Response of the server - * @param {Object} response.data Data of the servers response - * @param {string} response.data.message Plain text message to display (no HTML allowed) - * @param {string} response.status is being used to decide whether the message - * is displayed as an error/success - */ - finishedAction(selector, response) { - if (response.status === 'success') { - this.finishedSuccess(selector, response.data.message) - } else { - this.finishedError(selector, response.data.message) - } - }, - - /** - * Displayes an success message in the given selector - * - * @param {Object} selector Placeholder to display the message in - * @param {string} message Plain text success message to display (no HTML allowed) - */ - finishedSuccess(selector, message) { - let el = document.querySelector(selector); - el.textContent = message; - if (el.classList.contains("error")) el.classList.remove("error"); - el.classList.add("success"); - this.fadeOut(el); - }, - - /** - * Displayes an error message in the given selector - * - * @param {Object} selector Placeholder to display the message in - * @param {string} message Plain text error message to display (no HTML allowed) - */ - finishedError(selector, message) { - let el = document.querySelector(selector); - el.textContent = message; - if (el.classList.contains("success")) el.classList.remove("success"); - el.classList.add("error"); - }, - fadeIn(element, duration = 1000) { - (function increment() { - element.style.opacity = String(0); - element.style.removeProperty("display") - let opacity = parseFloat(element.style.opacity); - if (opacity !== 1) { - setTimeout(() => { - increment(opacity + 0.1); - }, duration / 10); - } - })(); - }, - - fadeOut(element, duration = 1000) { - let opacity = parseFloat(element.style.opacity) || 1; - (function decrement() { - if ((opacity -= 0.1) < 0) { - element.style.display = 'none' - element.style.removeProperty('opacity'); - } else { - setTimeout(() => { - decrement(); - }, duration / 10); - } - })(); - }, - show(el) { - el.style.display = ''; - }, - hide(el) { - el.style.display = 'none'; - } -} \ No newline at end of file diff --git a/src/lib/ncTable.js b/src/lib/ncTable.js deleted file mode 100644 index 88ba396..0000000 --- a/src/lib/ncTable.js +++ /dev/null @@ -1,155 +0,0 @@ -import helper from '../utils/helper' -import { translate as t, translatePlural as n } from '@nextcloud/l10n' - -class ncTable { - actionLink = true; - bodyClass = "ncdownloader-table-data"; - rowClass = "table-row"; - headingClass = "table-heading"; - cellClass = "table-cell"; - //this is the parent element the table is going to append to - tableContainer = 'ncdownloader-table-wrapper'; - numRow; - table; - - constructor(heading, rows) { - this.table = document.getElementById(this.tableContainer); - if (heading && rows) { - this.table.innerHTML = ''; - this.rows = rows; - this.heading = heading; - this.actionButtons = []; - } - } - static getInstance(heading, row) { - return new ncTable(heading, row); - } - create() { - let thead = this.createHeading() - let tbody = this.createRow(); - this.table.appendChild(thead); - this.table.appendChild(tbody); - return this; - } - clear() { - this.table.innerHTML = ''; - } - loading() { - let htmlStr = '
Loading...
' - this.table.innerHTML = htmlStr; - return this; - } - noData() { - this.clear(); - let div = document.createElement('div'); - div.classList.add("no-items"); - div.appendChild(document.createTextNode(t("ncdownloader", 'No items'))); - this.table.appendChild(div); - } - createHeading(prefix = "table-heading") { - let thead = document.createElement("section"); - thead.classList.add(this.headingClass); - let headRow = document.createElement("header"); - headRow.classList.add(this.rowClass); - thead.classList.add(this.headingClass); - this.heading.forEach(name => { - let rowItem = document.createElement("div"); - rowItem.classList.add(prefix + "-" + name.toLowerCase()); - rowItem.classList.add(this.cellClass); - let text = document.createTextNode(t("ncdownloader", helper.ucfirst(name))); - rowItem.appendChild(text); - headRow.appendChild(rowItem); - }) - thead.appendChild(headRow); - return thead; - } - createRow() { - let tbody = document.createElement("section"); - tbody.classList.add(this.bodyClass); - tbody.classList.add("table-body"); - let row; - for (const element of this.rows) { - if (element === null) { - continue; - } - row = document.createElement("div"); - row.classList.add(this.rowClass); - let text; - for (let key in element) { - if (key.substring(0, 4) == 'data') { - let name = key.replace("_", "-"); - row.setAttribute(name, element[key]); - row.setAttribute("id", element[key]); - continue; - } - let rowItem = document.createElement("div"); - rowItem.classList.add(this.cellClass); - if (key === 'actions') { - rowItem.classList.add([this.cellClass, "action-item"].join("-")); - let container = document.createElement("div"); - container.classList.add("button-container"); - element[key].forEach(value => { - if (!value.name) { - return; - } - let data = value.data || ''; - container.appendChild(this.createActionButton(value.name, value.path, data)); - }) - rowItem.appendChild(container); - row.appendChild(rowItem); - continue; - } - if (typeof element[key] === 'object') { - let child = element[key]; - let div; - child.forEach(ele => { - div = document.createElement('div'); - if (helper.isHtml(ele)) { - div.innerHTML = ele; - } else { - text = document.createTextNode(ele); - div.appendChild(text); - } - rowItem.appendChild(div); - }) - rowItem.setAttribute("id", [this.cellClass, key].join("-")); - row.appendChild(rowItem); - continue; - } - text = document.createTextNode(element[key]); - rowItem.appendChild(text); - rowItem.setAttribute("id", [this.cellClass, key].join("-")); - row.appendChild(rowItem); - } - tbody.appendChild(row); - } - return tbody; - - } - - createActionButton(name, path, data) { - let button = document.createElement("button"); - button.classList.add("icon-" + name); - button.setAttribute("path", path); - button.setAttribute("data", data); - if (name == 'refresh') { - name = 'Redownload'; - } - button.setAttribute("data-tippy-content", helper.ucfirst(name)); - button.setAttribute("title", helper.ucfirst(name)); - return button; - } - - createActionCell(cell) { - let div = document.createElement("div"); - let button = document.createElement("button"); - button.classList.add("icon-more", "action-button"); - button.setAttribute("id", "action-links-button"); - div.classList.add("action-item"); - div.appendChild(button); - //div.appendChild(actionLinks); - cell.appendChild(div); - } -} - -export default ncTable; \ No newline at end of file diff --git a/src/lib/settingsForm.js b/src/lib/settingsForm.js deleted file mode 100644 index 95c392c..0000000 --- a/src/lib/settingsForm.js +++ /dev/null @@ -1,111 +0,0 @@ -class settingsForm { - parent = "custom-aria2-settings-container"; - constructor() { - - } - static getInstance() { - return new this(); - } - setParent(selector) { - this.parent = selector; - return this; - } - create(parent, element) { - let label = this._createLabel(element.name, element.id) - let input = this._createInput(element); - //let saveBtn = this._createSaveBtn(element.id); - let cancelBtn = this._createCancelBtn("has-content"); - let container = this._createContainer(element.id); - [label, input, cancelBtn].forEach(ele => { - container.appendChild(ele); - }) - - return parent.prepend(container); - } - - createCustomInput(keyId, valueId) { - let div = this._createContainer(keyId + "-container") - div.appendChild(this._createInput({ id: keyId })); - div.appendChild(this._createInput({ id: valueId })); - div.appendChild(this._createCancelBtn()); - return div; - } - - createInput(element) { - let div = document.createElement("div"); - div.classList.add(this.parent); - /* element.forEach(element => { - let label = document.createElement('label'); - label.setAttribute("for", element.id); - let text = document.createTextNode(element.name); - label.appendChild(text); - div.appendChild(label); - // div.appendChild(this._createInput(element)); - });*/ - div.appendChild(this._createInput(element)); - let button = document.createElement("button"); - //button.setAttribute("type",'button') - button.classList.add("icon-close"); - div.appendChild(button); - button = document.createElement("input"); - button.setAttribute('type', 'button'); - button.setAttribute('value', 'save'); - button.setAttribute("data-rel", this.parent); - div.appendChild(button); - return div; - - } - _createContainer(id) { - let div = document.createElement("div"); - div.classList.add(id); - return div; - } - _createCancelBtn(className = '') { - let button = document.createElement("button"); - if (className) - button.classList.add(className); - //button.setAttribute("type",'button') - button.classList.add("icon-close"); - return button; - } - _createSaveBtn(id) { - let button = document.createElement("input"); - button.setAttribute('type', 'button'); - button.setAttribute('value', 'save'); - button.setAttribute("data-rel", id + "-container"); - return button; - } - _createLabel(name, id) { - name = name.replace('_', '-'); - let label = document.createElement("lable"); - label.setAttribute("for", id); - let text = document.createTextNode(name); - label.appendChild(text); - return label; - } - _createInput(data) { - let input = document.createElement('input'); - let type = data.type || "text"; - let placeholder = data.placeholder || 'Leave empty if no value needed'; - let value = data.value || ''; - input.setAttribute('type', type); - input.setAttribute('id', data.id); - input.setAttribute("name", data.name || data.id); - if (type === 'text') { - input.setAttribute('value', value); - input.setAttribute('placeholder', placeholder); - } - input.classList.add('form-input-' + type); - return input; - } - - render(data) { - let parent = document.getElementById(this.parent) - for (const element of data) { - this.create(parent, element) - } - } - -} - -export default settingsForm \ No newline at end of file diff --git a/src/lib/settingsForm.ts b/src/lib/settingsForm.ts index bf39a12..5749d51 100644 --- a/src/lib/settingsForm.ts +++ b/src/lib/settingsForm.ts @@ -15,11 +15,11 @@ class settingsForm { static getInstance() { return new this(); } - setParent(selector: string) { + setParent(selector: string):settingsForm { this.parent = selector; return this; } - create(parent: HTMLElement, element: dataItems) { + create(parent: HTMLElement, element: dataItems):void { let label = this._createLabel(element.name, element.id) let input = this._createInput(element); //let saveBtn = this._createSaveBtn(element.id); @@ -32,7 +32,7 @@ class settingsForm { return parent.prepend(container); } - createCustomInput(keyId:string, valueId:string) { + createCustomInput(keyId:string, valueId:string):HTMLElement { let div = this._createContainer(keyId + "-container") let items:dataItems = { id:keyId, @@ -46,12 +46,12 @@ class settingsForm { return div; } - _createContainer(id: string) { + _createContainer(id: string):HTMLElement { let div = document.createElement("div"); div.classList.add(id); return div; } - _createCancelBtn(className = '') { + _createCancelBtn(className = ''):HTMLElement { let button = document.createElement("button"); if (className) button.classList.add(className); @@ -59,14 +59,14 @@ class settingsForm { button.classList.add("icon-close"); return button; } - _createSaveBtn(id: string) { + _createSaveBtn(id: string):HTMLElement { let button = document.createElement("input"); button.setAttribute('type', 'button'); button.setAttribute('value', 'save'); button.setAttribute("data-rel", id + "-container"); return button; } - _createLabel(name: string, id: string) { + _createLabel(name: string, id: string):HTMLElement { name = name.replace('_', '-'); let label = document.createElement("lable"); label.setAttribute("for", id); @@ -74,7 +74,7 @@ class settingsForm { label.appendChild(text); return label; } - _createInput(data: dataItems) { + _createInput(data: dataItems):HTMLElement { let input = document.createElement('input'); let type = data.type || "text"; let placeholder = data.placeholder || 'Leave empty if no value needed'; @@ -89,7 +89,6 @@ class settingsForm { input.classList.add('form-input-' + type); return input; } - render(data: data) { let parent = document.getElementById(this.parent) for (const element of data) { diff --git a/src/lib/tooltip.js b/src/lib/tooltip.js deleted file mode 100644 index b73a7f5..0000000 --- a/src/lib/tooltip.js +++ /dev/null @@ -1,50 +0,0 @@ -import $ from 'jquery' - -class Tooltip { - id = "ncdownloader-tooltip"; - messageNode; - style = {}; - text; - constructor(element, text) { - if (typeof element !== 'string' && !(element instanceof HTMLElement)) - throw ("invalid element!"); - this.element = typeof element == 'object' ? element : document.querySelector(element); - this.style = { - position: 'fixed', - display: 'block', - } - this.text = text || element.getAttribute("data-text"); - } - create(id) { - this.messageNode = document.createElement("div"); - this.messageNode.classList.add(this.id); - this.messageNode.setAttribute("id", this.id); - this.messageNode.style.display = this.style.display; - this.messageNode.style.position = this.style.position; - this.messageNode.style.zIndex = 10000; - let div = document.createElement('div'); - div.setAttribute("id", id); - let text = document.createTextNode(this.text); - div.appendChild(text); - this.messageNode.appendChild(div); - this.setPosition(); - return this; - } - render() { - document.body.appendChild(this.messageNode); - } - html() { - return this.messageNode; - } - setPosition(bottomMargin, leftMargin) { - bottomMargin = bottomMargin || 20; - leftMargin = leftMargin || 0; - let rect = this.element.getBoundingClientRect(); - let top = (rect['top'] + bottomMargin) + "px"; - let left = (rect['left'] - leftMargin) + "px"; - this.messageNode.style.top = top; - this.messageNode.style.left = left - } -} - -export default Tooltip; \ No newline at end of file diff --git a/src/utils/clipboard.js b/src/utils/clipboard.js deleted file mode 100644 index 4d1c646..0000000 --- a/src/utils/clipboard.js +++ /dev/null @@ -1,66 +0,0 @@ -import Tooltip from "../lib/tooltip"; - -class Clipboard { - element; - text; - - constructor(element, text) { - if (typeof element !== 'string' && !(element instanceof HTMLElement)) - throw ("invalid element!"); - this.element = typeof element == 'object' ? element : document.querySelector(element); - this.text = text || element.getAttribute("data-text"); - } - - _copy(text) { - let textArea = document.createElement("textarea"); - textArea.value = text; - - textArea.style.top = "0"; - textArea.style.left = "0"; - textArea.style.position = "fixed"; - - document.body.appendChild(textArea); - textArea.focus(); - textArea.select(); - let result; - try { - result = document.execCommand('copy'); - //console.log('copied using exceCommand'); - - } catch (err) { - console.error('failed to copy', err); - result = false; - } finally { - document.body.removeChild(textArea); - } - if (result) { - this.ShowMsg("Copied!"); - } - } - - ShowMsg(msg) { - let tip = new Tooltip(this.element, msg); - let html = tip.create('copy-alert').html(); - document.body.appendChild(html); - const callback = (element) => { - element.remove() - } - setTimeout(() => { - callback(html) - }, 1000); - } - - Copy() { - if (!navigator.clipboard) { - return this._copy(this.text); - } - return navigator.clipboard.writeText(this.text).then(() => { - this.ShowMsg("Copied!"); - }, function (err) { - console.error('failed to copy text: ', err); - }); - } - -} - -export default Clipboard; \ No newline at end of file