sg farmkit

SG伐木助手

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

  1. // ==UserScript==
  2. // @name sg farmkit
  3. // @namespace com.sgamer.bbs.farmkit
  4. // @description SG伐木助手
  5. // @include http://bbs.sgamer.com/thread-*.html
  6. // @include http://bbs.sgamer.com/*mod=viewthread*
  7. // @version 1.3.4
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. var pcrr = {
  12. "枪": "枪",
  13. "弹": "弹",
  14. "性": "性",
  15. "毒": "毒",
  16. "裸": "裸",
  17. "仇": "仇",
  18. "奸": "奸",
  19. "淫": "淫"
  20. }
  21.  
  22. var rrr = {
  23. "(不共戴天之)\\*": "$1仇",
  24. "(显示器)\\*\\*": "$1杀手",
  25. "\\*(幕)": "弹$1",
  26. "(躺|火)\\*": "$1枪",
  27. "(核|炸)\\*": "$1弹",
  28. "(剧)\\*": "$1毒",
  29. "(意)\\*": "$1淫",
  30. "(汉)\\*": "$1奸",
  31. "\\*(情|格|感|别|取向|质)": "性$1",
  32. "\\*(龙|镖|瘤|奶|狗|素)": "毒$1",
  33. "\\*(恨)": "仇$1",
  34. "\\*(照)": "裸$1",
  35. "\\*(妇)": "淫$1",
  36. "\\*(臣)": "奸$1",
  37. "(任|可能|世界|历史|人|个|女|属|理|局限|专业|进攻|本|选择|关键|重要|习惯|灵)\\*": "$1性"
  38. }
  39.  
  40. var fastFormNames = ["fastpostform", "vfastpostform"];
  41.  
  42. function getCookie(c_name) {
  43. if (document.cookie.length > 0) {
  44. c_start = document.cookie.indexOf(c_name + "=");
  45. if (c_start != -1) {
  46. c_start = c_start + c_name.length + 1 ;
  47. c_end = document.cookie.indexOf(";", c_start);
  48. if (c_end == -1) {
  49. c_end = document.cookie.length;
  50. }
  51. return unescape(document.cookie.substring(c_start, c_end));
  52. }
  53. }
  54. return "";
  55. }
  56.  
  57. function setCookie (c_name, value, expiresecs) {
  58. var exdate = new Date();
  59. exdate.setSeconds(exdate.getSeconds() + expiresecs);
  60. document.cookie = c_name + "=" + escape(value) + ((expiresecs == null) ? "" : ";expires=" + exdate.toGMTString());
  61. }
  62.  
  63. function setTimeLimit() {
  64. setCookie("SG_farmkit_ifPostTimeLimit", "1", 16);
  65. }
  66.  
  67. function precensore (str) {
  68. if (str) {
  69. for (var ch in pcrr) {
  70. str = str.replace(new RegExp(ch, "ig"), pcrr[ch]);
  71. }
  72. }
  73. if (str.length < 10) {
  74. str = str + " ";
  75. }
  76. return str;
  77. }
  78.  
  79. function recoverText (str) {
  80. if (str) {
  81. for (var ch in rrr) {
  82. str = str.replace(new RegExp(ch, "ig"), rrr[ch]);
  83. }
  84. }
  85. return str;
  86. }
  87.  
  88. function precensoreFastForm(formName) {
  89. var form = document.getElementById(formName);
  90. if (form) {
  91. form.onsubmit = function (e) {
  92. this.message.value = parseurl(precensore(this.message.value));
  93. setTimeLimit();
  94. ajaxpost(formName, 'return_reply', 'return_reply', 'onerror');
  95. return false;
  96. }
  97. }
  98. }
  99.  
  100. function replaceFace(e) {
  101. var nodes = e.childNodes;
  102. for (var i = 0; i < nodes.length; i++) {
  103. if (nodes[i].nodeName && nodes[i].nodeName.toLowerCase() == "img") {
  104. var smilieid = nodes[i].getAttribute("smilieid");
  105. if (smilieid >= 85 && smilieid <= 137) {
  106. e.replaceChild(document.createTextNode("{:" + smilieid + ":}"), nodes[i]);
  107. } else if (smilieid >= 343 && smilieid <= 419) {
  108. e.replaceChild(document.createTextNode("{:6_" + smilieid + ":}"), nodes[i]);
  109. } else if (smilieid == 169 || smilieid == 177 || smilieid == 170 || smilieid == 178) {
  110. e.replaceChild(document.createTextNode("{:3_" + smilieid + ":}"), nodes[i]);
  111. } else if (smilieid >= 171 && smilieid <= 176 || smilieid >= 179 && smilieid <= 181) {
  112. e.replaceChild(document.createTextNode("{:7_" + smilieid + ":}"), nodes[i]);
  113. } else if (smilieid >= 168 && smilieid <= 276) {
  114. e.replaceChild(document.createTextNode("{:5_" + smilieid + ":}"), nodes[i]);
  115. } else {
  116. e.replaceChild(document.createTextNode("[img=" + nodes[i].width + "," + nodes[i].height + "]" + nodes[i].src + "[/img]"), nodes[i]);
  117. }
  118. }
  119. }
  120. }
  121.  
  122. (function () {
  123. document.getElementById("scrolltop").getElementsByTagName("a")[0].onclick = function () {
  124. showWindow('reply', this.href);
  125. setTimeout(function () {
  126. precensoreFastForm("postform");
  127. }, 500);
  128. return false;
  129. }
  130. })();
  131.  
  132. (function () {
  133. for (var i = 0; i < fastFormNames.length; i++) {
  134. precensoreFastForm(fastFormNames[i]);
  135. }
  136. })();
  137.  
  138. function onNeedMoreTime() {
  139. if (document.getElementById('ntcwin')) {
  140. var ntcwin = document.getElementById('ntcwin');
  141. } else {
  142. var ntcwin = document.createElement('div');
  143. ntcwin.id = "ntcwin";
  144. ntcwin.className = "popuptext";
  145. ntcwin.style.cssText = "position: fixed; z-index: 501; left: 466.5px; top: 30px; display: none;";
  146. document.getElementById("append_parent").appendChild(ntcwin);
  147. var table = document.createElement("table");
  148. table.className = "popupcredit";
  149. table.cellspacing = "0";
  150. table.cellpadding = "0";
  151. ntcwin.appendChild(table);
  152. var tr = document.createElement("tr");
  153. table.appendChild(tr);
  154. var tdl = document.createElement("td");
  155. tdl.className = "pc_l";
  156. tr.appendChild(tdl);
  157. var tdc = document.createElement("td");
  158. tdc.className = "pc_c";
  159. tr.appendChild(tdc);
  160. var tdr = document.createElement("td");
  161. tdr.className = "pc_r";
  162. tr.appendChild(tdr);
  163. var div_inner = document.createElement("div");
  164. div_inner.className = "pc_inner";
  165. tdc.appendChild(div_inner);
  166. var i_text = document.createElement("i");
  167. i_text.innerHTML = "抱歉,您两次发表间隔少于 15 秒,请稍候再发表";
  168. div_inner.appendChild(i_text);
  169. }
  170. document.getElementById('ntcwin').style.display = "block";
  171. setTimeout(function () {
  172. document.getElementById('ntcwin').style.display = "none";
  173. }, 2500);
  174. }
  175.  
  176. function fastfarm(replyStr) {
  177. if (getCookie("SG_farmkit_ifPostTimeLimit")) {
  178. onNeedMoreTime();
  179. return;
  180. }
  181. document.getElementById("fastpostmessage").value = precensore(recoverText(replyStr));
  182. setTimeLimit();
  183. document.getElementById("fastpostform").submit();
  184. }
  185.  
  186. (function () {
  187. var tt = document.title;
  188. document.title = recoverText(tt);
  189. })();
  190.  
  191. (function () {
  192. var ih = document.getElementById("thread_subject").innerHTML;
  193. document.getElementById("thread_subject").innerHTML = recoverText(ih);
  194. })();
  195.  
  196. (function () {
  197. var postlist = document.getElementById("postlist");
  198. if (postlist == null) {
  199. return;
  200. }
  201. var postNodes = postlist.childNodes;
  202. for (var i = 0, isReply = 0; i < postNodes.length; i++) {
  203. var postNode = postNodes[i];
  204. if (postNode &&
  205. postNode.getAttribute &&
  206. postNode.getAttribute("id") &&
  207. postNode.getAttribute("id").match("post_")) {
  208. var tds = postNode.getElementsByTagName("td");
  209. for (var k = 0; k < tds.length; k++) {
  210. if (tds[k].id && tds[k].id.match("postmessage_")) {
  211. tds[k].innerHTML = recoverText(tds[k].innerHTML);
  212. }
  213. }
  214. if (isReply == 1) {
  215. var divs = postNode.getElementsByTagName("div");
  216. for (var j = 0; j < divs.length; j++) {
  217. if (divs[j].className == "authi" && divs[j].parentNode.className == "pti") {
  218. var span = document.createElement("span");
  219. span.className = "pipe";
  220. span.innerHTML = "|";
  221. span.style.cssFloat = "right";
  222. span.style.lineHeight = "16px";
  223. span.style.margin = "0px 2px";
  224. divs[j].appendChild(span);
  225. divs[j].appendChild(document.createTextNode("\n"));
  226. var farmArchor = document.createElement("a");
  227. farmArchor.innerHTML = "复制伐木";
  228. farmArchor.style.color = "green";
  229. farmArchor.style.cursor = "pointer";
  230. farmArchor.style.cssFloat = "right";
  231. farmArchor.style.lineHeight = "16px";
  232. farmArchor.style.padding = "0px 6px";
  233. divs[j].appendChild(farmArchor);
  234. divs[j].appendChild(document.createTextNode("\n"));
  235. farmArchor.divPElement = divs[j];
  236. farmArchor.onclick = function () {
  237. if (getCookie("SG_farmkit_ifPostTimeLimit")) {
  238. onNeedMoreTime();
  239. return false;
  240. }
  241. var postText = "伐木伐木";
  242. var tds = this.divPElement.parentNode.parentNode.parentNode.getElementsByTagName("td");
  243. for (var k = 0; k < tds.length; k++) {
  244. if (tds[k].getAttribute("id").match("postmessage_")) {
  245. replaceFace(tds[k]);
  246. postText = (tds[k].innerText || tds[k].textContent || tds[k].text).replace(/^\s*/g, "");
  247. if (postText[0] == "\n") {
  248. postText = postText.slice(1);
  249. }
  250. break;
  251. }
  252. }
  253. fastfarm(postText);
  254. return false;
  255. }
  256. }
  257. }
  258. } else {
  259. var divs = postNode.getElementsByTagName("div");
  260. for (var j = 0; j < divs.length; j++) {
  261. if (divs[j].className == "authi" && divs[j].parentNode.className == "pti") {
  262. var span = document.createElement("span");
  263. span.className = "pipe";
  264. span.innerHTML = "|";
  265. span.style.cssFloat = "right";
  266. span.style.lineHeight = "16px";
  267. span.style.margin = "0px 2px";
  268. divs[j].appendChild(span);
  269. divs[j].appendChild(document.createTextNode("\n"));
  270. var farmArchor = document.createElement("a");
  271. var speedFarmText = document.createElement
  272. farmArchor.innerHTML = "快速伐木";
  273. farmArchor.style.cssText = "color: green; cursor: pointer; float: right; line-height: 16px; padding: 0px 6px; -moz-user-select:none; -webkit-user-select:none; user-select:none;";
  274. divs[j].appendChild(farmArchor);
  275. divs[j].appendChild(document.createTextNode("\n"));
  276. farmArchor.divPElement = divs[j];
  277. farmArchor.onclick = function () {
  278. if (getCookie("SG_farmkit_ifPostTimeLimit")) {
  279. onNeedMoreTime();
  280. return false;
  281. }
  282. var postText = "伐木伐木";
  283. var tds = this.divPElement.parentNode.parentNode.parentNode.getElementsByTagName("td");
  284. var selection = window.getSelection();
  285. var selectionText;
  286. if (selection != null && !selection.isCollapsed) {
  287. var focusNode = selection.focusNode;
  288. var focusOffset = selection.focusOffset;
  289. var anchorNode = selection.anchorNode;
  290. var anchorOffset = selection.anchorOffset
  291. replaceFace(selection.anchorNode.parentNode);
  292. selection.collapse(anchorNode, anchorOffset);
  293. selection.extend(focusNode, focusOffset);
  294. selectionText = selection.toString();
  295. }
  296. if (selectionText != null && selectionText.length > 0) {
  297. postText = selectionText;
  298. fastfarm(postText);
  299. return false;
  300. }
  301. for (var k = 0; k < tds.length; k++) {
  302. if (tds[k].getAttribute("id").match("postmessage_")) {
  303. replaceFace(tds[k]);
  304. postText = (tds[k].innerText || tds[k].textContent || tds[k].text)
  305. .replace(/(^\s*)|(\s*$)/g, "").split("\n").pop();
  306. if (postText[0] == "\n") {
  307. postText = postText.slice(1);
  308. }
  309. break;
  310. }
  311. }
  312. fastfarm(postText);
  313. return false;
  314. }
  315. }
  316. }
  317. isReply = 1;
  318. }
  319. }
  320. }
  321. })();