in site/js/projects.js [656:723]
function renderProjectsByCategory() {
var obj = document.getElementById('list');
obj.innerHTML = "";
var projectsSorted = sortProjects();
var cats = [];
var ccount = {};
var i;
for (i in projects) {
if (projects[i].category) {
var a = projects[i].category.split(/,\s*/);
var x;
for (x in a) {
x = a[x].toLowerCase(); // must agree with downcase below
if (cats.indexOf(x) < 0) {
cats.push(x);
ccount[x] = 0;
}
ccount[x]++;
}
}
}
cats.sort();
// Construct category list
var toc = document.createElement('p');
var toch = document.createElement('h3');
toch.textContent = 'TOC';
toc.appendChild(toch);
var ul = document.createElement('ul');
var l;
for (l in cats) {
var cat = cats[l];
var tocitem = document.createElement('a');
tocitem.href="#" + cat;
tocitem.innerHTML=cat;
if (l > 0) { // divider
toc.appendChild(document.createTextNode(', '));
}
toc.appendChild(tocitem);
var li = document.createElement('li');
li.innerHTML = "<h3><a id='" + cat + "'>" + cat + " (" + ccount[cat] + ")</a>"+linkToHere(cat)+":</h3>";
var cul = document.createElement('ul');
for (i in projectsSorted) {
i = projectsSorted[i];
var project = projects[i];
if (project.category) {
var a = project.category.split(/,\s*/);
for (x in a) {
x = a[x].toLowerCase(); // must agree with downcase above
if (x == cat) {
appendLiInnerHTML(cul, projectIcon(project.name) + projectLink(i));
}
}
}
}
li.appendChild(cul);
ul.appendChild(li);
}
obj.appendChild(toc);
obj.appendChild(ul);
if (location.hash.length > 1) {
setTimeout(function() { location.href = location.href;}, 250);
}
}