# HG changeset patch # User cavaliet # Date 1362415257 -3600 # Node ID 4d320fbfc5503d593cf0322554a4b5cadf191a54 # Parent b2fbd34b259c918dd988acbe129fb4084a8a45d2 Prepare front for Senseetive api. diff -r b2fbd34b259c -r 4d320fbfc550 src/egonomy/admin.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/egonomy/admin.py Mon Mar 04 17:40:57 2013 +0100 @@ -0,0 +1,7 @@ +from django.contrib import admin +from egonomy.models import Image, ImageInfo, ImageMetadata, Fragment + +admin.site.register(Image) +admin.site.register(ImageInfo) +admin.site.register(ImageMetadata) +admin.site.register(Fragment) diff -r b2fbd34b259c -r 4d320fbfc550 src/egonomy/static/egonomy/css/egonomy.css --- a/src/egonomy/static/egonomy/css/egonomy.css Mon Mar 04 15:29:30 2013 +0100 +++ b/src/egonomy/static/egonomy/css/egonomy.css Mon Mar 04 17:40:57 2013 +0100 @@ -328,6 +328,10 @@ background: #D0E0FF; margin: 5px 0; padding: 6px; border-radius: 4px; color: #003366; font-weight: bold; font-size: 13px; float: left; } +.add-button-grey { + background: #AAAAAA; margin: 5px 0; padding: 6px; border-radius: 4px; color: #555555; + font-weight: bold; font-size: 13px; float: left; +} .big-button { background: #D0E0FF; margin: 10px 0 10px 16px; padding: 8px; border-radius: 4px; color: #003366; diff -r b2fbd34b259c -r 4d320fbfc550 src/egonomy/static/egonomy/js/cutout.js --- a/src/egonomy/static/egonomy/js/cutout.js Mon Mar 04 15:29:30 2013 +0100 +++ b/src/egonomy/static/egonomy/js/cutout.js Mon Mar 04 17:40:57 2013 +0100 @@ -178,7 +178,7 @@ var transd = "M" + points.map(function(p) { return (p.x / paper.width).toString().replace(/(\.\d{4})\d*/,"$1") + " " + (p.y / paper.height).toString().replace(/(\.\d{4})\d*/,"$1") }).join("L") + "Z"; - $(".fragment-path").val(transd); + $(".fragment-path").val(transd).change(); } var dragdeltax, dragdeltay, pathDragging; diff -r b2fbd34b259c -r 4d320fbfc550 src/egonomy/templates/egonomy_create_fragment.html --- a/src/egonomy/templates/egonomy_create_fragment.html Mon Mar 04 15:29:30 2013 +0100 +++ b/src/egonomy/templates/egonomy_create_fragment.html Mon Mar 04 17:40:57 2013 +0100 @@ -42,9 +42,17 @@ addTags($("#pertimm_thesaurus_tags").text().split(', ')); }); } - // Function to add one tag - $(".addable_tag").click(function() { - addTags([$(this).text()]) + // Check if path is not empty ("" or "MZ") + $(".fragment-path").change(function() { + var v = $(".fragment-path").val(); + if(v!="" && v!="MZ"){ + $("#senseetive_click").removeClass("add-button-grey"); + $("#senseetive_click").addClass("clickable add-button"); + } + else{ + $("#senseetive_click").addClass("add-button-grey"); + $("#senseetive_click").removeClass("clickable add-button"); + } }); // Init tagit autocomplete with tags from various sources autocomplete_tags = $("#rmn_tags").text().split(', '); @@ -52,6 +60,49 @@ autocomplete_tags = autocomplete_tags.concat($("#pertimm_description_tags").text().split(', ')); autocomplete_tags = autocomplete_tags.concat($("#pertimm_thesaurus_tags").text().split(', ')); $('#user_keywords').tagit({availableTags: autocomplete_tags, allowSpaces: true}); + + // Function to add one tag + $(".addable_tag").click(function() { + addTags([$(this).text()]); + }); + + // Init senseetive api request + if($("#senseetive_click")){ + $("#senseetive_click").click(function() { + var v = $(".fragment-path").val(); + if(v!="" && v!="MZ"){ + var data_obj = { "image":"{{ img.id }}", "path":$("#fragment_path").val() }; + $.ajax({ + url: '{% url "senseetive_api" %}', + data: data_obj, + dataType: "json", + success: function(data, status, request){ + var n = data.length; + if(n>0){ + s = ''; + for(var i=0;i'; + if(i<(n-1)) s += ', '; + } + s += '
+ {% trans 'Add all Senseetive keywords to yours' %}'; + $("#senseetive_holder").html(s); + // Function to add one tag + $("#senseetive_holder .addable_tag").click(function() { + addTags([$(this).text()]); + }); + // Functions to add all tags from senseetive + $("#senseetive_tags").click(function() { + addTags($("#add_senseetive_tags").text().split(', ')); + }); + } + }, + error: function(jqXHR, textStatus, errorThrown) { + $("#senseetive_holder").html("ERROR : " + jqXHR.responseText); + } + }); + } + }); + } }; function addTags(tags){ nt = tags.length; @@ -140,6 +191,10 @@
+ {% trans 'Add all Pertimm thesaurus keywords to yours' %} {% endif %} + + {% trans "Senseetive keywords" %} : +

