material_raingular-d3 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e8468932be38b1f1f2e28820ad8347729fa3e54f
4
- data.tar.gz: 3412543b6e437b00bc5dc162b6125ca15caf0b28
3
+ metadata.gz: b0d6691c0e4cac4a21e949379be35b4daa25c26c
4
+ data.tar.gz: 3292ef3d4130a85df2713d417783fd51bbe3ccb0
5
5
  SHA512:
6
- metadata.gz: 76b78f33ceccfd7f3ecb7c518be8e1175b3f69a0a5ae118b6b42bab1fc05db46c283d37e99be8139e13475744a43bff23c185b3ec6f1efa3713b87693fcd66fe
7
- data.tar.gz: bcd3763519ad084f9c10b1ed20fb487a1976954304906a075f910c7cee04b23f2bf2d0ae8c2e5379e2a443f8541b308ea2599a1ed607a545e86104c2f647808f
6
+ metadata.gz: fe8a3145d09113d256bb647aa4ca33ddbea2e4c11795a0d16c317b86de2920e0b297492a969041714b860add3e0b84f3d12d6dfd0f2c7241816b626163280ebc
7
+ data.tar.gz: c55186743a52ae8aa187d12af31b9e7e7dd66fa81385cdcbeedec7ae457a98900b3423b1bdc6639eea83ae44ce300499b2abd98d63d332ea4243a48d2a8b35c0
@@ -18,4 +18,18 @@ class BarModel extends AngularLinkModel
18
18
  @bar.attr('raw-size',@size(@$scope))
19
19
  @bar.attr('label', @label(@$scope))
20
20
  @changeOptions(@options(@$scope))
21
+ @bar.on('mouseover', @_mouseOver.bind(@))
22
+ .on('mouseout', @_mouseOut.bind(@))
23
+ .on('mousemove', @_mouseMove.bind(@))
24
+ _mouseOver: ->
25
+ d3.select("#tip-#{@parent.indexOf(@bar._groups[0][0])}#{parseFloat(@size(@$scope)).toFixed()}")
26
+ .classed('hidden', false)
27
+ .style('left',(d3.event.pageX + 10) + 'px')
28
+ .style('top', (d3.event.pageY + 10) + 'px')
29
+ _mouseMove: (d, i) ->
30
+ d3.select("#tip-#{@parent.indexOf(@bar._groups[0][0])}#{parseFloat(@size(@$scope)).toFixed()}")
31
+ .style('left',(d3.event.pageX + 10) + 'px')
32
+ .style('top', (d3.event.pageY + 10) + 'px')
33
+ _mouseOut: (d, i) ->
34
+ d3.select("#tip-#{@parent.indexOf(@bar._groups[0][0])}#{parseFloat(@size(@$scope)).toFixed()}").classed('hidden', true)
21
35
  @register(MaterialRaingular.d3.Directives.MrD3Bar)
@@ -28,7 +28,7 @@ class MaterialRaingular.d3.Directives.MrD3BarChartModel extends AngularDirective
28
28
  for bar in @bars().nodes()
29
29
  rect = d3.select(bar)
30
30
  @xDomain[@indexOf(bar)] = rect.attr('label')
31
- height = (rect.attr('raw-size') / @maxValue()) * @width()
31
+ height = (rect.attr('raw-size') / @maxValue()) * @height()
32
32
  rect.attr('y',@height() - height)
33
33
  rect.attr('height',height)
34
34
  @xAxis.domain(@xDomain)
@@ -7,15 +7,16 @@ class MrD3BarChart extends AngularDirective
7
7
  replace: true
8
8
  template: "<svg height='100%' width='100%'><g ng-transclude></g></svg>"
9
9
  ###
10
+ NOTE:: Must use track by in ng-repeat to make function properly
10
11
  Usage Slim syntax
11
12
  mr-d3-bar-chart.test ng-init="dataSet = [{l: 'a',v: 23},{l: 'b',v: 13},{l: 'c',v: 21},{l: 'd',v: 14},{l: 'e',v: 37},{l: 'f',v: 15},{l: 'g',v: 18},{l: 'h',v: 34},{l: 'i',v: 30}]"
