function renderProjectsByCategory()

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);
    }
}