您需要先安装一个扩展,例如 篡改猴、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 dietmar.stoiber@aforms2web.com
- // @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]);
- }
- }
- }
- }
- }
- }
- }