mirror of
https://github.com/hacks-guide/Guide_3DS.git
synced 2024-11-23 01:19:49 +00:00
automatically replace link to file accordingly to selected version
This commit is contained in:
parent
18c99906c7
commit
c791cbaffe
@ -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'}]
|
||||
]
|
||||
---
|
||||
|
||||
# Έναρξη
|
||||
|
@ -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 Τεχνικές λεπτομέρειες (προαιρετικό)
|
||||
|
@ -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'}]
|
||||
]
|
||||
---
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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!
|
||||
|
@ -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)
|
||||
|
@ -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'}]
|
||||
]
|
||||
---
|
||||
|
||||
# 시작하기
|
||||
|
@ -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 기술적 상세 정보 (선택 사항)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
66
docs/public/assets/js/common.js
Normal file
66
docs/public/assets/js/common.js
Normal 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",
|
||||
});
|
||||
}
|
||||
|
||||
})();
|
33
docs/public/assets/js/link-common.js
Normal file
33
docs/public/assets/js/link-common.js
Normal 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();
|
||||
}
|
||||
}
|
||||
|
||||
})();
|
@ -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;
|
||||
|
||||
})();
|
||||
|
43
docs/public/assets/js/skater-link.js
Normal file
43
docs/public/assets/js/skater-link.js
Normal 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`;
|
||||
}
|
||||
|
||||
})();
|
54
docs/public/assets/js/soundhax-link.js
Normal file
54
docs/public/assets/js/soundhax-link.js
Normal 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?
|
||||
}
|
||||
|
||||
})();
|
Loading…
Reference in New Issue
Block a user