From f7684eb38d495d23a3e1d68dd627706b10c71dc6 Mon Sep 17 00:00:00 2001 From: Dinne Kopelevich Date: Tue, 10 Jun 2025 13:59:08 -0600 Subject: [PATCH] Add legacy code Signed-off-by: Dinne Kopelevich --- _data/codegovData.js | 96 ++++++++++++++++++++++++++-- assets/_common/js/filters.js | 70 +++++++++++--------- assets/_common/styles/_category.scss | 5 ++ content/agencies/index.md | 1 - 4 files changed, 135 insertions(+), 37 deletions(-) diff --git a/_data/codegovData.js b/_data/codegovData.js index f052f520..9c4f5511 100644 --- a/_data/codegovData.js +++ b/_data/codegovData.js @@ -1,4 +1,5 @@ const codegov = require('../codegov.json'); +const legacyCodegov = require('../legacy-codegov.json') module.exports = function() { const agencies = []; @@ -38,6 +39,7 @@ module.exports = function() { longDescription: release.longDescription, status: release.status, repositoryURL: release.repositoryURL, + homepageURL: release.homepageURL || null, vcs: release.vcs, repositoryType: release.repositoryType, repositoryHost: release.repositoryHost, @@ -47,8 +49,8 @@ module.exports = function() { tags: release.tags || [], softwareType: release.softwareType, license: { - name: release.permissions?.license?.[0]?.name, - url: release.permissions?.license?.[0]?.URL + name: release.permissions?.license?.[0]?.name || release.permissions?.licenses?.[0]?.name, + url: release.permissions?.license?.[0]?.URL || release.permissions?.licenses?.[0]?.URL }, usageType: release.permissions?.usageType, exemptionText: release.permissions?.exemptionText, @@ -70,11 +72,93 @@ module.exports = function() { subsetInGovernment: release.subsetInGovernment, userType: release.usageType, maturityModelTier: release.maturityModelTier, - projectType: release.projectType + projectType: release.projectType, + relatedCode: release.relatedCode || [], + downloadURL: release.downloadURL || null }); }); }); + Object.entries(legacyCodegov).forEach(([agencyName, releases]) => { + const agencyOrgs = [...new Set(releases.map(release => release.organization))]; + + const existingAgency = agencies.find(agency => agency.name === agencyName); + if (!existingAgency) { + agencies.push({ + code: agencyName, + name: agencyName, + version: "1.0.0", + measurementType: "Projects", + organizations: agencyOrgs, + projectCount: releases.length, + totalLaborHours: releases.reduce((acc, curr) => acc + (curr.laborHours || 0), 0) + }); + } + + releases.forEach(release => { + organizations.add(release.organization); + release.categories?.forEach(category => allCategories.add(category)); + release.platforms?.forEach(platform => allPlatforms.add(platform)); + release.tags?.forEach(tag => allTags.add(tag)); + + if (release.languages) { + if (Array.isArray(release.languages)) { + release.languages?.forEach(language => language && allLanguages.add(language)); + } else if (typeof release.language === 'string') { + allLanguages.add(release.languages) + } + } + + + projects.push({ + agencyCode: agencyName, + agencyName: agencyName, + organization: release.organization, + name: release.name, + description: release.description, + longDescription: release.longDescription || release.description, + status: release.status, + repositoryURL: release.repositoryURL, + homepageURL: release.homepageURL || null, + vcs: release.vcs, + repositoryType: release.repositoryType || null, + repositoryHost: release.repositoryHost || null, + platforms: release.platforms || [], + categories: release.categories || [], + languages: release.languages || [], + tags: release.tags || [], + softwareType: release.softwareType || null, + license: { + name: release.permissions?.licenses?.[0]?.name || release.permissions?.license?.[0]?.name, + url: release.permissions?.licenses?.[0]?.URL || release.permissions?.license?.[0]?.URL + }, + usageType: release.permissions?.usageType, + exemptionText: release.permissions?.exemptionText || null, + laborHours: release.laborHours || 0, + dates: { + created: release.date?.created, + lastModified: release.date?.lastModified, + metaDataLastUpdated: release.date?.metaDataLastUpdated + }, + contact: { + email: release.contact?.email, + name: release.contact?.name + }, + maintenance: release.maintenance || null, + localisation: release.localisation || null, + userInput: release.userInput || null, + fismaLevel: release.fismaLevel || null, + group: release.group || null, + subsetInGovernment: release.subsetInGovernment || null, + userType: release.usageType || null, + maturityModelTier: release.maturityModelTier || null, + projectType: release.projectType || null, + relatedCode: release.relatedCode || [], + downloadURL: release.downloadURL || null + }); + }); + }) + return { agencies, projects, @@ -84,9 +168,11 @@ module.exports = function() { languages: Array.from(allLanguages).sort(), platforms: Array.from(allPlatforms).sort(), tags: Array.from(allTags).sort(), - statuses: ['Production', 'Development', 'Archival'], + statuses: ['Production', 'Development', 'Archival', 'Beta', 'Ideation', + 'Release Candidate', 'Alpha v0.11 (Prototype)'], fismaLevels: ['Low', 'Moderate', 'High'], - usageTypes: ['openSource'], + usageTypes: ['openSource', 'exemptByLaw', 'exemptByAgencySystem', 'exemptByAgencyMission', + 'governmentWideReuse', 'exemptByNationalSecurity', ], maturityTiers: [0, 1, 2, 3, 4] } } diff --git a/assets/_common/js/filters.js b/assets/_common/js/filters.js index ebe06502..22f4479d 100644 --- a/assets/_common/js/filters.js +++ b/assets/_common/js/filters.js @@ -162,44 +162,52 @@ const createAgencyCardHTML = (agency) => ` `; -const createProjectCardHTML = (project) => ` -
-
-
-

- ${ project.name } -

-
- ${project.organization} • ${project.agencyName} -
-
-
-

${project.description}

-
-
-
- ${project.status} +const createProjectCardHTML = (project) => { + const ensureArray = (value) => { + if (Array.isArray(value)) return value; + if (typeof value === 'string') return [value]; + return []; + } + + return ` +
+
+
+

+ ${ project.name } +

+
+ ${project.organization} • ${project.agencyName} +
+
+
+

${project.description}

+
+
+
+ ${project.status} +
+ ${ensureArray(project.languages).slice(0, 3).map(language => + `
${language}
` + ).join('')}
- ${project.languages.slice(0, 3).map(language => - `
${language}
` - ).join('')}
-
- -`; + `; +}; diff --git a/assets/_common/styles/_category.scss b/assets/_common/styles/_category.scss index 0dbda3a1..bc71993b 100644 --- a/assets/_common/styles/_category.scss +++ b/assets/_common/styles/_category.scss @@ -171,6 +171,11 @@ align-items: center; } + .agency-grid, + .project-grid { + width: 40%; + } + .agency-card, .project-card { margin: 0 1em 1em; diff --git a/content/agencies/index.md b/content/agencies/index.md index 54bd3fd6..379582a1 100644 --- a/content/agencies/index.md +++ b/content/agencies/index.md @@ -21,5 +21,4 @@ templateEngineOverride: liquid, html
-