# HG changeset patch # User veltr # Date 1377263923 -7200 # Node ID 25636bb50756a8f757d9c0b09ca3b7e14cb0f9fe # Parent dc08f5692d8085670c13ba1048d6c49cd3ac9edb Grouped geographical locations and years by dbpedia uri diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/static/jocondelab/img/flag_br.png Binary file src/jocondelab/static/jocondelab/img/flag_br.png has changed diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/static/jocondelab/img/flag_ca.png Binary file src/jocondelab/static/jocondelab/img/flag_ca.png has changed diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/static/jocondelab/img/flag_de.png Binary file src/jocondelab/static/jocondelab/img/flag_de.png has changed diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/static/jocondelab/img/flag_eu.png Binary file src/jocondelab/static/jocondelab/img/flag_eu.png has changed diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/static/jocondelab/img/flag_ja.png Binary file src/jocondelab/static/jocondelab/img/flag_ja.png has changed diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/static/jocondelab/img/flag_pt.png Binary file src/jocondelab/static/jocondelab/img/flag_pt.png has changed diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/static/jocondelab/img/flag_zh.png Binary file src/jocondelab/static/jocondelab/img/flag_zh.png has changed diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/static/jocondelab/js/front-geo.js --- a/src/jocondelab/static/jocondelab/js/front-geo.js Thu Aug 22 17:20:27 2013 +0200 +++ b/src/jocondelab/static/jocondelab/js/front-geo.js Fri Aug 23 15:18:43 2013 +0200 @@ -8,7 +8,7 @@ L.tileLayer( "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { - attribution: "Map data © OpenStreetMap contributors" + attribution: gettext("Map data © OpenStreetMap contributors") } ).addTo(map); @@ -29,13 +29,13 @@ }, function(data) { _(data).each(function(coord) { - if (coordIdCache.indexOf(coord.term_id) === -1) { - coordIdCache.push(coord.term_id); + if (coordIdCache.indexOf(coord.dbpedia_uri) === -1) { + coordIdCache.push(coord.dbpedia_uri); coordCache.push(coord); } }); coordCache = _(coordCache).sortBy(function(coord) { - return -coord.nb_notice; + return -coord.sum_notices; }); showData(); } @@ -43,7 +43,7 @@ showData(); } - var itemCount = 20; + var itemCount = 12; function selectCoord(coord) { _(coordCache).each(function(coord) { @@ -58,7 +58,7 @@ map.setView([coord.latitude, coord.longitude], Math.max(Math.min(12,map.getZoom() + 1),6)); $(".results").empty().load( - urls.ajax_contents_by_term + "?random=1&term_id=" + coord.term_id + urls.ajax_contents + "?random=1&dbpedia_uri=" + encodeURIComponent(coord.dbpedia_uri) ); } @@ -102,11 +102,11 @@ source: urls.ajax_geo_search, select: function(event, ui) { var coord = ui.item; - if (coordIdCache.indexOf(coord.term_id) === -1) { - coordIdCache.push(coord.term_id); + if (coordIdCache.indexOf(coord.dbpedia_uri) === -1) { + coordIdCache.push(coord.dbpedia_uri); coordCache.push(coord); coordCache = _(coordCache).sortBy(function(coord) { - return -coord.nb_notice; + return -coord.sum_notices; }); } selectCoord(coord); diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/static/jocondelab/js/front-timeline.js --- a/src/jocondelab/static/jocondelab/js/front-timeline.js Thu Aug 22 17:20:27 2013 +0200 +++ b/src/jocondelab/static/jocondelab/js/front-timeline.js Fri Aug 23 15:18:43 2013 +0200 @@ -40,8 +40,7 @@ } var itemTpl = _.template( - '
  • ' - + '
    " data-term-id="<%- item.term_id %>"' + '
  • "' + ' data-dbpedia-uri="<%- item.dbpedia_uri %>" style="left: <%- left %>px; width: <%- width %>px;">' + '
    <%- item.label %>
  • ' ); @@ -72,7 +71,7 @@ var l = Math.max(0, yrToX(item.start_year)), r = Math.min(cWidth, yrToX(item.end_year + 1)); return itemTpl({ - current: (item.term_id == currentTerm), + current: (item.dbpedia_uri == currentTerm), item: item, left: l, width: (r-l) @@ -82,11 +81,11 @@ bindDbpediaBox(".timeline-item-box"); $(".timeline-item-box").click(function() { var $this = $(this); - currentTerm = $this.attr("data-term-id") + currentTerm = $this.attr("data-dbpedia-uri") $(".timeline-item-box").removeClass("timeline-current"); $this.addClass("timeline-current"); $(".results").empty().load( - urls.ajax_contents_by_term + "?random=1&term_id=" + currentTerm + urls.ajax_contents + "?random=1&dbpedia_uri=" + encodeURIComponent(currentTerm) ); }) } @@ -100,8 +99,8 @@ }, function(data) { _(data).each(function(term) { - if (tlIdCache.indexOf(term.term_id) === -1) { - tlIdCache.push(term.term_id); + if (tlIdCache.indexOf(term.dbpedia_uri) === -1) { + tlIdCache.push(term.dbpedia_uri); tlCache.push(term); } }); diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/templates/jocondelab/ajax_contents.html --- a/src/jocondelab/templates/jocondelab/ajax_contents.html Thu Aug 22 17:20:27 2013 +0200 +++ b/src/jocondelab/templates/jocondelab/ajax_contents.html Fri Aug 23 15:18:43 2013 +0200 @@ -1,9 +1,6 @@ {% load i18n %} -

    {{count}} {% trans 'results for:' %} {{termlabel}}

    - +{% include 'jocondelab/partial/notice_list.html' %} diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/templates/jocondelab/front_notice.html --- a/src/jocondelab/templates/jocondelab/front_notice.html Thu Aug 22 17:20:27 2013 +0200 +++ b/src/jocondelab/templates/jocondelab/front_notice.html Fri Aug 23 15:18:43 2013 +0200 @@ -24,31 +24,31 @@ {% block title %}JocondeLab » {{title}}{% endblock %} -{% block breadcrumbs %}{{title|truncatechars:30}}{% endblock %} +{% block breadcrumbs %}{{title|truncatechars:30}}{% endblock %} {% block main %} - {% if notice.titr %} + {% if object.titr %} - + {% endif %} - {% if notice.deno %} - + {% if object.deno %} + - + {% endif %} {% for thesaurus, terms in terms_by_thesaurus.items %} @@ -65,34 +65,34 @@ {% endfor %} - {% if notice.desc %} + {% if object.desc %} - + {% endif %} - {% if notice.hist %} + {% if object.hist %} - + {% endif %} - {% if notice.loca %} + {% if object.loca %} - + {% endif %} - {% if notice.copy %} + {% if object.copy %} - + {% endif %} - {% if notice.phot %} + {% if object.phot %} - + {% endif %}
    {% trans 'Title:' %}{{notice.titr}}{{object.titr}}
    {% trans 'Denomination:' %}{{notice.deno}}{{object.deno}}
    {% trans 'Description:' %}{{notice.desc}}{{object.desc}}
    {% trans 'History:' %}{{notice.hist}}{{object.hist}}
    {% trans 'Conservation location:' %}{{notice.loca}}{{object.loca}}
    {% trans 'Datasheet rights:' %}{{notice.copy}}{{object.copy}}
    {% trans 'Images rights:' %}{{notice.phot}}{{object.phot}}
    diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/templates/jocondelab/front_search.html --- a/src/jocondelab/templates/jocondelab/front_search.html Thu Aug 22 17:20:27 2013 +0200 +++ b/src/jocondelab/templates/jocondelab/front_search.html Fri Aug 23 15:18:43 2013 +0200 @@ -32,9 +32,6 @@ {% endfor %} -

    {{rescount}} {% if queryterms %}{% trans 'results for:' %} {{queryterms}}{% else %}{% trans 'results' %}{% endif %}

    + {% include 'jocondelab/partial/notice_list.html' %} - {% endblock %} diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/templates/jocondelab/front_timeline.html --- a/src/jocondelab/templates/jocondelab/front_timeline.html Thu Aug 22 17:20:27 2013 +0200 +++ b/src/jocondelab/templates/jocondelab/front_timeline.html Fri Aug 23 15:18:43 2013 +0200 @@ -11,10 +11,9 @@ {{block.super}} diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/templates/jocondelab/partial/notice_list.html --- a/src/jocondelab/templates/jocondelab/partial/notice_list.html Thu Aug 22 17:20:27 2013 +0200 +++ b/src/jocondelab/templates/jocondelab/partial/notice_list.html Fri Aug 23 15:18:43 2013 +0200 @@ -1,4 +1,8 @@ {% load i18n %} + +

    {{count}} {% if searchterm %}{% trans 'results for:' %} {{searchterm}}{% else %}{% trans 'results' %}{% endif %}

    + + \ No newline at end of file diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/urls.py --- a/src/jocondelab/urls.py Thu Aug 22 17:20:27 2013 +0200 +++ b/src/jocondelab/urls.py Fri Aug 23 15:18:43 2013 +0200 @@ -35,10 +35,10 @@ url(r'^search/$', SearchView.as_view(), name='front_search'), url(r'^geo/$', TemplateView.as_view(template_name="jocondelab/front_geo.html"), name='front_geo'), url(r'^timeline/$', TemplateView.as_view(template_name="jocondelab/front_timeline.html"), name='front_timeline'), - url(r'^notice/(?P\d+)/$', NoticeView.as_view(), name='front_notice'), + url(r'^notice/(?P\d+)/$', NoticeView.as_view(), name='front_notice'), url(r'^ajax/years/$', 'jocondelab.views.ajax.years', name='ajax_years'), url(r'^ajax/geocoords/$', 'jocondelab.views.ajax.geo_coords', name='ajax_geo_coords'), url(r'^ajax/geosearch/$', 'jocondelab.views.ajax.geo_search', name='ajax_geo_search'), - url(r'^ajax/contents/$', 'jocondelab.views.ajax.contents_by_term', name='ajax_contents_by_term'), + url(r'^ajax/contents/$', 'jocondelab.views.ajax.contents', name='ajax_contents'), ) diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/views/ajax.py --- a/src/jocondelab/views/ajax.py Thu Aug 22 17:20:27 2013 +0200 +++ b/src/jocondelab/views/ajax.py Fri Aug 23 15:18:43 2013 +0200 @@ -10,46 +10,47 @@ import django.utils.simplejson as json from django.http import HttpResponse from django.template.response import TemplateResponse +from django.db.models import Sum from django.conf import settings from jocondelab.views.front_office import get_notices def years(request): - lang = request.GET.get('lang', request.LANGUAGE_CODE) + lang = request.GET.get('lang', request.LANGUAGE_CODE)[:2] from_year = request.GET.get('from_year', None) to_year = request.GET.get('to_year', None) count = request.GET.get('count', 20) - qs = DbpediaYears.objects.filter(term__dbpedia_fields__language_code=lang).order_by('-term__nb_notice') - + qs = DbpediaYears.objects.filter(term__dbpedia_fields__language_code=lang) if to_year: qs = qs.filter(start_year__lte=to_year) if from_year: qs = qs.filter(end_year__gte=from_year) + qs = qs.values('start_year','end_year','term__dbpedia_fields__label','term__dbpedia_uri') + qs = qs.annotate(sum_notices=Sum('term__nb_notice')).order_by('-sum_notices') qs = qs[:count] results = [{ - "start_year": y.start_year, - "end_year": y.end_year, - "term_id": y.term.id, - "label": y.term.dbpedia_fields.get(language_code=lang).label, - "nb_notice": y.term.nb_notice, - "dbpedia_uri": y.term.dbpedia_uri + "start_year": y["start_year"], + "end_year": y["end_year"], + "label": y["term__dbpedia_fields__label"], + "sum_notices": y["sum_notices"], + "dbpedia_uri": y["term__dbpedia_uri"] } for y in qs] return HttpResponse(content=json.dumps(results), mimetype='application/json') def geo_coords(request): - lang = request.GET.get('lang', request.LANGUAGE_CODE) + lang = request.GET.get('lang', request.LANGUAGE_CODE)[:2] min_lat = request.GET.get('min_lat', None) max_lat = request.GET.get('max_lat', None) min_lng = request.GET.get('min_lng', None) max_lng = request.GET.get('max_lng', None) count = request.GET.get('count', 20) - qs = DbpediaGeo.objects.filter(term__dbpedia_fields__language_code=lang).order_by('-term__nb_notice') + qs = DbpediaGeo.objects.filter(term__dbpedia_fields__language_code=lang) if min_lat: qs = qs.filter(latitude__gt=min_lat) @@ -60,43 +61,49 @@ if max_lng: qs = qs.filter(longitude__lt=max_lng) + qs = qs.values('latitude','longitude','term__dbpedia_fields__label','term__dbpedia_uri') + qs = qs.annotate(sum_notices=Sum('term__nb_notice')).order_by('-sum_notices') + qs = qs[:count] results = [{ - "latitude": y.latitude, - "longitude": y.longitude, - "term_id": y.term.id, - "label": y.term.dbpedia_fields.get(language_code=lang).label, - "nb_notice": y.term.nb_notice, - "dbpedia_uri": y.term.dbpedia_uri + "latitude": y["latitude"], + "longitude": y["longitude"], + "label": y["term__dbpedia_fields__label"], + "sum_notices": y["sum_notices"], + "dbpedia_uri": y["term__dbpedia_uri"] } for y in qs] return HttpResponse(content=json.dumps(results), mimetype='application/json') -def contents_by_term(request): +def contents(request): - lang = request.GET.get('lang', request.LANGUAGE_CODE) + lang = request.GET.get('lang', request.LANGUAGE_CODE)[:2] count = request.GET.get('count', 24) random = ("random" in request.GET and request.GET["random"]) format = request.GET.get('format', 'text/html') term_id = request.GET.get('term_id', None) + dbpedia_uri = request.GET.get('dbpedia_uri', None) - if term_id is None: - rescount = 0 - results = [] - termlabel = "" - else: - qs = Notice.objects.filter(noticeterm__term_id=term_id, image=True) - rescount = qs.count() - if random: - qs = qs.order_by('?') - results = get_notices(qs[:count], lang) + qs = Notice.objects.filter(image=True) + searchlabel = "" + termobj = None + if term_id: + qs = qs.filter(noticeterm__term_id=term_id) termobj = Term.objects.get(id=term_id) + if dbpedia_uri: + qs = qs.filter(noticeterm__term__dbpedia_uri=dbpedia_uri) + termobj = Term.objects.filter(dbpedia_uri=dbpedia_uri)[0] + rescount = qs.count() + if random: + qs = qs.order_by('?') + results = get_notices(qs[:count], lang) + if termobj: termtrans = termobj.dbpedia_fields.filter(language_code = lang) - termlabel = termtrans[0].label if termtrans.count() else termobj.label + searchlabel = termtrans[0].label if termtrans.count() else termobj.label context = { - "termlabel": termlabel, + "searchterm": searchlabel, "count": rescount, "notices": results } @@ -104,24 +111,29 @@ if format == 'text/html': return TemplateResponse(request, 'jocondelab/ajax_contents.html', context ) - return HttpResponse(content=json.dumps(context), mimetype='application/json') + if format == 'application/json': + return HttpResponse(content=json.dumps(context), mimetype='application/json') + + return HttpResponse(status=400, content='Unknown Format') def geo_search(request): - lang = request.GET.get('lang', request.LANGUAGE_CODE) + lang = request.GET.get('lang', request.LANGUAGE_CODE)[:2] q = request.GET.get('term', None) count = request.GET.get('count', 20) - qs = DbpediaGeo.objects.filter(term__dbpedia_fields__language_code=lang, term__dbpedia_fields__label__istartswith=q).order_by('term__dbpedia_fields__label')[:count] + qs = DbpediaGeo.objects.filter(term__dbpedia_fields__language_code=lang, term__dbpedia_fields__label__istartswith=q) + qs = qs.values('latitude','longitude','term__dbpedia_fields__label','term__dbpedia_uri') + qs = qs.annotate(sum_notices=Sum('term__nb_notice')).order_by('-sum_notices')[:count] results = [{ - "latitude": d.latitude, - "longitude": d.longitude, - "term_id": d.term.id, - "nb_notice": d.term.nb_notice, - "dbpedia_uri": d.term.dbpedia_uri, - "label": d.term.dbpedia_fields.get(language_code=lang).label - } for d in qs] + "latitude": y["latitude"], + "longitude": y["longitude"], + "label": y["term__dbpedia_fields__label"], + "sum_notices": y["sum_notices"], + "dbpedia_uri": y["term__dbpedia_uri"] + } for y in qs] + results.sort(key=lambda y: y["label"]) return HttpResponse(content=json.dumps(results), mimetype='application/json') \ No newline at end of file diff -r dc08f5692d80 -r 25636bb50756 src/jocondelab/views/front_office.py --- a/src/jocondelab/views/front_office.py Thu Aug 22 17:20:27 2013 +0200 +++ b/src/jocondelab/views/front_office.py Fri Aug 23 15:18:43 2013 +0200 @@ -8,7 +8,7 @@ from core.models import (Notice, Thesaurus, Term) from jocondelab.models import DbpediaFields from django.conf import settings -from django.views.generic import View +from django.views.generic import View, DetailView from django.views.generic.base import TemplateResponseMixin from django.db.models import Q, Count import re @@ -49,7 +49,7 @@ starttime = time.time() context = {} - lang = request.GET.get('lang',request.LANGUAGE_CODE) + lang = request.GET.get('lang',request.LANGUAGE_CODE)[:2] querystr = request.GET.get('q', "") search_in_title = request.GET.get('search_in_title', True) search_in_translations = request.GET.get('search_in_translations', True) @@ -79,9 +79,9 @@ ns = qs.order_by('?')[:npp] context["lang"] = lang - context["rescount"] = nbnotices + context["count"] = nbnotices context["notices"] = get_notices(ns, lang) - context["queryterms"] = querystr + context["searchterm"] = querystr wpp = 50 if show_tagcloud: @@ -108,23 +108,22 @@ return self.render_to_response(context) -class NoticeView(View, TemplateResponseMixin): +class NoticeView(DetailView): + model = Notice template_name = "jocondelab/front_notice.html" - def get(self, request, notice_id): + def get_context_data(self, **kwargs): - context = {} - lang = request.GET.get('lang',request.LANGUAGE_CODE) - - notice = Notice.objects.get(id=notice_id) + context = super(NoticeView, self).get_context_data(**kwargs) + lang = self.request.GET.get('lang',self.request.LANGUAGE_CODE)[:2] context["lang"] = lang - context["notice"] = notice - context["title"] = notice.titr if notice.titr else notice.deno - context["images"] = [i.url for i in notice.images.exclude(relative_url__endswith='v.jpg')] + context["images"] = [settings.JOCONDE_IMG_BASE_URL + i.url for i in self.object.images.exclude(relative_url__endswith='v.jpg')] + context["title"] = self.object.titr if self.object.titr else self.object.deno + terms = [] - for nt in notice.noticeterm_set.select_related('dbpedia_fields').all(): + for nt in self.object.noticeterm_set.select_related('term__dbpedia_fields').all(): translated_term = nt.term.dbpedia_fields.filter(language_code = lang) termdict = { "label": nt.term.label, @@ -142,10 +141,9 @@ "untranslated": [] } termsbythesaurus[term["thesaurus"]]["translated" if term["translated"] else "untranslated"].append(term) - + context["terms_by_thesaurus"] = termsbythesaurus - context['JOCONDE_IMG_BASE_URL'] = settings.JOCONDE_IMG_BASE_URL - return self.render_to_response(context) + return context \ No newline at end of file