perf-o-matic needs a better admin page
[WebKit-https.git] / Websites / webkit-perf.appspot.com / js / admin.js
1 function removeNonFormListItems(list) {
2     list.children().each(function () {
3         if ($.inArray('form', this.classList))
4             $(this).remove();
5     });
6 }
7
8 function createKeyNameReloader(name) {
9     return function () {
10         $.getJSON(name, function (platforms) {
11             var list = $('#' + name + ' ul');
12             removeNonFormListItems(list);
13             $.each(platforms, function (key, name) {
14                 list.append('<li>' + key + ' : ' + name + '</li>');
15             });
16             list.append($('#' + name + ' ul .form'));
17         });
18     }
19 }
20
21 $('#branches form').bind('reload', createKeyNameReloader('branches'));
22 $('#platforms form').bind('reload', createKeyNameReloader('platforms'));
23
24 $('#builders form').bind('reload', function () {
25     $.getJSON('builders', function (builders) {
26         var list = $('#builders ul');
27         removeNonFormListItems(list);
28         builders = builders.sort();
29         for (var i = 0; i < builders.length; i++)
30             list.append('<li><a href="http://build.webkit.org/builders/' + builders[i] + '">' + builders[i] + '</a></li>');
31         list.append($('#builders ul .form'));
32     });
33 });
34
35 $('#tests form').bind('reload', function () {
36     $.getJSON('tests', function (tests) {
37         var list = $('#tests ul');
38         removeNonFormListItems(list);
39         var select = $('#tests select');
40         select.children().remove();
41
42         tests = tests.sort();
43         for (var i = 0; i < tests.length; i++) {
44             list.append('<li>' + tests[i] + '</li>'); // FIXME: Add a link to trac page.
45             select.append('<option value="' + tests[i] + '">' + tests[i] + '</option>');
46         }
47
48         list.append($('#tests ul .form'));
49     });
50 });
51
52 $.ajaxSetup({
53     'error': function(xhr, e, message) { console.log(xhr); error('Failed with HTTP status: ' + xhr.status, e); },
54     cache: true,
55 });
56
57 $('form').trigger('reload');
58
59 $('form').bind('submit', function (event) {
60     event.preventDefault();
61
62     var contents = {}
63     for (var i = 0; i < this.elements.length; i++)
64         contents[this.elements[i].name] = this.elements[i].value;
65
66     var xhr = new XMLHttpRequest;
67     xhr.onreadystatechange = function () {
68         if (xhr.readyState != 4)
69             return;
70         if (xhr.status != 200)
71             error('HTTP status: ' + xhr.status);
72         else if (xhr.responseText != 'OK')
73             error(xhr.responseText);
74         
75     }
76     xhr.open(this.method, this.action, true);
77     xhr.send(JSON.stringify(contents));
78
79     $(this).trigger('reload');
80 });