Dear visitors, IOP Wiki is currently the target of a denial of service campaign. We are investigating countermeasures. In the meantime, the Wiki may experience periods of unplanned downtime.

Widget:indexSorterGrouper: Difference between revisions

Welcome to IOP Wiki. This website is maintained by the Girls' Frontline community and is free to edit by anyone.
Jump to navigation Jump to search
m Fixed initial sort bug
m Missed some parts
(31 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!)
$(".card-bg-small").each(function() {
$(".gfl-doll-card").each(function() {
  var element = $(this);
  var element = $(this);
  var name = element.find('span').first().text();
  var name = element.find('.name').first().text();
  var index = parseInt(element.find('span').last().text());
  var index = parseInt(element.find('.index').last().text());
  var srcStr = element.find("img").eq(2).attr("src");
  var srcStr = element.find("img.rarity-class").attr("src");
  var myRegexp = /^.*Icon_(.*)_(.*)star.*$/g;
  var myRegexp = /^.*Icon_(.*)_(.*)star.*$/g;
  var match = myRegexp.exec(srcStr);
  var match = myRegexp.exec(srcStr);
  var classification = match[1];
  var classification = match[1];
  var rarity = match[2];
  var rarity = match[2];
   
         
          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);
Line 21: Line 39:
     // 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) {
   tdollSorterActiveButton(currentButton);
   var sortOrder = tdollSorterActiveButton(currentButton);
    
    
   var comparer = function (a, b) {
   var comparer = function (a, b) {
     var nameA=$(a).data('name').toLowerCase();
     var nameA=$(a).data('name').toLowerCase();
     var nameB=$(b).data('name').toLowerCase();
     var nameB=$(b).data('name').toLowerCase();
     if (nameA < nameB) return -1;
     if (nameA < nameB) return -1 * sortOrder;
     if (nameA > nameB) return 1;
     if (nameA > nameB) return 1 * sortOrder;
     return 0;
     return 0;
   };
   };
    
    
   var grouper = function (parent, elements) {
   var grouper = function (parent, elements) {
     if (parent.find('#Unreleased_T-Dolls').length > 0 || parent.find('#Extra_T-Dolls').length > 0) {
     var currentLetter = getFirstLetterGroup($(elements).first().data('name'));
      return;
     var groupHeader = $("<h3 />").text(currentLetter.toUpperCase() + "...").addClass("addedbysorter");
    }
   
     var groupHeader = $("<h3 />").text("#...").addClass("addedbysorter");
     groupHeader.insertBefore(elements.first());
     groupHeader.insertBefore(elements.first());
      
      
Line 47: Line 66:
       var nextElementLetter = getFirstLetterGroup($(elements[i+1]).data('name'));
       var nextElementLetter = getFirstLetterGroup($(elements[i+1]).data('name'));
       if (currentLetter !== nextElementLetter) {
       if (currentLetter !== nextElementLetter) {
        var linebreaker = $("<br />").addClass("addedbysorter");
        linebreaker.insertAfter(element);
         var groupHeaderText = nextElementLetter.toUpperCase() + "...";
         var groupHeaderText = nextElementLetter.toUpperCase() + "...";
         if (groupHeaderText.trim() != "...") {
         if (groupHeaderText.trim() != "...") {
           var groupHeader = $("<h3 />").text(groupHeaderText).addClass("addedbysorter");
           var groupHeader = $("<h3 />").text(groupHeaderText).addClass("addedbysorter");
           groupHeader.insertAfter(linebreaker);
           groupHeader.insertAfter(element);
         }
         }
       }
       }
Line 75: Line 92:


function orderByRarityClassName(currentButton) {
function orderByRarityClassName(currentButton) {
   tdollSorterActiveButton(currentButton);
   var sortOrder = tdollSorterActiveButton(currentButton);
    
    
   var comparer = function (a, b) {
   var comparer = function (a, b) {
       var contentA = getSortKeyForRarityClassName($(a));
       var contentA = getSortKeyForRarityClassName($(a));
       var contentB = getSortKeyForRarityClassName($(b));
       var contentB = getSortKeyForRarityClassName($(b));
       return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
       var comp = (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
      return comp * sortOrder;
     };
     };
    
    
   tdollSorter(comparer);
  var grouper = getClassAndRarityGrouper();
 
   tdollSorter(comparer, grouper);
}
}


function orderByClassRarityName(currentButton) {
function orderByClassRarityName(currentButton) {
   tdollSorterActiveButton(currentButton);
   var sortOrder = tdollSorterActiveButton(currentButton);
    
    
   var comparer = function (a, b) {
   var comparer = function (a, b) {
       var contentA = getSortKeyForClassRarityName($(a));
       var contentA = getSortKeyForClassRarityName($(a));
       var contentB = getSortKeyForClassRarityName($(b));
       var contentB = getSortKeyForClassRarityName($(b));
       return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
       var comp = (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
      return comp * sortOrder;
     };
     };
    
    
   tdollSorter(comparer);
  var grouper = getClassAndRarityGrouper();
 
   tdollSorter(comparer, grouper );
}
}


function getSortKeyForClassRarityName(element) {
function getClassAndRarityGrouper() {
  var grouper = function (parent, elements) {
    createClassRarityGroup(parent, elements.first());
   
    $.grep(elements, function(element, i) {
      if (elements.length <= i+1) {
        return true;
      }
      var nextElement = elements[i+1];
     
      createClassRarityGroup($(element), nextElement);
     
      return true;
    });
  };
  return grouper;
}
 
function createClassRarityGroup(element1, nextElement) {
  var currentKey = getSortKeyForClassRarityName(element1, true);
  var nextElementKey = getSortKeyForClassRarityName(nextElement, true);
 
  if (currentKey !== nextElementKey) {
    var groupHeaderText = $(nextElement).data('classification') + " " + getNumberForRarity(nextElement) + "-Star";
    var groupHeader = $("<h3 />").text(groupHeaderText).addClass("addedbysorter");
    groupHeader.insertAfter(element1);
  }
}
 
function getSortKeyForClassRarityName(element, withoutName) {
   var classification = getNumberForClassification(element);
   var classification = getNumberForClassification(element);
   var rarity = getNumberForRarity(element);
   var rarity = getNumberForRarity(element);
   var name = $(element).data('name');
   var name = $(element).data('name');
   return classification + "_" + rarity + "_" + name;
   return classification + "_" + rarity + (withoutName ? "" : ("_" + name));
}
}


Line 114: Line 166:
function getNumberForRarity(element) {
function getNumberForRarity(element) {
   var rawRarity = $(element).data('rarity');
   var rawRarity = $(element).data('rarity');
   if (!rawRarity || rawRarity == null || isNaN(rawRarity)) {
 
   if (!rawRarity || rawRarity == null) {
    return 9;
  }
 
  if (("" + rawRarity).toLowerCase() === "extra") {
    return "Extra";
  }
 
  if (isNaN(rawRarity)) {
     return 9;
     return 9;
   }
   }
Line 146: Line 207:


function orderByIndex(currentButton) {
function orderByIndex(currentButton) {
   tdollSorterActiveButton(currentButton);
   var sortOrder = tdollSorterActiveButton(currentButton);
    
    
   var comparer = function (a, b) {
   var comparer = function (a, b) {
       var contentA = parseInt($(a).data('index'));
       var contentA = parseInt($(a).data('index'));
       var contentB = parseInt($(b).data('index'));
       var contentB = parseInt($(b).data('index'));
       return (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
       var comp = (contentA < contentB) ? -1 : (contentA > contentB) ? 1 : 0;
      return comp * sortOrder;
     };
     };
    
    
   var grouper = function (parent, elements) {
   var grouper = function (parent, elements) {
     var firstTen = Math.ceil(parseInt(elements.first().data('index')) / 10) * 10;
     var firstIndex = elements.first().data('index');
     var groupHeader = $("<h3 />").text("..." + firstTen).addClass("addedbysorter");
    var firstTen = Math.ceil(parseInt(firstIndex) / 10) * 10;
    if (sortOrder == -1) { firstTen -= 9; }
     var groupHeader = $("<h3 />").text(getNumberText(firstIndex) + "..." + getNumberText(firstTen)).addClass("addedbysorter");
     groupHeader.insertBefore(elements.first());
     groupHeader.insertBefore(elements.first());
      
      
     $.grep(elements, function(element, i) {
     $.grep(elements, function(element, i) {
       var currentTen = Math.ceil(parseInt($(element).data('index')) / 10) * 10;
       if (elements <= i+1) {
      var nextElementTen = Math.ceil(parseInt($(elements[i+1]).data('index')) / 10) * 10;
         return true;
      if (currentTen !== nextElementTen) {
         var linebreaker = $("<br />").addClass("addedbysorter");
        linebreaker.insertAfter(element);
       
        var groupHeaderText = currentTen + "..." + nextElementTen;
        if (!isNaN(nextElementTen)) {
          var groupHeader = $("<h3 />").text(groupHeaderText).addClass("addedbysorter");
          groupHeader.insertAfter(linebreaker);
        }
       }
       }
      var nextElement = $(elements[i+1]);
     
      createIndexGroup(element, nextElement, sortOrder);
     
       return true;
       return true;
     });
     });
Line 177: Line 236:
    
    
   tdollSorter(comparer, grouper);
   tdollSorter(comparer, grouper);
}
function getNumberText(val) {
  if (!val || isNaN(val)) {
    return "";
  }
  return "" + val;
}
function createIndexGroup(element, nextElement, sortOrder) {
  var currentTen = Math.ceil(parseInt($(element).data('index')) / 10) * 10;
  var nextElementTen = Math.ceil(parseInt(nextElement.data('index')) / 10) * 10;
  if (currentTen !== nextElementTen) {
    if (!isNaN(nextElementTen)) {
      if (sortOrder == -1) {
        currentTen -= 10;
        nextElementTen -= 9;
      }
     
      var currentIdxShow = currentTen;
      if (sortOrder != -1 && currentIdxShow > 1) currentIdxShow += 1;
      var groupHeaderText = getNumberText(currentIdxShow) + "..." + getNumberText(nextElementTen);
     
      var groupHeader = $("<h3 />").text(groupHeaderText).addClass("addedbysorter");
      groupHeader.insertAfter(element);
    }
  }
}
}


function tdollSorterActiveButton(butt) {
function tdollSorterActiveButton(butt) {
   $('[data-tdollsortbutton="true"]').removeClass("enabled");
  var isAscending = $(butt).is('.ascending')
   $('[data-tdollsortbutton="true"]').removeClass("enabled").removeClass("ascending");
  $(butt).addClass("enabled");
 
  if (isAscending) {
    return -1;
  } else {
    $(butt).addClass('ascending');
    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");
   $(butt).addClass("enabled");
}
}
Line 190: Line 305:
   parents.each(function() {
   parents.each(function() {
     var parent = $(this);
     var parent = $(this);
     var elements = parent.nextUntil("h2", ".card-bg-small");
    // 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 202: Line 318:
}
}
</script><div style="display:inline-block">
</script><div style="display:inline-block">
<button class="gf-button" data-tdollsortbutton="true" data-initialsort="true" onclick="orderByName(this);">By Name</button>
<button class="gf-button" data-tdollsortbutton="true" disabled data-initialsort="true" onclick="orderByClassRarityName(this);">By Class&gt;Rarity&gt;Name</button>
<button class="gf-button" data-tdollsortbutton="true" onclick="orderByClassRarityName(this);">By Class&gt;Rarity&gt;Name</button>
<button class="gf-button" data-tdollsortbutton="true" disabled onclick="orderByRarityClassName(this);">By Rarity&gt;Class&gt;Name</button>
<button class="gf-button" data-tdollsortbutton="true" onclick="orderByRarityClassName(this);">By Rarity&gt;Class&gt;Name</button>
<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">&nbsp;</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>



Revision as of 22:28, 24 June 2024


 

Released on this server:

Some heading