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', ''); }); })();