{% trans 'Request keywords from Senseetive API' %}

+
diff -r b2fbd34b259c -r 4d320fbfc550 src/egonomy/urls.py --- a/src/egonomy/urls.py Mon Mar 04 15:29:30 2013 +0100 +++ b/src/egonomy/urls.py Mon Mar 04 17:40:57 2013 +0100 @@ -17,6 +17,7 @@ url(r'^allpictures/$', 'egonomy.views.all_pictures', name='all_pictures'), url(r'^allfragments/$', 'egonomy.views.all_fragments', name='all_fragments'), url(r'^userfragments/(?P.*)/$', 'egonomy.views.user_fragments', name='user_fragments'), + url(r'^senseetiveapi/$', 'egonomy.views.senseetive_api', name='senseetive_api'), # Uncomment the admin/doc line below to enable admin documentation: url(r'^admin/doc/', include('django.contrib.admindocs.urls')), diff -r b2fbd34b259c -r 4d320fbfc550 src/egonomy/views.py --- a/src/egonomy/views.py Mon Mar 04 15:29:30 2013 +0100 +++ b/src/egonomy/views.py Mon Mar 04 17:40:57 2013 +0100 @@ -4,7 +4,7 @@ from django.core.paginator import Paginator, InvalidPage, EmptyPage from django.core.urlresolvers import reverse from django.db.models.aggregates import Max -from django.http.response import HttpResponseForbidden +from django.http.response import HttpResponseForbidden, HttpResponse from django.shortcuts import get_object_or_404, render_to_response, redirect from django.template import RequestContext from django.utils.translation import ugettext as _ @@ -13,8 +13,9 @@ from egonomy.search_indexes.paginator import SearchPaginator from egonomy.search_indexes.query import ModelRelatedSearchQuerySet from haystack.query import RelatedSearchQuerySet +import json + import logging - logger = logging.getLogger(__name__) @@ -213,3 +214,26 @@ +def senseetive_api(request): + + # Get the cur_page_nb number parameter if possible + image_id = request.GET.get("image") or None + frg_path = request.GET.get("path") or "MZ" + if not image_id or frg_path=="MZ": + return HttpResponseForbidden("The request needs an image and a not null path parameters.") + # This is a TEMPORARY algorithm. In the future, this function build a picture from the fragment and will request the senseetive api + img = get_object_or_404(Image.objects.select_related('info', 'metadata'), id=image_id) + frg_list = Fragment.objects.filter(image=img) + tag_list = [] + for frg in frg_list: + tags = frg.tags.split(",") + for t in tags: + t = t.strip() + if t != "": + logger.debug(t) + tag_list.append(t) + + return HttpResponse(json.dumps(sorted(set(tag_list)))) + + +