Archive.org Filter

Advanced filter for Archive.org roms

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

You will need to install an extension such as Tampermonkey to install this script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name        Archive.org Filter
// @namespace   psx_chd_filter
// @match       *archive.org/download/*
// @include       *archive.org/download/*
// @require https://code.jquery.com/jquery-3.6.0.min.js
// @grant       none
// @version     1.1
// @author      Andrea Do
// @description Advanced filter for Archive.org roms
// @license MIT
// ==/UserScript==



$(document).ready(function() {
  var suffixes = `<input type="checkbox" id="use_suffix"> Use suffixes<br>
<div style="display: none;" id="display_boxes"><br>
<strong>Generic</strong><br>
<input type="checkbox" data-suffix="[a]" checked style="display: none;"> [a] Alternate<br>
<input type="checkbox" data-suffix="[p]" checked style="display: none;"> [p] Pirate<br>
<input type="checkbox" data-suffix="[b]" checked style="display: none;"> [b] Bad Dump (avoid these, they may not work!)<br>
<input type="checkbox" data-suffix="[t]" checked style="display: none;"> [t] Trained<br>
<input type="checkbox" data-suffix="[f]" checked style="display: none;"> [f] Fixed<br>
<input type="checkbox" data-suffix="[T-]" checked style="display: none;"> [T-] OldTranslation<br>
<input type="checkbox" data-suffix="[T+]" checked style="display: none;"> [T+] NewerTranslation<br>
<input type="checkbox" data-suffix="[h]" checked style="display: none;"> [h] Hack<br>
<input type="checkbox" data-suffix="[cr" checked style="display: none;"> [cr {x}] Cracked (by {x})<br>
<input type="checkbox" data-suffix="(-)" checked style="display: none;"> (-) Unknown Year<br>
<input type="checkbox" data-suffix="[o]" checked style="display: none;"> [o] Overdump<br>
<input type="checkbox" data-suffix="[!]" checked style="display: none;"> [!] Verified Good Dump<br>
<input type="checkbox" data-suffix="ZZZ_" checked style="display: none;"> ZZZ_ Unclassified<br>
<input type="checkbox" data-suffix="(Unl)" checked style="display: none;"> (Unl) Unlicensed<br><br>
<strong>Platform specific</strong><br>
  <input type="checkbox" data-suffix="[PC10]" checked style="display: none;"> NES - [PC10] PlayChoice 10<br>
  <input type="checkbox" data-suffix="[VS]" checked style="display: none;"> NES - [VS] Versus<br>
  <input type="checkbox" data-suffix="[BS]" checked style="display: none;"> SNES - [BS] BS Roms<br>
  <input type="checkbox" data-suffix="[SF]" checked style="display: none;"> SNES - [SF] Sufami Turbo<br>
  <input type="checkbox" data-suffix="[NP]" checked style="display: none;"> SNES - [NP] Nintendo Power<br>
</div>`;
  var download_all = '<div id="download_all"><b>Attempt bulk download</b> <i>(think thrice before doing this!)</i></div>';
  var hide_demo = '<h3>Disc type</h3>Include demos: <input type="checkbox" checked id="demos"><br>Include multidisc: <input type="checkbox" checked id="multidisc"><br>';
  var countries = '<h3>Localization</h3>Country/Region: <select id="country"><option value=".">ALL</option><option value="anything_else">Uncategorized</option></select><br>';
  var size_limit = '<h3>Misc</h3>'+suffixes+'Size limit: <input style="max-width: 75px;" id="limit" type="number" placeholder="Size limit" value="50000">MB<div><span style="display: none;" id="stats"><h3>Stats</h3>Showing <span id="counter">0</span> file(s).<br>Total size: <span id="total_size">0</span>'+download_all+'</span></div>';
  $("h1").after(hide_demo+countries+size_limit);
});

//waitForKeyElements("#total_size", actions);

function engine() {
  $(document).ready(function() {
    var country_list = ['Italy', 'France', 'Germany', 'Spain', 'Netherlands', 'Sweden', 'Denmark', 'Norway', 'Portugal', 'Japan', 'USA', 'Europe', 'UK'];
    country_list.sort();
    for(k=0; k < country_list.length; k++) {
      $("#country").append('<option value="('+country_list[k]+')">'+country_list[k]+'</option>');
    }
    
    $("#download_all").append('<br><button id="dl_all">Download all</button>');
    $("#dl_all").click(function() {
      var exts = ['chd', 'zip', '7z', 'nes', 'sfc'];
      var sels = "";
      var selectors = "";
      for(e=0; e < exts.length; e++) {
        if(e==exts.length-1) {
          sels+=".directory-listing-table [href$='."+exts[e]+"']:visible";
        } else{
          sels+=".directory-listing-table [href$='."+exts[e]+"']:visible, ";
        }
        
      }
      selectors = sels;
      var len = $(selectors).length;
      if(len > 20) {
        var ask = confirm("This will open "+len+" tabs! Are you sure?");
        if(ask == true) {
          $(selectors).each(function() {
            var url = encodeURIComponent(window.location.href+"/"+$(this).attr("href"));
            window.open(decodeURIComponent(url));
          });
        }
      } else {
        $(selectors).each(function() {
            var url = encodeURIComponent(window.location.href+"/"+$(this).attr("href"));
            window.open(decodeURIComponent(url));
          });
      }
      
      
    });

    
    $("input, select").click(function() {
      var sum = 0;
      $("#stats").show();
      $("tr").show();
      var exts = ['chd', 'zip', '7z', 'nes', 'sfc'];
      var sels = "";
      var selectors = "";
      for(e=0; e < exts.length; e++) {
        if(e==exts.length-1) {
          sels+=".directory-listing-table [href$='."+exts[e]+"']:visible";
        } else{
          sels+=".directory-listing-table [href$='."+exts[e]+"']:visible, ";
        }
        
      }
      selectors = sels;
      
      
      // Filter countries
      var country = $("#country option:selected").val();
      if(country === "anything_else") {
        for(k=0; k < country_list.length; k++) {
          $(selectors).each(function() {
            if($(this).text().indexOf(country_list[k]) > -1) {
              $(this).closest("tr").hide();
            } else {
              $(this).closest("tr").show();
            }
      });
        }
      } else {
        $(selectors).each(function() {
          if($(this).text().indexOf(country) <= -1) {
            $(this).closest("tr").hide();
          } else {
            $(this).closest("tr").show();
          }
      });
      }
      
      
      // Size limit
      var limit = parseInt($("#limit").val());
      var this_size = 0;
      $("tr td:nth-child(3):visible").each(function() {
        if($(this).text().indexOf("M") > -1) {
           this_size = ($(this).text().split("M")[0]*1);
        } else if($(this).text().indexOf("G") > -1) {
           this_size = ($(this).text().split("G")[0]*1024);
        } else if($(this).text().indexOf("K") > -1) {
           this_size = ($(this).text().split("K")[0]*0.001);
        }
        
        if(this_size <= limit) {
          $(this).closest("tr").show();
        } else {
          $(this).closest("tr").hide();
        }
      });
      
      // Show demos
      if($("#demos").is(':checked')) {
        $("tr:visible").show();
      } else {
        $(selectors).each(function() {
          if($(this).text().indexOf("(Demo)") > -1) {
            $(this).closest("tr").hide();
          }
        });
      }
      
      // Show Multidisc
      if($("#multidisc").is(':checked')) {
        $("tr:visible").show();
      } else {
        $(selectors).each(function() {
          if($(this).text().indexOf("(Disc ") > -1) {
            $(this).closest("tr").hide();
          }
        });
      }
      
      // Suffixes
      if($("#use_suffix").is(":checked")) {
        $("[data-suffix]").show();
        $("#display_boxes").show();
        
        $(selectors).each(function() {
          var this_rom = $(this);
          $("[data-suffix]:checked").each(function() {
            var attr = $(this).attr('data-suffix');
            if(this_rom.text().indexOf(attr) > -1) {
              this_rom.closest("tr").show();
              return false;
            } else {
              this_rom.closest("tr").hide();
            }
          });
        });
        
        
      } else {
        $("[data-suffix]").hide();
        $("#display_boxes").hide();
      }
      
      // Extensions
      

      
      
      // Sum 
      $("tr td:nth-child(3):visible").each(function() {
        var this_size = 0;
        var size_arr = [['M', 1], ['G', 1024], ['K', 0.001]];
        for(s=0; s < size_arr.length; s++) {
          if($(this).text().indexOf(size_arr[s][0]) > -1) {
            this_size = $(this).text().split(size_arr[s][0])[0]*size_arr[s][1];
          }
        }
        sum+=this_size;        
      });
      
      // Stats
      $("#counter").text($(selectors).length);
      $("#total_size").text(sum.toFixed(2)+" MB ("+(sum/1024).toFixed(2)+" GB)");
    });
    
    
    
  });
}

engine();