diff --git a/gear/gear.js b/gear/gear.js deleted file mode 100644 index aa6ff23..0000000 --- a/gear/gear.js +++ /dev/null @@ -1 +0,0 @@ -// Gear list JS diff --git a/gear/gear.json b/gear/gear.json new file mode 100644 index 0000000..4e36d13 --- /dev/null +++ b/gear/gear.json @@ -0,0 +1,13 @@ +{ + "bondage": { + "name": "Bondage", + "id": "bondage", + "values": [ + { + "name": "Rope", + "id": "rope", + "desc": "10m pink, black, or purple" + } + ] + } +} diff --git a/gear/gear.mjs b/gear/gear.mjs new file mode 100644 index 0000000..43247c6 --- /dev/null +++ b/gear/gear.mjs @@ -0,0 +1,115 @@ +// Gear list JS +// @ts-check + +/** + * @typedef {{name: string, id: string, desc: string}} GearListItem + * + * @typedef {{name: string, id: string, values: GearListItem[]}} GearListSection + * + * @typedef {{bondage: GearListSection}} GearList + */ + +/** + * Fetches the gear.json to be parsed seperately + * @returns {Promise} + */ +async function getGearList() { + try { + const response = await fetch("/gear/gear.json"); + const data = await response.json(); + return data; + } catch (error) { + console.error("Error fetching JSON:", error); + throw "Could not load gear.json"; + } +} + +/** + * @param {GearListItem} gear + * @param {string} group + * @returns {HTMLLIElement} + */ +function gearToElement(gear, group) { + let li = document.createElement("li"); + li.setAttribute("id", `gl-${group}-${gear.id}`); + let heading = document.createElement("h3"); + heading.setAttribute("class", "gl-item-name"); + heading.textContent = gear.name; + li.appendChild(heading); + let description = document.createElement("p"); + description.setAttribute("class", "gl-item-desc"); + li.appendChild(description); + return li; +} + +/** + * @param {GearListSection} gear + * @returns {HTMLLIElement[]} + */ +function gearListToList(gear) { + let lis = []; + for (const item of gear.values) { + lis.push(gearToElement(item, gear.id)); + } + return lis; +} + +/** + * @param {GearListSection} items + * @returns {HTMLUListElement} + */ +function bondageItemsToUl(items) { + let ul = document.createElement("ul"); + ul.setAttribute("id", `gl-${items.id}-list`); + for (const i of gearListToList(items)) { + ul.appendChild(i); + } + return ul; +} + +/** + * @returns {Promise} + */ +async function generateGearListArticle() { + let list = await getGearList(); + + let bondageItems = document.createElement("article"); + bondageItems.setAttribute("id", "gl-body"); + let heading = document.createElement("h2"); + heading.textContent = "Gear List"; + bondageItems.appendChild(heading); + + for (const section of Object.values(list)) { + let listSection = buildSection(section); + bondageItems.appendChild(listSection); + } + + return bondageItems; +} + +/** + * @param {GearListSection} items + * @returns {HTMLElement} + */ +function buildSection(items) { + let section = document.createElement("article"); + section.setAttribute("id", `gl-${items.id}-body`); + let heading = document.createElement("h3"); + heading.textContent = items.name; + section.appendChild(heading); + + let ul = bondageItemsToUl(items); + + section.appendChild(ul); + return section; +} + +/** + * @param {string} position + * @returns void + */ +export async function attachGearList(position) { + document + .getElementById(position) + .replaceWith(await generateGearListArticle()); +} diff --git a/global/loadin.js b/global/loadin.js deleted file mode 100644 index 45d2695..0000000 --- a/global/loadin.js +++ /dev/null @@ -1,8 +0,0 @@ -function loadHTML(elementId, url) { - fetch(url) - .then((response) => response.text()) - .then((data) => { - document.getElementById(elementId).innerHTML = data; - }) - .catch((error) => console.error("Error loading HTML:", error)); -} diff --git a/header/header.html b/header/header.html index c1ff57c..da676fc 100644 --- a/header/header.html +++ b/header/header.html @@ -8,9 +8,9 @@
nekoapril.blog
- Home + Home Kinks - Gear + Gear
diff --git a/index.js b/index.js deleted file mode 100644 index d098bfc..0000000 --- a/index.js +++ /dev/null @@ -1,5 +0,0 @@ -// Landing page JS -function loadDependencies() { - loadHTML("hd-box", "/header/header.html"); - loadHTML("footer", "/footer/footer.html"); -} diff --git a/kinks/kinks.js b/kinks/kinks.js deleted file mode 100644 index 47206ad..0000000 --- a/kinks/kinks.js +++ /dev/null @@ -1 +0,0 @@ -// Kinks page JS