梅林快捷助手

在梅林固件中调整菜单项,以及为无线用户排序

// ==UserScript==
// @name         梅林快捷助手
// @namespace    http://yonsm.net/
// @version      1.0.2
// @description  在梅林固件中调整菜单项,以及为无线用户排序
// @author       Yonsm
// @include      https://r*/*.asp
// @run-at       document-end.
// @grant        none
// ==/UserScript==


(function() {
    //'use strict';

setTimeout(function() {

    var mainMenu = document.getElementById('mainMenu');
    if (mainMenu == null) {
        console.log('未找到梅林菜单');
        return;
    }

    var container = mainMenu.lastChild;
    var menus = container.children;
    var count = menus.length;
    var j = 0;
    while (j < count && menus[++j].id != 'index_menu');

    // 无线用户
    var div = document.createElement('div');
    div.innerHTML = '<div class="menu" onclick="goToPage(24, 0, this);" title="Main_WStatus_Content.asp" id="Main_WStatus_Content_menu"><table><tbody><tr><td><div class="menu_Icon menu_Wireless"></div></td><td class="menu_Desc">无线用户</td></tr></tbody></table></div>';
    container.insertBefore(div.firstChild, menus[++j]);
    count++;

    // 往前移动
    var favorites = ['Advanced_Wireless_Content_menu', 'Advanced_WAN_Content_menu', 'Advanced_LAN_Content_menu', 'Advanced_OperationMode_Content_menu'];
    for (var i = ++j; i < count; i++) {
        var menu = menus[j];
        if (menu.className == 'menu_Split') {
            break;
        }
        menu.remove();
        container.insertBefore(menu, menus[count - 3]);
    }
    for (i = j + 1; i < count; i++) {
        menu = menus[i];
        if (menu.className == 'menu_Split') {
            break;
        }
        if (favorites.indexOf(menu.id) != -1) {
            menu.remove();
            if (menu.id == 'Advanced_OperationMode_Content_menu') {
                menu.title = 'Advanced_System_Content.asp';
            }
            container.insertBefore(menu, menus[j++]);
        }
    }
    console.log('Done');

    // 科学上网
    var subMenu = document.getElementById('subMenu');
    if (subMenu) {
       subMenu.innerHTML = '<div class="menu" onclick="goToPage(23, 0, this);" title="Main_Ss_Content.asp" id="Main_Ss_Content_menu"><table><tbody><tr><td><div class="menu_Icon menu_VPN"></div></td><td class="menu_Desc">科学上网</td></tr></tbody></table></div>';
    }

    // 无线用户排序
    if (location.pathname == '/Main_WStatus_Content.asp') {
        var blockNames = ['wifi24block', 'wifi5block', 'wifi52block'];
        for (i in blockNames) {
            var blockName = blockNames[i];
            var block = document.getElementById(blockName);
            if (block && block.childElementCount) {
                var cells = block.lastChild.rows[0].cells;
                cells[0].innerHTML = '<a href="#" onclick="reorder(\'' + blockName + '\',0,1); return false"><center>设备(' + (block.lastChild.rows.length-1) + ')</center></a>';
                cells[1].innerHTML = '<a href="#" onclick="reorder(\'' + blockName + '\',1,0); return false"><center>地址</center></a>';
                cells[2].innerHTML = '<a href="#" onclick="reorder(\'' + blockName + '\',2,1); return false"><center>信号</center></a>';
                cells[3].innerHTML = '<a href="#" onclick="reorder(\'' + blockName + '\',3,0); return false"><center>时长</center></a>';
                cells[4].innerHTML = '<a href="#" onclick="reorder(\'' + blockName + '\',4,0); return false"><center>标记</center></a>';
            }
        }

        var script = document.createElement('script');
        script.innerHTML = 'function reorder(block, col, line) {\n\
            var rows = document.getElementById(block).lastChild.rows;\n\
            var items = [];\n\
            for (i = 1; i < rows.length; i++) {\n\
                var cells = rows[i].cells;\n\
                var sort = cells[col].innerText.split("\\n")[line];\n\
                items.push([cells[0].innerHTML, cells[1].innerHTML, cells[2].innerHTML, cells[3].innerHTML, cells[4].innerHTML, sort]);\n\
            }\n\
            items.sort(function(a, b) {return reverse ? a[5].localeCompare(b[5]) : b[5].localeCompare(a[5])});\n\
            reverse = !reverse;\n\
            for (i = 1; i < rows.length; i++) {\n\
                for (var k = 0; k < 5; k++) {\n\
                    rows[i].cells[k].innerHTML = items[i-1][k];\n\
                }\n\
            }\n\
        }\nvar reverse = false;';
        document.body.appendChild(script);

    }
}, 1000);
})();