automatically replace link to file accordingly to selected version
Some checks are pending
Deploy site / build (push) Waiting to run
Deploy site / deploy (push) Blocked by required conditions

This commit is contained in:
DannyAAM 2024-10-04 23:58:39 +08:00 committed by lifehackerhansol
parent 18c99906c7
commit c791cbaffe
No known key found for this signature in database
GPG Key ID: 80FB184AFC0B3B0E
18 changed files with 284 additions and 52 deletions

View File

@ -1,9 +1,10 @@
---
noneSelected: Απαιτείται το μοντέλο συστήματος.
invalidVersion: Αυτή δεν φαίνεται να είναι έγκυρη έκδοση συστήματος.
head:
- - script
- src: /assets/js/selecting.js
head: [
['script', {src: '/assets/js/common.js'}],
['script', {src: '/assets/js/selecting.js'}]
]
---
# Έναρξη

View File

@ -1,3 +1,11 @@
---
head: [
['script', {src: '/assets/js/common.js'}],
['script', {src: '/assets/js/soundhax-link.js'}],
['script', {src: '/assets/js/link-common.js'}],
]
---
# Εγκατάσταση του boot9strap (Soundhax)
:::details Τεχνικές λεπτομέρειες (προαιρετικό)

View File

@ -2,6 +2,7 @@
noneSelected: System model is required.
invalidVersion: This doesn't seem to be a valid system version.
head: [
['script', {src: '/assets/js/common.js'}],
['script', {src: '/assets/js/selecting.js'}]
]
---

View File

@ -1,9 +1,10 @@
---
noneSelected: A rendszer modell szükséges.
invalidVersion: Ez nem tűnik egy érvényes rendszer verziónak.
head:
- - script
- src: /assets/js/selecting.js
head: [
['script', {src: '/assets/js/common.js'}],
['script', {src: '/assets/js/selecting.js'}]
]
---
# Kezdeti lépések

View File

@ -1,3 +1,11 @@
---
head: [
['script', {src: '/assets/js/common.js'}],
['script', {src: '/assets/js/soundhax-link.js'}],
['script', {src: '/assets/js/link-common.js'}],
]
---
# Boot9strap telepítése (Soundhax)
:::details Technikai részletek (opcionális)

View File

@ -1,3 +1,11 @@
---
head: [
['script', {src: '/assets/js/common.js'}],
['script', {src: '/assets/js/soundhax-link.js'}],
['script', {src: '/assets/js/link-common.js'}],
]
---
# Installing boot9strap (Soundhax)
::: details Technical Details (optional)

View File

@ -1,3 +1,11 @@
---
head: [
['script', {src: '/assets/js/common.js'}],
['script', {src: '/assets/js/skater-link.js'}],
['script', {src: '/assets/js/link-common.js'}],
]
---
# Installing boot9strap (super-skaterhax)
::: details Technical Details (optional)

View File

@ -1,9 +1,10 @@
---
noneSelected: Il modello della console è richiesto.
invalidVersion: Questa non sembra essere una versione di sistema valida.
head:
- - script
- src: /assets/js/selecting.js
head: [
['script', {src: '/assets/js/common.js'}],
['script', {src: '/assets/js/selecting.js'}]
]
---
# Cominciamo!

View File

@ -1,3 +1,11 @@
---
head: [
['script', {src: '/assets/js/common.js'}],
['script', {src: '/assets/js/soundhax-link.js'}],
['script', {src: '/assets/js/link-common.js'}],
]
---
# Installazione di boot9strap (Soundhax)
:::details Dettagli tecnici (opzionale)

View File

@ -1,9 +1,10 @@
---
noneSelected: 시스템 모델을 선택하세요.
invalidVersion: 올바른 시스템 버전으로 확인되지 않습니다.
head:
- - script
- src: /assets/js/selecting.js
head: [
['script', {src: '/assets/js/common.js'}],
['script', {src: '/assets/js/selecting.js'}]
]
---
# 시작하기

View File

@ -1,3 +1,11 @@
---
head: [
['script', {src: '/assets/js/common.js'}],
['script', {src: '/assets/js/soundhax-link.js'}],
['script', {src: '/assets/js/link-common.js'}],
]
---
# boot9strap 설치 (Soundhax)
:::details 기술적 상세 정보 (선택 사항)

View File

@ -1,9 +1,10 @@
---
noneSelected: Modelo do sistema é necessário.
invalidVersion: Esta não parece ser uma versão válida de sistema.
head:
- - script
- src: /assets/js/selecting.js
head: [
['script', {src: '/assets/js/common.js'}],
['script', {src: '/assets/js/selecting.js'}]
]
---
# Começando

View File

@ -1,3 +1,11 @@
---
head: [
['script', {src: '/assets/js/common.js'}],
['script', {src: '/assets/js/soundhax-link.js'}],
['script', {src: '/assets/js/link-common.js'}],
]
---
# Instalando boot9strap (Soundhax)
:::details Detalhes Técnicos (opcional)

View File

