67 lines
1.7 KiB
CoffeeScript
67 lines
1.7 KiB
CoffeeScript
|
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')
|