diff --git a/src/LiveDevelopment/LiveDevMultiBrowser.js b/src/LiveDevelopment/LiveDevMultiBrowser.js
index e67bfecc4e..baeba8cbe3 100644
--- a/src/LiveDevelopment/LiveDevMultiBrowser.js
+++ b/src/LiveDevelopment/LiveDevMultiBrowser.js
@@ -588,7 +588,7 @@ define(function (require, exports, module) {
// reload the page if the given document is a JS file related
// to the current live document.
- if (_liveDocument.isRelated(absolutePath)) {
+ if (_liveDocument.isRelated && _liveDocument.isRelated(absolutePath)) {
if (doc.getLanguage().getId() === "javascript") {
_setStatus(STATUS_RELOADING);
_protocol.reload();
@@ -610,7 +610,7 @@ define(function (require, exports, module) {
var absolutePath = doc.file.fullPath;
- if (_liveDocument.isRelated(absolutePath)) {
+ if (_liveDocument.isRelated && _liveDocument.isRelated(absolutePath)) {
// Set status to out of sync if dirty. Otherwise, set it to active status.
_setStatus(_docIsOutOfSync(doc) ? STATUS_OUT_OF_SYNC : STATUS_ACTIVE);
}
diff --git a/src/extensions/default/Git/src/GutterManager.js b/src/extensions/default/Git/src/GutterManager.js
index 064a9c96db..419dbaca8e 100644
--- a/src/extensions/default/Git/src/GutterManager.js
+++ b/src/extensions/default/Git/src/GutterManager.js
@@ -21,6 +21,45 @@ define(function (require, exports) {
editorsWithGutters = [],
openWidgets = [];
+ /**
+ * Checks if there's already a gutter marker on the given line;
+ * if not, inserts a blank
to prevent an empty gutter spot.
+ */
+ function _addDummyGutterMarkerIfNotExist(cm, line) {
+ var lineInfo = cm.lineInfo(line);
+ if (!lineInfo) {
+ return; // If line is out of range or doc is empty
+ }
+ var gutters = cm.getOption("gutters").slice(0),
+ gutterEnabled = gutters.indexOf(gutterName);
+ if(gutterEnabled === -1){
+ return;
+ }
+ var gutterMarkers = lineInfo.gutterMarkers;
+ var existingMarker = gutterMarkers && gutterMarkers[gutterName];
+ if (!existingMarker) {
+ var dummy = document.createElement("div");
+ dummy.className = "CodeMirror-gitGutter-none";
+ cm.setGutterMarker(line, gutterName, dummy);
+ }
+ }
+
+ function _cursorActivity(_evt, editor){
+ // this is to prevent a gutter gap in the active line if there is no color on this line.
+ _addDummyGutterMarkerIfNotExist(editor._codeMirror, editor.getCursorPos().line);
+ }
+
+ EditorManager.on("activeEditorChange", function (event, newEditor, oldEditor) {
+ if(newEditor){
+ newEditor.off("cursorActivity.gitGutter");
+ newEditor.on("cursorActivity.gitGutter", _cursorActivity);
+ _cursorActivity(null, newEditor);
+ }
+ if(oldEditor){
+ oldEditor.off("cursorActivity.gitGutter");
+ }
+ });
+
function clearWidgets() {
var lines = openWidgets.map(function (mark) {
var w = mark.lineWidget;
@@ -102,7 +141,7 @@ define(function (require, exports) {
.html(" ");
cm.setGutterMarker(obj.line, gutterName, $marker[0]);
});
-
+ _cursorActivity(null, editor);
// reopen widgets that were opened before refresh
openBefore.forEach(function (obj) {
gutterClick(obj.cm, obj.line, gutterName);
@@ -373,7 +412,18 @@ define(function (require, exports) {
}
});
+ function init() {
+ const editor = EditorManager.getActiveEditor();
+ if(!editor){
+ return;
+ }
+ editor.off("cursorActivity.gitGutter");
+ editor.on("cursorActivity.gitGutter", _cursorActivity);
+ _cursorActivity(null, editor);
+ }
+
// API
+ exports.init = init;
exports.goToPrev = goToPrev;
exports.goToNext = goToNext;
});
diff --git a/src/extensions/default/Git/src/Panel.js b/src/extensions/default/Git/src/Panel.js
index cac77c3dc0..bc4f41a915 100644
--- a/src/extensions/default/Git/src/Panel.js
+++ b/src/extensions/default/Git/src/Panel.js
@@ -1083,7 +1083,7 @@ define(function (require, exports) {
if ($this.attr("x-status") === Git.FILE_STATUS.DELETED) {
return;
}
- FileViewController.addToWorkingSetAndSelect(Preferences.get("currentGitRoot") + $this.attr("x-file"));
+ FileViewController.openFileAndAddToWorkingSet(Preferences.get("currentGitRoot") + $this.attr("x-file"));
});
}
@@ -1316,6 +1316,7 @@ define(function (require, exports) {
toggle(true);
}
_panelResized();
+ GutterManager.init();
} // function init() {
function enable() {
diff --git a/src/extensions/default/Git/src/Utils.js b/src/extensions/default/Git/src/Utils.js
index d55400bd80..b82b3ce4a8 100644
--- a/src/extensions/default/Git/src/Utils.js
+++ b/src/extensions/default/Git/src/Utils.js
@@ -273,7 +273,7 @@ define(function (require, exports, module) {
}
// create entry for temporary file
- var fileEntry = FileSystem.getFileForPath(folder + ".bracketsGitTemp");
+ var fileEntry = FileSystem.getFileForPath(folder + ".phoenixGitTemp");
function finish(bool) {
// delete the temp file and resolve
diff --git a/src/extensions/default/Git/src/git/GitCli.js b/src/extensions/default/Git/src/git/GitCli.js
index a18884eb9f..2ee6efd59a 100644
--- a/src/extensions/default/Git/src/git/GitCli.js
+++ b/src/extensions/default/Git/src/git/GitCli.js
@@ -606,10 +606,10 @@ define(function (require, exports) {
} else {
return new Promise(function (resolve, reject) {
// FUTURE: maybe use git commit --file=-
- var fileEntry = FileSystem.getFileForPath(Preferences.get("currentGitRoot") + ".bracketsGitTemp");
+ var fileEntry = FileSystem.getFileForPath(Preferences.get("currentGitRoot") + ".phoenixGitTemp");
jsPromise(FileUtils.writeText(fileEntry, message))
.then(function () {
- args.push("-F", ".bracketsGitTemp");
+ args.push("-F", ".phoenixGitTemp");
return git(args, {progressTracker});
})
.then(function (res) {
diff --git a/src/extensions/default/Git/styles/git-styles.less b/src/extensions/default/Git/styles/git-styles.less
index f061345535..b51edebf16 100644
--- a/src/extensions/default/Git/styles/git-styles.less
+++ b/src/extensions/default/Git/styles/git-styles.less
@@ -3,11 +3,14 @@
// common
@git-moreDarkGrey: #868888;
@git-green: #91CC41;
+@dark-git-green: #78A336;
@git-red: #F74687;
+@dark-git-red: #D03A6F;
@git-red-text: #F74687;
@git-blue-text: #1976DD;
@git-dark-blue-text: #51c0ff;
@git-orange: #E3B551;
+@dark-git-orange: #C29844;
@git-orange-text: #e28200;
// Diff colors ('d' for 'dark', `l` for "light")
@@ -291,41 +294,58 @@
.CodeMirror {
.brackets-git-gutter {
+ pointer-events: auto;
width: @gutterWidth;
- margin-left: 1px;
}
.brackets-git-gutter-added,
.brackets-git-gutter-modified,
.brackets-git-gutter-removed {
+ pointer-events: auto;
background-size: @gutterWidth @gutterWidth;
background-repeat: no-repeat;
- font-size: 1em;
- font-weight: bold;
color: @bc-menu-bg;
+ border-left: 0.4em solid transparent;
+ transition: border-left-width 0.2s ease;
.dark & {
color: @dark-bc-menu-bg;
+ border-left-width: 0.3em;
}
}
.brackets-git-gutter-added {
- background-color: @git-green;
+ border-left-color: @git-green;
+ .dark & {
+ border-left-color: @dark-git-green;
+ }
}
.brackets-git-gutter-modified {
- background-color: @git-orange;
+ border-left-color: @git-orange;
+ &:hover {
+ border-left-width: 2em;
+ }
+ .dark & {
+ border-left-color: @dark-git-orange;
+ }
}
.brackets-git-gutter-removed {
- background-color: @git-red;
+ border-left-color: @git-red;
+ &:hover {
+ border-left-width: 2em;
+ }
+ .dark & {
+ border-left-color: @dark-git-red;
+ }
}
.brackets-git-gutter-deleted-lines {
color: @bc-text;
- background-color: lighten(@git-red, 25%);
+ border-left-color: lighten(@git-red, 25%);
.selectable-text();
.dark & {
- background-color: darken(@git-red, 25%);
+ border-left-color: darken(@dark-git-red, 25%);
color: @dark-bc-text;
}
@@ -338,6 +358,10 @@
height: 1.2em;
line-height: 0.5em;
}
+
+ &:hover {
+ border-left-width: 1em;
+ }
}
}
@@ -814,7 +838,7 @@
// main
-@gutterWidth: 0.65em; // using ems so that it'll be scalable on cmd +/-
+@gutterWidth: 1em; // using ems so that it'll be scalable on cmd +/-
#editor-holder {
.git.spinner {
diff --git a/src/extensions/default/Git/templates/history-viewer.html b/src/extensions/default/Git/templates/history-viewer.html
index 22d9c759c4..3c8fcce5cb 100644
--- a/src/extensions/default/Git/templates/history-viewer.html
+++ b/src/extensions/default/Git/templates/history-viewer.html
@@ -33,7 +33,7 @@
{{commit.subject}}
-
{{{bodyMarkdown}}}
+
{{{bodyMarkdown}}}