You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
"use strict";
|
|
|
|
const jdenticon = require("jdenticon");
|
|
const defaultValue = require("default-value");
|
|
|
|
module.exports = function generateJdenticon(name) {
|
|
function setConfig() {
|
|
/* NOTE: This is a hack to ensure that any other code using the `jdenticon` library can't mess with our config, since it's set globally. This function gets called prior to *every* jdenticon-generating operation. */
|
|
jdenticon.config = {
|
|
lightness: {
|
|
color: [0.58, 0.66],
|
|
grayscale: [0.30, 0.90]
|
|
},
|
|
saturation: {
|
|
color: 0.66,
|
|
grayscale: 0.00
|
|
},
|
|
backColor: "#00000000"
|
|
};
|
|
}
|
|
|
|
return {
|
|
toSvg: function (size) {
|
|
setConfig();
|
|
|
|
return jdenticon.toSvg(name, size);
|
|
},
|
|
primaryColor: function () {
|
|
let svg = this.toSvg();
|
|
|
|
let color = svg.match(/#([a-f0-9]{6})/g).find((candidate) => {
|
|
let r = candidate.substr(1, 2);
|
|
let g = candidate.substr(3, 2);
|
|
let b = candidate.substr(5, 2);
|
|
|
|
let isGrayScale = (r === g && g === b);
|
|
|
|
return !isGrayScale;
|
|
});
|
|
|
|
return defaultValue(color, "#ff0000");
|
|
},
|
|
update: function (element) {
|
|
setConfig();
|
|
|
|
jdenticon.update(element, name);
|
|
}
|
|
}
|
|
};
|