(function () { Rakka.showLoginPanel = function () { var $area = Rakka.switchScreen(); $area.append($.H1({}, "Login")); var fldUserID = $.INPUT({type: "text"}); var fldPassword = $.INPUT({type: "password"}); var btnLogin = $.INPUT({type: "button", value: "Login"}); $(btnLogin) .click(function () { login(fldUserID.value, fldPassword.value); }); var fldHandler = function (ev) { if (ev.keyCode == 27) { // ESC Rakka.restoreScreen(); return false; } else if (ev.keyCode == 13) { // CR login(fldUserID.value, fldPassword.value); return false; } else { return true; } }; $(fldUserID).keypress(fldHandler); $(fldPassword).keypress(fldHandler); var btnCancel = $.INPUT({type: "button", value: "Cancel"}); $(btnCancel).click(function () { Rakka.restoreScreen(); }); var loginPanel = $.TABLE({className: "loginPanel"}, $.TBODY({}, $.TR({}, $.TH({}, "User ID"), $.TD({}, fldUserID) ), $.TR({}, $.TH({}, "Password"), $.TD({}, fldPassword) ), $.TR({}, $.TH({}), $.TD({}, btnLogin, btnCancel) ) ) ); $area.append(loginPanel); $(fldUserID).focus(); }; var login = function (userID, password) { $.ajax({ type : "GET", url : Rakka.baseURI + "checkAuth", beforeSend: function (req) { req.setRequestHeader( "Authorization", "Basic " + Rakka.encodeBase64(userID + ":" + password)); }, success : function () { document.cookie = "rakkaLoginInfo=" + Rakka.encodeBase64(userID + ":" + password) + ";max-age=31536000"; updateLoginState(); Rakka.restoreScreen(); }, error : function (req) { if (req.status == 403) { alert("Login failed: wrong ID or password"); } else { alert("Error: " + req.status + " " + req.statusText); } } }); }; var logout = function () { document.cookie = "rakkaLoginInfo=;max-age=0"; updateLoginState(); Rakka.restoreScreen(); }; var currentUserID; var currentPassword; var updateLoginState = function () { currentUserID = null; currentPassword = null; var cookies = document.cookie.split(/;\s*/); $.each(cookies, function () { var m = this.match(/^([^=]*)=(.*)$/); if (m) { var key = m[1]; var value = m[2]; if (key == "rakkaLoginInfo") { m = Rakka.decodeBase64(value).match(/^([^:]*):(.*)$/); if (m) { currentUserID = m[1]; currentPassword = m[2]; } } } }); if (currentUserID != null) { /* ログイン中 */ $("input.loginButton") .val("Logout [" + currentUserID + "]") .unbind("click") .click(function () { logout(); }); $("input.newButton").attr({disabled: ""}); $("input.editButton").attr({ disabled: (Rakka.isSpecialPage ? "disabled" : "") }); $("input.configButton").attr({ disabled: "" }); } else { /* ログインしてゐない */ $("input.loginButton") .val("Login") .unbind("click") .click(Rakka.showLoginPanel); $("input.newButton").attr({ disabled: (Rakka.isGlobalLocked ? "disabled" : "") }); $("input.editButton").attr({ disabled: (Rakka.isLocked || Rakka.isGlobalLocked || Rakka.isSpecialPage ? "disabled" : "") }); $("input.configButton").attr({ disabled: "disabled" }); } }; Rakka.setAuthorization = function (req) { if (Rakka.isLoggedIn()) { req.setRequestHeader( "Authorization", "Basic " + Rakka.encodeBase64(currentUserID + ":" + currentPassword)); } }; Rakka.isLoggedIn = function () { return currentUserID != null; }; $(document).ready(function () { updateLoginState(); }); })();