Archive.org Filter

Advanced filter for Archive.org roms

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey, το Greasemonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

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

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Userscripts για να εγκαταστήσετε αυτόν τον κώδικα.

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

Θα χρειαστεί να εγκαταστήσετε μια επέκταση διαχείρισης κώδικα χρήστη για να εγκαταστήσετε αυτόν τον κώδικα.

(Έχω ήδη έναν διαχειριστή κώδικα χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Έχω ήδη έναν διαχειριστή στυλ χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

// ==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();