Created
January 13, 2014 16:26
-
-
Save davidalpert/8403172 to your computer and use it in GitHub Desktop.
A GreaseMonkey script to prettify the WebTime timesheet view.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name PrettyWebtime | |
// @namespace http://spinthemoose.com/ | |
// @version 0.6 | |
// @description tries to make webtime more usable | |
// @match https://*.replicon.com/* | |
// @copyright 2013+, David Alpert | |
// ==/UserScript== | |
function PrettyWebtime() { | |
if (typeof unsafeWindow.jQuery == 'undefined') { | |
window.setTimeout(PrettyWebtime, 100); | |
} else { | |
$ = unsafeWindow.jQuery; | |
var anchor = $('head').children().last(); | |
var wtstyles = | |
'<style type="text/css"> \ | |
#sc_activity,.rowActivity { display:none; }\ | |
.rowTask {\ | |
min-width:428px;\ | |
max-width:530px;\ | |
}\ | |
.rowTask .clientPartName, \ | |
.commentTable td.task { \ | |
color: #bbb; \ | |
white-space: nowrap;\ | |
} \ | |
.rowTask .projectPartName,\ | |
.commentTable td.task .project {\ | |
color:green;\ | |
display:block;\ | |
white-space: nowrap;\ | |
}\ | |
.rowTask.rowField .includesAdditional .additional,\ | |
.commentTable td.task .taskInfo {\ | |
color:blue;\ | |
display:inline;\ | |
white-space:nowrap;\ | |
}\ | |
.commentTable td.task .selected {\ | |
color: black;\ | |
}\ | |
#tsHoursSummary .value strong {\ | |
color:blue;\ | |
}\ | |
#tsHoursSummary .value em {\ | |
color:red;\ | |
}\ | |
#tsHoursSummary .label {\ | |
color:green;\ | |
}\ | |
</style>'; | |
anchor.after(wtstyles); | |
$('.timesheet th.totalFooter').attr('colspan', '2'); | |
$('.timesheet td.rowTimeOffBooking, .timesheet th#sc_timeoff').attr('colspan', '1'); | |
function formatSummaryNode(projectName, projectTotal, totalHours) | |
{ | |
var percentOfActual = Math.round(projectTotal/totalHours*100); | |
var percentOfExpected = Math.round(projectTotal/37.5*100); | |
return '<li><span class="value"><strong>'+percentOfActual+'%</strong> - '+projectTotal+' - <em>'+percentOfExpected+'%</em></span><span class="label">'+projectName+'</span></li>'; | |
} | |
var hoursSummary = $('#tsHoursSummary'); | |
//var li = hoursSummary.find('li').clone(); | |
//hoursSummary.prepend(); | |
//li.find('span.value').text('hi'); | |
var projects = {}; | |
var totalHours = new Number($('#tsHoursSummary_totalHours .value').text()); | |
$('.rowTask .projectPartName').each(function(i,el){ | |
var projectName = $(el).text(); | |
var rowTotal = new Number($(el).closest('tr').find('td.rowTotal').text()); | |
// | |
if (projects[projectName] == null) { | |
projects[projectName] = rowTotal; | |
} else { | |
projects[projectName] = projects[projectName] + rowTotal; | |
} | |
}); | |
for(project in projects) { | |
if (project != '< No Project >') { | |
var projectTotal = projects[project]; | |
var li = formatSummaryNode(project, projectTotal, totalHours); | |
hoursSummary.prepend(li); | |
} | |
} | |
$('#tsButtonRowToolbar').click(function() { | |
for(project in projects) { | |
projects[project] = 0; | |
} | |
$('.rowTask .projectPartName').each(function(i,el){ | |
var projectName = $(el).text(); | |
var rowTotal = new Number($(el).closest('tr').find('td.rowTotal').text()); | |
// | |
if (projects[projectName] == null) { | |
projects[projectName] = rowTotal; | |
} else { | |
projects[projectName] = projects[projectName] + rowTotal; | |
} | |
}); | |
hoursSummary.find('li').not('#tsHoursSummary_totalHours').remove(); | |
for(project in projects) { | |
if (project != '< No Project >') { | |
var projectTotal = projects[project]; | |
var li = formatSummaryNode(project, projectTotal, totalHours); | |
hoursSummary.prepend(li); | |
} | |
} | |
}); | |
} | |
} | |
PrettyWebtime(); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment