MediaWiki:Gadget-itemFilter.js
跳到导航
跳到搜索
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-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);
}
}
});