12
- mr-d3-bar.thingy ng-repeat="data in dataSet" mr-d3-label="data.l" mr-d3-value="data.v"
13
+ mr-d3-bar.thingy ng-repeat="data in dataSet track by $index" mr-d3-label="data.l" mr-d3-value="data.v"
13
14
  mr-d3-bar mr-d3-label="'this'" mr-d3-value="'200'"
14
15
  mr-d3-y-axis ng-init="domain = [37,0]" mr-d3-label="'Value'" mr-d3-domain='domain'
15
16
 
16
- mr-d3-stacked-bar mr-d3-label="'CA'"
17
- mr-d3-bar ng-repeat="data in [10,4,7]" mr-d3-label="data" mr-d3-value="data"
18
- mr-d3-stacked-bar mr-d3-label="'AZ'"
19
- mr-d3-bar ng-repeat="data in [10,4,7]" mr-d3-label="data" mr-d3-value="data"
17
+ mr-d3-stacked-bar mr-d3-label="'CA'" mr-d3-stacked="true"
18
+ mr-d3-bar ng-repeat="data in [10,4,7] track by $index" mr-d3-label="data" mr-d3-value="data"
19
+ mr-d3-stacked-bar mr-d3-label="'AZ'" mr-d3-stacked="true"
20
+ mr-d3-bar ng-repeat="data in [10,4,7] track by $index" mr-d3-label="data" mr-d3-value="data"
20
21
  mr-d3-x-axis mr-d3-label="'Arbitrary'"
21
22
  ###
@@ -29,7 +29,7 @@ class MaterialRaingular.d3.Directives.MrD3HorizontalBarChartModel extends Angula
29
29
  rect = d3.select(bar)
30
30
  @yDomain[@indexOf(bar)] = rect.attr('label')
31
31
  width = (rect.attr('raw-size') / @maxValue()) * @width()
32
- rect.attr('width',width)
32
+ rect.attr('width',width || 0)
33
33
  @yAxis.domain(angular.copy(@yDomain).reverse())
34
34
  for rect in @bars().nodes()
35
35
  d3.select(rect).attr('height',@yAxis.bandwidth())
@@ -7,15 +7,16 @@ class MrD3HorizontalBarChart extends AngularDirective
7
7
  replace: true
8
8
  template: "<svg height='100%' width='100%'><g ng-transclude></g></svg>"
9
9
  ###
10
+ NOTE:: Must use track by in ng-repeat to make function properly
10
11
  Usage Slim Syntax
11
12
  mr-d3-horizontal-bar-chart.test ng-init="dataSet = [{l: 'a',v: 23},{l: 'b',v: 13},{l: 'c',v: 21},{l: 'd',v: 14},{l: 'e',v: 37},{l: 'f',v: 15},{l: 'g',v: 18},{l: 'h',v: 34},{l: 'i',v: 30}]"
12
- mr-d3-bar.thingy ng-repeat="data in dataSet" mr-d3-label="data.l" mr-d3-value="data.v"
13
+ mr-d3-bar.thingy ng-repeat="data in dataSet track by $index" mr-d3-label="data.l" mr-d3-value="data.v"
13
14
  mr-d3-bar mr-d3-label="'this'" mr-d3-value="'200'"
14
15
  mr-d3-x-axis ng-init="domain = [0,37]" mr-d3-label="'Value'" mr-d3-domain='domain'
15
16
 
16
- mr-d3-stacked-bar mr-d3-label="'CA'"
17
- mr-d3-bar ng-repeat="data in [10,4,7]" mr-d3-label="data" mr-d3-value="data"
18
- mr-d3-stacked-bar mr-d3-label="'AZ'"
19
- mr-d3-bar ng-repeat="data in [10,4,7]" mr-d3-label="data" mr-d3-value="data"
17
+ mr-d3-stacked-bar mr-d3-label="'CA'" mr-d3-stacked="true"
18
+ mr-d3-bar ng-repeat="data in [10,4,7] track by $index" mr-d3-label="data" mr-d3-value="data"
19
+ mr-d3-stacked-bar mr-d3-label="'AZ'" mr-d3-stacked="true"
20
+ mr-d3-bar ng-repeat="data in [10,4,7] track by $index" mr-d3-label="data" mr-d3-value="data"
20
21
  mr-d3-y-axis mr-d3-label="'Arbitrary'"
