code: function squarify(node) {
      var children = node.children;
      if (children && children.length) {
        var rect = pad(node),
            row = [],
            remaining = children.slice(), // copy-on-write
            child,
            best = Infinity, // the best row score so far
            score, // the current row score
            u = Math.min(rect.dx, rect.dy), // initial orientation
            n;
        scale(remaining, rect.dx * rect.dy / node.value);
        row.area = 0;
        while ((n = remaining.length) > 0) {
          row.push(child = remaining[n - 1]);
          row.area += child.area;
          if ((score = worst(row, u)) <= best) { // continue with this orientation
            remaining.pop();
            best = score;
          } else { // abort, and try a different orientation
            row.area -= row.pop().area;
            position(row, u, rect, false);
            u = Math.min(rect.dx, rect.dy);
            row.length = row.area = 0;
            best = Infinity;
          }
        }
        if (row.length) {
          position(row, u, rect, true);
          row.length = row.area = 0;
        }
        children.forEach(squarify);
      }
    }
docs: Recursively arranges the specified node's children into squarified rows.