From 35c7f30c149b6a23ce97171f92f42a424432946b Mon Sep 17 00:00:00 2001 From: blankie Date: Thu, 1 Sep 2022 20:28:33 +0700 Subject: [PATCH] Update nightly.link buttons to 1.1 SPA-like page navigation is now handled --- nightly.link buttons.user.js | 64 +++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 20 deletions(-) diff --git a/nightly.link buttons.user.js b/nightly.link buttons.user.js index 1f89288..ed04e82 100644 --- a/nightly.link buttons.user.js +++ b/nightly.link buttons.user.js @@ -1,10 +1,9 @@ // ==UserScript== // @name nightly.link buttons // @namespace blankie-scripts -// @match http*://github.com/*/*/runs/* -// @match http*://github.com/*/*/actions/runs/* +// @match http*://github.com/* // @grant none -// @version 1.0 +// @version 1.1 // @author blankie // @run-at document-end // @description Show buttons to nightly.link on artifacts and build logs @@ -12,36 +11,61 @@ const INSTANCE_URL = "https://nightly.link"; -function pageUpdated() { - console.log("awo"); - let artifactsDiv = document.evaluate( - "//div[@class = 'mx-0 mx-md-1'][h4[@class = 'text-bold']][div[@class = 'color-fg-muted text-small']]", document) - .iterateNext(); - if (artifactsDiv !== null) { - let artifactsButton = document.createElement("a"); - artifactsButton.className = "btn"; - // https://stackoverflow.com/a/17228764 - artifactsButton.style.float = "right"; - artifactsButton.innerText = "View on nightly.link"; - artifactsButton.href = INSTANCE_URL + location.pathname; - artifactsDiv.prepend(artifactsButton); +function addArtifactsButton(artifactsDiv) { + if (artifactsDiv === null) { + return false; } - let githubLogsButton = document.querySelector("a.js-steps-dropdown-raw-logs"); - let logsHeader = document.querySelector("div.js-checks-log-toolbar"); + let artifactsButton = document.createElement("a"); + artifactsButton.className = "btn"; + // https://stackoverflow.com/a/17228764 + artifactsButton.style.float = "right"; + artifactsButton.innerText = "View on nightly.link"; + artifactsButton.href = INSTANCE_URL + location.pathname; + artifactsDiv.prepend(artifactsButton); + + return true; +} + +function addLogsButton(githubLogsButton, logsHeader) { if (githubLogsButton !== null) { let nightlyLogsButton = document.createElement("a"); nightlyLogsButton.className = "pl-5 dropdown-item btn-link"; nightlyLogsButton.innerText = "View logs on nightly.link"; nightlyLogsButton.href = INSTANCE_URL + location.pathname + ".txt"; githubLogsButton.parentNode.append(nightlyLogsButton); + return true; } else if (logsHeader !== null) { let logsLink = document.createElement("a"); logsLink.innerText = "View on nightly.link"; logsLink.href = INSTANCE_URL + location.pathname + ".txt"; logsHeader.append(logsLink); + return true; + } + return false; +} + +function handleNewPage() { + let artifactsDiv = document.body.querySelector("div#artifacts div.mx-0.mx-md-1"); + let githubLogsButton = document.body.querySelector("a.js-steps-dropdown-raw-logs"); + let logsHeader = document.body.querySelector("div.js-checks-log-toolbar"); + addArtifactsButton(artifactsDiv) || addLogsButton(githubLogsButton, logsHeader); +}; +handleNewPage(); + +function observerCallback(mutationList, observer) { + for (mutation of mutationList) { + if (mutation.type !== "childList") { + continue; + } + for (node of mutation.addedNodes) { + if (node.nodeName === "BODY") { + handleNewPage(); + return; + } + } } } -// TODO: function properly on SPA-like navigation -pageUpdated(); +let observer = new MutationObserver(observerCallback); +observer.observe(document.body.parentNode, {childList: true}); \ No newline at end of file