bypass-twitter-sensitive/bypass-twitter-sensitive.us...

62 lines
1.9 KiB
JavaScript

// ==UserScript==
// @name Bypass Twitter Sensitive
// @namespace https://bubbletea.dev/
// @version 2.2
// @description Bypasses Twitter's "Caution: This profile may include potentially sensitive content" page and "The following media includes potentially sensitive content" warnings.
// @author shibao
// @include /^https://twitter.com.*$/
// @include /^https://mobile.twitter.com.*$/
// @downloadURL https://gitea.bubbletea.dev/shibao/bypass-twitter-sensitive/raw/branch/stable/bypass-twitter-sensitive.user.js
// @updateURL https://gitea.bubbletea.dev/shibao/bypass-twitter-sensitive/raw/branch/stable/bypass-twitter-sensitive.user.js
// @grant none
// ==/UserScript==
// from https://developer.mozilla.org/en-US/docs/Web/API/Node#recurse_through_child_nodes
function eachNode(rootNode, callback) {
if (!callback) {
const nodes = []
eachNode(rootNode, function (node) {
nodes.push(node)
})
return nodes
}
if (false === callback(rootNode)) {
return false
}
if (rootNode.hasChildNodes()) {
const nodes = rootNode.childNodes
for (let i = 0, l = nodes.length; i < l; ++i) {
if (false === eachNode(nodes[i], callback)) {
return
}
}
}
}
(function () {
'use strict';
const observer = new MutationObserver(function (mutationList) {
for (const mutation of mutationList) {
for (const addedNode of mutation.addedNodes) {
// recurses through all child nodes as well
eachNode(addedNode, function (node) {
if (node.nodeName == 'SPAN' && (node.innerHTML == 'Yes, view profile' || node.innerHTML == 'View')) {
const viewProfileBtn = node.closest("div[role='button']");
if (viewProfileBtn) { viewProfileBtn.click(); }
}
});
}
};
});
observer.observe(document, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ["role"]
});
})();