hwmxcharfind

fast player search from any page

  1. // ==UserScript==
  2. // @name hwmxcharfind
  3. // @namespace Demin
  4. // @description fast player search from any page
  5. // @homepage http://userscripts.org/scripts/show/92570
  6. // @version 2.00
  7. // @include http://*heroeswm.*/*
  8. // @include http://178.248.235.15/*
  9. // @include http://*freebsd-help.org/*
  10. // @include http://*heroes-wm.*/*
  11. // @include http://*hommkingdoms.info/*
  12. // @include http://*hmmkingdoms.com/*
  13. // @include http://*герои.рф/*
  14. // @include http://*.lordswm.*/*
  15. // @exclude */ch_box.php*
  16. // @exclude */chatonline.php*
  17. // @exclude */chat_line.php*
  18. // @exclude */chatpost.php*
  19. // @exclude */chat.php*
  20. // @exclude */ticker.html*
  21. // ==/UserScript==
  22.  
  23. // (c) 2011, demin (http://www.heroeswm.ru/pl_info.php?id=15091)
  24.  
  25. var version = '2.00';
  26.  
  27. var script_num = 92570;
  28. var script_name = 'HWM mod - Char Find (by Demin)';
  29. var string_upd = /92570=(\d+\.\d+)/;
  30.  
  31. var url_cur = location.href;
  32. var url = 'http://'+location.hostname+'/';
  33.  
  34. try {
  35.  
  36. if (!this.GM_getValue || (this.GM_getValue.toString && this.GM_getValue.toString().indexOf("not supported")>-1)) {
  37. this.GM_getValue=function (key,def) {
  38. return localStorage[key] || def;
  39. };
  40. this.GM_setValue=function (key,value) {
  41. return localStorage[key]=value;
  42. };
  43. this.GM_deleteValue=function (key) {
  44. return delete localStorage[key];
  45. };
  46. }
  47.  
  48. if ((tag('body'))[0]) {
  49.  
  50. var text_find, text_go1, text_go2, text_go3;
  51.  
  52. if (url.match('lordswm')) {
  53. text_find = 'Character/clan search';
  54. text_go1 = 'Character name: ';
  55. text_go2 = 'Character ID: ';
  56. text_go3 = 'Clan ID: ';
  57. } else {
  58. text_find = 'Поиск персонажа/клана';
  59. text_go1 = 'Имя персонажа: ';
  60. text_go2 = 'ID персонажа: ';
  61. text_go3 = 'ID клана: ';
  62. }
  63.  
  64. var alla = document.getElementsByTagName('img');
  65. var got = false;
  66.  
  67. for (var i=0; i<alla.length; i++) {
  68. // if (i>7) {break;}
  69. if (alla[i].src.indexOf('logo_') >= 0) {
  70. if (alla[i].parentNode.tagName == 'A') {
  71. got = alla[i];
  72. break;
  73. }
  74. }
  75. }
  76.  
  77. if (got) {
  78.  
  79. var newdiv = document.createElement('div');
  80. with (newdiv.style) {
  81. visibility = 'hidden';
  82. position = 'absolute';
  83. borderStyle = 'solid';
  84. borderColor = '#000000';
  85. borderWidth = '2px';
  86. padding = '0px';
  87. zIndex = '3';
  88. left = '0';
  89. top = '0';
  90. }
  91.  
  92. newdiv.innerHTML = '<table cellspacing=4 cellpadding=0 bgcolor="#f5f3ea">'+
  93. '<tr><td><center><b>'+text_find+'</b></center></td></tr>'+
  94. '<tr><td>'+text_go1+'</td></tr>'+
  95. '<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=text id="hwm_s_name" value="" maxlength="20"> <input type="submit" id="hwm_s_name_ok" value="&darr;"> <input type="submit" id="hwm_s_name_ok2" value="&uarr;"></td></tr>'+
  96. '<tr><td>'+text_go2+'</td></tr>'+
  97. '<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=text id="hwm_s_id" value="" maxlength="20"> <input type="submit" id="hwm_s_id_ok" value="&darr;"> <input type="submit" id="hwm_s_id_ok2" value="&uarr;"></td></tr>'+
  98. '<tr><td>'+text_go3+'</td></tr>'+
  99. '<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=text id="hwm_s_clanid" value="" maxlength="20"> <input type="submit" id="hwm_s_clanid_ok" value="&darr;"> <input type="submit" id="hwm_s_clanid_ok2" value="&uarr;"></td></tr>'+
  100. '</table>';
  101. document.body.appendChild(newdiv);
  102.  
  103. addEvent($("hwm_s_name_ok"), "click", hwm_s_name_f);
  104. addEvent($("hwm_s_name_ok2"), "click", hwm_s_name_f2);
  105. addEvent($("hwm_s_id_ok"), "click", hwm_s_id_f);
  106. addEvent($("hwm_s_id_ok2"), "click", hwm_s_id_f2);
  107. addEvent($("hwm_s_clanid_ok"), "click", hwm_s_clanid_f);
  108. addEvent($("hwm_s_clanid_ok2"), "click", hwm_s_clanid_f2);
  109.  
  110. addEvent($("hwm_s_name"), "keypress", handleKeys1);
  111. addEvent($("hwm_s_id"), "keypress", handleKeys2);
  112. addEvent($("hwm_s_clanid"), "keypress", handleKeys3);
  113.  
  114. //got.parentNode.href = '/search.php';
  115. got.parentNode.addEventListener('click', function(e) {
  116. e.preventDefault();
  117. if (newdiv.style.visibility == 'hidden') {
  118. newdiv.style.left = e.clientX + 5;
  119. newdiv.style.top = e.clientY + 5;
  120. newdiv.style.visibility = 'visible';
  121. } else {
  122. newdiv.style.visibility = 'hidden';
  123. }
  124. }, false);
  125.  
  126. }
  127.  
  128. }
  129.  
  130. } finally { update_n() }
  131.  
  132. function hwm_s_name_f()
  133. {
  134. if (($("hwm_s_name").value.length)>=3) {
  135. window.location = url + 'pl_info.php?nick=' + urlEncode($("hwm_s_name").value);
  136. newdiv.style.visibility = 'hidden';
  137. }
  138. }
  139. function hwm_s_name_f2()
  140. {
  141. if (($("hwm_s_name").value.length)>=3) {
  142. window.open(url + 'pl_info.php?nick=' + urlEncode($("hwm_s_name").value), "_blank");
  143. newdiv.style.visibility = 'hidden';
  144. }
  145. }
  146. function hwm_s_id_f()
  147. {
  148. if (Number($("hwm_s_id").value)>=1 && ($("hwm_s_id").value.length)>=1) {
  149. window.location = url + 'pl_info.php?id=' + ($("hwm_s_id").value);
  150. newdiv.style.visibility = 'hidden';
  151. }
  152. }
  153. function hwm_s_id_f2()
  154. {
  155. if (Number($("hwm_s_id").value)>=1 && ($("hwm_s_id").value.length)>=1) {
  156. window.open(url + 'pl_info.php?id=' + ($("hwm_s_id").value), "_blank");
  157. newdiv.style.visibility = 'hidden';
  158. }
  159. }
  160. function hwm_s_clanid_f()
  161. {
  162. if (Number($("hwm_s_clanid").value)>=0 && ($("hwm_s_clanid").value.length)>=1) {
  163. window.location = url + 'clan_info.php?id=' + ($("hwm_s_clanid").value);
  164. newdiv.style.visibility = 'hidden';
  165. }
  166. }
  167. function hwm_s_clanid_f2()
  168. {
  169. if (Number($("hwm_s_clanid").value)>=0 && ($("hwm_s_clanid").value.length)>=1) {
  170. window.open(url + 'clan_info.php?id=' + ($("hwm_s_clanid").value), "_blank");
  171. newdiv.style.visibility = 'hidden';
  172. }
  173. }
  174.  
  175. function handleKeys1(e)
  176. {
  177. var evt = (e) ? e : window.event; //IE reports window.event not arg
  178. var c = (evt.charCode) ? evt.charCode : evt.keyCode;
  179. if(c == 13) {
  180. hwm_s_name_f();
  181. return;
  182. }
  183. }
  184. function handleKeys2(e)
  185. {
  186. var evt = (e) ? e : window.event; //IE reports window.event not arg
  187. var c = (evt.charCode) ? evt.charCode : evt.keyCode;
  188. if(c == 13) {
  189. hwm_s_id_f()
  190. return;
  191. }
  192. }
  193. function handleKeys3(e)
  194. {
  195. var evt = (e) ? e : window.event; //IE reports window.event not arg
  196. var c = (evt.charCode) ? evt.charCode : evt.keyCode;
  197. if(c == 13) {
  198. hwm_s_clanid_f()
  199. return;
  200. }
  201. }
  202.  
  203. function urlEncode(str) {
  204. // Простая проверка
  205. if (!str || typeof(str) == "undefined") return;
  206. // Создаем хеш для хранения символов, где ключ - сам символ,
  207. // а значение - его шестнадцатеричеый эквивалент
  208. var utf8Array = {};
  209. // Сначала добавляем стандартные 255 символов
  210. var i = j = j2 = 0;
  211. for (i = 0; i <= 255; i++) {
  212. j = parseInt(i/16); var j2 = parseInt(i%16);
  213. utf8Array[String.fromCharCode(i)] = ('%' + j.toString(16) + j2.toString(16)).toUpperCase();
  214. }
  215. // И отдельно проработаем кириллицу
  216. var rusAdditional = {
  217. '_' : '%5F', 'А' : '%C0', 'Б' : '%C1', 'В' : '%C2', 'Г' : '%C3', 'Д' : '%C4', 'Е' : '%C5',
  218. 'Ж' : '%C6', 'З' : '%C7', 'И' : '%C8', 'Й' : '%C9', 'К' : '%CA', 'Л' : '%CB', 'М' : '%CC',
  219. 'Н' : '%CD', 'О' : '%CE', 'П' : '%CF', 'Р' : '%D0', 'С' : '%D1', 'Т' : '%D2', 'У' : '%D3',
  220. 'Ф' : '%D4', 'Х' : '%D5', 'Ц' : '%D6', 'Ч' : '%D7', 'Ш' : '%D8', 'Щ' : '%D9', 'Ъ' : '%DA',
  221. 'Ы' : '%DB', 'Ь' : '%DC', 'Э' : '%DD', 'Ю' : '%DE', 'Я' : '%DF', 'а' : '%E0', 'б' : '%E1',
  222. 'в' : '%E2', 'г' : '%E3', 'д' : '%E4', 'е' : '%E5', 'ж' : '%E6', 'з' : '%E7', 'и' : '%E8',
  223. 'й' : '%E9', 'к' : '%EA', 'л' : '%EB', 'м' : '%EC', 'н' : '%ED', 'о' : '%EE', 'п' : '%EF',
  224. 'р' : '%F0', 'с' : '%F1', 'т' : '%F2', 'у' : '%F3', 'ф' : '%F4', 'х' : '%F5', 'ц' : '%F6',
  225. 'ч' : '%F7', 'ш' : '%F8', 'щ' : '%F9', 'ъ' : '%FA', 'ы' : '%FB', 'ь' : '%FC', 'э' : '%FD',
  226. 'ю' : '%FE', 'я' : '%FF', 'ё' : '%B8', 'Ё' : '%A8'
  227. }
  228. for (i in rusAdditional) utf8Array[i] = rusAdditional[i];
  229. // Посимвольно заменяем символы на их шестнадцатиречные эквиваленты
  230. var res = "";
  231. for(i = 0; i < str.length; i++) {
  232. var simbol = str.substr(i,1);
  233. res += typeof utf8Array[simbol] != "undefined" ? utf8Array[simbol] : simbol;
  234. }
  235. // Пробелы заменяем на плюсы
  236. // res = res.replace(/\s/g, "+");
  237. //alert(res);
  238. return res;
  239. }
  240.  
  241. function $( id ) { return document.getElementById( id ); }
  242.  
  243. function tag( id ) { return document.getElementsByTagName( id ); }
  244.  
  245. function addEvent(elem, evType, fn) {
  246. if (elem.addEventListener) {
  247. elem.addEventListener(evType, fn, false);
  248. }
  249. else if (elem.attachEvent) {
  250. elem.attachEvent("on" + evType, fn)
  251. }
  252. else {
  253. elem["on" + evType] = fn
  254. }
  255. }
  256.  
  257. function createXMLHttpReq(rndm)
  258. {
  259. var objXMLHttpReq;
  260. if (window.XMLHttpRequest)
  261. {
  262. // Real browsers ;)
  263. //
  264. objXMLHttpReq = new XMLHttpRequest();
  265. }
  266. else if (window.ActiveXObject)
  267. {
  268. // IE
  269. //
  270. objXMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
  271. }
  272. return objXMLHttpReq;
  273. }
  274.  
  275. function update_n() {
  276. if ( (parseInt(GM_getValue('last_update', '0')) + 86400000 <= (new Date().getTime())) || (parseInt(GM_getValue('last_update', '0')) > (new Date().getTime())) ) {
  277. var objXMLHttpReqUpd = createXMLHttpReq(Math.random()* 1000000);
  278. objXMLHttpReqUpd.open('GET', url + 'photo_pl_photos.php?aid=1777' + '&rand=' + (Math.random()* 1000000), true);
  279. objXMLHttpReqUpd.onreadystatechange = function() { update(objXMLHttpReqUpd); }
  280. objXMLHttpReqUpd.send(null);
  281. }
  282. }
  283. function update(obj) {
  284. if (obj.readyState == 4 && obj.status == 200) {
  285. var update_text1 = '\n\n\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 Greasemonkey \u0441\u043A\u0440\u0438\u043F\u0442\u0430 "';
  286. var update_text2 = '".\n\u0425\u043E\u0442\u0438\u0442\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u0443\u044E \u0432\u0435\u0440\u0441\u0438\u044E?';
  287. var remote_version, rt;rt=obj.responseText;GM_setValue('last_update', ''+new Date().getTime());remote_version=string_upd.exec(rt)[1];if(version!=-1){if (remote_version > version) setTimeout(function() { if(confirm('There is an update available for the Greasemonkey script "'+script_name+'".\nWould you like to go to the install page now?'+update_text1+script_name+update_text2)){window.open('http://userscripts.org/scripts/show/'+script_num, '_blank')} }, 100) }}
  288. }