diff -r 7b65bf78873a -r eefd336335f9 src/widgets/Tagger.js --- a/src/widgets/Tagger.js Thu Jan 17 17:25:46 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -IriSP.Widgets.Tagger = function(player, config) { - IriSP.Widgets.Widget.call(this, player, config); -}; - -IriSP.Widgets.Tagger.prototype = new IriSP.Widgets.Widget(); - -IriSP.Widgets.Tagger.prototype.defaults = { - created_annotation_type: "Contributions", - creator_name: 'anonymous', - api_endpoint: "", - api_method: "PUT", - pause_on_write : true, - api_serializer: "ldt_annotate", - tags: false -} - -IriSP.Widgets.Tagger.prototype.messages = { - en: { - add_a_tag: "Add a tag", - submit: "Submit" - }, - fr: { - add_a_tag: "Ajouter un tag", - submit: "Envoyer" - } -} - -IriSP.Widgets.Tagger.prototype.template = - '
' - + '
'; - -IriSP.Widgets.Tagger.prototype.draw = function() { - this.renderTemplate(); - var _tags = this.tags || this.source.getTags().getTitles(), - _this = this, - _input = this.$.find(".Ldt-Tagger-Input"); - _input.autocomplete({ - source: _tags - }); - if (this.pause_on_write) { - _input.keyup(function() { - _this.media.pause(); - }); - } - this.$.find(".Ldt-Tagger").submit(function() { - var _tagvalue = _input.val(); - if (_tagvalue) { - - /* Création d'une liste d'annotations contenant une annotation afin de l'envoyer au serveur */ - var _exportedAnnotations = new IriSP.Model.List(_this.player.sourceManager), - /* Création d'un objet source utilisant un sérialiseur spécifique pour l'export */ - _export = _this.player.sourceManager.newLocalSource({serializer: IriSP.serializers[_this.api_serializer]}), - /* Création d'une annotation dans cette source avec un ID généré à la volée (param. false) */ - _annotation = new IriSP.Model.Annotation(false, _export), - /* Récupération du type d'annotation dans lequel l'annotation doit être ajoutée */ - _annotationTypes = _this.source.getAnnotationTypes().searchByTitle(_this.created_annotation_type), - /* Si le Type d'Annotation n'existe pas, il est créé à la volée */ - _annotationType = (_annotationTypes.length ? _annotationTypes[0] : new IriSP.Model.AnnotationType(false, _export)), - /* L'objet Tag qui sera envoyé */ - _tag = new IriSP.Model.Tag(false, _export); - /* L'objet Tag doit avoir pour titre le texte du tag envoyé */ - _tag.title = _tagvalue; - /* Si nous avons dû générer un ID d'annotationType à la volée... */ - if (!_annotationTypes.length) { - /* Il ne faudra pas envoyer l'ID généré au serveur */ - _annotationType.dont_send_id = true; - /* Il faut inclure le titre dans le type d'annotation */ - _annotationType.title = _this.created_annotation_type; - } - - /* - * Nous remplissons les données de l'annotation générée à la volée - * ATTENTION: Si nous sommes sur un MASHUP, ces éléments doivent se référer AU MEDIA D'ORIGINE - * */ - var _now = _this.media.getCurrentTime(), - _pilotAnnotation = null; - if (_this.source.currentMedia.elementType == "mashup") { - /* Si c'est un mashup, on récupère l'annotation d'origine pour caler le temps */ - var _pilotAnnotation = _this.source.currentMedia.getAnnotationAtTime(_now).annotation; - } else { - /* Sinon, on recherche une annotation correspondant au temps */ - var _annotations = _this.getWidgetAnnotationsAtTime(_now); - if (_annotations.length) { - _pilotAnnotation = _annotations[0]; - } - } - if (_pilotAnnotation) { - _annotation.setBegin(_pilotAnnotation.begin); - _annotation.setEnd(_pilotAnnotation.end); - /* Id du média annoté */ - _annotation.setMedia(_pilotAnnotation.getMedia().id); - } else { - _annotation.setBegin(_now); - _annotation.setEnd(_now); - /* Id du média annoté */ - _annotation.setMedia(_this.source.currentMedia.id); - } - - /* Id du type d'annotation */ - _annotation.setAnnotationType(_annotationType.id); - - _annotation.title = _tagvalue; - _annotation.created = new Date(); /* Date de création de l'annotation */ - _annotation.description = _tagvalue; - - _annotation.setTags([_tag.id]); /*Liste des ids de tags */ - - /* Les données créateur/date de création sont envoyées non pas dans l'annotation, mais dans le projet */ - _export.creator = _this.creator_name; - _export.created = new Date(); - /* Ajout de l'annotation à la liste à exporter */ - _exportedAnnotations.push(_annotation); - /* Ajout de la liste à exporter à l'objet Source */ - _export.addList("annotation",_exportedAnnotations); - - IriSP.jQuery.ajax({ - url: _this.api_endpoint, - type: _this.api_method, - contentType: 'application/json', - data: _export.serialize(), /* L'objet Source est sérialisé */ - success: function(_data) { - console.log("success"); - /* Pour éviter les doublons, on supprime l'annotation qui a été envoyée */ - _export.getAnnotations().removeElement(_annotation, true); - /* On désérialise les données reçues pour les réinjecter */ - _export.deSerialize(_data); - /* On récupère les données réimportées dans l'espace global des données */ - _this.source.merge(_export); - if (_this.pause_on_write && _this.media.getPaused()) { - _this.media.play(); - } - /* On force le rafraîchissement du widget AnnotationsList */ - _this.player.trigger("AnnotationsList.refresh"); - }, - error: function(_xhr, _error, _thrown) { - console.log("Error when sending annotation", _thrown); - _export.getAnnotations().removeElement(_annotation, true); - } - }); - - _input.val(""); - } - return false; - }); -} \ No newline at end of file