+// User\r
+var userB64 = null;\r
+var userName = "";\r
+var password = "";\r
+var sessionStarted = false;\r
+var editComment = 0;\r
+var currentfileContent = '';\r
+var addNewComment = false;\r
+var commentLineStart;\r
+var commentLineEnd;\r
+\r
+// SHA GitHub\r
+var shaLastCommit = "";\r
+var shaBaseTree;\r
+var shaNewTree;\r
+var shaNewCommit;\r
+var shaBlob;\r
+var shaMaster;\r
+var repoExist = false;\r
+var branchExist = false;\r
+var githubRepo;\r
+var loginProcess = false; \r
+\r
+// Spinner vars\r
+var opts = {\r
+ lines: 11, // The number of lines to draw\r
+ length: 7, // The length of each line\r
+ width: 4, // The line thickness\r
+ radius: 10, // The radius of the inner circle\r
+ corners: 1, // Corner roundness (0..1)\r
+ rotate: 0, // The rotation offset\r
+ color: '#FFF', // #rgb or #rrggbb\r
+ speed: 1, // Rounds per second\r
+ trail: 60, // Afterglow percentage\r
+ shadow: false, // Whether to render a shadow\r
+ hwaccel: false, // Whether to use hardware acceleration\r
+ className: 'spinner', // The CSS class to assign to the spinner\r
+ zIndex: 99999, // The z-index (defaults to 2000000000)\r
+ top: '300', // Top position relative to parent in px\r
+ left: 'auto' // Left position relative to parent in px\r
+ };\r
+var targetSpinner = document.getElementById('waitCommit');\r
+var spinner = new Spinner(opts).spin(targetSpinner);\r
+\r
/*\r
* JQuery Case Insensitive :icontains selector\r
*/\r
//Hightlighted index in search result preview table\r
var currentIndex = -1;\r
\r
+// Check if a comment is editing\r
+window.onbeforeunload = function() {\r
+ if(editComment > 0){\r
+ return 'Are you sure you want to leave this page?';\r
+ }\r
+};\r
\r
/*\r
* Add folding and filtering facilities to class description page.\r
*/\r
$(document).ready(function() {\r
\r
+ // Hide edit tags\r
+ $('textarea').hide();\r
+ $('a[id=commitBtn]').hide();\r
+ $('a[id=cancelBtn]').hide();\r
+ // Hide Authenfication form\r
+ $(".popover").hide();\r
+ // Update display\r
+ updateDisplaying();\r
/*\r
* Highlight the spoted element\r
*/\r
- highlightBlock(currentAnchor());
- \r
+ highlightBlock(currentAnchor());\r
+\r
/*\r
* Nav block folding\r
*/\r
$(this).find("a.fold").html("+");\r
}\r
$(this).nextAll().toggle();\r
- })
-
+ })\r
+ \r
// Insert search field\r
$("nav.main ul")\r
.append(\r
currentTable.width($("#search").outerWidth());\r
$("header").append(currentTable);\r
currentTable.offset({left: $("#search").offset().left + ($("#search").outerWidth() - currentTable.outerWidth()), top: $("#search").offset().top + $("#search").outerHeight()});\r
+\r
+ // Preselect first entry\r
+ if(currentTable.find("tr").length > 0) {\r
+ currentIndex = 0;\r
+ $(currentTable.find("tr")[currentIndex]).addClass("activeSearchResult");\r
+ $("#search").focus();\r
+ }\r
break;\r
}\r
})\r
})\r
)\r
);\r
- \r
- /*\r
- * Anchors jumps\r
- */\r
- $("a[href^='#']").click( function() {\r
- var a = $(this).attr("href").replace(/#/, "");\r
- highlightBlock(a);\r
- });\r
+\r
+ // Close quicksearch list on click\r
+ $(document).click(function(e) {\r
+ if(e.target != $("#search")[0] && e.target != $("#searchTable")[0]) {\r
+ if(currentTable != null) {\r
+ currentTable.remove();\r
+ currentTable = null;\r
+ }\r
+ }\r
+ });\r
\r
// Insert filter field\r
$("article.filterable h2, nav.filterable h3")\r
})\r
)\r
);\r
-
+ \r
// Filter toggle between H I R in nav porperties list\r
$("nav.properties.filterable .filter")\r
.append(\r
\r
$(this).toggleClass("hidden");\r
})\r
- );
-
- // Filter toggle between I R in
+ );\r
+ \r
+ // Filter toggle between I R in \r
$("article.properties.filterable .filter, article.classes.filterable .filter")\r
.append(\r
$(document.createElement("a"))\r
\r
$(this).toggleClass("hidden");\r
})\r
- );
-
- //Preload filter fields with query string
+ );\r
+\r
+ /*\r
+ * Anchors jumps\r
+ */\r
+ $("a[href*='#']").click( function() {\r
+ highlightBlock($(this).attr("href").split(/#/)[1]);\r
+ });\r
+\r
+ //Preload filter fields with query string\r
preloadFilters();\r
+ // Hide Authenfication form\r
+ $(".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
+ githubRepo = $('#repositoryGit').val();\r
+ branchName = $('#branchGit').val();\r
+ userB64 = "Basic " + base64.encode(userName+':'+password);\r
+ // Check if repo exist\r
+ isRepoExisting();\r
+ if(repoExist){ \r
+ $.when(isBranchExisting()).done(function(){ \r
+ loginProcess = true; \r
+ if(branchExist){\r
+ setCookie("logginNitdoc", base64.encode(userName+':'+password+':'+githubRepo+':'+branchName), 1); \r
+ $('#loginGit').val("");\r
+ $('#passwordGit').val("");\r
+ reloadComment();\r
+ }\r
+ });\r
+ } \r
+ }\r
+ } \r
+ else\r
+ {\r
+ // Delete cookie and reset settings\r
+ del_cookie("logginNitdoc");\r
+ closeAllCommentInEdtiting();\r
+ } \r
+ displayLogginModal();\r
+ });\r
+\r
+ // Activate edit mode\r
+ $('pre[class=text_label]').click(function(){\r
+ // the customer is loggued ?\r
+ if(!sessionStarted || userName == ""){\r
+ // No => nothing happen\r
+ return;\r
+ }\r
+ else{\r
+ var arrayNew = $(this).text().split('\n');\r
+ var lNew = arrayNew.length - 1;\r
+ var adapt = "";\r
+\r
+ for (var i = 0; i < lNew; i++) {\r
+ adapt += arrayNew[i];\r
+ if(i < lNew-1){ adapt += "\n"; }\r
+ }\r
+ editComment += 1;\r
+ // hide comment\r
+ $(this).hide();\r
+ // Show edit box \r
+ $(this).next().show();\r
+ // Show cancel button\r
+ $(this).next().next().show();\r
+ // Show commit button\r
+ $(this).next().next().next().show();\r
+ // Add text in edit box\r
+ if($(this).next().val() == "" || $(this).next().val() != adapt){ $(this).next().val(adapt); }\r
+ // Resize edit box \r
+ $(this).next().height($(this).next().prop("scrollHeight"));\r
+ // Select it\r
+ $(this).next().select();\r
+ preElement = $(this);\r
+ }\r
+ });\r
+\r
+ // Disable the edit mode\r
+ $('a[id=cancelBtn]').click(function(){\r
+ closeEditing($(this));\r
+ });\r
+\r
+ // Display commit form\r
+ $('a[id=commitBtn]').click(function(){\r
+ updateComment = $(this).prev().prev().val();\r
+ commentType = $(this).prev().prev().prev().attr('type');\r
+\r
+ if(updateComment == ""){ displayMessage('The comment field is empty!', 40, 45); }\r
+ else{\r
+ if(!sessionStarted){\r
+ displayMessage("You need to be loggued before commit something", 45, 40);\r
+ displayLogginModal();\r
+ return;\r
+ }\r
+ $('#commitMessage').val('New commit');\r
+ pathFile = $(this).prev().prev().prev().attr('tag');\r
+ $('#modal').show().prepend('<a class="close"><img src="resources/icons/close.png" class="btn_close" title="Close" alt="Close" /></a>');\r
+ $('body').append('<div id="fade"></div>');\r
+ $('#fade').css({'filter' : 'alpha(opacity=80)'}).fadeIn();\r
+ }\r
+ });\r
+\r
+ // Close commit form\r
+ $('.btn_close').click(function(){\r
+ $(this).hide(); \r
+ $(this).next().hide(); \r
+ if(editComment > 0){ editComment -= 1; }\r
+ });\r
+\r
+ //Close Popups and Fade Layer\r
+ $('body').on('click', 'a.close, #fade', function() {\r
+ if(editComment > 0){ editComment -= 1; }\r
+ $('#fade , #modal').fadeOut(function() {\r
+ $('#fade, a.close').remove(); \r
+ }); \r
+ $('#modalQuestion').hide();\r
+ });\r
+\r
+ $('#loginAction').click(function(){\r
+ var text;\r
+ var url;\r
+ var line;\r
+ // Look if the customer is logged\r
+ if(!sessionStarted){\r
+ displayMessage("You need to be loggued before commit something", 100, 40);\r
+ $('.popover').show();\r
+ return;\r
+ }\r
+ else{ userB64 = "Basic " + getUserPass("logginNitdoc"); }\r
+ // Check if repo exist\r
+ isRepoExisting();\r
+ if(repoExist){\r
+ isBranchExisting();\r
+ if(branchExist){\r
+ editComment -= 1;\r
+ commitMessage = $('#commitMessage').val();\r
+ if(commitMessage == ""){ commitMessage = "New commit";}\r
+ if(sessionStarted){\r
+ if ($.trim(updateComment) == ''){ this.value = (this.defaultValue ? this.defaultValue : ''); }\r
+ else{ \r
+ displaySpinner();\r
+ startCommitProcess();\r
+ }\r
+ }\r
+ $('#modal, #modalQuestion').fadeOut(function() {\r
+ $('#login').val("");\r
+ $('#password').val("");\r
+ $('textarea').hide();\r
+ $('textarea').prev().show();\r
+ });\r
+ $('a[id=cancelBtn]').hide();\r
+ $('a[id=commitBtn]').hide();\r
+ // Re-load all comment\r
+ reloadComment();\r
+ }\r
+ }\r
+ else{ editComment -= 1; }\r
+ });\r
+ \r
+ // Cancel creating branch\r
+ $('#btnCancelBranch').click(function(){\r
+ editComment -= 1;\r
+ $('#modalQuestion').hide();\r
+ $('#fade , #modal').fadeOut(function() { $('#fade, a.close').remove(); });\r
+ return;\r
+ });\r
+\r
+ // Create new branch and continu\r
+ $('#btnCreateBranch').click(function(){\r
+ $('#modalQuestion').hide();\r
+ if($('#btnCreateBranch').text() != 'Ok'){\r
+ // Create the branch\r
+ createBranch();\r
+ commitMessage = $('#commitMessage').val();\r
+ if(commitMessage == ""){ commitMessage = "New commit"; }\r
+ if(userB64 != ""){ \r
+ if(loginProcess){\r
+ setCookie("logginNitdoc", base64.encode(userName+':'+password+':'+githubRepo+':'+branchName), 1); \r
+ $('#loginGit').val("");\r
+ $('#passwordGit').val("");\r
+ loginProcess = false; \r
+ displayLogginModal();\r
+ }\r
+ else{\r
+ if ($.trim(updateComment) == ''){ this.value = (this.defaultValue ? this.defaultValue : ''); }\r
+ else{ startCommitProcess(); }\r
+ } \r
+ }\r
+ }\r
+ else\r
+ {\r
+ $('#fade , #modalQuestion, #modal').fadeOut(function() { $('#fade, a.close').remove(); });\r
+ }\r
+ });\r
+\r
+ $('a[class=newComment]').click(function(){\r
+ addNewComment = true; \r
+ editComment += 1;\r
+ // hide comment\r
+ $(this).hide();\r
+ // Show edit box \r
+ $(this).next().show();\r
+ // Show cancel button\r
+ $(this).next().next().show();\r
+ // Show commit button\r
+ $(this).next().next().next().show();\r
+ // Resize edit box \r
+ $(this).next().height($(this).next().prop("scrollHeight"));\r
+ // Select it\r
+ $(this).next().select();\r
+ preElement = $(this); \r
+ });\r
+\r
+ $("#dropBranches").change(function () { \r
+ $("#dropBranches option:selected").each(function () {\r
+ if(branchName != $(this).text()){\r
+ branchName = $(this).text();\r
+ }\r
+ });\r
+ $.when(updateCookie(userName, password, githubRepo, branchName)).done(function(){\r
+ closeAllCommentInEdtiting();\r
+ reloadComment();\r
+ });\r
+ });\r
+\r
+ $("pre").hover(\r
+ function () {\r
+ if(sessionStarted == true){\r
+ $(this).css({'cursor' : 'hand'});\r
+ }\r
+ else{\r
+ $(this).css({'cursor' : ''});\r
+ }\r
+ },\r
+ function () {\r
+ if(sessionStarted == true){\r
+ $(this).css({'cursor' : 'pointer'});\r
+ }\r
+ else{\r
+ $(this).css({'cursor' : ''}); \r
+ }\r
+ }\r
+ );\r
});\r
\r
/* Parse current URL and return anchor name */\r
return null;\r
}\r
\r
-/* Prealod filters field using search query */
-function preloadFilters() {
- // Parse URL and get query string
- var search = currentAnchor();
-
- if(search == null || search.indexOf("q=") == -1)
- return;
-
+/* Prealod filters field using search query */\r
+function preloadFilters() {\r
+ // Parse URL and get query string\r
+ var search = currentAnchor();\r
+ \r
+ if(search == null || search.indexOf("q=") == -1)\r
+ return;\r
+ \r
search = search.substring(2, search.length); \r
-
- if(search == "" || search == "undefined")
- return;
\r
- $(":text").val(search);
- $(".filter :text")
- .removeClass("notUsed")
- .trigger("keyup");
-
+ if(search == "" || search == "undefined")\r
+ return;\r
+ \r
+ $(":text").val(search);\r
+ $(".filter :text")\r
+ .removeClass("notUsed")\r
+ .trigger("keyup");\r
+\r
}\r
\r
/* Hightlight the spoted block */\r
\r
target.addClass("highlighted");\r
target.show();\r
-}
\ No newline at end of file
+}\r
+\r
+// Init process to commit the new comment\r
+function startCommitProcess()\r
+{\r
+ var numL = preElement.attr("title");\r
+ commentLineStart = numL.split('-')[0] - 1; \r
+ if(addNewComment) { commentLineStart++; }\r
+ commentLineEnd = (commentLineStart + preElement.text().split('\n').length) - 1;\r
+ state = true; \r
+ replaceComment(updateComment, currentfileContent);\r
+ getLastCommit(); \r
+ getBaseTree(); \r
+ editComment = false;\r
+}\r
+\r
+function displayLogginModal(){\r
+ if ($('.popover').is(':hidden')) { \r
+ if(sessionStarted){ getListBranches(); }\r
+ $('.popover').show(); \r
+ }\r
+ else { $('.popover').hide(); } \r
+ updateDisplaying();\r
+}\r
+\r
+function updateDisplaying(){\r
+ if (checkCookie())\r
+ {\r
+ userB64 = "Basic " + getUserPass("logginNitdoc"); \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
+ $('#listBranches').show();\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' : '120px'});\r
+ $('#signIn').text("Sign out"); \r
+ sessionStarted = true;\r
+ reloadComment();\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
+ $('#listBranches').hide();\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 updateCookie(user, pwd, repo, branch){\r
+ if(checkCookie()){\r
+ branchName = branch;\r
+ setCookie("logginNitdoc", base64.encode(user+':'+pwd+':'+repo+':'+branch), 1);\r
+ }\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
+ password = cookie.split(':')[1];\r
+ githubRepo = 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
+\r
+\r
+function getLastCommit() \r
+{ \r
+ var urlHead = '';\r
+ if(sessionStarted){ urlHead = "https://api.github.com/repos/"+userName+"/"+githubRepo+"/git/refs/heads/"+branchName;}\r
+ else{ \r
+ // TODO: get url of the original repo.\r
+ return;\r
+ }\r
+\r
+ $.ajax({\r
+ beforeSend: function (xhr) { \r
+ if (userB64 != ""){ xhr.setRequestHeader ("Authorization", userB64); }\r
+ },\r
+ type: "GET",\r
+ url: urlHead,\r
+ dataType:"json",\r
+ async: false,\r
+ success: function(success)\r
+ { \r
+ shaLastCommit = success.object.sha; \r
+ }\r
+ });\r
+}\r
+\r
+function getBaseTree()\r
+{ \r
+ $.ajax({ \r
+ beforeSend: function (xhr) { \r
+ if (userB64 != ""){ xhr.setRequestHeader ("Authorization", userB64); }\r
+ },\r
+ type: "GET",\r
+ url: "https://api.github.com/repos/"+userName+"/"+githubRepo+"/git/commits/" + shaLastCommit,\r
+ dataType:"json",\r
+ async: false,\r
+ success: function(success)\r
+ { \r
+ shaBaseTree = success.tree.sha;\r
+ if (state){ setBlob(); }\r
+ else{ return; } \r
+ },\r
+ error: function(){\r
+ return;\r
+ }\r
+ }); \r
+}\r
+\r
+function setNewTree()\r
+{\r
+ $.ajax({ \r
+ beforeSend: function (xhr) { xhr.setRequestHeader ("Authorization", userB64); },\r
+ type: "POST",\r
+ url: "https://api.github.com/repos/"+userName+"/"+githubRepo+"/git/trees", \r
+ async: false,\r
+ data:'{ "base_tree" : "'+shaBaseTree+'", '+\r
+ '"tree":[{ '+\r
+ '"path":"'+ pathFile +'",'+\r
+ '"mode":"100644",'+\r
+ '"type":"blob",'+\r
+ '"sha": "'+ shaBlob +'"'+\r
+ '}] '+\r
+ '}', \r
+ success: function(success)\r
+ { // si l'appel a bien fonctionné\r
+ shaNewTree = JSON.parse(success).sha;\r
+ setNewCommit(); \r
+ },\r
+ error: function(){\r
+ return;\r
+ }\r
+ });\r
+}\r
+\r
+function setNewCommit()\r
+{\r
+ $.ajax({ \r
+ beforeSend: function (xhr) { xhr.setRequestHeader ("Authorization", userB64); },\r
+ type: "POST",\r
+ url: "https://api.github.com/repos/"+userName+"/"+githubRepo+"/git/commits", \r
+ async: false,\r
+ data:'{ "message" : "'+ commitMessage +'", '+\r
+ '"parents" :"'+shaLastCommit+'",'+ \r
+ '"tree": "'+shaNewTree+'"'+\r
+ '}', \r
+ success: function(success)\r
+ {\r
+ shaNewCommit = JSON.parse(success).sha;\r
+ commit(); \r
+ },\r
+ error: function(){\r
+ return;\r
+ }\r
+ });\r
+}\r
+\r
+//Create a commit\r
+function commit()\r
+{\r
+ $.ajax({ \r
+ beforeSend: function (xhr) { xhr.setRequestHeader ("Authorization", userB64); },\r
+ type: "POST",\r
+ url: "https://api.github.com/repos/"+userName+"/"+githubRepo+"/git/refs/heads/"+branchName, \r
+ data:'{ "sha" : "'+shaNewCommit+'", '+\r
+ '"force" :"true"'+\r
+ '}',\r
+ success: function(success) { displayMessage('Commit created successfully', 40, 40); },\r
+ error:function(error){ displayMessage('Error ' + JSON.parse(error).object.message, 40, 40); }\r
+ });\r
+}\r
+\r
+// Create a blob\r
+function setBlob()\r
+{\r
+ $.ajax({\r
+ beforeSend: function (xhr) { xhr.setRequestHeader ("Authorization", userB64); },\r
+ type: "POST", \r
+ url: "https://api.github.com/repos/"+userName+"/"+githubRepo+"/git/blobs", \r
+ async: false,\r
+ data:'{ "content" : "'+text.replace(/\r?\n/g, '\\n').replace(/\t/g, '\\t').replace(/\"/g,'\\"')+'", '+\r
+ '"encoding" :"utf-8"'+\r
+ '}',\r
+ success: function(success)\r
+ { \r
+ shaBlob = JSON.parse(success).sha;\r
+ setNewTree(); \r
+ },\r
+ error:function(error){ \r
+ displayMessage('Error : Problem parsing JSON', 40, 40); \r
+ return;\r
+ }\r
+ });\r
+}\r
+\r
+// Display file content\r
+function getFileContent(urlFile, newComment)\r
+{\r
+ $.ajax({\r
+ beforeSend: function (xhr) { \r
+ xhr.setRequestHeader ("Accept", "application/vnd.github-blob.raw");\r
+ if (userB64 != ""){ xhr.setRequestHeader ("Authorization", userB64); }\r
+ },\r
+ type: "GET", \r
+ url: urlFile, \r
+ async:false,\r
+ success: function(success)\r
+ {\r
+ state = true;\r
+ replaceComment(newComment, success); \r
+ }\r
+ });\r
+}\r
+\r
+function replaceComment(newComment, fileContent){\r
+ var arrayNew = newComment.split('\n'); \r
+ var lNew = arrayNew.length;\r
+ text = "";\r
+ var lines = fileContent.split("\n");\r
+ for (var i = 0; i < lines.length; i++) {\r
+ if(i == commentLineStart){\r
+ if(addNewComment){\r
+ for(var indexLine=0; indexLine < lines[i+1].length; indexxLine++){\r
+ if(lines[i+1].substr(indexLine,1) == "\t" || lines[i+1].substr(indexLine,1) == "#"){ text += lines[i+1].substr(indexLine,1); }\r
+ else{ break;}\r
+ }\r
+ text += lines[i] + "\n"; \r
+ }\r
+ // We change the comment\r
+ for(var j = 0; j < lNew; j++){\r
+ if(commentType == 1){ text += "\t# " + arrayNew[j] + "\n"; }\r
+ else{\r
+ if(arrayNew[j] == ""){ text += "#"+"\n"; }\r
+ else{ text += "# " + arrayNew[j] + "\n"; }\r
+ }\r
+ }\r
+ }\r
+ else if(i < commentLineStart || i >= commentLineEnd){\r
+ if(i == lines.length-1){ text += lines[i]; }\r
+ else{ text += lines[i] + "\n"; }\r
+ }\r
+ }\r
+ if(addNewComment){\r
+ addNewComment = false;\r
+ }\r
+}\r
+\r
+function getCommentLastCommit(path){\r
+ var urlRaw;\r
+ getLastCommit();\r
+ if(shaLastCommit != ""){\r
+ if (checkCookie()) {\r
+ urlRaw="https://rawgithub.com/"+ userName +"/"+ githubRepo +"/" + shaLastCommit + "/" + path;\r
+ $.ajax({ \r
+ type: "GET",\r
+ url: urlRaw,\r
+ async: false,\r
+ success: function(success)\r
+ {\r
+ currentfileContent = success;\r
+ }\r
+ });\r
+ }\r
+ }\r
+}\r
+\r
+function displayMessage(msg, widthDiv, margModal){\r
+ spinner.stop();\r
+ $('#modal').hide();\r
+ $('#btnCreateBranch').css('margin-left',widthDiv + '%');\r
+ $('#txtQuestion').text(msg);\r
+ $('#btnCreateBranch').text("Ok");\r
+ $('#btnCancelBranch').hide();\r
+ $('#modalQuestion').css({'left' : margModal + '%'})\r
+ $('#modalQuestion').show();\r
+ $('#modalQuestion').show().prepend('<a class="close"><img src="resources/icons/close.png" class="btnCloseQuestion" title="Close" alt="Close" /></a>');\r
+ $('body').append('<div id="fade"></div>');\r
+ $('#fade').css({'filter' : 'alpha(opacity=80)'}).fadeIn();\r
+}\r
+\r
+function displaySpinner(){\r
+ spinner.spin(targetSpinner);\r
+ $("#waitCommit").show();\r
+}\r
+\r
+// Check if the repo already exist\r
+function isRepoExisting(){\r
+ $.ajax({\r
+ beforeSend: function (xhr) { \r
+ if (userB64 != "") { xhr.setRequestHeader ("Authorization", userB64); }\r
+ },\r
+ type: "GET", \r
+ url: "https://api.github.com/repos/"+userName+"/"+githubRepo, \r
+ async:false,\r
+ dataType:'json',\r
+ success: function(){ repoExist = true; },\r
+ error: function()\r
+ {\r
+ displayMessage('Repo not found !', 35, 45);\r
+ repoExist = false;\r
+ }\r
+ });\r
+}\r
+\r
+// Check if the branch already exist\r
+function isBranchExisting(){\r
+ $.ajax({\r
+ beforeSend: function (xhr) {\r
+ if (userB64 != "") { xhr.setRequestHeader ("Authorization", userB64); }\r
+ },\r
+ type: "GET",\r
+ url: "https://api.github.com/repos/"+userName+"/"+githubRepo+"/git/refs/heads/"+branchName,\r
+ async:false,\r
+ dataType:'json',\r
+ success: function(){ branchExist = true; },\r
+ error: function()\r
+ {\r
+ branchExist = false;\r
+ editComment -= 1;\r
+ $('#modal').hide();\r
+ $('#txtQuestion').text("Are you sure you want to create that branch ?");\r
+ $('#btnCancelBranch').show();\r
+ $('#btnCreateBranch').text("Yes");\r
+ $('#modalQuestion').show();\r
+ $('#modalQuestion').show().prepend('<a class="close"><img src="resources/icons/close.png" class="btnCloseQuestion" title="Close" alt="Close" /></a>');\r
+ $('body').append('<div id="fade"></div>');\r
+ $('#fade').css({'filter' : 'alpha(opacity=80)'}).fadeIn();\r
+ }\r
+ });\r
+}\r
+\r
+function getMasterSha() \r
+{\r
+ $.ajax({\r
+ beforeSend: function (xhr) { \r
+ if (userB64 != ""){ xhr.setRequestHeader ("Authorization", userB64); }\r
+ },\r
+ type: "GET",\r
+ url: "https://api.github.com/repos/"+userName+"/"+githubRepo+"/git/refs/heads/master",\r
+ dataType:"json",\r
+ async: false,\r
+ success: function(success) { shaMaster = success.object.sha; }\r
+ });\r
+}\r
+\r
+function createBranch(){\r
+\r
+ getMasterSha();\r
+\r
+ $.ajax({ \r
+ beforeSend: function (xhr) { xhr.setRequestHeader ("Authorization", userB64); },\r
+ type: "POST",\r
+ url: "https://api.github.com/repos/"+userName+"/"+githubRepo+"/git/refs", \r
+ data:'{ "ref" : "refs/heads/'+branchName+'",'+\r
+ '"sha" : "'+shaMaster+'"'+\r
+ '}',\r
+ success: function(){ return; },\r
+ error: function(){\r
+ editComment -= 1;\r
+ displayMessage('Impossible to create the new branch : ' + branchName, 40, 40);\r
+ }\r
+ });\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
+\r
+function reloadComment(){\r
+ $.when(getCommentLastCommit($('pre[class=text_label]').attr('tag'))).done(function(){\r
+ $('pre[class=text_label]').each(function(){ getCommentOfFunction($(this)); });\r
+ });\r
+}\r
+\r
+function getCommentOfFunction(element){\r
+ var textC = ""; \r
+ var numL = element.attr("title");\r
+ if(numL != null){ \r
+ commentLineStart = numL.split('-')[0] - 1;\r
+ commentLineEnd = (commentLineStart + element.text().split('\n').length) - 1;\r
+ var lines = currentfileContent.split("\n");\r
+ for (var i = 0; i < lines.length; i++) {\r
+ if(i >= commentLineStart-1 && i <= commentLineEnd){\r
+ if (lines[i].substr(1,1) == "#"){ textC += lines[i].substr(3,lines[i].length) + "\n";}\r
+ else if(lines[i].substr(0,1) == '#'){ textC += lines[i].substr(2,lines[i].length) + "\n"; }\r
+ }\r
+ }\r
+ if (textC != ""){ element.text(textC); }\r
+ }\r
+}\r
+\r
+// Get list of branches\r
+function getListBranches()\r
+{\r
+ cleanListBranches();\r
+ $.ajax({\r
+ beforeSend: function (xhr) { \r
+ if ($("#login").val() != ""){ xhr.setRequestHeader ("Authorization", userB64); }\r
+ },\r
+ type: "GET", \r
+ url: "https://api.github.com/repos/"+userName+"/"+githubRepo+"/branches", \r
+ async:false,\r
+ dataType:'json',\r
+ success: function(success)\r
+ { \r
+ for(var branch in success) { \r
+ var selected = '';\r
+ if(branchName == success[branch].name){\r
+ selected = 'selected';\r
+ }\r
+ $('#dropBranches').append('<option value="" '+ selected +'>' + success[branch].name + '</option>');\r
+ }\r
+ }\r
+ });\r
+}\r
+\r
+// Delete all option in the list\r
+function cleanListBranches(){\r
+ $('#dropBranches').children("option").remove();\r
+}\r
+\r
+function closeAllCommentInEdtiting(){\r
+ $('a[id=cancelBtn]').each(function(){\r
+ closeEditing($(this));\r
+ });\r
+}\r
+\r
+function closeEditing(tag){\r
+ if(editComment > 0){ editComment -= 1; }\r
+ // Hide itself\r
+ tag.hide();\r
+ // Hide commitBtn\r
+ tag.next().hide();\r
+ // Hide Textarea\r
+ tag.prev().hide();\r
+ // Show comment\r
+ tag.prev().prev().show();\r
+}\r