ni_nitdoc: fixed broken search with special caracters in JS
[nit.git] / share / nitdoc / scripts / js-facilities.js
index 87e760a..31553f5 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
@@ -195,14 +198,17 @@ $(document).ready(function() {
 \r
                                                        // Escape regexp related characters in query\r
                                                        var query = $("#search").val();\r
+                                                       query = query.replace(/\\/gi, "\\\\");\r
                                                        query = query.replace(/\[/gi, "\\[");\r
                                                        query = query.replace(/\|/gi, "\\|");\r
                                                        query = query.replace(/\*/gi, "\\*");\r
                                                        query = query.replace(/\+/gi, "\\+");\r
-                                                       query = query.replace(/\\/gi, "\\\\");\r
                                                        query = query.replace(/\?/gi, "\\?");\r
                                                        query = query.replace(/\(/gi, "\\(");\r
                                                        query = query.replace(/\)/gi, "\\)");\r
+                                                       query = query.replace(/&/gi, "&&");\r
+                                                       query = query.replace(/>/gi, ">");\r
+                                                       query = query.replace(/</gi, "&lt;");\r
 \r
                                                        var index = 0;\r
                                                        var regexp = new RegExp("^" + query, "i");\r
@@ -211,7 +217,7 @@ $(document).ready(function() {
                                                                        break;\r
                                                                }\r
                                                                var result = entry.match(regexp);\r
-                                                               if(result != null && result.toString().toUpperCase() == $("#search").val().toUpperCase()) {\r
+                                                               if(result != null) {\r
                                                                        for(var i = 0; i < entries[entry].length; i++) {\r
                                                                                if(index > 10) {\r
                                                                                        break;\r
@@ -467,6 +473,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 +483,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
@@ -488,6 +496,7 @@ $(document).ready(function() {
                        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
@@ -496,13 +505,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
@@ -515,7 +524,7 @@ $(document).ready(function() {
                        }\r
                        \r
                        // Create the commit message\r
-                       commitMessage = 'Wikidoc: modified comment in ' + $(this).parent().prev().html().split(' ')[1];\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
@@ -531,6 +540,7 @@ $(document).ready(function() {
                $(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
@@ -541,6 +551,7 @@ $(document).ready(function() {
                });             \r
                $('#modalQuestion').hide();\r
                $('#chkSignedOff').attr('checked', false);\r
+               removeSignedOff();\r
        });\r
 \r
        $('#loginAction').click(function(){\r
@@ -577,6 +588,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
@@ -634,6 +647,7 @@ $(document).ready(function() {
                $(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
@@ -674,6 +688,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
@@ -1163,8 +1181,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
@@ -1175,11 +1198,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
@@ -1302,7 +1327,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
@@ -1311,16 +1338,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
@@ -1435,8 +1480,37 @@ function addSignedOff(){
                        $('#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