/
Optional: Add charts
Optional: Add charts
Sometimes, it's better to display data as charts and you can easily do it by using one of JavaScript charting libraries. Chart.js is the perfect choice.
Add Chart.js CDN URL to "JavaScript URLs":
Add HTML to "HTML to append" editor:
<div id="comp-issues-cont" style="padding:10px;"> <canvas style="max-width:400px; max-height:400px;" /> <span style="display: inline-block; vertical-align: top; padding-top: 40px; font-size: 26px;" /> </div>
We are going to improve the JavaScript:
- To fetch number of issues in To Do status
- To display a pie chart that shows number of issues in To Do, Completed and Other statuses
define("_ujgCompletedIssues", [ "jquery" ], function($) { var MyGadget = function(API) { var $msgDiv = $("#comp-issues-cont"); // find attached DOM element API.getGadgetContentEl().append($msgDiv); // function to call from success ajax callbacks var showInfo = function(todo, completed, total) { if (todo !== undefined && completed !== undefined && total !== undefined) { // only if 3 vars are defined var other = total - completed - todo; // Chart.js magic new Chart($msgDiv.find("canvas").get(0), { type: 'pie', data: { labels: ["To Do", "Completed", "Other"], datasets: [{ label: '# of Issues', data: [todo, completed, other], backgroundColor: [ 'rgba(255, 0, 0, 0.7)', 'rgba(0, 255, 0, 0.7)', 'rgba(0, 0, 255, 0.7)' ] }] } }); $msgDiv.find("span").append('To Do: ' + todo + '</br>' + 'Completed: ' + completed + '</br>' + 'Other: ' + other); API.resize(); } }; // function for error displaying var showError = function(url) { $msgDiv.empty(); AJS.messages['error']($msgDiv, { title : 'Error!', body : 'Failed to retrieve data for URL: ' + url }); API.resize(); }; var url, todo, completed, total; // initially are undefined url = 'https://vkrupach.atlassian.net/rest/agile/1.0/board/6/issue?jql=sprint%20in%20openSprints()%20and%20status%20in(%27To%20Do%27)&fields=id'; // make a call for number of completed issues // $.ajax({ // for Server AP.request({ // for Cloud url : url, success : function(data) { // todo = data.total; // for Server todo = $.parseJSON(data).total; // for Cloud showInfo(todo, completed, total); // call it 3 times since ajax methods are asynchronous and we are not sure about thier completion order }, error : function(data) { showError(url); } }); url = 'https://vkrupach.atlassian.net/rest/agile/1.0/board/6/issue?jql=sprint%20in%20openSprints()%20and%20status%20in(Done)&fields=id'; // make a call for number of completed issues // $.ajax({ // for Server AP.request({ // for Cloud url : url, success : function(data) { // completed = data.total; // for Server completed = $.parseJSON(data).total; // for Cloud showInfo(todo, completed, total); // call it 3 times since ajax methods are asynchronous and we are not sure about thier completion order }, error : function(data) { showError(url); } }); url = 'https://vkrupach.atlassian.net/rest/agile/1.0/board/6/issue?jql=sprint%20in%20openSprints()&fields=id'; // $.ajax({ // for Server AP.request({ // for Cloud url : url, success : function(data) { // total = data.total; // for Server total = $.parseJSON(data).total; // for Cloud showInfo(todo, completed, total); // call it 3 times since ajax methods are asynchronous and we are not sure about thier completion order }, error : function(data) { showError(url); } }); }; return MyGadget; });
As result, we have a beautiful and colorful chart:
, multiple selections available,
Related content
Gantt chart sharing with the public
Gantt chart sharing with the public
More like this
Gantt Chart custom views
Gantt Chart custom views
More like this
Jira REST and Charts sample script
Jira REST and Charts sample script
Read with this
Step 3: Display data
Step 3: Display data
Read with this
Task markers, Flags
Task markers, Flags
More like this
Toolbar
More like this