CSNW/d3.compose

View on GitHub
integration/compose.html

Summary

Maintainability
Test Coverage
<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>d3.compose - compose</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" type="text/css" href="../build/d3.compose.css">
  <style>
    #charts {width: 600px;}
    path {stroke: black;}
  </style>
</head>
<body>
  <div id="charts"></div>

  <script src="../node_modules/d3/d3.js"></script>
  <script src="../build/d3.compose.js"></script>
  <script type="text/javascript">
    var charts = d3.select('#charts');
    var id = 1;
    function getSelection() {
      return charts.append('div')
        .attr('id', 'chart-' + (id++))
        .attr('class', 'chart');
    }

    // A

    var Custom = d3c.Overlay.extend({
      render: function() {
        this.base.text('Howdy!');
      }
    });
    var xScale = d3.scale.linear();
    var yScale = d3.scale.linear();

    var containerA = new d3c.Compose(getSelection(), {
      responsive: true,
      width: 1200
    });
    containerA.draw(
      d3c.layered(
         [
          d3c.title({text: 'Title', margin: {top: 30, bottom: 30}}),
          [
            d3c.axisTitle({text: 'y-axis', rotation: -90}),
            d3c.axis({position: 'left', scale: yScale}),
            d3c.layered([d3c.lines({data: [
              {x: 0, y: 0},
              {x: 0.5, y: 0.5},
              {x: 1, y: 1}
            ], xScale: xScale, yScale: yScale})])
          ],
          d3c.axis({position: 'bottom', scale: xScale}),
          d3c.axisTitle({text: 'x-axis'})
        ],
        {type: Custom, props: {left: 100, top: 100}}
      )
    );

    // B

    var containerB = new d3c.Compose(getSelection())
    var count = 0;
    var intId = setInterval(drawB, 1000);
    drawB();

    function drawB() {
      if (count++ >= 5) {
        clearInterval(intId);
        return;
      }

      containerB.draw(d3c.layered(
        d3c.title({text: 'Title ' + count})
      ))
    }
  </script>
</body>
</html>