FILE / ScuroNeko/scuroneko.dev

js/links.js

Исходный файл и его история в репозитории.
FILE 2e08f415474da00d1b3cf2ef7ed05933cfabf21e
Files
scuroneko.dev/js/links.js
T
2026-04-14 16:20:22 +03:00

49 lines
1.4 KiB
JavaScript

const loadLinks = async () => {
const linkContainer = document.getElementById("links");
if (!linkContainer) {
return;
}
linksList = await fetchJson("./data/links.json");
const linkCards = linksList.map(buildLinkCard);
linkContainer.replaceChildren(...linkCards);
};
const buildLinkCard = (item, index) => {
const card = document.createElement("a");
card.classList.add("link-card", `tone-${item.tone ?? "mint"}`);
card.href = item.url;
card.target = "_blank";
card.rel = "noreferrer";
const indexBadge = document.createElement("span");
indexBadge.classList.add("link-card__index");
indexBadge.textContent = formatIndex(index);
const badge = document.createElement("span");
badge.classList.add("link-card__badge");
badge.textContent = item.key;
loadIcon(item.key).then((svg) => (badge.innerHTML = svg));
const body = document.createElement("span");
body.classList.add("link-card__body");
const name = document.createElement("span");
name.classList.add("link-card__name");
name.textContent = item.name;
const label = document.createElement("span");
label.classList.add("link-card__label");
label.textContent = item.label;
const arrow = document.createElement("span");
arrow.classList.add("link-card__arrow");
arrow.textContent = "open";
body.append(name, label);
card.append(indexBadge, badge, body, arrow);
return card;
};