comparison 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
comparison
equal deleted inserted replaced
639:2eaea1afd6b3 640:901803e1305f
1 var sparqler = new SPARQL.Service("http://harrison/sparql/");
2
3 sparqler.setPrefix("mo", "http://purl.org/ontology/mo/");
4 sparqler.setPrefix("foaf", "http://xmlns.com/foaf/0.1/");
5 sparqler.setPrefix("dc", "http://purl.org/dc/elements/1.1/");
6
7 sparqler.setRequestHeader("Accept", "application/json");
8
9 var resultsTable;
10
11 $(document).ready(function() {
12 $("#search").click(search)
13 $("#spinner").hide();
14 resultsTable = $('#results').dataTable({"bFilter":false,"bLengthChange":false,"bPaginate":true,
15 "fnRowCallback": function(nRow, aData, iDisplayIndex)
16 {
17 $(nRow).attr("typeof", "mo:Track");
18 return nRow;
19 },
20 "fnDrawCallback": function ()
21 {
22 $(".artist_name").click(function(event) { searchArtist($(this).attr("href")); return false; });
23 $(".album_name").click(function(event) { searchAlbum($(this).attr("href")); return false; });
24 }
25 });
26
27 $("#results tbody").click(function(event) {
28 $(resultsTable.fnSettings().aoData).each(function (){
29 $(this.nTr).removeClass('row_selected');
30 });
31 $(event.target.parentNode).addClass('row_selected');
32 });
33
34 });
35
36 function search(event) {
37
38 var trackSearchString = $("#tracksearch").val();
39 var artistSearchString = $("#artistsearch").val();
40
41 if(trackSearchString.length == 0 && artistSearchString.length == 0)
42 {
43 resultsTable.fnClearTable();
44 return;
45 }
46
47 var queryString = "SELECT ?maker ?album ?album_title ?tracknum ?artist_name ?track_title WHERE {";
48
49 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";
50
51 if(artistSearchString.length > 0)
52 {
53 queryString += ' FILTER regex(?artist_name, "'+artistSearchString+'", "i")';
54 }
55 else
56 {
57 queryString += ".";
58 }
59
60 queryString += " ?record mo:track ?track; mo:publication_of ?signal. ?signal dc:title ?track_title";
61
62 if(trackSearchString.length > 0)
63 {
64 queryString += ' FILTER regex(?track_title, "'+trackSearchString+'", "i")';
65 }
66 else
67 {
68 queryString += ".";
69 }
70
71 queryString += " }";
72
73 performSearch(queryString);
74 }
75
76 function searchArtist(id) {
77 var queryString = "SELECT ?maker ?album ?album_title ?tracknum ?artist_name ?track_title WHERE {";
78 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";
79 queryString += " ?record mo:track ?track; mo:publication_of ?signal. ?signal dc:title ?track_title.";
80 queryString += " FILTER(sameTerm(?maker, <"+id+">))";
81 queryString += " }";
82 performSearch(queryString);
83 }
84
85 function searchAlbum(id) {
86 var queryString = "SELECT ?maker ?album ?album_title ?tracknum ?artist_name ?track_title WHERE {";
87 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";
88 queryString += " ?record mo:track ?track; mo:publication_of ?signal. ?signal dc:title ?track_title.";
89 queryString += " FILTER(sameTerm(?album, <"+id+">))";
90 queryString += " }";
91 performSearch(queryString);
92 }
93
94
95 function performSearch(queryString) {
96 $("#spinner").show();
97 $("#query").text(queryString);
98 var query = sparqler.createQuery();
99 query.query(queryString, {failure: function(xhr) { alert("Bad response! "+xhr.responseText) }, success: displayResults});
100 }
101
102 function displayResults(json) {
103 resultsTable.fnClearTable();
104 if(json) {
105
106 var bindings = json.results.bindings;
107 for(var i=0; i<bindings.length; i++)
108 {
109 var artistEl = $('<div />');
110 var artistLink = $('<a/>');
111 artistEl.append(artistLink);
112 artistLink.attr("href", bindings[i].maker.value);
113 artistLink.attr("rel", "foaf:maker");
114 artistLink.addClass("artist_name");
115 artistLink.append(bindings[i].artist_name.value);
116
117 var albumEl = $('<div />');
118 var albumLink = $('<a/>');
119 albumEl.append(albumLink);
120 albumLink.attr("href", bindings[i].album.value);
121 albumLink.attr("rel", "dc:title");
122 albumLink.addClass("album_name");
123 albumLink.append(bindings[i].album_title.value);
124
125 resultsTable.fnAddData([artistEl.html(), bindings[i].track_title.value, bindings[i].tracknum.value, albumEl.html()]);
126 }
127
128 }
129 $("#spinner").hide();
130 }