6 <& /util/import_javascript.mas, classes => [ 'd3.d3v4Min.js', 'd3pie_min.js' ] &>
8 <& /page/page_title.mas, title => 'Database Stats' &>
10 <&| /page/info_section.mas, title => "Data categories" &>
14 <span id="trial_types_div"></span>
18 <span id="trials_by_breeding_programs_div"></span>
23 <span id="traits_div"></span>
27 <span id="stocks_div"></span>
36 <&| /page/info_section.mas, title => "Activity - past 52 weeks" &>
38 <svg class="bargraph" width="800" height="200"></svg>
42 <&| /page/info_section.mas, title => "Breeding Program Summaries", collapsible=>1 &>
44 % foreach (@$breeding_programs){
48 <h3>Breeding Program: <% $_->[1] %></h3>
50 <&| /page/info_section.mas, title => "Trials" , collapsible=>1 &>
51 <& /breeders_toolbox/program/trials.mas, program_id => $_->[0] &>
54 <&| /page/info_section.mas, title => "Traits" , collapsible=>1 &>
55 <& /breeders_toolbox/program/traits.mas, program_id => $_->[0], collapse_phenotypes_section => 0 &>
66 url: '/ajax/dbstats/trial_types',
67 error: function(response) { alert('An error occurred' + JSON.stringify(response)); },
68 success: function(response) {
69 //alert('success' + JSON.stringify(response));
70 var types_pie = new d3pie('trial_types_div', response);
76 url: '/ajax/dbstats/trials_by_breeding_program',
77 error: function(response) { alert('An error occurred' + JSON.stringify(response)); },
78 success: function(response) {
79 //alert('success' + JSON.stringify(response));
80 var types_pie = new d3pie('trials_by_breeding_programs_div', response);
85 url: '/ajax/dbstats/traits',
86 error: function(response) { alert('An error occurred' + JSON.stringify(response)); },
87 success: function(response) {
88 //alert('success' + JSON.stringify(response));
89 var types_pie = new d3pie('traits_div', response);
94 url: '/ajax/dbstats/stocks',
95 error: function(response) { alert('An error occurred' + JSON.stringify(response)); },
96 success: function(response) {
97 var types_pie = new d3pie('stocks_div', response);
104 url : '/ajax/dbstats/activity',
105 error: function(r) { alert('An error occurred.'); },
106 success: function(d) {
107 d.frequency = +d.frequency;
112 function bargraph(data) {
113 var svg = d3.select(".bargraph"),
114 margin = {top: 20, right: 20, bottom: 30, left: 40},
115 width = +svg.attr("width") - margin.left - margin.right,
116 height = +svg.attr("height") - margin.top - margin.bottom;
118 var x = d3.scaleBand().rangeRound([0, width]).padding(0.1),
119 y = d3.scaleLinear().rangeRound([height, 0]);
121 var g = svg.append("g")
122 .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
124 x.domain(data.map(function(d) { return d.letter; }));
126 y.domain([0, d3.max(data, function(d) { return d.frequency; })]);
129 .attr("class", "axis axis--x")
130 .attr("transform", "translate(0," + height + ")")
131 .call(d3.axisBottom(x));
134 .attr("class", "axis axis--y")
135 .call(d3.axisLeft(y).ticks(10, ""))
137 .attr("transform", "rotate(-90)")
139 .attr("dy", "0.71em")
140 .attr("text-anchor", "end")
145 .enter().append("rect")
146 .attr("class", "bar")
147 .attr("x", function(d) { return x(d.letter); })
148 .attr("y", function(d) { return y(d.frequency); })
149 .attr("width", x.bandwidth())
150 .attr("height", function(d) { return height - y(d.frequency); })
151 .attr("fill", "#AAAAEE");