@@ -8,6 +8,7 @@ define(function (require, exports) {
88 CommandManager = brackets . getModule ( "command/CommandManager" ) ,
99 DocumentManager = brackets . getModule ( "document/DocumentManager" ) ,
1010 EditorManager = brackets . getModule ( "editor/EditorManager" ) ,
11+ ScrollTrackMarkers = brackets . getModule ( "search/ScrollTrackMarkers" ) ,
1112 MainViewManager = brackets . getModule ( "view/MainViewManager" ) ,
1213 ErrorHandler = require ( "src/ErrorHandler" ) ,
1314 Events = require ( "src/Events" ) ,
@@ -16,6 +17,8 @@ define(function (require, exports) {
1617 Preferences = require ( "./Preferences" ) ,
1718 Strings = brackets . getModule ( "strings" ) ;
1819
20+ const GIT_SCROLL_MARKS = "git_marks" ;
21+
1922 var gitAvailable = false ,
2023 gutterName = "brackets-git-gutter" ,
2124 editorsWithGutters = [ ] ,
@@ -125,7 +128,7 @@ define(function (require, exports) {
125128 }
126129 }
127130
128- function showGutters ( editor , _results ) {
131+ function _showGutters ( editor , _results ) {
129132 prepareGutter ( editor ) ;
130133
131134 var cm = editor . _codeMirror ;
@@ -137,8 +140,8 @@ define(function (require, exports) {
137140 cm . clearGutter ( gutterName ) ;
138141 cm . gitGutters . forEach ( function ( obj ) {
139142 var $marker = $ ( "<div>" )
140- . addClass ( gutterName + "-" + obj . type + " gitline-" + ( obj . line + 1 ) )
141- . html ( " " ) ;
143+ . addClass ( gutterName + "-" + obj . type + " gitline-" + ( obj . line + 1 ) )
144+ . html ( " " ) ;
142145 cm . setGutterMarker ( obj . line , gutterName , $marker [ 0 ] ) ;
143146 } ) ;
144147 _cursorActivity ( null , editor ) ;
@@ -214,6 +217,48 @@ define(function (require, exports) {
214217 return doc && doc . _masterEditor ;
215218 }
216219
220+ function hasVerticalScrollbar ( editor ) {
221+ const cm = editor . _codeMirror ;
222+ const scrollEl = cm . getScrollerElement ( ) ;
223+ return scrollEl . scrollHeight > scrollEl . clientHeight ;
224+ }
225+
226+
227+ function _markScrollbar ( editor , allChanges ) {
228+ ScrollTrackMarkers . clear ( editor , GIT_SCROLL_MARKS ) ;
229+ if ( ! hasVerticalScrollbar ( editor ) ) {
230+ return ;
231+ }
232+ const added = allChanges
233+ . filter ( item => item . type === "added" )
234+ . map ( ( { line } ) => ( { line, ch : 0 } ) ) ;
235+
236+ const removed = allChanges
237+ . filter ( item => item . type === "removed" )
238+ . map ( ( { line } ) => ( { line, ch : 0 } ) ) ;
239+
240+ const modified = allChanges
241+ . filter ( item => item . type === "modified" )
242+ . map ( ( { line } ) => ( { line, ch : 0 } ) ) ;
243+
244+ const trackers = [
245+ { arr : added , css : "brackets-git-added" } ,
246+ { arr : removed , css : "brackets-git-removed" } ,
247+ { arr : modified , css : "brackets-git-modified" }
248+ ] ;
249+ for ( let tracker of trackers ) {
250+ if ( ! tracker . arr . length ) {
251+ continue ;
252+ }
253+ let posArray = tracker . arr . map ( item => ( { line : item . line , ch : 0 } ) ) ;
254+ ScrollTrackMarkers . addTickmarks ( editor , posArray , {
255+ trackStyle : ScrollTrackMarkers . TRACK_STYLES . ON_LEFT ,
256+ name : GIT_SCROLL_MARKS ,
257+ cssColorClass : tracker . css
258+ } ) ;
259+ }
260+ }
261+
217262 function processDiffResults ( editor , diff ) {
218263 var added = [ ] ,
219264 removed = [ ] ,
@@ -239,9 +284,9 @@ define(function (require, exports) {
239284 type : "removed" ,
240285 line : lineRemovedFrom ,
241286 content : str . split ( "\n" )
242- . filter ( function ( l ) { return l . indexOf ( "-" ) === 0 ; } )
243- . map ( function ( l ) { return l . substring ( 1 ) ; } )
244- . join ( "\n" )
287+ . filter ( function ( l ) { return l . indexOf ( "-" ) === 0 ; } )
288+ . map ( function ( l ) { return l . substring ( 1 ) ; } )
289+ . join ( "\n" )
245290 } ) ;
246291 }
247292
@@ -279,7 +324,9 @@ define(function (require, exports) {
279324 o . line = o . line + 1 ;
280325 } ) ;
281326
282- showGutters ( editor , [ ] . concat ( added , removed , modified ) ) ;
327+ const allChanges = [ ] . concat ( added , removed , modified ) ;
328+ _showGutters ( editor , allChanges ) ;
329+ _markScrollbar ( editor , allChanges ) ;
283330 }
284331
285332 function refresh ( ) {
0 commit comments