Guest User

GitHub Status Page Charts

a guest
May 10th, 2014
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function() {
  2.  
  3.   $(function() {
  4.     var render, renderGraphs;
  5.     render = function(data, canvas) {
  6.       var add_gradient, area, bad_at, dateEnd, dateStart, daySpan, format, gradient, h, line, lines, main_path, max, min, numdays, padb, padl, padr, padt, subs, ticks, timeFormat, transition, units, vis, w, warn_at, x, xAxis, y, yAxis, yax, _ref;
  7.       w = canvas.width();
  8.       h = canvas.height();
  9.       units = canvas.attr('data-unit');
  10.       add_gradient = canvas.attr('data-warn-at') != null;
  11.       if (!data.length) {
  12.         return;
  13.       }
  14.       format = function(d) {
  15.         return d + units;
  16.       };
  17.       timeFormat = function(d) {
  18.         if (d < 60) {
  19.           return "" + d + "m";
  20.         } else {
  21.           return "" + (d / 60) + "h";
  22.         }
  23.       };
  24.       data = data.map(function(d, i) {
  25.         return [new Date(d[0] * 1000), d[1]];
  26.       }).sort(function(a, b) {
  27.         return d3.ascending(a[0], b[0]);
  28.       });
  29.       numdays = data.length;
  30.       _ref = [6, 50, 2, 16], padt = _ref[0], padl = _ref[1], padr = _ref[2], padb = _ref[3];
  31.       max = d3.max(data, function(d) {
  32.         return d[1];
  33.       });
  34.       min = d3.min(data, function(d) {
  35.         return d[1];
  36.       });
  37.       if (units === '%') {
  38.         if (max === min) {
  39.           max = 100;
  40.         }
  41.         if (!(min < 99)) {
  42.           min = 99;
  43.         }
  44.       }
  45.       dateStart = data[0][0];
  46.       dateEnd = data[data.length - 1][0];
  47.       daySpan = Math.round((dateEnd - dateStart) / (1000 * 60 * 60 * 24));
  48.       x = d3.time.scale().domain([dateStart, dateEnd]).range([0, w - padl - padr]);
  49.       y = d3.scale.linear().domain([min, max]).range([h - padb - padt, 0]);
  50.       if (daySpan === 1) {
  51.         ticks = 3;
  52.         subs = 6;
  53.       } else if (daySpan === 7) {
  54.         ticks = 4;
  55.         subs = 1;
  56.       } else {
  57.         ticks = 4;
  58.         subs = 6;
  59.       }
  60.       xAxis = d3.svg.axis().scale(x).tickSize(5).tickSubdivide(subs).ticks(ticks).orient("bottom").tickFormat(function(d) {
  61.         if (daySpan <= 1) {
  62.           return d3.time.format('%H:%M')(d).replace(/\s/, '').replace(/^0/, '');
  63.         } else {
  64.           return d3.time.format('%m/%d')(d).replace(/\s/, '').replace(/^0/, '').replace(/\/0/, '/');
  65.         }
  66.       });
  67.       yAxis = d3.svg.axis().scale(y).orient("left").tickPadding(5).tickSize(w).ticks(2).tickFormat(format);
  68.       vis = d3.select(canvas.get(0)).data(data).append('svg').attr('width', w).attr('height', h + padt + padb).attr('class', 'viz').append('svg:g').attr('transform', "translate(" + padl + "," + padt + ")");
  69.       if (add_gradient) {
  70.         warn_at = parseFloat(canvas.attr('data-warn-at'));
  71.         bad_at = parseFloat(canvas.attr('data-bad-at'));
  72.         transition = warn_at - (warn_at - bad_at) / 2;
  73.         gradient = vis.append("svg:defs").append("svg:linearGradient").attr("id", "gradient").attr("x1", "0%").attr("y1", "0%").attr("x2", "0%").attr("y2", "100%").attr("spreadMethod", "pad");
  74.         gradient.append("svg:stop").attr("offset", 100 * y(warn_at) / h + '%').attr("stop-color", "#396").attr("stop-opacity", 1);
  75.         gradient.append("svg:stop").attr("offset", 100 * y(transition) / h + '%').attr("stop-color", "#F29D50").attr("stop-opacity", 1);
  76.         gradient.append("svg:stop").attr("offset", 100 * y(bad_at) / h + '%').attr("stop-color", "#c00").attr("stop-opacity", 1);
  77.       }
  78.       vis.append("g").attr("class", "x axis").attr('transform', "translate(0, " + (h - padt - padb) + ")").call(xAxis);
  79.       area = d3.svg.area().x(function(d) {
  80.         return x(d[0]);
  81.       }).y0(function(d) {
  82.         return y(d[1]);
  83.       }).y1(function(d) {
  84.         return y(0);
  85.       }).interpolate('basis');
  86.       line = d3.svg.line().x(function(d) {
  87.         return x(d[0]);
  88.       }).y(function(d) {
  89.         return y(d[1]);
  90.       }).interpolate('basis');
  91.       yax = vis.append("g").attr("transform", "translate(" + w + ", 0)").attr("class", "y axis");
  92.       yax.call(yAxis).selectAll('.y.axis g').classed('zero', function(d, i) {
  93.         return d === 0;
  94.       }).classed('add', function(d, i) {
  95.         return d > 0;
  96.       }).classed('del', function(d, i) {
  97.         return d < 0;
  98.       });
  99.       lines = vis.selectAll('path.cumulative').data([data]).enter();
  100.       main_path = lines.append('path').attr('class', 'path').attr('d', line);
  101.       if (add_gradient) {
  102.         if (d3.min(data, function(d) {
  103.           return d[1];
  104.         }) === 100) {
  105.           return main_path.style("stroke", "#396");
  106.         } else {
  107.           return main_path.style("stroke", "url(#gradient)");
  108.         }
  109.       }
  110.     };
  111.     renderGraphs = function() {
  112.       return $('.graph-container').html('').each(function() {
  113.         var $canvas, data;
  114.         $canvas = $(this);
  115.         data = JSON.parse($canvas.attr('data-string') || '[]');
  116.         return render(data, $canvas);
  117.       });
  118.     };
  119.     renderGraphs();
  120.     $('#graph_data').on('pjax:end', function() {
  121.       return renderGraphs();
  122.     });
  123.     $(window).on('orientationchange', function() {
  124.       return renderGraphs();
  125.     });
  126.     return $(window).on('resize', function() {
  127.       return renderGraphs();
  128.     });
  129.   });
Advertisement
Add Comment
Please, Sign In to add comment