Advertisement
Guest User

4ch code line numbers tampermonkey

a guest
Nov 16th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         4chan /g/ code linenumbers
  3. // @namespace    none
  4. // @version      0.1
  5. // @description  end the pain
  6. // @author       You
  7. // @match        https://boards.4chan.org/g/thread/*
  8. // @grant        none
  9. // ==/UserScript==
  10. function GM_addStyle(css) {
  11.     var head, style;
  12.     head = document.getElementsByTagName('head')[0];
  13.     if (!head) { return; }
  14.     style = document.createElement('style');
  15.     style.type = 'text/css';
  16.     style.innerHTML = css;
  17.     head.appendChild(style);
  18. }
  19.  
  20. GM_addStyle ( `
  21. span.lineNumber {
  22.     color: #6E9B98;
  23. }
  24. ` );
  25. GM_addStyle ( `
  26. button.toggle {
  27.     font-size: 75%;
  28.     font-family: inherit;
  29.     padding: 0;
  30. }
  31. ` );
  32.  
  33. function addLineNumbersForBlock(codeblock) {
  34.     var breakRowFromOneBlock=codeblock.getElementsByTagName("br");
  35.     var indent=breakRowFromOneBlock.length.toString().length
  36.     var firstRowNum = document.createElement("SPAN");
  37.     firstRowNum.className="lineNumber"
  38.     firstRowNum.innerHTML="1"+" ".repeat(indent-1)+"|"
  39.     codeblock.insertBefore(firstRowNum, codeblock.firstChild)
  40.     for (var j=0; j < breakRowFromOneBlock.length; j++) {
  41.         if(breakRowFromOneBlock.length===1){
  42.             break;
  43.         }
  44.  
  45.         var singleBR = breakRowFromOneBlock[j]
  46.         var lineNumberElement = document.createElement("SPAN");
  47.         lineNumberElement.className="lineNumber"
  48.         var sub=(j+2).toString().length
  49.         lineNumberElement.innerHTML=(j+2).toString()+" ".repeat(indent-sub)+"|"
  50.         singleBR.parentNode.insertBefore(lineNumberElement, singleBR.nextSibling)
  51.  
  52.     }
  53. }
  54. function removeLineNumbersForBlock(codeblock) {
  55.     while (codeblock.getElementsByClassName("lineNumber").length) { //seems excessive but better options removed every other element.
  56.         codeblock.getElementsByClassName("lineNumber")[0].parentNode.removeChild(codeblock.getElementsByClassName("lineNumber")[0]);
  57.     }
  58. }
  59. function buttonRemove(event){
  60.     var btn=event.currentTarget;
  61.     addLineNumbersForBlock(btn.previousSibling.previousSibling)
  62.     btn.removeEventListener("click", buttonRemove);
  63.     btn.addEventListener("click", buttonAdd);
  64. }
  65. function buttonAdd(event){
  66.     var btn=event.currentTarget;
  67.     removeLineNumbersForBlock(btn.previousSibling.previousSibling)
  68.     btn.removeEventListener("click", buttonAdd);
  69.     btn.addEventListener("click", buttonRemove);
  70. }
  71. (function() {
  72.     'use strict';
  73.  
  74.     var codeblocks=document.getElementsByClassName("prettyprint prettyprinted")
  75.     for (var i=0; i < codeblocks.length; i++) {
  76.         addLineNumbersForBlock(codeblocks[i]);
  77.         var button = document.createElement("BUTTON");
  78.         button.type="button";
  79.         button.className="toggle";
  80.         button.innerHTML="Toggle Line numbers"
  81.         button.addEventListener("click",buttonAdd);
  82.         var space = document.createElement("BR");
  83.         codeblocks[i].parentNode.insertBefore(button, codeblocks[i].nextSibling)
  84.         codeblocks[i].parentNode.insertBefore(space, codeblocks[i].nextSibling)
  85.  
  86.     }
  87. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement