Last active
March 13, 2021 15:17
-
-
Save mkizka/01f0b00d590ddb2acc54a2fe9bd605a4 to your computer and use it in GitHub Desktop.
TweetDeckでいいね押す前に確認ダイアログ出すUserScript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==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