]>
jfr.im git - irc/quakenet/qwebirc.git/blob - js/qwebircinterface.js
1 qwebirc
.ui
.Interface
= new Class({
4 initialNickname: "qwebirc" + Math
.ceil(Math
.random() * 100000),
6 networkName: "ExampleNetwork",
9 appTitle: "ExampleNetwork Web IRC",
14 initialize: function(element
, ui
, options
) {
15 this.setOptions(options
);
17 window
.addEvent("domready", function() {
18 var ui_
= new ui($(element
), new qwebirc
.ui
.Theme(this.options
.theme
), this.options
);
20 var callback = function(options
) {
21 var IRC
= new qwebirc
.irc
.IRCClient(options
, ui_
);
23 window
.addEvent("beforeunload", function() {
24 IRC
.quit("Page closed");
29 var ichans
= this.options
.initialChannels
;
30 var autoConnect
= false;
32 if(this.options
.searchURL
) {
33 var args
= qwebirc
.util
.parseURI(String(document
.location
));
35 var url
= args
["url"];
36 var chans
, nick
= args
["nick"];
39 ichans
= this.parseIRCURL(url
);
40 if($defined(chans
) && chans
!= "")
41 canAutoConnect
= true;
43 chans
= args
["channels"];
45 var canAutoConnect
= false;
48 var cdata
= chans
.split(" ");
50 chans
= cdata
[0].split(",");
53 for(var i
=0;i
<chans
.length
;i
++) {
56 if(chans
[i
].charAt(0) != '#')
57 chans2
[i
] = "#" + chans2
[i
]
59 cdata
[0] = chans2
.join(",");
60 ichans
= cdata
.join(" ");
61 canAutoConnect
= true;
66 inick
= this.randSub(nick
);
68 if(args
["randomnick"] && args
["randomnick"] == 1)
69 inick
= this.options
.initialNickname
;
71 /* we only consider autoconnecting if the nick hasn't been supplied, or it has and it's not "" */
72 if(canAutoConnect
&& (!$defined(inick
) || ($defined(inick
) && (inick
!= "")))) {
73 var p
= args
["prompt"];
76 if(!$defined(p
) || p
== "") {
85 /* autoconnect if we have channels and nick but only if prompt != 1 */
86 if($defined(inick
) && !p
) {
88 } else if(!pdefault
&& !p
) { /* OR if prompt=0, but not prompt=(nothing) */
94 var usingAutoNick
= !$defined(nick
);
95 if(usingAutoNick
&& autoConnect
)
96 inick
= this.options
.initialNickname
;
98 var details
= ui_
.loginBox(callback
, inick
, ichans
, autoConnect
, usingAutoNick
);
101 randSub: function(nick
) {
102 var getDigit = function() { return Math
.floor(Math
.random() * 10); }
104 return nick
.split("").map(function(v
) {
113 parseIRCURL: function(url
) {
114 if(url
.indexOf(":") == 0)
116 var schemeComponents
= url
.splitMax(":", 2);
117 if(schemeComponents
[0].toLowerCase() != "irc" && schemeComponents
[0].toLowerCase() != "ircs") {
118 alert("Bad IRC URL scheme.");
122 if(url
.indexOf("/") == 0) {
127 var pathComponents
= url
.splitMax("/", 4);
128 if(pathComponents
.length
< 4 || pathComponents
[3] == "") {
134 if(pathComponents
[3].indexOf("?") > -1) {
135 queryArgs
= qwebirc
.util
.parseURI(pathComponents
[3]);
136 args
= pathComponents
[3].splitMax("?", 2)[0];
138 args
= pathComponents
[3];
140 var parts
= args
.split(",");
142 var channel
= parts
[0];
143 if(channel
.charAt(0) != "#")
144 channel
= "#" + channel
;
146 var not_supported
= [], needkey
= false, key
;
147 for(var i
=1;i
<parts
.length
;i
++) {
148 var value
= parts
[i
];
149 if(value
== "needkey") {
152 not_supported
.push(value
);
156 if($defined(queryArgs
)) {
157 for(var key_
in queryArgs
) {
158 var value
= queryArgs
[key_
];
164 not_supported
.push(key_
);
171 key
= prompt("Please enter the password for channel " + channel
+ ":");
173 channel
= channel
+ " " + key
;
176 if(not_supported
.length
> 0)
177 alert("The following IRC URL components were not accepted: " + not_supported
.join(", ") + ".");