var sessionStarted = false;\r
var editComment = 0;\r
var currentfileContent = '';\r
+var originalFileContent = '';\r
var addNewComment = false;\r
var commentLineStart;\r
var commentLineEnd;\r
var branchExist = false;\r
var githubRepo;\r
var loginProcess = false; \r
+var signedOff = '';\r
+var userEmail = '';\r
+var commitMessage = '';\r
+var numComment = '';\r
+var showcomment = false;\r
\r
// Spinner vars\r
var opts = {\r
return;\r
}\r
else{\r
+ numComment = $(this).attr('title');\r
var arrayNew = $(this).text().split('\n');\r
var lNew = arrayNew.length - 1;\r
var adapt = "";\r
if(i < lNew-1){ adapt += "\n"; }\r
}\r
editComment += 1;\r
+ getCommentOfFunction($(this));\r
// hide comment\r
$(this).hide();\r
// Show 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
+ resizeTextarea($(this).next());\r
// Select it\r
$(this).next().select();\r
preElement = $(this);\r
\r
// Disable the edit mode\r
$('a[id=cancelBtn]').click(function(){\r
+ $(this).parent().prev().children('#lblDiffCommit').text("");\r
+ showcomment = false;\r
closeEditing($(this));\r
});\r
\r
}\r
\r
// Create the commit message\r
- var commitMessage = 'Wikidoc: modified comment in ' + $(this).parent().prev().html().split(' ')[1];\r
- $('#commitMessage').val(commitMessage);\r
- pathFile = $(this).prev().prev().prev().attr('tag');\r
+ commitMessage = 'Wikidoc: modified comment in ' + $(this).parent().prev().prev().html().split(' ')[1];\r
+ $('#commitMessage').text(commitMessage);\r
+ $('#commitMessage').css({'display': 'block'});\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
$(this).hide(); \r
$(this).next().hide(); \r
if(editComment > 0){ editComment -= 1; }\r
+ $('#chkSignedOff').attr('checked', false);\r
+ removeSignedOff();\r
});\r
\r
//Close Popups and Fade Layer\r
$('#fade, a.close').remove(); \r
}); \r
$('#modalQuestion').hide();\r
+ $('#chkSignedOff').attr('checked', false);\r
+ removeSignedOff();\r
});\r
\r
$('#loginAction').click(function(){\r
isBranchExisting();\r
if(branchExist){\r
editComment -= 1;\r
- commitMessage = $('#commitMessage').val();\r
+ commitMessage = $('#commitMessage').val().replace(/\r?\n/g, '\\n').replace(/\t/g, '\\t').replace(/\"/g,'\\"');\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
+ startCommitProcess();\r
}\r
}\r
$('#modal, #modalQuestion').fadeOut(function() {\r
});\r
$('a[id=cancelBtn]').hide();\r
$('a[id=commitBtn]').hide();\r
+ $('a[id=lblDiffCommit]').text("");\r
+ showcomment = false;\r
// Re-load all comment\r
reloadComment();\r
}\r
}\r
else{ editComment -= 1; }\r
+ $('#chkSignedOff').attr('checked', false);\r
});\r
\r
// Cancel creating branch\r
if($('#btnCreateBranch').text() != 'Ok'){\r
// Create the branch\r
createBranch();\r
- commitMessage = $('#commitMessage').val();\r
+ commitMessage = $('#commitMessage').val().replace(/\r?\n/g, '\\n').replace(/\t/g, '\\t').replace(/\"/g,'\\"');\r
if(commitMessage == ""){ commitMessage = "New commit"; }\r
if(userB64 != ""){ \r
if(loginProcess){\r
$(this).next().next().next().show();\r
// Resize edit box \r
$(this).next().height($(this).next().prop("scrollHeight"));\r
+ resizeTextarea($(this).next());\r
// Select it\r
$(this).next().select();\r
preElement = $(this); \r
}\r
}\r
);\r
+\r
+ $('#chkSignedOff').click(function(){\r
+ if($(this).is(':checked')){ addSignedOff(); }\r
+ else{ removeSignedOff(); }\r
+ })\r
+\r
+ $('a[id=lblDiffCommit]').click(function(){\r
+ showComment($(this));\r
+ });\r
});\r
\r
/* Parse current URL and return anchor name */\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
+ if($('#chkSignedOff').is(':checked')){\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
+ else{\r
+ displayMessage('Please sign this commit', 40, 40); \r
+ }\r
}\r
\r
function displayLogginModal(){\r
$('#lbbranchGit').hide(); \r
$('#branchGit').hide();\r
$('#listBranches').show();\r
+ $('#divGitHubRepoDisplay').show();\r
$("#liGitHub").attr("class", "current");\r
$("#imgGitHub").attr("src", "resources/icons/github-icon-w.png");\r
- $('#nickName').text(userName); \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' : '160px'});\r
- $('#signIn').text("Sign out"); \r
+ $('.popover').css({'height' : '190px'});\r
+ $('#signIn').text("Sign out");\r
+ $('#githubRepoDisplay').text(githubRepo);\r
sessionStarted = true;\r
reloadComment();\r
}\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' : '325px'}); \r
+ $('#passwordGit').val("");\r
+ $('#nickName').text("");\r
+ $('.popover').css({'height' : '325px'});\r
$('#logginMessage').css({'display' : 'none'});\r
$('#repositoryGit').val($('#repoName').attr('name'));\r
$('#branchGit').val('wikidoc'); \r
$('#lbbranchGit').show(); \r
$('#branchGit').show(); \r
$('#listBranches').hide();\r
+ $('#divGitHubRepoDisplay').hide();\r
}\r
}\r
\r
type: "POST",\r
url: "https://api.github.com/repos/"+userName+"/"+githubRepo+"/git/trees", \r
async: false,\r
+ dataType:'json',\r
data:'{ "base_tree" : "'+shaBaseTree+'", '+\r
'"tree":[{ '+\r
'"path":"'+ pathFile +'",'+\r
'}', \r
success: function(success)\r
{ // si l'appel a bien fonctionné\r
- shaNewTree = JSON.parse(success).sha;\r
+ shaNewTree = success.sha;\r
setNewCommit(); \r
},\r
error: function(){\r
\r
function setNewCommit()\r
{\r
+ addSignedOff();\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
+ dataType:'json',\r
data:'{ "message" : "'+ commitMessage +'", '+\r
'"parents" :"'+shaLastCommit+'",'+ \r
'"tree": "'+shaNewTree+'"'+\r
'}', \r
success: function(success)\r
{\r
- shaNewCommit = JSON.parse(success).sha;\r
+ shaNewCommit = success.sha;\r
commit(); \r
},\r
error: function(){\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
+ dataType:'json',\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
+ error:function(error){ displayMessage('Error ' + error.object.message, 40, 40); }\r
});\r
}\r
\r
type: "POST", \r
url: "https://api.github.com/repos/"+userName+"/"+githubRepo+"/git/blobs", \r
async: false,\r
+ dataType:'json',\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
+ shaBlob = success.sha;\r
setNewTree(); \r
},\r
error:function(error){ \r
}\r
}\r
\r
-function getCommentLastCommit(path){\r
+function getCommentLastCommit(path, origin){\r
var urlRaw;\r
+ var bkBranch = '';\r
+ if(origin){// We want to get the original file\r
+ bkBranch = branchName;\r
+ branchName = "master";\r
+ }\r
getLastCommit();\r
if(shaLastCommit != ""){\r
if (checkCookie()) {\r
async: false,\r
success: function(success)\r
{\r
- currentfileContent = success;\r
+ if(origin){ originalFileContent = success; }\r
+ else{ currentfileContent = success; }\r
}\r
});\r
}\r
}\r
+ if(origin){ branchName = bkBranch; }\r
}\r
\r
function displayMessage(msg, widthDiv, margModal){\r
spinner.stop();\r
$('#modal').hide();\r
- $('#txtQuestion').text(msg);\r
- $('#btnCreateBranch').text("Ok");\r
$('#btnCancelBranch').hide(); \r
$('#modalQuestion').show().prepend('<a class="close"><img src="resources/icons/close.png" class="btnCloseQuestion" title="Close" alt="Close" /></a>');\r
+ $('#txtQuestion').text(msg);\r
+ $('#btnCreateBranch').text("Ok");\r
var xModal = $('#modalQuestion').css('width').split('px')[0];\r
var yModal = $('#modalQuestion').css('height').split('px')[0];\r
var x = $(document).width/2 - xModal/2;\r
};\r
\r
function reloadComment(){\r
- $.when(getCommentLastCommit($('pre[class=text_label]').attr('tag'))).done(function(){\r
+ var path = $('pre[class=text_label]').attr('tag');\r
+ $.when(getCommentLastCommit(path, false)).done(function(){\r
+ if(sessionStarted){ getCommentLastCommit(path, true); }\r
$('pre[class=text_label]').each(function(){ getCommentOfFunction($(this)); });\r
});\r
}\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
+ commentLineStart = numL-1; \r
+ commentLineEnd = element.attr('name').split(numL)[1].split('-')[1]-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(i >= commentLineStart-1 && i <= commentLineEnd+1){\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
+ if(textC != element.text){element.text(textC);}\r
+ if (textC != "" && editComment > 0){\r
+ var originContent = originalFileContent.split("\n");\r
+ var origin = '';\r
+ var lblDiff = element.parent().prev().children('#lblDiffCommit');\r
+ var preSave = element.parent().children('#preSave');\r
+ for (var i = 0; i < originContent.length; i++) {\r
+ if(i >= commentLineStart-1 && i <= commentLineEnd+1){\r
+ if (originContent[i].substr(1,1) == "#"){ origin += originContent[i].substr(3,originContent[i].length) + "\n";}\r
+ else if(originContent[i].substr(0,1) == '#'){ origin += originContent[i].substr(2,originContent[i].length) + "\n"; }\r
+ }\r
+ }\r
+ if(textC != origin && numL == numComment){\r
+ // The comment is different compare to the original\r
+ if(showcomment == false){ lblDiff.text("Show original comment"); }\r
+ preSave.text(origin);\r
+ }\r
+ else if (numL == numComment){ lblDiff.text(""); }\r
+ }\r
}\r
}\r
\r
dataType:'json',\r
success: function(success)\r
{\r
- displayMessage('You are now logged in');\r
+ getUserInfo();\r
response = true;\r
+ displayMessage('You are now logged in');\r
},\r
error: function()\r
{\r
});\r
return response;\r
}\r
+\r
+function getUserInfo(){\r
+ $.ajax({\r
+ beforeSend: function (xhr) {\r
+ if ($("#login").val() != ""){ xhr.setRequestHeader ("Authorization", userB64); }\r
+ },\r
+ type: "GET",\r
+ url: "https://api.github.com/user/emails",\r
+ async:false,\r
+ dataType:'json',\r
+ success: function(success)\r
+ { \r
+ userEmail = success;\r
+ }\r
+ });\r
+}\r
+\r
+function getSignedOff(){\r
+ $.ajax({\r
+ beforeSend: function (xhr) {\r
+ if ($("#login").val() != ""){ xhr.setRequestHeader ("Authorization", userB64); }\r
+ },\r
+ type: "GET",\r
+ url: "https://api.github.com/users/"+userName,\r
+ async:false,\r
+ dataType:'json',\r
+ success: function(success)\r
+ {\r
+ signedOff = success.name;\r
+ }\r
+ });\r
+}\r
+\r
+function addSignedOff(){\r
+ $.when(getUserInfo()).done(function(){\r
+ $.when(getSignedOff()).done(function(){\r
+ $('#commitMessage').val($('#commitMessage').val() + "\n\nSigned-off-by: "+signedOff+" <"+userEmail+">");\r
+ });\r
+ });\r
+ resizeTextarea($('#commitMessage'));\r
+}\r
+\r
+function removeSignedOff(){\r
+ $('#commitMessage').val(commitMessage); \r
+ resizeTextarea($('#commitMessage'));\r
+}\r
+\r
+function resizeTextarea(element){\r
+ var nLines = element.val().split('\n').length + 1;\r
+ element.attr('rows', nLines);\r
+}\r
+\r
+function showComment(element){\r
+ // Display the original comment\r
+ if (showcomment == true){ \r
+ showcomment = false;\r
+ element.text("Show original comment");\r
+ }\r
+ else{\r
+ // Show the comment updated in user's repo\r
+ showcomment = true;\r
+ element.text("Comment changed in "+githubRepo+" / "+branchName);\r
+ }\r
+ var parent = element.parent().next(".description"); \r
+ var textarea = parent.children('#fileContent');\r
+ var text = textarea.val(); \r
+ var preSave = parent.children('#preSave'); \r
+ textarea.val(preSave.text());\r
+ preSave.text(text);\r
+ // Resize edit box\r
+ textarea.height(textarea.prop("scrollHeight"));\r
+ resizeTextarea(textarea);\r
+}\r