]>
jfr.im git - irc/quakenet/qwebirc.git/blob - js/ui/panes/connect.js
1 qwebirc
.ui
.ConnectPane
= new Class({
3 initialize: function(parent
, options
) {
4 var callback
= options
.callback
, initialNickname
= options
.initialNickname
, initialChannels
= options
.initialChannels
, autoConnect
= options
.autoConnect
, autoNick
= options
.autoNick
;
5 this.options
= options
;
6 this.cookie
= new Hash
.Cookie("optconn", {duration: 3650, autoSave: false});
7 var uiOptions
= options
.uiOptions
;
8 this.__windowName
= "authgate_" + Math
.floor(Math
.random() * 100000);
10 var delayfn = function() { parent
.set("html", "<div class=\"loading\">Loading. . .</div>"); };
11 var cb
= delayfn
.delay(500);
13 var r
= qwebirc
.ui
.RequestTransformHTML({url: qwebirc
.global
.staticBaseURL
+ "panes/connect.html", update: parent
, onSuccess: function() {
16 var rootElement
= parent
.getElement("[name=connectroot]");
17 this.rootElement
= rootElement
;
19 this.util
.exec = function(n
, x
) { rootElement
.getElements(n
).each(x
); };
23 var box
= (autoConnect
? "confirm" : "login");
24 exec("[name=" + box
+ "box]", util
.setVisible(true));
27 if($defined(uiOptions
.logoURL
)) {
28 var logoBar
= parent
.getElement("[class=bar-logo]");
30 logoBar
.setAttribute("style", "background: url(" + uiOptions
.logoURL
+ ") no-repeat center top; _filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + uiOptions
.logoURL
+ "',sizingMethod='crop');");
32 util
.makeVisible(parent
.getElement("[name=loginheader]"));
34 util
.makeVisible(parent
.getElement("[name=nologologinheader]"));
38 if(initialNickname
=== null && initialChannels
=== null) {
39 var n2
= this.cookie
.get("nickname");
43 var c2
= this.cookie
.get("autojoin");
48 if(initialChannels
=== null) {
52 exec("[name=nickname]", util
.setText(initialNickname
));
53 exec("[name=channels]", util
.setText(initialChannels
));
54 exec("[name=prettychannels]", function(node
) { this.__buildPrettyChannels(node
, initialChannels
); }.bind(this));
55 exec("[name=networkname]", util
.setText(uiOptions
.networkName
));
57 var focus
= "connect";
60 exec("[name=nickselected]", util
.makeVisible
);
62 this.__validate
= this.__validateConfirmData
;
64 if(!initialNickname
) {
66 } else if(initialNickname
&& !initialChannels
) {
70 this.__validate
= this.__validateLoginData
;
73 if(qwebirc
.auth
.loggedin()) {
74 exec("[name=authname]", util
.setText(qwebirc
.auth
.loggedin()));
75 exec("[name=connectbutton]", util
.makeVisible
);
76 exec("[name=loginstatus]", util
.makeVisible
);
78 if(qwebirc
.ui
.isAuthRequired()) {
79 exec("[name=loginconnectbutton]", util
.makeVisible
);
80 if(focus
== "connect")
81 focus
= "loginconnect";
83 exec("[name=connectbutton]", util
.makeVisible
);
84 exec("[name=loginbutton]", util
.makeVisible
);
88 if(window
== window
.top
) /* don't focus when we're iframe'd */
89 exec("[name=" + focus
+ "]", util
.focus
);
90 exec("[name=connect]", util
.attachClick(this.__connect
.bind(this)));
91 exec("[name=loginconnect]", util
.attachClick(this.__loginConnect
.bind(this)));
93 exec("[name=login]", util
.attachClick(this.__login
.bind(this)));
95 if(qwebirc
.ui
.isHideAuth())
96 exec("[name=login]", util
.setVisible(false));
101 makeVisible: function(x
) { x
.setStyle("display", ""); },
102 setVisible: function(y
) { return function(x
) { x
.setStyle("display", y
? "" : "none"); }; },
103 focus: function(x
) { try { x
.focus(); } catch (e
) { } },
104 attachClick: function(fn
) { return function(x
) { x
.addListener("click", fn
); } },
105 setText: function(x
) { return function(y
) {
106 if(typeof y
.value
=== "undefined") {
109 y
.value
= x
=== null ? "" : x
;
113 validate: function() {
114 return this.__validate();
116 __connect: function(e
) {
118 var data
= this.validate();
122 this.__cancelLogin();
123 this.fireEvent("close");
124 this.cookie
.extend(data
);
126 this.options
.callback(data
);
128 __cancelLogin: function(noUIModifications
) {
129 if(this.__cancelLoginCallback
)
130 this.__cancelLoginCallback(noUIModifications
);
132 __loginConnect: function(e
) {
134 if(this.validate() === false)
137 this.__performLogin(function() {
138 var data
= this.validate();
140 /* we're logged in -- show the normal join button */
141 this.util
.exec("[name=connectbutton]", this.util
.setVisible(true));
145 this.fireEvent("close");
146 this.options
.callback(data
);
147 }.bind(this), "loginconnectbutton");
149 __login: function(e
) {
152 this.__cancelLogin(true);
154 this.__performLogin(function() {
155 var focus
= "connect";
156 if(!this.options
.autoConnect
) {
157 var nick
= this.rootElement
.getElement("input[name=nickname]").value
, chan
= this.rootElement
.getElement("input[name=channels]").value
;
164 this.util
.exec("[name=" + focus
+ "]", this.util
.focus
);
165 }.bind(this), "login");
167 __performLogin: function(callback
, calleename
) {
168 Cookie
.write("jslogin", "1");
170 var handle
= window
.open("/auth", this.__windowName
, "status=0,toolbar=0,location=1,menubar=0,directories=0,resizable=0,scrollbars=1,height=280,width=550");
172 if(handle
=== null || handle
=== undefined) {
173 Cookie
.dispose("jslogin");
174 // Cookie.write("redirect", document.location);
175 // window.location = "auth?";
179 var closeDetector = function() {
181 this.__cancelLoginCallback();
183 var closeCallback
= closeDetector
.periodical(100);
185 this.__cancelLoginCallback = function(noUIModifications
) {
186 $clear(closeCallback
);
188 Cookie
.dispose("jslogin");
195 if(!noUIModifications
) {
196 this.util
.exec("[name=loggingin]", this.util
.setVisible(false));
197 this.util
.exec("[name=" + calleename
+ "]", this.util
.setVisible(true));
199 this.__cancelLoginCallback
= null;
202 this.util
.exec("[name=loggingin]", this.util
.setVisible(true));
203 this.util
.exec("[name=" + calleename
+ "]", this.util
.setVisible(false));
205 __qwebircAuthCallback = function(username
, expiry
, serverNow
) {
206 this.__cancelLoginCallback(true);
208 var now
= new Date().getTime();
209 var offset
= (serverNow
* 1000) - now
;
210 var ourExpiry
= expiry
* 1000 - offset
;
211 Cookie
.write("ticketexpiry", ourExpiry
)
213 this.util
.exec("[name=loggingin]", this.util
.setVisible(false));
214 this.util
.exec("[name=loginstatus]", this.util
.setVisible(true));
215 this.util
.exec("[name=authname]", this.util
.setText(username
));
220 __validateConfirmData: function() {
221 return {nickname: this.options
.initialNickname
, autojoin: this.options
.initialChannels
};
223 __validateLoginData: function() {
224 var nick
= this.rootElement
.getElement("input[name=nickname]"), chan
= this.rootElement
.getElement("input[name=channels]");
226 var nickname
= nick
.value
;
227 var chans
= chan
.value
;
228 if(chans
== "#") /* sorry channel "#" :P */
232 alert("You must supply a nickname.");
237 var stripped
= qwebirc
.global
.nicknameValidator
.validate(nickname
);
238 if(stripped
!= nickname
) {
239 nick
.value
= stripped
;
240 alert("Your nickname was invalid and has been corrected; please check your altered nickname and try again.");
245 var data
= {nickname: nickname
, autojoin: chans
};
248 __buildPrettyChannels: function(node
, channels
) {
249 var c
= channels
.split(" ")[0].split(",");
250 node
.appendChild(document
.createTextNode("channel" + ((c
.length
>1)?"s":"") + " "));
251 for(var i
=0;i
<c
.length
;i
++) {
252 if((c
.length
> 1) && (i
== c
.length
- 1)) {
253 node
.appendChild(document
.createTextNode(" and "));
255 node
.appendChild(document
.createTextNode(", "));
257 node
.appendChild(new Element("b").set("text", c
[i
]));
262 qwebirc
.ui
.LoginBox2 = function(parentElement
, callback
, initialNickname
, initialChannels
, networkName
) {
264 if(qwebirc.auth.enabled()) {
265 if(qwebirc.auth.passAuth()) {
266 var authRow = createRow("Auth to services:");
267 var authCheckBox = qwebirc.util.createInput("checkbox", authRow, "connect_auth_to_services", false);
269 var usernameBox = new Element("input");
270 var usernameRow = createRow("Username:", usernameBox, {display: "none"})[0];
272 var passwordRow = createRow("Password:", null, {display: "none"});
273 var passwordBox = qwebirc.util.createInput("password", passwordRow[1], "connect_auth_password");
275 authCheckBox.addEvent("click", function(e) { qwebirc.ui.authShowHide(authCheckBox, authRow, usernameBox, usernameRow, passwordRow[0]) });
276 } else if(qwebirc.auth.bouncerAuth()) {
277 var passwordRow = createRow("Password:");
278 var passwordBox = qwebirc.util.createInput("password", passwordRow, "connect_auth_password");
283 var connbutton
= new Element("input", {"type": "submit"});
284 connbutton
.set("value", "Connect");
285 var r
= createRow(undefined, connbutton
);
287 form
.addEvent("submit", function(e
) {
290 var nickname
= nick
.value
;
291 var chans
= chan
.value
;
292 if(chans
== "#") /* sorry channel "#" :P */
296 alert("You must supply a nickname.");
300 var stripped
= qwebirc
.global
.nicknameValidator
.validate(nickname
);
301 if(stripped
!= nickname
) {
302 nick
.value
= stripped
;
303 alert("Your nickname was invalid and has been corrected; please check your altered nickname and press Connect again.");
308 var data
= {"nickname": nickname
, "autojoin": chans
};
309 if(qwebirc
.auth
.enabled()) {
310 if(qwebirc
.auth
.passAuth() && authCheckBox
.checked
) {
311 if(!usernameBox
.value
|| !passwordBox
.value
) {
312 alert("You must supply your username and password in auth mode.");
313 if(!usernameBox
.value
) {
321 data
["serverPassword"] = usernameBox
.value
+ " " + passwordBox
.value
;
322 } else if(qwebirc
.auth
.bouncerAuth()) {
323 if(!passwordBox
.value
) {
324 alert("You must supply a password.");
329 data
["serverPassword"] = passwordBox
.value
;
332 parentElement
.removeChild(outerbox
);
337 nick
.set("value", initialNickname
);
338 chan
.set("value", initialChannels
);
340 if(window
== window
.top
)
344 qwebirc
.ui
.authShowHide = function(checkbox
, authRow
, usernameBox
, usernameRow
, passwordRow
) {
345 var visible
= checkbox
.checked
;
346 var display
= visible
?null:"none";
347 usernameRow
.setStyle("display", display
);
348 passwordRow
.setStyle("display", display
);
351 // authRow.parentNode.setStyle("display", "none");
356 qwebirc
.ui
.isAuthRequired
= (function() {
357 var args
= qwebirc
.util
.parseURI(String(document
.location
));
358 var value
= $defined(args
) && args
.get("authrequired");
360 return value
&& qwebirc
.auth
.enabled();
364 qwebirc
.ui
.isHideAuth
= (function() {
365 var args
= qwebirc
.util
.parseURI(String(document
.location
));
366 var value
= $defined(args
) && args
.get("hideauth");