Guest User

Untitled

a guest
Jun 22nd, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.97 KB | None | 0 0
  1. #!/usr/bin/env php
  2. <?php
  3.  
  4. $tocScript = <<<JSCSS
  5. <script>
  6. Array.prototype.inArray = function (value) {
  7. var i;
  8. for (i=0; i < this.length; i++) {
  9. if (this[i] === value) {
  10. return true;
  11. }
  12. }
  13. return false;
  14. };
  15.  
  16. function getElementsByTagNames(list,obj) {
  17. if (!obj) var obj = document;
  18. var tagNames = list.split(',');
  19. var resultArray = new Array();
  20. for (var i=0;i<tagNames.length;i++) {
  21. var tags = obj.getElementsByTagName(tagNames[i]);
  22. for (var j=0;j<tags.length;j++) {
  23. resultArray.push(tags[j]);
  24. }
  25. }
  26. var testNode = resultArray[0];
  27. if (!testNode) return [];
  28. if (testNode.sourceIndex) {
  29. resultArray.sort(function (a,b) {
  30. return a.sourceIndex - b.sourceIndex;
  31. });
  32. }
  33. else if (testNode.compareDocumentPosition) {
  34. resultArray.sort(function (a,b) {
  35. return 3 - (a.compareDocumentPosition(b) & 6);
  36. });
  37. }
  38. return resultArray;
  39. }
  40.  
  41. function createTOC() {
  42. var y = document.createElement('div');
  43. y.id = 'innertoc';
  44. var a = y.appendChild(document.createElement('span'));
  45. a.onclick = showhideTOC;
  46. a.id = 'contentheader';
  47. a.innerHTML = 'show page contents';
  48. var z = y.appendChild(document.createElement('div'));
  49. z.onclick = showhideTOC;
  50. var toBeTOCced = getElementsByTagNames('h1,h2,h3,h4,h5');
  51. if (toBeTOCced.length < 2) return false;
  52.  
  53. var idList = [];
  54. for (var i=0;i<toBeTOCced.length;i++) {
  55. var textSrc = toBeTOCced[i];
  56. var firstNode = textSrc.firstChild;
  57. if (firstNode && firstNode.nodeName == 'A')
  58. textSrc = firstNode;
  59. var tmp = document.createElement('a');
  60. tmp.innerHTML = textSrc.innerHTML;
  61. tmp.className = 'page';
  62. z.appendChild(tmp);
  63. tmp.className += ' '+toBeTOCced[i].nodeName+'indent';
  64. var headerId = toBeTOCced[i].id || 'link' + i;
  65. if (idList.inArray(headerId)) {
  66. headerId += i;
  67. toBeTOCced[i].id = headerId;
  68. }
  69. idList[i] = headerId;
  70. tmp.href = '#' + headerId;
  71. toBeTOCced[i].id = headerId;
  72. if (toBeTOCced[i].nodeName == 'H1') {
  73. tmp.innerHTML = 'Top';
  74. tmp.href = '#top';
  75. toBeTOCced[i].id = 'top';
  76. }
  77. }
  78. return y;
  79. }
  80.  
  81. var TOCstate = 'none';
  82. var TOCclass = 'tocClosed';
  83.  
  84. function showhideTOC() {
  85. TOCstate = (TOCstate == 'none') ? 'block' : 'none';
  86. TOCclass = (TOCstate == 'none') ? 'tocClosed' : 'tocOpened';
  87. document.getElementById('contentheader').innerHTML = (TOCstate == 'none') ? 'show page contents' : 'hide page contents';
  88. document.getElementById('innertoc').lastChild.style.display = TOCstate;
  89. document.getElementById('TOCwrapper').className = TOCclass;
  90. var offset = (TOCclass=='tocClosed') ? '0px' : window.pageYOffset+'px';
  91. document.getElementById('TOCwrapper').style.top = offset;
  92. }
  93.  
  94. window.onload = function () {
  95. var ToC = createTOC();
  96. if (ToC) {
  97. var body = document.body;
  98. var firstChild = body.childNodes[0];
  99. var wrapper = document.createElement('div');
  100. wrapper.id = 'TOCwrapper';
  101. wrapper.className = TOCclass;
  102. var theToc = wrapper.appendChild(document.createElement('div'));
  103. theToc.id = 'TOC';
  104. theToc.appendChild(ToC);
  105. body.insertBefore(wrapper,firstChild);
  106. }
  107. }
  108. </script>
  109. <style>
  110. body { margin-right: 20em; }
  111.  
  112. /* TABLE OF CONTENTS */
  113.  
  114. div#TOC {
  115. width: 20em;
  116. position: absolute;
  117. top: 0px;
  118. right: 0px;
  119. line-height: 110%;
  120. }
  121.  
  122. div#TOC a {
  123. display: list-item;
  124. margin-left: 16px;
  125. font-size: 90%;
  126. margin-top: 5px;
  127. }
  128.  
  129. div#TOC a.H3indent { margin-left: 3em; }
  130. div#TOC a.H4indent { margin-left: 4em; }
  131. div#TOC a.H5indent { margin-left: 5em; }
  132.  
  133. div#innertoc div {
  134. border: 1px solid #999999;
  135. border-width: 1px 0;
  136. padding: 10px 0;
  137. padding-bottom: 25px;
  138. background-color: #ffffff;
  139. display: none;
  140. }
  141.  
  142. div#TOCwrapper {
  143. z-index: 4;
  144. width: 99%;
  145. }
  146.  
  147. .tocClosed { position: fixed; top: 0;}
  148. .tocOpened { position: absolute; }
  149.  
  150. </style>
  151. JSCSS;
  152.  
  153. $html = str_replace('</head>',"$tocScript\n\t</head>",trim(stream_get_contents(STDIN)));
  154. $file = str_replace(substr($_ENV['TM_FILEPATH'],strrpos($_ENV['TM_FILEPATH'],'.')), ".html", $_ENV['TM_FILEPATH']);
  155. $fh = fopen($file,'w');
  156. fwrite($fh,$html);
  157. fclose($fh);
  158. passthru("mate $file");
Add Comment
Please, Sign In to add comment