Skip to content

Instantly share code, notes, and snippets.

@dascgo
Created October 26, 2012 18:21
Show Gist options
  • Save dascgo/3960490 to your computer and use it in GitHub Desktop.
Save dascgo/3960490 to your computer and use it in GitHub Desktop.
tool to add functionality to JIRA's greenhopper interface. This script is inserted into the page via a bookmarklet
var gh = {
setup: function(){
$(".gh_tag").live("click", gh.tags.cycle);
$(".ghx-corner").live("click", gh.time.update);
gh.subtasks.summarize();
},
urls: {
get_details: function(key){
return "https://izeaeng.jira.com/rest/greenhopper/1.0/xboard/issue/details.json?rapidViewId=2&loadSubtasks=true&_=1351257629783&issueIdOrKey=" + key;
}
},
tags: {
list: ["gray", "red", "orange", "yellow", "blue", "green"],
cycle: function(){
var elm = $(this);
var key = elm.attr("data-key");
var color = gh.tags.next_color(elm.attr("data-color"));
localStorage.setItem('tag_' + key, color);
elm.attr("src", gh.images.tags[color]).attr("data-color", color);
},
next_color: function(current_color){
var index = gh.tags.list.indexOf(current_color);
var next_index = index + 1
if(!gh.tags.list[next_index]){
next_index = 0;
}
var color = gh.tags.list[next_index];
return color;
},
draw: function(key){
var color = localStorage.getItem('tag_' + key) || "gray";
return "<img src='" + gh.images.tags[color] + "' data-color='" + color + "' data-key='" + key + "' width='16' height='16' class='gh_tag' style='" + gh.styles.tag + "'>";
}
},
time: {
update: function(){
var elm = $(this);
var id = elm.parent().attr("data-issue-id");
console.log("need to update time on issue: " + id);
console.log("https://izeaeng.jira.com/secure/CreateWorklog!default.jspa?id=" + id + "&decorator=dialog&inline=true&_=1351270010505")
// $.get("https://izeaeng.jira.com/secure/CreateWorklog!default.jspa?id=" + id + "&decorator=dialog&inline=true&_=1351270010505");
// $("span.ghx-icon-log").click()
}
},
subtasks: {
summary: function(tasks){
var stats = { open: 0, dev: 0, qa: 0, closed: 0 }
for(var i = 0, l = tasks.length; i < l; i++){
var task = tasks[i];
switch (task.status.name){
case "Open":
stats.open++;
break;
case "In Development":
stats.dev++;
break;
case "Dev Done":
stats.dev++;
break;
case "Closed":
stats.closed++;
break;
default:
stats.qa++;
break;
}
}
return stats;
},
summarize: function(){
$(".ghx-parent-key").each(function(index){
var key = $(this).text();
$.get(gh.urls.get_details(key), function(res){
// console.log("issue: " + key);
// console.log(res)
subtask_info = gh.subtasks.summary(res.subtasks);
subtask_text = "<span style='" + gh.styles.status.base + "'><span style='" + gh.styles.status.open + "'>" + subtask_info.open + "</span> | <span style='" + gh.styles.status.dev + "'>" + subtask_info.dev + "</span> | <span style='" + gh.styles.status.qa + "'>" + subtask_info.qa + "</span> | <span style='" + gh.styles.status.closed + "'>" + subtask_info.closed + "</span></span>";
// console.log(subtask_text)
// console.log("----------------------------------------------------------------")
$("div[data-issue-key='" + key + "'] .ghx-info").html(subtask_text);
$("div.ghx-swimlane-header[data-issue-key='" + key + "'] span.ghx-heading").prepend("<span class='gh_header_box'>" + gh.tags.draw(key) + "</span>");
});
});
}
},
images: {
tags: {
gray: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAATNJREFUeNqUUlFqg0AQ1bYEWggEUgL5CCiFQj+Kwl7AG3gEv72BR/EYegKvIPS7GMhfoOBXK4Vi35PZYnTXkoFxxjdvZmd2x+373rGJ67oPMKD0XzbOjbMsW+jjEuG/AhtRq9wttR+G4Ur7GOPzqgJsP0mSwanrmqMYC7i2S8Spr03TDB34vv8N3puxAxAPsLtpIE1Tx/M87a/AU4b8syMdbIMgUHmeK/wvKjnkMmfI5UeK3EPDLMusyYyRQ+5fnnakyC30uaqqWTIxxsgZ51zsAYAfmLYoitmwgrXCWVykdRRF+vkGpQi2nrHH7cgYqus6hZtnyy9U+sQYm/Iv9gBPtYnj+Il+WZZnxE6CH4DvBH8H3hoXSXaCW3cck3RxGC7Ghy48GwGyn96y4ZX2Y+xXgAEAvtwGx6qO43UAAAAASUVORK5CYII=",
red: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPVJREFUeNpiYMADtjIwGACxPj41TAz4QTwQJ1BiQAAUk24AyPl8DAwKIAxik+OCeGkgIY3wCskGBEgACQmEV7ACRqDz+oF0AbqEHBDrQNlXgPgRdv0TYP6NP8zA8P8hEP8ngEFqQGq3onsLFN9A/P4GHs03IBrf40wbQAl+IN7/BovmNxDN+0FqcAaiNwPDRyC14SUWw6FiG6Bq8MaCgzCU8QmKQQAq5oCumAVb9IkiQv4CNEYMtAhEJywM/M8A/XoG4t9+JPF+JHF/fF5wAPr1AxAHAP1aiBQ2hSAxkBy6N9ANAClQAGrYiO46qJgCVA0cAAQYAGr/bZH3AFlgAAAAAElFTkSuQmCC",
green: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAATdJREFUeNpiYMAD/JepGQCxPi75////MzAx4AfxQJyATwEhAwKgmHQDQM7n4GZTAGEQmxwXxAuIcTOAMNQrJBsQwCfEyQDC+LzBCHReP5AuQJcQkuBhkFQSArOf33vH8O7FF2z6JzBC/RsP9OsCkCZBcR68ofr+5RewYT++/krYEHlzISNSoIHi+4CINJ+AuLwAVs0vH35gePP00wcg02Fj1K2LKOkAJACkFIAKDnz9+ANDM0gMJAdSA1WLGYhAiY9AasPnd98xDICKbYCqwRsLDtz8HGAG0J9gDAJQMQd0xSzYoo9HgAMW8hegMWIgoSCINTqZ0FKfPy8w3h/fegPSPAHoXEMQBrFBYiA5kBp8XnAA+vUDEAcANRYihU0hSAwkh+4NdAM+QEN5I7pToWIKUDVwABBgAEpbjPcw/f88AAAAAElFTkSuQmCC",
yellow: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAASdJREFUeNqkUktuwkAMdVBpMoSG0As0NwBukFW3ROIA4QjlJOUI5QBIdNsVRyhHYM9nSEH8NvWLTEUn0Ui0lp7Gsv0sP3uILDb/6LUZLVtNheyWMvr/aZAIbm+A8e+r1QiA/5cJUt+vESBSbm6QKKUIsMlweLxXfl/MRL3u02MzzP3VWtN2uyvjDx3Rm7LWN5AAm6ERcDqf+0/P45FztTTcexoED2HYCErJepNRln1pdmMmz37tQAIRF0wPx2OBjBhyqLmQC0vkxIafyX5/KDSQ2ERqrFeIPdfNHdaZAyax2Cy+Kzuf57mXzX/KRdrNsFF6zorx+7pKebRYrkAe8rgdAD5iyKHGJiFmrZqRMHFwtZsBYsiZMswGWrb8bo4qsUhqfuxbgAEAoCOE/2E+RLQAAAAASUVORK5CYII=",
blue: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAT1JREFUeNpiYMADFOJ2GQCxPi75////MzAx4AfxQJyATwEhAwKgGCdgxOd8NnbO8yD2r5/fDR8scrtAqhfiefmFGEAY6hWSvRDAzcPPAML4vMEIdGo/kC5Al+ATEGEQEZcBs9+8fMLw6cMbbPonMEL9Gw/07wKQJj4BYbyh+unDW7BhwHBJuL/QdSEjUqCB4vuAgJC4gJCoJFbN714/Z/jw7uUHINMBGKgXUQIRJAAyB6jgwPdvXzA0g8RAciA1ULWYgQiU+AikNnz78hHDAKjYBqgavLHgwMHFwwCNfzAGAaiYA7piFmzRx8XNBwv5C9AYMRAWk8YanUxoqc8fFO+vnj0AaZ4AdC4oBRqC2CAxkBxIDT4vOHz98vEDEAcANRYihU0hSAwkh+4NdAM+QEN5I7pToWIKUDVwABBgAIUplHpCsq9vAAAAAElFTkSuQmCC",
orange: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAS9JREFUeNpiYMAD7pQYGwCxPj41TAz4QTwQJ1BiQAAUk24AyPlsbKwKIAxik+OCeB5ebgYQhnqFZAMCuLg4GEAYnzcYgc7rB9IF6BK8fDwMwsICYPbbtx8YPn/6gk3/BEaof+OBfl0A0sQLcTJO8PnzV7Bhv379TlDpObuQESnQQPF9gF+AV0BQkB+r5vfvPzJ8/PD5A5DpANR8ESUMoAIKQAUHfvz4iaEZJAaSA6mBacYIRKDERyC14dvX7xgGQMU2QNXgjQUHDk52MAPoTzAGAaiYA7piFmzRx8nJAQv5C9AYMRAS4scanUxoqc+fi4uT4fWrdyDNE4DONQRhEBskBpIDqcHnBYdv375/AOIAoMZCpLApBImB5NC9gW7AB2gob0R3KlRMAaoGDgACDAB0BoYrEsmRlwAAAABJRU5ErkJggg=="
}
},
styles: {
tag: "margin-bottom: -2px; margin-right: 7px; cursor: pointer;",
status: {
open: "color:red;",
dev: "color:orange;",
qa: "color:gold;",
closed: "color:green;",
base: "color: #e5e5e5; font-size: 14px; font-weight: bold;"
}
}
};
gh.setup();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment