material_raingular-d3 0.1.1 → 0.2.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 +4 -4
- data/lib/assets/javascripts/material_raingular/d3/pie_chart/controller.coffee +5 -0
- data/lib/assets/javascripts/material_raingular/d3/pie_slice/linkmodel.coffee +34 -6
- data/lib/assets/javascripts/material_raingular/d3/stacked_bar/controller.coffee +30 -1
- data/lib/material_raingular/d3/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a4d591e5ddc3b5ce40657d769db5dd414cc94614
|
4
|
+
data.tar.gz: 7ff1d5cb8e6102c46c17508441c75e5b8ce73ddc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ad9ab358094a62c455344ca3057e7fb90aaed576e14e2f2bbb42e3b4b1902b48d45d9fba21ce8d51d8ea0be5de1c053bc5d33e12e2adcdd4caffb4fb08cd174
|
7
|
+
data.tar.gz: e4c91e62dc89717dc1f60bb7425bc69a434d87fd7223773c1659dc7bbfa223d79675c49f9f952e8b5696ca10259ae9bc6924e58fbe6b3d7b5d95e7b23aca0e7f
|
@@ -21,6 +21,11 @@ class MaterialRaingular.d3.Directives.PieChartModel extends AngularDirectiveMode
|
|
21
21
|
addSlice: (slice) ->
|
22
22
|
@slices.push(slice) unless @slices.includes(slice)
|
23
23
|
return @slices.index(slice)
|
24
|
+
removeSlice: (slice) ->
|
25
|
+
index = @slices.index(slice)
|
26
|
+
@slices.splice(index,1)
|
27
|
+
@values.splice(index,1)
|
28
|
+
@drawChart()
|
24
29
|
changeData: (slice,value) ->
|
25
30
|
@slices.push(slice) unless @slices.includes(slice)
|
26
31
|
index = @slices.indexOf(slice)
|
@@ -4,7 +4,7 @@ class PieSliceModel extends AngularLinkModel
|
|
4
4
|
@options = @$parse(@$attrs.mrD3Options || '{}')
|
5
5
|
@slice = d3.select(@$element[0])
|
6
6
|
@index = @$controller.addSlice(@)
|
7
|
-
@path = @slice.append('path').attr(
|
7
|
+
@path = @slice.append('path').attr("id", 'arc-' + @index).attr('stroke', '#FFF')
|
8
8
|
@transition = d3.transition().duration(300).ease(d3.easeLinear)
|
9
9
|
@labelFn = @$parse @$attrs.mrD3Label
|
10
10
|
@valueFn = @$parse @$attrs.mrD3Value
|
@@ -13,10 +13,10 @@ class PieSliceModel extends AngularLinkModel
|
|
13
13
|
@$scope.$watch @valueFn.bind(@), @changeValue.bind(@)
|
14
14
|
@$scope.$watch @labelFn.bind(@), @adjustText.bind(@)
|
15
15
|
@$scope.$watch @options.bind(@), @changeOptions.bind(@), true
|
16
|
+
@$scope.$on '$destroy', @removeSlice.bind(@)
|
16
17
|
changeOptions: (newVal) ->
|
17
18
|
return unless newVal
|
18
19
|
@path.attr 'fill', newVal.fill || d3.interpolateCool Math.random(@index)
|
19
|
-
|
20
20
|
changeValue: (newVal,oldVal) ->
|
21
21
|
return unless newVal
|
22
22
|
@index = @$controller.changeData(@,newVal)
|
@@ -40,17 +40,36 @@ class PieSliceModel extends AngularLinkModel
|
|
40
40
|
y = centroid[1]
|
41
41
|
@text.attr 'transform', "translate(#{x},#{y})"
|
42
42
|
.text @labelFn(@$scope)
|
43
|
+
bbox = @text.node().getBBox()
|
44
|
+
topLeft =
|
45
|
+
x : x + bbox.x,
|
46
|
+
y : y + bbox.y
|
47
|
+
topRight =
|
48
|
+
x : topLeft.x + bbox.width,
|
49
|
+
y : topLeft.y
|
50
|
+
bottomLeft =
|
51
|
+
x : topLeft.x,
|
52
|
+
y : topLeft.y + bbox.height
|
53
|
+
bottomRight =
|
54
|
+
x : topLeft.x + bbox.width,
|
55
|
+
y : topLeft.y + bbox.height
|
56
|
+
visible = _pointIsInArc(topLeft, @$controller, @index) &&
|
57
|
+
_pointIsInArc(topRight, @$controller, @index) &&
|
58
|
+
_pointIsInArc(bottomLeft, @$controller, @index) &&
|
59
|
+
_pointIsInArc(bottomRight, @$controller, @index)
|
60
|
+
@text.attr('display', 'none') unless visible
|
61
|
+
removeSlice: -> @$controller.removeSlice(@)
|
43
62
|
afterDraw: ->
|
44
63
|
@adjustText()
|
45
64
|
_mouseOver: ->
|
46
65
|
d3.select("#tip-#{@index}#{@valueFn(@$scope).toFixed()}")
|
47
66
|
.classed('hidden', false)
|
48
|
-
.style('left',
|
49
|
-
.style('top', (
|
67
|
+
.style('left',(d3.event.pageX + 10) + 'px')
|
68
|
+
.style('top', (d3.event.pageY + 10) + 'px')
|
50
69
|
_mouseMove: (d, i) ->
|
51
70
|
d3.select("#tip-#{@index}#{@valueFn(@$scope).toFixed()}")
|
52
|
-
.style('left',
|
53
|
-
.style('top', (
|
71
|
+
.style('left',(d3.event.pageX + 10) + 'px')
|
72
|
+
.style('top', (d3.event.pageY + 10) + 'px')
|
54
73
|
_mouseOut: (d, i) ->
|
55
74
|
d3.select("#tip-#{@index}#{@valueFn(@$scope).toFixed()}").classed('hidden', true)
|
56
75
|
_click: ->
|
@@ -63,5 +82,14 @@ class PieSliceModel extends AngularLinkModel
|
|
63
82
|
x = 10 * Math.cos (Math.PI / 2) - theta
|
64
83
|
y = -10 * Math.sin (Math.PI / 2) - theta
|
65
84
|
@path.transition(@transition).attr('transform',"translate(#{x},#{y}) scale(1.25,1.25)")
|
85
|
+
_pointIsInArc = (pt, controller, index) ->
|
86
|
+
r1 = 0
|
87
|
+
r2 = controller.chartHeight / 2
|
88
|
+
theta1 = controller.arcs[index].startAngle
|
89
|
+
theta2 = controller.arcs[index].endAngle
|
90
|
+
dist = pt.x * pt.x + pt.y * pt.y
|
91
|
+
angle = Math.atan2(pt.x, -pt.y)
|
92
|
+
angle = if angle < 0 then angle + Math.PI * 2 else angle
|
93
|
+
r1 * r1 <= dist && dist <= r2 * r2 && theta1 <= angle && angle <= theta2
|
66
94
|
|
67
95
|
@register(MaterialRaingular.d3.Directives.MrD3PieSlice)
|
@@ -6,12 +6,16 @@ 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
|
+
@texts = []
|
9
10
|
@$scope.$watch @label.bind(@), @adjustBars.bind(@)
|
10
11
|
@$scope.$watch @size.bind(@), @adjustBars.bind(@)
|
12
|
+
@$scope.$on '$destroy', @removeText.bind(@)
|
11
13
|
@adjustBars()
|
12
14
|
bars: -> @bar.selectAll('rect')
|
13
15
|
size: -> if @direction == 'vertical' then @bar.attr('height') else @bar.attr('width')
|
14
16
|
rawSize: -> (@bars().nodes().map (rect) => d3.select(rect).attr('raw-size')).sum()
|
17
|
+
removeText: ->
|
18
|
+
text.remove() for text in @texts
|
15
19
|
adjustBars: ->
|
16
20
|
@bar.attr('raw-size',@rawSize() || 0)
|
17
21
|
@bar.attr('label', @label(@$scope))
|
@@ -31,10 +35,16 @@ class MaterialRaingular.d3.Directives.MrD3StackedBar extends AngularDirectiveMod
|
|
31
35
|
bar.attr('class',"#{i} bar")
|
32
36
|
fill = fill || bar.attr('fill')?.match(fillRegex)?[1] || '0,0,0'
|
33
37
|
bar.attr('fill',"rgba(#{fill},#{1 - i/length})")
|
38
|
+
parentLabel = rect.parentNode.attributes['label'].value.slice(-2)
|
39
|
+
bar.on('mouseover', @_mouseOver.bind(null,rect,i,parentLabel))
|
40
|
+
.on('mouseout', @_mouseOut.bind(null,rect,i,parentLabel))
|
41
|
+
.on('mousemove', @_mouseMove.bind(null,rect,i,parentLabel))
|
34
42
|
text = @parent.holder.append('text')
|
35
43
|
.style("text-anchor","middle")
|
44
|
+
.style("fill", "#FFF")
|
36
45
|
.attr('class',"#{i} bar text #{key}")
|
37
46
|
.text(bar.attr('label'))
|
47
|
+
@texts.push(text)
|
38
48
|
if @direction == 'vertical'
|
39
49
|
ratio = height / @bar.attr('raw-size')
|
40
50
|
barHeight = ratio * bar.attr('raw-size')
|
@@ -46,6 +56,7 @@ class MaterialRaingular.d3.Directives.MrD3StackedBar extends AngularDirectiveMod
|
|
46
56
|
text.attr('x', -parseFloat(bar.attr('y')) - parseFloat(bar.attr('height'))/2)
|
47
57
|
.attr('y',parseFloat(bar.attr('x')) + parseFloat(bar.attr('width')))
|
48
58
|
.attr('transform','rotate(-90)')
|
59
|
+
.style('pointer-events', 'none')
|
49
60
|
else
|
50
61
|
ratio = width / @bar.attr('raw-size')
|
51
62
|
barWidth = ratio * bar.attr('raw-size')
|
@@ -55,4 +66,22 @@ class MaterialRaingular.d3.Directives.MrD3StackedBar extends AngularDirectiveMod
|
|
55
66
|
bar.attr('width',barWidth)
|
56
67
|
usedSpace += barWidth
|
57
68
|
text.attr('x', parseFloat(bar.attr('width'))/2 + parseFloat(bar.attr('x')))
|
58
|
-
.attr('y',parseFloat(bar.attr('y')) + parseFloat(bar.attr('height')))
|
69
|
+
.attr('y',parseFloat(bar.attr('y')) + parseFloat(bar.attr('height'))/2 + 5)
|
70
|
+
if text.node().getBBox().width > barWidth
|
71
|
+
text.attr('display', 'none')
|
72
|
+
else
|
73
|
+
text.style('pointer-events', 'none')
|
74
|
+
_mouseOver: (d,i,parentLabel) ->
|
75
|
+
d3.select("#tip-table-" + parentLabel)
|
76
|
+
.classed('hidden', false)
|
77
|
+
.style('left', (d3.event.pageX + 10) + 'px')
|
78
|
+
.style('top', (d3.event.pageY + 10) + 'px')
|
79
|
+
.select("#tip-" + i).classed('hidden', false)
|
80
|
+
_mouseMove: (d,i,parentLabel) ->
|
81
|
+
d3.select("#tip-table-" + parentLabel)
|
82
|
+
.style('left', (d3.event.pageX + 10) + 'px')
|
83
|
+
.style('top', (d3.event.pageY + 10) + 'px')
|
84
|
+
_mouseOut: (d,i,parentLabel) ->
|
85
|
+
d3.select("#tip-table-" + parentLabel)
|
86
|
+
.classed('hidden', true)
|
87
|
+
.select("#tip-" + i).classed('hidden', true)
|
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.
|
4
|
+
version: 0.2.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-
|
11
|
+
date: 2017-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|