// Generated by CoffeeScript 1.10.0 /* Index creation */ (function() { var filter, search, search_input, search_results, select; window.class_index = {}; d3.selectAll('.annotation[data-wd-id]')[0].forEach(function(d) { var url; url = "https://query.wikidata.org/sparql?query=SELECT%20DISTINCT%20%3Fclass%20%7B%7B%20wd%3A" + d.dataset.wdId + "%20wdt%3AP31%20%3Fsclass%20.%20%3Fsclass%20wdt%3AP279*%20%3Fclass%20.%20%7D%20UNION%20%7B%20wd%3A" + d.dataset.wdId + "%20wdt%3AP279*%20%3Fclass%20.%20%7D%7D&format=json"; return d3.json(url, function(error, data) { return data.results.bindings.forEach(function(c) { var key; key = c["class"].value.split('/').slice(-1)[0]; if (!(key in class_index)) { class_index[key] = []; } return class_index[key].push(d.dataset.wdId); }); }); }); /* Searching features */ search_input = d3.select('#header input').on('keydown', function() { if (event.keyCode === 13) { return search(); } }); d3.select('#search_button').on('click', function() { return search(); }); search_results = d3.select('#search_results'); /* Selects a class and highlights the corresponding instance within the text */ select = function(node, id) { d3.select('.selected').classed('selected', false); d3.select(node).classed('selected', true); d3.selectAll(".annotation[data-wd-id]").classed('highlighted', true); d3.selectAll(".annotation[data-wd-id]").classed('selected', false); return class_index[id].forEach(function(d) { d3.selectAll(".annotation[data-wd-id=" + d + "]").classed('selected', true); return d3.selectAll(".annotation[data-wd-id=" + d + "]").classed('highlighted', false); }); }; /* Filters the data coming from Wikidata using the index */ filter = function(data) { return data = data.filter(function(d) { return d.id in class_index; }); }; /* Searches for a string inserted within the textbox */ search = function() { var query_string; query_string = d3.select('#header input').node().value; if (query_string !== '') { return d3.json("api.php?text=" + query_string, function(error, data) { var count, enter_results, resource, results; data = filter(data); data.sort(function(a, b) { return d3.descending(class_index[a.id].length, class_index[b.id].length); }); search_results.select('.no_results').remove(); if (data.length === 0) { search_results.append('div').attr({ "class": 'no_results' }).html("No results found for " + query_string + "."); } results = search_results.selectAll('.result').data(data, function(d) { return d.id; }); enter_results = results.enter().append('div').attr({ "class": 'result' }).on('click', function(d) { return select(this, d.id); }); results.order(); resource = enter_results.append('div').attr({ "class": 'resource' }); resource.html(function(d) { return "" + d.label + " (" + d.id + ")