Advertisement
Guest User

Internet Archive directory listing searcher v2.2

a guest
Sep 19th, 2023
4
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 5.54 KB | Source Code | 0 0
  1. /* Internet Archive directory listing searcher v2.2 */
  2.  
  3. if(document.location.pathname.search("/download/") == 0) /* if directory listing viewed */ {
  4.     var listing = document.getElementsByClassName("download-directory-listing")[0];
  5.    
  6.     // add file counter above list
  7.     var span = document.createElement("span");
  8.     span.innerHTML="This directory has ";
  9.     span.innerHTML+=list_items.length-2;
  10.     if (list_items.length-2 == 1) span.innerHTML += " item.";
  11.         else span.innerHTML += " items.";
  12.     listing.insertBefore(span, listing.getElementsByTagName("pre")[0]);
  13.  
  14.     // create search bar in memory before inserting
  15.     var search_bar = document.createElement("input");
  16.     search_bar.placeholder="search files";
  17.     search_bar.onkeyup=search_list;
  18.     search_bar.style.marginRight="0.5em";
  19.  
  20.     // create clear button and search result counter in memory before inserting
  21.     var search_clear_button = document.createElement("button");
  22.     search_clear_button.style.marginRight="1em";
  23.     search_clear_button.innerHTML="clear";
  24.     search_clear_button.onclick=clear_search;
  25.    
  26.     // create "inverted" check box in memory
  27.     var inverted_checkbox = document.createElement("input");
  28.     inverted_checkbox.type = "checkbox";
  29.     inverted_checkbox.onclick = search_list; // repeat search after changing mode
  30.     inverted_checkbox.style.marginRight="0.5em";
  31.         // create checkbox label
  32.         var inverted_checkbox_label = document.createElement("label");
  33.         inverted_checkbox_label.appendChild(inverted_checkbox);
  34.         var span = document.createElement("span");
  35.         inverted_checkbox_label.appendChild(span);
  36.         inverted_checkbox_label.lastChild.innerHTML="invert results";
  37.         inverted_checkbox_label.style.marginRight="1em";
  38.    
  39.     // create "case-sensitive" check box in memory
  40.     var case_sensitive_checkbox = document.createElement("input");
  41.     case_sensitive_checkbox.type = "checkbox";
  42.     case_sensitive_checkbox.onclick = search_list; // repeat search after changing mode
  43.     case_sensitive_checkbox.style.marginRight="0.5em";
  44.         // create checkbox label
  45.         var case_sensitive_checkbox_label = document.createElement("label");
  46.         case_sensitive_checkbox_label.appendChild(case_sensitive_checkbox);
  47.         var span = document.createElement("span");
  48.         case_sensitive_checkbox_label.appendChild(span);
  49.         case_sensitive_checkbox_label.lastChild.innerHTML="case-sensitive";
  50.         case_sensitive_checkbox_label.style.marginRight="1em";
  51.    
  52.    
  53.     // create result counter field in memory
  54.     var result_counter = document.createElement("span");
  55.  
  56.     var listing_hr = listing.getElementsByTagName("hr")[0];
  57.     listing.insertBefore(search_bar, listing_hr); // insert search bar into page
  58.     listing.insertBefore(search_clear_button, listing_hr); // insert "clear" button into page
  59.     listing.insertBefore(inverted_checkbox_label, listing_hr); // insert "invert results" checkbox
  60.     listing.insertBefore(case_sensitive_checkbox_label, listing_hr); // insert "case-sensitive" checkbox
  61.     listing.insertBefore(result_counter, listing_hr); // insert result counter into page
  62.     search_bar.focus(); // actuate search bar without clicking or tapping on it
  63.  
  64.     var list_items = listing.getElementsByTagName("tr");
  65.     var count = 0; // initialize counter for "for" loops
  66.     var result_count = 0; // initialize result counter
  67.  
  68. }
  69.  
  70. function search_list() {
  71.     result_count = 0; // reset result counter
  72.     search_bar.setAttribute("value",search_bar.value); // compatibility
  73.     var search_input = search_bar.value;
  74.     var searched_content = ""; // initialize to eliminate JSHint error
  75.        
  76.     if (! case_sensitive_checkbox.checked) {
  77.         // convert to case-insensitive
  78.         search_input = search_input.toLowerCase();
  79.     }
  80.    
  81.     // The inverted checkbox status is not checked inside the "for" loop for efficiency. A pice of code that needs to be run many times should be a short as possible for improving performance.
  82.     if (! inverted_checkbox.checked) /* meaning unchecked */ {
  83.         for (count=2 /* skip "go to parent directory" */; count < list_items.length; count++) {    
  84.             // perform search
  85.             searched_content=list_items[count].innerHTML;
  86.             if (! case_sensitive_checkbox.checked) {
  87.                 // convert to case-insensitive if checkbox not check
  88.                 searched_content = searched_content.toLowerCase();
  89.             }
  90.             if (searched_content.search(search_input)<0) /* if no match */ {
  91.                 list_items[count].style.display="none"; // hide
  92.             } else {
  93.                 list_items[count].style.display=""; // fall back to original CSS by resetting to undefined
  94.                 result_count++; // count results
  95.                 }
  96.         }
  97.     } else {
  98.         for (count=2 /* skip "go to parent directory" */; count < list_items.length; count++) {    
  99.             // perform inverted search
  100.             searched_content=list_items[count].innerHTML;
  101.             if (! case_sensitive_checkbox.checked) {
  102.                 // convert to case-insensitive if checkbox not check
  103.                 searched_content = searched_content.toLowerCase();
  104.             }
  105.             if (searched_content.search(search_input)>-1) /* if match */ {
  106.                 list_items[count].style.display="none"; // hide
  107.             } else {
  108.                 list_items[count].style.display=""; // fall back to original CSS by resetting to undefined
  109.                 result_count++; // count results
  110.                 }
  111.         }
  112.     }
  113.        
  114.     result_counter.innerHTML = result_count;
  115.     if (result_count == 1) result_counter.innerHTML += " result"; // singular
  116.         else result_counter.innerHTML += " results"; // plural
  117.     if (result_count == 0) result_counter.innerHTML = "no results";
  118.     // Removing result counter if the search bar is empty because the number of items in the directory can be seen below anyway.
  119.     if (search_bar.value=="") result_counter.innerHTML = "";
  120. }
  121.  
  122. function clear_search() {
  123.     search_bar.value="";
  124.     search_bar.focus();
  125.     search_list();
  126. }
  127.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement