]> jfr.im git - irc/quakenet/qwebirc.git/blobdiff - js/ui/colour.js
> now not allowed at end of urls
[irc/quakenet/qwebirc.git] / js / ui / colour.js
index 0dd718984289f977b1cda232c48b01259ec0233a..a5d7c7751e6630e2eb0f7ffaec0b300982d3c819 100644 (file)
@@ -3,7 +3,8 @@ qwebirc.ui.Colourise = function(line, entity, execfn, cmdfn, window) {
   var bg;
   var underline = false;
   var bold = false;
-
+  var autoNickColour = false;
+  
   var out = [];
   var xline = line.split("");
   var element = document.createElement("span");
@@ -43,14 +44,20 @@ qwebirc.ui.Colourise = function(line, entity, execfn, cmdfn, window) {
   }
 
   function emitEndToken() {
+    var data = "";
     if(out.length > 0) {
-      qwebirc.ui.urlificate(element, out.join(""), execfn, cmdfn, window);
+      var data = qwebirc.ui.urlificate(element, out.join(""), execfn, cmdfn, window);
       entity.appendChild(element);
       out = [];
     }
     element = document.createElement("span");
+    return data;
   }  
+  
   function emitStartToken() {
+    if(autoNickColour)
+      return element;
+      
     var classes = []
     if(fg != undefined)
       classes.push("Xc" + fg);
@@ -63,8 +70,37 @@ qwebirc.ui.Colourise = function(line, entity, execfn, cmdfn, window) {
     element.className = classes.join(" ");
   }
   
-  for(i=0;i<xline.length;i++) {
+  var nickColouring = window.parentObject.uiOptions.NICK_COLOURS; /* HACK */
+  var capturingNick = false;
+  for(var i=0;i<xline.length;i++) {
     var lc = xline[i];
+
+    if(nickColouring) {
+      if(!capturingNick) {
+        if(lc == "\x00") {
+          capturingNick = true;
+          emitEndToken();
+          continue;
+        }
+      } else {
+        if(lc != "\x00") {
+          out.push(lc);
+        } else {
+          autoNickColour = true;
+          var e = emitStartToken();
+          var text = emitEndToken();
+          
+          var c = text.toHSBColour(window.client);
+          if($defined(c))
+            e.style.color = c.rgbToHex();
+          capturingNick = autoNickColour = false;
+        }
+        continue;
+      }
+    } else if(lc == "\x00") {
+      continue;
+    }
+    
     if(lc == "\x02") {
       emitEndToken();
 
@@ -101,3 +137,17 @@ qwebirc.ui.Colourise = function(line, entity, execfn, cmdfn, window) {
   
   emitEndToken();
 }
+
+String.prototype.toHSBColour = function(client) {
+  var lower = client.toIRCLower(client.stripPrefix(this));
+  if(lower == client.lowerNickname)
+    return null;
+    
+  var hash = 0;
+  for(var i=0;i<lower.length;i++)
+    hash = 31 * hash + lower.charCodeAt(i);
+  
+  var hue = Math.abs(hash) % 360;
+
+  return new Color([hue, 70, 60], "hsb");
+}