UminekoFAQs

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-11 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name UminekoFAQs
  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.8
  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. document.getElementsByName('messagetext')[0].value = text;
  88. } else {
  89. var elemId = event.target.id;
  90. var obj = document.getElementsByName('messagetext')[0];
  91. if (elemId == BTN_ID.RED) {
  92. insertAtCaret(obj, '<red>', '</red>');
  93. } else if (elemId == BTN_ID.BLUE) {
  94. insertAtCaret(obj, '<blue>', '</blue>');
  95. } else if (elemId == BTN_ID.GOLD) {
  96. insertAtCaret(obj, '<gold>', '</gold>');
  97. } else if (elemId == BTN_ID.MAUVE) {
  98. insertAtCaret(obj, '<mauve>', '</mauve>');
  99. } else if (elemId == BTN_ID.PINK) {
  100. insertAtCaret(obj, '<salmonpink>', '</salmonpink>');
  101. } else if (elemId == BTN_ID.ORANGE) {
  102. insertAtCaret(obj, '<orange>', '</orange>');
  103. } else if (elemId == BTN_ID.GREEN) {
  104. insertAtCaret(obj, '<green>', '</green>');
  105. }
  106. }
  107. }
  108.  
  109. function insertAtCaret(obj, tagOpen, tagClose) {
  110. if (obj.selectionStart) {
  111. obj.focus();
  112. var start = obj.selectionStart;
  113. var end = obj.selectionEnd;
  114. obj.value = obj.value.substr(0, start).concat(tagOpen).concat(obj.value.substr(start, end - start)).concat(tagClose).concat(obj.value.substr(end));
  115. }
  116.  
  117. if (start != null) {
  118. setCaretTo(obj, start + tagOpen.length);
  119. } else {
  120. //obj.value += text;
  121. }
  122. }
  123.  
  124. function setCaretTo(obj, pos) {
  125. if(obj.createTextRange) {
  126. var range = obj.createTextRange();
  127. range.move('character', pos);
  128. range.select();
  129. } else if(obj.selectionStart) {
  130. obj.focus();
  131. obj.setSelectionRange(pos, pos);
  132. }
  133. }
  134.  
  135. function renderColors() {
  136. var msg = document.getElementsByClassName('body');
  137. if (msg.lenght != 0) {
  138. var i = 0;
  139. for (i = 0; i < msg.length; i++) {
  140. //INVISIBLE Orange
  141. 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>');
  142. //INVISIBLE Salmon Pink
  143. 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>');
  144. //INVISIBLE Mauve
  145. 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>');
  146. //INVISIBLE Red
  147. 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>');
  148. //INVISIBLE Blue
  149. 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>');
  150. //INVISIBLE Gold
  151. 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>');
  152. //INVISIBLE Green
  153. 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>');
  154. //MAUVE
  155. 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>');
  156.  
  157. //NEW red
  158. 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>');
  159. //NEW blue
  160. msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><i><i>/gi, "<font color=#00F><b>").replace(/<\/i><\/i><\/i><\/i>/gi, '</b></font>');
  161. //NEW gold
  162. msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><i>/gi, "<font color=#FC0><b>").replace(/<\/i><\/i><\/i>/gi, '</b></font>');
  163.  
  164. //NEW green
  165. msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i>/gi, "<font color=#6C0><b>").replace(/<\/i><\/i>/gi, '</b></font>');
  166. //OLD red
  167. msg[i].innerHTML = msg[i].innerHTML.replace(/<em><b><i>/gi, "<font color=#F00><b>").replace(/<\/i><\/b><\/em>/gi, '</b></font>');
  168. //OLD blue
  169. msg[i].innerHTML = msg[i].innerHTML.replace(/<em><b><b>/gi, "<font color=#00F><b>").replace(/<\/b><\/b><\/em>/gi, '</b></font>');
  170. //OLD gold
  171. msg[i].innerHTML = msg[i].innerHTML.replace(/<em><i><b>/gi, "<font color=#FC0><b>").replace(/<\/b><\/i><\/em>/gi, '</b></font>');
  172.  
  173. //OLD green
  174. msg[i].innerHTML = msg[i].innerHTML.replace(/<b><i><em>/gi, "<font color=#6C0><b>").replace(/<\/em><\/i><\/b>/gi, '</b></font>');
  175. }
  176. }
  177. }