in site/js/projects.js [1507:1559]
function searchProjects(str) {
var obj = document.getElementById('contents');
str = str.toLowerCase();
var hits = {};
var hitssorted = [];
// Search committees
for (p in projects) {
var project = projects[p];
for (key in project) {
if (typeof project[key] == "string") {
var val = project[key].toLowerCase();
if (val.indexOf(str) >= 0 && val.substr(0,1) != "{") {
if (!hits[p]) {
hits[p] = [];
}
var estr = new RegExp(str, "i");
hits[p].push({
'key': key,
'val': project[key].replace(estr, function(a) { return "<u style='color: #963;'>"+a+"</u>"}, "img")
});
if (hitssorted.indexOf(p) < 0) {
hitssorted.push(p);
}
}
}
}
}
var title = "Search results for '" + str + "' (" + hitssorted.length + "):";
obj.innerHTML = "";
var h2 = document.createElement('h2');
h2.appendChild(document.createTextNode(title));
obj.appendChild(h2);
hitssorted.sort(function(a,b) { return hits[b].length - hits[a].length });
var ul = document.createElement('ul');
var h;
for (h in hitssorted) {
h = hitssorted[h];
var project = hits[h];
var html = "<h4><a href='project.html?" + h + "'>" + projects[h].name + "</a> (" + project.length + " hit(s)):</h4>";
for (x in project) {
html += "<blockquote><b>" + project[x].key + ":</b> " + project[x].val + "</blockquote>";
}
appendLiInnerHTML(ul,html);
}
if (hitssorted.length == 0) {
obj.innerHTML += "No search results found";
}
obj.appendChild(ul);
}