function renderProjectsByLanguage()

in site/js/projects.js [712:767]


function renderProjectsByLanguage() {
    var obj = document.getElementById('list');
    obj.innerHTML = "";
    var projectsSorted = sortProjects();

    // Compile Language array
    var lingos = [];
    var lcount = {};
    var i;
    var x;
    for (i in projects) {
        if (projects[i]['programming-language']) {
            var a = projects[i]['programming-language'].split(/,\s*/);
            for (x in a) {
                a[x] = camelCase(a[x]);
                if (lingos.indexOf(a[x]) < 0) {
                    lingos.push(a[x]);
                    lcount[a[x]] = 0;
                }
                lcount[a[x]]++;
            }
        }
    }

    // Construct language list
    lingos.sort();
    var ul = document.createElement('ul');

    var l;
    for (l in lingos) {
        var lang = lingos[l];
        var li = document.createElement('li');
        li.innerHTML = "<h3><a id='" + lang + "'>" + lang + " (" + lcount[lang] + ")</a>"+linkToHere(lang)+":</h3>";
        var cul = document.createElement('ul');
        for (i in projectsSorted) {
            i = projectsSorted[i];
            if (projects[i]['programming-language']) {
                var a = projects[i]['programming-language'].split(/,\s*/);
                for (x in a) {
                    // Use same capitalisation as the language list
                    if (camelCase(a[x]) == lang) {
                        appendLiInnerHTML(cul, projectIcon(projects[i].name) + projectLink(i));
                    }
                }
            }
        }
        li.appendChild(cul);
        ul.appendChild(li);
    }

    obj.appendChild(ul);

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