--- 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
--- 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
Binary file src/spel/static/spel/img/loader.gif has changed
--- 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 + ') <b class="caret"></b>';
+ },
+ 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 + ') <b class="caret"></b>';
+ },
+ buttonContainer: '<div class="btn-group width100percent" />',
+ 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 + ') <b class="caret"></b>';
- },
- 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 + ') <b class="caret"></b>';
- },
- buttonContainer: '<div class="btn-group width100percent" />',
- 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;i<n;i++){
+ data2.push({label: o[i].name.substr(21), value: o[i].name})
+ }
+ $("#mulsel2").multiselect('dataprovider', data2);
+ $("#mulsel2").multiselect('enable');
+ });
- // 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;i<n;i++){
- data2.push({label: o[i].name.substr(21), value: o[i].name})
- }
- $("#mulsel2").multiselect('dataprovider', data2);
- $("#mulsel2").multiselect('enable');
- });
-
- // Data 3 : Personnages
- $.ajax({
- url: urlP
- })
- .done(function( data ) {
- var o = data.objects;
- var n = data.objects.length;
- var data3 = [];
- for(var i=0;i<n;i++){
- data3.push({label: o[i].name.substr(12), value: o[i].name})
- }
- $("#mulsel3").multiselect('dataprovider', data3);
- $("#mulsel3").multiselect('enable');
- });
+ // Data 3 : Personnages
+ $.ajax({
+ url: urlP
+ })
+ .done(function( data ) {
+ var o = data.objects;
+ var n = data.objects.length;
+ var data3 = [];
+ for(var i=0;i<n;i++){
+ data3.push({label: o[i].name.substr(12), value: o[i].name})
+ }
+ $("#mulsel3").multiselect('dataprovider', data3);
+ $("#mulsel3").multiselect('enable');
+ });
- // Annotations :
- $("#mulsel4").multiselect('disable');
- $(document).on('input', "#search-input", function(){
- if($(this).val()!=""){
- $("#btn-search-annotations").removeAttr('disabled');
- }
- else{
- $("#btn-search-annotations").attr('disabled','disabled');
- }
- });
+ // Data 4 : type interventions
+ $.ajax({
+ url: urlTI
+ })
+ .done(function( data ) {
+ var o = data.objects;
+ var n = data.objects.length;
+ var data4 = [];
+ for(var i=0;i<n;i++){
+ data4.push({label: o[i].name.substr(11), value: o[i].name})
+ }
+ $("#mulsel4").multiselect('dataprovider', data4);
+ $("#mulsel4").multiselect('enable');
+ });
+ $(document).on('input', "#search-input", function(){
+ if($(this).val()!=""){
+ $("#btn-search-annotations").removeAttr('disabled');
+ }
+ else{
+ $("#btn-search-annotations").attr('disabled','disabled');
+ }
+ });
- $("#btn-search-annotations").click(function(e){
- e.preventDefault();
- var data4 = [
- {label: "Intervention MES", value: "Intervention MES"},
- {label: "Filage de la scène", value: "Filage de la scène"},
- {label: "Parole à l'acteur/actrice", value: "Parole à l'acteur/actrice"},
- {label: "Interprétation du texte", value: "Interprétation du texte"},
- {label: "Décision", value: "Décision"}
- ];
- $("#mulsel4").multiselect('dataprovider', data4);
- $("#mulsel4").multiselect('enable');
- });
+ // Search chapters management
+ $("#btn-filter-chapters").click(function(e){
+ if($("#mulsel1").val()==null && $("#mulsel2").val()==null && $("#mulsel3").val()==null){
+ $(".chapter-results").html("<p>Vous devez sélectionner au moins un filtre</p>");
+ return false;
+ }
+ $(".chapter-results").html("<br/><br/>");
+ $(".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();
+ });
+
+
});
--- /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 %}
+<p>{{ segments|length }} segment(s) trouvés</p>
+<table class="table table-striped table-condensed">
+ <tr><th>Type</th><th>Ref texte</th><th>début - fin</th></tr>
+ {% for s in segments %}
+ <tr><td>{{ s.cutting_id }}</td><td>{{ s.tags|get_tags:"ref_text_2" }}</td><td>{{ s.start_ts|str_duration }} - {{ s.start_ts|add:s.duration|str_duration }}</td></tr>
+ {% endfor %}
+</table>
--- 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 @@
<div class="row text-center">
<button id="btn-filter-chapters" class="btn btn-success" disabled="disabled">FILTRER</button>
</div>
+ <div class="chapter-results"></div>
</div>
<div class="col-md-6 annotations">
<h4 class="text-center">ANNOTATIONS</h4>
@@ -50,7 +51,7 @@
</div>
</form>
<div class="col-md-8 col-md-offset-1">
- <select id="mulsel4" class="multiselect" multiple="multiple" data-title="Catégories d'annotations">
+ <select id="mulsel4" class="multiselect" multiple="multiple" data-title="Catégories d'annotations" disabled="disabled">
</select>
</div>
<div class="col-md-3">
@@ -67,5 +68,7 @@
<script type="text/javascript">
var urlMS = "http://localhost/spel/spel/api/ldt/1.0/tags/?format=json&limit=500&name__startswith=modalites_sceniques:";
var urlP = "http://localhost/spel/spel/api/ldt/1.0/tags/?format=json&limit=500&name__startswith=personnages:";
+ var urlTI = "http://localhost/spel/spel/api/ldt/1.0/tags/?format=json&limit=500&name__startswith=type_inter:";
+ var urlChapters = "{% url 'spel_chapters' %}";
</script>
{% endblock %}
--- /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 @@
+
--- /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
+
--- 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()
--- 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