123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- class Morris.Area extends Morris.Line
- # Initialise
- #
- areaDefaults =
- fillOpacity: 'auto'
- behaveLikeLine: false
- constructor: (options) ->
- return new Morris.Area(options) unless (@ instanceof Morris.Area)
- areaOptions = $.extend {}, areaDefaults, options
- @cumulative = not areaOptions.behaveLikeLine
- if areaOptions.fillOpacity is 'auto'
- areaOptions.fillOpacity = if areaOptions.behaveLikeLine then .8 else 1
- super(areaOptions)
- # calculate series data point coordinates
- #
- # @private
- calcPoints: ->
- for row in @data
- row._x = @transX(row.x)
- total = 0
- row._y = for y in row.y
- if @options.behaveLikeLine
- @transY(y)
- else
- total += (y || 0)
- @transY(total)
- row._ymax = Math.max row._y...
- # draw the data series
- #
- # @private
- drawSeries: ->
- @seriesPoints = []
- if @options.behaveLikeLine
- range = [0..@options.ykeys.length-1]
- else
- range = [@options.ykeys.length-1..0]
- for i in range
- @_drawFillFor i
- @_drawLineFor i
- @_drawPointFor i
- _drawFillFor: (index) ->
- path = @paths[index]
- if path isnt null
- path = path + "L#{@transX(@xmax)},#{@bottom}L#{@transX(@xmin)},#{@bottom}Z"
- @drawFilledPath path, @fillForSeries(index)
- fillForSeries: (i) ->
- color = Raphael.rgb2hsl @colorFor(@data[i], i, 'line')
- Raphael.hsl(
- color.h,
- if @options.behaveLikeLine then color.s * 0.9 else color.s * 0.75,
- Math.min(0.98, if @options.behaveLikeLine then color.l * 1.2 else color.l * 1.25))
- drawFilledPath: (path, fill) ->
- @raphael.path(path)
- .attr('fill', fill)
- .attr('fill-opacity', @options.fillOpacity)
- .attr('stroke', 'none')
|