From 19c84eb6946980755a37e5a0e770f0e271cb77a7 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Mon, 9 Oct 2017 23:37:19 +0100 Subject: [PATCH] Add commit history view in sidebar --- editor/js/ui/diff.js | 214 +++++++++++++----- editor/js/ui/tab-versionControl.js | 70 ++++++ editor/sass/diff.scss | 11 +- editor/sass/projects.scss | 54 ++++- red/api/editor/projects/index.js | 25 ++ .../localfilesystem/projects/git/index.js | 30 +++ .../storage/localfilesystem/projects/index.js | 11 + 7 files changed, 346 insertions(+), 69 deletions(-) diff --git a/editor/js/ui/diff.js b/editor/js/ui/diff.js index 891c8cf8b..fc9d05d30 100644 --- a/editor/js/ui/diff.js +++ b/editor/js/ui/diff.js @@ -1509,10 +1509,10 @@ RED.diff = (function() { label.text("@@ -"+(diffLines[end-1].a.i+1)+" +"+(diffLines[end-1].b.i+1)); } diffRow.click(function(evt) { - console.log(start,end,diffLines.length); + // console.log(start,end,diffLines.length); if (end - start > 20) { var startPos = $(this).offset(); - console.log(startPos); + // console.log(startPos); if (start > 0) { for (var i=start;i'); + files.forEach(function(file) { + var hunks = file.hunks; + + var codeTable = $("").appendTo(diffPanel); + $('').appendTo(codeTable); + var codeBody = $('').appendTo(codeTable); + + var diffRow = $('').appendTo(codeBody); + var content = $('').appendTo(diffRow); + var label = $('').text(file.file).appendTo(content); + + for (var i=0;i').appendTo(codeBody); + var content = $('').appendTo(diffRow); + var label = $('').text(hunks[i].header).appendTo(content); + + var localLine = hunks[i].localStartLine; + var remoteLine = hunks[i].remoteStartLine; + + + for (var j=0;j').appendTo(codeBody); + var localLineNo = $('').appendTo(codeTable); var codeBody = $('').appendTo(codeTable); - for (var i=0;i').appendTo(codeBody); - var content = $('').appendTo(diffRow); - var label = $('').text(hunks[i].header).appendTo(content); - - var localLine = hunks[i].localStartLine; - var remoteLine = hunks[i].remoteStartLine; + var diffRow = $('').appendTo(codeBody); + var content = $('').appendTo(diffRow); + var label = $('
').text(commit.preamble).appendTo(content);
+
+
+                createUnifiedDiffTable(commit.files).appendTo(diffPanel);
 
 
-                    for (var j=0;j').appendTo(codeBody);
-                        var localLineNo = $('
').appendTo(diffRow); + var remoteLineNo = $('').appendTo(diffRow); + var line = $('').appendTo(diffRow); + $('').text(lineText[0]).appendTo(line); + $('').text(lineText.substring(1)).appendTo(line); + if (lineText[0] === '+') { + line.addClass("added"); + remoteLineNo.text(remoteLine++); + } else if (lineText[0] === '-') { + line.addClass("removed"); + localLineNo.text(localLine++); + } else { + line.addClass("unchanged"); + if (localLine > 0) { + localLineNo.text(localLine++); + } + if (remoteLine > 0) { + remoteLineNo.text(remoteLine++); + } + } + } + } + }); + return diffPanel; + } + + function showCommitDiff(diff,title) { + var commit = parseCommitDiff(diff); var trayOptions = { title: title||"Compare Changes", //TODO: nls width: Infinity, @@ -1671,83 +1726,125 @@ RED.diff = (function() { $('
').appendTo(diffRow); - var remoteLineNo = $('').appendTo(diffRow); - var line = $('').appendTo(diffRow); - $('').text(lineText[0]).appendTo(line); - $('').text(lineText.substring(1)).appendTo(line); - if (lineText[0] === '+') { - line.addClass("added"); - remoteLineNo.text(remoteLine++); - } else if (lineText[0] === '-') { - line.addClass("removed"); - localLineNo.text(localLine++); - } else { - line.addClass("unchanged"); - localLineNo.text(localLine++); - remoteLineNo.text(remoteLine++); - } - } - } }, close: function() { diffVisible = false; - }, show: function() { } } RED.tray.show(trayOptions); + } + function showUnifiedDiff(diff,title) { + var files = parseUnifiedDiff(diff); + var trayOptions = { + title: title||"Compare Changes", //TODO: nls + width: Infinity, + overlay: true, + buttons: [ + { + text: RED._("common.label.done"), + click: function() { + RED.tray.close(); + } + } + ], + resize: function(dimensions) { + // trayWidth = dimensions.width; + }, + open: function(tray) { + var trayBody = tray.find('.editor-tray-body'); + var diffPanel = $('
').appendTo(trayBody); + createUnifiedDiffTable(files).appendTo(diffPanel); + }, + close: function() { + diffVisible = false; + }, + show: function() { + + } + } + RED.tray.show(trayOptions); + } + + function parseCommitDiff(diff) { + var result = { + }; + var lines = diff.split("\n"); + for (var i=0;i').appendTo(container); @@ -315,6 +318,37 @@ RED.sidebar.versionControl = (function() { collapsible: true }); + var bg = $('
').appendTo(localHistory.header); + $('') + .appendTo(bg) + .click(function(evt) { + evt.preventDefault(); + refreshLocalCommits(); + }) + + localCommitList = $("
    ",{style:"position: absolute; top: 0px; bottom: 0; right:0; left:0;"}).appendTo(localHistory.content); + localCommitList.editableList({ + addButton: false, + scrollOnAdd: false, + addItem: function(row,index,entry) { + row.addClass('sidebar-version-control-commit-entry'); + row.click(function(e) { + var activeProject = RED.projects.getActiveProject(); + if (activeProject) { + $.getJSON("/projects/"+activeProject.name+"/commits/"+entry.sha,function(result) { + RED.diff.showCommitDiff(result.commit); + }); + } + }); + var container = $('
    ').appendTo(row); + $('