mirror of
https://github.com/QuiteAFancyEmerald/Holy-Unblocker.git
synced 2025-05-13 12:00:02 -04:00
Cleanup
This commit is contained in:
parent
2455cdcd2f
commit
d359819ba3
6 changed files with 317 additions and 292 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
/* -----------------------------------------------
|
||||||
|
/* Authors: QuiteAFancyEmerald
|
||||||
|
/* GNU Affero General Public License v3.0: https://www.gnu.org/licenses/agpl-3.0.en.html
|
||||||
|
/* Card Shimmer Mouse Follow Script
|
||||||
|
/* ----------------------------------------------- */
|
||||||
|
|
||||||
const shimmerEffects = document.querySelectorAll(".box-card");
|
const shimmerEffects = document.querySelectorAll(".box-card");
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,49 +1,268 @@
|
||||||
/* -----------------------------------------------
|
/* -----------------------------------------------
|
||||||
/* Authors: QuiteAFancyEmerald and OlyB
|
/* Authors: QuiteAFancyEmerald, Yoct, and OlyB
|
||||||
/* MIT license: http://opensource.org/licenses/MIT
|
/* GNU Affero General Public License v3.0: https://www.gnu.org/licenses/agpl-3.0.en.html
|
||||||
/* Common functions
|
/* MAIN Holy Unblocker LTS Common Script
|
||||||
/* ----------------------------------------------- */
|
/* ----------------------------------------------- */
|
||||||
|
|
||||||
function tryGetElement(id) {
|
function tryGetElement(id) {
|
||||||
return document.getElementById(id) || {};
|
return document.getElementById(id) || {};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the preferred apex domain name.
|
* Get the preferred apex domain name.
|
||||||
* Not exactly apex, as any subdomain other than those listed will be ignored.
|
* Not exactly apex, as any subdomain other than those listed will be ignored.
|
||||||
*/
|
**/
|
||||||
|
|
||||||
function getDomain() {
|
function getDomain() {
|
||||||
return location.host.replace(/^(www|edu|cooking|beta)\./, "");
|
return location.host.replace(/^(www|edu|cooking|beta)\./, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
// nolag = no external js (arc widget, an-lytics, etc.)
|
/* STEALTH FRAME */
|
||||||
function goFrame(url, nolag) {
|
function goFrame(url) {
|
||||||
localStorage.setItem("huframesrc", url);
|
localStorage.setItem("huframesrc", url);
|
||||||
window.location.href = nolag ? "?s&nolag" : "?s";
|
window.location.href = "?s";
|
||||||
}
|
}
|
||||||
|
|
||||||
function goToUrl(url, stealth, nolag) {
|
function goToUrl(url, stealth, nolag) {
|
||||||
if (stealth) {
|
if (stealth) {
|
||||||
goFrame(url, nolag);
|
goFrame(url, nolag);
|
||||||
} else {
|
} else {
|
||||||
window.location.href = url;
|
window.location.href = url;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* COOKIE AUTH DEMO */
|
||||||
|
|
||||||
function setAuthCookie(s, lax) {
|
function setAuthCookie(s, lax) {
|
||||||
document.cookie = s + "; expires=" + (Date.now() + 259200) + "; SameSite=" + (lax ? "Lax" : "None") + "; domain=." + getDomain() + "; path=/; Secure;";
|
document.cookie =
|
||||||
|
s +
|
||||||
|
"; expires=" +
|
||||||
|
(Date.now() + 259200) +
|
||||||
|
"; SameSite=" +
|
||||||
|
(lax ? "Lax" : "None") +
|
||||||
|
"; domain=." +
|
||||||
|
getDomain() +
|
||||||
|
"; path=/; Secure;";
|
||||||
}
|
}
|
||||||
|
|
||||||
const sx = 'bing.com' + '/search?q=';
|
/* OMNIBOX */
|
||||||
|
|
||||||
|
const sx = "bing.com" + "/search?q=";
|
||||||
|
|
||||||
function omnibox(url) {
|
function omnibox(url) {
|
||||||
if (url.substring(0, 4) == "http") {
|
if (url.substring(0, 4) == "http") {
|
||||||
return url;
|
return url;
|
||||||
} else if (url.includes("." || "")) {
|
} else if (url.includes("." || "")) {
|
||||||
return "https://" + url;
|
return "https://" + url;
|
||||||
} else {
|
} else {
|
||||||
return "https://" + sx + url;
|
return "https://" + sx + url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function uvUrl(url) {
|
||||||
|
return (
|
||||||
|
location.origin + __uv$config.prefix + __uv$config.encodeUrl(omnibox(url))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* RAMMERHEAD CONFIGURATION */
|
||||||
|
|
||||||
|
function search(input, template) {
|
||||||
|
try {
|
||||||
|
// input is a valid URL:
|
||||||
|
// eg: https://example.com, https://example.com/test?q=param
|
||||||
|
return new URL(input).toString();
|
||||||
|
} catch (err) {
|
||||||
|
// input was not a valid URL
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// input is a valid URL when http:// is added to the start:
|
||||||
|
// eg: example.com, https://example.com/test?q=param
|
||||||
|
const url = new URL(`http://${input}`);
|
||||||
|
// only if the hostname has a TLD/subdomain
|
||||||
|
if (url.hostname.includes(".")) return url.toString();
|
||||||
|
} catch (err) {
|
||||||
|
// input was not valid URL
|
||||||
|
}
|
||||||
|
|
||||||
|
return template.replace("%s", encodeURIComponent(input));
|
||||||
|
}
|
||||||
|
|
||||||
|
async function RammerheadEncode(baseUrl) {
|
||||||
|
// Hellhead
|
||||||
|
const mod = (n, m) => ((n % m) + m) % m;
|
||||||
|
const baseDictionary =
|
||||||
|
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~-";
|
||||||
|
const shuffledIndicator = "_rhs";
|
||||||
|
const generateDictionary = function () {
|
||||||
|
let str = "";
|
||||||
|
const split = baseDictionary.split("");
|
||||||
|
while (split.length > 0) {
|
||||||
|
str += split.splice(Math.floor(Math.random() * split.length), 1)[0];
|
||||||
}
|
}
|
||||||
|
return str;
|
||||||
|
};
|
||||||
|
|
||||||
|
class StrShuffler {
|
||||||
|
constructor(dictionary = generateDictionary()) {
|
||||||
|
this.dictionary = dictionary;
|
||||||
|
}
|
||||||
|
shuffle(str) {
|
||||||
|
if (str.startsWith(shuffledIndicator)) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
let shuffledStr = "";
|
||||||
|
for (let i = 0; i < str.length; i++) {
|
||||||
|
const char = str.charAt(i);
|
||||||
|
const idx = baseDictionary.indexOf(char);
|
||||||
|
if (char === "%" && str.length - i >= 3) {
|
||||||
|
shuffledStr += char;
|
||||||
|
shuffledStr += str.charAt(++i);
|
||||||
|
shuffledStr += str.charAt(++i);
|
||||||
|
} else if (idx === -1) {
|
||||||
|
shuffledStr += char;
|
||||||
|
} else {
|
||||||
|
shuffledStr += this.dictionary.charAt(
|
||||||
|
mod(idx + i, baseDictionary.length)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return shuffledIndicator + shuffledStr;
|
||||||
|
}
|
||||||
|
unshuffle(str) {
|
||||||
|
if (!str.startsWith(shuffledIndicator)) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
str = str.slice(shuffledIndicator.length);
|
||||||
|
|
||||||
|
let unshuffledStr = "";
|
||||||
|
for (let i = 0; i < str.length; i++) {
|
||||||
|
const char = str.charAt(i);
|
||||||
|
const idx = this.dictionary.indexOf(char);
|
||||||
|
if (char === "%" && str.length - i >= 3) {
|
||||||
|
unshuffledStr += char;
|
||||||
|
unshuffledStr += str.charAt(++i);
|
||||||
|
unshuffledStr += str.charAt(++i);
|
||||||
|
} else if (idx === -1) {
|
||||||
|
unshuffledStr += char;
|
||||||
|
} else {
|
||||||
|
unshuffledStr += baseDictionary.charAt(
|
||||||
|
mod(idx - i, baseDictionary.length)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return unshuffledStr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function get(url, callback, shush = false) {
|
||||||
|
var request = new XMLHttpRequest();
|
||||||
|
request.open("GET", url, true);
|
||||||
|
request.send();
|
||||||
|
|
||||||
|
request.onerror = function () {
|
||||||
|
if (!shush) console.log("Cannot communicate with the server");
|
||||||
|
};
|
||||||
|
request.onload = function () {
|
||||||
|
if (request.status === 200) {
|
||||||
|
callback(request.responseText);
|
||||||
|
} else {
|
||||||
|
if (!shush)
|
||||||
|
console.log(
|
||||||
|
'unexpected server response to not match "200". Server says "' +
|
||||||
|
request.responseText +
|
||||||
|
'"'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
var api = {
|
||||||
|
newsession(callback) {
|
||||||
|
get("/newsession", callback);
|
||||||
|
},
|
||||||
|
sessionexists(id, callback) {
|
||||||
|
get("/sessionexists?id=" + encodeURIComponent(id), function (res) {
|
||||||
|
if (res === "exists") return callback(true);
|
||||||
|
if (res === "not found") return callback(false);
|
||||||
|
console.log("unexpected response from server. received" + res);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
shuffleDict(id, callback) {
|
||||||
|
console.log("Shuffling", id);
|
||||||
|
get("/api/shuffleDict?id=" + encodeURIComponent(id), function (res) {
|
||||||
|
callback(JSON.parse(res));
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
var localStorageKey = "rammerhead_sessionids";
|
||||||
|
var localStorageKeyDefault = "rammerhead_default_sessionid";
|
||||||
|
var sessionIdsStore = {
|
||||||
|
get() {
|
||||||
|
var rawData = localStorage.getItem(localStorageKey);
|
||||||
|
if (!rawData) return [];
|
||||||
|
try {
|
||||||
|
var data = JSON.parse(rawData);
|
||||||
|
if (!Array.isArray(data)) throw "getout";
|
||||||
|
return data;
|
||||||
|
} catch (e) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
set(data) {
|
||||||
|
if (!data || !Array.isArray(data)) throw new TypeError("must be array");
|
||||||
|
localStorage.setItem(localStorageKey, JSON.stringify(data));
|
||||||
|
},
|
||||||
|
getDefault() {
|
||||||
|
var sessionId = localStorage.getItem(localStorageKeyDefault);
|
||||||
|
if (sessionId) {
|
||||||
|
var data = sessionIdsStore.get();
|
||||||
|
data.filter(function (e) {
|
||||||
|
return e.id === sessionId;
|
||||||
|
});
|
||||||
|
if (data.length) return data[0];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
setDefault(id) {
|
||||||
|
localStorage.setItem(localStorageKeyDefault, id);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
function addSession(id) {
|
||||||
|
var data = sessionIdsStore.get();
|
||||||
|
data.unshift({ id: id, createdOn: new Date().toLocaleString() });
|
||||||
|
sessionIdsStore.set(data);
|
||||||
|
}
|
||||||
|
function getSessionId() {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
var id = localStorage.getItem("session-string");
|
||||||
|
api.sessionexists(id, function (value) {
|
||||||
|
if (!value) {
|
||||||
|
console.log("Session validation failed");
|
||||||
|
api.newsession(function (id) {
|
||||||
|
addSession(id);
|
||||||
|
localStorage.setItem("session-string", id);
|
||||||
|
console.log(id);
|
||||||
|
console.log("^ new id");
|
||||||
|
resolve(id);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
resolve(id);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var ProxyHref;
|
||||||
|
|
||||||
|
return getSessionId().then((id) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
api.shuffleDict(id, function (shuffleDict) {
|
||||||
|
var shuffler = new StrShuffler(shuffleDict);
|
||||||
|
ProxyHref = "/" + id + "/" + shuffler.shuffle(baseUrl);
|
||||||
|
resolve(ProxyHref);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* To use:
|
/* To use:
|
||||||
|
@ -51,263 +270,72 @@ function omnibox(url) {
|
||||||
*
|
*
|
||||||
* Examples:
|
* Examples:
|
||||||
* goProx.corrosion("https://google.com")
|
* goProx.corrosion("https://google.com")
|
||||||
* goProx.womginx("discord.com", true)
|
* goProx.womginx("discord.com", true)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function search(input, template) {
|
|
||||||
try {
|
|
||||||
// input is a valid URL:
|
|
||||||
// eg: https://example.com, https://example.com/test?q=param
|
|
||||||
return new URL(input).toString();
|
|
||||||
} catch (err) {
|
|
||||||
// input was not a valid URL
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// input is a valid URL when http:// is added to the start:
|
|
||||||
// eg: example.com, https://example.com/test?q=param
|
|
||||||
const url = new URL(`http://${input}`);
|
|
||||||
// only if the hostname has a TLD/subdomain
|
|
||||||
if (url.hostname.includes(".")) return url.toString();
|
|
||||||
} catch (err) {
|
|
||||||
// input was not valid URL
|
|
||||||
}
|
|
||||||
|
|
||||||
return template.replace("%s", encodeURIComponent(input));
|
|
||||||
}
|
|
||||||
|
|
||||||
async function RammerheadEncode(baseUrl) {
|
|
||||||
// Hellhead
|
|
||||||
const mod = (n, m) => ((n % m) + m) % m;
|
|
||||||
const baseDictionary =
|
|
||||||
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~-";
|
|
||||||
const shuffledIndicator = "_rhs";
|
|
||||||
const generateDictionary = function () {
|
|
||||||
let str = "";
|
|
||||||
const split = baseDictionary.split("");
|
|
||||||
while (split.length > 0) {
|
|
||||||
str += split.splice(Math.floor(Math.random() * split.length), 1)[0];
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
};
|
|
||||||
|
|
||||||
class StrShuffler {
|
|
||||||
constructor(dictionary = generateDictionary()) {
|
|
||||||
this.dictionary = dictionary;
|
|
||||||
}
|
|
||||||
shuffle(str) {
|
|
||||||
if (str.startsWith(shuffledIndicator)) {
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
let shuffledStr = "";
|
|
||||||
for (let i = 0; i < str.length; i++) {
|
|
||||||
const char = str.charAt(i);
|
|
||||||
const idx = baseDictionary.indexOf(char);
|
|
||||||
if (char === "%" && str.length - i >= 3) {
|
|
||||||
shuffledStr += char;
|
|
||||||
shuffledStr += str.charAt(++i);
|
|
||||||
shuffledStr += str.charAt(++i);
|
|
||||||
} else if (idx === -1) {
|
|
||||||
shuffledStr += char;
|
|
||||||
} else {
|
|
||||||
shuffledStr += this.dictionary.charAt(
|
|
||||||
mod(idx + i, baseDictionary.length)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return shuffledIndicator + shuffledStr;
|
|
||||||
}
|
|
||||||
unshuffle(str) {
|
|
||||||
if (!str.startsWith(shuffledIndicator)) {
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
str = str.slice(shuffledIndicator.length);
|
|
||||||
|
|
||||||
let unshuffledStr = "";
|
|
||||||
for (let i = 0; i < str.length; i++) {
|
|
||||||
const char = str.charAt(i);
|
|
||||||
const idx = this.dictionary.indexOf(char);
|
|
||||||
if (char === "%" && str.length - i >= 3) {
|
|
||||||
unshuffledStr += char;
|
|
||||||
unshuffledStr += str.charAt(++i);
|
|
||||||
unshuffledStr += str.charAt(++i);
|
|
||||||
} else if (idx === -1) {
|
|
||||||
unshuffledStr += char;
|
|
||||||
} else {
|
|
||||||
unshuffledStr += baseDictionary.charAt(
|
|
||||||
mod(idx - i, baseDictionary.length)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return unshuffledStr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function get(url, callback, shush = false) {
|
|
||||||
var request = new XMLHttpRequest();
|
|
||||||
request.open("GET", url, true);
|
|
||||||
request.send();
|
|
||||||
|
|
||||||
request.onerror = function () {
|
|
||||||
if (!shush) console.log("Cannot communicate with the server");
|
|
||||||
};
|
|
||||||
request.onload = function () {
|
|
||||||
if (request.status === 200) {
|
|
||||||
callback(request.responseText);
|
|
||||||
} else {
|
|
||||||
if (!shush)
|
|
||||||
console.log(
|
|
||||||
'unexpected server response to not match "200". Server says "' +
|
|
||||||
request.responseText +
|
|
||||||
'"'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
var api = {
|
|
||||||
newsession(callback) {
|
|
||||||
get("/newsession", callback);
|
|
||||||
},
|
|
||||||
sessionexists(id, callback) {
|
|
||||||
get("/sessionexists?id=" + encodeURIComponent(id), function (res) {
|
|
||||||
if (res === "exists") return callback(true);
|
|
||||||
if (res === "not found") return callback(false);
|
|
||||||
console.log("unexpected response from server. received" + res);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
shuffleDict(id, callback) {
|
|
||||||
console.log("Shuffling", id);
|
|
||||||
get("/api/shuffleDict?id=" + encodeURIComponent(id), function (res) {
|
|
||||||
callback(JSON.parse(res));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var localStorageKey = "rammerhead_sessionids";
|
|
||||||
var localStorageKeyDefault = "rammerhead_default_sessionid";
|
|
||||||
var sessionIdsStore = {
|
|
||||||
get() {
|
|
||||||
var rawData = localStorage.getItem(localStorageKey);
|
|
||||||
if (!rawData) return [];
|
|
||||||
try {
|
|
||||||
var data = JSON.parse(rawData);
|
|
||||||
if (!Array.isArray(data)) throw "getout";
|
|
||||||
return data;
|
|
||||||
} catch (e) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
},
|
|
||||||
set(data) {
|
|
||||||
if (!data || !Array.isArray(data)) throw new TypeError("must be array");
|
|
||||||
localStorage.setItem(localStorageKey, JSON.stringify(data));
|
|
||||||
},
|
|
||||||
getDefault() {
|
|
||||||
var sessionId = localStorage.getItem(localStorageKeyDefault);
|
|
||||||
if (sessionId) {
|
|
||||||
var data = sessionIdsStore.get();
|
|
||||||
data.filter(function (e) {
|
|
||||||
return e.id === sessionId;
|
|
||||||
});
|
|
||||||
if (data.length) return data[0];
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
setDefault(id) {
|
|
||||||
localStorage.setItem(localStorageKeyDefault, id);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
function addSession(id) {
|
|
||||||
var data = sessionIdsStore.get();
|
|
||||||
data.unshift({ id: id, createdOn: new Date().toLocaleString() });
|
|
||||||
sessionIdsStore.set(data);
|
|
||||||
}
|
|
||||||
function getSessionId() {
|
|
||||||
return new Promise((resolve) => {
|
|
||||||
var id = localStorage.getItem("session-string");
|
|
||||||
api.sessionexists(id, function (value) {
|
|
||||||
if (!value) {
|
|
||||||
console.log("Session validation failed");
|
|
||||||
api.newsession(function (id) {
|
|
||||||
addSession(id);
|
|
||||||
localStorage.setItem("session-string", id);
|
|
||||||
console.log(id);
|
|
||||||
console.log("^ new id");
|
|
||||||
resolve(id);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
resolve(id);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
var ProxyHref;
|
|
||||||
|
|
||||||
return getSessionId().then((id) => {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
api.shuffleDict(id, function (shuffleDict) {
|
|
||||||
var shuffler = new StrShuffler(shuffleDict);
|
|
||||||
ProxyHref = "/" + id + "/" + shuffler.shuffle(baseUrl);
|
|
||||||
resolve(ProxyHref);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function uvUrl(url) {
|
|
||||||
return location.origin + __uv$config.prefix + __uv$config.encodeUrl(omnibox(url));
|
|
||||||
};
|
|
||||||
|
|
||||||
window.goProx = {
|
window.goProx = {
|
||||||
// `location.protocol + "//" + getDomain()` more like `location.origin`
|
// `location.protocol + "//" + getDomain()` more like `location.origin`
|
||||||
ultraviolet: function (url, stealth) {
|
ultraviolet: function (url, stealth) {
|
||||||
//setAuthCookie("__cor_auth=1", false);
|
//setAuthCookie("__cor_auth=1", false);
|
||||||
goToUrl(uvUrl(url), stealth);
|
goToUrl(uvUrl(url), stealth);
|
||||||
},
|
},
|
||||||
rammerhead: async function (url, stealth) {
|
rammerhead: async function (url, stealth) {
|
||||||
goToUrl(location.origin + await RammerheadEncode(omnibox(url)), stealth);
|
goToUrl(location.origin + (await RammerheadEncode(omnibox(url))), stealth);
|
||||||
},
|
},
|
||||||
searx: function (stealth) {
|
searx: function (stealth) {
|
||||||
goToUrl(location.protocol + "//c." + getDomain() + "/engine/", stealth);
|
goToUrl(location.protocol + "//c." + getDomain() + "/engine/", stealth);
|
||||||
},
|
},
|
||||||
libreddit: function (stealth) {
|
libreddit: function (stealth) {
|
||||||
goToUrl(location.protocol + "//c." + getDomain(), stealth);
|
goToUrl(location.protocol + "//c." + getDomain(), stealth);
|
||||||
},
|
},
|
||||||
rnav: function (stealth) {
|
rnav: function (stealth) {
|
||||||
goToUrl(location.protocol + "//client." + getDomain(), stealth);
|
goToUrl(location.protocol + "//c." + getDomain(), stealth);
|
||||||
},
|
},
|
||||||
osu: function (stealth) {
|
osu: function (stealth) {
|
||||||
goToUrl(location.origin + '/archive/osu', stealth);
|
goToUrl(location.origin + "/archive/osu", stealth);
|
||||||
},
|
},
|
||||||
mcnow: function (stealth) {
|
mcnow: function (stealth) {
|
||||||
goToUrl(uvUrl('https://now.gg/play/a/10010/b'), stealth);
|
goToUrl(uvUrl("https://now.gg/play/a/10010/b"), stealth);
|
||||||
},
|
},
|
||||||
glife: function (stealth) {
|
glife: function (stealth) {
|
||||||
goToUrl(uvUrl('https://now.gg/apps/lunime/5767/gacha-life.html'), stealth);
|
goToUrl(uvUrl("https://now.gg/apps/lunime/5767/gacha-life.html"), stealth);
|
||||||
},
|
},
|
||||||
roblox: function (stealth) {
|
roblox: function (stealth) {
|
||||||
goToUrl(uvUrl('https://now.gg/apps/roblox-corporation/5349/roblox.html'), stealth);
|
goToUrl(
|
||||||
},
|
uvUrl("https://now.gg/apps/roblox-corporation/5349/roblox.html"),
|
||||||
amongus: function (stealth) {
|
stealth
|
||||||
goToUrl(uvUrl('https://now.gg/apps/innersloth-llc/4047/among-us.html'), stealth);
|
);
|
||||||
},
|
},
|
||||||
pubg: function (stealth) {
|
amongus: function (stealth) {
|
||||||
goToUrl(uvUrl('https://now.gg/apps/proxima-beta/2609/pubg-mobile-resistance.html'), stealth);
|
goToUrl(
|
||||||
},
|
uvUrl("https://now.gg/apps/innersloth-llc/4047/among-us.html"),
|
||||||
train: function (stealth) {
|
stealth
|
||||||
goToUrl(uvUrl('https://hby.itch.io/last-train-home'), stealth);
|
);
|
||||||
},
|
},
|
||||||
village: function (stealth) {
|
pubg: function (stealth) {
|
||||||
goToUrl(uvUrl('https://kwoodhouse.itch.io/village-arsonist'), stealth);
|
goToUrl(
|
||||||
},
|
uvUrl(
|
||||||
prison: function (stealth) {
|
"https://now.gg/apps/proxima-beta/2609/pubg-mobile-resistance.html"
|
||||||
goToUrl(uvUrl('https://vimlark.itch.io/pick-up-prison'), stealth);
|
),
|
||||||
},
|
stealth
|
||||||
rpg: function (stealth) {
|
);
|
||||||
goToUrl(uvUrl('https://alarts.itch.io/die-in-the-dungeon'), stealth);
|
},
|
||||||
},
|
train: function (stealth) {
|
||||||
speed: function (stealth) {
|
goToUrl(uvUrl("https://hby.itch.io/last-train-home"), stealth);
|
||||||
goToUrl(uvUrl('https://captain4lk.itch.io/what-the-road-brings'), stealth);
|
},
|
||||||
},
|
village: function (stealth) {
|
||||||
heli: function (stealth) {
|
goToUrl(uvUrl("https://kwoodhouse.itch.io/village-arsonist"), stealth);
|
||||||
goToUrl(uvUrl('https://benjames171.itch.io/helo-storm'), stealth);
|
},
|
||||||
}
|
prison: function (stealth) {
|
||||||
};
|
goToUrl(uvUrl("https://vimlark.itch.io/pick-up-prison"), stealth);
|
||||||
|
},
|
||||||
|
rpg: function (stealth) {
|
||||||
|
goToUrl(uvUrl("https://alarts.itch.io/die-in-the-dungeon"), stealth);
|
||||||
|
},
|
||||||
|
speed: function (stealth) {
|
||||||
|
goToUrl(uvUrl("https://captain4lk.itch.io/what-the-road-brings"), stealth);
|
||||||
|
},
|
||||||
|
heli: function (stealth) {
|
||||||
|
goToUrl(uvUrl("https://benjames171.itch.io/helo-storm"), stealth);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* -----------------------------------------------
|
/* -----------------------------------------------
|
||||||
/* Authors: OlyB
|
/* Authors: OlyB
|
||||||
/* MIT license: http://opensource.org/licenses/MIT
|
/* GNU Affero General Public License v3.0: https://www.gnu.org/licenses/agpl-3.0.en.html
|
||||||
/* Settings Menu
|
/* Settings Menu
|
||||||
/* ----------------------------------------------- */
|
/* ----------------------------------------------- */
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* -----------------------------------------------
|
/* -----------------------------------------------
|
||||||
/* Authors: YÖCTDÖNALD'S, QuiteAFancyEmerald, and OlyB with help from MikeLime
|
/* Authors: YÖCTDÖNALD'S, QuiteAFancyEmerald, and OlyB with help from MikeLime
|
||||||
/* MIT license: http://opensource.org/licenses/MIT
|
/* GNU Affero General Public License v3.0: https://www.gnu.org/licenses/agpl-3.0.en.html
|
||||||
/* Hidden Links
|
/* Hidden Links
|
||||||
/* ----------------------------------------------- */
|
/* ----------------------------------------------- */
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* -----------------------------------------------
|
/* -----------------------------------------------
|
||||||
/* Authors: OlyB
|
/* Authors: OlyB
|
||||||
/* MIT license: http://opensource.org/licenses/MIT
|
/* GNU Affero General Public License v3.0: https://www.gnu.org/licenses/agpl-3.0.en.html
|
||||||
/* prSet script
|
/* prSet script
|
||||||
/* ----------------------------------------------- */
|
/* ----------------------------------------------- */
|
||||||
|
|
||||||
|
|
|
@ -32,15 +32,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
document.getElementById("frame").src = localStorage.getItem("huframesrc");
|
document.getElementById("frame").src = localStorage.getItem("huframesrc");
|
||||||
|
|
||||||
// make arc widget if nolag isn't specified
|
|
||||||
/*if (!queries.hasOwnProperty("nolag")) {
|
|
||||||
var arcw = document.createElement("script");
|
|
||||||
arcw.setAttribute("async", "");
|
|
||||||
arcw.src = "https://arc.io/widget.min.js#2BzvQ1em";
|
|
||||||
document.head.appendChild(arcw);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
</script>
|
</script>
|
||||||
<script src="assets/js/csel.js"></script>
|
<script src="assets/js/csel.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue