AO3 Text Replacer

Replace certain words on AO3 fanfics with new ones of your choosing

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name            AO3 Text Replacer
// @namespace       https://greasyfork.org/en/users/899130
// @version         1.1
// @description     Replace certain words on AO3 fanfics with new ones of your choosing
// @author          Cor_Caroli
// @include         /https?://archiveofourown\.org/works/\d+/
// @grant           none
// @directions      See the CONFIGURATION SECTION. Edit the words in the word replacement dictionary.
// ==/UserScript==

/***************************/
/** CONFIGURATION SECTION **/
/***************************/

/* * Master list of words to replace. Add as many words to replace as you'd like.
// After making changes to the word replacement dictionary, save (Ctrl+S or whatever hotkey) and then refresh AO3 to see the word replacement changes.
// !! Note that WORDS ARE CASE SENSITIVE !!
// The format is:
// "old word" : "new word",
//
// Example: You want to change all instances of "pancakes" to "waffles" in the fic
// Insert a line of code:
        "pancakes" : "waffles",
// (Remember to keep the comma at the end.)
//
// Alternatively, you can just edit the placeholder code lines with the words you want. E.g. reader insert fics, triggers, etc.
* */
const replaceDictionary = {
    "old word 1" : "new word 1",
    "old word 2" : "new word 2",
    "old word 3" : "new word 3",
    "old word 4" : "new word 4",
    "old word 5" : "new word 5",
    "old word 6" : "new word 6",
    "old word 7" : "new word 7",
};



/********************/
/** SCRIPT SECTION **/
/********************/

// Finds the target div element of the fic and drills down to its innerHTML
var origFic = document.querySelector('#main').innerHTML;

// Function that processes the text replacements in the fic
function ficProcessing(){
    // Initialize variable
    var changedFic = origFic;

    for (let w in replaceDictionary){

        // Needs a regex in order to replace words not in hyperlinks (replacing words in hyperlinks can lead to broken links when navigating to other pages)
        // Checks for hyperlinks and replaces the anchor text, but not the URL
        var regex = new RegExp("(?<!\<[^>]*)\\b" + w + "\\b", 'g');

        changedFic = changedFic.replace(regex, replaceDictionary[w]);
    }

    // Replaces the fic with the new words
    document.querySelector('#main').innerHTML = changedFic;
};

// Runs the function
ficProcessing();