material_raingular-d3 0.1.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.
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