From 5f96c40ceeed09a8814dcb64bf4efd2303c57f0d Mon Sep 17 00:00:00 2001 From: quartinal Date: Sun, 19 Jan 2025 06:59:52 -0800 Subject: [PATCH] IIOAOAOOODDJDBHCDCHCJDZHCSFDUYEH --- compressWasm.cjs | 59 ++-- eagler-files/wasm/1.8/Main/bootstrap.js | 24 +- eagler-files/wasm/1.8/Main/index.html | 122 ++++---- index.html | 354 ++++++++++++------------ js/darkmode.js | 132 ++++----- js/ga4.js | 102 +++---- js/helperFunctions.js | 92 +++--- js/isValidTag.js | 58 ++-- js/main.js | 112 ++++---- js/obfuscateScripts.js | 22 ++ js/popupPrompt.js | 31 +++ json/html-tags-void.json | 32 +-- json/html-tags.json | 238 ++++++++-------- netlify.toml | 26 +- package.json | 2 +- prettyBytes.cjs | 122 ++++++++ tsup.config.js | 26 +- vercel.json | 24 +- 18 files changed, 881 insertions(+), 697 deletions(-) create mode 100644 js/obfuscateScripts.js create mode 100644 js/popupPrompt.js create mode 100644 prettyBytes.cjs diff --git a/compressWasm.cjs b/compressWasm.cjs index 94e1d51..17d632b 100644 --- a/compressWasm.cjs +++ b/compressWasm.cjs @@ -1,30 +1,31 @@ -const { readFileSync, writeFileSync } = require('node:fs'); -const fg = require('fast-glob'); - -let brotliWasm; - -(() => { - brotliWasm = require('brotli-wasm'); -})(); - -const { compress } = brotliWasm; - -(( - /** @type {string} */ - globPattern -) => { - console.warn('Warning: If you provide more than two files as arguments'); - console.warn('it will only compress the first file due to performance'); - console.warn('reasons. You can change this behavior by modifying the'); - console.warn('function calling at the end of the script.'); - - for (const file of fg.globSync(globPattern)) { - const compressedFile = compress(readFileSync(file), { - quality: 11, - }); - - console.log(`Compressed ${file} from ${readFileSync(file).length} to ${compressedFile.length} bytes`); - - writeFileSync(file, compressedFile); - } +const { readFileSync, writeFileSync } = require('node:fs'); +const fg = require('fast-glob'); +const prettyBytes = require('./prettyBytes.cjs'); + +let brotliWasm; + +(() => { + brotliWasm = require('brotli-wasm'); +})(); + +const { compress } = brotliWasm; + +(( + /** @type {string} */ + globPattern +) => { + console.warn('Warning: If you provide more than two glob patterns as arguments'); + console.warn('it will only compress the first glob pattern due to performance'); + console.warn('reasons. You can change this behavior by modifying the'); + console.warn('function calling at the end of the script.'); + + for (const file of fg.globSync(globPattern)) { + const compressedFile = compress(readFileSync(file), { + quality: 11, + }); + + console.log(`Compressed ${file} from ${prettyBytes(readFileSync(file).length)} to ${prettyBytes(compressedFile.length)}`); + + writeFileSync(file, compressedFile); + } })(process.argv[2]); \ No newline at end of file diff --git a/eagler-files/wasm/1.8/Main/bootstrap.js b/eagler-files/wasm/1.8/Main/bootstrap.js index 1062d55..e8afb0a 100644 --- a/eagler-files/wasm/1.8/Main/bootstrap.js +++ b/eagler-files/wasm/1.8/Main/bootstrap.js @@ -1,12 +1,12 @@ -(function(){'use strict';function g(a){console.log("LoaderBootstrap: [INFO] "+a)}function n(a){console.error("LoaderBootstrap: [ERROR] "+a)}var q=null; -function r(){const a=[];for(var c=0;64>c;++c)a["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charCodeAt(c)]=c;a[45]=62;a[95]=63;return function(b,d){var e=b.length-d;if(0>16&255,f[h++]=d>>8&255,f[h++]=d&255;2===e?(d=a[b.charCodeAt(k)]<<2|a[b.charCodeAt(k+1)]>>4,f[h++]=d&255):1===e&&(d=a[b.charCodeAt(k)]<<10|a[b.charCodeAt(k+1)]<<4|a[b.charCodeAt(k+2)]>>2,f[h++]=d>>8&255,f[h++]=d&255);return f.buffer}}function u(){return new Promise(function(a){setTimeout(a,20)})}function v(a){return new Promise(function(c){fetch(a,{cache:"force-cache"}).then(function(b){return b.arrayBuffer()}).then(c).catch(function(b){n("Failed to fetch URL! "+b);c(null)})})} -function w(a){return a.startsWith("data:application/octet-stream;base64,")?new Promise(function(c){v(a).then(function(b){if(b)c(b);else{console.log("LoaderBootstrap: [WARN] Failed to decode base64 via fetch, doing it the slow way instead...");try{q||=r();var d=q(a,37);c(d)}catch(e){n("Failed to decode base64! "+e),c(null)}}})}):v(a)} -function x(a,c){const b=document.createElement("h2");b.style.color="#AA0000";b.style.padding="25px";b.style.fontFamily="sans-serif";b.style.marginBlock="0px";b.appendChild(document.createTextNode(c));a.appendChild(b);c=document.createElement("h4");c.style.color="#AA0000";c.style.padding="25px";c.style.fontFamily="sans-serif";c.style.marginBlock="0px";c.appendChild(document.createTextNode("Try again later"));a.style.backgroundColor="white";a.appendChild(c)} -window.main=async function(){if("undefined"===typeof window.eaglercraftXOpts)n("window.eaglercraftXOpts is not defined!"),alert("window.eaglercraftXOpts is not defined!");else{var a=window.eaglercraftXOpts.container;if("string"!==typeof a)n("window.eaglercraftXOpts.container is not a string!"),alert("window.eaglercraftXOpts.container is not a string!");else{var c=window.eaglercraftXOpts.assetsURI;if("string"!==typeof c)if("object"===typeof c&&"object"===typeof c[0]&&"string"===typeof c[0].url)c=c[0].url; -else{n("window.eaglercraftXOpts.assetsURI is not a string!");alert("window.eaglercraftXOpts.assetsURI is not a string!");return}var b=document.getElementById(a);if(b){for(;a=b.lastChild;)b.removeChild(a);a=document.createElement("div");a.style.width="100%";a.style.height="100%";a.style.setProperty("image-rendering","pixelated");a.style.background='center / contain no-repeat url("data:image/png;base64,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") white'; -b.appendChild(a);c.startsWith("data:")?(g('Downloading EPW file ""...'),c=await w(c)):(g('Downloading EPW file "'+c+'"...'),c=await v(c));var d=!1;c?384>c.byteLength&&(n("The EPW file is too short"),d=!0):d=!0;if(d)b.removeChild(a),x(b,"Failed to download EPW file!"),n("Failed to download EPW file!");else{var e=new DataView(c);if(608649541!==e.getUint32(0,!0)||1297301847!==e.getUint32(4,!0))n("The file is not an EPW file"),d=!0;var f=c.byteLength;e.getUint32(8,!0)!==f&&(n("The EPW file is the wrong length"), -d=!0);if(d)b.removeChild(a),x(b,"EPW file is invalid!"),n("EPW file is invalid!");else{var l=new TextDecoder("utf-8"),h=e.getUint32(100,!0),k=e.getUint32(104,!0),m=e.getUint32(108,!0),p=e.getUint32(112,!0);if(0>h||h+k>f||0>m||m+p>f)n("The EPW file contains an invalid offset (component: splash)"),d=!0;if(d)b.removeChild(a),x(b,"EPW file is invalid!"),n("EPW file is invalid!");else{h=new Uint8Array(c,h,k);m=new Uint8Array(c,m,p);l=URL.createObjectURL(new Blob([h],{type:l.decode(m)}));g("Loaded splash img: "+ -l);a.style.background='center / contain no-repeat url("'+l+'"), 0px 0px / 1000000% 1000000% no-repeat url("'+l+'") white';await u();p=e.getUint32(164,!0);h=e.getUint32(168,!0);m=e.getUint32(180,!0);e=e.getUint32(184,!0);if(0>p||p+h>f||0>m||m+e>f)n("The EPW file contains an invalid offset (component: loader)"),d=!0;if(d)b.removeChild(a),x(b,"EPW file is invalid!"),n("EPW file is invalid!");else{a=new Uint8Array(c,p,h);a=URL.createObjectURL(new Blob([a],{type:"text/javascript;charset=utf-8"}));g("Loaded loader.js: "+ -l);d=new Uint8Array(c,m,e);d=URL.createObjectURL(new Blob([d],{type:"application/wasm"}));g("Loaded loader.wasm: "+d);f={};for(const [t,y]of Object.entries(window.eaglercraftXOpts))"container"!==t&&"assetsURI"!==t&&(f[t]=y);window.__eaglercraftXLoaderContextPre={rootElement:b,eaglercraftXOpts:f,theEPWFileBuffer:c,loaderWASMURL:d,splashURL:l};g("Appending loader.js to document...");b=document.createElement("script");b.type="text/javascript";b.src=a;document.head.appendChild(b)}}}}}else b='window.eaglercraftXOpts.container "'+ -a+'" is not a known element id!',n(b),alert(b)}}};}).call(this); +(function(){'use strict';function g(a){console.log("LoaderBootstrap: [INFO] "+a)}function n(a){console.error("LoaderBootstrap: [ERROR] "+a)}var q=null; +function r(){const a=[];for(var c=0;64>c;++c)a["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charCodeAt(c)]=c;a[45]=62;a[95]=63;return function(b,d){var e=b.length-d;if(0>16&255,f[h++]=d>>8&255,f[h++]=d&255;2===e?(d=a[b.charCodeAt(k)]<<2|a[b.charCodeAt(k+1)]>>4,f[h++]=d&255):1===e&&(d=a[b.charCodeAt(k)]<<10|a[b.charCodeAt(k+1)]<<4|a[b.charCodeAt(k+2)]>>2,f[h++]=d>>8&255,f[h++]=d&255);return f.buffer}}function u(){return new Promise(function(a){setTimeout(a,20)})}function v(a){return new Promise(function(c){fetch(a,{cache:"force-cache"}).then(function(b){return b.arrayBuffer()}).then(c).catch(function(b){n("Failed to fetch URL! "+b);c(null)})})} +function w(a){return a.startsWith("data:application/octet-stream;base64,")?new Promise(function(c){v(a).then(function(b){if(b)c(b);else{console.log("LoaderBootstrap: [WARN] Failed to decode base64 via fetch, doing it the slow way instead...");try{q||=r();var d=q(a,37);c(d)}catch(e){n("Failed to decode base64! "+e),c(null)}}})}):v(a)} +function x(a,c){const b=document.createElement("h2");b.style.color="#AA0000";b.style.padding="25px";b.style.fontFamily="sans-serif";b.style.marginBlock="0px";b.appendChild(document.createTextNode(c));a.appendChild(b);c=document.createElement("h4");c.style.color="#AA0000";c.style.padding="25px";c.style.fontFamily="sans-serif";c.style.marginBlock="0px";c.appendChild(document.createTextNode("Try again later"));a.style.backgroundColor="white";a.appendChild(c)} +window.main=async function(){if("undefined"===typeof window.eaglercraftXOpts)n("window.eaglercraftXOpts is not defined!"),alert("window.eaglercraftXOpts is not defined!");else{var a=window.eaglercraftXOpts.container;if("string"!==typeof a)n("window.eaglercraftXOpts.container is not a string!"),alert("window.eaglercraftXOpts.container is not a string!");else{var c=window.eaglercraftXOpts.assetsURI;if("string"!==typeof c)if("object"===typeof c&&"object"===typeof c[0]&&"string"===typeof c[0].url)c=c[0].url; +else{n("window.eaglercraftXOpts.assetsURI is not a string!");alert("window.eaglercraftXOpts.assetsURI is not a string!");return}var b=document.getElementById(a);if(b){for(;a=b.lastChild;)b.removeChild(a);a=document.createElement("div");a.style.width="100%";a.style.height="100%";a.style.setProperty("image-rendering","pixelated");a.style.background='center / contain no-repeat url("data:image/png;base64,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") white'; +b.appendChild(a);c.startsWith("data:")?(g('Downloading EPW file ""...'),c=await w(c)):(g('Downloading EPW file "'+c+'"...'),c=await v(c));var d=!1;c?384>c.byteLength&&(n("The EPW file is too short"),d=!0):d=!0;if(d)b.removeChild(a),x(b,"Failed to download EPW file!"),n("Failed to download EPW file!");else{var e=new DataView(c);if(608649541!==e.getUint32(0,!0)||1297301847!==e.getUint32(4,!0))n("The file is not an EPW file"),d=!0;var f=c.byteLength;e.getUint32(8,!0)!==f&&(n("The EPW file is the wrong length"), +d=!0);if(d)b.removeChild(a),x(b,"EPW file is invalid!"),n("EPW file is invalid!");else{var l=new TextDecoder("utf-8"),h=e.getUint32(100,!0),k=e.getUint32(104,!0),m=e.getUint32(108,!0),p=e.getUint32(112,!0);if(0>h||h+k>f||0>m||m+p>f)n("The EPW file contains an invalid offset (component: splash)"),d=!0;if(d)b.removeChild(a),x(b,"EPW file is invalid!"),n("EPW file is invalid!");else{h=new Uint8Array(c,h,k);m=new Uint8Array(c,m,p);l=URL.createObjectURL(new Blob([h],{type:l.decode(m)}));g("Loaded splash img: "+ +l);a.style.background='center / contain no-repeat url("'+l+'"), 0px 0px / 1000000% 1000000% no-repeat url("'+l+'") white';await u();p=e.getUint32(164,!0);h=e.getUint32(168,!0);m=e.getUint32(180,!0);e=e.getUint32(184,!0);if(0>p||p+h>f||0>m||m+e>f)n("The EPW file contains an invalid offset (component: loader)"),d=!0;if(d)b.removeChild(a),x(b,"EPW file is invalid!"),n("EPW file is invalid!");else{a=new Uint8Array(c,p,h);a=URL.createObjectURL(new Blob([a],{type:"text/javascript;charset=utf-8"}));g("Loaded loader.js: "+ +l);d=new Uint8Array(c,m,e);d=URL.createObjectURL(new Blob([d],{type:"application/wasm"}));g("Loaded loader.wasm: "+d);f={};for(const [t,y]of Object.entries(window.eaglercraftXOpts))"container"!==t&&"assetsURI"!==t&&(f[t]=y);window.__eaglercraftXLoaderContextPre={rootElement:b,eaglercraftXOpts:f,theEPWFileBuffer:c,loaderWASMURL:d,splashURL:l};g("Appending loader.js to document...");b=document.createElement("script");b.type="text/javascript";b.src=a;document.head.appendChild(b)}}}}}else b='window.eaglercraftXOpts.container "'+ +a+'" is not a known element id!',n(b),alert(b)}}};}).call(this); diff --git a/eagler-files/wasm/1.8/Main/index.html b/eagler-files/wasm/1.8/Main/index.html index 2ed00ba..e9dc0a1 100644 --- a/eagler-files/wasm/1.8/Main/index.html +++ b/eagler-files/wasm/1.8/Main/index.html @@ -1,62 +1,62 @@ - - - - - - - - EaglercraftX 1.8 WASM-GC - - - - - - - - - - - - - - - + + + + + + + + EaglercraftX 1.8 WASM-GC + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html index d67abbe..4ce6027 100644 --- a/index.html +++ b/index.html @@ -1,173 +1,181 @@ - - - - - EaglerCraftX - - - - - - - - - - - - - - - - - - - - - - - -
-

Welcome to EaglerCraftX

-
-
-
-
- - -
-
-
-

Site views counter:

-
- View Counter -
-
-
-

These clients might be outdated.

-

Please give our Gitea repository a star if you like this site.

-

Server List and Mod List also at the bottom if you need it.

-

Have any questions, bug reports, or suggestions? Join our Discord server by pressing the button below!

- Discord Server -

Scroll down to the bottom for buttons/links.

-

WASM usually has better performance but may not work on some browsers

-
- -
-

DANGER ZONE

- Reset All Local Data - - - - -
-
- - - - + + + + + + + EaglerCraftX + + + + + + + + + + + + + + + + + + + + + + + +
+

Welcome to EaglerCraftX

+
+
+
+
+ + +
+
+
+

Site views counter:

+
+ View Counter +
+
+
+

These clients might be outdated.

+

Please give our Gitea repository a star if you like this site.

+

Server List and Mod List also at the bottom if you need it.

+

Have any questions, bug reports, or suggestions? Join our Discord server by pressing the button below!

+ Discord Server +

Scroll down to the bottom for buttons/links.

+

WASM usually has better performance but may not work on some browsers

+
+ +
+

DANGER ZONE

+ Reset All Local Data + + + + +
+
+ + + + diff --git a/js/darkmode.js b/js/darkmode.js index 5bf6a9a..c58823b 100644 --- a/js/darkmode.js +++ b/js/darkmode.js @@ -1,66 +1,66 @@ -import { - hexToRGB, - pushStyles, - selectClass, - selectId, - selectTag, -} from "./helperFunctions.js"; - -global.querySelectorAll = document.querySelectorAll; - -$(function() { - function applyStyles(elements, styles) { - elements.forEach(element => pushStyles(element, styles)); - } - - function updateDarkMode(isChecked = true) { - const body = document.body.id ? selectId(document.body.id) : selectTag('body'); - const commonStyles = isChecked ? { - backgroundColor: hexToRGB('#141414'), - color: hexToRGB('#f1f1f1') - } : { - backgroundColor: '#f1f1f1', - color: 'black', - backgroundImage: "url('/images/grass-background.jpg')" - }; - - pushStyles(body, commonStyles); - - applyStyles(document.querySelectorAll('p'), { color: commonStyles.color }); - applyStyles([selectTag('h2'), selectTag('h1')], { color: commonStyles.color }); - - if (isChecked) { - pushStyles(selectTag('h1'), { - textShadow: '-0px 0 white, 0 0px white, 0px 0 white, 0 -0px white' - }); - pushStyles(selectClass('footer'), { backgroundColor: hexToRGB('#6C8592') }); - pushStyles(selectClass('source-btn'), { backgroundColor: hexToRGB('#ff6847') }); - applyStyles(document.querySelectorAll('button'), { backgroundColor: hexToRGB('#30d3d2') }); - applyStyles(document.querySelectorAll('.version-text'), { color: hexToRGB('#f1f1f1') }); - pushStyles(document.querySelector('.danger-zone'), { color: '#ff6847' }); - pushStyles(document.querySelector('.modal'), { color: '#ff3c00' }); - localStorage.setItem('darkModeOn', true); - } else { - pushStyles(selectTag('h1'), { - textShadow: '-0px 0 white, 0 0px white, 0px 0 white, 0 -0px white' - }); - pushStyles(selectClass('footer'), { backgroundColor: '#000000', color: '#ffffff' }); - pushStyles(selectClass('source-btn'), { backgroundColor: '#0095ff' }); - applyStyles(document.querySelectorAll('button'), { backgroundColor: '#4caf50' }); - applyStyles(document.querySelectorAll('.version-text'), { color: 'black' }); - pushStyles(document.querySelector('.danger-zone'), { color: '#010101' }); - pushStyles(document.querySelector('.modal'), { color: '#010101' }); - localStorage.removeItem("darkModeOn"); - } - } - - const darkModeCheckbox = document.getElementById('darkModeCheckbox'); - if (localStorage.getItem('darkModeOn') === 'true') { - darkModeCheckbox.checked = true; - } - updateDarkMode(darkModeCheckbox.checked); - - $("#darkModeCheckbox").on("change", function() { - updateDarkMode(darkModeCheckbox.checked); - }); -}); +import { + hexToRGB, + pushStyles, + selectClass, + selectId, + selectTag, +} from "./helperFunctions.js"; + +global.querySelectorAll = document.querySelectorAll; + +$(function() { + function applyStyles(elements, styles) { + elements.forEach(element => pushStyles(element, styles)); + } + + function updateDarkMode(isChecked = true) { + const body = document.body.id ? selectId(document.body.id) : selectTag('body'); + const commonStyles = isChecked ? { + backgroundColor: hexToRGB('#141414'), + color: hexToRGB('#f1f1f1') + } : { + backgroundColor: '#f1f1f1', + color: 'black', + backgroundImage: "url('/images/grass-background.jpg')" + }; + + pushStyles(body, commonStyles); + + applyStyles(document.querySelectorAll('p'), { color: commonStyles.color }); + applyStyles([selectTag('h2'), selectTag('h1')], { color: commonStyles.color }); + + if (isChecked) { + pushStyles(selectTag('h1'), { + textShadow: '-0px 0 white, 0 0px white, 0px 0 white, 0 -0px white' + }); + pushStyles(selectClass('footer'), { backgroundColor: hexToRGB('#6C8592') }); + pushStyles(selectClass('source-btn'), { backgroundColor: hexToRGB('#ff6847') }); + applyStyles(document.querySelectorAll('button'), { backgroundColor: hexToRGB('#30d3d2') }); + applyStyles(document.querySelectorAll('.version-text'), { color: hexToRGB('#f1f1f1') }); + pushStyles(document.querySelector('.danger-zone'), { color: '#ff6847' }); + pushStyles(document.querySelector('.modal'), { color: '#ff3c00' }); + localStorage.setItem('darkModeOn', true); + } else { + pushStyles(selectTag('h1'), { + textShadow: '-0px 0 white, 0 0px white, 0px 0 white, 0 -0px white' + }); + pushStyles(selectClass('footer'), { backgroundColor: '#000000', color: '#ffffff' }); + pushStyles(selectClass('source-btn'), { backgroundColor: '#0095ff' }); + applyStyles(document.querySelectorAll('button'), { backgroundColor: '#4caf50' }); + applyStyles(document.querySelectorAll('.version-text'), { color: 'black' }); + pushStyles(document.querySelector('.danger-zone'), { color: '#010101' }); + pushStyles(document.querySelector('.modal'), { color: '#010101' }); + localStorage.removeItem("darkModeOn"); + } + } + + const darkModeCheckbox = document.getElementById('darkModeCheckbox'); + if (localStorage.getItem('darkModeOn') === 'true') { + darkModeCheckbox.checked = true; + } + updateDarkMode(darkModeCheckbox.checked); + + $("#darkModeCheckbox").on("change", function() { + updateDarkMode(darkModeCheckbox.checked); + }); +}); diff --git a/js/ga4.js b/js/ga4.js index 6fdb858..adc1efb 100644 --- a/js/ga4.js +++ b/js/ga4.js @@ -1,51 +1,51 @@ -function addGoogleAnalyticsTags() { - const currentOrigin = window.location.origin; - const allowedOrigins = [ - "https://eaglercraftx1-8.github.io", - "https://eaglercraftx1-8.netlify.app", - "https://eaglercraftx1-8.onrender.com", - "https://fastest.eaglercraft.win", - "https://notproxiedclient.eaglercraft.win", - "https://client.eaglercraft.win", - "https://client2.eaglercraft.win", - "https://client3.eaglercraft.win" - ]; - - const trackingIds = { - "https://eaglercraftx1-8.github.io": "G-C44R8LD9MC", - "https://eaglercraftx1-8.netlify.app": "G-0R2ZXFSYVT", - "https://eaglercraftx1-8.onrender.com": "G-MND1TVBSXV", - "https://fastest.eaglercraft.win": "G-0FMCWKD9KG", - "https://notproxiedclient.eaglercraft.win": "G-QWHQVSNLB6", - "https://client.eaglercraft.win": "G-SGELV1H17J", - "https://client2.eaglercraft.win": "G-995EPK8DXR", - "https://client3.eaglercraft.win": "G-3M7CR3HRJV" - }; - - let trackingId = "G-81F615LDEZ"; // Default fallback tracking ID - - if (allowedOrigins.includes(currentOrigin)) { - trackingId = trackingIds[currentOrigin]; - } - - console.log("Current Origin:", currentOrigin); // Log the origin to debug - console.log("Using Tracking ID:", trackingId); // Log the tracking ID to debug - - if (trackingId) { - const analyticsScript = document.createElement('script'); - analyticsScript.async = true; - analyticsScript.src = `https://www.googletagmanager.com/gtag/js?id=${trackingId}`; - document.head.appendChild(analyticsScript); - - const scriptContent = document.createElement('script'); - scriptContent.innerHTML = ` - window.dataLayer = window.dataLayer || []; - function gtag(){dataLayer.push(arguments);} - gtag('js', new Date()); - gtag('config', '${trackingId}'); - `; - document.head.appendChild(scriptContent); - } -} - -addGoogleAnalyticsTags(); +function addGoogleAnalyticsTags() { + const currentOrigin = window.location.origin; + const allowedOrigins = [ + "https://eaglercraftx1-8.github.io", + "https://eaglercraftx1-8.netlify.app", + "https://eaglercraftx1-8.onrender.com", + "https://fastest.eaglercraft.win", + "https://notproxiedclient.eaglercraft.win", + "https://client.eaglercraft.win", + "https://client2.eaglercraft.win", + "https://client3.eaglercraft.win" + ]; + + const trackingIds = { + "https://eaglercraftx1-8.github.io": "G-C44R8LD9MC", + "https://eaglercraftx1-8.netlify.app": "G-0R2ZXFSYVT", + "https://eaglercraftx1-8.onrender.com": "G-MND1TVBSXV", + "https://fastest.eaglercraft.win": "G-0FMCWKD9KG", + "https://notproxiedclient.eaglercraft.win": "G-QWHQVSNLB6", + "https://client.eaglercraft.win": "G-SGELV1H17J", + "https://client2.eaglercraft.win": "G-995EPK8DXR", + "https://client3.eaglercraft.win": "G-3M7CR3HRJV" + }; + + let trackingId = "G-81F615LDEZ"; // Default fallback tracking ID + + if (allowedOrigins.includes(currentOrigin)) { + trackingId = trackingIds[currentOrigin]; + } + + console.log("Current Origin:", currentOrigin); // Log the origin to debug + console.log("Using Tracking ID:", trackingId); // Log the tracking ID to debug + + if (trackingId) { + const analyticsScript = document.createElement('script'); + analyticsScript.async = true; + analyticsScript.src = `https://www.googletagmanager.com/gtag/js?id=${trackingId}`; + document.head.appendChild(analyticsScript); + + const scriptContent = document.createElement('script'); + scriptContent.innerHTML = ` + window.dataLayer = window.dataLayer || []; + function gtag(){dataLayer.push(arguments);} + gtag('js', new Date()); + gtag('config', '${trackingId}'); + `; + document.head.appendChild(scriptContent); + } +} + +addGoogleAnalyticsTags(); diff --git a/js/helperFunctions.js b/js/helperFunctions.js index b38ab18..cf5bc72 100644 --- a/js/helperFunctions.js +++ b/js/helperFunctions.js @@ -1,47 +1,47 @@ -import isValidTag from "./isValidTag.js"; - -/** - * @param {HTMLElement} element - * @param {string[]} classlist - */ -export function addClasslist(element, ...classlist) { - element.classList.add(...classlist); -} - -export function isArray(value) { - return value instanceof Array; -} - -export function isObject(value) { - return value instanceof Object; -} - -export function selectId(selector) { - return document.querySelector(selector.startsWith('#') ? selector : `#${selector}`); -} - -export function selectClass(selector) { - return document.querySelector(selector.startsWith('.') ? selector : `.${selector}`); -} - -export function selectTag(selector) { - return isValidTag(selector) ? document.querySelector(selector) : null; -} - -export function pushStyles(element, styles) { - for (const [key, value] of Object.entries(styles)) { - element.style[key] = value; - } -} - -export function elementHasIdOrClass(element) { - return isValidTag(selector) ? (element.id !== "" && element.className !== "") : false; -} - -export function hexToRGB(hex) { - const hexValue = hex.replace('#', ''); - const r = parseInt(hexValue.substring(0, 2), 16); - const g = parseInt(hexValue.substring(2, 4), 16); - const b = parseInt(hexValue.substring(4, 6), 16); - return `rgb(${r}, ${g}, ${b})`; +import isValidTag from "./isValidTag.js"; + +/** + * @param {HTMLElement} element + * @param {string[]} classlist + */ +export function addClasslist(element, ...classlist) { + element.classList.add(...classlist); +} + +export function isArray(value) { + return value instanceof Array; +} + +export function isObject(value) { + return value instanceof Object; +} + +export function selectId(selector) { + return document.querySelector(selector.startsWith('#') ? selector : `#${selector}`); +} + +export function selectClass(selector) { + return document.querySelector(selector.startsWith('.') ? selector : `.${selector}`); +} + +export function selectTag(selector) { + return isValidTag(selector) ? document.querySelector(selector) : null; +} + +export function pushStyles(element, styles) { + for (const [key, value] of Object.entries(styles)) { + element.style[key] = value; + } +} + +export function elementHasIdOrClass(element) { + return isValidTag(selector) ? (element.id !== "" && element.className !== "") : false; +} + +export function hexToRGB(hex) { + const hexValue = hex.replace('#', ''); + const r = parseInt(hexValue.substring(0, 2), 16); + const g = parseInt(hexValue.substring(2, 4), 16); + const b = parseInt(hexValue.substring(4, 6), 16); + return `rgb(${r}, ${g}, ${b})`; } \ No newline at end of file diff --git a/js/isValidTag.js b/js/isValidTag.js index 4da2bec..50c4f1c 100644 --- a/js/isValidTag.js +++ b/js/isValidTag.js @@ -1,30 +1,30 @@ -import htmlTags from '../json/html-tags.json' with { type: 'json' }; -import htmlVoidTags from '../json/html-tags-void.json' with { type: 'json' }; - -const browser = bowser.getParser(window.navigator.userAgent).getBrowser(); - -export let unifiedTagCollection = []; - -if (browser === "Chrome") { - unifiedTagCollection = [...htmlTags, ...htmlVoidTags]; -} else if (browser === "Firefox") { - const htmlTags = await fetchMultipleJsonUrls([ - `${window.location.origin}/json/html-tags.json`, - `${window.location.origin}/json/html-tags-void.json` - ]); - - unifiedTagCollection = [...htmlTags]; -} else { - unifiedTagCollection = [...htmlTags, ...htmlVoidTags]; -} - -export default function isValidTag(tag) { - return unifiedTagCollection.includes(tag); -} - -/** @returns {Promise} */ -async function fetchMultipleJsonUrls(urls) { - const responses = await Promise.all(urls.map(url => fetch(url))); - const jsonArrays = await Promise.all(responses.map(response => response.json())); - return jsonArrays.flat(); +import htmlTags from '../json/html-tags.json' with { type: 'json' }; +import htmlVoidTags from '../json/html-tags-void.json' with { type: 'json' }; + +const browser = bowser.getParser(window.navigator.userAgent).getBrowser(); + +export let unifiedTagCollection = []; + +if (browser === "Chrome") { + unifiedTagCollection = [...htmlTags, ...htmlVoidTags]; +} else if (browser === "Firefox") { + const htmlTags = await fetchMultipleJsonUrls([ + `${window.location.origin}/json/html-tags.json`, + `${window.location.origin}/json/html-tags-void.json` + ]); + + unifiedTagCollection = [...htmlTags]; +} else { + unifiedTagCollection = [...htmlTags, ...htmlVoidTags]; +} + +export default function isValidTag(tag) { + return unifiedTagCollection.includes(tag); +} + +/** @returns {Promise} */ +async function fetchMultipleJsonUrls(urls) { + const responses = await Promise.all(urls.map(url => fetch(url))); + const jsonArrays = await Promise.all(responses.map(response => response.json())); + return jsonArrays.flat(); } \ No newline at end of file diff --git a/js/main.js b/js/main.js index a09fb16..b1dfd19 100644 --- a/js/main.js +++ b/js/main.js @@ -1,56 +1,56 @@ -import { selectId, pushStyles, selectTag, addClasslist } from './helperFunctions.js'; - -$(function() { - function toggleVisibility(selector, condition) { - $(selector).toggle(condition); - } - - function updateDarkMode() { - const isChecked = $("#darkModeCheckbox").is(":checked"); - const body = selectTag('body'); - if (isChecked) { - addClasslist(body, 'dark-mode'); - } else { - body.classList.remove('dark-mode'); - } - } - - function openClrModal() { - pushStyles(selectId('clr-data-model'), { display: 'flex' }); - } - - function closeClrModal() { - pushStyles(selectId('clr-data-model'), { display: 'none' }); - } - - function handleClrModalClick(event) { - const target = event.target; - if (target.classList.contains('cancel-btn')) { - closeClrModal(); - } else if (target.tagName === 'BUTTON' && target.textContent === 'Yes') { - localStorage.clear(); - location.reload(); - } - } - - function handleSearchBarKeyup() { - const query = $('#search-bar').val().toLowerCase(); - $('.filter-button').each(function() { - toggleVisibility(this, $(this).text().toLowerCase().indexOf(query) > -1); - }); - } - - function updateShowModded() { - toggleVisibility("#moddedButtons", $("#showModded").is(":checked")); - } - - $("#darkModeCheckbox").on("change", updateDarkMode); - updateDarkMode(); - - selectId('clr-data-model').addEventListener('click', handleClrModalClick); - - $('#search-bar').on('keyup', handleSearchBarKeyup); - - $("#showModded").on("change", updateShowModded); - updateShowModded(); -}); +import { selectId, pushStyles, selectTag, addClasslist } from './helperFunctions.js'; + +$(function() { + function toggleVisibility(selector, condition) { + $(selector).toggle(condition); + } + + function updateDarkMode() { + const isChecked = $("#darkModeCheckbox").is(":checked"); + const body = selectTag('body'); + if (isChecked) { + addClasslist(body, 'dark-mode'); + } else { + body.classList.remove('dark-mode'); + } + } + + function openClrModal() { + pushStyles(selectId('clr-data-model'), { display: 'flex' }); + } + + function closeClrModal() { + pushStyles(selectId('clr-data-model'), { display: 'none' }); + } + + function handleClrModalClick(event) { + const target = event.target; + if (target.classList.contains('cancel-btn')) { + closeClrModal(); + } else if (target.tagName === 'BUTTON' && target.textContent === 'Yes') { + localStorage.clear(); + location.reload(); + } + } + + function handleSearchBarKeyup() { + const query = $('#search-bar').val().toLowerCase(); + $('.filter-button').each(function() { + toggleVisibility(this, $(this).text().toLowerCase().indexOf(query) > -1); + }); + } + + function updateShowModded() { + toggleVisibility("#moddedButtons", $("#showModded").is(":checked")); + } + + $("#darkModeCheckbox").on("change", updateDarkMode); + updateDarkMode(); + + selectId('clr-data-model').addEventListener('click', handleClrModalClick); + + $('#search-bar').on('keyup', handleSearchBarKeyup); + + $("#showModded").on("change", updateShowModded); + updateShowModded(); +}); diff --git a/js/obfuscateScripts.js b/js/obfuscateScripts.js new file mode 100644 index 0000000..74c8208 --- /dev/null +++ b/js/obfuscateScripts.js @@ -0,0 +1,22 @@ +import jscrewit from 'jscrewit'; + +const { scripts } = window.document; +const { encode: obfuscate } = jscrewit; + +(async function() { + for (const script of scripts) { + const { src } = script; + if (src) { + try { + const response = await fetch(src); + const textContent = await response.text(); + const obfuscated = obfuscate(textContent); + const base64Obfuscated = btoa(obfuscated); + script.setAttribute('src', `data:text/javascript;base64,${base64Obfuscated}`); + console.log('Obfuscated script successfully.'); + } catch (error) { + console.error('Failed to obfuscate script:', error); + } + } + } +})(); \ No newline at end of file diff --git a/js/popupPrompt.js b/js/popupPrompt.js new file mode 100644 index 0000000..6bbf297 --- /dev/null +++ b/js/popupPrompt.js @@ -0,0 +1,31 @@ +window.onload = () => { + const dontShowDiscordPrompt = Boolean(localStorage.getItem('dontShowDiscordPrompt')); + if (dontShowDiscordPrompt) return; + + const message = 'Do you want to join our popular Discord server (y/n/dsa/help)?'; + const response = prompt(message); + + if (!response) return; + + switch (response.toLowerCase()) { + case 'y': + const discordLink = document.querySelector('a.dsc-btn'); + if (discordLink) { + const opened = window.open(discordLink.href); + if (opened) opened.focus(); + } + break; + case 'n': + alert('That\'s alright. Have a great day!'); + break; + case 'dsa': + localStorage.setItem('dontShowDiscordPrompt', 'true'); + break; + case 'help': + alert('y: Yes\nn: No\ndsa: Don\'t show again\nhelp: Show this message'); + break; + default: + alert('Invalid response. Please try again.'); + break; + } +}; \ No newline at end of file diff --git a/json/html-tags-void.json b/json/html-tags-void.json index 03eadbf..2444ade 100644 --- a/json/html-tags-void.json +++ b/json/html-tags-void.json @@ -1,17 +1,17 @@ -[ - "area", - "base", - "br", - "col", - "embed", - "hr", - "img", - "input", - "link", - "menuitem", - "meta", - "param", - "source", - "track", - "wbr" +[ + "area", + "base", + "br", + "col", + "embed", + "hr", + "img", + "input", + "link", + "menuitem", + "meta", + "param", + "source", + "track", + "wbr" ] \ No newline at end of file diff --git a/json/html-tags.json b/json/html-tags.json index 204b9a2..3107a7e 100644 --- a/json/html-tags.json +++ b/json/html-tags.json @@ -1,120 +1,120 @@ -[ - "a", - "abbr", - "address", - "area", - "article", - "aside", - "audio", - "b", - "base", - "bdi", - "bdo", - "blockquote", - "body", - "br", - "button", - "canvas", - "caption", - "cite", - "code", - "col", - "colgroup", - "data", - "datalist", - "dd", - "del", - "details", - "dfn", - "dialog", - "div", - "dl", - "dt", - "em", - "embed", - "fieldset", - "figcaption", - "figure", - "footer", - "form", - "h1", - "h2", - "h3", - "h4", - "h5", - "h6", - "head", - "header", - "hgroup", - "hr", - "html", - "i", - "iframe", - "img", - "input", - "ins", - "kbd", - "label", - "legend", - "li", - "link", - "main", - "map", - "mark", - "math", - "menu", - "menuitem", - "meta", - "meter", - "nav", - "noscript", - "object", - "ol", - "optgroup", - "option", - "output", - "p", - "param", - "picture", - "pre", - "progress", - "q", - "rb", - "rp", - "rt", - "rtc", - "ruby", - "s", - "samp", - "script", - "search", - "section", - "select", - "slot", - "small", - "source", - "span", - "strong", - "style", - "sub", - "summary", - "sup", - "svg", - "table", - "tbody", - "td", - "template", - "textarea", - "tfoot", - "th", - "thead", - "time", - "title", - "tr", - "track", - "u", - "ul", - "var", - "video", - "wbr" +[ + "a", + "abbr", + "address", + "area", + "article", + "aside", + "audio", + "b", + "base", + "bdi", + "bdo", + "blockquote", + "body", + "br", + "button", + "canvas", + "caption", + "cite", + "code", + "col", + "colgroup", + "data", + "datalist", + "dd", + "del", + "details", + "dfn", + "dialog", + "div", + "dl", + "dt", + "em", + "embed", + "fieldset", + "figcaption", + "figure", + "footer", + "form", + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "head", + "header", + "hgroup", + "hr", + "html", + "i", + "iframe", + "img", + "input", + "ins", + "kbd", + "label", + "legend", + "li", + "link", + "main", + "map", + "mark", + "math", + "menu", + "menuitem", + "meta", + "meter", + "nav", + "noscript", + "object", + "ol", + "optgroup", + "option", + "output", + "p", + "param", + "picture", + "pre", + "progress", + "q", + "rb", + "rp", + "rt", + "rtc", + "ruby", + "s", + "samp", + "script", + "search", + "section", + "select", + "slot", + "small", + "source", + "span", + "strong", + "style", + "sub", + "summary", + "sup", + "svg", + "table", + "tbody", + "td", + "template", + "textarea", + "tfoot", + "th", + "thead", + "time", + "title", + "tr", + "track", + "u", + "ul", + "var", + "video", + "wbr" ] \ No newline at end of file diff --git a/netlify.toml b/netlify.toml index 5c08155..bf6af58 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,14 +1,14 @@ -[[headers]] - for = "/*" - [headers.values] - Origin-Trial = "AgqJBzNb/dYyS/+JovzFbM178SHW/01lYlxzk/Njmu1kQmVJ5j3CzIHhaPgBng6QiaZ/T6Q5qJtsWNX1ORQ4IAgAAAByeyJvcmlnaW4iOiJodHRwczovL2VhZ2xlcmNyYWZ0LXhpLnZlcmNlbC5hcHA6NDQzIiwiZmVhdHVyZSI6IldlYkFzc2VtYmx5SlNQcm9taXNlSW50ZWdyYXRpb24iLCJleHBpcnkiOjE3NDQ2NzUyMDB9" - -[[redirects]] - from = "/*" - to = "/" - status = 404 - -[[headers]] - for = "/*" - [headers.values] +[[headers]] + for = "/*" + [headers.values] + Origin-Trial = "AgqJBzNb/dYyS/+JovzFbM178SHW/01lYlxzk/Njmu1kQmVJ5j3CzIHhaPgBng6QiaZ/T6Q5qJtsWNX1ORQ4IAgAAAByeyJvcmlnaW4iOiJodHRwczovL2VhZ2xlcmNyYWZ0LXhpLnZlcmNlbC5hcHA6NDQzIiwiZmVhdHVyZSI6IldlYkFzc2VtYmx5SlNQcm9taXNlSW50ZWdyYXRpb24iLCJleHBpcnkiOjE3NDQ2NzUyMDB9" + +[[redirects]] + from = "/*" + to = "/" + status = 404 + +[[headers]] + for = "/*" + [headers.values] Cache-Control = "no-store" \ No newline at end of file diff --git a/package.json b/package.json index 93741d2..062605c 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "devDependencies": { "@types/jquery": "^3.5.32", - "@types/node": "^22.10.5", + "@types/node": "^22.10.7", "typescript": "^5.7.3" }, "scripts": { diff --git a/prettyBytes.cjs b/prettyBytes.cjs new file mode 100644 index 0000000..7f9c771 --- /dev/null +++ b/prettyBytes.cjs @@ -0,0 +1,122 @@ +const BYTE_UNITS = [ + 'B', + 'kB', + 'MB', + 'GB', + 'TB', + 'PB', + 'EB', + 'ZB', + 'YB', +]; + +const BIBYTE_UNITS = [ + 'B', + 'KiB', + 'MiB', + 'GiB', + 'TiB', + 'PiB', + 'EiB', + 'ZiB', + 'YiB', +]; + +const BIT_UNITS = [ + 'b', + 'kbit', + 'Mbit', + 'Gbit', + 'Tbit', + 'Pbit', + 'Ebit', + 'Zbit', + 'Ybit', +]; + +const BIBIT_UNITS = [ + 'b', + 'kibit', + 'Mibit', + 'Gibit', + 'Tibit', + 'Pibit', + 'Eibit', + 'Zibit', + 'Yibit', +]; + +/* +Formats the given number using `Number#toLocaleString`. +- If locale is a string, the value is expected to be a locale-key (for example: `de`). +- If locale is true, the system default locale is used for translation. +- If no value for locale is specified, the number is returned unmodified. +*/ +const toLocaleString = (number, locale, options) => { + let result = number; + if (typeof locale === 'string' || Array.isArray(locale)) { + result = number.toLocaleString(locale, options); + } else if (locale === true || options !== undefined) { + result = number.toLocaleString(undefined, options); + } + + return result; +}; + +module.exports = function prettyBytes(number, options) { + if (!Number.isFinite(number)) { + throw new TypeError(`Expected a finite number, got ${typeof number}: ${number}`); + } + + options = { + bits: false, + binary: false, + space: true, + ...options, + }; + + const UNITS = options.bits + ? (options.binary ? BIBIT_UNITS : BIT_UNITS) + : (options.binary ? BIBYTE_UNITS : BYTE_UNITS); + + const separator = options.space ? ' ' : ''; + + if (options.signed && number === 0) { + return ` 0${separator}${UNITS[0]}`; + } + + const isNegative = number < 0; + const prefix = isNegative ? '-' : (options.signed ? '+' : ''); + + if (isNegative) { + number = -number; + } + + let localeOptions; + + if (options.minimumFractionDigits !== undefined) { + localeOptions = {minimumFractionDigits: options.minimumFractionDigits}; + } + + if (options.maximumFractionDigits !== undefined) { + localeOptions = {maximumFractionDigits: options.maximumFractionDigits, ...localeOptions}; + } + + if (number < 1) { + const numberString = toLocaleString(number, options.locale, localeOptions); + return prefix + numberString + separator + UNITS[0]; + } + + const exponent = Math.min(Math.floor(options.binary ? Math.log(number) / Math.log(1024) : Math.log10(number) / 3), UNITS.length - 1); + number /= (options.binary ? 1024 : 1000) ** exponent; + + if (!localeOptions) { + number = number.toPrecision(3); + } + + const numberString = toLocaleString(Number(number), options.locale, localeOptions); + + const unit = UNITS[exponent]; + + return prefix + numberString + separator + unit; +} diff --git a/tsup.config.js b/tsup.config.js index 4e5ab87..a7dd9f2 100644 --- a/tsup.config.js +++ b/tsup.config.js @@ -1,14 +1,14 @@ -import { defineConfig } from 'tsup'; -import fg from 'fast-glob'; - -export default defineConfig({ - entry: fg.globSync('eagler-files/**/*.js'), - format: ['esm'], - target: ['chrome131'], - dts: false, - clean: true, - sourcemap: true, - minify: true, - watch: false, - outDir: 'dist', +import { defineConfig } from 'tsup'; +import fg from 'fast-glob'; + +export default defineConfig({ + entry: fg.globSync('eagler-files/**/*.js'), + format: ['esm'], + target: ['chrome131'], + dts: false, + clean: true, + sourcemap: true, + minify: true, + watch: false, + outDir: 'dist', }); \ No newline at end of file diff --git a/vercel.json b/vercel.json index 9cf5bb9..a7da76e 100644 --- a/vercel.json +++ b/vercel.json @@ -1,13 +1,13 @@ -{ - "$schema": "http://openapi.vercel.sh/vercel.json", - "routes": [ - { - "src": "/(.html)?", - "status": 404, - "headers": { - "Cache-Control": "no-store", - "Origin-Trial": "AgqJBzNb/dYyS/+JovzFbM178SHW/01lYlxzk/Njmu1kQmVJ5j3CzIHhaPgBng6QiaZ/T6Q5qJtsWNX1ORQ4IAgAAAByeyJvcmlnaW4iOiJodHRwczovL2VhZ2xlcmNyYWZ0LXhpLnZlcmNlbC5hcHA6NDQzIiwiZmVhdHVyZSI6IldlYkFzc2VtYmx5SlNQcm9taXNlSW50ZWdyYXRpb24iLCJleHBpcnkiOjE3NDQ2NzUyMDB9" - } - } - ] +{ + "$schema": "http://openapi.vercel.sh/vercel.json", + "routes": [ + { + "src": "/(.html)?", + "status": 404, + "headers": { + "Cache-Control": "no-store", + "Origin-Trial": "AgqJBzNb/dYyS/+JovzFbM178SHW/01lYlxzk/Njmu1kQmVJ5j3CzIHhaPgBng6QiaZ/T6Q5qJtsWNX1ORQ4IAgAAAByeyJvcmlnaW4iOiJodHRwczovL2VhZ2xlcmNyYWZ0LXhpLnZlcmNlbC5hcHA6NDQzIiwiZmVhdHVyZSI6IldlYkFzc2VtYmx5SlNQcm9taXNlSW50ZWdyYXRpb24iLCJleHBpcnkiOjE3NDQ2NzUyMDB9" + } + } + ] } \ No newline at end of file