--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/js/widgets/annotationsWidget.js Fri Apr 06 16:55:34 2012 +0200
@@ -0,0 +1,139 @@
+/* Internationalization for this widget */
+
+IriSP.i18n.addMessages(
+ {
+ "fr": {
+ "keywords": "Mots-clés"
+ },
+ "en": {
+ "keywords": "Keywords"
+ }
+ }
+);
+
+IriSP.AnnotationsWidget = function(Popcorn, config, Serializer) {
+ IriSP.Widget.call(this, Popcorn, config, Serializer);
+ /* flag used when we're creating an annotation */
+ this._hidden = false;
+};
+
+
+IriSP.AnnotationsWidget.prototype = new IriSP.Widget();
+
+IriSP.AnnotationsWidget.prototype.clear = function() {
+ this.selector.find(".Ldt-SaTitle").text("");
+ this.selector.find(".Ldt-SaDescription").text("");
+ this.selector.find(".Ldt-SaKeywordText").text("");
+};
+
+IriSP.AnnotationsWidget.prototype.displayAnnotation = function(annotation) {
+ var title = annotation.content.title;
+ var description = annotation.content.description;
+ var keywords = "";
+ var begin = +annotation.begin / 1000;
+ var end = +annotation.end / 1000;
+ var duration = this.getDuration();
+ var tags = "";
+
+ var title_templ = "{{title}} - ( {{begin}} - {{end}} )";
+ var endstr = Mustache.to_html(title_templ, {title: title, begin: IriSP.secondsToTime(begin), end: IriSP.secondsToTime(end)});
+
+ this.selector.find(".Ldt-SaTitle").text(endstr);
+ this.selector.find(".Ldt-SaDescription").text(description);
+
+
+ if (!IriSP.null_or_undefined(annotation.tags) && !IriSP.null_or_undefined(this._serializer._data.tags)) {
+ /* save the tag id and keywords in a unique structure */
+ var tag_list = {};
+ for (var i = 0; i < this._serializer._data.tags.length; i++) {
+ var id = this._serializer._data.tags[i]["id"];
+ var keyword = IriSP.get_aliased(this._serializer._data.tags[i]["meta"], ["dc:title", "title"]);
+
+ tag_list[id] = keyword;
+ }
+
+ /* then browse the list of defined tags for the current annotation */
+ for (var i = 0; i < annotation.tags.length; i++) {
+ if (tag_list.hasOwnProperty(annotation.tags[i]["id-ref"]))
+ tags += tag_list[annotation.tags[i]["id-ref"]] + ", ";
+ }
+ }
+
+ tags = IriSP.i18n.getMessage("keywords") + ": " + tags.slice(0, tags.length - 2);
+
+ this.selector.find(".Ldt-SaKeywords").text(tags);
+
+ // update sharing buttons
+ var url = document.location.href + "#id=" + annotation.id;
+ this.selector.find(".Ldt-fbShare").attr("href", IriSP.mkFbUrl(url, this.share_text));
+ this.selector.find(".Ldt-TwShare").attr("href", IriSP.mkTweetUrl(url, this.share_text));
+ this.selector.find(".Ldt-GplusShare").attr("href", IriSP.mkGplusUrl(url, this.share_text));
+};
+
+IriSP.AnnotationsWidget.prototype.clearWidget = function() {
+ /* retract the pane between two annotations */
+ this.selector.find(".Ldt-SaTitle").text("");
+ this.selector.find(".Ldt-SaDescription").text("");
+ this.selector.find(".Ldt-SaKeywordText").html("");
+ this.selector.find(".Ldt-ShowAnnotation").slideUp();
+};
+
+IriSP.AnnotationsWidget.prototype.draw = function() {
+ var _this = this;
+
+ var annotationMarkup = IriSP.templToHTML(IriSP.annotationWidget_template);
+ this.selector.append(annotationMarkup);
+
+ this._Popcorn.listen("IriSP.AnnotationsWidget.show",
+ IriSP.wrap(this, this.show));
+ this._Popcorn.listen("IriSP.AnnotationsWidget.hide",
+ IriSP.wrap(this, this.hide));
+
+ var legal_ids = [];
+ if (typeof(this._serializer.getChapitrage()) !== "undefined")
+ legal_ids.push(this._serializer.getChapitrage());
+ else
+ legal_ids = this._serializer.getNonTweetIds();
+
+ var annotations = this._serializer._data.annotations;
+ var i;
+
+ for (i in annotations) {
+ var annotation = annotations[i];
+ var begin = Math.round((+ annotation.begin) / 1000);
+ var end = Math.round((+ annotation.end) / 1000);
+
+ if (typeof(annotation.meta) !== "undefined" && typeof(annotation.meta["id-ref"]) !== "undefined"
+ && !IriSP.underscore.include(legal_ids, annotation.meta["id-ref"])) {
+ continue;
+ }
+
+
+ var conf = {start: begin, end: end,
+ onStart:
+ function(annotation) {
+ return function() {
+ _this.displayAnnotation(annotation);
+
+ } }(annotation),
+ onEnd:
+ function() { _this.clearWidget.call(_this); }
+ };
+ this._Popcorn = this._Popcorn.code(conf);
+ }
+
+};
+
+IriSP.AnnotationsWidget.prototype.hide = function() {
+ if (this._hidden == false) {
+ this.selector.hide();
+ this._hidden = true;
+ }
+};
+
+IriSP.AnnotationsWidget.prototype.show = function() {
+ if (this._hidden == true) {
+ this.selector.show();
+ this._hidden = false;
+ }
+};
\ No newline at end of file