src/widgets/Tagger.js
author veltr
Mon, 24 Sep 2012 18:32:22 +0200
changeset 965 eadb7290c325
parent 957 4da0a5740b6c
permissions -rw-r--r--
Improvements in widget communication
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
931
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
     1
IriSP.Widgets.Tagger = function(player, config) {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
     2
    IriSP.Widgets.Widget.call(this, player, config);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
     3
};
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
     4
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
     5
IriSP.Widgets.Tagger.prototype = new IriSP.Widgets.Widget();
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
     6
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
     7
IriSP.Widgets.Tagger.prototype.defaults = {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
     8
    created_annotation_type: "Contributions",
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
     9
    creator_name: 'anonymous',
932
48dac21e086f Tagger corrections
veltr
parents: 931
diff changeset
    10
    api_endpoint: "",
931
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    11
    api_method: "PUT",
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    12
    pause_on_write : true,
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    13
    api_serializer: "ldt_annotate",
932
48dac21e086f Tagger corrections
veltr
parents: 931
diff changeset
    14
    tags: false
931
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    15
}
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    16
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    17
IriSP.Widgets.Tagger.prototype.messages = {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    18
    en: {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    19
        add_a_tag: "Add a tag",
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    20
        submit: "Submit"
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    21
    },
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    22
    fr: {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    23
        add_a_tag: "Ajouter un tag",
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    24
        submit: "Envoyer"
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    25
    }
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    26
}
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    27
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    28
IriSP.Widgets.Tagger.prototype.template =
965
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    29
    '<div class="Ldt-Tagger"><form class="Ldt-Tagger-Inner"><input class="Ldt-Tagger-Input" placeholder="{{l10n.add_a_tag}}" />'
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    30
    + '<input class="Ldt-Tagger-Submit" type="submit" value="{{l10n.submit}}" /></form></div>';
