You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@community.apache.org by hb...@apache.org on 2015/05/25 16:52:49 UTC

svn commit: r1681591 - /comdev/projects.apache.org/site/js/projects.js

Author: hboutemy
Date: Mon May 25 14:52:49 2015
New Revision: 1681591

URL: http://svn.apache.org/r1681591
Log:
use committees-retired.json instead of committees-evolution.json for rendering of better info

Modified:
    comdev/projects.apache.org/site/js/projects.js

Modified: comdev/projects.apache.org/site/js/projects.js
URL: http://svn.apache.org/viewvc/comdev/projects.apache.org/site/js/projects.js?rev=1681591&r1=1681590&r2=1681591&view=diff
==============================================================================
--- comdev/projects.apache.org/site/js/projects.js (original)
+++ comdev/projects.apache.org/site/js/projects.js Mon May 25 14:52:49 2015
@@ -19,9 +19,9 @@
 
 var people = {}; // committer -> name lookups
 var unixgroups = {}; // unix (ldap) groups (project -> committers lookup)
-var committees = {}; // id -> committee info (chair, established, group, homepage, id, name, reporting, shortdesc)
+var committees = {}; // id -> committee info (chair, established, group, homepage, id, name, reporting, shortdesc) (current committees)
 var committeesByName = {}; // name -> committee info
-var committeesEvolution = {}; // committees sorted by date founded, with retired (name = "retired: name")
+var retiredCommittees = {}; // retired committees information: id -> committee info (established, retired, homepage, id, name)
 var projects = {}; // Projects
 var evolution = {}; // Podling evolution
 
@@ -963,92 +963,31 @@ function isCommittee(name) {
 }
 
 // ------------ Front page rendering ------------\\
-function htmlListTooltip(date,name,values) {
-    return '<div style="padding:8px 8px 8px 8px;"><b>' + date + '</b>'
-	+ '<br/><b>' + values.length + '</b> ' + name + ((values.length > 1) ? 's:':':')
-	+ ((values.length > 0) ? '<br/>- '+values.join('<br/>- '):'')
-	+ '</div>';
-}
 
 function renderFrontPage() {
-    var numchairs = 0;
-    for (i in committees) numchairs++;
-    cur = evolution[0].current;
-    var nsubs = 0;
-    
+    var numcommittees = 0;
+    var i;
+    for (i in committees) numcommittees++;
+    var cur = evolution[0].current;
+
+    var nsubs = 0; // number of projects with DOAP that do not have same name than a committee
     for (i in projects) {
-	i = projects[i];
-	if (!i.name.match(/incubating/i)) {
-	    initiatives++;
-	    if (!isCommittee(i.name)) {
-		    nsubs++;
-	    }
-	}
+        i = projects[i];
+        if (i.pmc != 'incubator' && !isCommittee(i.name)) {
+            nsubs++;
+        }
     }
-    var initiatives = cur + numchairs + nsubs + 5; // podlings + committees + sub-projects + specials
+    var initiatives = cur + numcommittees + nsubs; // podlings + committees + sub-projects
     initiatives -= initiatives % 100; // round down
     var obj = document.getElementById('details');
     obj.innerHTML = "<h3 style='text-align: center;'>There are currently <span style='color: #269;'>" + initiatives + "+</span> open source initatives at the ASF:</h3>"
-	+ "<ul style='width: 400px; margin: 0 auto; font-size: 18px; color: #269; font-weight: bold;'>"
-    	+ "<li>" + numchairs + " committees managing " + (numchairs + nsubs) + " projects</li>"
-    	+ "<li>5 special committees*</li>"
-    	+ "<li>" + cur + " incubating podlings</li></ul>"
-    	+ "<p><small>*Infrastructure, Travel Assistance, Security Team, Legal Affairs and Brand Management</small></p>";
-
-    var parr = [];
-    var cur = 0;
-    var karr = [];
-    for (i in committeesEvolution) {
-	karr.push(i);
-    }
-    karr.sort();
-    
-    for (var j in karr) {
-        var i = karr[j];
-        var changes = committeesEvolution[i];
-        var newCommittees = [];
-        var retiredCommittees = [];
-        for (var k in changes) {
-            var change = changes[k];
-            if (change.match(/retired: /)) {
-                retiredCommittees.push(change.substring(9))
-            } else {
-                newCommittees.push(change)
-            }
-        }
-        cur += newCommittees.length - retiredCommittees.length;
-        parr.push([i, newCommittees.length, htmlListTooltip(i, 'new committee', newCommittees), retiredCommittees.length, htmlListTooltip(i, 'retired committee', retiredCommittees), cur]);
-    }
-    //narr.sort(function(a,b) { return (b[1] - a[1]) });
-    var data1 = new google.visualization.DataTable();
-    data1.addColumn('string', 'Month');
-    data1.addColumn('number', "New committees");
-    data1.addColumn({type: 'string', role: 'tooltip', 'p': {'html': true}});
-    data1.addColumn('number', "Retired committees");
-    data1.addColumn({type: 'string', role: 'tooltip', 'p': {'html': true}});
-    data1.addColumn('number', 'Current committees');
+        + "<ul style='width: 400px; margin: 0 auto; font-size: 18px; color: #269; font-weight: bold;'>"
+        + "<li>" + numcommittees + " committees managing " + (numcommittees + nsubs) + " projects</li>"
+        + "<li>5 special committees*</li>"
+        + "<li>" + cur + " incubating podlings</li></ul>"
+        + "<p><small>*Infrastructure, Travel Assistance, Security Team, Legal Affairs and Brand Management</small></p>";
 
-    data1.addRows(parr);
-
-    coptions = {
-	title: "Committee evolution",
-	isStacked: true,
-	height: 320,
-	width: 1160,
-	seriesType: "bars",
-	backgroundColor: 'transparent',
-	series: {2: {type: "line", targetAxisIndex: 1}},
-	tooltip: {isHtml: true},
-	vAxes:[
-              {title: 'Change in states'},
-              {title: 'Current number of committees'}
-              ]
-    };
-    var div = document.createElement('div');
-    obj.appendChild(div);
-    chart = new google.visualization.ComboChart(div);
-    chart.draw(data1, coptions);
-    
+    renderCommitteeEvolution();
     
     var earr = [];
     for (i in evolution) {
@@ -1080,7 +1019,7 @@ function renderFrontPage() {
               {title: 'Current number of podlings'}
               ]
     };
-    div = document.createElement('div');
+    var div = document.createElement('div');
     obj.appendChild(div);
     chart = new google.visualization.ComboChart(div);
     chart.draw(data, coptions);
@@ -1091,6 +1030,85 @@ function renderFrontPage() {
 
 // ------------ Chart functions ------------\\
 
+function htmlListTooltip(date,name,values) {
+    return '<div style="padding:8px 8px 8px 8px;"><b>' + date + '</b>'
+        + '<br/><b>' + values.length + '</b> ' + name + ((values.length > 1) ? 's:':':')
+        + ((values.length > 0) ? '<br/>- '+values.join('<br/>- '):'')
+        + '</div>';
+}
+
+function renderCommitteeEvolution() {
+    var evo = {}; // 'year-month' -> { established: [], retired: [] }
+    var maxYear = new Date().getFullYear();
+    for (var year = 1995; year <= maxYear; year++) {
+        var maxMonth = (year < maxYear) ? 12 : (new Date().getMonth() + 1);
+        for (var month = 1; month <= maxMonth; month++) {
+            var key = year + '-' + (month < 10 ? '0':'') + month;
+            evo[key] = { 'established': [], 'retired': [] };
+        }
+    }
+    // add current committees
+    var c;
+    for (c in committees) {
+        c = committees[c];
+        evo[c.established]['established'].push(c);
+    }
+    // add retired committees
+    for (c in retiredCommittees) {
+        c = retiredCommittees[c];
+        evo[c.established]['established'].push(c);
+        evo[c.retired]['retired'].push(c);
+    }
+
+    var data = [];
+    var cur = 0;
+    var d;
+    for (d in evo) {
+        var established = evo[d]['established'];
+        var retired = evo[d]['retired'];
+        var estDisplay = [];
+        for (c in established) {
+            c = established[c];
+            estDisplay.push(c.name + ((c.id in retiredCommittees) ? ' (retired ' + retiredCommittees[c.id]['retired'] + ')':''));
+        }
+        var retDisplay = [];
+        for (c in retired) {
+            c = retired[c];
+            retDisplay.push(c.name + ' (established ' + c['established'] + ')');
+        }
+        cur += established.length - retired.length;
+        data.push([d, established.length, htmlListTooltip(d, 'new committee', estDisplay), retired.length, htmlListTooltip(d, 'retired committee', retDisplay), cur]);
+    }
+    //narr.sort(function(a,b) { return (b[1] - a[1]) });
+    var dataTable = new google.visualization.DataTable();
+    dataTable.addColumn('string', 'Month');
+    dataTable.addColumn('number', "New committees");
+    dataTable.addColumn({type: 'string', role: 'tooltip', 'p': {'html': true}});
+    dataTable.addColumn('number', "Retired committees");
+    dataTable.addColumn({type: 'string', role: 'tooltip', 'p': {'html': true}});
+    dataTable.addColumn('number', 'Current committees');
+
+    dataTable.addRows(data);
+
+    var options = {
+        title: "Committee evolution",
+        isStacked: true,
+        height: 320,
+        width: 1160,
+        seriesType: "bars",
+        backgroundColor: 'transparent',
+        series: {2: {type: "line", targetAxisIndex: 1}},
+        tooltip: {isHtml: true},
+        vAxes:[
+            {title: 'Change in states'},
+            {title: 'Current number of committees'}
+        ]
+    };
+    var div = document.createElement('div');
+    document.getElementById('details').appendChild(div);
+    var chart = new google.visualization.ComboChart(div);
+    chart.draw(dataTable, options);
+}
 
 function renderLanguageChart() {
     var obj = document.getElementById('contents');
@@ -1100,11 +1118,11 @@ function renderLanguageChart() {
     // Languages
     var lingos = [];
     var lcount = {};
-    for (i in projects) {
+    for (var i in projects) {
         i = projects[i];
 	if (i['programming-language']) {
 	    var a = i['programming-language'].split(", ");
-	    for (x in a) {
+	    for (var x in a) {
                 x = a[x];
 		if (lingos.indexOf(x) < 0) {
 		    lingos.push(x);
@@ -1116,7 +1134,7 @@ function renderLanguageChart() {
     }
     
     
-    narr = [];
+    var narr = [];
     for (i in lingos) {
 	var lang = lingos[i];
 	narr.push([lang, lcount[lang], 'Click here to view all projects using ' + lang]);
@@ -1167,7 +1185,7 @@ function renderLanguageChart() {
     }
     
     
-    carr = [];
+    var carr = [];
     for (i in cats) {
 	var cat = cats[i];
 	carr.push([cat, ccount[cat], 'Click here to view all projects in the ' + cat + ' category'])
@@ -1201,8 +1219,6 @@ function renderLanguageChart() {
     }
     google.visualization.events.addListener(chart2, 'select', selectHandlerCategory);
     chart2.draw(data2, options);
-    
-
 }
 
 function buildFrontPage() {
@@ -1337,24 +1353,28 @@ function checkKeyPress(e, txt) {
 
 // ------------ Weave functions ------------\\
 
-// Add projects if they aren't in the hash already
+function weaveById(list,mapById) {
+    for (var i in list) {
+        var o = list[i];
+        mapById[o.id] = o;
+    }
+}
+
+// Add content by id to projects
 function weaveInProjects(json) {
     for (p in json) {
-        if (!projects[p]) {
-                if (json[p].category) {
-                    // temporary hack: json are now generated without the http://projects.apache.org/category/ url
-                    json[p].category = json[p].category.replace(new RegExp("http://projects.apache.org/category/", 'g'), '');
-                }
-            projects[p] = json[p];
-        }
+        projects[p] = json[p];
     }
 }
 
+function weaveInRetiredCommittees(json) {
+    weaveById(json, retiredCommittees);
+}
+
 function setCommittees(json, state) {
+    weaveById(json, committees);
     for (p in json) {
         p = json[p];
-        // committees = { id -> committee }
-        committees[p.id] = p;
         // committeesByName = { name -> committee }
         committeesByName[p.name] = p;
     }
@@ -1416,7 +1436,7 @@ function preloadEverything(callback) {
         ["json/foundation/people_name.json", "people", function(json) { people = json; }],
         ["json/foundation/projects.json", "projects", weaveInProjects],
         ["json/foundation/podlings.json", "podlings", weaveInProjects],
-        ["json/foundation/committees-evolution.json", "committees evolution", function(json) { committeesEvolution = json; }],
+        ["json/foundation/committees-retired.json", "retired committees", weaveInRetiredCommittees],
         ["json/foundation/podlings-evolution.json", "podlings evolution", function(json) { evolution = json; }]
         ],
 	callback);