NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Hacker News avatars
// @version 1.1
// @include https://news.ycombinator.com/item*
// @grant none
// @description Display dicebear avatars on Hacker news comments page.
// @author rossvor
// @license MIT
// @copyright 2019, rossvor (https://openuserjs.org/users/rossvor)
// ==/UserScript==
(() => {
"use strict";
let sumHash = (str) => {
return str.split('')
.map(c => c.charCodeAt(0))
.reduce( (a, v) => a + v );
};
let getURL = (str, sources) => {
let i = sumHash(str) % sources.length;
return sources[i][0] + str + sources[i][1];
}
let users = document.querySelectorAll(".hnuser");
let sources = [
[ 'https://avatars.dicebear.com/api/adventurer/', '.svg' ],
[ 'https://avatars.dicebear.com/api/adventurer-neutral/', '.svg' ],
[ 'https://avatars.dicebear.com/api/avataaars/', '.svg' ],
[ 'https://avatars.dicebear.com/api/big-ears/', '.svg' ],
[ 'https://avatars.dicebear.com/api/big-ears-neutral/', '.svg' ],
[ 'https://avatars.dicebear.com/api/big-smile/', '.svg' ],
[ 'https://avatars.dicebear.com/api/bottts/', '.svg' ],
[ 'https://avatars.dicebear.com/api/croodles/', '.svg' ],
[ 'https://avatars.dicebear.com/api/croodles-neutral/', '.svg' ],
[ 'https://avatars.dicebear.com/api/gridy/', '.svg' ],
[ 'https://avatars.dicebear.com/api/micah/', '.svg' ],
[ 'https://avatars.dicebear.com/api/miniavs/', '.svg' ],
[ 'https://avatars.dicebear.com/api/open-peeps/', '.svg' ],
[ 'https://avatars.dicebear.com/api/personas/', '.svg' ],
[ 'https://avatars.dicebear.com/api/pixel-art/', '.svg' ],
];
users.forEach( u => {
if (u.getAttribute('has-avatar') !== null)
return;
let uname = u.textContent;
let img = document.createElement("img");
img.setAttribute('src', getURL(uname, sources));
img.setAttribute('style', 'width: 30px; border-radius: 12%;');
u.parentElement.appendChild(img);
u.setAttribute('has-avatar', '');
});
})();