@ -0,0 +1,66 @@
/*
Copyright (C) 2024 Nintendo Homebrew
SPDX-License-Identifier: MIT
*/
(() => {
// probably not really needed?
function c(key, value) {
Object.defineProperty(window, key, { value, writable: false, enumerable: true, configurable: false });
}
if (!window.COMMON_LOADED) {
c("COMMON_LOADED", true);
// Possible max minor for each major, major as key
const major_minor_map = {
0: -1, // invalidate all 0.x
1: 1,
2: 2,
3: 1,
4: 5,
5: 1,
6: 4,
7: 2,
8: 1,
9: 9,
10: 7,
11: 17
}
// Validate version
// CHN/TWN doesn't have new model
// KOR/CHN/TWN doesn't have 11.17 currently
c("validate_version", (major, minor, native, region, model) => {
if (model == DEVICE_N3DS && ["C", "T"].includes(region)) {
return false;
}
if (major == 11 && minor == 17 && ["K", "C", "T"].includes(region)) {
return false;
}
const minor_max = major_minor_map[major];
if (!isNaN(minor_max) && minor > minor_max) {
return false;
}
return true;
});
c("DEVICE_N3DS", 1);
c("DEVICE_O3DS", 0);
c("FILENAME_REGION_MAP", {
"U": "usa",
"E": "eur",
"J": "jpn",
"K": "kor",
"C": "cnh",
"T": "twn",
});
}
})();

View File

@ -0,0 +1,33 @@
/*
Copyright (C) 2024 DannyAAM
SPDX-License-Identifier: MIT
*/
(() => {
const selectedVersion = sessionStorage.getItem("selected_version");
if (selectedVersion && window.MATCH && window.generateLink) {
function replaceLink() {
const {major, minor, nver, region, model} = JSON.parse(selectedVersion);
if (!validate_version(major, minor, nver, region, model)) {
return;
}
const links = document.querySelectorAll(`a[href*="${MATCH}"]`);
for(const link of links) {
const newLink = generateLink(major, minor, nver, region, model, link.href);
if (newLink) {
link.setAttribute("href", newLink);
}
}
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", replaceLink);
} else {
replaceLink();
}
}
})();

View File

@ -5,44 +5,11 @@
SPDX-License-Identifier: MIT
*/
const DEVICE_N3DS = 1;
const DEVICE_O3DS = 0;
// required as vitepress don't always fully reload page
// without putting script in its own scope will have const redefine issue
(() => {
// Possible max minor for each major, major as key
const major_minor_map = {
0: -1, // invalidate all 0.x
1: 1,
2: 2,
3: 1,
4: 5,
5: 1,
6: 4,
7: 2,
8: 1,
9: 9,
10: 7,
11: 17
}
// Validate version
// CHN/TWN doesn't have new model
// KOR/CHN/TWN doesn't have 11.17 currently
function validate_version(major, minor, native, region, model) {
if (model == DEVICE_N3DS && ["C", "T"].includes(region)) {
return false;
}
if (major == 11 && minor == 17 && ["K", "C", "T"].includes(region)) {
return false;
}
const minor_max = major_minor_map[major];
if (!isNaN(minor_max) && minor > minor_max) {
return false;
}
return true;
}
// validate_version moved to common.js
// Soundhax
// 1.0-11.3
@ -208,6 +175,9 @@ function redirect() {
return;
}
// Store selected version for some later pages
sessionStorage.setItem("selected_version", JSON.stringify({major, minor, nver, region, model}));
const redirected = [
can_soundhax,
can_ssloth,
@ -221,3 +191,7 @@ function redirect() {
document.getElementById("result_methodUnavailable").style.display = "block";
return false;
}
window.redirect = redirect;
})();

View File

@ -0,0 +1,43 @@
/*
Copyright (C) 2024 DannyAAM
SPDX-License-Identifier: MIT
*/
(() => {
const BASE = "https://hacksguidewiki.sfo3.digitaloceanspaces.com/hacksguidewiki/Super-skaterhax";
window.MATCH = "skater.nintendohomebrew.com";
window.generateLink = (major, minor, nver, region, model, link) => {
const fileRegion = FILENAME_REGION_MAP[region];
if (model != DEVICE_N3DS || major < 11) {
return null;
}
let fileVersion;
switch (region) {
case "U":
if (minor == 17) {
fileVersion = "v11.17";
} else {
fileVersion = "pre17";
}
break;
case "K":
if (minor == 17) {
return null;
} else {
fileVersion = "pre17";
}
break;
default:
fileVersion = "all";
break;
}
return `${BASE}-${fileRegion}-${fileVersion}.zip`;
}
})();

View File

@ -0,0 +1,54 @@
/*
Copyright (C) 2024 DannyAAM
SPDX-License-Identifier: MIT
*/
(() => {
const BASE = "https://github.com/nedwill/soundhax/raw/master/soundhax";
window.MATCH = "soundhax.com";
window.generateLink = (major, minor, nver, region, model, link) => {
const fileRegion = FILENAME_REGION_MAP[region];
if (model == DEVICE_N3DS) {
return `${BASE}-${fileRegion}-n3ds.m4a`;
}
if (model == DEVICE_O3DS) {
if (major <= 2 && ["K", "C", "T"].includes(region)) {
return null;
}
let fileVersion;
switch (parseInt(major)) {
case 1:
fileVersion = "pre2.1";
break;
case 2:
// 2.1 special case:
// - if nver lower than 4, use pre 2.1, as sound app is not updated
// - otherwise, use 2.1/2.2 for newer soundhax app
if (minor == 1 && nver < 4) {
fileVersion = "pre2.1";
} else {
fileVersion = "v2.1and2.2";
}
break;
case 3:
case 4:
fileVersion = "v3.xand4.x";
break;
default: // 5.x and later... maybe reject past 11.3?
fileVersion = "post5.0";
break;
}
return `${BASE}-${fileRegion}-o3ds-${fileVersion}.m4a`;
}
return null; // wtf?
}
})();