Refactor Ace directive to have a single events bridge.

This commit is contained in:
Paulo Reis
2016-11-17 10:40:08 +00:00
parent a87ed88a53
commit f170fd4b83
4 changed files with 23 additions and 13 deletions
@@ -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",
@@ -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())
@@ -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) ->
@@ -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
}