您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Toggle hiding or showing done notifications in GitHub inbox
当前为
- // ==UserScript==
- // @name GitHub Notification Inbox Toggle
- // @namespace http://tampermonkey.net/
- // @version 1.18
- // @description Toggle hiding or showing done notifications in GitHub inbox
- // @match https://github.com/notifications*
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- // Retrieve initial states from sessionStorage or set defaults
- let isHidden = sessionStorage.getItem('isHidden') === 'true';
- let showDoneOnly = sessionStorage.getItem('showDoneOnly') === 'true';
- const doneSelectors = [
- 'svg.octicon-issue-closed',
- 'svg.octicon-git-pull-request-closed',
- 'svg.octicon-git-merge',
- 'svg.octicon-x',
- 'svg.octicon-stop',
- 'svg.octicon-rocket',
- 'svg.octicon-check',
- ];
- const createButton = (text, positionY) => {
- const button = document.createElement('button');
- button.textContent = text;
- button.style.position = 'fixed';
- button.style.left = '50%';
- button.style.transform = 'translateX(-50%)';
- button.style.zIndex = '1000';
- button.style.padding = '5px 10px';
- button.style.border = '1px solid #ccc';
- button.style.borderRadius = '4px';
- button.style.cursor = 'pointer';
- button.style.transition = 'background-color 0.3s, color 0.3s';
- button.style.top = `${positionY}px`;
- button.style.backgroundColor = 'rgba(255, 255, 255, 0.9)';
- button.style.color = '#333';
- button.addEventListener('click', (event) => {
- event.preventDefault();
- if (text === 'Toggle Hidden Notifications') {
- isHidden = !isHidden;
- showDoneOnly = false;
- } else if (text === 'Show Only Done Notifications') {
- showDoneOnly = !showDoneOnly;
- isHidden = false;
- }
- saveFilterState();
- updateVisibleNotifications();
- });
- return button;
- };
- const toggleVisibilityButton = createButton('Toggle Hidden Notifications', 10);
- const toggleShowDoneButton = createButton('Show Only Done Notifications', 50);
- document.body.appendChild(toggleVisibilityButton);
- document.body.appendChild(toggleShowDoneButton);
- function updateButtonState(button, isActive) {
- button.style.backgroundColor = isActive ? '#4caf50' : 'rgba(255, 255, 255, 0.9)';
- button.style.color = isActive ? '#fff' : '#333';
- }
- function updateVisibleNotifications() {
- const items = document.querySelectorAll('.js-navigation-container li.notifications-list-item');
- items.forEach(item => {
- const isVisible = getComputedStyle(item).display !== 'none';
- const isDone = item.querySelector(':not(.notification-list-item)').querySelector(doneSelectors);
- const shouldShow = showDoneOnly ? isDone : !isHidden || !isDone;
- if (isVisible && !shouldShow) {
- item.style.display = 'none'; // Hide if it shouldn't be displayed
- } else if (!isVisible && shouldShow) {
- item.style.display = ''; // Show if it isnt' visible but should be
- }
- });
- updateButtonState(toggleVisibilityButton, isHidden);
- updateButtonState(toggleShowDoneButton, showDoneOnly);
- }
- function saveFilterState() {
- sessionStorage.setItem('isHidden', isHidden);
- sessionStorage.setItem('showDoneOnly', showDoneOnly);
- }
- // Initial call to update visibility
- updateVisibleNotifications();
- // Observe for changes in the notification list
- const observer = new MutationObserver(() => {
- updateVisibleNotifications();
- });
- const targetNode = document.querySelector('.js-navigation-container');
- if (targetNode) {
- observer.observe(targetNode, { childList: true, subtree: true });
- }
- // Add a MutationObserver to catch changes in the document
- const pageObserver = new MutationObserver(() => {
- updateVisibleNotifications(); // Apply visibility immediately
- });
- // Observe the body for when new notifications are loaded
- pageObserver.observe(document.body, { childList: true, subtree: true });
- // Clear observers on unload
- window.addEventListener('beforeunload', () => {
- observer.disconnect();
- pageObserver.disconnect();
- });
- })();