UserScripts
x.com
code:delete-for-you-tab.js
// ==UserScript==
// @name Delete "For You" from x.com
// @version 2024-10-11
// @description x.comのオススメタブ削除
// @author You
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// ==/UserScript==
// オススメタブが選択されていたら Following タブに強制的に切り替える
function changeFollowingTimeline() {
// Check if there's a selected tab
if (!tablist || !selectedTab) return;
// Get localized "Following" text (it's the second tab)
const forYouTabText = tablist.querySelector("divrole='presentation':nth-of-type(1) span").textContent.toLowerCase(); const selectedTabText = selectedTab.querySelector("divdir='ltr' > span").textContent.toLowerCase(); if (selectedTabText === forYouTabText) {
secondTab.click();
}
return; // Already on the "Following" tab
};
(function() {
'use strict';
// 特定のrole属性を持つdiv要素を非表示にする関数
function hideUnnecessaryDivs() {
if (window.location.pathname.startsWith('/home') && homeTimelineDiv) {
// 最初の <div role="presentation"> を見つけて非表示にする
if (presentationDiv) {
presentationDiv.style.display = 'none'; // 非表示にする
} else {
console.log('No presentation div found.');
}
}
if (jobLink) {
jobLink.style.display = 'none';
}
changeFollowingTimeline(); // オススメタブを選択されないようにする
}
// 初回実行
hideUnnecessaryDivs();
// MutationObserverで動的に追加される要素も監視
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.addedNodes.length > 0) {
hideUnnecessaryDivs(); // 新しく追加された要素にも対応
}
});
});
// DOM全体を監視
observer.observe(document.body, { childList: true, subtree: true });
})();
全ドメイン
code:add-notranslate-class-to-code-related-tags.js
// ==UserScript==
// @name Add notranslate class to code related tags
// @version 0.0.1
// @description add notranslate class to code related tags
// @author zenwerk
// @match *://*/*
// @grant none
// ==/UserScript==
function addNoTranslateClass(tags) {
for(const tag of tags) {
tag.classList.add('notranslate');
}
}
(function () {
'use strict';
// Markdown や AsciiDoc のソースコードハイライト部分は翻訳しない
var preTags = document.getElementsByTagName('pre');
addNoTranslateClass(preTags);
var codeTags = document.getElementsByTagName('code');
addNoTranslateClass(codeTags);
// Doxygen
var fragmentDivs = document.getElementsByClassName('fragment');
addNoTranslateClass(fragmentDivs);
// Sphinx
var sigTags = document.getElementsByClassName('sig sig-object highlight');
addNoTranslateClass(sigTags);
var sigNames = document.getElementsByClassName('sig-name');
addNoTranslateClass(sigNames);
// tableの先頭tdは翻訳しない方が良い場合が多い
const trRows = document.querySelectorAll('table tbody tr');
trRows.forEach((tr) => {
const firstTd = tr.querySelector('td');
firstTd.classList.add('notranslate');
});
})();
Github
code:add-notranslate-class-to-code-related-tags-at-github.js
/// ==UserScript==
// @name Add notranslate class to code related tags at github
// @version 0.0.1
// @description add notranslate class to code related tags at github
// @author zenwerk
// @match *://github.com/*
// @match *://gist.github.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// ファイルリスト表示部分は翻訳しない
var fileListDiv = document.querySelector('div.Box.mb-3');
fileListDiv.classList.add('notranslate');
/* インラインのコード部分は翻訳しない
var codeTags = document.getElementsByTagName('code');
for (const codeTag of codeTags) {
var newDiv = document.createElement('div');
newDiv.classList.add('notranslate');
var parent = codeTag.parentNode;
parent.replaceChild(newDiv, codeTag);
newDiv.appendChild(codeTag);
}
*/
})();
Neat-reader
code:add-notranslate-class-to-code-related-tags-at-neat-reader.js
// ==UserScript==
// @name Add notranslate class to code related tags at Meat Reader
// @version 0.0.1
// @description add notranslate class to code related tags at neat-reader
// @author zenwerk
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// @run-at document-idle
// ==/UserScript==
const setNoTranslateClass = () => {
// ソースコード部は翻訳しない
var preTags = document.getElementsByTagName('pre');
for (var i = 0; i < preTags.length; i++) {
preTagsi.classList.add('notranslate'); }
// tableの先頭tdは翻訳しない方が良い場合が多い
const trRows = document.querySelectorAll('table tbody tr');
trRows.forEach((tr) => {
const firstTd = tr.querySelector('td');
firstTd.classList.add('notranslate');
});
}
(function () {
'use strict';
var viewerNode = document.getElementById('neat-epub-viewer');
// (変更を監視する) オブザーバーのオプション
const config = { childList: true, subtree: true };
// 変更が発見されたときに実行されるコールバック関数
const callback = function (mutationsList, observer) {
// Use traditional 'for loops' for IE 11
for (const mutation of mutationsList) {
if (mutation.type === 'childList') {
// notranslateタグを付与する
setNoTranslateClass();
}
}
};
// コールバック関数に結びつけられたオブザーバーのインスタンスを生成
const observer = new MutationObserver(callback);
// 対象ノードの設定された変更の監視を開始
observer.observe(viewerNode, config);
// 右クリック有効化
document.addEventListener('contextmenu', (event) => {
event.stopImmediatePropagation();
}, true);
})();
livebook.manning.com
code:manning.js
// ==UserScript==
// @name Add notranslate class to code related tags at livebook.manning.com
// @version 0.0.1
// @description add notranslate class to code related tags at livebook.manning.com
// @author zenwerk
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// @run-at document-idle
// ==/UserScript==
const setNoTranslateClass = () => {
// ソースコード部は翻訳しない
var preTags = document.getElementsByTagName('pre');
for (var i = 0; i < preTags.length; i++) {
preTagsi.classList.add('notranslate'); }
// tableの先頭tdは翻訳しない方が良い場合が多い
const trRows = document.querySelectorAll('table tbody tr');
trRows.forEach((tr) => {
const firstTd = tr.querySelector('td');
firstTd.classList.add('notranslate');
});
}
(function () {
'use strict';
var viewerNode = document.getElementById('main-page-content');
// (変更を監視する) オブザーバーのオプション
const config = { childList: true, subtree: true };
// 変更が発見されたときに実行されるコールバック関数
const callback = function (mutationsList, observer) {
// Use traditional 'for loops' for IE 11
for (const mutation of mutationsList) {
if (mutation.type === 'childList') {
// notranslate class を付与する
setNoTranslateClass();
}
}
};
// コールバック関数に結びつけられたオブザーバーのインスタンスを生成
const observer = new MutationObserver(callback);
// 対象ノードの設定された変更の監視を開始
observer.observe(viewerNode, config);
// 右クリック有効化
document.addEventListener('contextmenu', (event) => {
event.stopImmediatePropagation();
}, true);
})();
git-books
code:add-notranslate-class-to-code-related-tags-at-gitbooks.js
// ==UserScript==
// @name Add notranslate class to code related tags at git-books
// @version 0.0.1
// @description add notranslate class to code related tags at gitbooks.io
// @author zenwerk
// ==/UserScript==
(function () {
'use strict';
waitForKeyElements('#book-search-results', node => {
node.find('pre').each((_, pre) => {
pre.classList.add('notranslate');
});
});
})();
古いやつ
vim-vixen
code:fix-vim-vixen-white-bar.js
// ==UserScript==
// @name Vim Vixen Vix
// @namespace Violentmonkey Scripts
// @match *://*/*
// @grant GM_addStyle
// @run-at document-start
// @version 1.1
// @author -
// @description Fixes white bottom bar on dark themed web pages when using Vim Vixen
// ==/UserScript==
GM_addStyle(".vimvixen-console-frame {height: 0px; color-scheme: light !important;}");