diff --git a/ember/app/helpers/user-avatar.js b/ember/app/helpers/user-avatar.js
index 470a9f427..a989675b4 100644
--- a/ember/app/helpers/user-avatar.js
+++ b/ember/app/helpers/user-avatar.js
@@ -1,57 +1,22 @@
import Ember from 'ember';
-function hsvToRgb(h, s, v) {
- var r, g, b, i, f, p, q, t;
- if (h && s === undefined && v === undefined) {
- s = h.s; v = h.v; h = h.h;
- }
- 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) {
- 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;
- }
- return {
- r: Math.floor(r * 255),
- g: Math.floor(g * 255),
- b: Math.floor(b * 255)
- };
-}
-
export default Ember.Handlebars.makeBoundHelper(function(user, options) {
- if (!user) {
- return;
+ var attributes = 'class="avatar '+options.hash.class+'"';
+ var content = '';
+
+ if (user) {
+ var username = user.get('username') || '?';
+ attributes += ' title="'+Ember.Handlebars.Utils.escapeExpression(username)+'"';
+
+ var avatarUrl = user.get('avatarUrl');
+ if (avatarUrl) {
+ return new Ember.Handlebars.SafeString('
');
}
- // var number;
- // if (number = user.get('avatarNumber')) {
- // number = number + '';
- // var filename = number.length >= 3 ? number : new Array(3 - number.length + 1).join('0') + number;
- // return new Ember.Handlebars.SafeString('
');
- // }
+ content = username.charAt(0).toUpperCase();
+ attributes += ' style="background:'+user.get('color')+'"';
+ }
- var username = user.get('username');
- if (!username) {
- username = '?';
- }
-
- 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;
- var rgb = hsvToRgb(hue / 360, 100 / 255, 200 / 255);
- var bg = ''+rgb.r.toString(16)+rgb.g.toString(16)+rgb.b.toString(16);
- return new Ember.Handlebars.SafeString(''+letter+'');
+ return new Ember.Handlebars.SafeString(''+content+'');
});
diff --git a/ember/app/models/user.js b/ember/app/models/user.js
index 51a17e774..5b5a9d037 100644
--- a/ember/app/models/user.js
+++ b/ember/app/models/user.js
@@ -1,5 +1,7 @@
import DS from 'ember-data';
+import stringToColor from 'flarum/utils/string-to-color';
+
export default DS.Model.extend({
username: DS.attr('string'),
email: DS.attr('string'),
@@ -16,5 +18,9 @@ export default DS.Model.extend({
postsCount: DS.attr('number'),
canEdit: DS.attr('boolean'),
- canDelete: DS.attr('boolean')
+ canDelete: DS.attr('boolean'),
+
+ color: Ember.computed('username', function() {
+ return '#'+stringToHex(this.get('username'));
+ })
});
diff --git a/ember/app/utils/string-to-color.js b/ember/app/utils/string-to-color.js
new file mode 100644
index 000000000..150beb70a
--- /dev/null
+++ b/ember/app/utils/string-to-color.js
@@ -0,0 +1,36 @@
+import Ember from 'ember';
+
+function hsvToRgb(h, s, v) {
+ var r, g, b, i, f, p, q, t;
+ if (h && s === undefined && v === undefined) {
+ s = h.s; v = h.v; h = h.h;
+ }
+ 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) {
+ 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;
+ }
+ return {
+ r: Math.floor(r * 255),
+ g: Math.floor(g * 255),
+ b: Math.floor(b * 255)
+ };
+}
+
+export default function(string) {
+ var num = 0;
+ for (var i = 0; i < string.length; i++) {
+ num += string.charCodeAt(i);
+ }
+ var hue = num % 360;
+ var rgb = hsvToRgb(hue / 360, 100 / 255, 200 / 255);
+ return ''+rgb.r.toString(16)+rgb.g.toString(16)+rgb.b.toString(16);
+};