GameFAQs Colored Text Renderer

This script translates <red>, <blue>, <gold>, <green>, <mauve>, <salmonpink>, and <orange> tags into GameFAQs friendly HTML tags, and accordingly renders messages into the aforementioned colors.

目前为 2015-03-03 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name GameFAQs Colored Text Renderer
  3. // @description This script translates <red>, <blue>, <gold>, <green>, <mauve>, <salmonpink>, and <orange> tags into GameFAQs friendly HTML tags, and accordingly renders messages into the aforementioned colors.
  4. // @namespace http://thelolilulelo.wordpress.com/
  5. // @grant none
  6. // @include http://www.gamefaqs.com/boards/*
  7. // @exclude http://www.gamefaqs.com/boards/user.php*
  8. // @version 0.91
  9. // ==/UserScript==
  10.  
  11. var CONST = {NEW:'Post Message', PREV:'Preview Message', PREVS:'Preview and Spellcheck Message'};
  12. var BTN_ID = {RED:'btnRed', BLUE:'btnBlue', GOLD:'btnGold', GREEN:'btnGreen', MAUVE:'btnMauve', PINK:'btnPink', ORANGE:'btnOrange'};
  13.  
  14. if (document.getElementsByName('messagetext').length != 0) {
  15. document.addEventListener('click', eventListener, true);
  16. btnRed = document.createElement("input");
  17. btnRed.setAttribute("tabindex", "-1")
  18. btnRed.setAttribute("id", BTN_ID.RED);
  19. btnRed.setAttribute("value", "Red");
  20. btnRed.setAttribute("type", "button");
  21. btnBlue = document.createElement("input");
  22. btnBlue.setAttribute("tabindex", "-1")
  23. btnBlue.setAttribute("id", BTN_ID.BLUE);
  24. btnBlue.setAttribute("value", "Blue");
  25. btnBlue.setAttribute("type", "button");
  26. btnGreen = document.createElement("input");
  27. btnGreen.setAttribute("tabindex", "-1")
  28. btnGreen.setAttribute("id", BTN_ID.GREEN);
  29. btnGreen.setAttribute("value", "Green");
  30. btnGreen.setAttribute("type", "button");
  31. btnGold = document.createElement("input");
  32. btnGold.setAttribute("tabindex", "-1")
  33. btnGold.setAttribute("id", BTN_ID.GOLD);
  34. btnGold.setAttribute("value", "Gold");
  35. btnGold.setAttribute("type", "button");
  36. btnMauve = document.createElement("input");
  37. btnMauve.setAttribute("tabindex", "-1")
  38. btnMauve.setAttribute("id", BTN_ID.MAUVE);
  39. btnMauve.setAttribute("value", "Mauve");
  40. btnMauve.setAttribute("type", "button");
  41. btnPink = document.createElement("input");
  42. btnPink.setAttribute("tabindex", "-1")
  43. btnPink.setAttribute("id", BTN_ID.PINK);
  44. btnPink.setAttribute("value", "Pink");
  45. btnPink.setAttribute("type", "button");
  46. btnOrange = document.createElement("input");
  47. btnOrange.setAttribute("tabindex", "-1")
  48. btnOrange.setAttribute("id", BTN_ID.ORANGE);
  49. btnOrange.setAttribute("value", "Orange");
  50. btnOrange.setAttribute("type", "button");
  51.  
  52. if (document.getElementsByName('gamefox-quickpost-normal').length != 0) {
  53. var elemParent = document.getElementsByName('gamefox-quickpost-normal')[0];
  54. elemParent.insertBefore(btnRed, elemParent.childNodes[0]);
  55. //elemParent.childNodes[0].appendChild(btnRed);
  56. } else {
  57. var elemParent = document.getElementsByName('messagetext')[0];
  58. elemParent.parentNode.parentNode.insertBefore(btnRed, elemParent.parentNode);
  59. }
  60. btnRed.parentNode.insertBefore(btnBlue, btnRed.nextSibling);
  61. btnBlue.parentNode.insertBefore(btnGreen, btnBlue.nextSibling);
  62. btnGreen.parentNode.insertBefore(btnMauve, btnGreen.nextSibling);
  63. btnMauve.parentNode.insertBefore(btnPink, btnMauve.nextSibling);
  64. btnPink.parentNode.insertBefore(btnGold, btnPink.nextSibling);
  65. btnGold.parentNode.insertBefore(btnOrange, btnGold.nextSibling);
  66. btnOrange.appendChild(document.createElement("br"));
  67. }
  68.  
  69. renderColors();
  70.  
  71. function eventListener(event) {
  72. var elemVal = event.target.value;
  73. if (elemVal == CONST.NEW || elemVal == CONST.PREV || elemVal == CONST.PREVS) {
  74. var text = document.getElementsByName('messagetext')[0].value;
  75. //red
  76. text = text.replace(/<red>/gi, '<i><b><b><code></code></b></b></i>').replace(/<\/red>/gi, '<i><i><i><code><i><code></code></i></code></i></i></i>');
  77. //blue
  78. text = text.replace(/<blue>/gi, '<b><b><b><code></code></b></b></b>').replace(/<\/blue>/gi, '<b><i><i><code><i><code></code></i></code></i></i></b>');
  79. //gold
  80. text = text.replace(/<gold>/gi, '<b><b><i><code></code></i></b></b>').replace(/<\/gold>/gi, '<b><b><i><code><i><code></code></i></code></i></b></b>');
  81. //green
  82. text = text.replace(/<green>/gi, '<b><i><i><code></code></i></i></b>').replace(/<\/green>/gi, '<b><b><b><code><i><code></code></i></code></b></b></b>');
  83. //mauve
  84. text = text.replace(/<mauve>/gi, '<i><i><b><code></code></b></i></i>').replace(/<\/mauve>/gi, '<i><b><b><code><i><code></code></i></code></b></b></i>');
  85. //salmonpink
  86. text = text.replace(/<salmonpink>/gi, '<i><i><i><code></code></i></i></i>').replace(/<\/salmonpink>/gi, '<i><i><b><code><i><code></code></i></code></b></i></i>');
  87. //orange
  88. text = text.replace(/<orange>/gi, '<b><code><i><i><code></code></i></i></code></b>').replace(/<\/orange>/gi, '<b><b><b><code><b><code></code></b></code></b></b></b>');
  89. //EDIT Red
  90. text = text.replace(/<i><b><b><\/b><\/b><\/i>/gi, '<i><b><b><code></code></b></b></i>').replace(/<i><i><i><code><i><\/i><\/code><\/i><\/i><\/i>/gi, '<i><i><i><code><i><code></code></i></code></i></i></i>');
  91. //EDIT Blue
  92. text = text.replace(/<b><b><b><\/b><\/b><\/b>/gi, '<b><b><b><code></code></b></b></b>').replace(/<b><i><i><code><i><\/i><\/code><\/i><\/i><\/b>/gi, '<b><i><i><code><i><code></code></i></code></i></i></b>');
  93. //EDIT Gold
  94. text = text.replace(/<b><b><i><\/i><\/b><\/b>/gi, '<b><b><i><code></code></i></b></b>').replace(/<b><b><i><code><i><\/i><\/code><\/i><\/b><\/b>/gi, '<b><b><i><code><i><code></code></i></code></i></b></b>');
  95. //EDIT Green
  96. text = text.replace(/<b><i><i><\/i><\/i><\/b>/gi, '<b><i><i><code></code></i></i></b>').replace(/<b><b><b><code><i><\/i><\/code><\/b><\/b><\/b>/gi, '<b><b><b><code><i><code></code></i></code></b></b></b>');
  97. //EDIT Mauve
  98. text = text.replace(/<i><i><b><\/b><\/i><\/i>/gi, '<i><i><b><code></code></b></i></i>').replace(/<i><b><b><code><i><\/i><\/code><\/b><\/b><\/i>/gi, '<i><b><b><code><i><code></code></i></code></b></b></i>');
  99. //EDIT Salmon Pink
  100. text = text.replace(/<i><i><i><\/i><\/i><\/i>/gi, '<i><i><i><code></code></i></i></i>').replace(/<i><i><b><code><i><\/i><\/code><\/b><\/i><\/i>/gi, '<i><i><b><code><i><code></code></i></code></b></i></i>');
  101. //EDIT Orange
  102. text = text.replace(/<b><code><i><i><\/i><\/i><\/code><\/b>/gi, '<b><code><i><i><code></code></i></i></code></b>').replace(/<b><b><b><code><b><\/b><\/code><\/b><\/b><\/b>/gi, '<b><b><b><code><b><code></code></b></code></b></b></b>');
  103. document.getElementsByName('messagetext')[0].value = text;
  104. } else {
  105. var elemId = event.target.id;
  106. var obj = document.getElementsByName('messagetext')[0];
  107. if (elemId == BTN_ID.RED) {
  108. insertAtCaret(obj, '<red>', '</red>');
  109. } else if (elemId == BTN_ID.BLUE) {
  110. insertAtCaret(obj, '<blue>', '</blue>');
  111. } else if (elemId == BTN_ID.GOLD) {
  112. insertAtCaret(obj, '<gold>', '</gold>');
  113. } else if (elemId == BTN_ID.MAUVE) {
  114. insertAtCaret(obj, '<mauve>', '</mauve>');
  115. } else if (elemId == BTN_ID.PINK) {
  116. insertAtCaret(obj, '<salmonpink>', '</salmonpink>');
  117. } else if (elemId == BTN_ID.ORANGE) {
  118. insertAtCaret(obj, '<orange>', '</orange>');
  119. } else if (elemId == BTN_ID.GREEN) {
  120. insertAtCaret(obj, '<green>', '</green>');
  121. }
  122. }
  123. }
  124.  
  125. function insertAtCaret(obj, tagOpen, tagClose) {
  126. if (obj.selectionStart) {
  127. obj.focus();
  128. var start = obj.selectionStart;
  129. var end = obj.selectionEnd;
  130. obj.value = obj.value.substr(0, start).concat(tagOpen).concat(obj.value.substr(start, end - start)).concat(tagClose).concat(obj.value.substr(end));
  131. }
  132.  
  133. if (start != null) {
  134. setCaretTo(obj, start + tagOpen.length);
  135. } else {
  136. //obj.value += text;
  137. }
  138. }
  139.  
  140. function setCaretTo(obj, pos) {
  141. if(obj.createTextRange) {
  142. var range = obj.createTextRange();
  143. range.move('character', pos);
  144. range.select();
  145. } else if(obj.selectionStart) {
  146. obj.focus();
  147. obj.setSelectionRange(pos, pos);
  148. }
  149. }
  150.  
  151. function renderColors() {
  152. var msg = document.getElementsByClassName('body');
  153. if (msg.length != 0) {
  154. var i = 0;
  155. for (i = 0; i < msg.length; i++) {
  156. //INVISIBLE Orange
  157. msg[i].innerHTML = msg[i].innerHTML.replace(/<b><code><i><i><\/i><\/i><\/code><\/b>/gi, "<font color=#FFA500><b>").replace(/<b><b><b><code><b><\/b><\/code><\/b><\/b><\/b>/gi, '</b></font>');
  158. //INVISIBLE Salmon Pink
  159. msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><i><\/i><\/i><\/i>/gi, "<font color=#FF9999><b>").replace(/<i><i><b><code><i><\/i><\/code><\/b><\/i><\/i>/gi, '</b></font>');
  160. //INVISIBLE Mauve
  161. msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><b><\/b><\/i><\/i>/gi, "<font color=#925f6e><b>").replace(/<i><b><b><code><i><\/i><\/code><\/b><\/b><\/i>/gi, '</b></font>');
  162. //INVISIBLE Red
  163. msg[i].innerHTML = msg[i].innerHTML.replace(/<i><b><b><\/b><\/b><\/i>/gi, "<font color=#F00><b>").replace(/<i><i><i><code><i><\/i><\/code><\/i><\/i><\/i>/gi, '</b></font>');
  164. //INVISIBLE Blue
  165. msg[i].innerHTML = msg[i].innerHTML.replace(/<b><b><b><\/b><\/b><\/b>/gi, "<font color=#00F><b>").replace(/<b><i><i><code><i><\/i><\/code><\/i><\/i><\/b>/gi, '</b></font>');
  166. //INVISIBLE Gold
  167. msg[i].innerHTML = msg[i].innerHTML.replace(/<b><b><i><\/i><\/b><\/b>/gi, "<font color=#FC0><b>").replace(/<b><b><i><code><i><\/i><\/code><\/i><\/b><\/b>/gi, '</b></font>');
  168. //INVISIBLE Green
  169. msg[i].innerHTML = msg[i].innerHTML.replace(/<b><i><i><\/i><\/i><\/b>/gi, "<font color=#6C0><b>").replace(/<b><b><b><code><i><\/i><\/code><\/b><\/b><\/b>/gi, '</b></font>');
  170. //MAUVE
  171. msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><i><i><i><i>/gi, "<font color=#925f6e><b>").replace(/<\/i><\/i><\/i><\/i><\/i><\/i>/gi, '</b></font>');
  172.  
  173. //NEW red
  174. msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><i><i><i>/gi, "<font color=#F00><b>").replace(/<\/i><\/i><\/i><\/i><\/i>/gi, '</b></font>');
  175. //NEW blue
  176. msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><i><i>/gi, "<font color=#00F><b>").replace(/<\/i><\/i><\/i><\/i>/gi, '</b></font>');
  177. //NEW gold
  178. msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><i>/gi, "<font color=#FC0><b>").replace(/<\/i><\/i><\/i>/gi, '</b></font>');
  179.  
  180. //NEW green
  181. msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i>/gi, "<font color=#6C0><b>").replace(/<\/i><\/i>/gi, '</b></font>');
  182. //OLD red
  183. msg[i].innerHTML = msg[i].innerHTML.replace(/<em><b><i>/gi, "<font color=#F00><b>").replace(/<\/i><\/b><\/em>/gi, '</b></font>');
  184. //OLD blue
  185. msg[i].innerHTML = msg[i].innerHTML.replace(/<em><b><b>/gi, "<font color=#00F><b>").replace(/<\/b><\/b><\/em>/gi, '</b></font>');
  186. //OLD gold
  187. msg[i].innerHTML = msg[i].innerHTML.replace(/<em><i><b>/gi, "<font color=#FC0><b>").replace(/<\/b><\/i><\/em>/gi, '</b></font>');
  188.  
  189. //OLD green
  190. msg[i].innerHTML = msg[i].innerHTML.replace(/<b><i><em>/gi, "<font color=#6C0><b>").replace(/<\/em><\/i><\/b>/gi, '</b></font>');
  191. }
  192. }
  193. }