From 505fd4456ddeb8d6d620fcc9c1514085b51abf01 Mon Sep 17 00:00:00 2001 From: j2blake Date: Thu, 27 Oct 2011 21:55:41 +0000 Subject: [PATCH] NIHVIVO-2343 Get the additional info for a Proxy. --- webapp/web/js/account/accountProxyCommon.js | 18 +++--- .../js/account/accountProxyProxiesPanel.js | 62 +++++++++++++++++-- 2 files changed, 69 insertions(+), 11 deletions(-) diff --git a/webapp/web/js/account/accountProxyCommon.js b/webapp/web/js/account/accountProxyCommon.js index 62c0b12c9..309568d8f 100644 --- a/webapp/web/js/account/accountProxyCommon.js +++ b/webapp/web/js/account/accountProxyCommon.js @@ -29,19 +29,23 @@ function proxyInfoElement(template, uri, label, classLabel, imageUrl, existing) { this.uri = uri; + this.label = label; + this.classLabel = classLabel; + this.imageUrl = imageUrl; var existed = existing; var removed = false; - var content = template.replace(/%uri%/g, uri).replace(/%label%/g, label) - .replace(/%classLabel%/g, classLabel).replace(/%imageUrl%/g, - imageUrl); - this.toString = function() { return "proxyInfoElement: " + content; } this.element = function() { + var content = template.replace(/%uri%/g, this.uri) + .replace(/%label%/g, this.label) + .replace(/%classLabel%/g, this.classLabel) + .replace(/%imageUrl%/g, this.imageUrl); + var element = $("
" + content + "
"); var removeLink = $("[templatePart='remove']", element).first(); var removeText = removeLink.text(); @@ -87,8 +91,8 @@ function proxyInfoElement(template, uri, label, classLabel, imageUrl, existing) * that are already present in the list and so should be filtered out of * the autocomplete response. * addProxyInfo -- a function that we can call when an item is selected. - * It will take the uri, label, classLabel, and imageUrl, build a - * proxyInfoElement, and add it to the panel. + * It will take the selection info, build a proxyInfoElement, and add + * it to the panel. * ---------------------------------------------------------------------------- * Before executing the AJAX request, the query from the parms map will be modified, * replacing "%term%" with the current search term. @@ -142,7 +146,7 @@ function proxyAutocomplete(parms, getProxyInfos, addProxyInfo) { } this.select = function(event, ui) { - addProxyInfo(ui.item.uri, ui.item.label, ui.item.classLabel, ui.item.imageUrl); + addProxyInfo(ui.item); event.preventDefault(); event.target.value = ''; } diff --git a/webapp/web/js/account/accountProxyProxiesPanel.js b/webapp/web/js/account/accountProxyProxiesPanel.js index 6ba9e0e8e..413c7c884 100644 --- a/webapp/web/js/account/accountProxyProxiesPanel.js +++ b/webapp/web/js/account/accountProxyProxiesPanel.js @@ -1,7 +1,12 @@ /* $This file is distributed under the terms of the license in /doc/license.txt$ */ function proxyProxiesPanel(p) { - var query = "PREFIX fn: \n" + var sparqlQueryUrl = '../ajax/sparqlQuery'; + var matchingProperty = "http://vivoweb.org/ontology/core#scopusId" + var urlContext = 'http://localhost:8080/vivo' + + var query = "" + + "PREFIX fn: \n" + "PREFIX auth: \n" + "\n" + "SELECT DISTINCT ?uri ?label ?externalAuthId \n" @@ -16,6 +21,30 @@ function proxyProxiesPanel(p) { + "ORDER BY ASC(?lastName) ASC(?firstName) \n" + "LIMIT 25 \n"; + var moreInfoQuery = "" + + "PREFIX rdfs: \n" + + "PREFIX vitro: \n" + + "PREFIX p.1: \n" + + " \n" + + "SELECT ?uri ?classLabel ?imageUrl \n" + + "WHERE \n" + + "{ \n" + + " ?uri <%matchingProperty%> '%externalAuthId%'. \n" + + " \n" + + " OPTIONAL { \n" + + " ?uri vitro:mostSpecificType ?type. \n" + + " ?type rdfs:label ?classLabel \n" + + " } \n" + + " \n" + + " OPTIONAL { \n" + + " ?uri p.1:mainImage ?imageUri. \n" + + " ?imageUri p.1:thumbnailImage ?thumbUri. \n" + + " ?thumbUri p.1:downloadLocation ?thumbstreamUri. \n" + + " ?thumbstreamUri p.1:directDownloadUrl ?imageUrl. \n" + + " } \n" + + "} \n" + + "LIMIT 1 \n"; + var self = this; this.disableFormInUnsupportedBrowsers = function() { @@ -63,6 +92,29 @@ function proxyProxiesPanel(p) { if (this.disableFormInUnsupportedBrowsers()) { return; } + + this.getAdditionalInfo = function(info, externalAuthId) { + $.ajax({ + url: sparqlQueryUrl, + dataType: 'json', + data: { + query: moreInfoQuery.replace("%matchingProperty%", matchingProperty).replace("%externalAuthId%", externalAuthId) + }, + complete: function(xhr, status) { + var results = $.parseJSON(xhr.responseText); + var parsed = sparqlUtils.parseSparqlResults(results); + if (parsed.length > 0) { + if ("classLabel" in parsed[0]) { + info.classLabel = parsed[0].classLabel; + } + if ("imageUrl" in parsed[0]) { + info.imageUrl = urlContext + parsed[0].imageUrl; + } + self.displayProxyData(); + } + } + }); + } this.panel = p; this.proxyDataDiv = $("div[name='proxyData']", this.panel).first(); @@ -76,8 +128,10 @@ function proxyProxiesPanel(p) { return self.proxyData; } - this.addProxyInfo = function(uri, label, junk1, junk2) { - self.proxyData.unshift(new proxyInfoElement(self.templateHtml, uri, label, "", "", false)); + this.addProxyInfo = function(selection) { + var info = new proxyInfoElement(self.templateHtml, selection.uri, selection.label, "", "", false) + self.proxyData.unshift(info); + self.getAdditionalInfo(info, selection.externalAuthId) self.displayProxyData(); } @@ -85,7 +139,7 @@ function proxyProxiesPanel(p) { var parms = { query: query, model: "userAccounts", - url: '../ajax/sparqlQuery' + url: sparqlQueryUrl }; this.addAutoCompleteField.autocomplete(new proxyAutocomplete(parms, this.getProxyInfos, this.addProxyInfo)); }