2 $title = "WebKit Team";
8 <p>Here is the key for each item:</p>
10 <li><strong class="name">Name</strong> <span class="nick">(IRC nickname)</span> <em class="affiliation">Affiliation</em>
11 <ul><li class="expertise">Areas of knowledge</li></ul>
17 <ul id="reviewers"></ul>
20 <ul id="committers"></ul>
23 <ul id="contributors"></ul>
28 var svnTrunkUrl = 'https://svn.webkit.org/repository/webkit/trunk/';
29 var domainAffiliations = {
32 'basyskom.com': 'basysKom GmbH',
33 'cisco.com': 'Cisco Systems',
34 'collabora.co.uk': 'Collabora',
35 'company100.com': 'Company100',
36 'google.com': 'Google',
37 'igalia.com': 'Igalia',
38 'intel.com' : 'Intel',
39 'lge.com' : 'LG Electronics',
40 'motorola.com': 'Motorola Mobility',
42 'openbossa.org': 'INdT / Nokia',
43 'profusion.mobi': 'ProFUSION',
44 'rim.com': 'Research In Motion',
45 'samsung.com': 'Samsung Electronics',
46 'sencha.com': 'Sencha',
47 'sisa.samsung.com': 'Samsung Electronics',
48 'torchmobile.com.cn': 'Torch Mobile (Beijing) Co. Ltd.',
50 'partner.samsung.com': 'Samsung Electronics',
53 'inf.u-szeged.hu': 'University of Szeged',
54 'stud.u-szeged.hu': 'University of Szeged',
56 // Open source communities
57 'chromium.org': 'Chromium',
58 'codeaurora.org': 'Code Aurora Forum',
63 function parseContributorsJSON(text) {
64 var contributorsJSON = JSON.parse(text);
65 var contributors = [];
67 for (var contributorType in contributorsJSON) {
68 for (var contributor in contributorsJSON[contributorType]) {
71 kind: contributorType.replace(/s$/, "").toLowerCase(),
72 emails: contributorsJSON[contributorType][contributor].emails,
73 nicks: contributorsJSON[contributorType][contributor].nicks,
74 expertise: contributorsJSON[contributorType][contributor].expertise
81 function formatAffiliation(contributor) {
82 if (contributor.affiliation)
83 return contributor.affiliation;
85 if (!contributor.emails || !contributor.emails.length)
88 var affiliations = [];
89 for (var domain in domainAffiliations) {
90 for (var i = 0; i < contributor.emails.length; i++) {
91 if (contributor.emails[i].indexOf('@' + domain) > 0 && affiliations.indexOf(domainAffiliations[domain]) < 0)
92 affiliations.push(domainAffiliations[domain]);
95 return affiliations.join(' / ');
98 function addText(container, text) { container.appendChild(document.createTextNode(text)); }
100 function addWrappedText(container, tagName, attributes, text) {
101 var element = document.createElement(tagName);
102 for (var name in attributes)
103 element.setAttribute(name, attributes[name]);
104 addText(element, text);
105 container.appendChild(element);
108 function populateContributorListItem(listItem, contributor) {
109 addWrappedText(listItem, 'strong', {'class': 'name'}, contributor.name);
110 if (contributor.nicks) {
111 addText(listItem, ' (');
112 addWrappedText(listItem, 'span', {'class': 'nicks'}, contributor.nicks.join(', '));
113 addText(listItem, ')');
116 var affiliation = formatAffiliation(contributor);
118 addText(listItem, ' ');
119 addWrappedText(listItem, 'em', {'class': 'affiliation'}, affiliation);
122 if (contributor.expertise) {
123 var expertiseList = document.createElement('ul');
124 addWrappedText(expertiseList, 'li', {'class': 'expertise'}, contributor.expertise);
125 listItem.appendChild(expertiseList);
129 function populateContributorList(contributors, kind) {
130 var contributorsOfKind = contributors.filter(function(contributor) { return contributor.kind == kind; });
131 var listElement = document.getElementById(kind + 's');
132 for (var i = 0; i < contributorsOfKind.length; i++) {
133 var listItem = document.createElement('li');
134 listElement.appendChild(listItem);
135 populateContributorListItem(listItem, contributorsOfKind[i]);
139 function nicksInListItem(listItem) {
140 var nicksContainer = listItem.querySelector('.nicks');
141 if (!nicksContainer || !nicksContainer.textContent)
143 return nicksContainer.textContent.split(/,\s*/);
146 function findListChildForContributor(contributor) {
147 var listChildren = document.getElementsByTagName('li');
148 for (var i = 0; i < listChildren.length; i++) {
149 var nameContainer = listChildren[i].querySelector('.name');
150 if (nameContainer && nameContainer.textContent.toLowerCase().indexOf(contributor.name.toLowerCase()) >= 0)
151 return listChildren[i];
152 var nicksInContainer = nicksInListItem(listChildren[i]);
153 if (nicksInContainer && contributor.nicks) {
154 for (var j = 0; j < contributor.nicks.length; j++) {
155 if (nicksInContainer.indexOf(contributor.nicks[j]) >= 0)
156 return listChildren[i];
163 var xhr = new XMLHttpRequest();
164 xhr.onload = function () {
165 if (this.status !== 200)
166 return this.onerror();
167 var contributors = parseContributorsJSON(this.responseText);
169 populateContributorList(contributors, 'reviewer');
170 populateContributorList(contributors, 'committer');
171 populateContributorList(contributors, 'contributor');
173 xhr.onerror = function () { document.getElementById('container').textContent = 'Could not obtain contributors.json'; };
174 xhr.open('GET', svnTrunkUrl + 'Tools/Scripts/webkitpy/common/config/contributors.json');
180 include("footer.inc");