Skip to content
Merged

Dev #32

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 91 additions & 5 deletions _data/codegovData.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const codegov = require('../codegov.json');
const legacyCodegov = require('../legacy-codegov.json')

module.exports = function() {

Check warning on line 4 in _data/codegovData.js

View workflow job for this annotation

GitHub Actions / Run linter

Unexpected unnamed function
const agencies = [];
const projects = [];
const organizations = new Set();
Expand Down Expand Up @@ -38,6 +39,7 @@
longDescription: release.longDescription,
status: release.status,
repositoryURL: release.repositoryURL,
homepageURL: release.homepageURL || null,
vcs: release.vcs,
repositoryType: release.repositoryType,
repositoryHost: release.repositoryHost,
Expand All @@ -47,8 +49,8 @@
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,
Expand All @@ -70,11 +72,93 @@
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",

Check failure on line 90 in _data/codegovData.js

View workflow job for this annotation

GitHub Actions / Run linter

Strings must use singlequote
measurementType: "Projects",

Check failure on line 91 in _data/codegovData.js

View workflow job for this annotation

GitHub Actions / Run linter

Strings must use singlequote
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,

Check failure on line 115 in _data/codegovData.js

View workflow job for this annotation

GitHub Actions / Run linter

Expected property shorthand
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,
Expand All @@ -84,9 +168,11 @@
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]
}
}
Expand Down
70 changes: 39 additions & 31 deletions assets/_common/js/filters.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
});
};

const applySelectFilters = (data, filters, targetType) => {

Check failure on line 33 in assets/_common/js/filters.js

View workflow job for this annotation

GitHub Actions / Run linter

Unexpected block statement surrounding arrow body; move the returned value immediately after the `=>`
return Object.entries(filters).reduce((filtered, [key, value]) => {
if (!value || key === 'search') return filtered;

Expand Down Expand Up @@ -58,7 +58,7 @@
} else {
let actualKey = key;

switch (key) {

Check failure on line 61 in assets/_common/js/filters.js

View workflow job for this annotation

GitHub Actions / Run linter

Expected a default case
case 'language':
actualKey = 'languages'
break;
Expand Down Expand Up @@ -86,7 +86,7 @@
const [field, direction] = sortBy.split('-');

return [...data].sort((a, b) => {
let aVal, bVal;

Check failure on line 89 in assets/_common/js/filters.js

View workflow job for this annotation

GitHub Actions / Run linter

Split 'let' declarations into multiple statements

switch (field) {
case 'name':
Expand All @@ -110,9 +110,9 @@
}

if (direction === 'desc') {
return aVal < bVal ? 1 : aVal > bVal ? -1 : 0;

Check failure on line 113 in assets/_common/js/filters.js

View workflow job for this annotation

GitHub Actions / Run linter

Do not nest ternary expressions
}
return aVal > bVal ? 1 : aVal < bVal ? -1 : 0;

Check failure on line 115 in assets/_common/js/filters.js

View workflow job for this annotation

GitHub Actions / Run linter

Do not nest ternary expressions
});
};

Expand Down Expand Up @@ -162,44 +162,52 @@
</div>
`;

const createProjectCardHTML = (project) => `
<div class="project-card">
<div class="usa-card__container border-base-light radius-0 border-1px hover:shadow-2 card-list-item">
<header class="usa-card__header">
<h3 class="usa-card__heading font-heading-lg margin-top-0">
<a href="${project.repositoryURL}" target="_blank" rel="noopener noreferrer">${ project.name }</a>
</h3>
<div class="usa-card__subheading font-body-sm text-base-dark">
${project.organization} • ${project.agencyName}
</div>
</header>
<div class="usa-card__body">
<p class="font-body-sm">${project.description}</p>
<div class="font-body-3xs margin-top-1">
<div class="grid-row grid-gap-1">
<div class="grid-col-auto">
<span class="usa-tag usa-tag-big">${project.status}</status>
const createProjectCardHTML = (project) => {
const ensureArray = (value) => {
if (Array.isArray(value)) return value;
if (typeof value === 'string') return [value];
return [];
}

return `
<div class="project-card">
<div class="usa-card__container border-base-light radius-0 border-1px hover:shadow-2 card-list-item">
<header class="usa-card__header">
<h3 class="usa-card__heading font-heading-lg margin-top-0">
<a href="${project.repositoryURL}" target="_blank" rel="noopener noreferrer">${ project.name }</a>
</h3>
<div class="usa-card__subheading font-body-sm text-base-dark">
${project.organization} • ${project.agencyName}
</div>
</header>
<div class="usa-card__body">
<p class="font-body-sm">${project.description}</p>
<div class="font-body-3xs margin-top-1">
<div class="grid-row grid-gap-1">
<div class="grid-col-auto">
<span class="usa-tag usa-tag-big">${project.status}</status>
</div>
${ensureArray(project.languages).slice(0, 3).map(language =>
`<div class="grid-col-auto"><span class="usa-tag">${language}</span></div>`
).join('')}
</div>
${project.languages.slice(0, 3).map(language =>
`<div class="grid-col-auto"><span class="usa-tag">${language}</span></div>`
).join('')}
</div>
</div>
</div>
<div class="usa-card__footer font-body-3xs">
<div class="grid-row">
<div class="grid-col-6">
<span class="text-bold">License: </span>${project.license.name || 'N/A'}
</div>
<div class="grid-col-6">
<span class="text-bold">Updated: </span>
${project.dates.lastModified ? new Date(project.dates.lastModified).toLocaleDateString() : 'N/A'}
<div class="usa-card__footer font-body-3xs">
<div class="grid-row">
<div class="grid-col-6">
<span class="text-bold">License: </span>${project.license.name || 'N/A'}
</div>
<div class="grid-col-6">
<span class="text-bold">Updated: </span>
${project.dates.lastModified ? new Date(project.dates.lastModified).toLocaleDateString() : 'N/A'}
</div>
</div>
</div>
</div>
</div>
</div>
`;
`;
};



Expand Down Expand Up @@ -343,7 +351,7 @@
const data = JSON.parse(dataScript.textContent);
initializeFilters(data, targetType);
} catch (error) {
console.error('Error parcing data for filters: ', error);

Check warning on line 354 in assets/_common/js/filters.js

View workflow job for this annotation

GitHub Actions / Run linter

Unexpected console statement
}
}
}
Expand Down
5 changes: 5 additions & 0 deletions assets/_common/styles/_category.scss
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,11 @@
align-items: center;
}

.agency-grid,
.project-grid {
width: 40%;
}

.agency-card,
.project-card {
margin: 0 1em 1em;
Expand Down
1 change: 0 additions & 1 deletion content/agencies/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,4 @@ templateEngineOverride: liquid, html
<div class="agency-grid"></div>
</div>

<!-- <script src='/assets/_common/js/filters.js'></script> -->
<script src='{{ assetPaths["filters.js"] }}'></script>
Loading