LNK_clanSort

Сортировка списка клана

目前為 2022-05-30 提交的版本,檢視 最新版本

// ==UserScript==
// @name        LNK_clanSort
// @author      NemoMan
// @namespace   LNK
// @description Сортировка списка клана
// @include     *heroeswm.ru/clan_info.php*
// @version     1.2
// @grant          none
// ==/UserScript==

(function() {
	'use strict';

 	var table, sortedRows, elems, paramTbl;
	var i;
    var iventCount = false;

    function compareIvent(rowA, rowB) {
        var a = rowA.cells[5].innerHTML.replace(/ *\([^)]*\) */g, "").replace(/[\D]+/g,'');
        var b = rowB.cells[5].innerHTML.replace(/ *\([^)]*\) */g, "").replace(/[\D]+/g,'');
        //rowB.cells[0].innerHTML = b;
        return b-a ;
    }
    
    function compareOrder(rowA, rowB) {
        var a = rowA.cells[0].innerHTML.replace(/[\D]+/g,'');
        var b = rowB.cells[0].innerHTML.replace(/[\D]+/g,'');
        return a-b ;
    }
    
    function compareLevel(rowA, rowB) {
        var a = rowA.cells[3].innerHTML.replace(/[\D]+/g,'');
        var b = rowB.cells[3].innerHTML.replace(/[\D]+/g,'');
        return a-b ;
    }
    
    function compareFrac(rowA, rowB) {
        var s = rowA.cells[2].innerHTML;
        var n1 = s.indexOf('dcdn.');
        var a = s.slice(n1,s.indexOf('?',n1)).replace(/[\D]+/g,'');
        s = rowB.cells[2].innerHTML;
        n1 = s.indexOf('dcdn.');
        var b = s.slice(n1,s.indexOf('?',n1)).replace(/[\D]+/g,'');
        return a-b ;
    }
    
    function compareAbc(rowA, rowB) {
        var s = rowA.cells[2].innerHTML;
        var a = s.slice(s.indexOf('class="pi">')+11,s.indexOf('</a>')).toLowerCase();
        s = rowB.cells[2].innerHTML;
        var b = s.slice(s.indexOf('class="pi">')+11,s.indexOf('</a>')).toLowerCase();
        if (a < b) { return -1; }
        else { return 1; }
    }
    
    function sortIvent() {
        sortedRows = Array.from(table.rows)
        .sort(compareIvent);
        table.tBodies[0].append(...sortedRows);
        elems = table.rows;
        if (!iventCount) {
            for (i = 0; i < elems.length; i++) {
                elems[i].cells[5].innerHTML = elems[i].cells[5].innerHTML + ' (' + (i+1) + ')';
                elems[i].cells[5].width = '100px';
            }
            iventCount = true;
        }
    }

    function sortOrder() {
        sortedRows = Array.from(table.rows).sort(compareOrder);
        table.tBodies[0].append(...sortedRows);
    }

    function sortLevel() {
        sortedRows = Array.from(table.rows).sort(compareLevel);
        table.tBodies[0].append(...sortedRows);
    }

    function sortFrac() {
        sortedRows = Array.from(table.rows).sort(compareFrac);
        table.tBodies[0].append(...sortedRows);
    }

    function sortAbc() {
        sortedRows = Array.from(table.rows).sort(compareAbc);
        table.tBodies[0].append(...sortedRows);
    }

    function sortInitial() {
        sortIvent();
        sortOrder();
    }

    function sortClan() {
        switch (document.getElementById('selSort').value) {
            case 'num': sortOrder(); break;
            case 'ivent': sortIvent(); break;    
            case 'frac': sortFrac(); break;    
            case 'abc': sortAbc(); break;    
            case 'level': sortLevel(); break;    
        }
    }

    if (location.href.indexOf('clan_info.php') != -1) { // страница инфы клана со списком
		var elements = document.querySelectorAll("table");
        for ( i = 0; i < elements.length; i++) {
            if (elements[i].rows.length > 99) {
                //alert(elements[i].rows.length);
                table = elements[i]; 
                break;
            }
        }
 		paramTbl = document.createElement('table');
		paramTbl.innerHTML =
			'<tbody> '+
				'<tr> '+
					//'<td align="left"> <input type="button" id="butSortOrder" value="Сортировать по порядку" /></td>'+
					//'<td align="right"> <input type="button" id="butSortIvent" value="Сортировать по очкам в ивенте" /></td>'+
                    `<td>Сортировать список клана: <select id="selSort">
                            <option value="num" selected>По порядку номеров</option>
                            <option value="ivent">По очкам в ивенте</option>
                            <option value="level">По уровню героя</option>
                            <option value="abc">По нику (+БК) героя</option>
                            <option value="frac">По фракции героя</option>
                     </select></td>`+
				'</tr> '+
			'</tbody>';
		paramTbl.id="paramTbl";
		paramTbl.align="left";
		paramTbl.width="100%";
		paramTbl.style.borderCollapse = 'collapse';
		paramTbl.setAttribute('border',2);
		paramTbl.setAttribute('cellpadding',4);
		//document.body.append(paramTbl);
        table.before(paramTbl);
		document.getElementById('selSort').onchange = sortClan;
        sortInitial();
        
	}

 })();