您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add options to workflowmax.com timesheet
// ==UserScript== // @name Timesheet // @namespace http://geosolve.co.nz // @description Add options to workflowmax.com timesheet // @include https://app.my.workflowmax.com/my/timesheet.aspx?*tab=weekly* // @include https://app.my.workflowmax.com/financial/resourcetimesheet.aspx?*mode=weekly* // @version 1.6.6 // @grant none // ==/UserScript== //window.addEventListener ("load", Greasemonkey_main, false); Greasemonkey_main(); function Greasemonkey_main () { var bDebug = false; try {var baseURL = window.location.href.split("?")[0];} catch(err) {console.log(err.message);} console.log(window.location.href); console.log(baseURL); var isSort; var isSortque if (isSort = getQueryVariable("sort")) { isSortque = 'sort=' + isSort + '&'; } else { isSortque = ""; } var isID; var isIDque; if (isID = getQueryVariable("id")) { isIDque = 'id=' + isID + '&'; } else { isIDque = ""; } var isTab; var isTabque; if (isTab = getQueryVariable("tab")) { isTabque = 'tab=' + isTab + '&'; } else { isTabque = ""; } var isFilter; var isFilterque; if (isFilter = getQueryVariable("filter")) { isFilterque = 'filter=' + isFilter + '&'; } else { isFilterque = ""; } var isMode; var isModeque; if (isMode = getQueryVariable("mode")) { isModeque = 'mode=' + isMode + '&'; } else { isModeque = ""; } var isDrop; var isDropque; if (isDrop = getQueryVariable("drop")) { isDropque = 'drop=' + isDrop + '&'; } else { isDropque = ""; } var head = document.getElementsByClassName("heading"); var jobCol = head[0].getElementsByClassName("time-job"); var isDate = ""; var isDateque; isDate = getQueryVariable("date"); if (isDate != "") { isDateque = 'date=' + isDate + '&'; } else { isDateque = ""; } head[0].getElementsByClassName("time-job")[0].innerHTML = ('<br><a href="' + baseURL + '?' + isIDque + isDateque + isDropque + isTabque + isModeque + isFilter + 'sort=job">Job/Task</a>'); head[0].getElementsByClassName("time-job")[0].title = "Sort by Job Number." head[0].getElementsByClassName("time-client")[0].innerHTML = ('<br><a href="' + baseURL + '?' + isIDque + isDateque + isDropque + isTabque + isModeque + isFilter + 'sort=client">Client</a>'); head[0].getElementsByClassName("time-client")[0].title = "Sort by Client name." head[0].getElementsByClassName("total-heading")[0].innerHTML = ('<br><a href="' + baseURL + '?' + isIDque + isDateque + isDropque + isTabque + isModeque + isFilter + 'sort=total">Total</a>'); head[0].getElementsByClassName("total-heading")[0].title = "Sort by total hours."; var panel = document.getElementsByClassName("ButtonPanel")[0]; var buttonText = 'Order Job List by: <a href="' + baseURL + '?' + isIDque + isDateque + isTabque + isModeque + isFilter + '">Job</a>, <a href="' + baseURL + '?' + isIDque + isDateque + isTabque + isModeque + isFilter + 'drop=name">Job Name</a>, <a href="' + baseURL + '?' + isIDque + isDateque + isTabque + isModeque + isFilter + 'drop=client">Client</a><br>'; panel.innerHTML = buttonText + panel.innerHTML + '<br><a href="http://dunprojtrack.geosolve.local/timesheet.php" target="_blank">To Timesheet Guide</a>'; //sort job dropdown var i; var tempHold; if (isDrop) { var jobDropbox = document.getElementById('ctl00_PageContent_ctlxlayoutJob'); var jobDrop = document.getElementById('ctl00_PageContent_ctlxlayoutJob').children; var innerJob; var arrDrop = new Array(1); for (i = 0; i < jobDrop.length; i++) { innerDrop = jobDrop[i].innerHTML.split(" - "); if (isDrop == "client") { if (innerDrop[2]) { tempHold = innerDrop[2]; innerDrop[2] = innerDrop[0]; innerDrop[0] = tempHold; jobDrop[i].innerHTML = innerDrop.join(" - "); arrDrop.push(i); arrDrop[i] = jobDrop[i]; } } else if (isDrop == "name") { if (innerDrop[2]) { tempHold = innerDrop[1]; innerDrop[1] = innerDrop[0]; innerDrop[0] = tempHold; jobDrop[i].innerHTML = innerDrop.join(" - "); arrDrop.push(i); arrDrop[i] = jobDrop[i]; } } } arrDrop.sort(dropsort); for (i = arrDrop.length-1; i > -1 ; i--) { if (arrDrop[i+1]) { if (bDebug == true) { console.log(i); console.log(arrDrop[i].innerHTML); console.log(arrDrop[i+1].innerHTML); } try {jobDropbox.insertBefore(arrDrop[i],arrDrop[i+1]);} catch(err) {console.log(err.message);} } } } //figure out which sort we're using and set it all up to work var sortType = "time-job"; var upDown = "Down"; if (isSort == "job") { sortType = "time-job" head[0].getElementsByClassName("time-job")[0].innerHTML = ('<br><a href="' + baseURL + '?' + isIDque + isDateque + isDropque + isTabque + isModeque + isFilter + 'sort=jobu">Job/Task</a>'); upDown = "Down"; } else if (isSort == "jobu") { sortType = "time-job" head[0].getElementsByClassName("time-job")[0].innerHTML = ('<br><a href="' + baseURL + '?' + isIDque + isDateque + isDropque + isTabque + isModeque + isFilter + 'sort=job">Job/Task</a>'); upDown = "Up"; } else if (isSort == "client") { sortType = "time-client" head[0].getElementsByClassName("time-client")[0].innerHTML = ('<br><a href="' + baseURL + '?' + isIDque + isDateque + isDropque + isTabque + isModeque + isFilter + 'sort=clientu">Client</a>'); upDown = "Down"; } else if (isSort == "clientu") { sortType = "time-client" head[0].getElementsByClassName("time-client")[0].innerHTML = ('<br><a href="' + baseURL + '?' + isIDque + isDateque + isDropque + isTabque + isModeque + isFilter + 'sort=client">Client</a>'); upDown = "Up"; } else if (isSort == "total") { sortType = "total-task" upDown = "Down"; }; var timeTable = document.getElementById("ctl00_PageContent_weeklyTimesheetSummaryTable"); if (bDebug == true) { var banner = document.getElementsByClassName("MaxBanner"); } var rows = timeTable.getElementsByClassName("summary-row"); var notes = timeTable.children; if (bDebug == true) {console.log(notes.length);}; var list = new Array(1); list[0] = new Array(4); for (i = 0; i <= rows.length-1; i++) { if (bDebug == true) {console.log(i);} list.push(i); list[i] = new Array(4); list[i][0] = i; list[i][1] = rows[i]; if (bDebug == true) {console.log(typeof(list[i][1]));}; list[i][2] = rows[i].getElementsByClassName(sortType)[0].innerHTML; list[i][3] = notes[i * 2 + 1]; if (bDebug == true) {console.log(list[i][2]);}; if (bDebug == true) {console.log(sortType);}; } if (bDebug == true) {console.log(i);}; try {list.splice(i,1);} catch(err) {console.log(err.message);}; //debug output if (bDebug == true) { for (i = 0; i <= rows.length -1; i++) { banner[0].innerHTML += i; banner[0].innerHTML += list[i][2]; } banner[0].innerHTML += list.length; banner[0].innerHTML += rows.length; } try {if (isSort=="total") { if (bDebug == true) {console.log('isSort="total"');}; list.sort(time); } else if(isSort.charAt(isSort.length-1) == "u") { if (bDebug == true) {console.log('isSort.charAt(isSort.length-1) == "u"');}; list.sort(compareu); } else { if (bDebug == true) {console.log('else');}; list.sort(compare); } } catch (err){console.log(err.message);}; for (i = 0; i <= rows.length-1; i++) { if (bDebug == true) {console.log(i);} if (bDebug == true) {console.log(list[i][2]);}; if (i == 0) { } else { if (bDebug == true) {console.log(typeof(list[i][0]));}; if (bDebug == true) {console.log(typeof(list[i][1]));}; try {timeTable.insertBefore(list[i][1],list[i-1][1]);} catch(err) {console.log(err.message);} try {timeTable.insertBefore(list[i][3],list[i][1].nextSibling);} catch(err) {console.log(err.message);} } } } function compare(a,b) { //compare A > Z var result = a[2].localeCompare(b[2]); if (result == -1) {result = 1} else if (result == 1) {result = -1}; return result; //return "-1"; }; function compareu(a,b) { //compare A > Z var result = a[2].localeCompare(b[2]); return result; //return "-1"; }; function time(a,b) { var a2 = parseFloat(a[2].replace(":",".")); var b2 = parseFloat(b[2].replace(":",".")); return a2 > b2 ? 1 : a2 < b2 ? -1 : 0; }; function dropsort(a,b) { return a.innerHTML.localeCompare(b.innerHTML); } function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split("&"); for (var i=0;i<vars.length;i++) { var pair = vars[i].split("="); if(pair[0] == variable){return pair[1];} } return(""); };