# HG changeset patch # User cavaliet # Date 1394193984 -3600 # Node ID b62e3c1565d0f1338fe5b9c5a7bc546018255f8e # Parent 5669fe792a0b3744b66b9c69237b2be3b8e82b7b search chapters begins to work diff -r 5669fe792a0b -r b62e3c1565d0 src/spel/management/commands/loadspeldata.py --- a/src/spel/management/commands/loadspeldata.py Thu Mar 06 16:28:30 2014 +0100 +++ b/src/spel/management/commands/loadspeldata.py Fri Mar 07 13:06:24 2014 +0100 @@ -32,9 +32,7 @@ ''' args = 'folder containing folders containing json files' - help = 'Load users, medias, contents, project and guardian permissions from json file generated by dumpdata' - - + help = 'Load medias, contents and project from json files generated by ubicast' def __safe_get(self, dict_arg, key, conv = lambda x: x, default= None): @@ -211,6 +209,6 @@ print("Ignoring or not exist %s ..." % json_path) # This is the end - print("This is the end") + print("This is the end. DO NOT FORGET TO RUN THE COMMAND 'REINDEX -P' TO GENERATE SEGMENTS AND TAGS.") \ No newline at end of file diff -r 5669fe792a0b -r b62e3c1565d0 src/spel/static/spel/css/spel.css --- a/src/spel/static/spel/css/spel.css Thu Mar 06 16:28:30 2014 +0100 +++ b/src/spel/static/spel/css/spel.css Fri Mar 07 13:06:24 2014 +0100 @@ -12,4 +12,16 @@ } .width100percent{ width: 100%; +} + +/* loading background */ +.loader { + background: url(../img/loader.gif) center no-repeat; + background-size: 25px 25px; +} + +.chapter-results{ + border-top: 2px solid #BBBBBB; + margin-top: 10px; + padding-top: 10px; } \ No newline at end of file diff -r 5669fe792a0b -r b62e3c1565d0 src/spel/static/spel/img/loader.gif Binary file src/spel/static/spel/img/loader.gif has changed diff -r 5669fe792a0b -r b62e3c1565d0 src/spel/static/spel/js/spectacle.js --- a/src/spel/static/spel/js/spectacle.js Thu Mar 06 16:28:30 2014 +0100 +++ b/src/spel/static/spel/js/spectacle.js Fri Mar 07 13:06:24 2014 +0100 @@ -1,104 +1,135 @@ $(document).ready(function () { + + // Chapter multiselect management + $('.chapters .multiselect').multiselect({ + buttonText: function(options, select) { + return $(select).attr("data-title") + ' (' + options.length + ') '; + }, + onChange: function(element, checked) { + var filter_enabled = false; + var chbs = $(".chapters input:checkbox"); + for (var i = chbs.length - 1; i >= 0; i--) { + filter_enabled = filter_enabled || $(chbs[i]).is(":checked"); + }; + if(filter_enabled){ + $("#btn-filter-chapters").removeAttr('disabled'); + } + else{ + $("#btn-filter-chapters").attr('disabled','disabled'); + } + } + }); + // Annotations multiselect management + $('.annotations .multiselect').multiselect({ + buttonText: function(options, select) { + return $(select).attr("data-title") + ' (' + options.length + ') '; + }, + buttonContainer: '
', + buttonClass: 'btn btn-default width100percent disabled', + onChange: function(element, checked) { + var filter_enabled = false; + var chbs = $(".annotations input:checkbox"); + for (var i = chbs.length - 1; i >= 0; i--) { + filter_enabled = filter_enabled || $(chbs[i]).is(":checked"); + }; + if(filter_enabled){ + $("#btn-filter-annotations").removeAttr('disabled'); + } + else{ + $("#btn-filter-annotations").attr('disabled','disabled'); + } + } + }); - $('.chapters .multiselect').multiselect({ - buttonText: function(options, select) { - return $(select).attr("data-title") + ' (' + options.length + ') '; - }, - onChange: function(element, checked) { - var filter_enabled = false; - var chbs = $(".chapters input:checkbox"); - for (var i = chbs.length - 1; i >= 0; i--) { - filter_enabled = filter_enabled || $(chbs[i]).is(":checked"); - }; - if(filter_enabled){ - $("#btn-filter-chapters").removeAttr('disabled'); - } - else{ - $("#btn-filter-chapters").attr('disabled','disabled'); - } - } - }); - $('.annotations .multiselect').multiselect({ - buttonText: function(options, select) { - return $(select).attr("data-title") + ' (' + options.length + ') '; - }, - buttonContainer: '
', - buttonClass: 'btn btn-default width100percent disabled', - onChange: function(element, checked) { - var filter_enabled = false; - var chbs = $(".annotations input:checkbox"); - for (var i = chbs.length - 1; i >= 0; i--) { - filter_enabled = filter_enabled || $(chbs[i]).is(":checked"); - }; - if(filter_enabled){ - $("#btn-filter-annotations").removeAttr('disabled'); - } - else{ - $("#btn-filter-annotations").attr('disabled','disabled'); - } - } - }); - - // Data 1 - var data1 = [ - {label: "Performance", value: "performance"}, - {label: "Discussion", value: "discussion"} - ]; - $("#mulsel1").multiselect('dataprovider', data1); + // Data 1 + var data1 = [ + {label: "Performance", value: "performance"}, + {label: "Discussion", value: "discussion"} + ]; + $("#mulsel1").multiselect('dataprovider', data1); + + // Data 2 : modalités scéniques + $.ajax({ + url: urlMS + }) + .done(function( data ) { + var o = data.objects; + var n = data.objects.length; + var data2 = []; + for(var i=0;iVous devez sélectionner au moins un filtre

