static/js/components/person-projects.js (43 lines of code) (raw):
import fetchJSON from './data-loader.js';
const projects = await fetchJSON('https://whimsy.apache.org/public/public_ldap_projects.json');
var projectsById = {};
{
Object.keys(projects.projects).forEach(project => {
projects.projects[project].members.forEach(m => {
if (!projectsById[m]) {
projectsById[m] = {};
}
projectsById[m][project] = { pmc: false };
})
projects.projects[project].owners.forEach(m => {
if (!projectsById[m]) {
projectsById[m] = {};
}
projectsById[m][project] = { pmc: true };
})
})
}
// some projects websites have names that
// differ from their Whimsy name
const projectToWebsite = {
comdev: 'community'
}
// Component that replaces its content with a list of links
// to the projects that an ASF id belongs to
class PersonProjects extends HTMLElement {
async connectedCallback() {
let projectsHTML = '';
const asfid = this.getAttribute('asfid');
const theirProjects = projectsById[asfid];
if (theirProjects) {
Object.keys(theirProjects).forEach(project => {
const website = projectToWebsite[project] ? projectToWebsite[project] : project;
const isPmc = theirProjects[project].pmc;
if (projectsHTML != '') {
projectsHTML += ', ';
}
projectsHTML += `<a href=https://${website}.apache.org>${isPmc ? '<strong>' : ''}${project}${isPmc ? '</strong>' : ''}</a>`;
})
}
if (projectsHTML.length > 0) {
this.innerHTML = projectsHTML;
}
}
}
customElements.define('person-projects', PersonProjects);