MediaWiki:Gadget-enemyFilter.js
跳转到导航
跳转到搜索
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按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];
}
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();
});
$('.enemyFilter').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);
if (!!mw.config.get('wgMFMode')) {
$('#min-cb input').prop('checked', true);
}
apply_filters();
function apply_filters(data) {
var fil = new Array();
$('.enemyFilter').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);
});
}
});
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[5] = ($('#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].level;
}) == undefined && fil[0].length != 0) {
continue;
}
if (fil[1].find(function (v) {
return v == datalist[i].type;
}) == undefined && fil[1].length != 0) {
continue;
}
if (fil[2].find(function (v) {
return datalist[i].attacktype.indexOf(v) !== -1
// return v == datalist[i].attacktype;
}) == undefined && fil[2].length != 0) {
continue;
}
if (fil[3].find(function (v) {
return v == datalist[i].damagetype;
}) == undefined && fil[3].length != 0) {
continue;
}
if (fil[6].find(function (v) {
return v == datalist[i].hp;
}) == undefined && fil[6].length != 0) {
continue;
}
if (fil[7].find(function (v) {
return v == datalist[i].attack;
}) == undefined && fil[7].length != 0) {
continue;
}
if (fil[8].find(function (v) {
return v == datalist[i].defence;
}) == undefined && fil[8].length != 0) {
continue;
}
if (fil[9].find(function (v) {
return v == datalist[i].resistance;
}) == undefined && fil[9].length != 0) {
continue;
}
if (datalist[i].name.toLowerCase().indexOf(fil[5].toLowerCase()) == -1 &&
datalist[i].description.toLowerCase().indexOf(fil[5].toLowerCase()) == -1 &&
datalist[i].ability.toLowerCase().indexOf(fil[5].toLowerCase()) == -1) {
continue;
}
result.push(datalist[i]);
}
var compare = ['?', 'S+', 'S', 'A+', 'A', 'B+', 'B', 'C+', 'C', 'D+', 'D'];
switch (fil[4][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 'atk_ascend':
result.sort(function (a, b) { return a['id'] - b['id']; });
result.sort(function (a, b) { return (compare.indexOf(b['attack']) - compare.indexOf(a['attack'])); });
break;
case 'atk_descend':
result.sort(function (a, b) { return a['id'] - b['id']; });
result.sort(function (a, b) { return (compare.indexOf(a['attack']) - compare.indexOf(b['attack'])); });
break;
case 'hp_ascend':
result.sort(function (a, b) { return a['id'] - b['id']; });
result.sort(function (a, b) { return (compare.indexOf(b['hp']) - compare.indexOf(a['hp'])); });
break;
case 'hp_descend':
result.sort(function (a, b) { return a['id'] - b['id']; });
result.sort(function (a, b) { return (compare.indexOf(a['hp']) - compare.indexOf(b['hp'])); });
break;
case 'def_ascend':
result.sort(function (a, b) { return a['id'] - b['id']; });
result.sort(function (a, b) { return (compare.indexOf(b['defence']) - compare.indexOf(a['defence'])); });
break;
case 'def_descend':
result.sort(function (a, b) { return a['id'] - b['id']; });
result.sort(function (a, b) { return (compare.indexOf(a['defence']) - compare.indexOf(b['defence'])); });
break;
case 'res_ascend':
result.sort(function (a, b) { return a['id'] - b['id']; });
result.sort(function (a, b) { return (compare.indexOf(b['resistance']) - compare.indexOf(a['resistance'])); });
break;
case 'res_descend':
result.sort(function (a, b) { return a['id'] - b['id']; });
result.sort(function (a, b) { return (compare.indexOf(a['resistance']) - compare.indexOf(b['resistance'])); });
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 += buildRow(result[i]);
}
if ($('#min-cb input').prop('checked')) {
$('#result-table').css('display', 'none');
$('.result-row').remove();
$('#filter_result').css('display', 'block');
if (temp.length == 0) {
temp = '<div style="text-align: center;">无结果</div>';
}
$('#filter_result').html(temp);
$('.enemyicon').addClass('min-mode');
} else {
$('#result-table').css('display', 'table');
$('#filter_result').css('display', 'none');
$('#filter_result').html("");
if (temp.length == 0) {
temp = '<tr class="result-row><td colspan="9">无结果</td></tr>';
}
$('.result-row').remove();
$('.result-header').after(temp);
$('.enemyicon').removeClass('min-mode');
}
}
function buildRow(enemy) {
var icon = '<div class="enemyicon"><a href="/w/PAGENAME" title="PAGENAME"><img class="lazyload" src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" data-src="$IMG_SRC" width="100" height="100"></a><div class="enemyicon-index" style="transform: scale(0.76923076923077);">$INDEX</div></div>'.replace(/PAGENAME/g, htmlEncode(enemy.name)).replace('$IMG_SRC', enemy.file).replace('$INDEX', enemy.index);
if ($('#min-cb input').prop('checked')) {
return icon;
}
var result = '<tr class="result-row"><td>$ICON</td><td><a href="/w/NAME" title="NAME">NAME</a></td><td>$LEVEL</td><td>$TYPE</td><td>$ABILITY</td><td>$ATK</td><td>$HP</td><td>$DEF</td><td>$RES</td></tr>'.replace('$ICON', icon)
.replace(/NAME/g, htmlEncode(enemy.name)).replace('$LEVEL', enemy.level).replace('$TYPE', enemy.type).replace('$ABILITY', enemy.ability.replace(/\[\[(.*?)\|(.*?)]]/g, function (match, p1, p2, offset, str) {
var temp = p1.split('#');
return "<a href='/w/" + encodeURI(temp[0]) + "#" + encodeURI(temp[1]).replace(/\%/g, '.') + "' title='" + p2 + "'>" + p2 + "</a>"
})).replace('$ATK', enemy.attack).replace('$HP', enemy.hp)
.replace('$DEF', enemy.defence).replace('$RES', enemy.resistance);
return result;
}
function htmlEncode(str) {
var s = "";
if (str.length == 0) return "";
s = str.replace(/&/g, "&");
s = s.replace(/</g, "<");
s = s.replace(/>/g, ">");
s = s.replace(/ /g, " ");
s = s.replace(/\'/g, "'");
s = s.replace(/\"/g, """);
return s;
}
function D2B() {
var str = '';
var arr = [];
$('.enemyFilter').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/ENEMY?filter=' + result + search);
$('#list-filter-url-title>a').attr('data-clipboard-text', 'https://prts.wiki/w/ENEMY?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);
$('.enemyFilter').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);
}
}
});