Page MenuHomePhabricator

smaller_gerritbot_comments.js

Authored By
JMeybohm
Apr 8 2024, 8:33 AM
Size
4 KB
Referenced Files
None
Subscribers
None

smaller_gerritbot_comments.js

// ==UserScript==
// @name Smaller bot comments
// @version 6
// @description Changes bot comments into one-liners.
// @downloadURL https://phabricator.wikimedia.org/paste/raw/11638/
// @match https://phabricator.wikimedia.org/*
// @grant none
// ==/UserScript==
const gitlabUrl = "https://gitlab.wikimedia.org/repos/"
const olderHidden = document.getElementsByClassName("phui-timeline-older-transactions-are-hidden");
// This MutationObserver is used to monitor the removal of the
// "Show Older Changes" banner which will get removed from DOM after
// all oder changes have been added already.
function handleMutation(mutationsList, observer) {
mutationsList.forEach(mutation => {
mutation.removedNodes.forEach(node => {
// Check if the removed node is the show-older-block
if (node.getAttribute('data-sigil') === 'show-older-block') {
main();
}
});
});
}
function getCleanTitle(me) {
// Remove the text node: "added a comment."
title = me.querySelector(".phui-timeline-title")
title.childNodes.forEach(n => {
if (n.nodeType == 3) {
n.remove()
}
});
return title
}
function handleGerritbot(me) {
content = me.querySelectorAll(".phabricator-remarkup p")
if (content[0].textContent.includes(gitlabUrl)) {
// gerritbot seems to have handled gitlab changes in the past
return handleCodeReviewBot(me)
} else {
// Comments from gerrit changes
lastIDX = content.length - 1
link = content[lastIDX].children[0]
text = []
content.forEach(function(e, i){
if (i < lastIDX) {
text = text.concat(e.textContent.split('\n'))
}
})
textContent = text[0].trim()
textTooltip = text[1].trim()
changeId = textContent.match(/^Change #?(\d+)/)[1]
newText = textContent.replace(/^Change #?\d+ (.*):$/, '$1')
link.text = changeId
// Add repo name and commit message as title for the changeId link
link.setAttribute('title', textTooltip)
title = getCleanTitle(me)
title.append(": Change ", link, " ", newText)
return true
}
}
function handleCodeReviewBot(me) {
content = me.querySelectorAll(".phabricator-remarkup p")
// Comments from gitlab changes
link = content[0].querySelector(".remarkup-link")
actionLine = content[0].textContent.replace(link.href, "").trim().split(" ")
action = actionLine.pop()
user = actionLine.join(" ")
// Remove the gitlab base URL from link rext
link.text = link.href.replace(gitlabUrl, "")
// Add the commit message as title for the link
link.setAttribute('title', content[1].textContent)
title = getCleanTitle(me)
title.append(": MR ", link, " ", action, " by ", user)
return true
}
function handleStashbot(me) {
content = me.querySelector(".phabricator-remarkup p")
salSpan = content.querySelector("span")
ircChannel = salSpan.textContent.match(/.*\((#\S+)\)/)[1]
salURL = salSpan.querySelector("a").href
salSpan.remove()
salLink = document.createElement("a")
salLink.setAttribute("href", salURL)
salLink.setAttribute("target", "_blank")
salLink.text = ircChannel
title = getCleanTitle(me)
title.append(" ", salLink, ": ")
// remove the timestamp from text node
content.childNodes.forEach(n => {
if (n.nodeType == 3) {
n.textContent = n.textContent.trimLeft().replace(/\[[\d-TZ:]+\] /, '')
}
})
title.append(...content.childNodes)
return true
}
function main() {
const majorEvents = document.querySelectorAll(".phui-timeline-major-event")
majorEvents.forEach(me => {
let modified = false
if (me.querySelector(".phui-handle").text == 'gerritbot') {
modified = handleGerritbot(me)
}
if (me.querySelector(".phui-handle").text == 'Stashbot') {
modified = handleStashbot(me)
}
if (me.querySelector(".phui-handle").text == 'CodeReviewBot') {
modified = handleCodeReviewBot(me)
}
if (modified) {
// remove the "quote" menu on the right
me.querySelector(".phui-timeline-menu").remove()
// remove the original comment content
me.querySelector(".phui-timeline-core-content").remove()
// make this event minor (one-liner)
me.classList.replace("phui-timeline-major-event", "phui-timeline-minor-event")
}
});
}
// Remove irrelevant stuff from page title
// ⚓ T307943
document.title = document.title.replace(/⚓ T\d+ /, "");
// Run the main function
main();
// Register observers to watch for loading of older events
// which might happen on click or when a anchor to an older
// event is in the URL.
if (olderHidden.length > 0) {
const observer = new MutationObserver(handleMutation);
const observerConfig = { childList: true };
for (let ohb of olderHidden) {
observer.observe(ohb.parentNode, observerConfig);
}
}

File Metadata

Mime Type
text/plain; charset=utf-8
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15494227
Default Alt Text
smaller_gerritbot_comments.js (4 KB)

Event Timeline