您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
一键复制iCafe信息,支持生成gitMsg,支持多选,支持预览
// ==UserScript== // @name iCopy5 // @namespace http://tampermonkey.net/ // @version 5.4.2 // @description 一键复制iCafe信息,支持生成gitMsg,支持多选,支持预览 // @author [email protected] // @match https://console.cloud.baidu-int.com/devops/icafe/* // @grant none // @license MIT // @updateAt 2022-01-12 // ==/UserScript== (function() { 'use strict'; // Your code here... let panelRootEl = null; const initPanel = ()=>{ panelRootEl = document.createElement('div'); panelRootEl.innerHTML=` <div id="icode-master-v5" style="color:#fff;position:fixed;left:0;bottom:100px;z-index:999;background:black;width:50px;height:300px;"><br/> <box style="background:white;color:#5069e6;">iCopy5</box> <span id="word"></span> <img id="girl" style="width:50px;height:50px;border-radius:50%;" crossorigin="anonymous" alt="girl"/> <hr/> 模式 <form name="myForm"> <input type="radio" id="off" name="mode" value="0" > <label for="off">关闭</label> <input type="radio" id="one" name="mode" value="1" checked> <label for="one">单选</label> <input type="radio" id="multiple" name="mode" value="2"> <label for="multiple">多选</label> </form> <hr/> <style>#cp-board:hover{width:250px;height:100px;background:#5069e6;}</style> <button style="color:#5069e6;background:white;outline:none;border:none;" id="clear">清空</button> <p style="max-height:100px;overflow:auto;" id="cp-board">Empty</p> </div>` document.body.appendChild (panelRootEl); } initPanel(); let boardMsg = ''; let mode= 1 let boardEle = null; let girlEle = document.getElementById('girl'); let wordEle = document.getElementById('word'); const girlDict = ["https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcTZLZYzIckuEjbJAjMbm2kNEuKsM-fy9HAdHA&usqp=CAU", "https://5b0988e595225.cdn.sohucs.com/images/20190503/ba81c4b53eae4744a7cef75d5c5abf75.jpeg" ] const wordDict = ["加油!","真棒!","爱你!","么么哒", "太酷了","666","mua<3"]; let girlIndex = -1; let wordIndex = -1; const setRandomGirl = ()=>{ let newGirlIndex = Math.floor(Math.random()*girlDict.length) if(girlIndex===newGirlIndex) { return setRandomGirl(); // same index try again } girlIndex = newGirlIndex; girlEle.src=girlDict[girlIndex]; } const setRandomWord = ()=>{ let newWordIndex = Math.floor(Math.random()*wordDict.length) if(wordIndex===newWordIndex) { return setRandomWord(); // same index try again } wordIndex = newWordIndex; wordEle.innerHTML=wordDict[wordIndex]; } setRandomGirl(); setRandomWord(); // 初始化copy // const _execCommand = document.execCommand; // 旧版本icafe用的execaCommand document.execCommand = async function(evtName){ if(evtName ==='copy'){ console.log('enter exec') // 由于前者使用必须要selection然后exec copy // 获取选中部分 const text = window.getSelection().toString() main(text) } } let copyFromNCW = false; // 是否使用的clipboardAPI // 新版本icafe用的navigator.clipboard.writeText const _writeText = navigator.clipboard.writeText; // save for later use // 劫持writeText方法 navigator.clipboard.writeText = async (text) => { copyFromNCW = true; main(text); }; const addToBoard = (msg)=>{ boardMsg = msg; } const updateBoard = ()=>{ if(!boardEle) boardEle=document.getElementById('cp-board'); boardEle.innerHTML= boardMsg; } const makeCommitMsg = (cardType, issueId, fullTitle) => { let type = '✨feat'; // 默认值 if(/缺陷BUG/i.test(cardType)) type = '🐛fix'; else if(/视觉BUG/i.test(cardType)) type = '🎨fix'; else if(/重构/i.test(fullTitle)) type = '♻️chore' let scope = ''; let title = fullTitle.replace(/\s/g,''); if (title.indexOf('【') !== -1 && fullTitle.indexOf('】') !== -1) { const matchedScope = fullTitle .match(/【(.*?)】/g) .map(t => t.match(/【(.*)】/)[1]); scope = `:(${matchedScope.join(',')})`; title = title.match(/【.*】(.*)/)[1]; } return `${type}${scope}:[${issueId}]${title}`; }; const copyText = text => { // 新接口 if(copyFromNCW){ // this得指向navigator.clipboard实例 _writeText.call(navigator.clipboard, text) return; } const el = document.createElement('textarea'); el.value = text; document.body.appendChild(el); el.select(); _execCommand('copy'); document.body.removeChild(el); console.log('copied:', text); }; const onChangeMode = e =>{ mode = +e.target.value; } const onClear = e =>{ addToBoard(''); updateBoard(); } // 绑定radio let rad = document.myForm.mode; for (let i = 0; i < rad.length; i++) { rad[i].addEventListener('change', onChangeMode); } let clearBtn = document.getElementById('clear'); clearBtn.addEventListener('click', onClear); const handleSelectOne = (msg)=>{ const [issueId,type, ...fullTitle] = msg.split(' '); const result = makeCommitMsg(type, issueId, fullTitle.join('')); addToBoard(result); updateBoard(); copyText(result); } const handleAppendOne = (msg)=>{ const [issueId,type,...fullTitle] = msg.split(' '); const result = boardMsg.replace(']',`,${issueId}]`).concat(`,${fullTitle.join('')}`); addToBoard(result); updateBoard(); copyText(result); } const main = (msg) =>{ console.log('main::',msg); const [issueId,type, ...fullTitle] = msg.split(' '); // 如果不是我们需要的msg,就不处理 if(!type){ return copyText(msg); } if(mode===1){ // 单选 handleSelectOne(msg); }else if(mode===2){ // 多选 if(boardMsg==='') handleSelectOne(msg); else{ handleAppendOne(msg); } } setRandomGirl(); // change图片 setRandomWord();// change文本 } })();