From b146ce07149c1920a273f85c23c8138632f89a8a Mon Sep 17 00:00:00 2001 From: Daniel Date: Sat, 11 Nov 2023 17:02:42 +0100 Subject: Add TekstoLibre, frontend for Tekstowo.pl --- src/assets/javascripts/utils.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/assets/javascripts/utils.js') diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index e85b1115..6a420ee8 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -10,6 +10,8 @@ function camelCase(str) { function protocolHost(url) { if (url.username && url.password) return `${url.protocol}//${url.username}:${url.password}@${url.host}` + if (url.pathname == "/TekstoLibre/" && url.host.endsWith("github.io")) // workaround + return `${url.protocol}//${url.host}${url.pathname.slice(0, -1)}` return `${url.protocol}//${url.host}` } -- cgit 1.4.1 From 57c978b6483cb5d0655fe6b1d898be816c4f36df Mon Sep 17 00:00:00 2001 From: Daniel Date: Sat, 11 Nov 2023 18:12:36 +0100 Subject: Add jsdoc types for some functions For VSCode completion --- src/assets/javascripts/localise.js | 3 +++ src/assets/javascripts/services.js | 37 +++++++++++++++++++++++++++++++ src/assets/javascripts/utils.js | 45 ++++++++++++++++++++++++++++++++++++++ src/pages/options/index.js | 21 +++++++++++++++++- 4 files changed, 105 insertions(+), 1 deletion(-) (limited to 'src/assets/javascripts/utils.js') diff --git a/src/assets/javascripts/localise.js b/src/assets/javascripts/localise.js index 34ccd66b..c0936873 100644 --- a/src/assets/javascripts/localise.js +++ b/src/assets/javascripts/localise.js @@ -1,6 +1,9 @@ window.browser = window.browser || window.chrome function localisePage() { + /** + * @param {string} tag + */ function getMessage(tag) { return tag.replace(/__MSG_(\w+)__/g, (_match, v1) => { return v1 ? browser.i18n.getMessage(v1) : null diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 1a1afa14..7f00b7cf 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -30,6 +30,12 @@ function all(service, frontend, options, config) { return instances } +/** + * @param {string} service + * @param {URL} url + * @param {{}} config + * @param {string} frontend + */ function regexArray(service, url, config, frontend) { let targetList = config.services[service].targets if (frontend && 'excludeTargets' in config.services[service].frontends[frontend]) { @@ -44,11 +50,24 @@ function regexArray(service, url, config, frontend) { return false } +/** + * @param {URL} url + * @param {string} type + * @param {URL} initiator + * @param {boolean} forceRedirection + */ async function redirectAsync(url, type, initiator, forceRedirection) { await init() return redirect(url, type, initiator, forceRedirection) } +/** + * @param {URL} url + * @param {string} type + * @param {URL} initiator + * @param {boolean} forceRedirection + * @returns {string | undefined} + */ function redirect(url, type, initiator, forceRedirection) { if (type != "main_frame" && type != "sub_frame" && type != "image") return let randomInstance @@ -545,6 +564,10 @@ function redirect(url, type, initiator, forceRedirection) { } } +/** + * @param {URL} url + * @param {*} returnFrontend + */ function computeService(url, returnFrontend) { return new Promise(async resolve => { const config = await utils.getConfig() @@ -569,6 +592,10 @@ function computeService(url, returnFrontend) { }) } +/** + * @param {URL} url + * @param {string} customService + */ function switchInstance(url, customService) { return new Promise(async resolve => { let options = await utils.getOptions() @@ -599,6 +626,9 @@ function switchInstance(url, customService) { }) } +/** + * @param {URL} url + */ async function reverse(url) { let options = await utils.getOptions() let config = await utils.getConfig() @@ -774,6 +804,10 @@ function processUpdate() { }) } +/** + * @param {URL} url + * @param {boolean} test + */ async function copyRaw(url, test) { const newUrl = await reverse(url) if (newUrl) { @@ -794,6 +828,9 @@ async function copyRaw(url, test) { } } +/** + * @param {URL} url + */ function isException(url) { if (!options.exceptions) return false let exceptions = options.exceptions diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index e85b1115..f7b9fd73 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -1,18 +1,49 @@ window.browser = window.browser || window.chrome +/** + * @param {Array.} instances + * @returns {T} + */ function getRandomInstance(instances) { return instances[~~(instances.length * Math.random())] } +/** + * @param {string} str + */ function camelCase(str) { return str.charAt(0).toUpperCase() + str.slice(1) } +/** + * @param {URL} url + */ function protocolHost(url) { if (url.username && url.password) return `${url.protocol}//${url.username}:${url.password}@${url.host}` return `${url.protocol}//${url.host}` } +/** + * @typedef FrontendInfo + * @prop {boolean} instanceList + * @prop {string} name + * @prop {string} url + */ + +/** + * @typedef {Object} Service + * @prop {Object.} frontends + * @prop {Object} options + */ + +/** + * @typedef {Object} Config + * @prop {Object.} services + */ + +/** + * @returns {Promise} + */ function getConfig() { return new Promise(resolve => { fetch("/config.json") @@ -24,6 +55,14 @@ function getConfig() { }) } +/** + * @typedef {Object} Option + * @prop {string} frontend + */ + +/** + * @returns {Promise>} + */ function getOptions() { return new Promise(resolve => browser.storage.local.get("options", r => { @@ -106,6 +145,9 @@ function getList(options) { }) } +/** + * @param {string} href + */ function pingOnce(href) { return new Promise(async resolve => { let started @@ -130,6 +172,9 @@ function pingOnce(href) { }) } +/** + * @param {string} href + */ function ping(href) { return new Promise(async resolve => { let average = 0 diff --git a/src/pages/options/index.js b/src/pages/options/index.js index dd1a6ff8..fcc51298 100644 --- a/src/pages/options/index.js +++ b/src/pages/options/index.js @@ -17,6 +17,9 @@ for (const a of document.getElementById("links").getElementsByTagName("a")) { config = await utils.getConfig() options = await utils.getOptions() +/** + * @param {string} service + */ async function changeFrontendsSettings(service) { options = await utils.getOptions() const opacityDiv = document.getElementById(`${service}-opacity`) @@ -95,6 +98,9 @@ async function changeFrontendsSettings(service) { frontend_name_element.href = config.services[service].frontends[divs[service].frontend.value].url } +/** + * @param {string} path + */ async function loadPage(path) { options = await utils.getOptions() for (const section of document.getElementById("pages").getElementsByTagName("section")) section.style.display = "none" @@ -251,6 +257,13 @@ async function processCustomInstances(frontend, document) { }) } +/** + * @param {string} frontend + * @param {*} networks + * @param {*} document + * @param {*} redirects + * @param {*} blacklist + */ async function createList(frontend, networks, document, redirects, blacklist) { const pingCache = await utils.getPingCache() const options = await utils.getOptions() @@ -331,6 +344,9 @@ const r = window.location.href.match(/#(.*)/) if (r) loadPage(r[1]) else loadPage("general") +/** + * @param {string} frontend + */ async function ping(frontend) { const instanceElements = [ ...document.getElementById(frontend).getElementsByClassName("custom-checklist")[0].getElementsByTagName('x'), @@ -357,6 +373,9 @@ async function ping(frontend) { } } +/** + * @param {number} time + */ function processTime(time) { let text let color @@ -377,4 +396,4 @@ function processTime(time) { return { color, text } -} \ No newline at end of file +} -- cgit 1.4.1 From d9121aa5d8fc3df647ca5fe40cbd168b5a62dfdb Mon Sep 17 00:00:00 2001 From: Or <> Date: Sat, 18 Nov 2023 17:40:35 +0200 Subject: switchInstance returns next instance instead of random --- src/assets/javascripts/services.js | 4 ++-- src/assets/javascripts/utils.js | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) (limited to 'src/assets/javascripts/utils.js') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 7f00b7cf..6fa6767f 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -605,7 +605,7 @@ function switchInstance(url, customService) { if (customService) { const instancesList = options[options[customService].frontend] if (instancesList !== undefined) { - resolve(`${utils.getRandomInstance(instancesList)}${url.pathname}${url.search}`) + resolve(`${utils.getNextInstance(url.origin, instancesList)}${url.pathname}${url.search}`) } } else { for (const service in config.services) { @@ -618,7 +618,7 @@ function switchInstance(url, customService) { resolve() return } - resolve(`${utils.getRandomInstance(instancesList)}${url.pathname}${url.search}`) + resolve(`${utils.getNextInstance(url.origin, instancesList)}${url.pathname}${url.search}`) return } } diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index f7b9fd73..0cc5331b 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -8,6 +8,23 @@ function getRandomInstance(instances) { return instances[~~(instances.length * Math.random())] } +/** + * @param {string} currentInstanceUrl + * @param {Array.} instances + * @returns {T} + */ +function getNextInstance(currentInstanceUrl, instances) { + const currentInstanceIndex = instances.indexOf(currentInstanceUrl); + + if (currentInstanceIndex === -1){ + return getRandomInstance(instances); + } + + const nextInstanceIndex = (currentInstanceIndex + 1) % instances.length; + + return instances[nextInstanceIndex]; +} + /** * @param {string} str */ @@ -195,6 +212,7 @@ function ping(href) { export default { getRandomInstance, + getNextInstance, protocolHost, getList, getBlacklist, -- cgit 1.4.1