Prepare front for Senseetive api.
authorcavaliet
Mon, 04 Mar 2013 17:40:57 +0100
changeset 85 4d320fbfc550
parent 84 b2fbd34b259c
child 86 5e1eb389036a
Prepare front for Senseetive api.
src/egonomy/admin.py
src/egonomy/static/egonomy/css/egonomy.css
src/egonomy/static/egonomy/js/cutout.js
src/egonomy/templates/egonomy_create_fragment.html
src/egonomy/urls.py
src/egonomy/views.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)
--- 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;
--- 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;
--- 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 = '<span id="add_senseetive_tags">';
+		                    			for(var i=0;i<n;i++){
+		                    			    s += '<span class="clickable addable_tag">' + data[i] + '</span>';
+		                    			    if(i<(n-1)) s += ', ';
+		                    			}
+		                    			s += '</span><br/><span id="senseetive_tags" class="right clickable">+ {% trans 'Add all Senseetive keywords to yours' %}</span>';
+		                    			$("#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("<strong>ERROR</strong> : " + jqXHR.responseText);
+	                            }
+	                    	});
+                    	}
+                    });
+                }
            	};
            	function addTags(tags){
                 nt = tags.length;
@@ -140,6 +191,10 @@
 	                                    <br/><span id="add_pertimm_thesaurus" class="right clickable">+ {% trans 'Add all Pertimm thesaurus keywords to yours' %}</span></td>
 	                            </tr>
                                 {% endif %}
+                                <tr>
+                                    <th>{% trans "Senseetive keywords" %}&nbsp;:</th>
+                                    <td id="senseetive_holder"><p id="senseetive_click" class="add-button-grey">{% trans 'Request keywords from Senseetive API' %}</p></td>
+                                </tr>
                             </table>
                             <div class="fullwidth">
                                 <input class="user-submit" type="submit" value="{% trans 'Save the fragment' %}" />
--- 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<username>.*)/$', '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')),
--- 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))))
+
+
+