annotate examples/browser/web/js/browser.js @ 770:c54bc2ffbf92 tip

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