Skip to content

Instantly share code, notes, and snippets.

@mkizka
Last active March 13, 2021 15:17
Show Gist options
  • Save mkizka/01f0b00d590ddb2acc54a2fe9bd605a4 to your computer and use it in GitHub Desktop.
Save mkizka/01f0b00d590ddb2acc54a2fe9bd605a4 to your computer and use it in GitHub Desktop.
TweetDeckでいいね押す前に確認ダイアログ出すUserScript
// ==UserScript==
// @name いいね確認 for TweetDeck
// @version 0.3.1
// @author mkizka
// @description TweetDeckでいいねする前に確認ダイアログを出すUserScript
// @homepage https://gist.github.com/mkizka/01f0b00d590ddb2acc54a2fe9bd605a4
// @match https://tweetdeck.twitter.com/*
// ==/UserScript==
(function () {
function isFavorited(node) {
return node.querySelector(".is-favorite") != null;
}
function insertConfirmToFavButton(streamItem) {
const blockedRel = "favorite_blocked";
const button = streamItem.querySelector("a[rel=favorite]");
// いいねボタンが無い要素(DMなど)は無視
if (!button) return;
if (!isFavorited(streamItem)) {
button.rel = blockedRel;
}
button.addEventListener("click", () => {
if (isFavorited(streamItem)) return;
if (button.rel == blockedRel) {
const buttonTitle = button.title || button.dataset.originalTitle
const screenName = buttonTitle.trim().split(' ')[2]
const ok = window.confirm(`@${screenName}でいいねしますか?`);
if (ok) {
button.rel = "favorite";
button.click();
}
}
});
}
const observer = new MutationObserver((records) => {
records.forEach((record) => {
if (record.target.classList.contains("js-column-detail")) {
// js-column-detailを開いてから要素が設定されるまで遅延がある?ため少し待つ
setTimeout(() => {
record.addedNodes.forEach((node) => {
if ("querySelectorAll" in node) {
const streamItems = node.querySelectorAll(".stream-item");
streamItems.forEach((streamItem) =>
insertConfirmToFavButton(streamItem)
);
}
});
}, 500);
}
if (record.target.classList.contains("js-chirp-container")) {
record.addedNodes.forEach((streamItem) =>
insertConfirmToFavButton(streamItem)
);
}
});
});
observer.observe(document.body, { childList: true, subtree: true });
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment