https://chrome.google.com/webstore/d...gnaaelnpjljija (or something similar)
Nothing fancy.
It doesn't add line numbers to edits or new posts, only existing posts on page load.
Edit to your liking.
PHP Code:
var lineHeight = 0;
var listAlreadyDone = [];
var listSpoilers = [];
function CalculateLineHeight(element)
{
var temp = element.cloneNode(false);
temp.innerHTML = 'a<br>b';
element.parentNode.insertBefore(temp, element);
var retVal = temp.offsetHeight / 2.0;
temp.parentNode.removeChild(temp);
return retVal;
}
function CreateLineCountBeforeElement(element)
{
if ( listAlreadyDone.includes(element) )
return;
if ( ! lineHeight )
lineHeight = CalculateLineHeight(element);
if ( ! lineHeight )
return;
var numLines = Math.ceil(element.offsetHeight / lineHeight);
if ( ! numLines )
return;
var tempDiv = document.createElement('div');
for ( var i = 1 ; i <= numLines ; i++ )
tempDiv.innerHTML += i + ' <br>';
tempDiv.className = 'LineCount';
tempDiv.style.float = 'left';
tempDiv.style.textAlign = 'right';
tempDiv.style.color = 'grey';
tempDiv.style.borderRight = "1px dotted grey";
tempDiv.style.marginRight = '6px';
tempDiv.style.userSelect = 'none';
element.parentNode.insertBefore(tempDiv, element);
// Add copy button...
var CodeBoxHeader = element;
while ( true ) {
CodeBoxHeader = CodeBoxHeader.parentNode;
if ( CodeBoxHeader.getElementsByClassName('smallfont').length ) {
CodeBoxHeader = CodeBoxHeader.getElementsByClassName('smallfont')[0];
break;
}
}
CodeBoxHeader.style.marginBottom = '8px';
var tempButton = document.createElement('button');
tempButton.style.float = 'right';
tempButton.className = 'smallfont';
tempButton.value = listAlreadyDone.length;
tempButton.innerHTML = 'Copy to clipboard';
tempButton.addEventListener("click", function() {
CopyCode(this.value);
});
CodeBoxHeader.appendChild(tempButton);
listAlreadyDone.push(element);
}
function CopyCode(index)
{
var range = document.createRange();
range.selectNode(listAlreadyDone[index]);
window.getSelection().addRange(range);
try {
document.execCommand('copy');
} catch (err) {
alert('An error occured while copying text to clipboard');
}
setTimeout('window.getSelection().removeAllRanges()', 100);
}
function CheckForNewCodeBoxes() {
var inputElements = document.getElementsByTagName('input');
for ( var i = 0 ; i < inputElements.length ; i++ )
{
if ( inputElements[i].value == 'Show' )
{
listSpoilers.push(inputElements[i])
inputElements[i].click();
}
}
var CodeBoxesPawn = document.getElementsByClassName('pawn');
for ( var i = 0 ; i < CodeBoxesPawn.length ; i++ )
CreateLineCountBeforeElement(CodeBoxesPawn[i]);
var CodeBoxesCode = document.getElementsByTagName('pre');
for ( var i = 0 ; i < CodeBoxesCode.length ; i++ )
{
if ( CodeBoxesCode[i].getElementsByClassName('pawn').length )
continue;
if ( CodeBoxesCode[i].getElementsByTagName('code').length )
continue;
CodeBoxesCode[i].innerHTML = '<code><code>' + CodeBoxesCode[i].innerHTML + '</code></code>';
}
var CodeBoxesPHP = document.getElementsByTagName('code'); // Which also now includes the normal "Code" boxes.
for ( var i = 1 ; i < CodeBoxesPHP.length ; i+=2 )
{
CreateLineCountBeforeElement(CodeBoxesPHP[i]);
CodeBoxesPHP[i].style.display = 'block';
}
for ( var i = 0 ; i < listSpoilers.length ; i++ )
listSpoilers[i].click();
listSpoilers.length = 0;
}
CheckForNewCodeBoxes();