// ==UserScript== // @name mod github layout // @name:zh-CN 调整github新布局 // @version 0.0.3 // @namespace https://github.com/Ahaochan/Tampermonkey // @match *://*.github.com/*/* // @description Temporarily improve github project layout // @description:zh-CN 该插件用于临时改善github新版本布局 // @downloadURL https://update.greasyfork.icu/scripts/406045/mod%20github%20layout.user.js // @updateURL https://update.greasyfork.icu/scripts/406045/mod%20github%20layout.meta.js // ==/UserScript== ((document)=>{ const menuSelector = 'nav.js-repo-nav'; let menu = document.querySelector(menuSelector).parentNode; let progressBar = document.querySelector('.progress-pjax-loader > span'); if(menu && initoPlugin()) { tickLoaded = true; console.log('插件初始化完成,此插件临时改善新版github布局\n2020-06-24\n-by-灰铁炼成樱花'); let lastMesh = document.location.href; setInterval(async () => { const newMesh = document.location.href; if(lastMesh !== newMesh) { lastMesh = newMesh; await isLoaded(); initoPlugin(); } }, 100); } function initoPlugin() { const removeColorClass = 'bg-gray-light'; menu.classList.add('container-xl'); menu.classList.remove(removeColorClass); menu.childNodes.forEach((node) => { node.nodeType === 1 && node.classList.remove(removeColorClass); }); const content = document.querySelector('.gutter-condensed > div:nth-child(2)'); if(content) { TabfindPubLinks(content); return true; } } function TabfindPubLinks(content) { let pubLinks = content.querySelectorAll('a.text-small'); for (let i = 0, l = pubLinks.length; i < l; i++) { let el = pubLinks[i]; let text = el.innerText; let match = text.match(/\d+.*releases/); if(match) { const link = el.getAttribute('href'); let pubNum = parseInt(text.match(/\d+/)[0]); if(pubNum > 0) { pubNum += 1; } const insertTmp = `
  • Release ${pubNum.toString()}
  • `; const beforeTab = menu.querySelector('.UnderlineNav > ul'); beforeTab && beforeTab.insertAdjacentHTML('beforeend', insertTmp); break; } } } async function isLoaded() { let checkTimer = 0; return new Promise((resolve) => { checkTimer = setInterval(() => { menu = document.querySelector(menuSelector).parentNode; if(progressBar.offsetWidth >= document.body.clientWidth) { resolve(); clearInterval(checkTimer); } }, 100); }) } })(document);