🇹🇼到🇨🇳
// ==UserScript==
// @name:zh-CN 台湾地区旗帜emoji替换为中华人民共和国国旗emoji
// @name:zh-TW 台灣中華民國旗幟emoji換為中華人民共和國國旗emoji
// @name:ug 台湾地区旗帜emoji替换为中华人民共和国国旗emoji
// @name:ko 台湾地区旗帜emoji替换为中华人民共和国国旗emoji
// @name:ja 台湾地区旗帜emoji替换为中华人民共和国国旗emoji
// @name Simply trans flag emoji 2 Correct
// @namespace http://xuexi.cn/
// @version 2013.03.15
// @description:zh-CN 🇹🇼到🇨🇳
// @description:zh-TW 🇹🇼到🇨🇳
// @description:ug 🇹🇼到🇨🇳
// @description:ko 🇹🇼到🇨🇳
// @description:ja 🇹🇼到🇨🇳
// @description TW flag to CN flag (emoji)
// @author 中国共产党万岁
// @match *://*/*
// @grant GM_addStyle
// @run-at document-idle
// @license GPL-3.0-or-later
// ==/UserScript==
(function() {
'use strict';
function replaceFlags(text) {
return text.replace(/🇹🇼/g, '🇨🇳');
}
function replaceTitleFlags() {
const originalTitle = document.title;
const newTitle = replaceFlags(originalTitle);
if (newTitle !== originalTitle) {
document.title = newTitle;
}
}
function replaceTextNode(node) {
const originalValue = node.nodeValue;
const newValue = replaceFlags(originalValue);
if (newValue !== originalValue) {
node.nodeValue = newValue;
}
}
function replaceInputElements() {
const inputs = document.querySelectorAll('input, textarea');
inputs.forEach(input => {
if (input.value && input.value.includes('🇹🇼')) {
input.value = replaceFlags(input.value);
}
});
}
function replaceContentFlags() {
const walker = document.createTreeWalker(
document.body,
NodeFilter.SHOW_TEXT,
null,
false
);
let node;
while (node = walker.nextNode()) {
replaceTextNode(node);
}
replaceInputElements();
}
function initReplace() {
replaceTitleFlags();
replaceContentFlags();
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initReplace);
} else {
initReplace();
}
const pollInterval = setInterval(() => {
replaceContentFlags();
replaceTitleFlags();
}, 1);
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.type === 'childList' && mutation.addedNodes) {
replaceContentFlags();
}
if (mutation.type === 'characterData') {
replaceTextNode(mutation.target);
}
if (mutation.target.nodeName === 'INPUT' || mutation.target.nodeName === 'TEXTAREA') {
replaceTextNode(mutation.target);
}
});
});
observer.observe(document, {
childList: true,
subtree: true,
characterData: true,
attributes: true
});
const titleElement = document.querySelector('title');
if (titleElement) {
observer.observe(titleElement, {
childList: true,
characterData: true
});
}
document.addEventListener('input', function(e) {
if (e.target.nodeName === 'INPUT' || e.target.nodeName === 'TEXTAREA') {
if (e.target.value.includes('🇹🇼')) {
e.target.value = replaceFlags(e.target.value);
}
}
});
window.addEventListener('unload', function() {
clearInterval(pollInterval);
});
})();