xkcd buttons Alt+Transcript+Explainxkcd

add btns to view transcript and alt and explainxkcd

  1. // ==UserScript==
  2. // @name xkcd buttons Alt+Transcript+Explainxkcd
  3. // @author SammaySarkar
  4. // @namespace "SammaySarkar_Greasemonkey_Scripts"
  5. // @description add btns to view transcript and alt and explainxkcd
  6. // @version 1.6
  7. // @include /^https?\://(www\.)?xkcd\.com/?(\d+)?/?.*?$/
  8. // @grant none
  9. // ==/UserScript==
  10. // Hi, user! You can change some options in the USER SETTINGS block below!
  11. // Read the accompanying commentary for explanations!
  12.  
  13. /* -> USER SETTINGS */
  14. var xkcd_atx_showAlttext = 1; //1:display alttext below comic | 0:hide it
  15. var xkcd_atx_showTscript = 0; //1:display transcript | 0:hide it
  16. var xkcd_atx_moveTscript = 0; //1:move Tscript above 2nd nav controls | 0: keep position unchanged
  17. var xkcd_atx_showExplain = 1; //1:show explain button | 0:hide it
  18. var xkcd_atx_ntabExplain = 0; //1:open ExplainXKCD in new tab by default | 0: open in current tab
  19.  
  20. /* <- USER SETTINGS */
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27. /* -> init */
  28. var xkcd_atx_tscriptDiv = document.getElementById('transcript');
  29. var xkcd_atx_parentElem = xkcd_atx_tscriptDiv.parentElement;
  30. var xkcd_atx_alttext = document.getElementById('comic').getElementsByTagName('img') [0].title;
  31. var xkcd_atx_tscript = xkcd_atx_tscriptDiv.textContent;
  32. var xkcd_atx_comicNum = document.getElementsByClassName('comicNav') [0].getElementsByTagName('a') [1].getAttribute('href');
  33. //if (xkcd_atx_comicNum == "#"){xkcd_atx_comicNum = 1;}
  34. //else {
  35. xkcd_atx_comicNum = parseInt(xkcd_atx_comicNum.slice(1, xkcd_atx_comicNum.length-1)) + 1;
  36. //}
  37. var xkcd_atx_UlNewBtns = document.createElement('ul');
  38. xkcd_atx_UlNewBtns.className = 'comicNav';
  39. //xkcd_atx_UlNewBtns.id = 'xkcdatx_newBtns';
  40. xkcd_atx_parentElem.insertBefore(xkcd_atx_UlNewBtns, xkcd_atx_tscriptDiv);
  41. //xkcd_atx_parentElem.insertBefore(document.createElement("hr"), xkcd_atx_UlNewBtns);
  42. /* <- init */
  43.  
  44. /* -> alttext ctrl */
  45. if (xkcd_atx_alttext != '') {
  46. var xkcd_atx_divAlttext = document.createElement('div');
  47. xkcd_atx_divAlttext.textContent = xkcd_atx_alttext;
  48. xkcd_atx_divAlttext.style.fontVariant = 'normal';
  49. xkcd_atx_divAlttext.style.fontSize = '10px';
  50. xkcd_atx_divAlttext.style.border = '1px solid #000';
  51. xkcd_atx_divAlttext.style.borderRadius = '3px';
  52. xkcd_atx_divAlttext.style.padding = '4px';
  53. xkcd_atx_divAlttext.style.margin = '2px 60px';
  54. xkcd_atx_divAlttext.style.backgroundColor = '#FFF9BD';
  55. if (xkcd_atx_showAlttext != 1) {
  56. xkcd_atx_divAlttext.style.display = 'none';
  57. }
  58. var xkcd_atx_LiBtnAlttext = document.createElement('li');
  59. var xkcd_atx_aBtnAlttext = document.createElement('a');
  60. xkcd_atx_aBtnAlttext.textContent = 'aLttext';
  61. xkcd_atx_aBtnAlttext.accessKey = 'l';
  62. xkcd_atx_aBtnAlttext.style.cursor = 'pointer';
  63. xkcd_atx_aBtnAlttext.title = 'display Alttext.\nAccesskey: L';
  64. xkcd_atx_LiBtnAlttext.appendChild(xkcd_atx_aBtnAlttext);
  65. xkcd_atx_UlNewBtns.appendChild(xkcd_atx_LiBtnAlttext);
  66. xkcd_atx_parentElem.insertBefore(xkcd_atx_divAlttext, document.getElementsByClassName('comicNav') [1]);
  67.  
  68. xkcd_atx_aBtnAlttext.addEventListener('click', function () {
  69. if (xkcd_atx_divAlttext.style.display == 'none') {
  70. xkcd_atx_divAlttext.style.display = 'block';
  71. }
  72. else {
  73. xkcd_atx_divAlttext.style.display = 'none';
  74. }
  75. });
  76. }
  77. /* <- alttext ctrl */
  78.  
  79. /* -> transcript ctrl */
  80. if (xkcd_atx_tscript != '') {
  81. xkcd_atx_tscriptDiv.style.whiteSpace = 'pre-line';
  82. xkcd_atx_tscriptDiv.style.textAlign = 'justify';
  83. xkcd_atx_tscriptDiv.style.fontFamily = 'monospace';
  84. xkcd_atx_tscriptDiv.style.fontVariant = 'normal';
  85. xkcd_atx_tscriptDiv.style.fontSize = '12px';
  86. xkcd_atx_tscriptDiv.style.border = '1px solid #000';
  87. xkcd_atx_tscriptDiv.style.borderRadius = '3px';
  88. xkcd_atx_tscriptDiv.style.padding = '4px';
  89. xkcd_atx_tscriptDiv.style.margin = '16px 60px';
  90. xkcd_atx_tscriptDiv.style.backgroundColor = '#E4E4E4';
  91. if (xkcd_atx_showTscript != 0) {
  92. xkcd_atx_tscriptDiv.style.display = 'block';
  93. }
  94. var xkcd_atx_LiBtnTscript = document.createElement('li');
  95. var xkcd_atx_aBtnTscript = document.createElement('a');
  96. xkcd_atx_aBtnTscript.textContent = 'Transcript';
  97. xkcd_atx_aBtnTscript.accessKey = 't';
  98. xkcd_atx_aBtnTscript.style.cursor = 'pointer';
  99. xkcd_atx_aBtnTscript.title = 'display Transcript.\nAccesskey: T';
  100. xkcd_atx_LiBtnTscript.appendChild(xkcd_atx_aBtnTscript);
  101. xkcd_atx_UlNewBtns.appendChild(xkcd_atx_LiBtnTscript);
  102.  
  103. if (xkcd_atx_moveTscript != 0) {
  104. xkcd_atx_parentElem.insertBefore(xkcd_atx_tscriptDiv, document.getElementsByClassName('comicNav') [1]);
  105. }
  106. xkcd_atx_aBtnTscript.addEventListener('click', function () {
  107. if (xkcd_atx_tscriptDiv.style.display != 'block') {
  108. xkcd_atx_tscriptDiv.style.display = 'block';
  109. }
  110. else {
  111. xkcd_atx_tscriptDiv.style.display = 'none';
  112. }
  113. });
  114. }
  115. /* <- transcript ctrl */
  116.  
  117. /* -> explainxkcd ctrl */
  118. if (xkcd_atx_showExplain != 0) {
  119. var xkcd_atx_LiBtnExplain = document.createElement('li');
  120. var xkcd_atx_aBtnExplain = document.createElement('a');
  121. xkcd_atx_aBtnExplain.textContent = 'eXplain';
  122. xkcd_atx_aBtnExplain.accessKey = 'x';
  123. //xkcd_atx_aBtnExplain.style.cursor = "pointer"; //already points to a link
  124. xkcd_atx_aBtnExplain.title = 'Open relevant ExplainXKCD page.\nAccesskey: X';
  125. xkcd_atx_LiBtnExplain.appendChild(xkcd_atx_aBtnExplain);
  126. xkcd_atx_UlNewBtns.appendChild(xkcd_atx_LiBtnExplain);
  127. xkcd_atx_aBtnExplain.href = 'http://www.explainxkcd.com/wiki/index.php/' + xkcd_atx_comicNum;
  128. if (xkcd_atx_ntabExplain != 0) {
  129. xkcd_atx_aBtnExplain.target = '_blank';
  130. }
  131. }
  132. /* -> explainxkcd ctrl */