| Index: appengine/monorail/templates/framework/file-content-js.ezt
|
| diff --git a/appengine/monorail/templates/framework/file-content-js.ezt b/appengine/monorail/templates/framework/file-content-js.ezt
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..72e882ee87d0c9cca937df327a29ff30f94f3b5e
|
| --- /dev/null
|
| +++ b/appengine/monorail/templates/framework/file-content-js.ezt
|
| @@ -0,0 +1,89 @@
|
| +[# 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>
|
|
|