From 16bdbdf4cf386dd41516e0f6b13f7ecabe4c79d0 Mon Sep 17 00:00:00 2001 From: TomatoCake <60300461+DEVTomatoCake@users.noreply.github.com> Date: Tue, 26 Dec 2023 14:21:33 +0100 Subject: [PATCH] remove lang & simplify theme toggle --- .github/workflows/codeql-analysis.yml | 1 + README.md | 4 +- assets/analyzer.js | 21 ++---- assets/images/favicon.ico | Bin 0 -> 59582 bytes assets/script.js | 37 +++------ assets/style.css | 10 ++- index.html | 103 ++++++++++---------------- package-lock.json | 16 ++-- package.json | 4 +- 9 files changed, 79 insertions(+), 117 deletions(-) create mode 100644 assets/images/favicon.ico diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 9dbb1db..9ae8701 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -1,6 +1,7 @@ name: "CodeQL" on: + pull_request: workflow_dispatch: jobs: diff --git a/README.md b/README.md index 12e7a76..b47c9ca 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Minecraft Datapack Analyzer Allows you to analyze and generate stats for [Minecraft](https://minecraft.net) Java Edition data- and resourcepacks. -![](https://raw.githubusercontent.com/DEVTomatoCake/Datapack-Analyzer/main/assets/images/showcase.png) +![](https://raw.githubusercontent.com/DEVTomatoCake/Pack-Analyzer/main/assets/images/showcase.png) ## Credits @@ -14,7 +14,7 @@ Developed mostly by [TomatoCake](https://github.com/DEVTomatoCake). ## Note on v1 v1 used Tauri to make this app installable on Windows - this is annoying and scary, especially for one-time use. -As such, v2+ instead uses [a website](https://datapack-analyzer.pages.dev/), with almost the same code. You're now able to install it as a [Progressive Web App](https://en.wikipedia.org/wiki/Progressive_web_app). +As such, v2+ instead uses [a website](https://pack-analyzer.pages.dev/), with almost the same code. You're now able to install it as a [Progressive Web App](https://en.wikipedia.org/wiki/Progressive_web_app). ## Like this project? Feel free to leave a star, create a feature request or bug report issue, or even contribute to the code! diff --git a/assets/analyzer.js b/assets/analyzer.js index 7033f78..945fb91 100644 --- a/assets/analyzer.js +++ b/assets/analyzer.js @@ -109,7 +109,9 @@ async function processEntries(entries) { else commands[cmd] = 1 if (cmd == "execute") { - line.match(/ run [a-z_:]{2,}/g)?.forEach(match => { + line.match(/run ([a-z_:]{2,})/g)?.forEach(match => { + if (match[1] == "return") return + const cmdBehind = match.replace(" run ", "") if (cmdsBehindExecute[cmdBehind]) cmdsBehindExecute[cmdBehind]++ else cmdsBehindExecute[cmdBehind] = 1 @@ -117,7 +119,7 @@ async function processEntries(entries) { else commands[cmdBehind] = 1 }) } - if (cmd == "function" || line.includes(" function ")) { + if (cmd == "function" || line.includes(" function ") || line.includes("/function ")) { const func = /function (([-a-z0-9_]+):)?([-a-z0-9_/]+)/i.exec(line) if (func && func[3]) dpExclusive.functionCalls.push({ source: funcLocation[1] + ":" + funcLocation[2], @@ -209,23 +211,16 @@ async function processEntries(entries) { } } if (!rpMode && ext == "json") { - // TODO: Refactor to avoid duplicate code - if (filePath.includes("/advancements/")) dpExclusive.folders.advancements++ - else if (filePath.includes("/loot_tables/")) dpExclusive.folders.loot_tables++ - else if (filePath.includes("/recipes/")) dpExclusive.folders.recipes++ - else if (filePath.includes("/predicates/")) dpExclusive.folders.predicates++ - else if (filePath.includes("/dimension/")) dpExclusive.folders.dimension++ - else if (filePath.includes("/dimension_type/")) dpExclusive.folders.dimension_type++ - else if (filePath.includes("/worldgen/")) dpExclusive.folders.worldgen++ - + Object.keys(dpExclusive.folders).forEach(type => { + if (filePath.includes("/" + type + "/")) dpExclusive.folders[type]++ + }) Object.keys(dpExclusive.tags).forEach(type => { if (filePath.includes("/tags/" + type + "/")) dpExclusive.tags[type]++ }) - } else if (rpMode) { + } else if (rpMode) Object.keys(rpExclusive).forEach(type => { if (filePath.includes("/" + type + "/")) rpExclusive[type]++ }) - } } } diff --git a/assets/images/favicon.ico b/assets/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5912aea9558c977b831607b7446ba59e542bdc24 GIT binary patch literal 59582 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 { - if (getCookie("lang")) return getCookie("lang") - - const userLang = navigator.language || navigator.userLanguage - return userLang ? (userLang.split("-")[0] == "de" ? "de" : "en") : "en" -} - const requestVersions = async () => { const res = await fetch("https://raw.githubusercontent.com/misode/mcmeta/summary/versions/data.json") const json = await res.json() @@ -41,12 +34,11 @@ const requestVersions = async () => { requestVersions() window.addEventListener("load", () => { - if (getCookie("theme") == "light") document.body.classList = "light-theme" + if (getCookie("theme") == "light") document.body.classList.add("light-theme") else if (window.matchMedia("(prefers-color-scheme: light)").matches) { - document.body.classList = "light-theme" + document.body.classList.add("light-theme") setCookie("theme", "light", 365) } - if (!getCookie("lang")) setCookie("lang", getLanguage(), 365) const params = new URLSearchParams(location.search) if (params.has("data")) { @@ -114,7 +106,7 @@ window.addEventListener("paste", async e => { } }) -const localize = string => string.toLocaleString(getCookie("lang") || "en-US") +const localize = string => string.toLocaleString() function openDialog(dialog) { dialog.style.display = "block" @@ -126,22 +118,11 @@ function openDialog(dialog) { } } -async function openSettingsDialog() { - const dialog = document.getElementById("settingsDialog") - openDialog(dialog) - - if (getCookie("theme") == "light") dialog.querySelector("option[value='light']").selected = true - else dialog.querySelector("option[value='dark']").selected = true - - if (getCookie("lang") == "de-DE") dialog.querySelector("option[value='de-DE']").selected = true - else dialog.querySelector("option[value='en-US']").selected = true - - for (let select of dialog.getElementsByTagName("select")) { - select.onchange = () => { - setCookie(select.name, select.value, 365) - if (select.name == "theme") document.body.classList = select.value + "-theme" - } - } +const toggleTheme = () => { + const newTheme = getCookie("theme") == "light" ? "dark" : "light" + setCookie("theme", newTheme, 365) + if (newTheme == "light") document.body.classList.add("light-theme") + else document.body.classList.remove("light-theme") } function clearResults() { diff --git a/assets/style.css b/assets/style.css index a3275b3..fa8cc90 100644 --- a/assets/style.css +++ b/assets/style.css @@ -11,7 +11,7 @@ --heading-color: #008900; --number-color: #00a100; } -.dark-theme { +:root { --background: #222; --header-bg: #216E4A; --dialog-bg: #222; @@ -37,7 +37,9 @@ button { padding: 5px 8px; font-size: 16px; border: none; - border-radius: 5px; + border-radius: 7px; + cursor: pointer; + box-shadow: inset 0px -1px 2px rgba(17,24,39,.15), 0 0 0 0 transparent; } p { font-size: 19px; @@ -67,6 +69,10 @@ code { margin-left: 75px; } +main { + margin: 0 25px; +} + header { background-color: var(--header-bg); padding: 20px; diff --git a/index.html b/index.html index aa721b2..d49d6d6 100644 --- a/index.html +++ b/index.html @@ -9,22 +9,22 @@ - - + + - +

Minecraft Datapack and Resourcepack analyzer

Drop/paste a .zip file or select a folder below to start analyzing!

- +
-

- -

+
+

+ +

-
-
- × -

Settings

+
+
+ × +

About

- -
- +

+ Made in HTML, plain JavaScript and CSS, this site allows you to get usage stats from your Minecraft data and resource packs. + It also allows analyzing of whole worlds and shaders. +

-
-
- -
- +

+ Developed by: TomatoCake +

+

+ Inspired by: ErrorCraft's FunctionAnalyser +

+

+ GitHub: https://github.com/DEVTomatoCake/Pack-Analyzer +

+

+ Support/Feedback: + Vanilla Minigames Discord or + GitHub +

+
-
-
-
- × -

About

+
+
+ × +

Share as link

-

- Made in raw HTML, JavaScript and CSS (yes, it's pain. Don't ask.), this site allows you to get stats from your Minecraft datapacks and resourcepacks. - It also allows analyzing of whole worlds and OptiFine shaders. -

- -

- Developed by: TomatoCake -

-

- Inspired by: ErrorCraft's FunctionAnalyser -

-

- GitHub: https://github.com/DEVTomatoCake/Datapack-Analyzer -

-

- Support/Feedback: - Vanilla Minigames Discord or - GitHub -

-
-
- -
-
- × -

Share as link

- - -
-
- QR-Code + +
+
+ QR-Code +
-
+
diff --git a/package-lock.json b/package-lock.json index 769732f..35f0b57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "datapack-analyzer", + "name": "pack-analyzer", "version": "2.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "datapack-analyzer", + "name": "pack-analyzer", "version": "2.0.0", "license": "CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0", "devDependencies": { @@ -979,9 +979,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -1083,9 +1083,9 @@ } }, "node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" diff --git a/package.json b/package.json index d6fa1d0..2496dba 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "datapack-analyzer", + "name": "pack-analyzer", "version": "2.0.0", "private": true, - "description": "Allows you to analyze and generate stats for [Minecraft](https://minecraft.net) Java Edition data- and resourcepacks.", + "description": "Allows you to analyze and generate stats for [Minecraft](https://minecraft.net) Java Edition data and resource packs.", "main": "index.html", "author": "TomatoCake", "license": "CC BY-NC-SA 4.0 https://creativecommons.org/licenses/by-nc-sa/4.0",