~larry-e-works/uci-engine/write-exitcode-to-file

« back to all changes in this revision

Viewing changes to charms/precise/webui/files/webroot/webui.js

  • Committer: Joe Talbott
  • Date: 2014-01-27 14:54:08 UTC
  • mfrom: (126.3.8 webui)
  • mto: This revision was merged to the branch mainline in revision 161.
  • Revision ID: joe.talbott@canonical.com-20140127145408-zpubebx02y6oumxq
merge doanac's cleanup branch

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
YUI.add('webui', function(Y) {
2
 
  Y.webui = {
3
 
    url_prefix: "/api/",
4
 
    update_tickets: function() {
5
 
      if (Y.webui.main_table) {
6
 
        Y.webui.get_tickets();
7
 
      }
8
 
 
9
 
      var running = Y.all(".running");
10
 
      if (running.size() > 0) {
11
 
        refresh_timeout = setTimeout(update_tickets, interval);
12
 
      }
13
 
    },
14
 
    get_ticket: function(ticket_id, elem) {
15
 
      var table = null;
16
 
      data = Y.io(Y.webui.url_prefix + "fullticket/" + ticket_id + "/", {
17
 
        on: {
18
 
          success: function(tx, r) {
19
 
            console.log("success");
20
 
            var data;
21
 
 
22
 
            try {
23
 
              data = Y.JSON.parse(r.responseText);
24
 
            }
25
 
            catch (e) {
26
 
              alert("JSON Parse failed");
27
 
              return;
28
 
            }
29
 
 
30
 
            var new_div =  Y.webui.ticket_detail_element(data);
31
 
            elem.setHTML(new_div);
32
 
 
33
 
          },
34
 
          failure: function(tx, r, e) {
35
 
            console.log("failure: ", tx, r, e);
36
 
          }
37
 
        }
38
 
      });
39
 
    },
40
 
    get_tickets: function() {
41
 
      container = Y.one('#container');
42
 
      data = Y.io(Y.webui.url_prefix + "ticket/", {
43
 
        on: {
44
 
          success: function(tx, r) {
45
 
            console.log("success");
46
 
            var data;
47
 
 
48
 
            try {
49
 
              data = Y.JSON.parse(r.responseText);
50
 
            }
51
 
            catch (e) {
52
 
              alert("JSON Parse failed");
53
 
              return;
54
 
            }
55
 
 
56
 
            for (var i = 0; i < data.objects.length; i++) {
57
 
              Y.webui.add_item(data.objects[i]);
58
 
            }
59
 
          },
60
 
          failure: function(tx, r, e) {
61
 
            console.log("failure: ", tx, r, e);
62
 
          }
63
 
        }
64
 
      });
65
 
    },
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];
71
 
 
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>'));
76
 
      }
77
 
 
78
 
      main_tr.addClass('subticket');
79
 
      return main_tr;
80
 
    },
81
 
    make_subticket: function(data) {
82
 
      var div = Y.Node.create("<div class='subticket'></div>");
83
 
 
84
 
      var table = div.appendChild(Y.Node.create("<table>"));
85
 
      var hidden_fields = Y.Array(['id', 'resource_uri']);
86
 
 
87
 
      for (var key in data) {
88
 
        // Skip hidden fields
89
 
        if (Y.Array.indexOf(hidden_fields, key) != -1) {
90
 
          continue;
91
 
        }
92
 
 
93
 
        var value = data[key];
94
 
        if (key == 'artifact') {
95
 
          var span = Y.webui.add_artifacts(data['artifact']);
96
 
          value = span.getHTML();
97
 
        }
98
 
 
99
 
        if (key == 'source_package_upload') {
100
 
          var span = Y.webui.sp_upload(data['source_package_upload']);
101
 
          value = span.getHTML();
102
 
        }
103
 
 
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>'));
107
 
      }
108
 
 
109
 
      return div;
110
 
    },
111
 
    basename: function(path) {
112
 
      return path.replace(/^.*\//, "");
113
 
    },
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/>"));
119
 
      }
120
 
 
121
 
      return span;
122
 
    },
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);
128
 
 
129
 
      return link;
130
 
    },
131
 
    sp_upload: function(data) {
132
 
      var span = Y.Node.create("<span></span>");
133
 
 
134
 
      if (data.sourcepackage) {
135
 
        span.setHTML(data.sourcepackage.name + " " + data.version);
136
 
      }
137
 
 
138
 
      return span;
139
 
    },
140
 
    ticket_detail_element: function(data) {
141
 
      var hidden_fields = Y.Array(['id', 'title', 'subticket', 'resource_uri']);
142
 
 
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>"));
146
 
 
147
 
      if (data['title']) {
148
 
        div.prepend(Y.Node.create('<h2>' + data['title'] + '</h2>'));
149
 
      }
150
 
 
151
 
      for (var key in data) {
152
 
        var value = data[key];
153
 
 
154
 
        if (Y.Array.indexOf(hidden_fields, key) != -1) {
155
 
          continue;
156
 
        }
157
 
 
158
 
        if (key == "title" || key == "subticket") {
159
 
          continue;
160
 
        }
161
 
 
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>'));
166
 
      }
167
 
 
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];
174
 
 
175
 
            var subt = Y.webui.make_subticket(subticket);
176
 
 
177
 
            div.appendChild(subt);
178
 
          }
179
 
        }
180
 
      }
181
 
      return div;
182
 
    },
183
 
    check_ticket: function(e) {
184
 
      var elem = this;
185
 
      var id = elem.get('id').replace('item-', '');
186
 
 
187
 
      data = Y.io(Y.webui.url_prefix +  "status/" + id + "/", {
188
 
        on: {
189
 
          success: function(tx, r) {
190
 
            var data;
191
 
 
192
 
            try {
193
 
              data = Y.JSON.parse(r.responseText);
194
 
            }
195
 
            catch (e) {
196
 
              alert("JSON Parse failed");
197
 
              return;
198
 
            }
199
 
 
200
 
            var update_fields = ['status', 'title', 'current_workflow_step', 'updated'];
201
 
 
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);
209
 
              }
210
 
            }
211
 
            // HACK for development testing
212
 
            var new_status = data['status'];
213
 
            if (new_status == 440) {
214
 
              elem.addClass('red');
215
 
            } else {
216
 
              elem.removeClass('red');
217
 
            }
218
 
          }
219
 
        }
220
 
      });
221
 
    },
222
 
    add_item: function(item) {
223
 
      var entry = item;
224
 
      var id = entry['id'];
225
 
      var table = Y.webui.main_table;
226
 
 
227
 
      if (table) {
228
 
        var tr = table.addRow({
229
 
          title: entry['title'],
230
 
          current_workflow_step: entry['current_workflow_step'],
231
 
          status: entry['status'],
232
 
          ticket_id: id
233
 
        });
234
 
      }
235
 
    },
236
 
    make_main_table: function(div_id) {
237
 
 
238
 
      var columns = [
239
 
        {key: 'title', label: 'Title'},
240
 
        {key: 'current_workflow_step', label: 'Workflow Step'},
241
 
        {key: 'status', label: 'Status'}
242
 
      ]
243
 
      var data = [];
244
 
 
245
 
      var main_table = new Y.DataTable({
246
 
        columnset: columns,
247
 
        recordset: data
248
 
      });
249
 
      main_table.render(div_id);
250
 
 
251
 
      Y.webui.main_table = main_table;
252
 
    }
253
 
  };
254
 
}, '0.0.1', {requires: ['io', 'node', 'json-parse', 'datatable']});