Quellcode durchsuchen

Refactor Ace directive to have a single events bridge.

Paulo Reis vor 10 Jahren
Ursprung
Commit
f170fd4b83

+ 1 - 2
services/web/app/views/project/editor/editor.jade

@@ -40,8 +40,7 @@ div.full-size(
 			on-ctrl-enter="recompileViaKey",
 			syntax-validation="settings.syntaxValidation",
 			review-panel="reviewPanel",
-			on-scroll="scrollBindings.onAceScroll",
-			scroll-events="scrollBindings.reviewPanelEvents",
+			events-bridge="reviewPanelEventsBridge"
 			track-changes-enabled="trackChangesFeatureFlag",
 			track-new-changes= "reviewPanel.trackNewChanges",
 			changes-tracker="reviewPanel.changesTracker",

+ 11 - 6
services/web/public/coffee/ide/editor/directives/aceEditor.coffee

@@ -53,8 +53,7 @@ define [
 				onCtrlEnter: "="
 				syntaxValidation: "="
 				reviewPanel: "="
-				onScroll: "="
-				scrollEvents: "="
+				eventsBridge: "="
 				trackNewChanges: "="
 				trackChangesEnabled: "="
 				changesTracker: "="
@@ -236,12 +235,16 @@ define [
 					scope.$emit "#{scope.name}:change"
 				
 				onScroll = (scrollTop) ->
-					return if !scope.onScroll?
+					return if !scope.eventsBridge?
 					height = editor.renderer.layerConfig.maxHeight
-					scope.onScroll(scrollTop, height)
+					scope.eventsBridge.emit "aceScroll", scrollTop, height
+
+				onScrollbarVisibilityChanged = (event, vRenderer) ->
+					return if !scope.eventsBridge?
+					scope.eventsBridge.emit "aceScrollbarVisibilityChanged", vRenderer.scrollBarV.isVisible, vRenderer.scrollBarV.width
 					
-				if scope.scrollEvents?
-					scope.scrollEvents.on "scroll", (position) ->
+				if scope.eventsBridge?
+					scope.eventsBridge.on "externalScroll", (position) ->
 						editor.getSession().setScrollTop(position)
 
 				attachToAce = (sharejs_doc) ->
@@ -296,6 +299,8 @@ define [
 					session.setAnnotations scope.annotations
 					
 					session.on "changeScrollTop", onScroll
+					editor.renderer.on "scrollbarVisibilityChanged", onScrollbarVisibilityChanged
+
 					setTimeout () ->
 						# Let any listeners init themselves
 						onScroll(editor.renderer.getScrollTop())

+ 3 - 1
services/web/public/coffee/ide/review-panel/controllers/ReviewPanelController.coffee

@@ -19,10 +19,12 @@ define [
 			adding: false
 			content: ""
 
-		# Used to communicate between Ace and reviewPanelSorted directive
+		# DEPRECATED Used to communicate between Ace and reviewPanelSorted directive 
 		$scope.scrollBindings =
 			reviewPanelEvents: new EventEmitter()
 
+		$scope.reviewPanelEventsBridge = new EventEmitter()
+
 		changesTrackers = {}
 
 		$scope.$watch "editor.open_doc_id", (open_doc_id) ->

+ 8 - 4
services/web/public/coffee/ide/review-panel/directives/reviewPanelSorted.coffee

@@ -112,6 +112,9 @@ define [
 				ignoreNextPanelEvent = false
 				ignoreNextAceEvent = false
 			
+				handleScrollbarVisibilityChanged = (isVisible, scrollbarWidth) ->
+					console.log isVisible, scrollbarWidth
+
 				scrollPanel = (scrollTop, height) ->
 					if ignoreNextAceEvent
 						ignoreNextAceEvent = false
@@ -126,7 +129,8 @@ define [
 						ignoreNextPanelEvent = false
 					else
 						ignoreNextAceEvent = true
-						scope.scrollBindings.reviewPanelEvents.emit "scroll", scrollTop
-
-				scope.scrollBindings.onAceScroll = scrollPanel
-		}
+						scope.reviewPanelEventsBridge.emit "externalScroll", scrollTop
+				
+				scope.reviewPanelEventsBridge.on "aceScroll", scrollPanel
+				scope.reviewPanelEventsBridge.on "aceScrollbarVisibilityChanged", handleScrollbarVisibilityChanged
+		}