21
22
  ###
@@ -26,6 +26,8 @@ class MaterialRaingular.d3.Directives.PieChartModel extends AngularDirectiveMode
26
26
  return unless index >= 0
27
27
  @slices.splice(index,1)
28
28
  @values.splice(index,1)
29
+ for slice in @slices
30
+ slice.index = @slices.indexOf(slice)
29
31
  @drawChart()
30
32
  changeData: (slice,value) ->
31
33
  @slices.push(slice) unless @slices.includes(slice)
@@ -26,6 +26,7 @@ class PieSliceModel extends AngularLinkModel
26
26
  .on('mouseout', @_mouseOut.bind(@))
27
27
  .on('mousemove', @_mouseMove.bind(@))
28
28
  .on('click', @_click.bind(@))
29
+ @afterDraw()
29
30
  addText: ->
30
31
  @text = @slice.append('text')
31
32
  .style('text-anchor', 'middle')
@@ -39,6 +40,7 @@ class PieSliceModel extends AngularLinkModel
39
40
  x = centroid[0]
40
41
  y = centroid[1]
41
42
  @text.attr 'transform', "translate(#{x},#{y})"
43
+ .style('display','block')
42
44
  .text @labelFn(@$scope)
43
45
  bbox = @text.node().getBBox()
44
46
  topLeft =
@@ -57,7 +59,7 @@ class PieSliceModel extends AngularLinkModel
57
59
  _pointIsInArc(topRight, @$controller, @index) &&
58
60
  _pointIsInArc(bottomLeft, @$controller, @index) &&
59
61
  _pointIsInArc(bottomRight, @$controller, @index)
60
- @text.attr('display', 'none') unless visible
62
+ @text.style('display', 'none') unless visible
61
63
  removeSlice: -> @$controller.removeSlice(@)
62
64
  afterDraw: ->
63
65
  @adjustText()
@@ -6,9 +6,11 @@ class MaterialRaingular.d3.Directives.MrD3StackedBar extends AngularDirectiveMod
6
6
  @parent ?= @$element.parent().controller('mrD3HorizontalBarChart')
7
7
  @bar = d3.select(@$element[0])
8
8
  @label = @$parse @$element.attr('mr-d3-label')
9
+ @stacked = @$parse @$element.attr('mr-d3-stacked')
9
10
  @texts = []
10
11
  @$scope.$watch @label.bind(@), @adjustBars.bind(@)
11
12
  @$scope.$watch @size.bind(@), @adjustBars.bind(@)
13
+ @$scope.$watch @stacked.bind(@), @adjustBars.bind(@)
12
14
  @$scope.$on '$destroy', @removeText.bind(@)
13
15
  @adjustBars()
14
16
  bars: -> @bar.selectAll('rect')
@@ -16,6 +18,7 @@ class MaterialRaingular.d3.Directives.MrD3StackedBar extends AngularDirectiveMod
16
18
  rawSize: -> (@bars().nodes().map (rect) => d3.select(rect).attr('raw-size')).sum()
17
19
  removeText: ->
18
20
  text.remove() for text in @texts
21
+ @adjustBars()
19
22
  adjustBars: ->
20
23
  @bar.attr('raw-size',@rawSize() || 0)
21
24
  @bar.attr('label', @label(@$scope))
@@ -30,6 +33,9 @@ class MaterialRaingular.d3.Directives.MrD3StackedBar extends AngularDirectiveMod
30
33
  fillRegex = /.*\(([0-9]+\, [0-9]+\, [0-9]+).*\)/
31
34
  @parent.holder.selectAll("text.bar.#{key}").remove()
32
35
  length = @bars().nodes().length
