您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在合入代码的时候需要手动+2,这个脚本实现点击按钮即可一键+2、post和submit
// ==UserScript== // @name gerrit一键审批代码 // @namespace http://tampermonkey.net/ // @version 1.1.5 // @description 在合入代码的时候需要手动+2,这个脚本实现点击按钮即可一键+2、post和submit // @author 袁龙辉 // @match https://gerrit.zte.com.cn/* // @match https://gitlab.zte.com.cn/* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAbCAYAAACJISRoAAAABHNCSVQICAgIfAhkiAAAAQtJREFUSInt1c1Kw0AUhuFTF8kFTJnAFFwKYrHQUjE0Fq2iOxG8Bn/vQ8SbEMX+oLhQ9+raXom9g0lI8roQBDdmFi0q5FsOfOdZDIdTAZAZZ27WQImUyC8ju3v7Ug1q0tva+fZ+dn4h1aAmYacreZ7/PISCPL+8orRBacPbeAyAtZaFxTpKG27v7otGUIgAbGxuo7Th4OgEgMFwhNKGVjskTdPpIA+PTyhtCMw875MJ671PtD8YudTdkCzLWFmNUNpweHyK0oZGs02SJNNDAG76w6+/UdpweXXtWnVH4jim3mihtGFpuYm11hlx3hPP86S7FomISNQJxfd91+ofWcZ/g1SgPL8lUiIF+QCIeCJE+P0wYgAAAABJRU5ErkJggg== // @grant GM_setClipboard // ==/UserScript== (function () { window.onpopstate = function () { main() }; function main() { var regex_gerrit = /gerrit\.zte\.com\.cn\/#\/c\/\d+\/\d+\//; var regex_gitlab = /gitlab\.zte\.com\.cn\:446\/person\/#\/c\/\d{5}\// if (regex_gerrit.test(location.href) || regex_gitlab.test(location.href)) { var observer = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { mutation.addedNodes.forEach(function (node) { if (node.nodeType === Node.ELEMENT_NODE) { // 审批代码弹窗 if (node.tagName === 'DIV' && node.className === 'com-google-gerrit-client-change-ChangeScreen_BinderImpl_GenCss_style-replyBox') { console.log('进来了,1') addApproveBtn() } // 评论弹窗 if (node.tagName === 'TEXTAREA' && node.className === 'com-google-gerrit-client-diff-DraftBox_BinderImpl_GenCss_style-editArea') { console.log('进来了,2') let siblings = Array.prototype.filter.call(node.parentNode.children, function(child) { return child !== node && child.classList.contains('ylh-coment-btn'); }); if (siblings.length > 0) return addCommentBtn(node) } } }); }); }); var config = { childList: true, subtree: true }; var target = document; observer.observe(target, config); } } main() function addApproveBtn() { if (document.getElementById('approveButton')) return var postBtn = document.querySelector('button[title="Post reply (Shortcut: Ctrl-Enter)"]'); var btn = document.createElement('button') btn.id = 'approveButton' btn.innerText = '一键审批通过' btn.onclick = function () { const textArea = document.querySelector('.gwt-TextArea') if (!textArea.value) { const result = window.confirm("审批结果未填哟,是否自动填充“代码无明显问题,审批通过,可以合入”并审批通过?"); if (result) { textArea.value = '代码无明显问题,审批通过,可以合入' } else return } var codeReview = getTargetRadio(1, 5, 'Code-Review') codeReview?.click() var verified = getTargetRadio(2, 5, 'Verified') verified?.click() var workflow = getTargetRadio(3, 4, 'Workflow') workflow?.click() postBtn.click() setTimeout(()=> { const submitBtn = document.querySelector('.com-google-gerrit-client-change-Actions_BinderImpl_GenCss_style-submit'); submitBtn.textContent && submitBtn.click() }, 1000) } postBtn.parentNode.insertBefore(btn, postBtn.nextSibling); } function addComment(saveBtn) { const textArea = document.querySelector('.com-google-gerrit-client-diff-DraftBox_BinderImpl_GenCss_style-editArea') textArea.value = textArea.value + ' 没有发现明显问题,ok' GM_setClipboard(textArea.value) saveBtn.click() } function addCommentBtn(node) { var saveBtn = document.querySelector('button[title="Save this draft comment'); var btn = document.createElement('button') btn.innerText = '补全+save' btn.className = 'ylh-coment-btn' btn.style.width = '70px' btn.style.height = '20px' btn.style.fontSize = '12px' var ctrlTime = 0 var spaceTime = 1 // ctrl + 空格 document.addEventListener('keydown', function(event) { if (event.ctrlKey) { ctrlTime = event.timeStamp } if(event.code === 'Space') { spaceTime = event.timeStamp } if(ctrlTime === spaceTime){ addComment(saveBtn) ctrlTime = 0 spaceTime = 1 } }); btn.onclick = () => addComment(saveBtn) node.parentNode.insertBefore(btn, node.nextSibling); } function getTargetRadio(tr, td, name) { const targetTbody = document.querySelector('.com-google-gerrit-client-change-Resources-Style-section tbody'); const thirdTr = targetTbody?.querySelectorAll('tr')[tr]; const fifthTd = thirdTr?.querySelectorAll('td')[td]; const targetSpan = fifthTd?.querySelector('span'); return targetSpan?.querySelector(`input[name="${name}"]`); } })();