Skip to content

Instantly share code, notes, and snippets.

@davidalpert
Created January 13, 2014 16:26
Show Gist options
  • Save davidalpert/8403172 to your computer and use it in GitHub Desktop.
Save davidalpert/8403172 to your computer and use it in GitHub Desktop.
A GreaseMonkey script to prettify the WebTime timesheet view.
// ==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