Advertisement
Guest User

Archive search 2.0

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