first step for keywords and images tabs in senseetive api response.
--- a/src/egonomy/templates/egonomy_create_fragment.html Tue Mar 19 18:01:51 2013 +0100
+++ b/src/egonomy/templates/egonomy_create_fragment.html Wed Apr 10 18:01:16 2013 +0200
@@ -33,22 +33,38 @@
data: data_obj,
dataType: "json",
success: function(data, status, request){
- var n = data.length;
+ var keywords = data["keywords"];
+ var n = keywords.length;
if(n>0){
- s = '<span id="add_senseetive_tags">';
+ s = '<div id="tabs" style="height: 320px;"><ul><li><a href="#tabs-1">Mots-clés</a></li><li><a href="#tabs-2">Images</a></li></ul>'
+ + '<div id="tabs-1" style="overflow-y: scroll; overflow-x: hidden; height: 250px;">'
+ + '<ul 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 += '<li><span class="clickable addable_tag">' + keywords[i] + '</span></li>';
}
- s += '</span><br/><span id="senseetive_tags" class="right clickable">+ {% trans 'Add all Senseetive keywords to yours' %}</span>';
+ s += '</ul><span id="senseetive_tags" class="right clickable">+ {% trans 'Add all Senseetive keywords to yours' %}</span>'
+ +'</div><div id="tabs-2" style="overflow-y: scroll; overflow-x: hidden; height: 250px;">'
+ +'<ul>';
+ // Add pictures
+ var images = data["images"];
+ var n = images.length;
+ for(var i=0;i<n;i++){
+ s += '<li><img src="' + images[i].url + '" alt="' + images[i].title + '"/> ' + images[i].title + '</li>';
+ }
+ s += '</ul>'
+ +'</div></div>';
$("#senseetive_holder").html(s);
+ // Init tabs
+ $("#tabs").tabs();
// 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(', '));
+ $(".addable_tag").each(function() {
+ addTags([this.textContent]);
+ });
});
}
},
--- a/src/egonomy/views.py Tue Mar 19 18:01:51 2013 +0100
+++ b/src/egonomy/views.py Wed Apr 10 18:01:16 2013 +0200
@@ -8,12 +8,12 @@
from django.shortcuts import get_object_or_404, render_to_response, redirect
from django.template import RequestContext
from django.utils.translation import ugettext as _
-from egonomy.models import ImageMetadata, Image, Fragment
+from egonomy.models import ImageMetadata, Image, Fragment, ImageInfo
from egonomy.search_indexes import QueryParser
from egonomy.search_indexes.paginator import SearchPaginator
from egonomy.search_indexes.query import ModelRelatedSearchQuerySet
from haystack.query import RelatedSearchQuerySet
-from sorl.thumbnail import default
+from sorl.thumbnail import default, get_thumbnail
from sorl.thumbnail.images import ImageFile
from unicodedata import normalize
import json
@@ -309,17 +309,32 @@
# We get the content list
contents = resp["contentlist"]
keywords = {}
+ images_data = []
for c in contents:
# For each content's keyword, we associate or add its score.
score = c["contentimagelist"][0]["score"]
- for kw in c["keywordlist"]:
+ kwl = c["keywordlist"]
+ for kw in kwl:
kw = normalize('NFC',kw)
if kw in keywords:
keywords[kw] = keywords[kw] + score
else:
keywords[kw] = score
+ # We add the image and its metadatas in the images list. We take the id from the filename "id.jpg".
+ images_data.append({"id":c["contentimagelist"][0]["filename"][:-4], "url":"", "keywords":kwl, "title":c["title"]})
+ # We generate the thumbnail and add its url for each picture
+ images = ImageInfo.objects.filter(id__in=[i["id"] for i in images_data])
+ for i in images_data:
+ # We allow ourselves to loop in a loop because we know images_data has only 10 entries.
+ for img in images:
+ if img.id==i["id"]:
+ # Get the thumbnail
+ thumb = get_thumbnail(img.image_file, '100', format='PNG', crop='center', quality=99)
+ i["url"] = thumb.url
+ break
+
# We sort the keywords by descending score
keywords = sorted(keywords, key=keywords.get, reverse=True)
- return HttpResponse(json.dumps(keywords))
+ return HttpResponse(json.dumps({"keywords":keywords, "images":images_data}), content_type="application/json")