您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Userscript allowing you to select active branches when dispatching a workflow
- // ==UserScript==
- // @name Github Actions: Dispatch Workflow with Active Branch
- // @namespace http://tampermonkey.net/
- // @version 1.1
- // @description Userscript allowing you to select active branches when dispatching a workflow
- // @author You
- // @match https://github.com/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=github.com
- // @grant none
- // ==/UserScript==
- (function () {
- 'use strict';
- console.log('github-actions-workflow-dispatch-active-branch');
- const getActiveBranch = async () => (await fetch(`https://github.com/${window.location.pathname.match(/\/([^\/]*\/[^\/]*)/)[1]}/branches/active`, {
- "headers": {
- "accept": "application/json",
- },
- "method": "GET",
- "mode": "cors",
- "credentials": "include"
- })).json();
- const getClientEnv = function () {
- if ("undefined" != typeof document) {
- let e = document.getElementById("client-env");
- if (e)
- try {
- return JSON.parse(e.textContent || "")
- } catch (e) {
- console.error("Error parsing client-env", e)
- }
- }
- }
- const userLogin = getClientEnv().login;
- const watchElement = (selector, onShow) => {
- let el;
- let onHide;
- const work = () => {
- const targetEl = document.querySelector(selector);
- if (!el && targetEl) {
- el = targetEl;
- onHide = onShow?.(el);
- } else if (el && !targetEl) {
- el = undefined;
- onHide?.();
- }
- }
- const it = setInterval(work, 100);
- return () => clearInterval(it);
- }
- watchElement('details.details-overlay[open] .workflow-dispatch', (wf) => {
- let cleanup;
- getActiveBranch().then(res => {
- let controls;
- cleanup = watchElement('details.details-overlay[open] .branch-selection .details-overlay[open] #ref-list-branches', (el) => {
- controls = document.createElement('div');
- controls.id = "github-actions-use-active-branch-branches";
- controls.innerHTML = `
- ${res.payload.branches.map(b => `
- <div class="SelectMenu-item" style="background-color:${b.author.login == userLogin ? '#8882' : 'inherit'}" data-name="${b.name}"><b class="css-truncate css-truncate-overflow" style="width:64px;">${b.author.login}</b><span class="flex-1 css-truncate css-truncate-overflow ">${b.name}</span></div>
- `).join('')}
- `;
- el.append(controls);
- const filterInput = el.closest('.workflow-dispatch').querySelector('.SelectMenu-filter input');
- const handler = () => {
- if (filterInput.value.length > 0) {
- controls.style.display = 'none';
- el.querySelector('.SelectMenu-list').style.display = 'block';
- } else {
- controls.style.display = 'block';
- el.querySelector('.SelectMenu-list').style.display = 'none';
- }
- }
- filterInput.addEventListener('input', handler);
- handler();
- controls.querySelectorAll('.SelectMenu-item').forEach(item => {
- item.addEventListener('click', () => {
- filterInput.value = item.dataset.name;
- filterInput.dispatchEvent(new Event('input', { bubbles: true }));
- el.querySelector('.SelectMenu-item[value="' + item.dataset.name + '"]').click();
- });
- });
- return () => {
- if (controls) {
- controls.remove();
- }
- }
- });
- }).catch(console.error);
- return () => {
- cleanup?.();
- }
- });
- // Your code here...
- })();