Skip to content

Commit 95e1869

Browse files
feat: implement item pages
1 parent 1987bb2 commit 95e1869

15 files changed

Lines changed: 1240 additions & 15 deletions

gh-pages-template/_config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
---
2+
site-js: [] # disable crowdin for this site
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* character_detail.js
3+
* Renders a single character detail page.
4+
* Depends on item_detail.js being loaded first.
5+
*/
6+
7+
function renderCharacter(data) {
8+
document.title = (data.name || "Character") + " – GameDB";
9+
document.getElementById("character-name").textContent = data.name || "Unknown Character";
10+
11+
// Mug shot
12+
const mugEl = document.getElementById("character-mug");
13+
const mugPlaceholder = document.getElementById("character-mug-placeholder");
14+
const mugUrl = data.mug_shot && data.mug_shot.url
15+
? igdbImageUrl(data.mug_shot.url, "t_screenshot_big")
16+
: null;
17+
if (mugUrl) {
18+
mugEl.src = mugUrl;
19+
mugEl.alt = data.name || "";
20+
mugEl.style.display = "";
21+
} else {
22+
mugPlaceholder.style.display = null;
23+
mugPlaceholder.style.removeProperty("display");
24+
}
25+
26+
// Badges / meta
27+
const badgesEl = document.getElementById("character-badges");
28+
29+
if (data.character_gender && data.character_gender.name) {
30+
badgesEl.appendChild(makeBadge(data.character_gender.name, "bg-info text-dark"));
31+
}
32+
if (data.character_species && data.character_species.name) {
33+
badgesEl.appendChild(makeBadge(data.character_species.name, "bg-secondary"));
34+
}
35+
36+
// Games
37+
if (data.games && data.games.length > 0) {
38+
const section = document.getElementById("character-games-section");
39+
section.classList.remove("d-none");
40+
renderGameList(document.getElementById("character-games"), data.games);
41+
}
42+
}
43+
44+
document.addEventListener("DOMContentLoaded", () => {
45+
loadItemDetail("characters", renderCharacter);
46+
});
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* collection_detail.js
3+
* Renders a single collection (series) detail page.
4+
* Depends on item_detail.js being loaded first.
5+
*/
6+
7+
function renderCollection(data) {
8+
document.title = (data.name || "Series") + " – GameDB";
9+
document.getElementById("collection-name").textContent = data.name || "Unknown Series";
10+
11+
// IGDB link
12+
if (data.url) {
13+
const igdbLink = document.getElementById("collection-igdb-link");
14+
igdbLink.href = data.url;
15+
igdbLink.classList.remove("d-none");
16+
}
17+
18+
// Games
19+
if (data.games && data.games.length > 0) {
20+
const section = document.getElementById("collection-games-section");
21+
section.classList.remove("d-none");
22+
renderGameList(document.getElementById("collection-games"), data.games);
23+
}
24+
}
25+
26+
document.addEventListener("DOMContentLoaded", () => {
27+
loadItemDetail("collections", renderCollection);
28+
});
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* franchise_detail.js
3+
* Renders a single franchise detail page.
4+
* Depends on item_detail.js being loaded first.
5+
*/
6+
7+
function renderFranchise(data) {
8+
document.title = (data.name || "Franchise") + " – GameDB";
9+
document.getElementById("franchise-name").textContent = data.name || "Unknown Franchise";
10+
11+
// IGDB link
12+
if (data.url) {
13+
const igdbLink = document.getElementById("franchise-igdb-link");
14+
igdbLink.href = data.url;
15+
igdbLink.classList.remove("d-none");
16+
}
17+
18+
// Games
19+
if (data.games && data.games.length > 0) {
20+
const section = document.getElementById("franchise-games-section");
21+
section.classList.remove("d-none");
22+
renderGameList(document.getElementById("franchise-games"), data.games);
23+
}
24+
}
25+
26+
document.addEventListener("DOMContentLoaded", () => {
27+
loadItemDetail("franchises", renderFranchise);
28+
});

0 commit comments

Comments
 (0)