initial import
[vuplus_webkit] / Tools / BuildSlaveSupport / build.webkit.org-config / public_html / TestFailures / scripts / ui / failures.js
1 /*
2  * Copyright (C) 2011 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 var ui = ui || {};
27 ui.failures = ui.failures || {};
28
29 (function(){
30
31 var kBuildingResult = 'BUILDING';
32
33 ui.failures.Configuration = base.extends('a', {
34     init: function(configuration)
35     {
36         if (configuration.is64bit)
37             this._addSpan('architecture', '64-bit');
38         if (configuration.version)
39             this._addSpan('version', configuration.version);
40         this._configuration = configuration;
41         this.target = '_blank';
42     },
43     _addSpan: function(className, text)
44     {
45         var span = this.appendChild(document.createElement('span'));
46         span.className = className;
47         span.textContent = text;
48     },
49     equals: function(configuration)
50     {
51         return this._configuration.is64bit == configuration.is64bit && this._configuration.version == configuration.version; 
52     }
53 });
54
55 function cellContainsConfiguration(cell, configuration)
56 {
57     return Array.prototype.some.call(cell.children, function(configurationElement) {
58         return configurationElement.equals && configurationElement.equals(configuration);
59     });
60 }
61
62 function cellByBuildType(row, configuration)
63 {
64     return row.cells[configuration.debug ? 2 : 1];
65 }
66
67 ui.failures.FailureGrid = base.extends('table', {
68     init: function()
69     {
70         this.className = 'failures';
71         var titles = this.createTHead().insertRow();
72         titles.insertCell().textContent = 'debug';
73         titles.insertCell().textContent = 'release';
74         titles.insertCell().textContent = 'type';
75         this._body = this.appendChild(document.createElement('tbody'));
76         this._resultRows = {};
77         // Add the BUILDING row eagerly so that it appears last.
78         this._rowByResult(kBuildingResult);
79         $(this._resultRows[kBuildingResult]).hide();
80     },
81     _rowByResult: function(result)
82     {
83         var row = this._resultRows[result];
84         $(row).show();
85         if (row)
86             return row;
87
88         row = this._resultRows[result] = this._body.insertRow(0);
89         row.className = result;
90         row.insertCell();
91         row.insertCell();
92         row.insertCell().textContent = result;
93         return row;
94     },
95     removeResultRows: function()
96     {
97         Object.keys(this._resultRows).forEach(function(result) {
98             var row = this._resultRows[result];
99             row.parentNode.removeChild(row);
100         }, this);
101         this._resultRows = {};
102     },
103     add: function(resultsByBuilder)
104     {
105         Object.keys(resultsByBuilder).forEach(function(builderName) {
106             var configuration = config.kBuilders[builderName];
107             var row = this._rowByResult(resultsByBuilder[builderName].actual);
108             var cell = cellByBuildType(row, configuration);
109             if (cellContainsConfiguration(cell, configuration))
110                 return;
111             cell.appendChild(new ui.failures.Configuration(configuration)).href = ui.displayURLForBuilder(builderName);
112         }, this);
113     }
114 });
115
116 })();