1
YUI.add('webui', function(Y) {
4
update_tickets: function() {
5
if (Y.webui.main_table) {
9
var running = Y.all(".running");
10
if (running.size() > 0) {
11
refresh_timeout = setTimeout(update_tickets, interval);
14
get_ticket: function(ticket_id, elem) {
16
data = Y.io(Y.webui.url_prefix + "fullticket/" + ticket_id + "/", {
18
success: function(tx, r) {
19
console.log("success");
23
data = Y.JSON.parse(r.responseText);
26
alert("JSON Parse failed");
30
var new_div = Y.webui.ticket_detail_element(data);
31
elem.setHTML(new_div);
34
failure: function(tx, r, e) {
35
console.log("failure: ", tx, r, e);
40
get_tickets: function() {
41
container = Y.one('#container');
42
data = Y.io(Y.webui.url_prefix + "ticket/", {
44
success: function(tx, r) {
45
console.log("success");
49
data = Y.JSON.parse(r.responseText);
52
alert("JSON Parse failed");
56
for (var i = 0; i < data.objects.length; i++) {
57
Y.webui.add_item(data.objects[i]);
60
failure: function(tx, r, e) {
61
console.log("failure: ", tx, r, e);
66
add_subticket: function(data) {
67
var main_tr = Y.Node.create("<tr>");
68
main_tr.appendChild(Y.Node.create('<th>subticket</th>'));
69
for (var key in data) {
70
var value = data[key];
72
var tr = main_tr.appendChild(Y.Node.create('<tr>'));
73
tr.addClass('subticket');
74
tr.appendChild(Y.Node.create('<th>' + key + '</th>'));
75
tr.appendChild(Y.Node.create('<td>' + value + '</td>'));
78
main_tr.addClass('subticket');
81
make_subticket: function(data) {
82
var div = Y.Node.create("<div class='subticket'></div>");
84
var table = div.appendChild(Y.Node.create("<table>"));
85
var hidden_fields = Y.Array(['id', 'resource_uri']);
87
for (var key in data) {
89
if (Y.Array.indexOf(hidden_fields, key) != -1) {
93
var value = data[key];
94
if (key == 'artifact') {
95
var span = Y.webui.add_artifacts(data['artifact']);
96
value = span.getHTML();
99
if (key == 'source_package_upload') {
100
var span = Y.webui.sp_upload(data['source_package_upload']);
101
value = span.getHTML();
104
var tr = table.appendChild(Y.Node.create('<tr>'));
105
tr.appendChild(Y.Node.create('<th>' + key + ': </th>'));
106
tr.appendChild(Y.Node.create('<td>' + value + '</td>'));
111
basename: function(path) {
112
return path.replace(/^.*\//, "");
114
add_artifacts: function(data) {
115
var span = Y.Node.create('<span></span>');
116
for (var i = 0; i < data.length; i++) {
117
span.appendChild(Y.webui.artifact_link(data[i]));
118
span.appendChild(Y.Node.create("<br/>"));
123
artifact_link: function(data) {
124
var name = Y.webui.basename(data['name']);
125
var link = Y.Node.create("<a/>");
126
link.set('href', data['reference']);
127
link.set('text', name);
131
sp_upload: function(data) {
132
var span = Y.Node.create("<span></span>");
134
if (data.sourcepackage) {
135
span.setHTML(data.sourcepackage.name + " " + data.version);
140
ticket_detail_element: function(data) {
141
var hidden_fields = Y.Array(['id', 'title', 'subticket', 'resource_uri']);
143
div = Y.Node.create("<div id='table_wrapper'/>");
144
ticket_div = div.appendChild(Y.Node.create("<div class='ticket'></div>"));
145
table = ticket_div.appendChild(Y.Node.create("<table></table>"));
148
div.prepend(Y.Node.create('<h2>' + data['title'] + '</h2>'));
151
for (var key in data) {
152
var value = data[key];
154
if (Y.Array.indexOf(hidden_fields, key) != -1) {
158
if (key == "title" || key == "subticket") {
162
tr = Y.Node.create('<tr></tr>');
163
table.appendChild(tr);
164
tr.appendChild(Y.Node.create('<th>' + key + '</th>'));
165
tr.appendChild(Y.Node.create('<td>' + value + '</td>'));
168
if (data['subticket']) {
169
div.appendChild("<h3>Subtickets</h3>");
170
var subticket_count = data['subticket'].length;
171
if (subticket_count > 0) {
172
for (var i = 0; i < subticket_count; i++) {
173
var subticket = data['subticket'][i];
175
var subt = Y.webui.make_subticket(subticket);
177
div.appendChild(subt);
183
check_ticket: function(e) {
185
var id = elem.get('id').replace('item-', '');
187
data = Y.io(Y.webui.url_prefix + "status/" + id + "/", {
189
success: function(tx, r) {
193
data = Y.JSON.parse(r.responseText);
196
alert("JSON Parse failed");
200
var update_fields = ['status', 'title', 'current_workflow_step', 'updated'];
202
for (i = 0; i < update_fields.length; i++) {
203
var field_name = update_fields[i];
204
var field = elem.one('#' + field_name + '-' + id);
205
var old_value = field.getHTML();
206
var new_value = data[field_name];
207
if (field && new_value && old_value != new_value) {
208
field.setHTML(new_value);
211
// HACK for development testing
212
var new_status = data['status'];
213
if (new_status == 440) {
214
elem.addClass('red');
216
elem.removeClass('red');
222
add_item: function(item) {
224
var id = entry['id'];
225
var table = Y.webui.main_table;
228
var tr = table.addRow({
229
title: entry['title'],
230
current_workflow_step: entry['current_workflow_step'],
231
status: entry['status'],
236
make_main_table: function(div_id) {
239
{key: 'title', label: 'Title'},
240
{key: 'current_workflow_step', label: 'Workflow Step'},
241
{key: 'status', label: 'Status'}
245
var main_table = new Y.DataTable({
249
main_table.render(div_id);
251
Y.webui.main_table = main_table;
254
}, '0.0.1', {requires: ['io', 'node', 'json-parse', 'datatable']});