(() => { "use strict"; const grid = document.querySelector("#project-grid"); const refreshButton = document.querySelector("#refresh-projects"); const status = document.querySelector("#refresh-status"); const projectCounts = document.querySelectorAll("[data-project-count]"); const liveStatus = document.querySelector("#live-status"); const liveStatusLabel = document.querySelector("#live-status-label"); if (!grid || !refreshButton || !status || !liveStatus || !liveStatusLabel) { return; } document.body.classList.add("is-enhanced"); const createProjectCard = (project) => { if ( typeof project.name !== "string" || typeof project.route_path !== "string" || !project.route_path.startsWith("/") || project.route_path.startsWith("//") ) { return null; } const link = document.createElement("a"); link.className = "site-item"; link.href = project.route_path; link.title = project.name; const cardTop = document.createElement("div"); cardTop.className = "site-card-top"; const avatar = document.createElement("span"); avatar.className = "site-avatar"; avatar.setAttribute("aria-hidden", "true"); avatar.textContent = Array.from(project.name)[0]?.toUpperCase() || "A"; const open = document.createElement("span"); open.className = "site-open"; open.setAttribute("aria-hidden", "true"); open.innerHTML = ` `; cardTop.append(avatar, open); const info = document.createElement("div"); info.className = "site-info"; const name = document.createElement("h3"); name.className = "site-name"; name.textContent = project.name; const description = document.createElement("span"); description.className = "site-desc"; description.textContent = "本地静态应用"; info.append(name, description); const footer = document.createElement("div"); footer.className = "site-card-footer"; const path = document.createElement("span"); path.className = "site-path"; path.textContent = project.route_path; const ready = document.createElement("span"); ready.className = "site-ready"; ready.textContent = "READY"; footer.append(path, ready); link.append(cardTop, info, footer); return link; }; let renderedSignature = JSON.stringify( Array.from(grid.querySelectorAll(".site-item")).map((link) => [ link.title, link.getAttribute("href"), ]), ); const projectsSignature = (projects) => JSON.stringify( projects.map((project) => [project.name, project.route_path]), ); const renderProjects = (projects) => { const nextSignature = projectsSignature(projects); if (nextSignature === renderedSignature) { return false; } grid.replaceChildren(); if (projects.length === 0) { const emptyState = document.createElement("div"); emptyState.className = "empty-state"; emptyState.innerHTML = `
在托管根目录下创建子目录,并放入 index.html,刷新后即可在这里看到它。