diff examples/browser/web/js/browser.js @ 640:901803e1305f

First instance of audioDB browser code.
author mas01mj
date Thu, 08 Oct 2009 11:19:11 +0000
parents
children 3e25f26b6a27
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/browser/web/js/browser.js	Thu Oct 08 11:19:11 2009 +0000
@@ -0,0 +1,130 @@
+var sparqler = new SPARQL.Service("http://harrison/sparql/");
+
+sparqler.setPrefix("mo", "http://purl.org/ontology/mo/");
+sparqler.setPrefix("foaf", "http://xmlns.com/foaf/0.1/");
+sparqler.setPrefix("dc", "http://purl.org/dc/elements/1.1/");
+
+sparqler.setRequestHeader("Accept", "application/json");
+
+var resultsTable;
+
+$(document).ready(function() {
+	$("#search").click(search)
+	$("#spinner").hide();
+	resultsTable = $('#results').dataTable({"bFilter":false,"bLengthChange":false,"bPaginate":true, 
+		"fnRowCallback": function(nRow, aData, iDisplayIndex)
+		{
+			$(nRow).attr("typeof", "mo:Track");
+			return nRow;
+		},
+		"fnDrawCallback": function ()
+		{
+			$(".artist_name").click(function(event) { searchArtist($(this).attr("href")); return false; });
+			$(".album_name").click(function(event) { searchAlbum($(this).attr("href")); return false; });
+		}
+	});
+
+	$("#results tbody").click(function(event) {
+		$(resultsTable.fnSettings().aoData).each(function (){
+			$(this.nTr).removeClass('row_selected');
+		});
+		$(event.target.parentNode).addClass('row_selected');
+	});
+
+});
+
+function search(event) {
+
+	var trackSearchString = $("#tracksearch").val();
+	var artistSearchString = $("#artistsearch").val();
+
+	if(trackSearchString.length == 0 && artistSearchString.length == 0)
+	{
+		resultsTable.fnClearTable();
+		return;
+	}
+
+	var queryString = "SELECT ?maker ?album ?album_title ?tracknum ?artist_name ?track_title WHERE {";
+
+	queryString += " ?track a mo:Track; mo:track_number ?tracknum; foaf:maker ?maker. ?album mo:track ?track; dc:title ?album_title. ?maker foaf:name ?artist_name";
+	
+	if(artistSearchString.length > 0)
+	{
+		queryString += ' FILTER regex(?artist_name, "'+artistSearchString+'", "i")';
+	}
+	else
+	{
+		queryString += ".";
+	}
+	
+	queryString += " ?record mo:track ?track; mo:publication_of ?signal. ?signal dc:title ?track_title";
+
+	if(trackSearchString.length > 0)
+	{
+		queryString += ' FILTER regex(?track_title, "'+trackSearchString+'", "i")';
+	}
+	else
+	{
+		queryString += ".";
+	}
+
+	queryString += " }";
+
+	performSearch(queryString);
+}
+
+function searchArtist(id) {
+	var queryString = "SELECT ?maker ?album ?album_title ?tracknum ?artist_name ?track_title WHERE {";
+	queryString += " ?track a mo:Track; mo:track_number ?tracknum; foaf:maker ?maker. ?album mo:track ?track; dc:title ?album_title. ?maker foaf:name ?artist_name";
+	queryString += " ?record mo:track ?track; mo:publication_of ?signal. ?signal dc:title ?track_title.";
+	queryString += " FILTER(sameTerm(?maker, <"+id+">))";
+	queryString += " }";
+	performSearch(queryString);
+}
+
+function searchAlbum(id) {
+	var queryString = "SELECT ?maker ?album ?album_title ?tracknum ?artist_name ?track_title WHERE {";
+	queryString += " ?track a mo:Track; mo:track_number ?tracknum; foaf:maker ?maker. ?album mo:track ?track; dc:title ?album_title. ?maker foaf:name ?artist_name";
+	queryString += " ?record mo:track ?track; mo:publication_of ?signal. ?signal dc:title ?track_title.";
+	queryString += " FILTER(sameTerm(?album, <"+id+">))";
+	queryString += " }";
+	performSearch(queryString);
+}
+
+
+function performSearch(queryString) {
+	$("#spinner").show();
+	$("#query").text(queryString);
+	var query = sparqler.createQuery();
+	query.query(queryString, {failure: function(xhr) { alert("Bad response! "+xhr.responseText) }, success: displayResults});
+}
+
+function displayResults(json) {
+	resultsTable.fnClearTable();
+	if(json) {
+		
+		var bindings = json.results.bindings;
+		for(var i=0; i<bindings.length; i++)
+		{
+			var artistEl = $('<div />');
+			var artistLink = $('<a/>');
+			artistEl.append(artistLink);
+			artistLink.attr("href", bindings[i].maker.value);
+			artistLink.attr("rel", "foaf:maker");
+			artistLink.addClass("artist_name");
+			artistLink.append(bindings[i].artist_name.value);
+			
+			var albumEl = $('<div />');
+			var albumLink = $('<a/>');
+			albumEl.append(albumLink);
+			albumLink.attr("href", bindings[i].album.value);
+			albumLink.attr("rel", "dc:title");
+			albumLink.addClass("album_name");
+			albumLink.append(bindings[i].album_title.value);
+			
+			resultsTable.fnAddData([artistEl.html(), bindings[i].track_title.value, bindings[i].tracknum.value, albumEl.html()]);
+		}
+
+	}
+	$("#spinner").hide();
+}