diff --git a/public/common/utils.js b/public/common/utils.js index 3f247285..31e5c245 100644 --- a/public/common/utils.js +++ b/public/common/utils.js @@ -119,13 +119,13 @@ export function parseRepositoryUrl(repository = {}, defaultValue = null) { } } -export function createAvatarImageElement(email = null) { +function createImageElement(baseUrl, id = null){ const imageElement = document.createElement("img"); - if (email === null || email === "") { + if (id === null || id === "") { imageElement.src = `${avatarURL}`; } else { - imageElement.src = `https://unavatar.io/${email}`; + imageElement.src = `${baseUrl}/${id}`; imageElement.onerror = () => { imageElement.src = `${avatarURL}`; }; @@ -134,6 +134,12 @@ export function createAvatarImageElement(email = null) { return imageElement; } +export function createAvatarImageElementForAuthor(author = {}) { + return author.npmAvatar + ? createImageElement("https://www.npmjs.com", author.npmAvatar) + : createImageElement("https://unavatar.io", author.email); +} + export function createAvatar(name, desc) { const pElement = createDOMElement("p", { classList: ["count"], text: desc.count @@ -143,7 +149,7 @@ export function createAvatar(name, desc) { classList: ["avatar"], childs: [pElement, aElement] }); - const imgEl = createAvatarImageElement(desc.email); + const imgEl = createAvatarImageElementForAuthor({ email: desc.email }); imgEl.alt = name; aElement.appendChild(imgEl); diff --git a/public/components/package/pannels/overview/overview.js b/public/components/package/pannels/overview/overview.js index d1c27a69..73bfff65 100644 --- a/public/components/package/pannels/overview/overview.js +++ b/public/components/package/pannels/overview/overview.js @@ -163,7 +163,7 @@ export class Overview { for (const author of metadata.maintainers) { const divElement = utils.createDOMElement("div", { childs: [ - utils.createAvatarImageElement(author.email), + utils.createAvatarImageElementForAuthor(author), utils.createDOMElement("p", { text: author.name }), diff --git a/public/components/views/home/maintainers/maintainers.js b/public/components/views/home/maintainers/maintainers.js index 9410d15b..e2379897 100644 --- a/public/components/views/home/maintainers/maintainers.js +++ b/public/components/views/home/maintainers/maintainers.js @@ -49,7 +49,7 @@ export class Maintainers { const person = utils.createDOMElement("div", { className: "person", childs: [ - utils.createAvatarImageElement(email), + utils.createAvatarImageElementForAuthor(data), Maintainers.whois(name, email), hasURL ? utils.createDOMElement("i", { className: "icon-link" }) : null, utils.createDOMElement("div", { @@ -96,7 +96,7 @@ export class PopupMaintainer { const clone = templateElement.content.cloneNode(true); clone.querySelector(".avatar").appendChild( - utils.createAvatarImageElement(email) + utils.createAvatarImageElementForAuthor(this.data) ); clone.querySelector(".name").textContent = this.name; const emailElement = clone.querySelector(".email"); diff --git a/workspaces/vis-network/src/dataset.js b/workspaces/vis-network/src/dataset.js index 6bf1025f..959b8295 100644 --- a/workspaces/vis-network/src/dataset.js +++ b/workspaces/vis-network/src/dataset.js @@ -72,6 +72,7 @@ export default class NodeSecureDataSet extends EventTarget { this.rawNodesData = []; for (const [packageName, descriptor] of dataEntries) { + const contributors = [descriptor.metadata.author, ...descriptor.metadata.maintainers, ...descriptor.metadata.publishers] for (const [currVersion, opt] of Object.entries(descriptor.versions)) { const { id, usedBy, flags, size, license, author, composition, warnings, links } = opt; @@ -86,7 +87,7 @@ export default class NodeSecureDataSet extends EventTarget { this.computeExtension(composition.extensions); this.computeLicense(license); - this.computeAuthor(author, `${packageName}@${currVersion}`); + this.computeAuthor(author, `${packageName}@${currVersion}`, contributors); if (flags.includes("hasIndirectDependencies")) { this.indirectDependencies++; @@ -150,10 +151,11 @@ export default class NodeSecureDataSet extends EventTarget { } } - computeAuthor(author, spec) { + computeAuthor(author, spec, contributors = []) { if (author === null) { return; } + const contributor = contributors.find((contributor) => contributor.email === author.email && contributor.npmAvatar !== null); if (this.authors.has(author.name)) { this.authors.get(author.name).packages.add(spec); @@ -164,6 +166,9 @@ export default class NodeSecureDataSet extends EventTarget { Object.assign({}, author, { packages: new Set([spec]) }) ); } + if (contributor && contributor.npmAvatar) { + this.authors.get(author.name).npmAvatar = contributor.npmAvatar; + } } build() {