# HG changeset patch
# User cavaliet
# Date 1395237511 -3600
# Node ID 3fdccf07adaf3bd076255f51cdd7d1d5b1db4e8b
# Parent 0c292c3abf646dbcd5fd62cecfb42a273d29f3a8
annotations : remove tag by click
diff -r 0c292c3abf64 -r 3fdccf07adaf src/spel/management/commands/loadspeldata.py
--- a/src/spel/management/commands/loadspeldata.py Wed Mar 19 12:38:06 2014 +0100
+++ b/src/spel/management/commands/loadspeldata.py Wed Mar 19 14:58:31 2014 +0100
@@ -75,7 +75,7 @@
if do_import:
print("Parsing folder %s ..." % path)
for f in listdir(path):
- json_path = join(path,f,"cinelab.json")
+ json_path = join(path,f,"cinelab_iri.json")
if isfile(json_path):
print("Parsing json file %s ..." % json_path)
json_data = False
diff -r 0c292c3abf64 -r 3fdccf07adaf src/spel/static/spel/css/spel.css
--- a/src/spel/static/spel/css/spel.css Wed Mar 19 12:38:06 2014 +0100
+++ b/src/spel/static/spel/css/spel.css Wed Mar 19 14:58:31 2014 +0100
@@ -55,4 +55,12 @@
}
.annot-tag{
background-color: #FFF;
+}
+.searched-tag{
+ background-color: #EEE;
+ margin-right: 5px;
+}
+.searched-tag .glyphicon-remove:hover{
+ color: #FFF;
+ cursor: pointer;
}
\ No newline at end of file
diff -r 0c292c3abf64 -r 3fdccf07adaf src/spel/static/spel/js/spectacle.js
--- a/src/spel/static/spel/js/spectacle.js Wed Mar 19 12:38:06 2014 +0100
+++ b/src/spel/static/spel/js/spectacle.js Wed Mar 19 14:58:31 2014 +0100
@@ -176,6 +176,9 @@
.done(function(html){
$(".annotation-results").removeClass("loader");
$(".annotation-results").html(html);
+ if($('#search-input').val() && $('#search-input').val()!=""){
+ $("#btn-filter-annotations").click();
+ }
})
.fail(function() {
$(".annotation-results").removeClass("loader");
@@ -189,18 +192,15 @@
$(".annotation-results").html("
Vous devez indiquer un terme pour la recherche.
");
return false;
}
- $('option', $('#mulsel4')).each(function(element) {
- $(this).removeAttr('selected').prop('selected', false);
- });
- $('#mulsel4').multiselect('refresh');
+ console.log("ICI 1");
searchAnnotations();
});
$("#btn-filter-annotations").click(function(e){
if($("#mulsel4").val() && $("#mulsel4").val()!=""){
+ var filters = $("#mulsel4").val();
+ var nb_filters = filters.length;
if($('#search-input').val()!=""){
- var filters = $("#mulsel4").val();
- var nb_filters = filters.length;
$( ".searched-annot" ).each(function(index){
var type_inter = $(this).attr("data-type-inter").split(", ");
var found = true;
@@ -213,6 +213,7 @@
});
}
else{
+ console.log("ICI 2");
searchAnnotations();
}
}
@@ -221,7 +222,41 @@
$(this).show();
});
}
+ // We display the clickable/removable tags.
+ // First we remove all childs but the searched-term one
+ if($(".annot-tag-list").children().first().children().first().hasClass("glyphicon-search")){
+ $(".annot-tag-list").find("li:gt(0)").remove();
+ }
+ else{
+ $(".annot-tag-list").children().remove();
+ }
+ if($("#mulsel4").val() && $("#mulsel4").val()!=""){
+ var filters = $("#mulsel4").val();
+ var nb_filters = filters.length;
+ for(var i=0;i' + filters[i] + ' ');
+ }
+ }
+ }
+ // Update number displayed
$(".nb-annotations-found").html($('.annotation-results > div:visible').length);
});
+
+ // click-to-remove-tag management
+ $(".annotation-results").on("click", ".annot-tag-list .glyphicon-remove", function(){
+ console.log(this, $(this).parent().text().trim());
+ if($(this).parent().children().first().hasClass("glyphicon-search")){
+ $("#search-input").val("");
+ }
+ else{
+ $("#mulsel4").multiselect('deselect', $(this).parent().text().trim());
+ }
+ $("#btn-filter-annotations").click();
+ // manage when nothing is selected
+ if($(".annot-tag-list").children().length==0){
+ $(".annotation-results").html('');
+ }
+ });
});
diff -r 0c292c3abf64 -r 3fdccf07adaf src/spel/templates/partial/spel_annotations.html
--- a/src/spel/templates/partial/spel_annotations.html Wed Mar 19 12:38:06 2014 +0100
+++ b/src/spel/templates/partial/spel_annotations.html Wed Mar 19 14:58:31 2014 +0100
@@ -1,6 +1,10 @@
{% load static %}
{% load front_tags %}
{% load spel_tags %}
+
+ {% if q != "" %}- : {{ q }}
{% endif %}
+ {% for t in searched_tags %}{% if t != "" %}- {{ t }}
{% endif %}{% endfor %}
+
{{ nb_annotations }} annotation(s) trouvée(s) sur {{ nb_contents }} vidéo(s)
{% for res in results %}
{% for s in res.list %}
@@ -12,9 +16,10 @@
{{ s.tags|get_tags:"ref_text"|join:', ' }}
{% if s.title != "" %}{{ s.title }} : {% endif %}{{ s.abstract }}
- {% for ttt in tag_list %}
- - {{ ttt }}
+ {% for t in tag_list %}
+ - {{ t }}
{% endfor %}
+
{% endwith %}
{% endfor %}
diff -r 0c292c3abf64 -r 3fdccf07adaf src/spel/views.py
--- a/src/spel/views.py Wed Mar 19 12:38:06 2014 +0100
+++ b/src/spel/views.py Wed Mar 19 14:58:31 2014 +0100
@@ -98,43 +98,34 @@
q = request.GET.get("q", "")
page = 1
content_list = None
- # Query search
if q!="":
field = "abstract"
results, nb_contents, nb_segments = get_search_results(request, q, field, page, content_list)
results = results.object_list
+ type_inter_param = ""
else:
- results = None
- nb_contents = 0
- nb_segments = 0
- # Filter by tags
- type_inter_param = request.GET.get("type_inter", "")
- if type_inter_param!="":
- type_inter = [("type_inter: " + t) for t in type_inter_param.split(",")]
- tags = Tag.objects.filter(name__in=type_inter)
- # If results are from search, we get all segment from content list
- seg_queryset = Segment
- if results :
- seg_queryset = []
- for r in results:
- seg_queryset += r["list"]
- seg_queryset = Segment.objects.filter(id__in=[s.id for s in seg_queryset])
- # Get segments from tagged items
- tagged_segs = TaggedItem.objects.get_by_model(seg_queryset, tags).values()
- # Prefetch all contents
- all_contents = Content.objects.filter(iri_id__in=[s['iri_id'] for s in tagged_segs])
+ type_inter_param = request.GET.get("type_inter", "")
+ seg_queryset = []
results = []
- for iri_id, items in groupby(tagged_segs, itemgetter('iri_id')):
- # Get good content
- content = None
- content_filter = filter(lambda e: e.iri_id == iri_id, all_contents)
- if len(content_filter)>0:
- content = content_filter[0]
- if content is None:
- continue
- # Get segments
- s = list(items)
- results.append({ 'content': content, 'list': s })
+ tagged_segs = []
+ if type_inter_param!="":
+ type_inter = [("type_inter: " + t) for t in type_inter_param.split(",")]
+ tags = Tag.objects.filter(name__in=type_inter)
+ # Get segments from tagged items
+ tagged_segs = TaggedItem.objects.get_by_model(Segment, tags).values()
+ # Prefetch all contents
+ all_contents = Content.objects.filter(iri_id__in=[s['iri_id'] for s in tagged_segs])
+ for iri_id, items in groupby(tagged_segs, itemgetter('iri_id')):
+ # Get good content
+ content = None
+ content_filter = filter(lambda e: e.iri_id == iri_id, all_contents)
+ if len(content_filter)>0:
+ content = content_filter[0]
+ if content is None:
+ continue
+ # Get segments
+ s = list(items)
+ results.append({ 'content': content, 'list': s })
nb_contents = len(results)
nb_segments = len(tagged_segs)