Skip to content

Instantly share code, notes, and snippets.

@faruktoptas
Last active April 5, 2019 15:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save faruktoptas/5a006bac84da6cba225a7acbd5892ff5 to your computer and use it in GitHub Desktop.
Save faruktoptas/5a006bac84da6cba225a7acbd5892ff5 to your computer and use it in GitHub Desktop.
Merge same tasks for different team members into one task. Generate a clean/printable board
var USER = "USER"
var json = document.getElementById("taskboard").innerHTML.split("</script>");
var data = JSON.parse(json[0].substring(55, json[0].length))
function contains(list, item){
var has = false
list.forEach(function(l){
if (l == item){
has = true
}
})
return has
}
var list = {}
var tasks = data.payload.data;
var out = ""
for (id in tasks){
var task = tasks[id]
if (contains(task,"Task")) {
var taskName = task[0]
var user = task[1]
if (user.indexOf(USER) > -1){
out = out+task[5] + "--" + task[0] + "###"
}
}
}
console.log(out)
// isDev enables running this .js file without DOM. Only for development
try {
isDev = document === undefined
}catch(e){
isDev = true
}
const ROWS_PER_PAGE = 8
// Create html template for a row
var template = '<div class="{@counter}" style="flex:1;margin:5px;border:2px solid #ccc;padding:0px;font-size:15px;">'+
'<p style="margin-left:5px;text-align:center;">'+
'{@desc}'+
'</p>'+
'<p style="margin-left:5px;border-top:1px solid #ccc;padding-top:5px;text-align:center;">'+
'{@user}'+
'</p>'+
'</div>'
// Read JSON from TFS Board
if (isDev){
var data = {"payload":{}} // replace with data.json content
}else {
var json = document.getElementById("taskboard").innerHTML.split("</script>");
var data = JSON.parse(json[0].substring(55, json[0].length))
}
// Return true if list has the item
function contains(list, item){
var has = false
list.forEach(function(l){
if (l == item){
has = true
}
})
return has
}
// Trims [..][..] parts from task name
function trimPrefix(s){
if (s.indexOf("]") > -1){
return trimPrefix(s.substring(s.indexOf("]")+1, s.length).trim())
}else {
return s.substring(s.indexOf("]")+1, s.length).trim()
}
}
// Create html for an item
function createItemHtml(item){
var output = ""
var assignees = item.assignees.toString().replace(/,/g," | ")
if (task.indexOf("]") == -1){
output = template.replace('{@desc}', item.title)
.replace('{@user}', assignees)
}
return output
}
// Parse Tasks and users from Json
var list = {}
var tasks = data.payload.data;
for (id in tasks){
var task = tasks[id]
if (contains(task,"Task")) {
var taskName = task[0]
var user = task[2]
var user = user.substring(0, user.indexOf(" ")+2) + "."
var taskTrimName = trimPrefix(taskName);
if (list[taskTrimName] == undefined){
list[taskTrimName] = [user]
}else if (!contains(list[taskTrimName], user)){
list[taskTrimName].push(user)
}
}
}
var html = '<div>'
var counter = 0;
var items = [];
// Convert object to array
for (task in list){
items.push({'title':task, 'assignees':list[task]})
}
// Generate 2 column html
for (var i = 0; i < items.length / 2; i++){
var div = '<div style="display: flex;{@print}">'.replace('{@print}', i % ROWS_PER_PAGE == ROWS_PER_PAGE - 1 ? 'page-break-before:always;' : '');
html = html + div;
var item = items[i * 2]
html = html + createItemHtml(item)
if (i * 2 + 1 < items.length){
var item2 = items[i * 2 + 1]
html = html + createItemHtml(item2)
}
html = html + '</div>'
}
html = html + "</div>";
// Replace body with new content
if (!isDev) {
var body = document.getElementsByClassName("resizeTarget")[0];
body.style.overflow = 'auto';
body.innerHTML = html;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment