Last active
April 5, 2019 15:18
-
-
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
This file contains 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
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) |
This file contains 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
// 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