Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name 4chan /g/ code linenumbers
- // @namespace none
- // @version 0.1
- // @description end the pain
- // @author You
- // @match https://boards.4chan.org/g/thread/*
- // @grant none
- // ==/UserScript==
- function GM_addStyle(css) {
- var head, style;
- head = document.getElementsByTagName('head')[0];
- if (!head) { return; }
- style = document.createElement('style');
- style.type = 'text/css';
- style.innerHTML = css;
- head.appendChild(style);
- }
- GM_addStyle ( `
- span.lineNumber {
- color: #6E9B98;
- }
- ` );
- GM_addStyle ( `
- button.toggle {
- font-size: 75%;
- font-family: inherit;
- padding: 0;
- }
- ` );
- function addLineNumbersForBlock(codeblock) {
- var breakRowFromOneBlock=codeblock.getElementsByTagName("br");
- var indent=breakRowFromOneBlock.length.toString().length
- var firstRowNum = document.createElement("SPAN");
- firstRowNum.className="lineNumber"
- firstRowNum.innerHTML="1"+" ".repeat(indent-1)+"|"
- codeblock.insertBefore(firstRowNum, codeblock.firstChild)
- for (var j=0; j < breakRowFromOneBlock.length; j++) {
- if(breakRowFromOneBlock.length===1){
- break;
- }
- var singleBR = breakRowFromOneBlock[j]
- var lineNumberElement = document.createElement("SPAN");
- lineNumberElement.className="lineNumber"
- var sub=(j+2).toString().length
- lineNumberElement.innerHTML=(j+2).toString()+" ".repeat(indent-sub)+"|"
- singleBR.parentNode.insertBefore(lineNumberElement, singleBR.nextSibling)
- }
- }
- function removeLineNumbersForBlock(codeblock) {
- while (codeblock.getElementsByClassName("lineNumber").length) { //seems excessive but better options removed every other element.
- codeblock.getElementsByClassName("lineNumber")[0].parentNode.removeChild(codeblock.getElementsByClassName("lineNumber")[0]);
- }
- }
- function buttonRemove(event){
- var btn=event.currentTarget;
- addLineNumbersForBlock(btn.previousSibling.previousSibling)
- btn.removeEventListener("click", buttonRemove);
- btn.addEventListener("click", buttonAdd);
- }
- function buttonAdd(event){
- var btn=event.currentTarget;
- removeLineNumbersForBlock(btn.previousSibling.previousSibling)
- btn.removeEventListener("click", buttonAdd);
- btn.addEventListener("click", buttonRemove);
- }
- (function() {
- 'use strict';
- var codeblocks=document.getElementsByClassName("prettyprint prettyprinted")
- for (var i=0; i < codeblocks.length; i++) {
- addLineNumbersForBlock(codeblocks[i]);
- var button = document.createElement("BUTTON");
- button.type="button";
- button.className="toggle";
- button.innerHTML="Toggle Line numbers"
- button.addEventListener("click",buttonAdd);
- var space = document.createElement("BR");
- codeblocks[i].parentNode.insertBefore(button, codeblocks[i].nextSibling)
- codeblocks[i].parentNode.insertBefore(space, codeblocks[i].nextSibling)
- }
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement