- // ==UserScript==
- // @name [AO3] Default Filters
- // @namespace https://greasyfork.org/en/users/1138163-dreambones
- // @version 1.2.2
- // @description Automatically set global filters for AO3 searches.
- // @author DREAMBONES
- // @match http*://archiveofourown.org/*
- // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
- // @grant none
- // @license MIT
- // ==/UserScript==
-
- (function() {
- 'use strict';
-
- // Config is case-insensitive. Enclose all config parameters in quotes unless stated otherwise.
- var config = {
- Sort: "",
- Language: "",
-
- IncludeRatings: [],
- ExcludeRatings: [],
-
- IncludeWarnings: [],
- ExcludeWarnings: [],
-
- IncludeCategories: [],
- ExcludeCategories: [],
-
- IncludeFandoms: [],
- ExcludeFandoms: [],
-
- IncludeCharacters: [],
- ExcludeCharacters: [],
-
- IncludeRelationships: [],
- ExcludeRelationships: [],
-
- IncludeAdditionalTags: [],
- ExcludeAdditionalTags: [],
-
- Crossovers: "",
- CompletionStatus: "",
-
- // Set word counts to "null" if you don't want a threshold. Type a number (NOT enclosed in quotes) to set an upper/lower threshold.
- MinWordCount: null,
- MaxWordCount: null,
- }
-
- var domainRe = /https?:\/\/archiveofourown\.org\/(works|tags).*/i
- if (domainRe.test(document.URL)) {
- selectDropdownOption("#work_search_sort_column", config.Sort);
- selectDropdownOption("#work_search_language_id", config.Language);
-
- selectListOption("#include_rating_tags > ul", config.IncludeRatings);
- selectListOption("#exclude_rating_tags > ul", config.ExcludeRatings);
- selectListOption("#include_archive_warning_tags > ul", config.IncludeWarnings);
- selectListOption("#exclude_archive_warning_tags > ul", config.ExcludeWarnings);
- selectListOption("#include_category_tags > ul", config.IncludeCategories);
- selectListOption("#exclude_category_tags > ul", config.ExcludeCategories);
- selectListOption("#include_fandom_tags > ul", config.IncludeFandoms);
- selectListOption("#exclude_fandom_tags > ul", config.ExcludeFandoms);
- selectListOption("#include_character_tags > ul", config.IncludeCharacters);
- selectListOption("#exclude_character_tags > ul", config.ExcludeCharacters);
- selectListOption("#include_relationship_tags > ul", config.IncludeRelationships);
- selectListOption("#exclude_relationship_tags > ul", config.ExcludeRelationships);
- selectListOption("#include_freeform_tags > ul", config.IncludeAdditionalTags);
- selectListOption("#exclude_freeform_tags > ul", config.ExcludeAdditionalTags);
-
- selectListOption("#work_crossover > ul", config.Crossovers);
- selectListOption("#work_complete > ul", config.CompletionStatus);
-
- if (config.MinWordCount != null) {
- var minWords = document.querySelector("#work_search_words_from");
- minWords.setAttribute("value", config.MinWordCount);
- }
-
- if (config.MaxWordCount != null) {
- var maxWords = document.querySelector("#work_search_words_to");
- maxWords.setAttribute("value", config.MaxWordCount);
- }
-
- function selectDropdownOption(query, option) {
- if (option.length) {
- option = new RegExp(option, "i")
- var list = document.querySelector(query);
- for (var i = 0; i < (list.length); i++) {
- if (option.test(list[i].innerHTML)) {
- list[i].setAttribute("selected", "");
- break;
- }
- }
- }
- }
-
- function selectListOption(query, option) {
- if (option.length) {
- option = new RegExp(option, "i")
- var list = document.querySelector(query).children;
- for (var i = 0; i < (list.length); i++) {
- var span = list[i].querySelectorAll("span")[1];
- var input = list[i].querySelector("input");
- if (Array.isArray(option)) {
- for (var ii = 0; ii < (option.length); ii++) {
- if (option.test(span.innerHTML)) {
- input.setAttribute("checked", "");
- let listControls = document.querySelector(`button[aria-controls="${document.querySelector(query).parentNode.id}"]`);
- let listExpanded = listControls.getAttribute("aria-expanded");
- if (!listExpanded) { listControls.click(); }
- }
- }
- }
- else {
- if (option.test(span.innerHTML)) {
- input.setAttribute("checked", "");
- let listControls = document.querySelector(`button[aria-controls="${document.querySelector(query).parentNode.id}"]`);
- let listExpanded = listControls.getAttribute("aria-expanded");
- if (!listExpanded) { listControls.click(); }
- }
- }
- }
- }
- }
- }
- })();