// ==UserScript==
// @name AO3: highlight fandoms in user page
// @namespace ao3
// @version 1.0
// @description Highlight favourite fandoms in user page
// @author CertifiedDiplodocus
// @require http://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js
// @match http://archiveofourown.org/users/*
// @match https://archiveofourown.org/users/*
// @exclude http://archiveofourown.org/users/CertifiedDiplodocus/*
// @exclude https://archiveofourown.org/users/CertifiedDiplodocus/*
// @grant none
// ==/UserScript==
//cannibalised from fangirlishness's ao3 Highlight tags, with thanks
/* eslint-env jquery */ // allows jQuery
/* jshint esversion:6 */ // allows "let"
(function($) {
'use strict';
/**************************************************************************/
/******************************** CONFIG **********************************/
// Keep a plaintext file of this section, as it will not be saved //
// when the script updates! //
/**************************************************************************/
// Fill in your own username in the two @exclude lines above
// to avoid lighting up your own dashboard.
// Favourite fandoms list (regexp can be used)
let fandomsToHighlight = ["Original Work", "Critical Role", "Harry Potter", "Naruto", "Scooby Doo",
"Holmes", "^Avatar:", "The Avengers .Marvel"];
// !!!! BUG: can't seem to escape \( or \). Might be the same for the other brackets.
// !!!! Temporary workaround: use "." (= "any character" in regex).
// fandomsToHighlight = ["The Avengers \(Marvel", "Doctor Who"]; // this breaks the script
// This is an example. DELETE it once you've filled out your own list.
fandomsToHighlight = ["Original Work",
"Alice in Wonderland .2010.", "All Creatures Great and Small", "Attack on Titan",
"^Avatar:", "Black Books", "Blake's 7", "Broadchurch", "Buffy the Vampire Slayer",
"Cabin Pressure", "Cinderbrush", "Colbert", "Critical Role",
"Daily Show", "Discworld", "Dishonored .Video Games.", "Doctor Who", "Dresden Files",
"Fake News", "Firefly", "Fullmetal Alchemist", "Good Omens", "Gravity Falls", "Harry Potter", "Hornblower", "House M\.D\.",
"Indiana Jones", "Jonathan Strange & Mr Norrell", "Kung Fu Panda", "Life On Mars",
"MASH", "Mob Psycho 100", "Monty Python's Flying Circus", "Mushishi", "My Hero Academia",
"Marvel Cinematic Universe", "^Marvel$", // **MCU**
"The Avengers .Marvel", "The Avengers - Ambiguous", // **MCU**
"^Captain America", "Guardians of the Galaxy", "^Iron Man .Movies.", // **MCU**
"^Thor .Movies.", "^Doctor Strange", "^Captain Marvel", // **MCU**
"Naruto", "One-Punch Man", "Pirates of the Caribbean", "Pokemon - All Media Types", "Pokemon .Anime.",
"Red Dwarf", "Rick and Morty", "Sagas of Sundry: Dread",
"Scoob and Shag", "Scooby.Doo", "Sherlock", "Sleepy Hollow", "Spider-Man: Into the Spider-Verse",
"^Star Trek$", "Star Trek: Alternate Original Series", "Star Trek: The Next Generation", "Star Trek: The Original Series",
"Star Wars", "Steven Universe", "Stranger Things", "Swallows and Amazons",
"Team Fortress 2", "The Brittas Empire", "The Magnus Archives", "The Thick of It",
"The Umbrella Academy", "The X-Files", "Tintin", "Welcome to Night Vale"];
// Fandoms to highlight in a different colour (specify colour for each).
// - overrides the default colour
// - you can add fandoms here without removing them from the first list
let fandomsInColour = {"Die Hard":"#fda7d1", // pink
"Scooby Doo":"#adf7d1", // light green
"^Putin RPF":"red", // regexp patterns can be used
"somethingelse": "blue", // named colors work too
"Naruto": "orange"
};
// SOME NOTES ON REGEXP AND SEARCH RESULTS *******************************/
// By default, the search matches any string containing the search text:
// "Sherlock" matches "Sherlock (TV)", "Sherlock Holmes" and "Young Sherlock Holmes"
// For more control, use the regex symbols "^" (string start) and/or "$" (string end):
// "^Sherlock" matches "Sherlock Holmes" but not "Young Sherlock Holmes"
// "^Star Trek$" matches only "Star Trek", not "Star Trek: The Original Series" or "Star Trek: Picard"
// SPECIAL CHARACTERS: If a fandom contains any of the following characters
// . + * ? ^ $ ( ) [ ] { } | \
// they must be preceded (escaped) with a backslash (e.g. "House M\.D\.")
// for the script to work.
// FORMAT: enable/disable bold text, highlighting, and custom highlighting
let boldIsOn = true;
let highlightIsOn = true;
let customHighlightIsOn = true;
let highlightDefaultCol = 'LightYellow'; // default highlight colour
/**************************************************************************/
/**************************************************************************/
$('.fandom.listbox.group li').each(function() { //do I actually need "li"?
let $list = $(this);
$list.find('a').each(function() {
let $fandom = $(this);
let text = $fandom.text();
// let $fandomLine = $(this).closest("li"); //whole list item (including number of fics) - currently not formatted
// alternative approach: run regexp on all fandoms ("Naruto"|"Harry Potter"|...) instead of iterating through the array
// let pattern1 = new RegExp(fandomsToHighlight.join("|"));
for (var i = 0; i<fandomsToHighlight.length; i++) {
let pattern = new RegExp(fandomsToHighlight[i], "i", "g") //case-insensitive
if(text.match(pattern) != null) {
if(highlightIsOn) highlightFandom($fandom, highlightDefaultCol)
if(boldIsOn) boldFandom($fandom)
}
}
// custom highlighting, if applicable
if (customHighlightIsOn) {
for (let key in fandomsInColour) {
let pattern2 = new RegExp(key, "i", "g") //case-insensitive
if(text.match(pattern2) != null) {
highlightFandom($fandom, fandomsInColour[key])
if(boldIsOn) boldFandom($fandom);
}
}
}
});
});
function highlightFandom($fandom, color) {
$fandom.css('background-color', color);
}
function boldFandom($fandom) {
$fandom.css('font-weight', 'bold');
}
})(jQuery);