hwm_clan_filter

Сортировка состава клана (by LazyGreg & Demin)

目前为 2015-03-27 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name hwm_clan_filter
  3. // @author Demin
  4. // @namespace Demin
  5. // @description Сортировка состава клана (by LazyGreg & Demin)
  6. // @homepage https://greasyfork.org/users/1602-demin
  7. // @icon http://i.imgur.com/LZJFLgt.png
  8. // @version 1.2
  9. // @encoding utf-8
  10. // @include http://*heroeswm.ru/clan_info.php*
  11. // @include http://178.248.235.15/clan_info.php*
  12. // @include http://*lordswm.com/clan_info.php*
  13. // @grant GM_deleteValue
  14. // @grant GM_getValue
  15. // @grant GM_listValues
  16. // @grant GM_setValue
  17. // @grant GM_addStyle
  18. // @grant GM_log
  19. // @grant GM_openInTab
  20. // ==/UserScript==
  21.  
  22. // (c) 2015, demin ( http://www.heroeswm.ru/pl_info.php?id=15091 )
  23. // (c) 2009, LazyGreg
  24.  
  25. (function() {
  26.  
  27. var version = '1.2';
  28.  
  29.  
  30. if (typeof GM_getValue != 'function') {
  31. this.GM_getValue=function (key,def) {return localStorage[key] || def;};
  32. this.GM_setValue=function (key,value) {return localStorage[key]=value;};
  33. this.GM_deleteValue=function (key) {return delete localStorage[key];};
  34. }
  35.  
  36.  
  37. var script_num = 8811;
  38. var script_name = "hwm_clan_filter: Сортировка состава клана (by LazyGreg & Demin)";
  39. update_n(version,script_num,script_name);
  40.  
  41. var url_cur = location.href;
  42. var url = 'http://'+location.hostname+'/';
  43.  
  44.  
  45. var clan_online = document.querySelectorAll("img[src$='clans/online.gif']");
  46. var clan_offline = document.querySelectorAll("img[src$='clans/offline.gif']");
  47.  
  48. if ( clan_offline[1] ) {
  49. var clan_table = clan_offline[1].parentNode;
  50. } else if ( clan_online[1] ) {
  51. var clan_table = clan_online[1].parentNode;
  52. }
  53.  
  54. if ( !clan_table ) return;
  55. while ( clan_table.tagName != 'TABLE' ) { clan_table = clan_table.parentNode; }
  56.  
  57. var clanRowsNodes_arr = clan_table.childNodes[0].childNodes;
  58. //alert("clan members = "+clanRowsNodes_arr.length);
  59.  
  60. //alert("my_node = "+clanRowsNodes_arr[0].childNodes[2].childNodes[3]);
  61. //alert("my_node = "+clanRowsNodes_arr[0].childNodes[2].childNodes[5].innerHTML);
  62.  
  63. // tech: 1-bk, 3-name, 5 fract
  64. // batl: 1-name, 3 fract
  65.  
  66. var sortTable_div = clan_table.cloneNode(false);
  67. sortTable_div.innerHTML = "temp text, should not be seen";
  68. clan_table.parentNode.insertBefore(sortTable_div, clan_table);
  69.  
  70. // sorting flags
  71. var doSort1 = false;
  72. var doSort2 = false; // status
  73. var doSort_bk = false; //bk
  74. var doSort_fr = false; //fraction
  75. var doSort3 = false; // name
  76. var doSort4 = false; // level
  77. var doSort5 = false; // descr
  78.  
  79. var isBattleClan = ( clan_table.innerHTML.indexOf("clan_info.php")==-1 );
  80.  
  81. addSortTable();
  82.  
  83. // bk name fract descr Lv
  84. // \u0411\u041A \u0418\u043C\u044F \u0424\u0440\u0430\u043A\u0446\u0438\u044F \u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u041B\u0432
  85.  
  86. function addSortTable(){
  87. //var link_sort1 = '<a href="javascript:void(0);" id="clanTblSort1" style="background:'+(doSort1?"#6c6":"none")+';">[#]</a>';
  88. var link_sort1 = '#';
  89. var link_sort2 = '<a href="javascript:void(0);" id="clanTblSort2" style="background:'+(doSort2?"#6c6":"none")+';">C</a>';
  90. var link_sort_bk = '<a href="javascript:void(0);" id="clanTblSort_bk" style="background:'+(doSort_bk?"#6c6":"none")+';">[\u0411\u041A]</a>&nbsp;&nbsp;';
  91. link_sort_bk = isBattleClan? "" : link_sort_bk;
  92. var link_sort3 = '<a href="javascript:void(0);" id="clanTblSort3" style="background:'+(doSort3?"#6c6":"none")+';">[\u0418\u043C\u044F]</a>';
  93. var link_sort_fr = '&nbsp;&nbsp;<a href="javascript:void(0);" id="clanTblSort_fr" style="background:'+(doSort_fr?"#6c6":"none")+';">[\u0424\u0440\u0430\u043A\u0446]</a>';
  94. var link_sort4 = '<a href="javascript:void(0);" id="clanTblSort4" style="background:'+(doSort4?"#6c6":"none")+';">\u041B\u0432</a>';
  95. var link_sort5 = '<a href="javascript:void(0);" id="clanTblSort5" style="background:'+(doSort5?"#6c6":"none")+';">[\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435]</a>';
  96.  
  97. var sortHeaders = '<tr>'+
  98. '<td class=wblight width=30><b>'+ link_sort1 +'</b></td>'+
  99. '<td class=wblight width=15><b>'+ link_sort2 +'</b></td>'+
  100. '<td class=wblight width=150><b>'+ link_sort_bk+ link_sort3 +link_sort_fr +'</b></td>'+
  101. '<td class=wblight width=10><b>'+ link_sort4 +'</b></td>'+
  102. '<td class=wblight><b>'+ link_sort5 +'</b></td>'+
  103. '</tr>';
  104.  
  105. var sortedRows = getSortedRows();
  106.  
  107. sortTable_div.innerHTML = '<table class=wb width="80%" cellpadding=3 align=center>'+ sortHeaders +sortedRows+ '</table>';
  108.  
  109. //sortTable_div.innerHTML += "<hr width='50%'>";
  110.  
  111. // add listeners
  112. //document.getElementById('clanTblSort1').addEventListener( "click", clanTblSort1 , false );
  113. document.getElementById('clanTblSort2').addEventListener( "click", clanTblSort2 , false );
  114. if(!isBattleClan){
  115. document.getElementById('clanTblSort_bk').addEventListener( "click", clanTblSort_bk , false );
  116. }
  117. document.getElementById('clanTblSort_fr').addEventListener( "click", clanTblSort_fr , false );
  118. document.getElementById('clanTblSort3').addEventListener( "click", clanTblSort3 , false );
  119. document.getElementById('clanTblSort4').addEventListener( "click", clanTblSort4 , false );
  120. document.getElementById('clanTblSort5').addEventListener( "click", clanTblSort5 , false );
  121.  
  122.  
  123. if(!doSort1 && !doSort2 && !doSort3 && !doSort_bk && !doSort_fr && !doSort4 & !doSort5){ // NO filters
  124. clan_table.style.display = "";
  125. }else{
  126. // hide default table
  127. clan_table.style.display = "none";
  128. }
  129. }
  130.  
  131. function getSortedRows(){
  132. //var rows_str = clanRows_arr[0].innerHTML ;
  133. var rows_str = "" ;
  134. if(!doSort1 && !doSort2 && !doSort3 && !doSort_bk && !doSort_fr && !doSort4 & !doSort5){ return rows_str; } // NO filters
  135. //
  136. var clanRowsStr_arr = [];
  137. for(var i=0; i<clanRowsNodes_arr.length; i++){
  138. clanRowsStr_arr.push( [i, clanRowsNodes_arr[i].innerHTML] );
  139. }
  140. //
  141. //clanRowsStr_arr.reverse();
  142. clanRowsStr_arr.sort(mySort4Clan);
  143. //
  144. for(i=0; i<clanRowsStr_arr.length; i++){
  145. rows_str += "<tr>" +clanRowsStr_arr[i][1] +"</tr>";
  146. }
  147. return rows_str;
  148. }
  149.  
  150. function mySort4Clan(a,b){
  151. var ax, bx;
  152. var tn;
  153. var res = 0;
  154. // sort according to priority... from less to max
  155. // 1st - sort by num...
  156. ax = Number(clanRowsNodes_arr[a[0]].childNodes[0].innerHTML);
  157. bx = Number(clanRowsNodes_arr[b[0]].childNodes[0].innerHTML);
  158. res = (ax<bx)? -1 :(ax>bx)? 1 : 0;
  159. //
  160. if(doSort5){ //descr
  161. ax = clanRowsNodes_arr[a[0]].childNodes[4].innerHTML;
  162. bx = clanRowsNodes_arr[b[0]].childNodes[4].innerHTML;
  163. if(ax=="&nbsp;&nbsp;" && bx!="&nbsp;&nbsp;"){
  164. res = 1;
  165. }else if(ax!="&nbsp;&nbsp;" && bx=="&nbsp;&nbsp;"){
  166. res = -1;
  167. }else{
  168. res = (ax<bx)? -1 :(ax>bx)? 1 : res;
  169. }
  170. }
  171. //
  172. if(doSort_bk && !isBattleClan){ //BK
  173. ax = clanRowsNodes_arr[a[0]].childNodes[2].childNodes[1].innerHTML;
  174. bx = clanRowsNodes_arr[b[0]].childNodes[2].childNodes[1].innerHTML;
  175. res = (ax<bx)? -1 :(ax>bx)? 1 : res;
  176. }
  177. //
  178. if(doSort_fr ){ // fract
  179. tn = isBattleClan? 3: 5;
  180. if(isBattleClan || clanRowsNodes_arr[a[0]].childNodes[2].innerHTML.indexOf("clan_info.php")!=-1){
  181. ax = clanRowsNodes_arr[a[0]].childNodes[2].childNodes[tn].title;
  182. }else{
  183. ax = clanRowsNodes_arr[a[0]].childNodes[2].childNodes[3].title;
  184. }
  185. if(isBattleClan || clanRowsNodes_arr[b[0]].childNodes[2].innerHTML.indexOf("clan_info.php")!=-1){
  186. bx = clanRowsNodes_arr[b[0]].childNodes[2].childNodes[tn].title;
  187. }else{
  188. bx = clanRowsNodes_arr[b[0]].childNodes[2].childNodes[3].title;
  189. }
  190. res = (ax<bx)? -1 :(ax>bx)? 1 : res;
  191. }
  192. //
  193. if(doSort3 ){ //name
  194. tn = isBattleClan? 1: 3;
  195. if(isBattleClan || clanRowsNodes_arr[a[0]].childNodes[2].innerHTML.indexOf("clan_info.php")!=-1){
  196. ax = clanRowsNodes_arr[a[0]].childNodes[2].childNodes[tn].innerHTML.toLowerCase();
  197. }else{
  198. ax = clanRowsNodes_arr[a[0]].childNodes[2].childNodes[1].innerHTML.toLowerCase();
  199. }
  200. if(isBattleClan || clanRowsNodes_arr[b[0]].childNodes[2].innerHTML.indexOf("clan_info.php")!=-1){
  201. bx = clanRowsNodes_arr[b[0]].childNodes[2].childNodes[tn].innerHTML.toLowerCase();
  202. }else{
  203. bx = clanRowsNodes_arr[b[0]].childNodes[2].childNodes[1].innerHTML.toLowerCase();
  204. }
  205. res = (ax<bx)? -1 :(ax>bx)? 1 : res;
  206. }
  207. //
  208. if(doSort4){ //level descending
  209. ax = Number(clanRowsNodes_arr[a[0]].childNodes[3].innerHTML);
  210. bx = Number(clanRowsNodes_arr[b[0]].childNodes[3].innerHTML);
  211. res = (ax<bx)? 1 :(ax>bx)? -1 : res;
  212. }
  213. //
  214. if(doSort2){ //status
  215. ax = clanRowsNodes_arr[a[0]].childNodes[1].innerHTML;
  216. bx = clanRowsNodes_arr[b[0]].childNodes[1].innerHTML;
  217. if(ax.indexOf("i/clans/offline.gif")==-1 && bx.indexOf("i/clans/offline.gif")!=-1 ){
  218. res = -1;
  219. }else if(ax.indexOf("i/clans/offline.gif")!=-1 && bx.indexOf("i/clans/offline.gif")==-1 ){
  220. res = 1;
  221. }else { res = (ax<bx)? -1 :(ax>bx)? 1 : res; }
  222. }
  223. //
  224. //
  225. return res;
  226. }
  227.  
  228. // listeners
  229. function clanTblSort1(){ doSort1 = !doSort1; addSortTable(); }
  230. function clanTblSort2(){ doSort2 = !doSort2; addSortTable(); }
  231. function clanTblSort_bk(){ doSort_bk = !doSort_bk; addSortTable(); }
  232. function clanTblSort_fr(){ doSort_fr = !doSort_fr; addSortTable(); }
  233. function clanTblSort3(){ doSort3 = !doSort3; addSortTable(); }
  234. function clanTblSort4(){ doSort4 = !doSort4; addSortTable(); }
  235. function clanTblSort5(){ doSort5 = !doSort5; addSortTable(); }
  236.  
  237. function $(id) { return document.querySelector("#"+id); }
  238.  
  239. function addEvent(elem, evType, fn) {
  240. if (elem.addEventListener) {
  241. elem.addEventListener(evType, fn, false);
  242. }
  243. else if (elem.attachEvent) {
  244. elem.attachEvent("on" + evType, fn);
  245. }
  246. else {
  247. elem["on" + evType] = fn;
  248. }
  249. }
  250.  
  251. function update_n(a,b,c,d,e){if(e){e++}else{e=1;d=(Number(GM_getValue(b+'_update_script_last2','0'))||0)}if(e>3){return}var f=new Date().getTime();var g=document.querySelector('#update_demin_script2');if(g){if((d+86400000<f)||(d>f)){g=g.innerHTML;if(/100000=1.1/.exec(g)){var h=new RegExp(b+'=(\\d+\\.\\d+)=(\\d+)').exec(g);var i=/url7=([^%]+)/.exec(g);if(a&&h&&i){if(Number(h[1])>Number(a))setTimeout(function(){if(confirm('\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u043A\u0440\u0438\u043F\u0442\u0430: "'+c+'".\n\u0423\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 \u0441\u0435\u0439\u0447\u0430\u0441?\n\nThere is an update available for the script: "'+c+'".\nWould you like install the script now?')){if(typeof GM_openInTab=='function'){GM_openInTab(i[1].replace(/\s/g,'')+h[2])}else{window.open(i[1].replace(/\s/g,'')+h[2],'_blank')}}},500)}GM_setValue(b+'_update_script_last2',''+f)}else{setTimeout(function(){update_n(a,b,c,d,e)},1000)}}}else{var j=document.querySelector('body');if(j){var k=GM_getValue(b+'_update_script_array2');if(e==1&&((d+86400000<f)||(d>f)||!k)){if(k){GM_deleteValue(b+'_update_script_array2')}setTimeout(function(){update_n(a,b,c,d,e)},1000);return}var l=document.createElement('div');l.id='update_demin_script2';l.setAttribute('style','position: absolute; width: 0px; height: 0px; top: 0px; left: 0px; display: none;');l.innerHTML='';j.appendChild(l);if((d+86400000<f)||(d>f)||!k){var m=new XMLHttpRequest();m.open('GET','photo_pl_photos.php?aid=1777'+'&rand='+(Math.random()*100),true);m.onreadystatechange=function(){update(m,a,b,c,d,e)};m.send(null)}else{document.querySelector('#update_demin_script2').innerHTML=k;setTimeout(function(){update_n(a,b,c,d,e)},10)}}}}function update(a,b,c,d,e,f){if(a.readyState==4&&a.status==200){a=a.responseText;var g=/(\d+=\d+\.\d+(=\d+)*)/g;var h='';var i=/(url7=[^%]+\%)/.exec(a);if(i){h+=i[1]}while((i=g.exec(a))!=null){if(h.indexOf(i[1])==-1){h+=' '+i[1]}};GM_setValue(c+'_update_script_array2',''+h);var j=document.querySelector('#update_demin_script2');if(j){j.innerHTML=h;setTimeout(function(){update_n(b,c,d,e,f)},10)}}}
  252.  
  253. })();