const { kFormatter, encodeHTML, fallbackColor, FlexLayout, } = require("../src/utils"); const icons = require("./icons"); const renderRepoCard = (repo, options = {}) => { const { name, nameWithOwner, description, primaryLanguage, stargazers, isArchived, forkCount, } = repo; const { title_color, icon_color, text_color, bg_color, show_owner } = options; const header = show_owner ? nameWithOwner : name; const langName = primaryLanguage ? primaryLanguage.name : "Unspecified"; const langColor = primaryLanguage ? primaryLanguage.color : "#333"; const height = 120; const shiftText = langName.length > 15 ? 0 : 30; let desc = description || "No description provided"; if (desc.length > 55) { desc = `${description.slice(0, 55)}..`; } const titleColor = fallbackColor(title_color, "#2f80ed"); const iconColor = fallbackColor(icon_color, "#586069"); const textColor = fallbackColor(text_color, "#333"); const bgColor = fallbackColor(bg_color, "#FFFEFE"); const totalStars = kFormatter(stargazers.totalCount); const totalForks = kFormatter(forkCount); const archiveBadge = isArchived ? ` Archived ` : ""; const svgLanguage = ` ${langName} `; const svgStars = stargazers.totalCount > 0 && ` ${icons.star} ${totalStars} `; const svgForks = totalForks > 0 && ` ${icons.fork} ${totalForks} `; return ` ${icons.contribs} ${archiveBadge} ${header} ${encodeHTML(desc)} ${svgLanguage} ${FlexLayout({ items: [svgStars, svgForks], gap: 65 }).join("")} `; }; module.exports = renderRepoCard;