[# TODO(jrobbins): move this into compiled javascript. ]
<script type="text/javascript" nonce="[nonce]">
runOnLoad(function() {
  var numsGenState = {table_base_id: 'nums_table_'};
  var srcGenState = {table_base_id: 'src_table_'};
  var alignerRunning = false;
  var startOver = false;

  function setLineNumberHeights() {
    if (alignerRunning) {
      startOver = true;
      return;
    }
    numsGenState.chunk_id = 0;
    numsGenState.table = document.getElementById('nums_table_0');
    numsGenState.row_num = 0;

    if (!numsGenState.table) {
      return;  // Silently exit if no file is present.
    }

    srcGenState.chunk_id = 0;
    srcGenState.table = document.getElementById('src_table_0');
    srcGenState.row_num = 0;

    alignerRunning = true;
    continueToSetLineNumberHeights();
  }

  function rowGenerator(genState) {
    if (genState.row_num < genState.table.rows.length) {
      var currentRow = genState.table.rows[[]genState.row_num];
      genState.row_num++;
      return currentRow;
    }

    var newTable = document.getElementById(
        genState.table_base_id + (genState.chunk_id + 1));
    if (newTable) {
      genState.chunk_id++;
      genState.row_num = 0;
      genState.table = newTable;
      return genState.table.rows[[]0];
    }

    return null;
  }

  var MAX_ROWS_PER_PASS = 1000;

  function continueToSetLineNumberHeights() {
    var rowsInThisPass = 0;
    var numRow = 1;
    var srcRow = 1;

    while (numRow && srcRow && rowsInThisPass < MAX_ROWS_PER_PASS) {
      numRow = rowGenerator(numsGenState);
      srcRow = rowGenerator(srcGenState);
      rowsInThisPass++;

      if (numRow && srcRow) {
        if (numRow.offsetHeight != srcRow.offsetHeight) {
          numRow.firstChild.style.height = srcRow.offsetHeight + 'px';
        }
      }
    }

    if (rowsInThisPass >= MAX_ROWS_PER_PASS) {
      setTimeout(continueToSetLineNumberHeights, 10);
    } else {
      alignerRunning = false;
      if (startOver) {
        startOver = false;
        setTimeout(setLineNumberHeights, 500);
      }
    }

  }

  function initLineNumberHeights() {
    // Do 2 complete passes, because there can be races
    // between this code and prettify.
    startOver = true;
    setTimeout(setLineNumberHeights, 250);
    window.addEventListener('resize', setLineNumberHeights);
  }
  initLineNumberHeights();
});
</script>
