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

Greasy fork 爱吃馍镜像

Greasy Fork is available in English.

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

GitHub Toggle Expanders

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

当前为 2019-06-13 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 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);
		}
	});

})();