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.

目前为 2014-12-15 提交的版本,查看 最新版本

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