Tucker McKnight <tmcknight@instructure.com> | Sun Mar 15 2026
[WIP] broken, hacky attempt to get better diffs. Need to rethink this, just commiting it to remember what I changed. Need to create newlines in one side of the diff if the other side is exclusively adding lines. So maybe change the Diff to check lines instead of words, and then do words (or characters?) per-line once the line diff has been created.
64 65 66 67 68
m('div', {class: "row"}, [
m('div', {class: "col-auto border-end"},
m('pre', {class: "mb-0"}, lineNumbers(hunk.beforeText).map((lineNumber) => {
return (lineNumber + hunk.lineNumber - 1).toString()
}).join('\n'))
),64 65 66 67 68 69
m('div', {class: "row"}, [
m('div', {class: "col-auto border-end"},
m('pre', {class: "mb-0"}, lineNumbers(hunk.beforeText).map((lineNumber) => {
if (lineNumber === null) { return '' }
return (lineNumber + hunk.lineNumber - 1).toString()
}).join('\n'))
),76 77 78 79 80 81
m('span', {class: 'font-monospace text-secondary'}, 'After'),
m('div', {class: "row"},
m('div', {class: "col-auto border-end"},
m('pre', {class: "mb-0"}, lineNumbers(hunk.beforeText).map((lineNumber) => {
return (lineNumber + hunk.lineNumber - 1).toString()
}).join('\n'))
),76 77 78 79 80 81 82
m('span', {class: 'font-monospace text-secondary'}, 'After'),
m('div', {class: "row"},
m('div', {class: "col-auto border-end"},
m('pre', {class: "mb-0"}, lineNumbers(hunk.afterText).map((lineNumber) => {
if (lineNumber === null) { return '' }
return (lineNumber + hunk.lineNumber - 1).toString()
}).join('\n'))
),135 136 137 138 139 140 141 142 143 144
})
eleventyConfig.addFilter("lineNumbers", (code: string) => {
code.split('')
const numLines = code.split('\n').length
const lineNumbers = []
for (let i = 1; i <= numLines; i++) {
lineNumbers.push(i)
}
return lineNumbers135 136 137 138 139 140 141 142 143 144 145 146
})
eleventyConfig.addFilter("lineNumbers", (code: string) => {
const lines = code.split('\n')
console.log(lines)
const numLines = lines.length
const lineNumbers = []
for (let i = 0; i < numLines - 1; i++) {
const lineNum = lines[i].includes('\u{2063}') ? null : i
lineNumbers.push(lineNum)
}
return lineNumbers