UminekoFAQs

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

目前为 2014-09-19 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name UminekoFAQs
  3. // @description This script translates <red>, <blue>, <gold>, and <green> 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.0.1.20140919202104
  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'};
  12.  
  13. if (document.getElementsByName('messagetext').length != 0) {
  14. document.addEventListener('click', eventListener, true);
  15. btnRed = document.createElement("input");
  16. btnRed.setAttribute("id", BTN_ID.RED);
  17. btnRed.setAttribute("value", "Red");
  18. btnRed.setAttribute("type", "button");
  19. btnBlue = document.createElement("input");
  20. btnBlue.setAttribute("id", BTN_ID.BLUE);
  21. btnBlue.setAttribute("value", "Blue");
  22. btnBlue.setAttribute("type", "button");
  23. btnGreen = document.createElement("input");
  24. btnGreen.setAttribute("id", BTN_ID.GREEN);
  25. btnGreen.setAttribute("value", "Green");
  26. btnGreen.setAttribute("type", "button");
  27. btnGold = document.createElement("input");
  28. btnGold.setAttribute("id", BTN_ID.GOLD);
  29. btnGold.setAttribute("value", "Gold");
  30. btnGold.setAttribute("type", "button");
  31. if (document.getElementsByName('gamefox-quickpost-normal').length != 0) {
  32. var elemParent = document.getElementsByName('gamefox-quickpost-normal')[0];
  33. elemParent.insertBefore(btnRed, elemParent.childNodes[0]);
  34. //elemParent.childNodes[0].appendChild(btnRed);
  35. } else {
  36. var elemParent = document.getElementsByName('messagetext')[0];
  37. elemParent.parentNode.parentNode.insertBefore(btnRed, elemParent.parentNode);
  38. }
  39. btnRed.parentNode.insertBefore(btnBlue, btnRed.nextSibling);
  40. btnBlue.parentNode.insertBefore(btnGreen, btnBlue.nextSibling);
  41. btnGreen.parentNode.insertBefore(btnGold, btnGreen.nextSibling);
  42. btnGold.appendChild(document.createElement("br"));
  43. }
  44.  
  45. renderColors();
  46.  
  47. function eventListener(event) {
  48. var elemVal = event.target.value;
  49. if (elemVal == CONST.NEW || elemVal == CONST.PREV || elemVal == CONST.PREVS) {
  50. var text = document.getElementsByName('messagetext')[0].value;
  51. //red
  52. text = text.replace(/<red>/gi, '<em><b><i>').replace(/<\/red>/gi, '</i></b></em>');
  53. //blue
  54. text = text.replace(/<blue>/gi, '<em><b><b>').replace(/<\/blue>/gi, '</b></b></em>');
  55. //gold
  56. text = text.replace(/<gold>/gi, '<em><i><b>').replace(/<\/gold>/gi, '</b></i></em>');
  57. //green
  58. text = text.replace(/<green>/gi, '<b><i><em>').replace(/<\/green>/gi, '</em></i></b>');
  59. document.getElementsByName('messagetext')[0].value = text;
  60. } else {
  61. var elemId = event.target.id;
  62. var obj = document.getElementsByName('messagetext')[0];
  63. if (elemId == BTN_ID.RED) {
  64. insertAtCaret(obj, '<red>', '</red>');
  65. } else if (elemId == BTN_ID.BLUE) {
  66. insertAtCaret(obj, '<blue>', '</blue>');
  67. } else if (elemId == BTN_ID.GOLD) {
  68. insertAtCaret(obj, '<gold>', '</gold>');
  69. } else if (elemId == BTN_ID.GREEN) {
  70. insertAtCaret(obj, '<green>', '</green>');
  71. }
  72. }
  73. }
  74.  
  75. function insertAtCaret(obj, tagOpen, tagClose) {
  76. if (obj.selectionStart) {
  77. obj.focus();
  78. var start = obj.selectionStart;
  79. var end = obj.selectionEnd;
  80. obj.value = obj.value.substr(0, start).concat(tagOpen).concat(obj.value.substr(start, end - start)).concat(tagClose).concat(obj.value.substr(end));
  81. }
  82.  
  83. if (start != null) {
  84. setCaretTo(obj, start + tagOpen.length);
  85. } else {
  86. //obj.value += text;
  87. }
  88. }
  89.  
  90. function setCaretTo(obj, pos) {
  91. if(obj.createTextRange) {
  92. var range = obj.createTextRange();
  93. range.move('character', pos);
  94. range.select();
  95. } else if(obj.selectionStart) {
  96. obj.focus();
  97. obj.setSelectionRange(pos, pos);
  98. }
  99. }
  100.  
  101. function renderColors() {
  102. var msg = document.getElementsByClassName('msg_body');
  103. if (msg.lenght != 0) {
  104. var i = 0;
  105. for (i = 0; i < msg.length; i++) {
  106. //old red
  107. 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>');
  108. //old blue
  109. msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><i><i>/gi, "<font color=#00F><b>").replace(/<\/i><\/i><\/i><\/i>/gi, '</b></font>');
  110. //old gold
  111. msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i><i>/gi, "<font color=#FC0><b>").replace(/<\/i><\/i><\/i>/gi, '</b></font>');
  112.  
  113. //old green
  114. msg[i].innerHTML = msg[i].innerHTML.replace(/<i><i>/gi, "<font color=#6C0><b>").replace(/<\/i><\/i>/gi, '</b></font>');
  115. //new red
  116. msg[i].innerHTML = msg[i].innerHTML.replace(/<em><b><i>/gi, "<font color=#F00><b>").replace(/<\/i><\/b><\/em>/gi, '</b></font>');
  117. //new blue
  118. msg[i].innerHTML = msg[i].innerHTML.replace(/<em><b><b>/gi, "<font color=#00F><b>").replace(/<\/b><\/b><\/em>/gi, '</b></font>');
  119. //new gold
  120. msg[i].innerHTML = msg[i].innerHTML.replace(/<em><i><b>/gi, "<font color=#FC0><b>").replace(/<\/b><\/i><\/em>/gi, '</b></font>');
  121.  
  122. //new green
  123. msg[i].innerHTML = msg[i].innerHTML.replace(/<b><i><em>/gi, "<font color=#6C0><b>").replace(/<\/em><\/i><\/b>/gi, '</b></font>');
  124. }
  125. }
  126. }