]> jfr.im git - irc/quakenet/qwebirc.git/blob - static/js/ui/colour.js
IRCClient classes are now mootoolsified.
[irc/quakenet/qwebirc.git] / static / js / ui / colour.js
1 function Colourise(line, entity) {
2 var fg;
3 var bg;
4 var underline = false;
5 var bold = false;
6
7 var out = [];
8 var xline = line.split("");
9 var element = document.createElement("span");
10
11 function isNum(x) {
12 return x >= '0' && x <= '9';
13 }
14
15 function parseColours(xline, i) {
16 if(!isNum(xline[i + 1])) {
17 fg = undefined;
18 bg = undefined;
19 return i;
20 }
21 i++;
22 if(isNum(xline[i + 1])) {
23 fg = parseInt(xline[i] + xline[i + 1]);
24 i++;
25 } else {
26 fg = parseInt(xline[i]);
27 }
28 if(xline[i + 1] != ",")
29 return i;
30 if(!isNum(xline[i + 2]))
31 return i;
32 i+=2;
33
34 if(isNum(xline[i + 1])) {
35 bg = parseInt(xline[i] + xline[i + 1]);
36 i++;
37 } else {
38 bg = parseInt(xline[i]);
39 }
40 return i;
41 }
42
43 function emitEndToken() {
44 if(out.length > 0) {
45 element.appendChild(document.createTextNode(out.join("")));
46 entity.appendChild(element);
47 out = [];
48 }
49 element = document.createElement("span");
50 }
51 function emitStartToken() {
52 classes = []
53 if(fg != undefined)
54 classes.push("Xc" + fg);
55 if(bg != undefined)
56 classes.push("Xbc" + bg);
57 if(bold)
58 classes.push("Xb");
59 if(underline)
60 classes.push("Xu");
61 element.className = classes.join(" ");
62 }
63
64 for(i=0;i<xline.length;i++) {
65 var lc = xline[i];
66 if(lc == "\x02") {
67 emitEndToken();
68
69 bold = !bold;
70
71 emitStartToken();
72 } else if(lc == "\x1F") {
73 emitEndToken();
74
75 underline = !underline;
76
77 emitStartToken();
78 } else if(lc == "\x0F") {
79 emitEndToken();
80
81 fg = undefined;
82 bg = undefined;
83 underline = false;
84 bold = false;
85 } else if(lc == "\x03") {
86 emitEndToken();
87
88 i = parseColours(xline, i);
89 if(bg > 15)
90 bg = undefined;
91 if(fg > 15)
92 fg = undefined;
93
94 emitStartToken();
95 } else {
96 out.push(lc);
97 }
98 }
99
100 emitEndToken();
101 }