]> jfr.im git - irc/quakenet/qwebirc.git/blob - js/ui/url.js
Add Q click whois thingies.
[irc/quakenet/qwebirc.git] / js / ui / url.js
1 qwebirc.ui.urlificate = function(element, text, execfn, cmdfn, window) {
2 var punct_re = /(\.*|\,|;|\])$/;
3
4 var txtprocess = function(text, regex, appendfn, matchfn) {
5 for(;;) {
6 var index = text.search(regex);
7 if(index == -1) {
8 appendfn(text);
9 break;
10 }
11 var match = text.match(regex);
12
13 var before = text.substring(0, index);
14 var matched = match[0];
15 var after = text.substring(index + matched.length);
16
17 appendfn(before);
18 var more = matchfn(matched, appendfn);
19 if(!more)
20 more = "";
21 text = more + after;
22 }
23 };
24
25 var appendText = function(text) {
26 qwebirc.util.NBSPCreate(text, element);
27 };
28
29 var appendChan = function(text) {
30 var newtext = text.replace(punct_re, "");
31 var punct = text.substring(newtext.length);
32
33 var a = new Element("a");
34 a.href = "#";
35 a.addEvent("click", function(e) {
36 new Event(e).stop();
37 execfn("/JOIN " + newtext);
38 });
39 a.appendChild(document.createTextNode(newtext));
40 element.appendChild(a);
41
42 return punct;
43 };
44
45 var appendURL = function(text, appendfn) {
46 var url = text.replace(punct_re, "");
47 var punct = text.substring(url.length);
48
49 var href = "";
50 var fn = null;
51 var target = "new";
52 var disptext = url;
53
54 var ma = url.match(/^qwebirc:\/\/(.*)$/);
55 if(ma) {
56 var m = ma[1].match(/^([^\/]+)\/(.+)$/);
57 if(!m) {
58 appendfn(text);
59 return;
60 }
61
62 var cmd = cmdfn(m[1], window);
63 if(cmd) {
64 url = "#";
65 fn = cmd;
66 disptext = unescape(m[2]);
67 target = null;
68 } else {
69 appendfn(text);
70 return;
71 }
72 } else {
73 if(url.match(/^www\./))
74 url = "http://" + url;
75 }
76
77 var a = new Element("a");
78 a.href = url;
79
80 if(target)
81 a.target = target;
82 a.appendChild(document.createTextNode(disptext));
83
84 element.appendChild(a);
85 if($defined(fn))
86 a.addEvent("click", function(e) { new Event(e).stop(); fn(disptext); });
87
88 return punct;
89 };
90
91 txtprocess(text, /\b((https?|ftp|qwebirc):\/\/|www\.)[^ ]+/, function(text) {
92 txtprocess(text, /\B#[^ ,]+/, appendText, appendChan);
93 }, appendURL);
94 }