"); + return false; + } + $(".chapter-results").html("

"); + $(".chapter-results").addClass("loader"); + $.ajax({ + url: urlChapters, + data:{ + annotation_types: ( ($("#mulsel1").val()==null) ? [] : $("#mulsel1").val() ).join(","), + modalites_sceniques: ( ($("#mulsel2").val()==null) ? [] : $("#mulsel2").val() ).join(","), + personnages: ( ($("#mulsel3").val()==null) ? [] : $("#mulsel3").val() ).join(",") + } + }) + .done(function( html ) { + $(".chapter-results").removeClass("loader"); + $(".chapter-results").html(html); + }); + }); + + + // Search annotations management + $("#btn-search-annotations").click(function(e){ + e.preventDefault(); + }); + + }); diff -r 5669fe792a0b -r b62e3c1565d0 src/spel/templates/partial/spel_chapters.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/spel/templates/partial/spel_chapters.html Fri Mar 07 13:06:24 2014 +0100 @@ -0,0 +1,10 @@ +{% load static %} +{% load front_tags %} +{% load spel_tags %} +

{{ segments|length }} segment(s) trouvés

+ + + {% for s in segments %} + + {% endfor %} +
TypeRef textedébut - fin
{{ s.cutting_id }}{{ s.tags|get_tags:"ref_text_2" }}{{ s.start_ts|str_duration }} - {{ s.start_ts|add:s.duration|str_duration }}
diff -r 5669fe792a0b -r b62e3c1565d0 src/spel/templates/spel_spectacle.html --- a/src/spel/templates/spel_spectacle.html Thu Mar 06 16:28:30 2014 +0100 +++ b/src/spel/templates/spel_spectacle.html Fri Mar 07 13:06:24 2014 +0100 @@ -34,6 +34,7 @@
+

ANNOTATIONS

