]>
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 var login
= qwebirc
.auth
.loggedin(true);
75 exec("[name=authname]", util
.setText(login
[0]));
76 exec("[name=connectbutton]", util
.makeVisible
);
77 exec("[name=loginstatus]", util
.makeVisible
);
79 if(qwebirc
.ui
.isAuthRequired()) {
80 exec("[name=loginconnectbutton]", util
.makeVisible
);
81 if(focus
== "connect")
82 focus
= "loginconnect";
84 exec("[name=connectbutton]", util
.makeVisible
);
85 exec("[name=loginbutton]", util
.makeVisible
);
89 if(window
== window
.top
) /* don't focus when we're iframe'd */
90 exec("[name=" + focus
+ "]", util
.focus
);
91 exec("[name=connect]", util
.attachClick(this.__connect
.bind(this)));
92 exec("[name=loginconnect]", util
.attachClick(this.__loginConnect
.bind(this)));
94 exec("[name=login]", util
.attachClick(this.__login
.bind(this)));
96 if(qwebirc
.ui
.isHideAuth())
97 exec("[name=login]", util
.setVisible(false));
102 makeVisible: function(x
) { x
.setStyle("display", ""); },
103 setVisible: function(y
) { return function(x
) { x
.setStyle("display", y
? "" : "none"); }; },
104 focus: function(x
) { try { x
.focus(); } catch (e
) { } },
105 attachClick: function(fn
) { return function(x
) { x
.addListener("click", fn
); } },
106 setText: function(x
) { return function(y
) {
107 if(typeof y
.value
=== "undefined") {
110 y
.value
= x
=== null ? "" : x
;
114 validate: function() {
115 return this.__validate();
117 __connect: function(e
) {
119 var data
= this.validate();
123 this.__cancelLogin();
124 this.fireEvent("close");
125 this.cookie
.extend(data
);
127 this.options
.callback(data
);
129 __cancelLogin: function(noUIModifications
) {
130 if(this.__cancelLoginCallback
)
131 this.__cancelLoginCallback(noUIModifications
);
133 __loginConnect: function(e
) {
135 if(this.validate() === false)
138 this.__performLogin(function() {
139 var data
= this.validate();
141 /* we're logged in -- show the normal join button */
142 this.util
.exec("[name=connectbutton]", this.util
.setVisible(true));
146 this.fireEvent("close");
147 this.options
.callback(data
);
148 }.bind(this), "loginconnectbutton");
150 __login: function(e
) {
153 this.__cancelLogin(true);
155 this.__performLogin(function() {
156 var focus
= "connect";
157 if(!this.options
.autoConnect
) {
158 var nick
= this.rootElement
.getElement("input[name=nickname]").value
, chan
= this.rootElement
.getElement("input[name=channels]").value
;
165 this.util
.exec("[name=" + focus
+ "]", this.util
.focus
);
166 }.bind(this), "login");
168 __performLogin: function(callback
, calleename
) {
169 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");
171 if(handle
=== null || handle
=== undefined) {
175 var closeDetector = function() {
177 this.__cancelLoginCallback();
179 var closeCallback
= closeDetector
.periodical(100);
181 this.__cancelLoginCallback = function(noUIModifications
) {
182 $clear(closeCallback
);
189 if(!noUIModifications
) {
190 this.util
.exec("[name=loggingin]", this.util
.setVisible(false));
191 this.util
.exec("[name=" + calleename
+ "]", this.util
.setVisible(true));
193 this.__cancelLoginCallback
= null;
196 __qwebircAuthCallback = function(qticket
, qticketUsername
, realExpiry
) {
197 if (typeof sessionStorage
=== "undefined")
199 alert("No session storage support in this browser -- login not supported");
200 this.__cancelLoginCallback(false);
204 this.__cancelLoginCallback(true);
205 sessionStorage
.setItem("qticket", qticket
);
206 sessionStorage
.setItem("qticket_username", qticketUsername
);
207 sessionStorage
.setItem("qticket_expiry", realExpiry
);
209 this.util
.exec("[name=loggingin]", this.util
.setVisible(false));
210 this.util
.exec("[name=loginstatus]", this.util
.setVisible(true));
211 this.util
.exec("[name=authname]", this.util
.setText(qticketUsername
));
215 this.util
.exec("[name=loggingin]", this.util
.setVisible(true));
216 this.util
.exec("[name=" + calleename
+ "]", this.util
.setVisible(false));
218 __validateConfirmData: function() {
219 return {nickname: this.options
.initialNickname
, autojoin: this.options
.initialChannels
};
221 __validateLoginData: function() {
222 var nick
= this.rootElement
.getElement("input[name=nickname]"), chan
= this.rootElement
.getElement("input[name=channels]");
224 var nickname
= nick
.value
;
225 var chans
= chan
.value
;
226 if(chans
== "#") /* sorry channel "#" :P */
230 alert("You must supply a nickname.");
235 var stripped
= qwebirc
.global
.nicknameValidator
.validate(nickname
);
236 if(stripped
!= nickname
) {
237 nick
.value
= stripped
;
238 alert("Your nickname was invalid and has been corrected; please check your altered nickname and try again.");
243 var data
= {nickname: nickname
, autojoin: chans
};
246 __buildPrettyChannels: function(node
, channels
) {
247 var c
= channels
.split(" ")[0].split(",");
248 node
.appendChild(document
.createTextNode("channel" + ((c
.length
>1)?"s":"") + " "));
249 for(var i
=0;i
<c
.length
;i
++) {
250 if((c
.length
> 1) && (i
== c
.length
- 1)) {
251 node
.appendChild(document
.createTextNode(" and "));
253 node
.appendChild(document
.createTextNode(", "));
255 node
.appendChild(new Element("b").set("text", c
[i
]));
260 qwebirc
.ui
.LoginBox2 = function(parentElement
, callback
, initialNickname
, initialChannels
, networkName
) {
262 if(qwebirc.auth.enabled()) {
263 if(qwebirc.auth.passAuth()) {
264 var authRow = createRow("Auth to services:");
265 var authCheckBox = qwebirc.util.createInput("checkbox", authRow, "connect_auth_to_services", false);
267 var usernameBox = new Element("input");
268 var usernameRow = createRow("Username:", usernameBox, {display: "none"})[0];
270 var passwordRow = createRow("Password:", null, {display: "none"});
271 var passwordBox = qwebirc.util.createInput("password", passwordRow[1], "connect_auth_password");
273 authCheckBox.addEvent("click", function(e) { qwebirc.ui.authShowHide(authCheckBox, authRow, usernameBox, usernameRow, passwordRow[0]) });
274 } else if(qwebirc.auth.bouncerAuth()) {
275 var passwordRow = createRow("Password:");
276 var passwordBox = qwebirc.util.createInput("password", passwordRow, "connect_auth_password");
281 var connbutton
= new Element("input", {"type": "submit"});
282 connbutton
.set("value", "Connect");
283 var r
= createRow(undefined, connbutton
);
285 form
.addEvent("submit", function(e
) {
288 var nickname
= nick
.value
;
289 var chans
= chan
.value
;
290 if(chans
== "#") /* sorry channel "#" :P */
294 alert("You must supply a nickname.");
298 var stripped
= qwebirc
.global
.nicknameValidator
.validate(nickname
);
299 if(stripped
!= nickname
) {
300 nick
.value
= stripped
;
301 alert("Your nickname was invalid and has been corrected; please check your altered nickname and press Connect again.");
306 var data
= {"nickname": nickname
, "autojoin": chans
};
307 if(qwebirc
.auth
.enabled()) {
308 if(qwebirc
.auth
.passAuth() && authCheckBox
.checked
) {
309 if(!usernameBox
.value
|| !passwordBox
.value
) {
310 alert("You must supply your username and password in auth mode.");
311 if(!usernameBox
.value
) {
319 data
["serverPassword"] = usernameBox
.value
+ " " + passwordBox
.value
;
320 } else if(qwebirc
.auth
.bouncerAuth()) {
321 if(!passwordBox
.value
) {
322 alert("You must supply a password.");
327 data
["serverPassword"] = passwordBox
.value
;
330 parentElement
.removeChild(outerbox
);
335 nick
.set("value", initialNickname
);
336 chan
.set("value", initialChannels
);
338 if(window
== window
.top
)
342 qwebirc
.ui
.authShowHide = function(checkbox
, authRow
, usernameBox
, usernameRow
, passwordRow
) {
343 var visible
= checkbox
.checked
;
344 var display
= visible
?null:"none";
345 usernameRow
.setStyle("display", display
);
346 passwordRow
.setStyle("display", display
);
349 // authRow.parentNode.setStyle("display", "none");
354 qwebirc
.ui
.isAuthRequired
= (function() {
355 var args
= qwebirc
.util
.parseURI(String(document
.location
));
356 var value
= $defined(args
) && args
.get("authrequired");
358 return value
&& qwebirc
.auth
.enabled();
362 qwebirc
.ui
.isHideAuth
= (function() {
363 var args
= qwebirc
.util
.parseURI(String(document
.location
));
364 var value
= $defined(args
) && args
.get("hideauth");