material_raingular-d3 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/CODE_OF_CONDUCT.md +74 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +62 -0
  7. data/Rakefile +2 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +8 -0
  10. data/lib/assets/javascripts/material_raingular/d3/.keep +0 -0
  11. data/lib/assets/javascripts/material_raingular/d3/bar/directive.coffee +8 -0
  12. data/lib/assets/javascripts/material_raingular/d3/bar/linkmodel.coffee +15 -0
  13. data/lib/assets/javascripts/material_raingular/d3/bar_chart/controller.coffee +34 -0
  14. data/lib/assets/javascripts/material_raingular/d3/bar_chart/directive.coffee +21 -0
  15. data/lib/assets/javascripts/material_raingular/d3/extensions.coffee +8 -0
  16. data/lib/assets/javascripts/material_raingular/d3/horizontal_bar_chart/controller.coffee +33 -0
  17. data/lib/assets/javascripts/material_raingular/d3/horizontal_bar_chart/directive.coffee +21 -0
  18. data/lib/assets/javascripts/material_raingular/d3/pie_chart/directive.coffee +7 -0
  19. data/lib/assets/javascripts/material_raingular/d3/pie_chart/linkmodel.coffee +39 -0
  20. data/lib/assets/javascripts/material_raingular/d3/ring_chart/directive.coffee +9 -0
  21. data/lib/assets/javascripts/material_raingular/d3/ring_chart/linkmodel.coffee +159 -0
  22. data/lib/assets/javascripts/material_raingular/d3/ring_chart/widget_controller.coffee +14 -0
  23. data/lib/assets/javascripts/material_raingular/d3/ring_chart/widget_directive.coffee +15 -0
  24. data/lib/assets/javascripts/material_raingular/d3/stacked_bar/controller.coffee +54 -0
  25. data/lib/assets/javascripts/material_raingular/d3/stacked_bar/directive.coffee +9 -0
  26. data/lib/assets/javascripts/material_raingular/d3/x_axis/directive.coffee +7 -0
  27. data/lib/assets/javascripts/material_raingular/d3/x_axis/linkmodel.coffee +25 -0
  28. data/lib/assets/javascripts/material_raingular/d3/y_axis/directive.coffee +7 -0
  29. data/lib/assets/javascripts/material_raingular/d3/y_axis/linkmodel.coffee +26 -0
  30. data/lib/assets/javascripts/material_raingular-d3.coffee +6 -0
  31. data/lib/assets/stylesheets/material_raingular/d3/barChart.sass +4 -0
  32. data/lib/assets/stylesheets/material_raingular/d3/ringWidget.css +51 -0
  33. data/lib/assets/stylesheets/material_raingular-d3.sass +2 -0
  34. data/lib/assets/templates/material_raingular/d3/ring_chart/ring.html +7 -0
  35. data/lib/assets/templates/material_raingular/d3/ring_chart/ringWidget.html +1 -0
  36. data/lib/material_raingular/d3/version.rb +5 -0
  37. data/lib/material_raingular/d3.rb +10 -0
  38. data/material_raingular-d3.gemspec +26 -0
  39. data/vendor/assets/javascripts/d3.min.js +8 -0
  40. metadata +124 -0
