nitdoc: Inform if a comment was already modify
authorStefan Lage <lagestfan@gmail.com>
Tue, 28 May 2013 20:40:25 +0000 (16:40 -0400)
committerStefan Lage <lagestfan@gmail.com>
Tue, 28 May 2013 22:12:40 +0000 (18:12 -0400)
Adding a function in 'edit mode' which inform if the comment the
customer if the function which he is editing was already modify, it
allow to show this update to compare it with the original comment

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

share/nitdoc/scripts/js-facilities.js
share/nitdoc/styles/main.css
src/nitdoc.nit

index 1349c66..40ff369 100644 (file)
@@ -5,6 +5,7 @@ var password = "";
 var sessionStarted = false;\r
 var editComment = 0;\r
 var currentfileContent = '';\r
+var originalFileContent = '';\r
 var addNewComment = false;\r
 var commentLineStart;\r
 var commentLineEnd;\r
@@ -23,6 +24,8 @@ var loginProcess = false;
 var signedOff = '';\r
 var userEmail = '';\r
 var commitMessage = '';\r
+var numComment = '';\r
+var showcomment = false;\r
 \r
 // Spinner vars\r
 var opts = {\r
@@ -467,6 +470,7 @@ $(document).ready(function() {
                        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
@@ -476,6 +480,7 @@ $(document).ready(function() {
                                if(i < lNew-1){ adapt += "\n"; }\r
                        }\r
                        editComment += 1;\r
+                       getCommentOfFunction($(this));\r
                        // hide comment\r
                        $(this).hide();\r
                        // Show edit box \r
@@ -497,13 +502,13 @@ $(document).ready(function() {
 \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
        // Display commit form\r
        $('a[id=commitBtn]').click(function(){\r
-               $(this).parent().prev().children('#lblDiffCommit').text("");\r
-               showcomment = false;\r
                updateComment = $(this).prev().prev().val();\r
                commentType = $(this).prev().prev().prev().attr('type');\r
 \r
@@ -580,6 +585,8 @@ $(document).ready(function() {
                                });\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
@@ -678,6 +685,10 @@ $(document).ready(function() {
                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
@@ -1167,8 +1178,13 @@ function replaceComment(newComment, fileContent){
        }\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
@@ -1179,11 +1195,13 @@ function getCommentLastCommit(path){
                            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
@@ -1306,7 +1324,9 @@ $.fn.spin = function(opts) {
 };\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
@@ -1315,16 +1335,34 @@ function getCommentOfFunction(element){
        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
@@ -1451,3 +1489,25 @@ function resizeTextarea(element){
        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
index d876514..023e728 100644 (file)
@@ -463,7 +463,7 @@ textarea {
        float: right;\r
        margin-right: 10px;\r
 }\r
-#commitBtn:hover, #cancelBtn:hover{\r
+#commitBtn:hover, #cancelBtn:hover, #lblDiffCommit:hover{\r
        cursor: hand; cursor: pointer;\r
 }\r
 \r
@@ -841,3 +841,7 @@ fieldset {
 .githubTitle{\r
        text-align:center;\r
 }\r
+\r
+#preSave{\r
+       display: none;\r
+}\r
index 6e685b6..50bd192 100644 (file)
@@ -634,7 +634,7 @@ redef class MMModule
                        dctx.add("{m.html_link(dctx)}::")
                end
                dctx.add("{self.name}</div>\n")
-
+               dctx.add("<div style=\"float: right;\"><a id=\"lblDiffCommit\"></a></div>")
                dctx.add("<section class='description'>\n")
 
                var doc = doc
@@ -643,6 +643,7 @@ redef class MMModule
                        dctx.add("<pre class=\"text_label\">{doc.to_html}</pre>\n")
                        dctx.add("<textarea rows=\"1\" cols=\"76\" id=\"fileContent\" class=\"edit\"></textarea>\n")
                        dctx.add("<a id=\"cancelBtn\">Cancel</a><a id=\"commitBtn\">Commit</a>")
+                       dctx.add("<pre id=\"preSave\" type=\"2\" class=\"text_label\" ></pre>")
                        dctx.add("</div>\n")
                end
 
@@ -1095,7 +1096,7 @@ redef class MMLocalProperty
                        dctx.add("::{html_name}")
                end
                dctx.add("</div>")
-
+               dctx.add("<div style=\"float: right;\"><a id=\"lblDiffCommit\"></a></div>")
                dctx.add("<div class=\"description\">")
 
                # Collect all refinement of the global property in the same global property
@@ -1114,6 +1115,7 @@ redef class MMLocalProperty
                        dctx.add("<pre class=\"text_label\" name=\"{html_name}\" >{global.intro.doc.to_html}</pre>")
                        dctx.add("<textarea rows=\"1\" cols=\"76\" id=\"fileContent\" class=\"edit\"></textarea>")
                        dctx.add("<a id=\"cancelBtn\">Cancel</a><a id=\"commitBtn\">Commit</a>")
+                       dctx.add("<pre id=\"preSave\" type=\"2\" class=\"text_label\" ></pre>")
                end
 
                var tlmods = new Array[MMModule]
@@ -1159,6 +1161,7 @@ redef class MMLocalProperty
                        end
                        dctx.add("<textarea rows=\"1\" cols=\"76\" id=\"fileContent\" class=\"edit\"></textarea>")
                        dctx.add("<a id=\"cancelBtn\">Cancel</a><a id=\"commitBtn\">Commit</a>")
+                       dctx.add("<pre id=\"preSave\" type=\"2\" class=\"text_label\" ></pre>")
                        dctx.add("<p>")
                        if tlp.local_class.global != lc.global then
                                dctx.add("inherited from {tlp.local_class.html_link(dctx)} ")
@@ -1437,7 +1440,7 @@ redef class MMLocalClass
                        dctx.add("(unexported) ")
                end
                dctx.add("{kind} {global.intro.mmmodule.toplevel_owner.html_link(dctx)}::{name}</div>")
-
+               dctx.add("<div style=\"float: right;\"><a id=\"lblDiffCommit\"></a></div>")
                dctx.add("<section class=\"description\">\n")
                var doc = doc
                if doc != null then
@@ -1445,6 +1448,7 @@ redef class MMLocalClass
                        dctx.add("<pre type=\"2\" class=\"text_label\" tag=\"{l.file.filename}\" name=\"{dctx.get_source(l)}\" title=\"{l.line_start.to_s}\">{doc.to_html}</pre>\n")
                        dctx.add("<textarea rows=\"1\" cols=\"76\" id=\"fileContent\" class=\"edit\"></textarea>")
                        dctx.add("<a id=\"cancelBtn\">Cancel</a><a id=\"commitBtn\">Commit</a>")
+                       dctx.add("<pre id=\"preSave\" type=\"2\" class=\"text_label\" ></pre>")
                end
 
                var cla = new HashSet[MMLocalClass]