+\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
+ // 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
+}\r
+\r
+function getCommentLastCommit(path){\r
+ var urlRaw;\r
+ getLastCommit();\r
+ if(shaLastCommit != ""){\r
+ if (checkCookie()) { urlRaw="https://rawgithub.com/"+ userName +"/"+ repoName +"/" + shaLastCommit + "/" + path; }\r
+ else{ urlRaw="https://rawgithub.com/StefanLage/"+ $('#repoName').attr('name') +"/" + shaLastCommit + "/" + path; }\r
+\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
+function displayMessage(msg, widthDiv, margModal){\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