Last active
May 22, 2016 08:46
-
-
Save krishnanmk/4bbf29c798248348506a4f16592cee82 to your computer and use it in GitHub Desktop.
Jiraboy - Status compilation from JIRA API - Response JSON set to a variable
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
function jiraAPIResponseProcessor(data) { | |
/** | |
* This is the API to be exposed which creates the status HTML from given `status` json. | |
* @param {json} status - Your json from JIRA API | |
* @param {string} checkDate - The date for which the status has to be created, | |
* like if you want to create status for comments from 2 days ago, etc. | |
* Format: yyyy-MM-dd. Default: today's date | |
* @return {string} Final status HTML | |
*/ | |
function processStatus(status, checkDate) { | |
if (!status) return; | |
checkDate = checkDate ? new Date(checkDate) : new Date(); | |
checkDate.setHours(0, 0, 0, 0); | |
//initialize final status object after processing `status` and cleaning it up | |
var finalStatus = { | |
issues: [] | |
}; | |
for (var i = 0; i < status.issues.length; i++) { | |
//loop through each JIRA issue that came up in my JQL | |
var processedIssueDetails = _processIssue(status.issues[i], checkDate); | |
if (processedIssueDetails) finalStatus.issues.push(processedIssueDetails); | |
} | |
//generate HTML for all processed JIRA issues, including issue description and comments | |
var statusDiv = $('<div></div>'); | |
$('#jira-status').tmpl(finalStatus).appendTo(statusDiv); | |
return statusDiv.html(); | |
} | |
function _processIssue(item, checkDate) { | |
//initialize and get basic details required for your status | |
var processedIssueDetails = { | |
title: item.fields.summary, | |
link: getMyIssueLink(item.key), | |
description: item.renderedFields.description, | |
comments: [] //array to accomodate multiple comments on same issue on the same day | |
}; | |
for (var j = 0; j < item.renderedFields.comment.comments.length; j++) { | |
//loop through each JIRA issue's comments | |
var processedComment = _processIssueComment(item.fields.comment.comments[j], item.renderedFields.comment.comments[j], checkDate); | |
//add to comments if valid | |
if (processedComment) { | |
processedComment.mailToSubject = escape(processedIssueDetails.title); | |
processedIssueDetails.comments.push(processedComment); | |
} | |
} | |
//if no comments at all, do not send anything | |
return processedIssueDetails.comments.length ? processedIssueDetails : null; | |
} | |
function _processIssueComment(issueComment, renderedIssueComment, checkDate) { | |
//collect relevant issue properties together | |
var processedComment = { | |
html: renderedIssueComment.body, | |
author: issueComment.author && issueComment.author.displayName, | |
date: issueComment.created, | |
mailToSubject: '', //we'll fill this in parent function | |
mailToBody: '' | |
}; | |
//your status prefix to be detected in comments | |
var regexStatus = /\[statuscomment\]/i; | |
//comments validations | |
if (!regexStatus.test(processedComment.html)) | |
return null; //comment should start with "[statuscomment]" | |
var createdDate = new Date(processedComment.date); | |
if (createdDate < checkDate) return null; //comment should be of today | |
//regex to detect and remove the `statuscomment` to remove it from final HTML | |
var regexCommentCleanup = /<span class=\"error\">\[statuscomment\]<\/span>(<br\/>)?/ig; | |
//comment cleanup and add to data | |
processedComment.html = processedComment.html.replace(regexCommentCleanup, ''); | |
processedComment.date = ''; //not required anymore | |
//additional reply-to feature for quick reply to issues in status mail | |
processedComment.mailToBody = $(processedComment.html).text(); | |
if (processedComment.mailToBody) { | |
processedComment.mailToBody = ' \n\n____________________\n\n' | |
+ processedComment.author + ' comment: ' | |
+ processedComment.mailToBody; | |
processedComment.mailToBody = escape(processedComment.mailToBody); | |
} | |
return processedComment; | |
} | |
function getMyIssueLink(key) { | |
return "https://myproject.atlassian.cloud/browse/" + key; | |
} | |
function htmlEncode(value) { | |
// Explanation: Create an in-memory div, set it's inner text (which jQuery automatically encodes) | |
// then grab the encoded contents back out. The div never exists on the page. | |
return $('<div/>').text(value).html(); | |
} | |
//run your code and get your final processed status html | |
return processStatus(data, "2016-02-11")); | |
//NOTE: date parameter is optional. Above date is as per `03-jira-api-result-sample.json`, | |
//so that when you run the script, it builds you _that day's_ status HTML, accordingly. | |
} |
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
<script id="jira-comments" type="x-jquery-tmpl"> | |
<table border="0" cellpadding="1" cellspacing="1" class="issue-article" style="width: 100%;"> | |
<tr> | |
<td>{{html description}}</td> | |
</tr> | |
{{each comments}} | |
<tr> | |
<td class="comment"> | |
{{tmpl($value) "#jira-comment"}} | |
</td> | |
</tr> | |
{{/each}} | |
</table> | |
</script> | |
<script id="jira-comment" type="x-jquery-tmpl"> | |
<table class="comment-head" width="100%"> | |
<tr> | |
<td align="left"><span class="title" style="font-weight: 600; float:left;">Comment:</span></td> | |
<td align="right"> | |
<span class="author"> (By ${author})</span> | |
<a class="reply-to" href="mailto:[ReplyToEmail]?Subject=RE:%20${mailToSubject}&Body=${mailToBody}">Reply ></a> | |
</td> | |
</tr> | |
</table> | |
<div>{{html html}}</div> | |
</script> | |
<script id="jira-status" type="x-jquery-tmpl"> | |
<html> | |
<body> | |
{{each issues}} | |
<a href="${link}">${title}</a><br /> | |
{{tmpl($value) "#jira-comments"}} | |
{{/each}} | |
</body> | |
</html> | |
</script> |
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
{ | |
"expand": "schema,names", | |
"startAt": 0, | |
"maxResults": 50, | |
"total": 1, | |
"issues": [{ | |
"expand": "operations,versionedRepresentations,editmeta,changelog,transitions,renderedFields", | |
"id": "22116", | |
"self": "https://myproject.atlassian.cloud/rest/api/latest/issue/22116", | |
"key": "PROJ-1340", | |
"fields": { | |
"summary": "Reports - Drip Reports Oddity - Super watch", | |
"description": "*Task one* This is the task description of our drip reports oddity super watch issue.", | |
"comment": { | |
"startAt": 0, | |
"maxResults": 1, | |
"total": 1, | |
"comments": [{ | |
"self": "https://myproject.atlassian.cloud/rest/api/2/issue/22116/comment/22645", | |
"id": "22645", | |
"author": { | |
"self": "https://myproject.atlassian.cloud/rest/api/2/user?username=Krishnan", | |
"name": "Krishnan", | |
"key": "krishnan", | |
"emailAddress": "krishnan@myproject.com", | |
"displayName": "Krishnan Mudaliar", | |
"active": true, | |
"timeZone": "Asia/Kolkata" | |
}, | |
"body": "[statuscomment]\r\nHello, this is my first status comment today, but second overall", | |
"created": "2016-02-19T16:40:42.177+0530" | |
}, { | |
"self": "https://myproject.atlassian.cloud/rest/api/2/issue/22116/comment/22645", | |
"id": "22640", | |
"author": { | |
"self": "https://myproject.atlassian.cloud/rest/api/2/user?username=Krishnan", | |
"name": "Krishnan", | |
"key": "krishnan", | |
"emailAddress": "krishnan@myproject.com", | |
"displayName": "Krishnan Mudaliar", | |
"active": true, | |
"timeZone": "Asia/Kolkata" | |
}, | |
"body": "[statuscomment]\r\nHello, this is my _first status comment_ *ever*.", | |
"created": "2016-02-18T16:40:42.177+0530" | |
}] | |
} | |
}, | |
"renderedFields": { | |
"summary": null, | |
"description": "<strong>Task one</strong> This is the task description of our drip reports oddity super watch issue.", | |
"comment": { | |
"startAt": 0, | |
"maxResults": 1, | |
"total": 1, | |
"comments": [{ | |
"self": "https://myproject.atlassian.cloud/rest/api/2/issue/22116/comment/22645", | |
"id": "22645", | |
"author": { | |
"self": "https://myproject.atlassian.cloud/rest/api/2/user?username=Krishnan", | |
"name": "Krishnan", | |
"key": "krishnan", | |
"emailAddress": "krishnan@myproject.com", | |
"displayName": "Krishnan Mudaliar", | |
"active": true, | |
"timeZone": "Asia/Kolkata" | |
}, | |
"body": "<p><span class=\"error\">[statuscomment]</span></p>\n\n<p>Hi, this is my first status comment today, but second overall.</p>", | |
"created": "2016-02-19T16:40:42.177+0530" | |
}, { | |
"self": "https://myproject.atlassian.cloud/rest/api/2/issue/22116/comment/22645", | |
"id": "22640", | |
"author": { | |
"self": "https://myproject.atlassian.cloud/rest/api/2/user?username=Krishnan", | |
"name": "Krishnan", | |
"key": "krishnan", | |
"emailAddress": "krishnan@myproject.com", | |
"displayName": "Krishnan Mudaliar", | |
"active": true, | |
"timeZone": "Asia/Kolkata" | |
}, | |
"body": "<p><span class=\"error\">[statuscomment]</span></p>\n\n<p>Hi, and this is my <i>first status comment</i> <b>ever</b>.</p>", | |
"created": "2016-02-18T16:40:42.177+0530" | |
}] | |
} | |
} | |
}], | |
"names": { | |
"summary": "Summary", | |
"description": "Description", | |
"comment": "Comment" | |
}, | |
"schema": { | |
"summary": { | |
"type": "string", | |
"system": "summary" | |
}, | |
"description": { | |
"type": "string", | |
"system": "description" | |
}, | |
"comment": { | |
"type": "comments-page", | |
"system": "comment" | |
} | |
} | |
} |
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
<script src="http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"></script> | |
<script type="text/javascript"> | |
//NOTE: jiraAPIResponse is your JIRA API Result-set, like `03-jira-api-result-sample.json` | |
var finalHTML = jiraAPIResponseProcessor(jiraAPIResponse); | |
$('#div-final-html').html(finalHTML); //this fills the div shown below | |
</script> | |
<div id="div-final-html"> | |
<a href="https://myproject.atlassian.cloud/browse/PROJ-1340">Reports - Drip Reports Oddity - LandWatch</a><br> | |
<table border="1" cellpadding="1" cellspacing="1" class="issue-article" style="width: 100%;"> | |
<tbody> | |
<tr> | |
<td><strong>Task one</strong> This is your task description</td> | |
</tr> | |
<tr> | |
<td class="comment"> | |
<table class="comment-head" width="100%"> | |
<tbody> | |
<tr> | |
<td align="left"><span class="title" style="font-weight: 600; float:left;">Comment:</span></td> | |
<td align="right"> <span class="author"> (By Krishnan Mudaliar)</span> <a class="reply-to" href="mailto:[ReplyToEmail]?Subject=RE:%20Reports%20-%20Drip%20Reports%20Oddity%20-%20LandWatch&Body=%20%0A%0A____________________%0A%0AKrishnan%20Mudaliar%20comment%3A%20%0A%0AHi%2C%20this%20is%20my%20first%20status%20comment%20today%2C%20but%20second%20overall.">Reply ></a> </td> | |
</tr> | |
</tbody> | |
</table> | |
<div> | |
<p></p> | |
<p>Hi, this is my first status comment today, but second overall.</p> | |
</div> | |
</td> | |
</tr> | |
<tr> | |
<td class="comment"> | |
<table class="comment-head" width="100%"> | |
<tbody> | |
<tr> | |
<td align="left"><span class="title" style="font-weight: 600; float:left;">Comment:</span></td> | |
<td align="right"> <span class="author"> (By Krishnan Mudaliar)</span> <a class="reply-to" href="mailto:[ReplyToEmail]?Subject=RE:%20Reports%20-%20Drip%20Reports%20Oddity%20-%20LandWatch&Body=%20%0A%0A____________________%0A%0AKrishnan%20Mudaliar%20comment%3A%20%0A%0AHi%2C%20and%20this%20is%20my%20first%20status%20comment%20ever.">Reply ></a> </td> | |
</tr> | |
</tbody> | |
</table> | |
<div> | |
<p></p> | |
<p>Hi, and this is my <i>first status comment</i> <b>ever</b>.</p> | |
</div> | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
</div> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment