function renderProjectsByCategory()

in site/js/projects.js [769:824]


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 ul = document.createElement('ul');

    var l;
    for (l in cats) {
        var lang = cats[l];
        var li = document.createElement('li');
        li.innerHTML = "<h3><a id='" + lang + "'>" + lang + " (" + ccount[lang] + ")</a>"+linkToHere(lang)+":</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 == lang) {
                        appendLiInnerHTML(cul, projectIcon(project.name) + projectLink(i));
                    }
                }
            }
        }
        li.appendChild(cul);
        ul.appendChild(li);
    }

    obj.appendChild(ul);

    if (location.hash.length > 1) {
        setTimeout(function() { location.href = location.href;}, 250);
    }
}