--- /dev/null
+(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 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);
+ };
+
+ 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();
+ };
+
+ 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();
+ });
+ }
+ else {
+ /* ログインしてゐない */
+ $("input.loginButton")
+ .val("Login")
+ .unbind("click")
+ .click(Rakka.showLoginPanel);
+ }
+ };
+
+ $(document).ready(function () {
+ updateLoginState();
+ });
+
+})();