xkcd 1418

Replaces the word "force" with "horse" everywhere. Is expandable with other replacements.

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name            xkcd 1418
// @name:ru         xkcd 1418
// @namespace       http://xkcd.com/1418
// @license         MIT
// @description     Replaces the word "force" with "horse" everywhere. Is expandable with other replacements.
// @description:ru  Заменяет слово "force" на "horse". Можно добавлять свои замены.
// @version         4
// @include         *
// @exclude         https://greasyfork.org/*
// @grant           none
// ==/UserScript==

/*
 * Copyright (c) 2015-2023 Andrei Rybak
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

/*
 * Based on http://bitcoinshell.mooo.com/users/noiob/dev/horse.user.js
 * and https://www.techradar.com/news/internet/the-beginner-s-guide-to-greasemonkey-scripting-598247/4
 */

const replacements = [
	['Force', 'Horse'],
	['FORCE', 'HORSE'],
	['force', 'horse']
	// add your own replacements here (e.g. ['the cloud', 'my butt']).
	// don't forget to add commas to the list
	// ru:можно добавлять свои замены здесь, например, ['the cloud', 'my butt']
	// ru:не забывайте добавить запятые к списку
];

const textNodes = document.evaluate("//text()", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

function xkcd_replace(source, replace) {
	var searchRE = new RegExp(source, 'g');
	for (var i = 0; i < textNodes.snapshotLength; i++) {
		const node = textNodes.snapshotItem(i);
		node.data = node.data.replace(searchRE, replace);
	}
}

for (var i = 0; i < replacements.length; ++i) {
	xkcd_replace(replacements[i][0], replacements[i][1]);
}