// ==UserScript== // @name GitHub 菜单助手 // @namespace http://tampermonkey.net/ // @version 2.0 // @description 完全原生GitHub样式,直接插入li到feed之后 // @match https://github.com/ // @icon https://github.githubassets.com/pinned-octocat.svg // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; function waitForElement(selector, callback) { const el = document.querySelector(selector); el ? callback(el) : setTimeout(() => waitForElement(selector, callback), 200); } function addNativeMenuItems() { const feedItem = document.querySelector('li[data-item-id="feed"]'); if (!feedItem || document.querySelector('.custom-github-li')) return; const menuItems = [ { id: 'repo', text: '仓库', href: '/repos' }, { id: 'stars', text: '星标', href: '/stars' }, { id: 'trending', text: '热门', href: '/trending' }, { id: 'explore', text: '探索', href: '/explore' }, { id: 'marketplace', text: '市场', href: '/marketplace' }, { id: 'settings', text: '设置', href: '/settings' } ]; let lastItem = feedItem; menuItems.forEach(item => { // 1:1 复刻你给的原生 li 结构 const li = document.createElement('li'); li.dataset.itemId = item.id; li.dataset.targets = 'nav-list.items'; li.dataset.viewComponent = 'true'; li.className = 'ActionListItem custom-github-li'; const a = document.createElement('a'); a.href = item.href; a.dataset.viewComponent = 'true'; a.className = 'ActionListContent ActionListContent--visual16'; // 视觉图标区域 const visualSpan = document.createElement('span'); visualSpan.className = 'ActionListItem-visual ActionListItem-visual--leading'; // === 仓库图标:官方SVG === if (item.id === 'repo') { visualSpan.innerHTML = ``; } // === 星标图标:官方SVG === else if (item.id === 'stars') { visualSpan.innerHTML = ``; } // === 探索图标:官方SVG === else if (item.id === 'explore') { visualSpan.innerHTML = ``; } // === 市场图标:你提供的gift SVG === else if (item.id === 'marketplace') { visualSpan.innerHTML = ``; } // === 设置图标:官方SVG === else if (item.id === 'settings') { visualSpan.innerHTML = ``; } // 热门图标 + 垂直居中 else { visualSpan.style.cssText = "display: flex; align-items: center; justify-content: center; width: 16px; height: 16px; font-size: 16px;"; visualSpan.textContent = '🔥'; } // 文字label const labelSpan = document.createElement('span'); labelSpan.dataset.viewComponent = 'true'; labelSpan.className = 'ActionListItem-label'; labelSpan.textContent = item.text; a.append(visualSpan, labelSpan); li.appendChild(a); lastItem.after(li); lastItem = li; }); } waitForElement('ul.ActionListWrap li[data-item-id="feed"]', addNativeMenuItems); })();