121 lines
3.7 KiB
CoffeeScript
121 lines
3.7 KiB
CoffeeScript
describe 'NVD3', ->
|
|
describe 'Legend', ->
|
|
sampleData1 = [
|
|
{"values":[{"x":1,"y":2},{"x":3,"y":4},{"x":5,"y":6}],"key":"key 1"}
|
|
{"values":[{"x":7,"y":8},{"x":9,"y":10},{"x":11,"y":12}],"key":"key 2"}
|
|
{"values":[{"x":13,"y":14},{"x":15,"y":16},{"x":17,"y":18}],"key":"key 3"}
|
|
]
|
|
|
|
sampleData2 = [
|
|
key: 'series 1'
|
|
,
|
|
key: 'series 2'
|
|
,
|
|
key: 'series 3'
|
|
,
|
|
key: 'series 4'
|
|
]
|
|
|
|
legendOptions =
|
|
margin:
|
|
top: 0
|
|
right: 0
|
|
bottom: 0
|
|
left: 0
|
|
width: 100
|
|
height: 100
|
|
key: (d) -> d.key
|
|
color: nv.utils.defaultColor()
|
|
align: true
|
|
rightAlign: false
|
|
updateState: true
|
|
radioButtonMode: false
|
|
|
|
builder = null
|
|
beforeEach ->
|
|
builder = new ChartBuilder nv.models.legend()
|
|
builder.build legendOptions, sampleData1
|
|
|
|
legend = builder.model
|
|
for opt, val of legendOptions
|
|
legend[opt](val)
|
|
|
|
afterEach ->
|
|
builder.teardown()
|
|
|
|
it 'api check', ->
|
|
legend = builder.model
|
|
for opt, val of legendOptions
|
|
should.exist legend[opt](), "#{opt} can be called"
|
|
|
|
it 'exists', ->
|
|
legend = builder.$('.nvd3.nv-legend')
|
|
should.exist legend[0], '.nvd3.nv-legend'
|
|
|
|
describe 'appends items correctly', ->
|
|
for item, i in sampleData1
|
|
do (item, i) ->
|
|
key = item.key
|
|
it "'#{key}' text, position and structure", ->
|
|
|
|
nvSeries = builder.$(".nvd3.nv-legend .nv-series")[i]
|
|
transformCalculated = "translate(0,#{i*20+5})"
|
|
transform = nvSeries.getAttribute 'transform'
|
|
transform.should.be.equal transformCalculated
|
|
|
|
nvLegendSymbol = nvSeries.querySelector('.nv-legend-symbol')
|
|
nvLegendText = nvSeries.querySelector('.nv-legend-text')
|
|
|
|
should.exist nvLegendSymbol
|
|
should.exist nvLegendText
|
|
nvLegendText.textContent.should.be.equal key
|
|
|
|
describe 'clicking and double clicking', ->
|
|
it 'clicking one legend turns it off', ->
|
|
legendItems = builder.$ '.nv-legend .nv-series'
|
|
legendItems.length.should.equal 3
|
|
|
|
clickFn = d3.select(legendItems[0]).on 'click'
|
|
clickFn(sampleData1[0])
|
|
sampleData1[0].disabled.should.equal true
|
|
clickFn(sampleData1[1])
|
|
sampleData1[1].disabled.should.equal true
|
|
|
|
clickFn(sampleData1[2])
|
|
sampleData1[0].disabled.should.equal false
|
|
sampleData1[1].disabled.should.equal false
|
|
sampleData1[2].disabled.should.equal false
|
|
|
|
it 'double clicking legend keeps only one on', ->
|
|
legendItems = builder.$ '.nv-legend .nv-series'
|
|
|
|
clickFn = d3.select(legendItems[0]).on 'dblclick'
|
|
clickFn(sampleData1[0])
|
|
sampleData1[0].disabled.should.equal false
|
|
|
|
sampleData1[1].disabled.should.equal true
|
|
sampleData1[2].disabled.should.equal true
|
|
|
|
it 'updating legend data does not break double click (issue 784)', ->
|
|
builder.updateData sampleData2
|
|
|
|
legendItems = builder.$ '.nv-legend .nv-series'
|
|
|
|
clickFn = d3.select(legendItems[0]).on 'dblclick'
|
|
clickFn(sampleData2[0])
|
|
sampleData2[0].disabled.should.equal false
|
|
|
|
sampleData2[1].disabled.should.equal true
|
|
sampleData2[2].disabled.should.equal true
|
|
sampleData2[3].disabled.should.equal true
|
|
|
|
it 'legend padding', ->
|
|
builder = new ChartBuilder nv.models.legend()
|
|
builder.build {padding: 40}, sampleData1
|
|
|
|
legendItems = builder.$ '.nv-legend .nv-series'
|
|
xSpacing = [0, 80, 160]
|
|
for legend,i in legendItems
|
|
transform = legend.getAttribute 'transform'
|
|
transform.should.equal "translate(#{xSpacing[i]},5)"
|