diff options
Diffstat (limited to 'src/assets/javascripts/frontend.js')
-rw-r--r-- | src/assets/javascripts/frontend.js | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/src/assets/javascripts/frontend.js b/src/assets/javascripts/frontend.js deleted file mode 100644 index ab71cc0d..00000000 --- a/src/assets/javascripts/frontend.js +++ /dev/null @@ -1,143 +0,0 @@ -class FrontEnd { - constructor({ enable, frontends, frontend, redirect }) { - this.redirects = {} - this.enable = enable - this.frontend = frontend - this.protocol = "normal" - this.protocolFallback = true - fetch("/instances/data.json") - .then(response => response.text()) - .then(async data => { - data = JSON.parse(data) - fetch("/instances/blacklist.json") - .then(response => response.text()) - .then(async blackList => { - blackList = JSON.parse(blackList) - for (const frontend in frontends) { - this.redirects[frontend] = {} - - this.redirects[frontend].cookies = [...frontends[frontend].cookies] - - for (const protocol in data[frontend]) { - this.redirects[frontend][protocol] = {} - - this.redirects[frontend][protocol].all = [...data[frontend][protocol]] - - this.redirects[frontend][protocol].custom = [] - - this.redirects[frontend][protocol].checked = [...data[frontend][protocol]] - for (const instance of blackList.cloudflare) { - const a = this.redirects[frontend][protocol].checked.indexOf(instance) - if (a > -1) this.redirects[frontend][protocol].checked.splice(a, 1) - } - for (const instance of blackList.offline) { - const a = this.redirects[frontend][protocol].checked.indexOf(instance) - if (a > -1) this.redirects[frontend][protocol].checked.splice(a, 1) - } - } - } - }) - }) - this.unifyCookies = from => - new Promise(async resolve => { - await init() - const protocolHost = utils.protocolHost(from) - const list = [...this.redirects[this.frontend][this.protocol]] - if (![...list.checked, ...list.custom].includes(protocolHost)) { - resolve() - return - } - for (const cookie of this.redirects[this.frontend].cookies) { - await utils.copyCookie(frontend, protocolHost, [...list.checked, list.custom], cookie) - } - resolve(true) - }) - - this.switchInstance = (url, disableOverride) => { - if (!this.enable && !disableOverride) return - - const protocolHost = utils.protocolHost(url) - - const list = [...this.redirects[this.frontend][this.protocol]] - if (!list.all.includes(protocolHost)) return - - let userList = [...list.checked, ...list.custom] - if (userList.length === 0 && this.protocolFallback) userList = [...list.normal.all] - - const i = userList.indexOf(protocolHost) - if (i > -1) userList.splice(i, 1) - if (userList.length === 0) return - - const randomInstance = utils.getRandomInstance(userList) - return `${randomInstance}${url.pathname}${url.search}` - } - - this.redirect = (url, type, initiator, disableOverride) => { - const result = redirect(url, type, initiator, disableOverride) - if (result == "BYPASSTAB") return "BYPASSTAB" - if (result) { - const list = [...this.redirects[this.frontend][this.protocol]] - let userList = [...list.checked, ...list.custom] - const randomInstance = utils.getRandomInstance(userList) - return `${randomInstance}${result.pathname}${result.search}` - } - } - - let init = () => new Promise(async resolve => {}) - } -} - -let Reddit = new FrontEnd({ - enable: true, - frontends: { - libreddit: { cookies: ["theme", "front_page", "layout", "wide", "post_sort", "comment_sort", "show_nsfw", "autoplay_videos", "use_hls", "hide_hls_notification", "subscriptions", "filters"] }, - teddit: { - cookies: [ - "collapse_child_comments", - "domain_instagram", - "domain_twitter", - "domain_youtube", - "flairs", - "highlight_controversial", - "nsfw_enabled", - "post_media_max_height", - "show_upvoted_percentage", - "show_upvotes", - "theme", - "videos_muted", - ], - }, - }, - frontend: "libreddit", - redirect: (url, type, initiator, disableOverride) => { - if (this.enable && !disableOverride) return - - const targets = [/^https?:\/{2}(www\.|old\.|np\.|new\.|amp\.|)reddit\.com/, /^https?:\/{2}(i\.|preview\.)redd\.it/] - if (!targets.some(rx => rx.test(url.href))) return - - if (initiator && all().includes(initiator.origin)) return "BYPASSTAB" - if (!["main_frame", "xmlhttprequest", "other", "image", "media"].includes(type)) return - - const bypassPaths = /\/(gallery\/poll\/rpan\/settings\/topics)/ - if (url.pathname.match(bypassPaths)) return - - const protocolHost = utils.protocolHost(url) - - if (url.host === "i.redd.it") { - if (this.frontend == "libreddit") return `${protocolHost}/img${url.pathname}${url.search}` - if (this.frontend == "teddit") return `${protocolHost}/pics/w:null_${url.pathname.substring(1)}${url.search}` - } else if (url.host === "redd.it") { - // https://redd.it/foo => https://libredd.it/comments/foo - if (this.frontend == "libreddit" && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) return `${protocolHost}/comments${url.pathname}${url.search}` - // https://redd.it/foo => https://teddit.net/comments/foo - if (this.frontend == "teddit" && !url.pathname.match(/^\/+[^\/]+\/+[^\/]/)) return `${protocolHost}/comments${url.pathname}${url.search}` - } else if (url.host === "preview.redd.it") { - if (this.frontend == "libreddit") return `${protocolHost}/preview/pre${url.pathname}${url.search}` - if (this.frontend == "teddit") return - } else { - return `${url.href}` - } - }, -}) - -export default {} |