Skip to content

Instantly share code, notes, and snippets.

@ozrabal
Created July 17, 2017 14:21
Show Gist options
  • Save ozrabal/8c72d336ef8a5254ab90e94780451cf1 to your computer and use it in GitHub Desktop.
Save ozrabal/8c72d336ef8a5254ab90e94780451cf1 to your computer and use it in GitHub Desktop.
function splitTable(maxHeight) {
var selector = null
var brief201 = document.querySelector('.print-padding.brief201')
if (brief201) {
selector = '#brief201section10'
}
if (!selector) {
return
}
var table = document.querySelector(selector)
var header = table.querySelectorAll('thead')
var splitIndices = [0]
var currHeight = 0
var rows = table.querySelector('tbody').children
var wrapper = document.createElement('div')
wrapper.id = '_split_table_wrapper'
rows = [].slice.call(rows)
if (!header.length) {
return
}
maxHeight -= header[0].offsetHeight
for (var i = 0, len = rows.length; i < len; i++) {
currHeight += rows[i].offsetHeight
if (currHeight > maxHeight) {
splitIndices.push(i)
currHeight = rows[i].offsetHeight
}
}
splitIndices.push(undefined)
table.parentNode.replaceChild(wrapper, table)
while (table.firstChild) {
table.removeChild(table.firstChild)
}
for (var j = 0; j < splitIndices.length - 1; j++) {
var newHeader = header[0].cloneNode(true)
var newTable = table.cloneNode(true)
newTable.appendChild(newHeader)
newTable.appendChild(document.createElement('tbody'))
var rowSet = rows.slice(splitIndices[j], splitIndices[j + 1])
for (var k = 0; k < rowSet.length - 1; k++) {
newTable.querySelector('tbody').appendChild(rowSet[k])
}
wrapper.appendChild(newTable)
if (splitIndices[j + 1] !== undefined) {
var pageBreak = document.createElement('div')
pageBreak.style.cssText = 'page-break-after: always; margin:0; padding:0; border: none;'
wrapper.appendChild(pageBreak)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment