From: Darren Date: Sun, 2 Sep 2012 20:51:03 +0000 (+0100) Subject: Nick colours X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=1167a85d0b657cec00c5e5d6f3c9a1b24042441b;p=KiwiIRC.git Nick colours --- diff --git a/client_backbone/dev/utils.js b/client_backbone/dev/utils.js index d80fd80..bd4d6a2 100644 --- a/client_backbone/dev/utils.js +++ b/client_backbone/dev/utils.js @@ -97,6 +97,51 @@ function secondsToTime(secs) { +/** + * Convert HSL to RGB formatted colour + */ +function hsl2rgb(h, s, l) { + var m1, m2, hue; + var r, g, b + s /=100; + l /= 100; + if (s == 0) + r = g = b = (l * 255); + else { + function HueToRgb(m1, m2, hue) { + var v; + if (hue < 0) + hue += 1; + else if (hue > 1) + hue -= 1; + + if (6 * hue < 1) + v = m1 + (m2 - m1) * hue * 6; + else if (2 * hue < 1) + v = m2; + else if (3 * hue < 2) + v = m1 + (m2 - m1) * (2/3 - hue) * 6; + else + v = m1; + + return 255 * v; + } + if (l <= 0.5) + m2 = l * (s + 1); + else + m2 = l + s - l * s; + m1 = l * 2 - m2; + hue = h / 360; + r = HueToRgb(m1, m2, hue + 1/3); + g = HueToRgb(m1, m2, hue); + b = HueToRgb(m1, m2, hue - 1/3); + } + return [r,g,b]; +} + + + + /** * Formats a message. Adds bold, underline and colouring diff --git a/client_backbone/dev/view.js b/client_backbone/dev/view.js index 8e24ca7..679139a 100644 --- a/client_backbone/dev/view.js +++ b/client_backbone/dev/view.js @@ -173,7 +173,8 @@ kiwi.view.Panel = Backbone.View.extend({ }, newMsg: function (msg) { // TODO: make sure that the message pane is scrolled to the bottom (Or do we? ~Darren) - var re, line_msg, $this = this.$el; + var re, line_msg, $this = this.$el, + nick_colour_hex; // Escape any HTML that may be in here msg.msg = $('
').text(msg.msg).html(); @@ -206,8 +207,22 @@ kiwi.view.Panel = Backbone.View.extend({ // Convert IRC formatting into HTML formatting msg.msg = formatIRCMsg(msg.msg); + + // Add some colours to the nick (Method based on IRSSIs nickcolor.pl) + nick_colour_hex = (function (nick) { + var nick_int = 0, rgb; + + nick.split('').map(function (i) { nick_int += i.charCodeAt(0); }); + rgb = hsl2rgb(nick_int % 255, 70, 35); + rgb = rgb[2] | (rgb[1] << 8) | (rgb[0] << 16); + + return '#' + rgb.toString(16); + })(msg.nick); + + msg.nick_style = 'color:' + nick_colour_hex + ';'; + // Build up and add the line - line_msg = '
<%- time %>
<%- nick %>
<%= msg %>
'; + line_msg = '
<%- time %>
<%- nick %>
<%= msg %>
'; $this.append(_.template(line_msg, msg)); this.scrollToBottom();