MediaWiki:Gadget-itemFilter.js

来自PRTS
跳到导航 跳到搜索

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:Ctrl-F5
$().ready(function () {
    window['filterResult'] = [];
    var datalist = new Array();
    $('.smwdata').each(function (index, element) {
        var o = new Object();
        for (var k in element.dataset) {
            o[k] = element.dataset[k];
        }
        o.obtain_approach = o.obtain_approach.split('、');
        o.category = o.category.replace(/分类:/g, '').split(', ');
        datalist.push(o);
        element.remove();
    });
    console.log(datalist);
    U2D();
    $('#list-filter-url-title>a').attr('data-clipboard-text', $('#list-filter-url').html());
    $('.iF-select-all').on('click', function () {
        $(this).parent().parent().find('input').prop("checked", true);
        apply_filters();
    });
    $('.iF-select-none').on('click', function () {
        $(this).parent().parent().find('input').prop("checked", false);
        apply_filters();
    });
    $('.itemFilter').find('input').on('change', apply_filters);
    $('#filter_search').on('input', apply_filters);
    $('#PrevPage').on('click', setPage);
    $('#NextPage').on('click', setPage);
    $('#per-page').on('change', setLength);
    $('#cur-page').on('change', setPage);
    apply_filters();
    function apply_filters(data) {
        var fil = new Array();
        $('.itemFilter').find('td').each(function (index, element) {
            var temp = new Array();
            $(element).find('input').each(function (i, e) {
                if ($(e).prop('checked')) {
                    $(e).data('f').toString().split(',').forEach(function (s) {
                        temp.push(s);
                    });
                }
                //temp.push();
            });
            fil.push(temp);
            if (temp.length == 0) {
                $(element).parent().removeClass('enabled');
                $(element).parent().addClass('disabled');
            } else {
                $(element).parent().removeClass('disabled');
                $(element).parent().addClass('enabled');
            }
        });
        fil[fil.length - 1] = ($('#filter_search').val());
        console.log(fil);
        console.log(D2B());
        var result = new Array();
        for (var i = 0; i < datalist.length; i++) {
            if (fil[0].find(function (v) {
                return v == datalist[i].rarity;
            }) == undefined && fil[0].length != 0) {
                continue;
            }
            if (fil[1].find(function (v) {
                return datalist[i].category.find(function (value) {
                    return value == v;
                }) != undefined;
            }) == undefined && fil[1].length != 0) {
                continue;
            }
            if ((fil[2].find(function (v) {
                return datalist[i].category.find(function (value) {
                    return value == v;
                }) != undefined;
            }) == undefined) && (fil[2].find(function (v) {
                return datalist[i].obtain_approach.find(function (value) {
                    if (v == '') {
                        return false;
                    } else {
                        return value.indexOf(v) != -1;
                    }
                }) != undefined
            }) == undefined) && fil[2].length != 0) {
                continue;
            }
            if (datalist[i].name.toLowerCase().indexOf(fil[4].toLowerCase()) == -1 &&
                datalist[i].description.toLowerCase().indexOf(fil[4].toLowerCase()) == -1) {
                continue;
            }
            result.push(datalist[i]);
        }
        switch (fil[3][0]) {
            case 'id_ascend':
                result.sort(function (a, b) { return a['id'] - b['id']; });
                break;
            case 'id_descend':
                result.sort(function (a, b) { return b['id'] - a['id']; })
                break;
            case 'r_ascend':
                result.sort(function (a, b) { return a['id'] - b['id']; });
                result.sort(function (a, b) { return a['rarity'] - b['rarity']; });
                break;
            case 'r_descend':
                result.sort(function (a, b) { return a['id'] - b['id']; });
                result.sort(function (a, b) { return b['rarity'] - a['rarity']; });
                break;
        }
        console.log(result);
        window['filterResult'] = result;
        $('#PageInfo').html('共' + result.length + '个');
        setLength();
    }
    function setLength() {
        var size = $('#per-page').val();
        var temp = ''
        for (var i = 0; i < Math.floor(window['filterResult'].length / size) + 1; i++) {
            temp += '<option>' + (i + 1) + '</option>';
        }
        $('#cur-page').html(temp);
        //console.log(size);
        //console.log(curPage);
        setPage();
    }
    function setPage(event) {
        if (event) {
            console.log(event.currentTarget.id);
            switch (event.currentTarget.id) {
                case "cur-page":
                    console.log($('#cur-page').val());
                    break;
                case "NextPage":
                    $('#cur-page').val(parseInt($('#cur-page').val()) + 1);
                    break;
                case "PrevPage":
                    $('#cur-page').val(parseInt($('#cur-page').val()) - 1);
                    break;
            }
        }
        if ($('#cur-page').children().length == $('#cur-page').val()) {
            $('#NextPage').css('visibility', 'hidden');
        } else {
            $('#NextPage').css('visibility', 'visible');
        }
        if (1 == $('#cur-page').val()) {
            $('#PrevPage').css('visibility', 'hidden');
        } else {
            $('#PrevPage').css('visibility', 'visible');
        }
        var temp = ''
        var result = window['filterResult'];
        var size = $('#per-page').val();
        var index = $('#cur-page').val() - 1;
        for (var i = index * size; i < result.length && i < (index + 1) * size; i++) {
            temp += getIcon(result[i].name, result[i].file);
        }
        if (temp.length == 0) {
            temp = '<div style="text-align: center;">无结果</div>';
        }
        $('#filter_result').html(temp);
    }
    function getIcon(pagename, img_src) {
        return '<div class="item-icon-wrapper"><a href="/w/$PAGENAME"><img src="$SRC"></a></div>'.replace('$PAGENAME', pagename).replace('$SRC', img_src);
    }
    function D2B() {
        var str = '';
        var arr = [];
        $('.itemFilter').find('input[type=checkbox],input[type=button],input[type=radio]').each(function (i, e) {
            if (str.length == 6) {
                arr.push(str);
                str = ''
            }
            if ($(e).prop('checked')) {
                str += 1;
            } else {
                str += 0;
            }
        });
        arr.push(str);
        while (arr[arr.length - 1].length != 6) {
            arr[arr.length - 1] += 0;
        }
        console.log(arr);
        var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,"
        result = '';
        for (var i = 0; i < arr.length; i++) {
            result += _keyStr.charAt(parseInt(arr[i], 2));
        }
        var search = ($('#filter_search').val()).length == 0 ? '' : '&s=' + encodeURI($('#filter_search').val());
        $('#list-filter-url').html('https://prts.wiki/w/ITEM?filter=' + result + search);
        $('#list-filter-url-title>a').attr('data-clipboard-text', 'https://prts.wiki/w/ITEM?filter=' + result + search);
    }
    function U2D() {
        var uri = new URLSearchParams(window.location.search)
        var u = uri.get('filter');
        var s = uri.get('s');
        if (!u) {
            return;
        }
        var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,"
        var result = ''
        for (var i = 0; i < u.length; i++) {
            var temp = _keyStr.indexOf(u[i]).toString(2);
            while (temp.length != 6) {
                temp = '0' + temp;
            }
            result += temp;
        }
        console.log(result);

        $('.itemFilter').find('input[type=checkbox],input[type=button],input[type=radio]').each(function (i, e) {
            if (result.charAt(i) == 1) {
                $(e).prop('checked', true);
            } else {
                $(e).prop('checked', false);
            }
        });
        if (s) {
            $('#filter_search').val(s);
        }
    }
});