framework/ember/app/helpers/user-avatar.js

58 lines
1.7 KiB
JavaScript
Raw Normal View History

2014-12-20 16:56:46 +10:30
import Ember from 'ember';
2015-01-21 14:29:00 +10:30
function hsvToRgb(h, s, v) {
2014-12-20 16:56:46 +10:30
var r, g, b, i, f, p, q, t;
if (h && s === undefined && v === undefined) {
2015-01-21 14:29:00 +10:30
s = h.s; v = h.v; h = h.h;
2014-12-20 16:56:46 +10:30
}
i = Math.floor(h * 6);
f = h * 6 - i;
p = v * (1 - s);
q = v * (1 - f * s);
t = v * (1 - (1 - f) * s);
switch (i % 6) {
2015-01-21 14:29:00 +10:30
case 0: r = v; g = t; b = p; break;
case 1: r = q; g = v; b = p; break;
case 2: r = p; g = v; b = t; break;
case 3: r = p; g = q; b = v; break;
case 4: r = t; g = p; b = v; break;
case 5: r = v; g = p; b = q; break;
2014-12-20 16:56:46 +10:30
}
return {
r: Math.floor(r * 255),
g: Math.floor(g * 255),
b: Math.floor(b * 255)
};
}
export default Ember.Handlebars.makeBoundHelper(function(user, options) {
2015-01-21 14:29:00 +10:30
if (!user) {
return;
}
2014-12-20 16:56:46 +10:30
var number;
if (number = user.get('avatarNumber')) {
number = number + '';
var filename = number.length >= 3 ? number : new Array(3 - number.length + 1).join('0') + number;
2015-01-21 14:29:00 +10:30
return new Ember.Handlebars.SafeString('<img src="/packages/flarum/core/avatars/'+filename+'.jpg" class="avatar '+options.hash.class+'">');
2014-12-20 16:56:46 +10:30
}
var username = user.get('username');
2015-01-21 14:29:00 +10:30
if (!username) {
username = '?';
}
2014-12-20 16:56:46 +10:30
var letter = username.charAt(0).toUpperCase();
var num = 0;
for (var i = 0; i < username.length; i++) {
num += username.charCodeAt(i) * 13;
}
var hue = num % 360;
2015-01-21 14:29:00 +10:30
var rgb = hsvToRgb(hue / 360, 100 / 255, 200 / 255);
2014-12-20 16:56:46 +10:30
var bg = ''+rgb.r.toString(16)+rgb.g.toString(16)+rgb.b.toString(16);
2015-01-21 14:29:00 +10:30
return new Ember.Handlebars.SafeString('<span class="avatar '+options.hash.class+'" style="background:#'+bg+'" title="'+username+'">'+letter+'</span>');
2014-12-20 16:56:46 +10:30
});