# 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
+
+ | Type | Ref texte | début - fin |
+ {% for s in segments %}
+ | {{ s.cutting_id }} | {{ s.tags|get_tags:"ref_text_2" }} | {{ s.start_ts|str_duration }} - {{ s.start_ts|add:s.duration|str_duration }} |
+ {% endfor %}
+
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