@@ -50,7 +51,7 @@
-
@@ -67,5 +68,7 @@ {% endblock %} diff -r 5669fe792a0b -r b62e3c1565d0 src/spel/templatetags/__init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/spel/templatetags/__init__.py Fri Mar 07 13:06:24 2014 +0100 @@ -0,0 +1,1 @@ + diff -r 5669fe792a0b -r b62e3c1565d0 src/spel/templatetags/spel_tags.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/spel/templatetags/spel_tags.py Fri Mar 07 13:06:24 2014 +0100 @@ -0,0 +1,38 @@ +from django.template import Library, TemplateSyntaxError + +register = Library() + +import logging +logger = logging.getLogger(__name__) + +@register.filter +def get_tags(value, arg=None): + """ Takes a segment's tag list and returns an array of values from argument. Example seg_obj|get_tags:"personnages" will return "Romeo, Juliette" """ + # Error management + if value is None : + return "" + if not isinstance(value, (str,unicode)) : + raise TemplateSyntaxError('get_tags value error : string is required') + # If no arg, we join all values + a = value.split(u",") + val = [] + if arg is None : + for t in a: + val.append(t[t.index(":")+2:]) + elif arg=="ref_text_2": + logger.debug("ICI 1") + for t in a: + logger.debug("ICI 2") + if t[:t.index(":")]=="ref_text": + logger.debug("ICI 3") + tag_split = t.split(":") + if len(tag_split)>2: + logger.debug("ICI 4") + val.append( ":".join(tag_split[2:]) ) + else: + logger.debug("ICI 5") + val.append(t[t.index(":")+2:]) + + return ", ".join(val) +get_tags.is_safe = True + diff -r 5669fe792a0b -r b62e3c1565d0 src/spel/urls.py --- a/src/spel/urls.py Thu Mar 06 16:28:30 2014 +0100 +++ b/src/spel/urls.py Fri Mar 07 13:06:24 2014 +0100 @@ -6,6 +6,7 @@ from django.views.generic import RedirectView, TemplateView from ldt.auth.views import login as pf_login from ldt.text import VERSION_STR +from .views import ChapterRequest #from django.conf import settings @@ -44,6 +45,7 @@ (r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict), url(r'^$', TemplateView.as_view(template_name="spel_home.html"), name='spel_home'), url(r'^spectacle$', TemplateView.as_view(template_name="spel_spectacle.html"), name='spel_spectacle'), + url(r'^chapters$', ChapterRequest.as_view(), name='spel_chapters'), ) urlpatterns += staticfiles_urlpatterns() diff -r 5669fe792a0b -r b62e3c1565d0 src/spel/views.py --- a/src/spel/views.py Thu Mar 06 16:28:30 2014 +0100 +++ b/src/spel/views.py Fri Mar 07 13:06:24 2014 +0100 @@ -4,23 +4,13 @@ @author: tcavalie ''' -import json -import logging -import math -import random - from django.conf import settings -from django.core.cache import cache -from django.db.models import Q, Sum -from django.db.models.query import EmptyQuerySet -from django.shortcuts import redirect -from django.utils.http import urlencode -from django.utils.translation import ugettext -from django.views.generic import DetailView, TemplateView -from haystack.query import SearchQuerySet -from unidecode import unidecode +from django.views.generic import TemplateView +from tagging.models import Tag, TaggedItem +from ldt.ldt_utils.models import Segment +import logging logger = logging.getLogger(__name__) @@ -35,4 +25,43 @@ return self.render_to_response(context) + +class ChapterRequest(TemplateView): + + template_name = "partial/spel_chapters.html" + + def get(self, request): + + # First we look at modalites_sceniques and personnages tags. + mod_scen_param = request.GET.get("modalites_sceniques", "") + mod_scen = [] + if mod_scen_param!="": + mod_scen = mod_scen_param.split(",") + perso_param = request.GET.get("personnages", "") + perso = [] + if perso_param!="": + perso = perso_param.split(",") + + # Get tags from orm + all_tags = mod_scen + perso + tags = Tag.objects.filter(name__in=all_tags) + # Get segments from tagged items + #TaggedItem.objects.get_by_model(segment_queryset, tags) + s = TaggedItem.objects.get_by_model(Segment, tags) + + + logger.debug("COUCOU") + #logger.debug(mod_scen_param) + #logger.debug(perso_param) + #logger.debug(mod_scen) + #logger.debug(perso) + #logger.debug(tags) + #logger.debug(s) + + #request.GET.get("annotation_types", "") + + context = {"segments": s, "annotation_types": [], "tags": mod_scen+perso } + + return self.render_to_response(context) + \ No newline at end of file