Widget:indexSorterGrouper: Difference between revisions
Jump to navigation
Jump to search
m Fixed a sort order bug |
Damn you, MediaWiki! |
||
(35 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
<includeonly><script> | <includeonly><script> | ||
RLQ.push(function () { | RLQ.push(['jquery', function () { | ||
$(document).ready(function() { | $(document).ready(function() { | ||
// initially remove the paragraph | |||
var parents = $(".mw-headline").closest("h2"); | |||
parents.each(function() { | |||
var parent = $(this); | |||
var paragraph = parent.next('p'); | |||
paragraph.replaceWith(paragraph.children()); | |||
}); | |||
// For now, we have to make sure the data is there (Change the template, dammit!) | // For now, we have to make sure the data is there (Change the template, dammit!) | ||
$(". | $(".gfl-doll-card").each(function() { | ||
try { | |||
var element = $(this); | var element = $(this); | ||
var name = element.find(' | var name = element.find('.name').first().text(); | ||
var index = parseInt(element.find(' | var index = parseInt(element.find('.index').last().text()); | ||
var srcStr = element | var srcStr = element.attr("class"); | ||
var myRegexp = / | var myRegexp = /doll\-rarity\-(.*?) doll\-classification\-(.*?)$/g; | ||
var match = myRegexp.exec(srcStr); | var match = myRegexp.exec(srcStr); | ||
var classification = match[ | var classification = match[2]; | ||
var rarity = match[ | var rarity = match[1]; | ||
var serverDataSpans = $("span.serverdata[data-server-doll='" + name + "']"); | |||
serverDataSpans.each(function() { | |||
var serverDataSpan = $(this); | |||
var serverShort = serverDataSpan.attr('data-server-released'); | |||
var serverDollName = serverDataSpan.attr('data-server-releasename'); | |||
element.attr("data-server-" + serverShort, serverDollName); | |||
}); | |||
serverDataSpans.remove(); | |||
element.attr('data-server-WIKI', name); | |||
element.data('name', name); | element.data('name', name); | ||
element.data('index', index); | element.data('index', index); | ||
element.data('classification', classification); | element.data('classification', classification); | ||
element.data('rarity', rarity); | element.data('rarity', rarity); | ||
} | |||
catch(error) { | |||
console.log("Error handling index entry", error); | |||
} | |||
}); | }); | ||
// Once everything is ready, default-sort it | // Once everything is ready, default-sort it | ||
$('[data-initialsort]').click(); | $('[data-initialsort]').click(); | ||
// Activate ui for user | |||
$(".gf-button").prop('disabled', false); | |||
$('.removeAfterInitIsg').remove(); | |||
}); | }); | ||
}); | }]); | ||
function orderByName(currentButton) { | function orderByName(currentButton) { | ||
Line 37: | Line 62: | ||
var grouper = function (parent, elements) { | var grouper = function (parent, elements) { | ||
var currentLetter = getFirstLetterGroup($(elements).first().data('name')); | var currentLetter = getFirstLetterGroup($(elements).first().data('name')); | ||
var | var nativeGroupHeader = document.createElement("h3"); | ||
var groupHeader = $(nativeGroupHeader); | |||
groupHeader.text(currentLetter.toUpperCase() + "...").addClass("addedbysorter"); | |||
groupHeader.insertBefore(elements.first()); | groupHeader.insertBefore(elements.first()); | ||
Line 44: | Line 71: | ||
var nextElementLetter = getFirstLetterGroup($(elements[i+1]).data('name')); | var nextElementLetter = getFirstLetterGroup($(elements[i+1]).data('name')); | ||
if (currentLetter !== nextElementLetter) { | if (currentLetter !== nextElementLetter) { | ||
var groupHeaderText = nextElementLetter.toUpperCase() + "..."; | var groupHeaderText = nextElementLetter.toUpperCase() + "..."; | ||
if (groupHeaderText.trim() != "...") { | if (groupHeaderText.trim() != "...") { | ||
var groupHeader = $(" | var groupHeader = $(document.createElement("h3")).text(groupHeaderText).addClass("addedbysorter"); | ||
groupHeader.insertAfter( | groupHeader.insertAfter(element); | ||
} | } | ||
} | } | ||
Line 66: | Line 91: | ||
var letter = element.charAt(0); | var letter = element.charAt(0); | ||
if (letter >= "0" && letter <= "9") { | if (letter >= "0" && letter <= "9") { | ||
letter = "#" | letter = "#"; | ||
} | } | ||
return letter.toLowerCase(); | return letter.toLowerCase(); | ||
Line 124: | Line 149: | ||
if (currentKey !== nextElementKey) { | if (currentKey !== nextElementKey) { | ||
var groupHeaderText = $(nextElement).data('classification') + " " + getNumberForRarity(nextElement) + "-Star"; | var groupHeaderText = $(nextElement).data('classification') + " " + getNumberForRarity(nextElement) + "-Star"; | ||
var groupHeader = $(" | var groupHeader = $(document.createElement("h3")).text(groupHeaderText).addClass("addedbysorter"); | ||
groupHeader.insertAfter( | groupHeader.insertAfter(element1); | ||
} | } | ||
} | } | ||
Line 149: | Line 171: | ||
function getNumberForRarity(element) { | function getNumberForRarity(element) { | ||
var rawRarity = $(element).data('rarity'); | var rawRarity = $(element).data('rarity'); | ||
if (!rawRarity || rawRarity == null | |||
if (!rawRarity || rawRarity == null) { | |||
return 9; | |||
} | |||
if (("" + rawRarity).toLowerCase() === "extra") { | |||
return "Extra"; | |||
} | |||
if (isNaN(rawRarity)) { | |||
return 9; | return 9; | ||
} | } | ||
Line 193: | Line 224: | ||
var firstIndex = elements.first().data('index'); | var firstIndex = elements.first().data('index'); | ||
var firstTen = Math.ceil(parseInt(firstIndex) / 10) * 10; | var firstTen = Math.ceil(parseInt(firstIndex) / 10) * 10; | ||
var groupHeader = $(" | if (sortOrder == -1) { firstTen -= 9; } | ||
var groupHeader = $(document.createElement("h3")).text(getNumberText(firstIndex) + "..." + getNumberText(firstTen)).addClass("addedbysorter"); | |||
groupHeader.insertBefore(elements.first()); | groupHeader.insertBefore(elements.first()); | ||
Line 202: | Line 234: | ||
var nextElement = $(elements[i+1]); | var nextElement = $(elements[i+1]); | ||
createIndexGroup(element, nextElement); | createIndexGroup(element, nextElement, sortOrder); | ||
return true; | return true; | ||
}); | }); | ||
} | }; | ||
tdollSorter(comparer, grouper); | tdollSorter(comparer, grouper); | ||
Line 218: | Line 250: | ||
} | } | ||
function createIndexGroup(element, nextElement) { | function createIndexGroup(element, nextElement, sortOrder) { | ||
var currentTen = Math.ceil(parseInt($(element).data('index')) / 10) * 10; | var currentTen = Math.ceil(parseInt($(element).data('index')) / 10) * 10; | ||
var nextElementTen = Math.ceil(parseInt(nextElement.data('index')) / 10) * 10; | var nextElementTen = Math.ceil(parseInt(nextElement.data('index')) / 10) * 10; | ||
if (currentTen !== nextElementTen) { | if (currentTen !== nextElementTen) { | ||
if (!isNaN(nextElementTen)) { | if (!isNaN(nextElementTen)) { | ||
var groupHeader = $(" | if (sortOrder == -1) { | ||
groupHeader.insertAfter( | currentTen -= 10; | ||
nextElementTen -= 9; | |||
} | |||
var currentIdxShow = currentTen; | |||
if (sortOrder != -1 && currentIdxShow > 1) currentIdxShow += 1; | |||
var groupHeaderText = getNumberText(currentIdxShow) + "..." + getNumberText(nextElementTen); | |||
var groupHeader = $(document.createElement("h3")).text(groupHeaderText).addClass("addedbysorter"); | |||
groupHeader.insertAfter(element); | |||
} | } | ||
} | } | ||
Line 234: | Line 271: | ||
function tdollSorterActiveButton(butt) { | function tdollSorterActiveButton(butt) { | ||
var isAscending = $(butt).is('.ascending') | var isAscending = $(butt).is('.ascending'); | ||
$('[data-tdollsortbutton="true"]').removeClass("enabled").removeClass("ascending"); | $('[data-tdollsortbutton="true"]').removeClass("enabled").removeClass("ascending"); | ||
$(butt).addClass("enabled"); | $(butt).addClass("enabled"); | ||
Line 244: | Line 281: | ||
return 1; | return 1; | ||
} | } | ||
} | |||
function switchServer(butt) { | |||
var activeServer = $(butt).attr('data-tdollserver'); | |||
$('[data-tdollserverbutton="true"]').removeClass("enabled"); | |||
$('.gfl-doll-card.unreleased').removeClass('unreleased'); | |||
$('.gfl-doll-card').each(function() { | |||
var element = $(this); | |||
var nameToSet = ""; | |||
if (element.is("[data-server-" + activeServer + "]")) { | |||
nameToSet = element.attr('data-server-' + activeServer); | |||
} else { | |||
element.addClass('unreleased'); | |||
nameToSet = element.attr('data-server-wiki'); | |||
} | |||
element.find('.name').first().text(nameToSet); | |||
}); | |||
$(butt).addClass("enabled"); | |||
} | } | ||
Line 252: | Line 310: | ||
parents.each(function() { | parents.each(function() { | ||
var parent = $(this); | var parent = $(this); | ||
var elements = parent.nextUntil("h2", ". | // All elements inside the paragraph after the h2 which have special class | ||
var elements = parent.nextUntil("h2", ".gfl-doll-card"); | |||
elements.detach().sort(comparer); | elements.detach().sort(comparer); | ||
Line 264: | Line 323: | ||
} | } | ||
</script><div style="display:inline-block"> | </script><div style="display:inline-block"> | ||
<button class="gf-button" data-tdollsortbutton="true" data-initialsort="true" onclick=" | <button class="gf-button" data-tdollsortbutton="true" disabled data-initialsort="true" onclick="orderByClassRarityName(this);">By Class>Rarity>Name</button> | ||
<button class="gf-button" data-tdollsortbutton="true" onclick=" | <button class="gf-button" data-tdollsortbutton="true" disabled onclick="orderByRarityClassName(this);">By Rarity>Class>Name</button> | ||
<button class="gf-button" data-tdollsortbutton="true" onclick=" | <button class="gf-button" data-tdollsortbutton="true" disabled onclick="orderByName(this);">By Name</button> | ||
<button class="gf-button" data-tdollsortbutton="true" onclick="orderByIndex(this);">By Index</button></div> | <button class="gf-button" data-tdollsortbutton="true" disabled onclick="orderByIndex(this);">By Index</button> | ||
<div style="width:20px; height:20px; display:inline-block;" class="loading2 removeAfterInitIsg"> </div></div> | |||
<p> | |||
Released on this server:<br/> | |||
<button class="gf-button" data-tdollserverbutton="true" data-tdollserver="WIKI" disabled data-initialsort="true" onclick="switchServer(this);">All</button> | |||
<button class="gf-button" data-tdollserverbutton="true" data-tdollserver="CN" disabled onclick="switchServer(this);">CN</button> | |||
<button class="gf-button" data-tdollserverbutton="true" data-tdollserver="TW" disabled onclick="switchServer(this);">TW</button> | |||
<button class="gf-button" data-tdollserverbutton="true" data-tdollserver="KR" disabled onclick="switchServer(this);">KR</button> | |||
<button class="gf-button" data-tdollserverbutton="true" data-tdollserver="EN" disabled onclick="switchServer(this);">EN</button> | |||
<button class="gf-button" data-tdollserverbutton="true" data-tdollserver="JP" disabled onclick="switchServer(this);">JP</button> | |||
</p> | |||
</includeonly> | </includeonly> | ||
Latest revision as of 00:40, 27 July 2024
Released on this server: