🎉 欢迎访问GreasyFork.Org 镜像站!本镜像站由公众号【爱吃馍】搭建,用于分享脚本。联系邮箱📮

Greasy fork 爱吃馍镜像

Greasy Fork is available in English.

📂 缓存分发状态(共享加速已生效)
🕒 页面同步时间:2026/02/01 15:14:36
🔄 下次更新时间:2026/02/01 16:14:36
手动刷新缓存

GitHub Toggle Expanders

A userscript that toggles all expanders when one expander is shift-clicked

目前為 2019-06-13 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

🚀 安装遇到问题?关注公众号获取帮助

公众号二维码

扫码关注【爱吃馍】

回复【脚本】获取最新教程和防失联地址

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

🚀 安装遇到问题?关注公众号获取帮助

公众号二维码

扫码关注【爱吃馍】

回复【脚本】获取最新教程和防失联地址

// ==UserScript==
// @name        GitHub Toggle Expanders
// @version     1.2.0
// @description A userscript that toggles all expanders when one expander is shift-clicked
// @license     MIT
// @author      Rob Garrison
// @namespace   https://github.com/Mottie
// @include     https://github.com/*
// @run-at      document-idle
// @icon        https://github.githubassets.com/pinned-octocat.svg
// ==/UserScript==
(() => {
	"use strict";

	function toggle(el, modKey) {
		const stateNode = el.closest(".js-details-container, details");
		const state = stateNode.nodeName === "DETAILS" ?
			stateNode.open :
			stateNode.classList.contains("open");
		const parentNode = stateNode.closest(modKey ?
			".container, .js-discussion" :
			".commit-group, .js-timeline-item"
		);
		const containers = parentNode.querySelectorAll(
			".js-details-container, .outdated-comment"
		);

		[...containers].forEach(node => {
			if (node.nodeName === "DETAILS") {
				node.open = state;
			} else {
				node.classList.toggle("open", state);
			}
		});
	}

	document.body.addEventListener("click", event => {
		const target = event.target;
		const mod = event.ctrlKey
			|| event.metaKey
			|| window.location.pathname.includes("/compare/");
		if (target && event.getModifierState("Shift")) {
			// give GitHub time to update the elements
			setTimeout(() => {
				if (target.matches(".js-details-target")) {
					toggle(target, mod);
				} else if (target.matches(".btn-link, .js-toggle-outdated-comments")) {
					toggle(target.closest("details"), mod);
				}
			}, 100);
		}
	});

})();