123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- var Widgetschart = function() {
-
-
-
- var _sparklinesWidget = function(element, chartType, qty, chartHeight, interpolation, duration, interval, color) {
- if (typeof d3 == 'undefined') {
- console.warn('Warning - d3.min.js is not loaded.');
- return;
- }
-
- if(element) {
-
-
-
- var d3Container = d3.select(element),
- margin = {top: 0, right: 0, bottom: 0, left: 0},
- width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right,
- height = chartHeight - margin.top - margin.bottom;
-
- var data = [];
- for (var i=0; i < qty; i++) {
- data.push(Math.floor(Math.random() * qty) + 5);
- }
-
-
-
- var x = d3.scale.linear().range([0, width]);
-
- var y = d3.scale.linear().range([height - 5, 5]);
-
-
-
- x.domain([1, qty - 3]);
-
- y.domain([0, qty]);
-
-
-
-
- var line = d3.svg.line()
- .interpolate(interpolation)
- .x(function(d, i) { return x(i); })
- .y(function(d, i) { return y(d); });
-
- var area = d3.svg.area()
- .interpolate(interpolation)
- .x(function(d,i) {
- return x(i);
- })
- .y0(height)
- .y1(function(d) {
- return y(d);
- });
-
-
-
- var container = d3Container.append('svg');
-
- var svg = container
- .attr('width', width + margin.left + margin.right)
- .attr('height', height + margin.top + margin.bottom)
- .append("g")
- .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
-
-
-
- var clip = svg.append("defs")
- .append("clipPath")
- .attr('id', function(d, i) { return "load-clip-" + element.substring(1); });
-
- var clips = clip.append("rect")
- .attr('class', 'load-clip')
- .attr("width", 0)
- .attr("height", height);
-
- clips
- .transition()
- .duration(1000)
- .ease('linear')
- .attr("width", width);
-
-
-
-
- var path = svg.append("g")
- .attr("clip-path", function(d, i) { return "url(#load-clip-" + element.substring(1) + ")"; })
- .append("path")
- .datum(data)
- .attr("transform", "translate(" + x(0) + ",0)");
-
- if(chartType == "area") {
- path.attr("d", area).attr('class', 'd3-area').style("fill", color);
- }
- else {
- path.attr("d", line).attr("class", "d3-line d3-line-medium").style('stroke', color);
- }
-
- path
- .style('opacity', 0)
- .transition()
- .duration(500)
- .style('opacity', 1);
-
-
- setInterval(function() {
-
- data.push(Math.floor(Math.random() * qty) + 5);
-
- data.shift();
- update();
- }, interval);
-
-
- function update() {
-
- path
- .attr("transform", null)
- .transition()
- .duration(duration)
- .ease("linear")
- .attr("transform", "translate(" + x(0) + ",0)");
-
- if(chartType == "area") {
- path.attr("d", area).attr('class', 'd3-area').style("fill", color);
- }
- else {
- path.attr("d", line).attr("class", "d3-line d3-line-medium").style('stroke', color);
- }
- }
-
-
-
- $(window).on('resize', resizeSparklines);
-
- $(document).on('click', '.sidebar-control', resizeSparklines);
-
-
-
-
-
- function resizeSparklines() {
-
- width = d3Container.node().getBoundingClientRect().width - margin.left - margin.right;
-
-
-
- container.attr("width", width + margin.left + margin.right);
-
- svg.attr("width", width + margin.left + margin.right);
-
- x.range([0, width]);
-
-
-
- clips.attr("width", width);
-
- svg.select(".d3-line").attr("d", line);
-
- svg.select(".d3-area").attr("d", area);
- }
- }
- };
-
-
-
-
- return {
- init: function() {
- _sparklinesWidget("#sparklines_color", "line", 30, 200, "basis", 750, 2000, "rgba(255,255,255,0.75)");
-
- }
- }
- }();
- document.addEventListener('DOMContentLoaded', function() {
- Widgetschart.init();
- });
|