您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
To customize and improve our a2w-mantis
当前为
// ==UserScript== // @name Improve Mantis // @namespace com.aforms2web.ds.ujs // @description To customize and improve our a2w-mantis // @include http*://tasks.aforms2web.com/view_all_bug_page.php* // @author [email protected] // @version 1.1 // @grant none // ==/UserScript== // Config Begin var countSelection = true; var xForCurIterationCommit = true; var xForCurIterationCommitStyle = "padding-left: 1em; font-size: 1.5em; font-weight: smaller; color:#333333;"; var grayNotCurrentlyCommited = true; var grayNotCurrentlyCommitedAll = "font-style: italic; color: #555555"; var grayNotCurrentlyCommitedLinks = "color: #555555" var redDeadline = true; var redDeadlineStyle ="font-weight: bold; color: #dd0000; text-decoration: underline;"; var activateFixedTime = true; var activateFixedTimeShowByDefault = true; var activateFixedTimeStyle = "border: 1px solid #646474; border-top-width: 0; border-radius: 0 0 5px 5px; background-color: #c8c8e8; position: fixed; top: 0; padding: 0 3px"; var selectionOfAllCommited = true; var selectionOfAllCommitedExceptWaiting = true; // Config End var iterationColNr = null; var deadlineColNr = null; var commitmentColNr = null; var stateColNr = null; var hourColNrs = null; var hourColSum = null; var hourColTot = null; var fixedTimeIsDisplayed = false; init(); function init(){ var header = document.getElementsByClassName("row-category")[0]; for(var h = 0; h < header.cells.length; h++){ var curHeaderCell = header.cells[h]; var colLinks = curHeaderCell.getElementsByTagName("a"); if(colLinks.length > 0){ var linkLabel = colLinks[0].innerHTML; if("Zieltermin" == linkLabel){ deadlineColNr = h; } if("Zieliteration" == linkLabel){ iterationColNr = h; } if("Status" == linkLabel){ stateColNr = h; } if("Commitment in" == linkLabel){ commitmentColNr = h; colLinks[0].setAttribute("style", "white-space: nowrap;"); } var pos = linkLabel.search(/.+\sh$/); if(pos > -1){ if(hourColNrs == null){ hourColNrs = new Array(); hourColSum = new Array(); hourColTot = new Array(); } var nextIndex = hourColNrs.length; hourColNrs[nextIndex] = h; hourColSum[nextIndex] = 0; var matchTime = curHeaderCell.innerHTML.match(/\((.*)\)$/); if(countSelection && matchTime){ curHeaderCell.innerHTML = curHeaderCell.innerHTML.substring(0, curHeaderCell.innerHTML.length - RegExp.$1.length - 2) + "<span id=\"timeOf" + h + "\" style=\"white-space: nowrap; font-weight: normal;\"><span id=\"selectOf" + h + "\">0</span> / " + RegExp.$1 + "</span>"; hourColTot[nextIndex] = RegExp.$1; } colLinks[0].setAttribute("style", "white-space: nowrap;"); } } } if(selectionOfAllCommited){ var selectAllCommits = document.createElement("span"); selectAllCommits.addEventListener ('click', selectAllCommited, true); selectAllCommits.setAttribute("title", "alle commiteten Tickets selektieren"); selectAllCommits.setAttribute("style", "font-weight: normal; cursor: pointer;"); selectAllCommits.innerHTML = "[x]"; header.cells[0].removeChild(header.cells[0].firstChild); header.cells[0].appendChild(selectAllCommits); } var table = document.getElementById("buglist"); for(var r = 0; r < table.rows.length; r++){ var row = table.rows[r]; if(row.getAttribute("bgcolor") != null && row.getAttribute("valign") == "top" && row.getAttribute("border") == "1"){ format(row); if(countSelection){ var chkbxs = row.getElementsByTagName("input"); for(var i = 0; i < chkbxs.length; i++){ var chkbx = chkbxs[i]; if(chkbx.getAttribute("name") == "bug_arr[]" && chkbx.getAttribute("type") == "checkbox"){ chkbx.addEventListener ('change', changedChkbx, true); } } } } } if(countSelection){ var allBugs = document.getElementsByName("all_bugs"); if(allBugs != null && allBugs.length >= 1){ allBugs[0].addEventListener ('change', recalculateChkbxs, true); } } if(activateFixedTime){ var showFixed = document.createElement("span"); showFixed.addEventListener ('click', showFixedTime, true); showFixed.id = "showFixedTime"; showFixed.innerHTML = "Fix positionierte Zeitanzeige aktivieren"; document.body.appendChild(showFixed); var hideFixed = document.createElement("span"); hideFixed.setAttribute("style", "display: none;"); hideFixed.addEventListener ('click', hideFixedTime, true); hideFixed.id = "hideFixedTime"; hideFixed.innerHTML = "Fix positionierte Zeitanzeige deaktivieren"; document.body.insertBefore(hideFixed, document.body.firstChild); var style = document.createElement("style"); style.appendChild(document.createTextNode(""));// WebKit hack document.head.appendChild(style); var sheet = style.sheet; sheet.insertRule(".fixedTime { " + activateFixedTimeStyle + " }", 0); sheet.insertRule("#showFixedTime, #hideFixedTime { text-decoration: underline; cursor: pointer; }", 0); if(activateFixedTimeShowByDefault){ showFixedTime(); } } } function showFixedTime(){ document.getElementById("showFixedTime").setAttribute("style", "display: none;"); document.getElementById("hideFixedTime").setAttribute("style", "display: inline;"); for(i = 0; i < hourColNrs.length; i++){ var newFixed = document.createElement("span"); newFixed.setAttribute ("class", "fixedTime"); newFixed.id = "fixedTime" + hourColNrs[i]; newFixed.innerHTML = "x"; document.body.appendChild(newFixed); } fixedTimeIsDisplayed = true; updateFixedTime(); } function updateFixedTime(){ if(fixedTimeIsDisplayed){ var source; var target; for(i = 0; i < hourColNrs.length; i++){ source = document.getElementById("timeOf" + hourColNrs[i]); target = document.getElementById("fixedTime" + hourColNrs[i]); target.innerHTML = source.innerHTML.replace(/<(?:.|\n)*?>/gm, ''); var rect = source.getBoundingClientRect(); target.setAttribute("style", "left: " + rect.left + "px; width: " + (rect.right-rect.left) + "px;"); } } } function hideFixedTime(){ document.getElementById("showFixedTime").setAttribute("style", "display: inline;"); document.getElementById("hideFixedTime").setAttribute("style", "display: none;"); var rmv; for(i = 0; i < hourColNrs.length; i++){ rmv = document.getElementById("fixedTime" + hourColNrs[i]); rmv.parentNode.removeChild(rmv); } fixedTimeIsDisplayed = false; } function format(row){ if(deadlineColNr != null && row.cells.length >= deadlineColNr + 1){ var deadline = row.cells[deadlineColNr].innerHTML; if(redDeadline && deadline != null && deadline != ""){ row.cells[deadlineColNr].setAttribute("style", redDeadlineStyle); } } if(iterationColNr != null && row.cells.length >= iterationColNr + 1 && commitmentColNr != null && row.cells.length >= commitmentColNr + 1){ var iterationat = row.cells[iterationColNr].innerHTML; var commitment = row.cells[commitmentColNr].innerHTML; if(grayNotCurrentlyCommited && iterationat != null && iterationat != "" && commitment != null && commitment != "" && iterationat != commitment){ row.setAttribute("style", grayNotCurrentlyCommitedAll); for(c = 0; c < row.cells.length; c++){ var links = row.cells[c].getElementsByTagName("a"); for(var a = 0; a < links.length; a++){ links[a].setAttribute("style", grayNotCurrentlyCommitedLinks); } } }else if(xForCurIterationCommit && iterationat != null && iterationat != "" && commitment != null && commitment != "" && iterationat == commitment){ row.cells[commitmentColNr].innerHTML = "<div style=\"" + xForCurIterationCommitStyle + "\">x</div>"; } } } function changedChkbx(event) { event = event || window.event var target = event.target; var parRow = target; while(parRow.nodeName != "TR" && parRow.parentNode != null){ parRow = parRow.parentNode } calculateChangedChkbx(parRow, target); } function calculateChangedChkbx(row, checkbox) { var curVal; var sumVal; var curObj; var display; for(i = 0; i < hourColNrs.length; i++){ curVal = row.cells[hourColNrs[i]].innerHTML; sumVal = hourColSum[i]; if(checkbox.checked){ sumVal = Number(sumVal) + Number(curVal); }else{ sumVal = sumVal - Number(curVal); } display = 0; if(sumVal > 0){ hourColSum[i] = sumVal.toFixed(2); display = sumVal.toFixed(2); if(display != 0){ display = display.replace(/0+$/, "").replace(/\.$/, ""); } }else{ hourColSum[i] = 0; } curObj = document.getElementById("selectOf" + hourColNrs[i]).innerHTML = display; } updateFixedTime(); } function recalculateChkbxs() { var checked = false; var display; var allBugs = document.getElementsByName("all_bugs"); if(allBugs != null && allBugs.length >= 1){ checked = allBugs[0].checked; } for(i = 0; i < hourColNrs.length; i++){ if(checked){ hourColSum[i] = hourColTot[i]; display = hourColSum[i].replace(/0+$/, "").replace(/\.$/, ""); }else{ hourColSum[i] = 0; display = 0; } document.getElementById("selectOf" + hourColNrs[i]).innerHTML = display; } updateFixedTime(); } function selectAllCommited(){ var allBugs = document.getElementsByName("all_bugs"); if(allBugs != null && allBugs.length >= 1){ allBugs[0].checked = false; } for(i = 0; i < hourColNrs.length; i++){ hourColSum[i] = 0; display = 0; document.getElementById("selectOf" + hourColNrs[i]).innerHTML = display; } var table = document.getElementById("buglist"); var iteration; var commitment; var checkbox; var curState for(var r = 0; r < table.rows.length; r++){ var row = table.rows[r]; if(row.getAttribute("bgcolor") != null && row.getAttribute("valign") == "top" && row.getAttribute("border") == "1"){ if(iterationColNr != null && commitmentColNr != null && row.cells.length >= commitmentColNr + 1){ iteration = row.cells[iterationColNr].innerHTML; commitment = row.cells[commitmentColNr].innerHTML; checkbox = row.getElementsByTagName("input"); if(checkbox.length > 0){ checkbox[0].checked = false; if(iteration != null && iteration != "" && commitment != null && commitment != "" && (iteration == commitment || commitment.indexOf(">x<") > 0)){ if(!selectionOfAllCommitedExceptWaiting || "Warten" != row.cells[stateColNr].getElementsByTagName("span")[0].innerHTML){ checkbox[0].checked = true; calculateChangedChkbx(row, checkbox[0]); } } } } } } }