116 lines
4.1 KiB
JavaScript
116 lines
4.1 KiB
JavaScript
(() => {
|
|
const OWNER = "You-re-like-Windows-a-bitch";
|
|
const REPO = "ISO";
|
|
const API_URL = `https://api.github.com/repos/${OWNER}/${REPO}/releases?per_page=6`;
|
|
const REPO_URL = `https://github.com/${OWNER}/${REPO}`;
|
|
|
|
const currentVersionNode = document.querySelector("[data-current-version]");
|
|
const currentVersionDateNode = document.querySelector("[data-current-version-date]");
|
|
const currentReleaseNoteNode = document.querySelector("[data-current-release-note]");
|
|
const latestDownloadNode = document.querySelector("[data-latest-download]");
|
|
const versionsListNode = document.querySelector("[data-versions-list]");
|
|
|
|
function formatDate(value) {
|
|
if (!value) return "";
|
|
const date = new Date(value);
|
|
if (Number.isNaN(date.getTime())) return "";
|
|
return date.toLocaleDateString("fr-FR", {
|
|
year: "numeric",
|
|
month: "long",
|
|
day: "numeric",
|
|
});
|
|
}
|
|
|
|
function getDirectDownloadUrl(release) {
|
|
if (release?.assets?.length) {
|
|
return release.assets[0].browser_download_url || release.assets[0].url || release.html_url || "#";
|
|
}
|
|
return release?.html_url || "#";
|
|
}
|
|
|
|
function getReleaseLabel(release) {
|
|
return release.name || release.tag_name || "Sans nom";
|
|
}
|
|
|
|
function renderReleaseList(releases) {
|
|
if (!versionsListNode) return;
|
|
versionsListNode.innerHTML = "";
|
|
|
|
releases.slice(1, 6).forEach((release) => {
|
|
const li = document.createElement("li");
|
|
li.className = "version-item";
|
|
|
|
const versionLabel = getReleaseLabel(release);
|
|
const downloadUrl = getDirectDownloadUrl(release);
|
|
const published = formatDate(release.published_at);
|
|
|
|
li.innerHTML = `
|
|
<div class="version-main">
|
|
<strong>${versionLabel}</strong>
|
|
<span>${published ? `Publié le ${published}` : "Date inconnue"}</span>
|
|
</div>
|
|
<div class="version-side">
|
|
<a class="button button-secondary" href="${downloadUrl}" target="_blank" rel="noreferrer">Télécharger</a>
|
|
</div>
|
|
`;
|
|
|
|
versionsListNode.appendChild(li);
|
|
});
|
|
}
|
|
|
|
async function loadReleases() {
|
|
if (currentVersionNode) currentVersionNode.textContent = "Chargement...";
|
|
|
|
try {
|
|
const response = await fetch(API_URL, {
|
|
headers: {
|
|
Accept: "application/vnd.github+json",
|
|
},
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`GitHub API ${response.status}`);
|
|
}
|
|
|
|
const releases = await response.json();
|
|
if (!Array.isArray(releases) || releases.length === 0) {
|
|
throw new Error("Aucune release trouvée");
|
|
}
|
|
|
|
const latest = releases[0];
|
|
const latestLabel = getReleaseLabel(latest);
|
|
const latestDownloadUrl = getDirectDownloadUrl(latest);
|
|
const latestDate = formatDate(latest.published_at);
|
|
|
|
if (currentVersionNode) currentVersionNode.textContent = latestLabel;
|
|
if (currentVersionDateNode) currentVersionDateNode.textContent = latestDate ? ` · ${latestDate}` : "";
|
|
if (currentReleaseNoteNode) currentReleaseNoteNode.textContent = latest.body || "Release GitHub la plus récente.";
|
|
if (latestDownloadNode) latestDownloadNode.href = latestDownloadUrl;
|
|
|
|
renderReleaseList(releases);
|
|
} catch (error) {
|
|
if (currentVersionNode) currentVersionNode.textContent = "Impossible de charger les releases";
|
|
if (currentReleaseNoteNode) {
|
|
currentReleaseNoteNode.textContent = `Erreur: ${error.message}. Vérifie que le repo GitHub est public et qu'il expose des releases.`;
|
|
}
|
|
if (latestDownloadNode) {
|
|
latestDownloadNode.href = REPO_URL;
|
|
}
|
|
if (versionsListNode) {
|
|
versionsListNode.innerHTML = `
|
|
<li class="version-item version-item-empty">
|
|
<div class="version-main">
|
|
<strong>Impossible de charger les anciennes versions</strong>
|
|
<span>Ouvre le repo GitHub pour voir les releases.</span>
|
|
</div>
|
|
<div class="version-side">
|
|
<a class="button button-secondary" href="${REPO_URL}" target="_blank" rel="noreferrer">Voir le repo</a>
|
|
</div>
|
|
</li>
|
|
`;
|
|
}
|
|
}
|
|
}
|
|
|
|
loadReleases();
|
|
})(); |