@@ -0,0 +1,54 @@
1
+ class MaterialRaingular.d3.Directives.MrD3StackedBar extends AngularDirectiveModel
2
+ @inject('$parse','$element')
3
+ initialize: ->
4
+ @parent = @$element.parent().controller('mrD3BarChart')
5
+ @direction = if @parent then 'vertical' else 'horizontal'
6
+ @parent ?= @$element.parent().controller('mrD3HorizontalBarChart')
7
+ @bar = d3.select(@$element[0])
8
+ @label = @$parse @$element.attr('mr-d3-label')
9
+ @$scope.$watch @label.bind(@), @adjustBars.bind(@)
10
+ @$scope.$watch @size.bind(@), @adjustBars.bind(@)
11
+ @adjustBars()
12
+ bars: -> @bar.selectAll('rect')
13
+ size: -> if @direction == 'vertical' then @bar.attr('height') else @bar.attr('width')
14
+ rawSize: -> (@bars().nodes().map (rect) => d3.select(rect).attr('raw-size')).sum()
15
+ adjustBars: ->
16
+ @bar.attr('raw-size',@rawSize() || 0)
17
+ @bar.attr('label', @label(@$scope))
18
+ @parent.adjustBars()
19
+ width = @bar.attr('width')
20
+ height = @bar.attr('height')
21
+ x = @bar.attr('x')
22
+ y = @bar.attr('y')
23
+ usedSpace = 0
24
+ key = @bar.node().$$hashKey?.replace(':','_') #TODO: Not Dependable
25
+ @parent.holder.selectAll("text.bar.#{key}").remove()
26
+ for rect,i in @bars().nodes()
27
+ bar = d3.select(rect)
28
+ bar.attr('class',"#{i} bar")
29
+ bar.attr('fill',"rgba(1,1,1,#{1 - (0.1 * i)})")
30
+ text = @parent.holder.append('text')
31
+ .style("text-anchor","middle")
32
+ .attr('class',"#{i} bar text #{key}")
33
+ .text(bar.attr('label'))
34
+ if @direction == 'vertical'
35
+ ratio = height / @bar.attr('raw-size')
36
+ barHeight = ratio * bar.attr('raw-size')
37
+ usedSpace += barHeight
38
+ bar.attr('x',x)
39
+ bar.attr('width',width)
40
+ bar.attr('y',@parent.height() - usedSpace)
41
+ bar.attr('height',barHeight)
42
+ text.attr('x', -parseFloat(bar.attr('y')) - parseFloat(bar.attr('height'))/2)
43
+ .attr('y',parseFloat(bar.attr('x')) + parseFloat(bar.attr('width')))
44
+ .attr('transform','rotate(-90)')
45
+ else
46
+ ratio = width / @bar.attr('raw-size')
47
+ barWidth = ratio * bar.attr('raw-size')
48
+ bar.attr('y',y)
49
+ bar.attr('height',height)
50
+ bar.attr('x',usedSpace)
51
+ bar.attr('width',barWidth)
52
+ usedSpace += barWidth
53
+ text.attr('x', parseFloat(bar.attr('width'))/2 + parseFloat(bar.attr('x')))
54
+ .attr('y',parseFloat(bar.attr('y')) + parseFloat(bar.attr('height')))
@@ -0,0 +1,9 @@
1
+ # //= require material_raingular/d3/stacked_bar/controller
2
+ class MaterialRaingular.d3.Directives.mrD3StackedBar extends AngularDirective
3
+ @register(MaterialRaingular.d3.app)
4
+ restrict: "E"
5
+ require: ['?^^mrD3HorizontalBarChart','?^^mrD3BarChart']
6
+ controller: MaterialRaingular.d3.Directives.MrD3StackedBar
7
+ transclude: true
8
+ replace: true
9
+ template: "<g class='stacked bar' ng-transclude></rect>"
@@ -0,0 +1,7 @@
1
+ class MaterialRaingular.d3.Directives.MrD3XAxis extends AngularDirective
2
+ @register(MaterialRaingular.d3.app)
3
+ restrict: "E"
4
+ require: ['?^mrD3HorizontalBarChart','?^mrD3BarChart']
5
+ transclude: true
6
+ replace: true
7
+ template: "<g class='x axis'></g>"
@@ -0,0 +1,25 @@
1
+ class XAxisModel extends AngularLinkModel
2
+ @inject('$parse')
3
+ initialize: ->
4
+ @parent = @$controller.compact()[0]
5
+ @options = @parent.options
6
+ @parent._xAxis = @axis = d3.select(@$element[0])
7
+ @axis.attr('transform',"translate(0,#{@parent.height()})")
8
+ @label = @$parse @$attrs.mrD3Label
9
+ @domain = @$parse @$attrs.mrD3Domain
10
+ @$scope.$watchCollection @domain, @adjustAxis.bind(@)
11
+ @$scope.$watch @label, @adjustAxis.bind(@)
12
+ @appendLabel()
13
+ @adjustAxis(true)
14
+ adjustAxis: (newVal,oldVal) ->
15
+ return if newVal == oldVal
16
+ @parent.xAxis.domain(@domain(@$scope)) if @domain(@$scope)
17
+ @axis.call(d3.axisBottom(@parent.xAxis))
18
+ @labelEl.text(@label(@$scope)) if @label(@$scope)
19
+ @parent.adjustBars()
20
+ appendLabel: ->
21
+ @labelEl = @parent.holder.append('text')
22
+ .attr('x', @parent.width()/2)
23
+ .attr('y', @parent.height() + (@options.margins.bottom + 30) / 2)
24
+ .style("text-anchor","middle")
25
+ @register(MaterialRaingular.d3.Directives.MrD3XAxis)
@@ -0,0 +1,7 @@
1
+ class MaterialRaingular.d3.Directives.MrD3YAxis extends AngularDirective
2
+ @register(MaterialRaingular.d3.app)
3
+ restrict: "E"
4
+ require: ['?^mrD3HorizontalBarChart','?^mrD3BarChart']
5
+ transclude: true
6
+ replace: true
7
+ template: "<g class='y axis'></g>"
@@ -0,0 +1,26 @@
1
+ class YAxisModel extends AngularLinkModel
2
+ @inject('$parse')
3
+ initialize: ->
4
+ @parent = @$controller.compact()[0]
5
+ @options = @parent.options
6
+ @parent._yAxis = @axis = d3.select(@$element[0])
7
+ @label = @$parse @$attrs.mrD3Label
8
+ @domain = @$parse @$attrs.mrD3Domain
9
+ @$scope.$watchCollection @domain, @adjustAxis.bind(@)
10
+ @$scope.$watch @label, @adjustAxis.bind(@)
11
+ @appendLabel()
12
+ @adjustAxis(true)
13
+ adjustAxis: (newVal,oldVal) ->
14
+ return if newVal == oldVal
15
+ @parent.yAxis.domain(@domain(@$scope)) if @domain(@$scope)
16
+ @axis.call(d3.axisLeft(@parent.yAxis))
17
+ @labelEl.text(@label(@$scope)) if @label(@$scope)
18
+ @parent.adjustBars()
19
+ appendLabel: ->
20
+ @labelEl = @parent.holder.append('text')
21
+ .attr("transform", "rotate(-90)")
22
+ .attr("y", - (@options.margins.left + 30)/2)
23
+ .attr("x",0 - (@parent.height() / 2))
24
+ .attr("dy", "1em")
25
+ .style("text-anchor", "middle")
26
+ @register(MaterialRaingular.d3.Directives.MrD3YAxis)
@@ -0,0 +1,6 @@
1
+ # //= require material_raingular
2
+ # //= require d3.min
3
+ # //= require_self
4
+ # //= require_tree ./
5
+ MaterialRaingular.d3 = {Directives: {}}
6
+ MaterialRaingular.d3.app = angular.module('MrD3', [])
@@ -0,0 +1,4 @@
1
+ mr-d3-horizontal-bar-chart, mr-d3-bar-chart
2
+ width: 100%
3
+ height: 100%
4
+ display: block
@@ -0,0 +1,51 @@
1
+ /******************************************************************************
2
+ Styling for RingWidgetModule
3
+ ******************************************************************************/
4
+ mr-d3-ring-widget {
5
+ text-align: center;
6
+ }
7
+
8
+ mr-d3-ring {
9
+ display: block;
10
+ }
11
+
12
+ mr-d3-ring svg text {
13
+ font-family: sans-serif;
14
+ font-size: 12px;
15
+ fill: white;
16
+ }
17
+
18
+ mr-d3-ring svg text.center {
19
+ font-family: sans-serif;
20
+ font-size: 60px;
21
+ fill: white;
22
+ stroke: black;
23
+ stroke-width: 2px;
24
+ stroke-linecap: round;
25
+ stroke-linejoin: round;
26
+ text-anchor: middle;
27
+ -webkit-touch-callout: none; /* iOS Safari */
28
+ -webkit-user-select: none; /* Chrome/Safari/Opera */
29
+ -khtml-user-select: none; /* Konqueror */
30
+ -moz-user-select: none; /* Firefox */
31
+ -ms-user-select: none; /* Internet Explorer/Edge */
32
+ user-select: none;
33
+ }
34
+
35
+ /*.mr-d3-ring-scale {
36
+ display: inline-block;
37
+ width: 200px;
38
+ height: 200px;
39
+ }*/
40
+
41
+ mr-d3-ring svg g.arc {
42
+ opacity: 0.2;
43
+ }
44
+
45
+ mr-d3-ring svg g.arc.selected {
46
+ opacity: 1;
47
+ }
48
+
49
+ mr-d3-ring svg g.arc:hover {
50
+ opacity: 1;
51
+ }
@@ -0,0 +1,2 @@
1
+ @import 'material_raingular/d3/ringWidget'
2
+ @import 'material_raingular/d3/barChart'
@@ -0,0 +1,7 @@
1
+ <!-- Note that height and width were defined in here using Angular
2
+ interpolation but apparently there is a browser problem with this method
3
+ concerning the SVG element. These attributes are now set using D3.js directly
4
+ -->
5
+ <div class="mr-d3-ring-scale">
6
+ <svg viewBox="0 0 200 200"></svg>
7
+ </div>
@@ -0,0 +1 @@
1
+ <div class="mr-d3-ring-container" ng-transclude></div>
@@ -0,0 +1,5 @@
1
+ module MaterialRaingular
2
+ module D3
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ require "material_raingular/d3/version"
2
+
3
+ module MaterialRaingular
4
+ module D3
5
+ module Rails
6
+ class Engine < ::Rails::Engine
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'material_raingular/d3/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "material_raingular-d3"
8
+ spec.version = MaterialRaingular::D3::VERSION
9
+ spec.authors = ["Chris Moody"]
10
+ spec.email = ["cmoody@transcon.com"]
11
+
12
+ spec.summary = %q{D3 integration for material raingular}
13
+ spec.homepage = "https://github.com/cmoodyEIT/material_raingular-d3"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match(%r{^(test|spec|features)/})
18
+ end
19
+ spec.bindir = "exe"
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.13"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_runtime_dependency "material_raingular", "~> 0.6"
26
+ end