36
+ nonzero = 0
37
+ for rect,i in @bars().nodes()
38
+ nonzero += 1 if d3.select(rect).attr('raw-size') > 0
33
39
  for rect,i in @bars().nodes()
34
40
  bar = d3.select(rect)
35
41
  bar.attr('class',"#{i} bar")
@@ -48,29 +54,48 @@ class MaterialRaingular.d3.Directives.MrD3StackedBar extends AngularDirectiveMod
48
54
  if @direction == 'vertical'
49
55
  ratio = height / @bar.attr('raw-size')
50
56
  barHeight = ratio * bar.attr('raw-size')
51
- usedSpace += barHeight
52
- bar.attr('x',x)
53
- bar.attr('width',width)
54
- bar.attr('y',@parent.height() - usedSpace)
55
- bar.attr('height',barHeight)
57
+ bar.attr('height',barHeight || 0)
58
+ if @stacked(@$scope)
59
+ usedSpace += barHeight || 0
60
+ bar.attr('x',x)
61
+ bar.attr('width',width || 0)
62
+ bar.attr('y',@parent.height() - usedSpace)
63
+ else
64
+ barWidth = width / nonzero
65
+ bar.attr('width', barWidth)
66
+ bar.attr('x', parseFloat(x) + usedSpace)
67
+ bar.attr('y', @parent.height() - barHeight)
68
+ usedSpace += barWidth if barHeight > 0
56
69
  text.attr('x', -parseFloat(bar.attr('y')) - parseFloat(bar.attr('height'))/2)
57
- .attr('y',parseFloat(bar.attr('x')) + parseFloat(bar.attr('width')))
70
+ .attr('y',parseFloat(bar.attr('x')) + parseFloat(bar.attr('width'))/2 + 5)
58
71
  .attr('transform','rotate(-90)')
59
- .style('pointer-events', 'none')
72
+ bbox = text.node().getBBox()
73
+ if (bbox.width > barHeight) || (bbox.height > width || barWidth)
74
+ text.style('display','none')
75
+ else
76
+ text.style('pointer-events', 'none').style('display', 'block')
60
77
  else
61
78
  ratio = width / @bar.attr('raw-size')
62
79
  barWidth = ratio * bar.attr('raw-size')
63
- bar.attr('y',y)
64
- bar.attr('height',height)
65
- bar.attr('x',usedSpace)
66
80
  bar.attr('width',barWidth || 0)
67
- usedSpace += barWidth
68
- text.attr('x', parseFloat(bar.attr('width'))/2 + parseFloat(bar.attr('x')))
81
+ if @stacked(@$scope)
82
+ bar.attr('y',y)
83
+ bar.attr('height',height || 0)
84
+ bar.attr('x',usedSpace)
85
+ usedSpace += barWidth || 0
86
+ else
87
+ barHeight = height / nonzero
88
+ bar.attr('y',parseFloat(y) + usedSpace)
89
+ bar.attr('height',barHeight)
90
+ bar.attr('x',0)
91
+ usedSpace += barHeight if barWidth > 0
92
+ text.attr('x', parseFloat(bar.attr('width' || 0))/2 + parseFloat(bar.attr('x')))
69
93
  .attr('y',parseFloat(bar.attr('y')) + parseFloat(bar.attr('height'))/2 + 5)
70
- if text.node().getBBox().width > barWidth
71
- text.attr('display', 'none')
94
+ bbox = text.node().getBBox()
95
+ if bbox.width > barWidth || (bbox.height > height || barHeight)
96
+ text.style('display', 'none')
72
97
  else
73
- text.style('pointer-events', 'none')
98
+ text.style('pointer-events', 'none').style('display', 'block')
74
99
  _mouseOver: (d,i,parentLabel) ->
75
100
  d3.select("#tip-table-" + parentLabel)
76
101
  .classed('hidden', false)
@@ -1,5 +1,5 @@
1
1
  module MaterialRaingular
2
2
  module D3
3
- VERSION = "0.2.1"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: material_raingular-d3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Moody
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-04-10 00:00:00.000000000 Z
11
+ date: 2017-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler