codecombat/app/views/play/level/tome/problem.coffee

48 lines
1.5 KiB
CoffeeScript
Raw Normal View History

2014-01-03 13:32:13 -05:00
ProblemAlertView = require './problem_alert_view'
Range = ace.require("ace/range").Range
module.exports = class Problem
annotation: null
alertView: null
markerRange: null
constructor: (@aether, @aetherProblem, @ace, withAlert=false, withRange=false) ->
@buildAnnotation()
@buildAlertView() if withAlert
@buildMarkerRange() if withRange
destroy: ->
@alertView?.$el.remove()
@alertView?.destroy()
@removeMarkerRange()
buildAnnotation: ->
return unless @aetherProblem.ranges
text = @aetherProblem.message.replace /^Line \d+: /, ''
start = @aetherProblem.ranges[0][0]
@annotation =
row: start[0],
column: start[1],
raw: text,
text: text,
type: @aetherProblem.level ? "error"
buildAlertView: ->
@alertView = new ProblemAlertView problem: @
@alertView.render()
$(@ace.container).append @alertView.el
buildMarkerRange: ->
return unless @aetherProblem.ranges
[start, end] = @aetherProblem.ranges[0]
clazz = "problem-marker-#{@aetherProblem.level}"
@markerRange = new Range(start[0], start[1], end[0], end[1])
@markerRange.start = @ace.getSession().getDocument().createAnchor @markerRange.start
@markerRange.end = @ace.getSession().getDocument().createAnchor @markerRange.end
@markerRange.id = @ace.getSession().addMarker @markerRange, clazz, "text"
removeMarkerRange: ->
return unless @markerRange
@ace.getSession().removeMarker @markerRange.id
@markerRange.start.detach()
@markerRange.end.detach()