From: Loic Baron Date: Thu, 10 Dec 2015 16:35:47 +0000 (+0100) Subject: Merge branch 'onelab' of https://github.com/onelab-eu/myslice into onelab X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=65f3afecca7801020377406f5b3daf9f495a8b94;hp=1d34262ea4f143f31c95fb4cfc78e945cb00afe3;p=unfold.git Merge branch 'onelab' of https://github.com/onelab-eu/myslice into onelab --- diff --git a/myslice/urls.py b/myslice/urls.py index b2e88bb6..8f108280 100644 --- a/myslice/urls.py +++ b/myslice/urls.py @@ -22,6 +22,8 @@ add_to_builtins('insert_above.templatetags.insert_tags') from settings import auxiliaries, INSTALLED_APPS +from unfold.loginrequired import LoginRequiredView + import portal.about import portal.institution import portal.registrationview @@ -29,6 +31,7 @@ import portal.accountview import portal.contactview import portal.termsview import portal.supportview +import portal.omn import portal.platformsview import portal.dashboardview @@ -108,6 +111,8 @@ urls = [ (r'^news/?$', portal.newsview.NewsView.as_view()), (r'^resources/(?P[^/]+)/?$', portal.sliceresourceview.SliceResourceView.as_view()), (r'^users/(?P[^/]+)/?$', portal.slicetabusers.SliceUserView.as_view()), + (r'^my_url/?$', portal.omn.OMNView.as_view()), + (r'^ontology/?$', portal.omn.OMNView.as_view()), # Testing sfa rest (r'^sfa_resources/(?P[^/]+)/?$', portal.resources.ResourcesView.as_view()), diff --git a/portal/omn.py b/portal/omn.py new file mode 100644 index 00000000..f101fa75 --- /dev/null +++ b/portal/omn.py @@ -0,0 +1,17 @@ +from unfold.loginrequired import LoginRequiredView +from myslice.theme import ThemeView +from django.shortcuts import render_to_response +from django.template import RequestContext + +class OMNView (LoginRequiredView, ThemeView): + template_name = 'omn/gui.html' + def get (self, request, slicename=None, state=None): + username = self.request.user + my_var = "loading..." + + env = { 'theme' : self.theme, + 'my_var': my_var, + 'request':self.request, + } + return render_to_response(self.template, env, context_instance=RequestContext(request)) + diff --git a/portal/static/js/omn.js b/portal/static/js/omn.js new file mode 100644 index 00000000..477221dd --- /dev/null +++ b/portal/static/js/omn.js @@ -0,0 +1,106 @@ +var yasr = YASR(document.getElementById("yasr"), { + //this way, the URLs in the results are prettified using the defined prefixes in the query + getUsedPrefixes: yasqe.getPrefixesFromQuery +}); + +YASQE.defaults.sparql.showQueryButton = true; +YASQE.defaults.sparql.endpoint = "http://lod.fed4fire.eu/sparql"; +YASQE.defaults.sparql.callbacks.success = function(data){console.log("success", data);}; +YASQE.defaults.sparql.callbacks.complete = yasr.setResponse; +YASQE.defaults.value = "SELECT ?name ?am ?endpoint WHERE {\n ?infra ?am ;\n rdfs:label ?name . \n ?am rdf:type ;\n ?endpoint .\n} LIMIT 100" + +/** + * We use most of the default settings for the property and class autocompletion types. This includes: + * - the pre/post processing of tokens + * - detecting whether we are in a valid autocompletion position + * - caching of the suggestion list. These are cached for a period of a month on the client side. + */ + +var getAutocompletionsArrayFromCsv = function(csvString) { + var completionsArray = []; + csvString.split("\n").splice(1).forEach(function(url) {//remove first line, as this one contains the projection variable + completionsArray.push(url.substring(1, url.length-1));//remove quotes + }); + return completionsArray; +} + + + +var customPropertyCompleter = function(yasqe) { + //we use several functions from the regular property autocompleter (this way, we don't have to re-define code such as determining whether we are in a valid autocompletion position) + var returnObj = { + isValidCompletionPosition: function(){return YASQE.Autocompleters.properties.isValidCompletionPosition(yasqe)}, + preProcessToken: function(token) {return YASQE.Autocompleters.properties.preProcessToken(yasqe, token)}, + postProcessToken: function(token, suggestedString) {return YASQE.Autocompleters.properties.postProcessToken(yasqe, token, suggestedString)} + }; + + //In this case we assume the properties will fit in memory. So, turn on bulk loading, which will make autocompleting a lot faster + returnObj.bulk = true; + returnObj.async = true; + + //and, as everything is in memory, enable autoShowing the completions + returnObj.autoShow = true; + + returnObj.persistent = "customProperties";//this will store the sparql results in the client-cache for a month. + returnObj.get = function(token, callback) { + //all we need from these parameters is the last one: the callback to pass the array of completions to + var sparqlQuery = "PREFIX void: \n" + + "PREFIX ds: \n" + + "SELECT DISTINCT *\n" + + " { [] void:subset [\n" + + " void:linkPredicate ?property;\n" + + " ]\n" + + "} ORDER BY ?property"; + $.ajax({ + data: {query: sparqlQuery}, + url: YASQE.defaults.sparql.endpoint, + headers: {Accept: "text/csv"},//ask for csv. Simple, and uses less bandwidth + success: function(data) { + callback(getAutocompletionsArrayFromCsv(data)); + } + }); + }; + return returnObj; +}; +//now register our new autocompleter +YASQE.registerAutocompleter('customPropertyCompleter', customPropertyCompleter); + + +//excellent, now do the same for the classes +var customClassCompleter = function(yasqe) { + var returnObj = { + isValidCompletionPosition: function(){return YASQE.Autocompleters.classes.isValidCompletionPosition(yasqe)}, + preProcessToken: function(token) {return YASQE.Autocompleters.classes.preProcessToken(yasqe, token)}, + postProcessToken: function(token, suggestedString) {return YASQE.Autocompleters.classes.postProcessToken(yasqe, token, suggestedString)} + }; + returnObj.bulk = true; + returnObj.async = true; + returnObj.autoShow = true; + returnObj.get = function(token, callback) { + var sparqlQuery = "PREFIX void: \n" + + "PREFIX ds: \n" + + "SELECT *\n" + + "{ [] void:subset [\n" + + " a ds:Dataset-Type-Count;\n" + + " void:class ?type\n"+ + " ]\n" + + "} ORDER BY ?type"; + $.ajax({ + data: {query: sparqlQuery}, + url: YASQE.defaults.sparql.endpoint, + headers: {Accept: "text/csv"},//ask for csv. Simple, and uses less bandwidth + success: function(data) { + callback(getAutocompletionsArrayFromCsv(data)); + } + }); + }; + return returnObj; +}; +YASQE.registerAutocompleter('customClassCompleter', customClassCompleter); + +//And, to make sure we don't use the other property and class autocompleters, overwrite the default enabled completers +YASQE.defaults.autocompleters = ['customClassCompleter', 'customPropertyCompleter']; + + +//finally, initialize YASQE +var yasqe = YASQE(document.getElementById("yasqe")); diff --git a/portal/templates/omn/gui.html b/portal/templates/omn/gui.html new file mode 100644 index 00000000..8d80e77d --- /dev/null +++ b/portal/templates/omn/gui.html @@ -0,0 +1,56 @@ +{% extends "layout_wide.html" %} +{% block head %} + + + + + + + +{% endblock %} + +{% block content %} + +
+ +

Fed4FIRE Ontology Plugin

+

Intro

+Todo. + +

Generated World Map

+Todo. + +

Queries

+ +

Examples

+ + +

User

+
+
+ +

Direct RDF stream

+
Netmode RDF data: {{my_var}}
+
+{% endblock %}