931
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    31
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    32
IriSP.Widgets.Tagger.prototype.draw = function() {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    33
    this.renderTemplate();
932
48dac21e086f Tagger corrections
veltr
parents: 931
diff changeset
    34
    var _tags = this.tags || this.source.getTags().getTitles(),
931
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    35
        _this = this,
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    36
        _input = this.$.find(".Ldt-Tagger-Input");
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    37
    _input.autocomplete({
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    38
        source: _tags
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    39
    });
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    40
    if (this.pause_on_write) {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    41
        _input.keyup(function() {
965
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    42
            _this.media.pause();
931
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    43
        });
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    44
    }
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    45
    this.$.find(".Ldt-Tagger").submit(function() {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    46
        var _tagvalue = _input.val();
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    47
        if (_tagvalue) {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    48
            
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    49
            /* Création d'une liste d'annotations contenant une annotation afin de l'envoyer au serveur */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    50
            var _exportedAnnotations = new IriSP.Model.List(_this.player.sourceManager),
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    51
                /* Création d'un objet source utilisant un sérialiseur spécifique pour l'export */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    52
                _export = _this.player.sourceManager.newLocalSource({serializer: IriSP.serializers[_this.api_serializer]}),
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    53
                /* Création d'une annotation dans cette source avec un ID généré à la volée (param. false) */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    54
                _annotation = new IriSP.Model.Annotation(false, _export),
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    55
                /* Récupération du type d'annotation dans lequel l'annotation doit être ajoutée */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    56
                _annotationTypes = _this.source.getAnnotationTypes().searchByTitle(_this.created_annotation_type),
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    57
                /* Si le Type d'Annotation n'existe pas, il est créé à la volée */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    58
                _annotationType = (_annotationTypes.length ? _annotationTypes[0] : new IriSP.Model.AnnotationType(false, _export)),
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    59
                /* L'objet Tag qui sera envoyé */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    60
                _tag = new IriSP.Model.Tag(false, _export);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    61
            /* L'objet Tag doit avoir pour titre le texte du tag envoyé */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    62
            _tag.title = _tagvalue;
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    63
            /* Si nous avons dû générer un ID d'annotationType à la volée... */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    64
            if (!_annotationTypes.length) {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    65
                /* Il ne faudra pas envoyer l'ID généré au serveur */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    66
                _annotationType.dont_send_id = true;
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    67
                /* Il faut inclure le titre dans le type d'annotation */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    68
                _annotationType.title = _this.created_annotation_type;
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    69
            }
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    70
            
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    71
            /*
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    72
             * Nous remplissons les données de l'annotation générée à la volée
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    73
             * ATTENTION: Si nous sommes sur un MASHUP, ces éléments doivent se référer AU MEDIA D'ORIGINE
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    74
             * */
965
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
    75
            var _now = _this.media.getCurrentTime(),
931
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    76
                _pilotAnnotation = null;
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    77
            if (_this.source.currentMedia.elementType == "mashup") {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    78
                /* Si c'est un mashup, on récupère l'annotation d'origine pour caler le temps */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    79
                var _pilotAnnotation = _this.source.currentMedia.getAnnotationAtTime(_now).annotation;
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    80
            } else {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    81
                /* Sinon, on recherche une annotation correspondant au temps */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    82
                var _annotations = _this.getWidgetAnnotationsAtTime(_now);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    83
                if (_annotations.length) {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    84
                    _pilotAnnotation = _annotations[0];
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    85
                }
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    86
            }
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    87
            if (_pilotAnnotation) {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    88
                _annotation.setBegin(_pilotAnnotation.begin);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    89
                _annotation.setEnd(_pilotAnnotation.end);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    90
                /* Id du média annoté */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    91
                _annotation.setMedia(_pilotAnnotation.getMedia().id);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    92
            } else {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    93
                _annotation.setBegin(_now);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    94
                _annotation.setEnd(_now);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    95
                /* Id du média annoté */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    96
                _annotation.setMedia(_this.source.currentMedia.id);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    97
            }
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    98
            
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
    99
            /* Id du type d'annotation */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   100
            _annotation.setAnnotationType(_annotationType.id); 
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   101
            
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   102
            _annotation.title = _tagvalue;
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   103
            _annotation.created = new Date(); /* Date de création de l'annotation */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   104
            _annotation.description = _tagvalue;
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   105
            
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   106
            _annotation.setTags([_tag.id]); /*Liste des ids de tags */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   107
            
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   108
            /* Les données créateur/date de création sont envoyées non pas dans l'annotation, mais dans le projet */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   109
            _export.creator = _this.creator_name;
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   110
            _export.created = new Date();
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   111
            /* Ajout de l'annotation à la liste à exporter */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   112
            _exportedAnnotations.push(_annotation);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   113
            /* Ajout de la liste à exporter à l'objet Source */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   114
            _export.addList("annotation",_exportedAnnotations);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   115
            
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   116
            IriSP.jQuery.ajax({
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   117
                url: _this.api_endpoint,
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   118
                type: _this.api_method,
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   119
                contentType: 'application/json',
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   120
                data: _export.serialize(), /* L'objet Source est sérialisé */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   121
                success: function(_data) {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   122
                    console.log("success");
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   123
                    /* Pour éviter les doublons, on supprime l'annotation qui a été envoyée */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   124
                    _export.getAnnotations().removeElement(_annotation, true);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   125
                    /* On désérialise les données reçues pour les réinjecter */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   126
                    _export.deSerialize(_data);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   127
                    /* On récupère les données réimportées dans l'espace global des données */
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   128
                    _this.source.merge(_export);
965
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   129
                    if (_this.pause_on_write && _this.media.getPaused()) {
eadb7290c325 Improvements in widget communication
veltr
parents: 957
diff changeset
   130
                        _this.media.play();
931
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   131
                    }
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   132
                    /* On force le rafraîchissement du widget AnnotationsList */
957
4da0a5740b6c Starting 'players-as-widgets' branch
veltr
parents: 932
diff changeset
   133
                    _this.player.trigger("AnnotationsList.refresh");
931
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   134
                },
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   135
                error: function(_xhr, _error, _thrown) {
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   136
                    console.log("Error when sending annotation", _thrown);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   137
                    _export.getAnnotations().removeElement(_annotation, true);
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   138
                }
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   139
            });
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   140
            
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   141
            _input.val("");
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   142
        }
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   143
        return false;
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   144
    });
0fdce6e14748 Created Tagger widget for FTV project
veltr
parents:
diff changeset
   145
}