]> jfr.im git - irc/quakenet/qwebirc.git/blob - js/qwebircinterface.js
9c9e088099fa3dab43b8dd372d3fa7bca0a37546
[irc/quakenet/qwebirc.git] / js / qwebircinterface.js
1 qwebirc.ui.Interface = new Class({
2 Implements: [Options],
3 options: {
4 initialNickname: "qwebirc" + Math.ceil(Math.random() * 100000),
5 initialChannels: "",
6 networkName: "QuakeNet",
7 networkServices: ["Q!TheQBot@CServe.quakenet.org"],
8 loginRegex: "^You are now logged in as [^ ]+\\.$",
9 appTitle: "QuakeNet Web IRC",
10 searchURL: true,
11 theme: undefined
12 },
13 initialize: function(element, ui, options) {
14 this.setOptions(options);
15
16 window.addEvent("domready", function() {
17 var ui_ = new ui($(element), new qwebirc.ui.Theme(this.options.theme), this.options);
18
19 var callback = function(options) {
20 var IRC = new qwebirc.irc.IRCClient(options, ui_);
21 IRC.connect();
22 window.addEvent("beforeunload", function() {
23 IRC.quit("Page closed");
24 });
25 };
26
27 var inick = null;
28 var ichans = this.options.initialChannels;
29 var autoConnect = false;
30
31 if(this.options.searchURL) {
32 var args = qwebirc.util.parseURI(String(document.location));
33
34 var chans = args["channels"];
35 var nick = args["nick"];
36
37 var canAutoConnect = false;
38
39 if(chans) {
40 var cdata = chans.split(" ");
41
42 chans = cdata[0].split(",");
43 var chans2 = [];
44
45 for(i=0;i<chans.length;i++) {
46 chans2[i] = chans[i];
47
48 if(chans[i].charAt(0) != '#')
49 chans2[i] = "#" + chans2[i]
50 }
51 cdata[0] = chans2.join(",");
52 ichans = cdata.join(" ");
53 canAutoConnect = true;
54 }
55
56 if($defined(nick))
57 inick = this.randSub(nick);
58
59 if(args["randomnick"] && args["randomnick"] == 1)
60 inick = this.options.initialNickname;
61
62 /* we only consider autoconnecting if the nick hasn't been supplied, or it has and it's not "" */
63 if(canAutoConnect && (!$defined(inick) || ($defined(inick) && (inick != "")))) {
64 var p = args["prompt"];
65 var pdefault = false;
66
67 if(!$defined(p) || p == "") {
68 pdefault = true;
69 p = false;
70 } else if(p == "0") {
71 p = false;
72 } else {
73 p = true;
74 }
75
76 /* autoconnect if we have channels and nick but only if prompt != 1 */
77 if($defined(inick) && !p) {
78 autoConnect = true;
79 } else if(!pdefault && !p) { /* OR if prompt=0, but not prompt=(nothing) */
80 autoConnect = true;
81 }
82 }
83 }
84
85 var usingAutoNick = !$defined(nick);
86 if(usingAutoNick && autoConnect)
87 inick = this.options.initialNickname;
88
89 var details = ui_.loginBox(callback, inick, ichans, autoConnect, usingAutoNick);
90 }.bind(this));
91 },
92 randSub: function(nick) {
93 var getDigit = function() { return Math.floor(Math.random() * 10); }
94
95 return nick.split("").map(function(v) {
96 if(v == ".") {
97 return getDigit();
98 } else {
99 return v;
100 }
101 }).join("");
102
103 }
104 });