03c769dea7a6fd1ba1496f762cb0e779e0ddc58f
[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 payload;
63     if (this.payload)
64         payload = this.payload.value;
65     else {
66         var contents = {};
67         for (var i = 0; i < this.elements.length; i++)
68             contents[this.elements[i].name] = this.elements[i].value;
69         payload = JSON.stringify(contents);
70     }
71
72     var xhr = new XMLHttpRequest;
73     xhr.onreadystatechange = function () {
74         if (xhr.readyState != 4)
75             return;
76         if (xhr.status != 200)
77             error('HTTP status: ' + xhr.status);
78         else if (xhr.responseText != 'OK\n')
79             error(xhr.responseText);
80     }
81     xhr.open(this.method, this.action, true);
82     xhr.send(payload);
83
84     $(this).trigger('reload');
85 });
86
87 $('#manual-submission textarea').val(JSON.stringify({
88     'branch': 'webkit-trunk',
89     'platform': 'chromium-mac',
90     'builder-name': 'Chromium Mac Release (Perf)',
91     'build-number': '123',
92     'timestamp': parseInt(Date.now() / 1000),
93     'webkit-revision': 104856,
94     'chromium-revision': 123059,
95     'results':
96         {
97             'webkit_style_test': {'avg': 100, 'median': 102, 'stdev': 5, 'min': 90, 'max': 110},
98             'some_test': 54,
99         },
100 }, null, '  '));