您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
try to take over the world!
// ==UserScript== // @name sum story-points // @namespace http://tampermonkey.net/ // @version 0.2 // @description try to take over the world! // @author You // @match https://trello.com/* // @grant none // ==/UserScript== const FIRST_CALL_DELAY = 500; const INTERVAL = 4000; const SP_SEARCH_PREFIX = "Story Points⏰: "; const SP_PRINT_PREFIX = "⏰"; const main = () => { if (document.hidden) return; const lists = document.getElementsByClassName('list'); for(var i = 0; i < lists.length; i++) { var list = lists[i]; const listCards = list.querySelectorAll(".list-card"); const sum = Array.prototype.reduce.call(listCards, (acc, listCard) => { const customFields = listCard.querySelectorAll(".custom-field-front-badges .badge .badge-text"); const foundElement = Array.prototype.find.call(customFields, f => f.innerText.startsWith(SP_SEARCH_PREFIX)); var sp = 0; if(foundElement) { const spText = foundElement.innerText.substr(SP_SEARCH_PREFIX.length); sp = Number.parseFloat(spText); } return acc + sp; }, 0); const listHeaderTarget = list.querySelector(".list-header"); var listHeaderSpSum = listHeaderTarget.querySelector(".list-header-spsum"); if(sum > 0) { if(!listHeaderSpSum) { listHeaderSpSum = document.createElement("span"); listHeaderSpSum.classList.add("list-header-spsum"); listHeaderSpSum.style.opacity = 0.3; listHeaderSpSum.style.marginLeft = "8px"; listHeaderTarget.appendChild(listHeaderSpSum); } const newSpSum = SP_PRINT_PREFIX + sum; if(listHeaderSpSum.innerText !== newSpSum) { listHeaderSpSum.innerText = newSpSum; } } else { if(listHeaderSpSum) { listHeaderTarget.remove(); } } } }; $(document).ready(() => { setTimeout(() => { const interval = setInterval(main, INTERVAL); }, FIRST_CALL_DELAY) });