Show labels for tracked changes above and below

This commit is contained in:
James Allen 2014-07-11 16:17:59 +01:00
parent 0a2d93011f
commit 76415ae02b
4 changed files with 103 additions and 10 deletions

View file

@ -98,7 +98,8 @@ div#trackChanges(ng-show="ui.view == 'track-changes'")
text="trackChanges.diff.text",
highlights="trackChanges.diff.highlights",
read-only="true",
resize-on="layout:main:resize"
resize-on="layout:main:resize",
navigate-highlights="true"
)
.diff-deleted.text-centered(
ng-show="trackChanges.diff.deleted"

View file

@ -27,6 +27,7 @@ define [
readOnly: "="
gotoLine: "="
annotations: "="
navigateHighlights: "="
}
link: (scope, element, attrs) ->
# Don't freak out if we're already in an apply callback
@ -112,7 +113,7 @@ define [
scope.$watch "annotations", (annotations) ->
if annotations?
session = editor.getSession()
session = editor.getSession()
session.setAnnotations annotations
scope.$watch "readOnly", (value) ->
@ -124,11 +125,11 @@ define [
session.setMode("ace/mode/latex")
session.setAnnotations scope.annotations
emitChange = () ->
emitChange = () ->
scope.$emit "#{scope.name}:change"
attachToAce = (sharejs_doc) ->
lines = sharejs_doc.getSnapshot().split("\n")
lines = sharejs_doc.getSnapshot().split("\n")
editor.setSession(new EditSession(lines))
resetSession()
session = editor.getSession()
@ -166,7 +167,7 @@ define [
>Dismiss</a>
</div>
<div class="ace-editor-body"></div>
<div
<div
id="spellCheckMenu"
class="dropdown context-menu"
ng-show="spellingMenu.open"
@ -197,6 +198,27 @@ define [
>
{{ annotationLabel.text }}
</div>
<a
href
class="highlights-before-label btn btn-info btn-xs"
ng-show="updateLabels.highlightsBefore > 0"
ng-click="gotoHighlightAbove()"
>
<i class="fa fa-fw fa-arrow-up"></i>
{{ updateLabels.highlightsBefore }} more update{{ updateLabels.highlightsBefore > 1 && "" || "s" }} above
</a>
<a
href
class="highlights-after-label btn btn-info btn-xs"
ng-show="updateLabels.highlightsAfter > 0"
ng-click="gotoHighlightBelow()"
>
<i class="fa fa-fw fa-arrow-down"></i>
{{ updateLabels.highlightsAfter }} more update{{ updateLabels.highlightsAfter > 1 && "" || "s" }} below
</a>
</div>
"""
}

View file

@ -18,6 +18,11 @@ define [
text: ""
}
@$scope.updateLabels = {
updatesAbove: 0
updatesBelow: 0
}
@$scope.$watch "highlights", (value) =>
@redrawAnnotations()
@ -29,9 +34,30 @@ define [
e.position = position
@showAnnotationLabels(position)
@editor.on "changeSession", () =>
onChangeScrollTop = () =>
@updateShowMoreLabels()
@editor.getSession().on "changeScrollTop", onChangeScrollTop
@$scope.$watch "text", () =>
if @$scope.navigateHighlights
setTimeout () =>
@scrollToFirstHighlight()
, 0
@editor.on "changeSession", (e) =>
e.oldSession?.off "changeScrollTop", onChangeScrollTop
e.session.on "changeScrollTop", onChangeScrollTop
@redrawAnnotations()
@$scope.gotoHighlightBelow = () =>
return if !@firstHiddenHighlightAfter?
@editor.scrollToLine(@firstHiddenHighlightAfter.end.row, true, false)
@$scope.gotoHighlightAbove = () =>
return if !@lastHiddenHighlightBefore?
@editor.scrollToLine(@lastHiddenHighlightBefore.start.row, true, false)
redrawAnnotations: () ->
@_clearMarkers()
@_clearLabels()
@ -71,6 +97,8 @@ define [
}
@_drawStrikeThrough(annotation, colorScheme)
@updateShowMoreLabels()
showAnnotationLabels: (position) ->
labelToShow = null
for label in @labels or []
@ -127,6 +155,39 @@ define [
text: labelToShow.text
}
updateShowMoreLabels: () ->
return if !@$scope.navigateHighlights
setTimeout () =>
firstRow = @editor.getFirstVisibleRow()
lastRow = @editor.getLastVisibleRow()
highlightsBefore = 0
highlightsAfter = 0
@lastHiddenHighlightBefore = null
@firstHiddenHighlightAfter = null
for annotation in @$scope.highlights or []
range = annotation.highlight or annotation.strikeThrough
continue if !range?
if range.start.row < firstRow
highlightsBefore += 1
@lastHiddenHighlightBefore = range
if range.end.row > lastRow
highlightsAfter += 1
@firstHiddenHighlightAfter ||= range
@$scope.$apply =>
@$scope.updateLabels = {
highlightsBefore: highlightsBefore
highlightsAfter: highlightsAfter
}
, 100
scrollToFirstHighlight: () ->
for annotation in @$scope.highlights or []
range = annotation.highlight or annotation.strikeThrough
continue if !range?
@editor.scrollToLine(range.start.row, true, false)
break
_clearMarkers: () ->
for marker_id in @markerIds
@editor.getSession().removeMarker(marker_id)
@ -177,9 +238,9 @@ define [
new Range(
annotation.strikeThrough.start.row, annotation.strikeThrough.start.column,
annotation.strikeThrough.end.row, annotation.strikeThrough.end.column + 1
),
),
"annotation strike-through-foreground",
true,
true,
"""
height: #{Math.round(lineHeight/2) + 2}px;
border-bottom: 2px solid #{colorScheme.strikeThroughForegroundColor};
@ -223,4 +284,4 @@ define [
r = parseInt(r, 10)
g = parseInt(g, 10)
b = parseInt(b, 10)
return r + g + b < 3 * 128
return r + g + b < 3 * 128

View file

@ -153,6 +153,16 @@
position: absolute;
z-index: 2;
}
.highlights-before-label {
position: absolute;
top: @line-height-computed / 2;
right: @line-height-computed;
}
.highlights-after-label {
position: absolute;
bottom: @line-height-computed / 2;
right: @line-height-computed;
}
}
.ui-layout-resizer {
@ -198,4 +208,3 @@
position: fixed;
z-index: 100;
}