-
Notifications
You must be signed in to change notification settings - Fork 0
User scripts
Joern Bernhardt edited this page Jun 5, 2019
·
9 revisions
This is a small collection of scripts to readily be used as user scripts. If you want to share something, feel free!
const LABEL_TO_LOOK_FOR = "#bug";
const result = flattenTodos(list)
.filter(todo => todo.labels.some(l => l === LABEL_TO_LOOK_FOR))
.map(todo => todo.title);
console.log(result.join("\n"));
function flattenTodos(list) {
return list.reduce(
(all, item) => [...all, item, ...flattenTodos(item.children)],
[]
);
}
const history = flattenTodos(list)
.reduce((trackedTimes, todo) => [...trackedTimes, ...todo.trackedTimes], [])
.sort((timeA, timeB) => timeA.date.localeCompare(timeB.date))
.reduce((acc, entry) => {
return [
...acc,
{ time: timeToSeconds(entry.trackedTime), str: `${entry.tracker} - ${entry.date} - ${entry.trackedTime}` }
];
}, []);
console.log(
`Time tracked:\n${history.map(e => e.str).join("\n")}\n(in sum: ${secondsToTime(
history.map(e => e.time).reduce((acc, e) => acc + e, 0)
)})`
);
function secondsToTime(seconds) {
const h = Math.floor(seconds / 60 / 60);
const m = Math.floor((seconds % (60 * 60)) / 60);
const s = seconds % 60;
const nf = n => `${n < 10 ? "0" : ""}${n}`;
return [h, m, s].map(nf).join(":");
}
function timeToSeconds(time) {
const [hours, minutes, seconds] = time.split(":").map(num => parseInt(num));
return hours * 60 * 60 + minutes * 60 + seconds;
}
function flattenTodos(list) {
return list.reduce((all, item) => [...all, item, ...flattenTodos(item.children)], []);
}
const result = flattenTodos(list)
.reduce((trackedTimes, todo) => [...trackedTimes, ...todo.trackedTimes], [])
.reduce((seconds, entry) => seconds + timeToSeconds(entry.trackedTime), 0);
alert(`Time tracked: ${secondsToTime(result)} (${result / 60 / 60 / 8} workdays [w/ 8 hours per day])`);
function secondsToTime(seconds) {
const h = Math.floor(seconds / 60 / 60);
const m = Math.floor((seconds % (60 * 60)) / 60);
const s = seconds % 60;
const nf = n => `${n < 10 ? "0" : ""}${n}`;
return [h, m, s].map(nf).join(":");
}
function timeToSeconds(time) {
const [hours, minutes, seconds] = time.split(":").map(num => parseInt(num));
return hours * 60 * 60 + minutes * 60 + seconds;
}
function flattenTodos(list) {
return list.reduce(
(all, item) => [...all, item, ...flattenTodos(item.children)],
[]
);
}
When adding "onsite": true
to a tracked time, it will fall into a different bucket through this script, which alerts all resulting trackers and their respective times.
const userTimes = flattenTodos(list)
.reduce((trackedTimes, todo) => [...trackedTimes, ...todo.trackedTimes], [])
.reduce((acc, entry) => ({
...acc,
_all: acc._all + timeToSeconds(entry.trackedTime),
[entry.tracker]: (acc[entry.tracker] || 0) + (!entry.onsite ? timeToSeconds(entry.trackedTime) : 0),
[entry.tracker + "-onsite"]: (acc[entry.tracker + "-onsite"] || 0) + (entry.onsite ? timeToSeconds(entry.trackedTime) : 0)
}), {_all: 0});
const str = Object.keys(userTimes).filter(key => key !== "_all").reduce((str, name) => {
const result = userTimes[name];
return `${str}\n${name}: ${secondsToTime(result)} (${result / 60 / 60 / 8} workdays [w/ 8 hours per day])`
}, `Total time tracked: ${secondsToTime(userTimes._all)}\n`);
alert(`Time tracked:\n${str}`);
function secondsToTime(seconds) {
const h = Math.floor(seconds / 60 / 60);
const m = Math.floor((seconds % (60 * 60)) / 60);
const s = seconds % 60;
const nf = n => `${n < 10 ? "0" : ""}${n}`;
return [h, m, s].map(nf).join(":");
}
function timeToSeconds(time) {
const [hours, minutes, seconds] = time.split(":").map(num => parseInt(num));
return hours * 60 * 60 + minutes * 60 + seconds;
}
function flattenTodos(list) {
return list.reduce(
(all, item) => [...all, item, ...flattenTodos(item.children)],
[]
);
}