Advertisement
QonQon

FanficQomplete

May 31st, 2015
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name          FanfictionQomplete
  3. // @description   Loads all following chapters on fanfiction.net and strips off junk.
  4. // @namespace     http://Q
  5. // @include       https://www.fanfiction.net/s/*/*
  6. // ==/UserScript==
  7.  
  8. function urlGetChap(url) {
  9.     var re = /(^.*?fanfiction\.net\/s\/\d+\/)(\d+)(?:\/?.*$)/
  10.     var arr = re.exec(url)
  11.     return arr[2]
  12. }
  13.  
  14. function urlSetChap(url, n) {
  15.     var re = /(^.*?fanfiction\.net\/s\/\d+\/)(\d+)(?:\/?.*$)/
  16.     var arr = re.exec(url)
  17.     return arr[1] + n
  18. }
  19.  
  20. function inc(url) {
  21.     var re = /(^.*?fanfiction\.net\/s\/\d+\/)(\d+)(?:\/?.*$)/
  22.     var arr = re.exec(url)
  23.     return arr[1] + (parseInt(arr[2]) + 1)
  24. }
  25.  
  26. function createChapFromFfpage(url, page) {
  27.     var chapdiv = page.createElement('div')
  28.     var storytext = page.getElementById('storytext')
  29.     if (storytext) {
  30.         chapdiv.setAttribute('class', 'chapter')
  31.         var chapspan = page.createElement('span')
  32.         chapspan.innerHTML = urlGetChap(url) + '. '
  33.         var title = page.getElementsByTagName('title')[0]
  34.         var chaptitle = page.createElement('a')
  35.         chaptitle.setAttribute('href', url)
  36.         chaptitle.innerHTML = title.innerHTML
  37.         chapdiv.appendChild(chapspan)
  38.         chapdiv.appendChild(chaptitle)
  39.         chapdiv.appendChild(document.createElement('hr'))
  40.         chapdiv.appendChild(storytext)
  41.         return chapdiv
  42.     } else return null
  43. }
  44. var body = document.getElementsByTagName('body')[0]
  45. var head = document.getElementsByTagName('head')[0]
  46. var title = document.getElementsByTagName('title')[0]
  47.  
  48. var profile_top = document.getElementById('profile_top')
  49. var chap = createChapFromFfpage(document.location.href, document)
  50.  
  51. // else if(typeof ptbuttons[0].remove != "undefined") {
  52. // if(typeof ptbuttons[0].removeNode != "undefined")    {
  53. var ptbuttons = profile_top.getElementsByTagName('button')
  54. if (ptbuttons.length) {
  55.     try {
  56.         ptbuttons[0].remove()
  57.         for (; head.firstElementChild;) head.firstElementChild.remove();
  58.         for (; body.firstElementChild;) body.firstElementChild.remove();
  59.     } catch (e) {
  60.         try {
  61.             ptbuttons[0].removeNode(true)
  62.             var elementChildren = head.children;
  63.             for (; elementChildren.length;) {
  64.                 elementChildren[0].removeNode(true)
  65.             }
  66.             var elementChildren = body.children;
  67.             for (; elementChildren.length;) {
  68.                 elementChildren[0].removeNode(true)
  69.             }
  70.         } catch (e) {}
  71.     }
  72. }
  73. body.removeAttribute('style')
  74.  
  75.  
  76.  
  77. var style = document.createElement('style')
  78. style.setAttribute('type', 'text/css')
  79. style.innerHTML = 'body{background-color:#3f5;color:#ccc;margin:0;padding:0;font-family:"Verdana";}div.wrap{max-width:1200px;margin-left:auto;margin-right:auto;}.chapter,#profile_top{background-color:#222;margin-top:1em;margin-bottom:1em;}img{float:left;}canvas{float:left;}a:link{color:#a05;}a:visited{color:#555;}a:hover{color:#fff;}a:active{color:#a05;}'
  80. head.appendChild(style)
  81. head.appendChild(title)
  82.  
  83. wrap = document.createElement('div')
  84. wrap.setAttribute('class', 'wrap')
  85.  
  86. var div = document.createElement('div')
  87. div.appendChild(profile_top)
  88. wrap.appendChild(div)
  89.  
  90. wrap.appendChild(chap)
  91. body.appendChild(wrap)
  92.  
  93. GLOBAL_URL_FOR_IE = ""
  94.  
  95. function loadQomplete() {
  96.     var style = document.createElement('style')
  97.     style.setAttribute('type', 'text/css')
  98.     style.innerHTML = 'body{background-color:#604;}'
  99.     head.appendChild(style)
  100.     console.log('QOMPLETE')
  101. }
  102.  
  103. function reqListener() {
  104.     var xmlDoc = new DOMParser().parseFromString(this.responseText, "text/html")
  105.     var url = this.responseURL
  106.     if (url == undefined) url = GLOBAL_URL_FOR_IE
  107.     var chap = createChapFromFfpage(url, xmlDoc)
  108.     if (chap) {
  109.         wrap.appendChild(chap)
  110.         loadNext(url)
  111.     } else loadQomplete()
  112. }
  113.  
  114. function loadNext(url) {
  115.     var oReq = new XMLHttpRequest();
  116.     oReq.onload = reqListener;
  117.     GLOBAL_URL_FOR_IE = inc(url)
  118.     oReq.open("get", inc(url), true);
  119.     oReq.send();
  120. }
  121.  
  122. loadNext(document.location.href)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement