nitdoc: Adding an action to "sign in" button
authorStefan Lage <lagestfan@gmail.com>
Thu, 23 May 2013 23:03:59 +0000 (19:03 -0400)
committerStefan Lage <lagestfan@gmail.com>
Fri, 24 May 2013 01:14:33 +0000 (21:14 -0400)
Adding function to save github loggin in a cookie (client-side only).
It is the same thing for "sign out" action which delete the cookie

signed-off by: Stefan Lage <lagestfan@gmail.com>

share/nitdoc/scripts/js-facilities.js

index f225447..b1efd17 100644 (file)
@@ -1,3 +1,7 @@
+// User\r
+var userB64 = null;\r
+var sessionStarted = false;\r
+\r
 /*\r
 * JQuery Case Insensitive :icontains selector\r
 */\r
@@ -356,6 +360,34 @@ $(document).ready(function() {
        $(".popover").hide();\r
        // Display Login modal\r
        $("#logGitHub").click(function(){ displayLogginModal(); }); \r
+       // Update display\r
+       updateDisplaying();\r
+       // If cookie existing the session is opened\r
+       if(sessionStarted){ userB64 = "Basic " + getUserPass("logginNitdoc"); }\r
+       \r
+       // Sign In an github user or Log out him\r
+       $("#signIn").click(function(){\r
+               if(!sessionStarted){\r
+                       if($('#loginGit').val() == "" || $('#passwordGit').val() == ""){ displayMessage('The comment field is empty!', 40, 45); }\r
+                       else\r
+                       {\r
+                               userName = $('#loginGit').val();\r
+                               password = $('#passwordGit').val();\r
+                               repoName = $('#repositoryGit').val();\r
+                               branchName = $('#branchGit').val();\r
+                               userB64 = "Basic " +  base64.encode(userName+':'+password);\r
+                               setCookie("logginNitdoc", base64.encode(userName+':'+password+':'+repoName+':'+branchName), 1);\r
+                               $('#loginGit').val("");\r
+                               $('#passwordGit').val("");\r
+                       }\r
+               }       \r
+               else\r
+               {\r
+                       // Delete cookie and reset settings\r
+                       del_cookie("logginNitdoc");\r
+               }       \r
+               displayLogginModal();\r
+       });\r
 });\r
 \r
 /* Parse current URL and return anchor name */\r
@@ -412,23 +444,223 @@ function displayLogginModal(){
 }\r
 \r
 function updateDisplaying(){\r
-       $('#logginMessage').css({'display' : 'none'});\r
-       $("#liGitHub").attr("class", "");\r
-       $("#imgGitHub").attr("src", "resources/icons/github-icon.png");\r
-       $('#loginGit').val("");\r
-       $('#passwordGit').val("");\r
-       $('#nickName').text("");\r
-       $('.popover').css({'height' : '280px'});        \r
-       $('#logginMessage').css({'display' : 'none'});\r
-       $('#repositoryGit').val($('#repoName').attr('name'));\r
-       $('#branchGit').val('wikidoc');  \r
-       $('#signIn').text("Sign In");\r
-       $('#loginGit').show();\r
-       $('#passwordGit').show();\r
-       $('#lbpasswordGit').show();\r
-       $('#lbloginGit').show();        \r
-       $('#repositoryGit').show();\r
-       $('#lbrepositoryGit').show();\r
-       $('#lbbranchGit').show();  \r
-       $('#branchGit').show();  \r
+       if (checkCookie())\r
+       {\r
+               $('#loginGit').hide();\r
+               $('#passwordGit').hide();\r
+               $('#lbpasswordGit').hide();             \r
+               $('#lbloginGit').hide();        \r
+               $('#repositoryGit').hide();\r
+               $('#lbrepositoryGit').hide();\r
+               $('#lbbranchGit').hide();  \r
+               $('#branchGit').hide();\r
+               $("#liGitHub").attr("class", "current");\r
+               $("#imgGitHub").attr("src", "resources/icons/github-icon-w.png");\r
+               $('#nickName').text(userName);          \r
+               $('#githubAccount').attr("href", "https://github.com/"+userName);\r
+               $('#logginMessage').css({'display' : 'block'});\r
+               $('#logginMessage').css({'text-align' : 'center'});\r
+               $('.popover').css({'height' : '80px'}); \r
+               $('#signIn').text("Sign out");  \r
+               sessionStarted = true;\r
+       }\r
+       else\r
+       {\r
+               sessionStarted = false;\r
+               $('#logginMessage').css({'display' : 'none'});\r
+               $("#liGitHub").attr("class", "");\r
+               $("#imgGitHub").attr("src", "resources/icons/github-icon.png");\r
+               $('#loginGit').val("");\r
+               $('#passwordGit').val("");\r
+               $('#nickName').text("");\r
+               $('.popover').css({'height' : '280px'});        \r
+               $('#logginMessage').css({'display' : 'none'});\r
+               $('#repositoryGit').val($('#repoName').attr('name'));\r
+               $('#branchGit').val('wikidoc');  \r
+               $('#signIn').text("Sign In");\r
+               $('#loginGit').show();\r
+               $('#passwordGit').show();\r
+               $('#lbpasswordGit').show();\r
+               $('#lbloginGit').show();        \r
+               $('#repositoryGit').show();\r
+               $('#lbrepositoryGit').show();\r
+               $('#lbbranchGit').show();  \r
+               $('#branchGit').show();  \r
+       }\r
+}\r
+\r
+function setCookie(c_name, value, exdays)\r
+{\r
+       var exdate=new Date();\r
+       exdate.setDate(exdate.getDate() + exdays);\r
+       var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());\r
+       document.cookie=c_name + "=" + c_value;\r
+}\r
+\r
+function del_cookie(c_name)\r
+{\r
+    document.cookie = c_name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';\r
+}\r
+\r
+function getCookie(c_name)\r
+{\r
+       var c_value = document.cookie;\r
+       var c_start = c_value.indexOf(" " + c_name + "=");\r
+       if (c_start == -1) { c_start = c_value.indexOf(c_name + "="); }\r
+       if (c_start == -1) { c_value = null; }\r
+       else\r
+       {\r
+               c_start = c_value.indexOf("=", c_start) + 1;\r
+               var c_end = c_value.indexOf(";", c_start);\r
+               if (c_end == -1) { c_end = c_value.length; }\r
+               c_value = unescape(c_value.substring(c_start,c_end));\r
+       }\r
+       return c_value;\r
+}\r
+\r
+function getUserPass(c_name){\r
+       var cookie = base64.decode(getCookie(c_name));\r
+       return base64.encode(cookie.split(':')[0] + ':' + cookie.split(':')[1]);\r
+}\r
+\r
+function checkCookie()\r
+{\r
+       var cookie=getCookie("logginNitdoc");\r
+       if (cookie!=null && cookie!="")\r
+       {\r
+               cookie = base64.decode(cookie);\r
+               userName = cookie.split(':')[0];\r
+               repoName = cookie.split(':')[2];                \r
+               branchName = cookie.split(':')[3];\r
+               return true;\r
+       }\r
+       else { return false; }\r
+}\r
+\r
+\r
+/*\r
+* Base64\r
+*/\r
+base64 = {};\r
+base64.PADCHAR = '=';\r
+base64.ALPHA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\r
+base64.getbyte64 = function(s,i) {\r
+    // This is oddly fast, except on Chrome/V8.\r
+    //  Minimal or no improvement in performance by using a\r
+    //   object with properties mapping chars to value (eg. 'A': 0)\r
+    var idx = base64.ALPHA.indexOf(s.charAt(i));\r
+    if (idx == -1) {\r
+    throw "Cannot decode base64";\r
+    }\r
+    return idx;\r
+}\r
+\r
+base64.decode = function(s) {\r
+    // convert to string\r
+    s = "" + s;\r
+    var getbyte64 = base64.getbyte64;\r
+    var pads, i, b10;\r
+    var imax = s.length\r
+    if (imax == 0) {\r
+        return s;\r
+    }\r
+\r
+    if (imax % 4 != 0) {\r
+    throw "Cannot decode base64";\r
+    }\r
+\r
+    pads = 0\r
+    if (s.charAt(imax -1) == base64.PADCHAR) {\r
+        pads = 1;\r
+        if (s.charAt(imax -2) == base64.PADCHAR) {\r
+            pads = 2;\r
+        }\r
+        // either way, we want to ignore this last block\r
+        imax -= 4;\r
+    }\r
+\r
+    var x = [];\r
+    for (i = 0; i < imax; i += 4) {\r
+        b10 = (getbyte64(s,i) << 18) | (getbyte64(s,i+1) << 12) |\r
+            (getbyte64(s,i+2) << 6) | getbyte64(s,i+3);\r
+        x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 0xff, b10 & 0xff));\r
+    }\r
+\r
+    switch (pads) {\r
+    case 1:\r
+        b10 = (getbyte64(s,i) << 18) | (getbyte64(s,i+1) << 12) | (getbyte64(s,i+2) << 6)\r
+        x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 0xff));\r
+        break;\r
+    case 2:\r
+        b10 = (getbyte64(s,i) << 18) | (getbyte64(s,i+1) << 12);\r
+        x.push(String.fromCharCode(b10 >> 16));\r
+        break;\r
+    }\r
+    return x.join('');\r
+}\r
+\r
+base64.getbyte = function(s,i) {\r
+    var x = s.charCodeAt(i);\r
+    if (x > 255) {\r
+        throw "INVALID_CHARACTER_ERR: DOM Exception 5";\r
+    }\r
+    return x;\r
 }\r
+\r
+\r
+base64.encode = function(s) {\r
+    if (arguments.length != 1) {\r
+    throw "SyntaxError: Not enough arguments";\r
+    }\r
+    var padchar = base64.PADCHAR;\r
+    var alpha   = base64.ALPHA;\r
+    var getbyte = base64.getbyte;\r
+\r
+    var i, b10;\r
+    var x = [];\r
+\r
+    // convert to string\r
+    s = "" + s;\r
+\r
+    var imax = s.length - s.length % 3;\r
+\r
+    if (s.length == 0) {\r
+        return s;\r
+    }\r
+    for (i = 0; i < imax; i += 3) {\r
+        b10 = (getbyte(s,i) << 16) | (getbyte(s,i+1) << 8) | getbyte(s,i+2);\r
+        x.push(alpha.charAt(b10 >> 18));\r
+        x.push(alpha.charAt((b10 >> 12) & 0x3F));\r
+        x.push(alpha.charAt((b10 >> 6) & 0x3f));\r
+        x.push(alpha.charAt(b10 & 0x3f));\r
+    }\r
+    switch (s.length - imax) {\r
+    case 1:\r
+        b10 = getbyte(s,i) << 16;\r
+        x.push(alpha.charAt(b10 >> 18) + alpha.charAt((b10 >> 12) & 0x3F) +\r
+               padchar + padchar);\r
+        break;\r
+    case 2:\r
+        b10 = (getbyte(s,i) << 16) | (getbyte(s,i+1) << 8);\r
+        x.push(alpha.charAt(b10 >> 18) + alpha.charAt((b10 >> 12) & 0x3F) +\r
+               alpha.charAt((b10 >> 6) & 0x3f) + padchar);\r
+        break;\r
+    }\r
+    return x.join('');\r
+}\r
+\r
+$.fn.spin = function(opts) {\r
+  this.each(function() {\r
+    var $this = $(this),\r
+        data = $this.data();\r
+\r
+    if (data.spinner) {\r
+      data.spinner.stop();\r
+      delete data.spinner;\r
+    }\r
+    if (opts !== false) {\r
+      data.spinner = new Spinner($.extend({color: $this.css('color')}, opts)).spin(this);\r
+    }\r
+  });\r
+  return this;\r
+};\r