您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
用于 cs.android.com 的优化
当前为
// ==UserScript== // @name cs.android.com 优化 // @namespace Violentmonkey Scripts // @match https://cs.android.com/* // @grant none // @run-at document-idle // @version 1.2 // @author 5ec1cff // @description 用于 cs.android.com 的优化 // @license MIT // ==/UserScript== let buttonsRoot = null; const observer = new MutationObserver(function(mutationsList, observe) { mutationsList.forEach(l => { l.addedNodes?.forEach(e => { if (e.nodeType != 1) return; if (e.tagName == 'BREADCRUMB') { buttonsRoot = e; installButtons(location.href); } }) }) }); observer.observe(document.body, { 'childList': true, 'subtree': true }); const platformJumpList = { latest: "superproject/+/android-latest-release", 16: "superproject/+/android-16.0.0_r2", a15qpr2: "superproject/+/android15-qpr2-release", U: "superproject/+/android-14.0.0_r2", T: "superproject/+/android-13.0.0_r3", Sv2: "superproject/+/android-12.1.0_r27", S: "superproject/+/android-12.0.0_r3", R: "superproject/+/android-11.0.0_r21", Main: "superproject/main/+/main", Master: "superproject/+/master", "Master-Main": "superproject/+/main", Q: "superproject/+/android-10.0.0_r47", P: "superproject/+/android-9.0.0_r61", O_MR1: "superproject/+/android-8.1.0_r81", // 8.1, 27 O: "superproject/+/android-8.0.0_r36", // 8.0, 26 N_MR1: "superproject/+/android-7.1.2_r39", // 7.1, 25 N: "superproject/+/android-7.0.0_r7", // 7.0, 24 M: "superproject/+/android-6.0.1_r9", // 6, 23 }; const kernelJumpList = { '12-5.10': 'superproject/+/common-android12-5.10', '13-5.10': 'superproject/+/common-android13-5.10', '13-5.15': 'superproject/+/common-android13-5.15', '14-5.15': 'superproject/+/common-android14-5.15', '14-6.1': 'superproject/+/common-android14-6.1', '15-6.6': 'superproject/+/common-android15-6.6', 'main': 'superproject/+/common-android-mainline', } function getJump(url, to) { if (url.match(/android\/platform\/superproject$/)) url += '/+/android-latest-release:'; else if (url.match(/android\/platform\/superproject\/main$/)) url += '/+/main:'; else if (url.match(/android\/kernel\/superproject$/)) url += '/+/common-android-mainline:'; return url.replace(/(?<=android\/)(.*)(?=:)/, to); } function installButtons(urlstr) { if (buttonsRoot == null) return; Array.from(buttonsRoot.querySelectorAll('.jumpbtn')).forEach(x=>x.remove()); let url = new URL(urlstr); if (url.pathname.match(/^\/android\/platform\//)) { for (const item in platformJumpList) { const v = platformJumpList[item]; let btn = document.createElement("a"); btn.textContent = item; btn.href = getJump(urlstr, 'platform/' + v); btn.style = "margin-right: 1em;"; btn.classList.add("jumpbtn"); buttonsRoot.appendChild(btn); } } else if (url.pathname.match(/^\/android\/kernel\//)) { for (const item in kernelJumpList) { const v = kernelJumpList[item]; let btn = document.createElement("a"); btn.textContent = item; btn.href = getJump(urlstr, 'kernel/' + v); btn.style = "margin-right: 1em;"; btn.classList.add("jumpbtn"); buttonsRoot.appendChild(btn); } } } navigation.addEventListener('navigate', (e) => { console.log('orig', location.href); console.log('dest', e.destination.url); installButtons(e.destination.url); }) // 2025-04-08:增加 diff 的提交+行号链接跳转 function installDiffLineLinkListener() { let last = null; let f = (e) => { if (last == e.srcElement) return; if (e.srcElement?.parentElement == last) return; if ( e?.srcElement?.tagName == "DIV" && e?.srcElement?.classList?.contains?.("CodeMirror-linenumber") ) { last = e.srcElement; try { let p = last.parentElement; let url = null, prefix, commit; let filepath = document.querySelector( "#skiplink-navigation-target" )?.textContent; let diffPage = false; if (filepath == null) { // in diff page let p = last.parentElement; while (p) { if (p?.classList?.contains("mat-expansion-panel-content-wrapper")) { filepath = p.previousSibling?.querySelector("a")?.innerText; diffPage = true; break; } p = p.parentElement; } } if (filepath == null) return; let line = last.textContent; while (p) { if (p?.classList?.contains("CodeMirror-merge-left")) { if (!diffPage) { url = document.querySelector(".left-diff a").href; } else { let pos = location.href.lastIndexOf("/"); let prefix = location.href.substring(0, pos); let commits = location.href.substring(pos + 1); url = prefix + "/" + commits.split("...")[0]; } break; } else if ( p?.classList?.contains("CodeMirror-merge-pane-rightmost") ) { if (!diffPage) { url = document.querySelector(".right-diff a").href; } else { let pos = location.href.lastIndexOf("/"); let prefix = location.href.substring(0, pos); let commits = location.href.substring(pos + 1); url = prefix + "/" + commits.split("...")[1]; } break; } p = p?.parentElement; } let p1 = url.lastIndexOf("/"); prefix = url.substring(0, p1); commit = url.substring(p1 + 1); url = `${prefix}/${commit}:${filepath};l=${line}`; // console.log(url); let a = document.createElement("a"); a.href = url; // a.terget = "_blank"; a.textContent = line; last.replaceChild(a, last.childNodes[0]); } catch (err) { console.error(last, err); } } else { try { if (last) last.replaceChild(new Text(last.textContent), last.childNodes[0]); } catch (err) { console.error(err); } last = null; } }; addEventListener("mousemove", f); } installDiffLineLinkListener();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址