Implement print view for ballots+votes report
This commit is contained in:
parent
8a3361f20d
commit
baffdce9e3
|
@ -256,7 +256,7 @@ async function printResult() {
|
||||||
divResultLogs2.innerHTML = divResultLogs1.innerHTML;
|
divResultLogs2.innerHTML = divResultLogs1.innerHTML;
|
||||||
elContainer.appendChild(divResultLogs2);
|
elContainer.appendChild(divResultLogs2);
|
||||||
|
|
||||||
// Parse table, accounting for rowspan
|
// Parse table, accounting for colspan/rowspan
|
||||||
let elTrs1 = document.querySelector('#result').rows;
|
let elTrs1 = document.querySelector('#result').rows;
|
||||||
let rows = [];
|
let rows = [];
|
||||||
for (let elTr1 of elTrs1) {
|
for (let elTr1 of elTrs1) {
|
||||||
|
@ -267,6 +267,15 @@ async function printResult() {
|
||||||
let elTd1 = elTrs1[r].cells[c];
|
let elTd1 = elTrs1[r].cells[c];
|
||||||
rows[r].push(elTd1);
|
rows[r].push(elTd1);
|
||||||
|
|
||||||
|
let colspan = elTd1.getAttribute('colspan');
|
||||||
|
if (colspan !== null) {
|
||||||
|
colspan = parseInt(colspan);
|
||||||
|
// Add ghost cells
|
||||||
|
for (let i = 1; i < colspan; i++) {
|
||||||
|
rows[r].push(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let rowspan = elTd1.getAttribute('rowspan');
|
let rowspan = elTd1.getAttribute('rowspan');
|
||||||
// NB: Only works for rowspan in first column
|
// NB: Only works for rowspan in first column
|
||||||
if (rowspan !== null && c == 0) {
|
if (rowspan !== null && c == 0) {
|
||||||
|
@ -289,6 +298,7 @@ async function printResult() {
|
||||||
elTd2.innerHTML = elTd1.innerHTML;
|
elTd2.innerHTML = elTd1.innerHTML;
|
||||||
elTd2.className = elTd1.className;
|
elTd2.className = elTd1.className;
|
||||||
if (elTd1.getAttribute('rowspan') !== null) { elTd2.setAttribute('rowspan', elTd1.getAttribute('rowspan')); }
|
if (elTd1.getAttribute('rowspan') !== null) { elTd2.setAttribute('rowspan', elTd1.getAttribute('rowspan')); }
|
||||||
|
if (elTd1.getAttribute('colspan') !== null) { elTd2.setAttribute('colspan', elTd1.getAttribute('colspan')); }
|
||||||
if (elTd1.getAttribute('style') !== null) { elTd2.setAttribute('style', elTd1.getAttribute('style')); }
|
if (elTd1.getAttribute('style') !== null) { elTd2.setAttribute('style', elTd1.getAttribute('style')); }
|
||||||
elTrs2[r].appendChild(elTd2);
|
elTrs2[r].appendChild(elTd2);
|
||||||
tdsAdded.push(elTd2);
|
tdsAdded.push(elTd2);
|
||||||
|
@ -299,6 +309,8 @@ async function printResult() {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function copyTableColumns(startCol) {
|
async function copyTableColumns(startCol) {
|
||||||
|
let modelRow = document.getElementById('selReport').value === 'ballots_votes' ? rows[4] : rows[3];
|
||||||
|
|
||||||
// Add table
|
// Add table
|
||||||
let elTable2 = wprint.document.createElement('table');
|
let elTable2 = wprint.document.createElement('table');
|
||||||
elTable2.className = 'result';
|
elTable2.className = 'result';
|
||||||
|
@ -320,30 +332,52 @@ async function printResult() {
|
||||||
copyColumn(0, elTrs2);
|
copyColumn(0, elTrs2);
|
||||||
|
|
||||||
// How many columns to copy?
|
// How many columns to copy?
|
||||||
let totalWidth = rows[0][0].clientWidth;
|
let totalWidth = modelRow[0].clientWidth;
|
||||||
let endCol;
|
let endCol;
|
||||||
for (endCol = startCol; endCol < rows[0].length; endCol++) {
|
for (endCol = startCol; endCol < modelRow.length; ) {
|
||||||
if (totalWidth + rows[0][endCol].clientWidth > printableWidth) {
|
// Check first column
|
||||||
|
if (totalWidth + modelRow[endCol].clientWidth > printableWidth) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
totalWidth += rows[0][endCol].clientWidth;
|
|
||||||
|
if (document.getElementById('selReport').value === 'ballots_votes' && endCol + 1 < modelRow.length) {
|
||||||
|
// Check second column
|
||||||
|
if (totalWidth + modelRow[endCol].clientWidth + modelRow[endCol + 1].clientWidth > printableWidth) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ok!
|
||||||
|
totalWidth += modelRow[endCol].clientWidth;
|
||||||
|
endCol++;
|
||||||
|
|
||||||
|
if (document.getElementById('selReport').value === 'ballots_votes' && endCol < modelRow.length) {
|
||||||
|
// Second column
|
||||||
|
totalWidth += modelRow[endCol].clientWidth;
|
||||||
|
endCol++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy columns
|
// Copy columns
|
||||||
|
let stages = [];
|
||||||
for (let c = startCol; c < endCol; c++) {
|
for (let c = startCol; c < endCol; c++) {
|
||||||
|
if (rows[0][c] !== null && rows[0][c].querySelector('a')) {
|
||||||
|
// Track stage headings copied
|
||||||
|
stages.push(parseInt(rows[0][c].querySelector('a').innerHTML));
|
||||||
|
}
|
||||||
copyColumn(c, elTrs2);
|
copyColumn(c, elTrs2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy stage comments
|
// Copy stage comments
|
||||||
elContainer.insertAdjacentHTML('beforeend', '<p>Stage comments:</p>');
|
elContainer.insertAdjacentHTML('beforeend', '<p>Stage comments:</p>');
|
||||||
let olStageComments2 = wprint.document.createElement('ol');
|
let olStageComments2 = wprint.document.createElement('ol');
|
||||||
olStageComments2.start = startCol;
|
olStageComments2.start = stages[0];
|
||||||
elContainer.append(olStageComments2);
|
elContainer.append(olStageComments2);
|
||||||
for (let c = startCol; c < endCol && c < rows[0].length - 1; c++) {
|
for (let stage of stages) {
|
||||||
olStageComments2.insertAdjacentHTML('beforeend', olStageComments.children[c-1].outerHTML);
|
olStageComments2.insertAdjacentHTML('beforeend', olStageComments.children[stage-1].outerHTML);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (endCol < rows[0].length) {
|
if (endCol < modelRow.length) {
|
||||||
// Start new table if columns remain
|
// Start new table if columns remain
|
||||||
copyTableColumns(endCol);
|
copyTableColumns(endCol);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue