src/js/widgets/annotationsListWidget.js
author veltr
Wed, 11 Apr 2012 17:06:11 +0200
changeset 857 fa614dc66b0b
parent 855 1be5beb4b196
permissions -rw-r--r--
Bugfix in Sparkline Widget
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
585
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
     1
IriSP.AnnotationsListWidget = function(Popcorn, config, Serializer) {
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
     2
  IriSP.Widget.call(this, Popcorn, config, Serializer);
605
e1a6f73038b4 made the listWidget redraw at every timeupdate event (added a small optimization though,
hamidouk
parents: 603
diff changeset
     3
  this.__counter = 0;
e1a6f73038b4 made the listWidget redraw at every timeupdate event (added a small optimization though,
hamidouk
parents: 603
diff changeset
     4
  this.__oldList = [];
838
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
     5
  this.searchRe = null;
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
     6
  this._ajax_cache = [];
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
     7
  var _this = this;
838
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
     8
  
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
     9
  this._Popcorn.listen("IriSP.search", function(searchString) {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    10
      _this.searchHandler(searchString);
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    11
  });
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    12
  this._Popcorn.listen("IriSP.search.closed", function() {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    13
      _this.searchHandler(false);
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    14
  });
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    15
  this._Popcorn.listen("IriSP.search.cleared", function() {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    16
      _this.searchHandler(false);
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    17
  });
585
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
    18
};
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
    19
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
    20
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
    21
IriSP.AnnotationsListWidget.prototype = new IriSP.Widget();
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
    22
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
    23
IriSP.AnnotationsListWidget.prototype.clear = function() {
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
    24
};
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
    25
588
78cf49152d4a got a decent-looking list.
hamidouk
parents: 585
diff changeset
    26
IriSP.AnnotationsListWidget.prototype.clearWidget = function() {
585
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
    27
};
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
    28
838
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    29
IriSP.AnnotationsListWidget.prototype.searchHandler = function(searchString) {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    30
  this.searchRe = (searchString && searchString.length) ? IriSP.regexpFromText(searchString) : null;
842
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
    31
  if (this.ajax_mode && !this.cinecast_version) {
838
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    32
      var _this = this,
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    33
        _annotations = (
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    34
            this.searchRe === null
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    35
            ? this._ajax_cache
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    36
            : IriSP.underscore.filter(this._ajax_cache, function(_a) {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    37
               return (_this.searchRe.test(_a.desc) || _this.searchRe.test(_a.title)); 
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    38
            })
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    39
        );
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    40
    this.do_redraw(_annotations);
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    41
    if (_annotations.length) {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    42
        this._Popcorn.trigger("IriSP.search.matchFound");
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    43
      } else {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    44
        this._Popcorn.trigger("IriSP.search.noMatchFound");
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    45
      }    
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    46
  } else {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    47
      this.drawList();
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    48
  }
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    49
}
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    50
629
b13bcfd2f9b1 DRYied the code.
hamidouk
parents: 621
diff changeset
    51
/** effectively redraw the widget - called by drawList */
b13bcfd2f9b1 DRYied the code.
hamidouk
parents: 621
diff changeset
    52
IriSP.AnnotationsListWidget.prototype.do_redraw = function(list) {
838
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    53
    var _html = IriSP.templToHTML(
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    54
        IriSP.annotationsListWidget_template, {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    55
            annotations: list
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    56
        }),
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    57
        _this = this;
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    58
      
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    59
    this.selector.html(_html);
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    60
    
842
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
    61
    this.selector.find('.Ldt-AnnotationsList-Tag-Li').click(function() {
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
    62
        _this._Popcorn.trigger("IriSP.search.triggeredSearch", IriSP.jQuery(this).text().trim());
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
    63
    })
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
    64
    
838
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    65
    if (this.searchRe !== null) {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    66
        this.selector.find(".Ldt-AnnotationsList-Title a, .Ldt-AnnotationsList-Description")
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    67
            .each(function()  {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    68
                var _$ = IriSP.jQuery(this);
842
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
    69
                _$.html(_$.text().trim().replace(_this.searchRe, '<span class="Ldt-AnnotationsList-highlight">$1</span>'))
838
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    70
            })
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
    71
    }
629
b13bcfd2f9b1 DRYied the code.
hamidouk
parents: 621
diff changeset
    72
};
b13bcfd2f9b1 DRYied the code.
hamidouk
parents: 621
diff changeset
    73
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    74
IriSP.AnnotationsListWidget.prototype.transformAnnotation = function(a) {
841
8da49ff273e0 Modifs cinecast
veltr
parents: 840
diff changeset
    75
    var _this = this;
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    76
    return {
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    77
        "id" : a.id,
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    78
        "title": this.cinecast_version ? IriSP.get_aliased(a.meta, ['creator_name', 'creator']) : a.content.title,
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    79
        "desc" : this.cinecast_version ? a.content.data : a.content.description,
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    80
        "begin": IriSP.msToTime(a.begin),
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    81
        "end" : IriSP.msToTime(a.end),
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    82
        "thumbnail" : (typeof a.meta == "object" && typeof a.meta.thumbnail == "string") ? a.meta.thumbnail : this.default_thumbnail,
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    83
        "url" : (typeof a.meta == "object" && typeof a.meta.url == "string") ? a.meta.url : null,
841
8da49ff273e0 Modifs cinecast
veltr
parents: 840
diff changeset
    84
        "created_at" :(typeof a.meta == "object" && typeof a.meta.created == "string") ? Date.parse(a.meta.created.replace(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}\:\d{2}\:\d{2}).*$/,"$2/$3/$1 $4 UTC+0000")) : null,
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    85
        "tags": typeof a.tags == "object"
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    86
            ? IriSP.underscore(a.tags)
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    87
                .chain()
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    88
                .map(function(_t) {
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    89
                    if (typeof _t == "string") {
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    90
                        return _t.replace(/^.*:/,'#');
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    91
                    } else {
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    92
                        if (typeof _t['id-ref'] != "undefined") {
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    93
                            var _f = IriSP.underscore.find(_this._serializer._data.tags, function(_tag) {
840
ac66e2240e1e bugfixes
veltr
parents: 838
diff changeset
    94
                                return _tag.id == _t['id-ref'];
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    95
                            });
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    96
                            if (typeof _f != "undefined") {
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    97
                                return IriSP.get_aliased(_f.meta, ['dc:title', 'title']);
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    98
                            }
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
    99
                        }
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   100
                    }
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   101
                    return null;
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   102
                })
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   103
                .filter(function(_t) {
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   104
                    return _t !== null && _t !== ""
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   105
                })
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   106
                .value()
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   107
            : []
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   108
    }    
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   109
}
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   110
599
a5a5e70d46a7 added support for widget redrawing.
hamidouk
parents: 595
diff changeset
   111
/** draw the annotation list */
607
0b94ae49efbd added an option to force the redraw of a list, even if the cached lists are the
hamidouk
parents: 605
diff changeset
   112
IriSP.AnnotationsListWidget.prototype.drawList = function(force_redraw) {
585
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
   113
  var _this = this;
674
835f5f454595 WIP - working on ajax autoupdate of the widget.
hamidouk
parents: 642
diff changeset
   114
  
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   115
//  var view_type = this._serializer.getContributions();
585
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
   116
  var annotations = this._serializer._data.annotations;
602
b35862f9b0b0 WIP - working on the autoupdate of the widget.
hamidouk
parents: 599
diff changeset
   117
  var currentTime = this._Popcorn.currentTime();
585
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
   118
  var list = [];
588
78cf49152d4a got a decent-looking list.
hamidouk
parents: 585
diff changeset
   119
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   120
/*  if (typeof(view_type) === "undefined") {    
585
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
   121
    return;
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   122
} */
585
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
   123
  for (i = 0; i < annotations.length; i++) {
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   124
    var obj = this.transformAnnotation(annotations[i]);
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   125
    obj.iterator = i;
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   126
    obj.distance = Math.abs((annotations[i].end + annotations[i].begin) / 2000 - currentTime);
835
a8af9da7c622 Integrated trace manager
veltr
parents: 833
diff changeset
   127
    if (!this.cinecast_version || annotations[i].type == "cinecast:UserAnnotation") {
a8af9da7c622 Integrated trace manager
veltr
parents: 833
diff changeset
   128
        list.push(obj);
a8af9da7c622 Integrated trace manager
veltr
parents: 833
diff changeset
   129
    }
a8af9da7c622 Integrated trace manager
veltr
parents: 833
diff changeset
   130
    
585
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
   131
  }
607
0b94ae49efbd added an option to force the redraw of a list, even if the cached lists are the
hamidouk
parents: 605
diff changeset
   132
  
838
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   133
    if (this.searchRe !== null) {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   134
        list = list.filter(function(_a) {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   135
            return (_this.searchRe.test(_a.desc) || _this.searchRe.test(_a.title)); 
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   136
        });
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   137
        if (list.length) {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   138
            this._Popcorn.trigger("IriSP.search.matchFound");
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   139
          } else {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   140
            this._Popcorn.trigger("IriSP.search.noMatchFound");
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   141
          }
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   142
    }
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   143
  list = IriSP.underscore(list)
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   144
    .chain()
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   145
    .sortBy(function(_o) {
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   146
        return _o.distance;
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   147
    })
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   148
    .first(10)
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   149
    .sortBy(function(_o) {
841
8da49ff273e0 Modifs cinecast
veltr
parents: 840
diff changeset
   150
        return (_this.cinecast_version ? - _o.created_at : _o.iterator);
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   151
    })
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   152
    .value();
605
e1a6f73038b4 made the listWidget redraw at every timeupdate event (added a small optimization though,
hamidouk
parents: 603
diff changeset
   153
  var idList = IriSP.underscore.pluck(list, "id").sort();
642
37693f217f8c redraw the list when a new annotation is added.
hamidouk
parents: 629
diff changeset
   154
842
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   155
  if (!IriSP.underscore.isEqual(this.__oldList, idList) || this.lastSearch !== this.searchRe || typeof(force_redraw) !== "undefined") {
629
b13bcfd2f9b1 DRYied the code.
hamidouk
parents: 621
diff changeset
   156
    this.do_redraw(list);
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   157
    this.__oldList = idList;
842
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   158
    this.lastSearch = this.searchRe;
607
0b94ae49efbd added an option to force the redraw of a list, even if the cached lists are the
hamidouk
parents: 605
diff changeset
   159
  }
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   160
   /* save for next call */
605
e1a6f73038b4 made the listWidget redraw at every timeupdate event (added a small optimization though,
hamidouk
parents: 603
diff changeset
   161
  
e1a6f73038b4 made the listWidget redraw at every timeupdate event (added a small optimization though,
hamidouk
parents: 603
diff changeset
   162
  
599
a5a5e70d46a7 added support for widget redrawing.
hamidouk
parents: 595
diff changeset
   163
};
a5a5e70d46a7 added support for widget redrawing.
hamidouk
parents: 595
diff changeset
   164
674
835f5f454595 WIP - working on ajax autoupdate of the widget.
hamidouk
parents: 642
diff changeset
   165
IriSP.AnnotationsListWidget.prototype.ajaxRedraw = function(timecode) {
748
ec1f7aa873f4 parse the url received by the platform.
hamidouk
parents: 745
diff changeset
   166
752
ebc72cbc35f4 same thing, for the annotationsListWidget
hamidouk
parents: 748
diff changeset
   167
  /* the seeked signal sometimes passes an argument - depending on if we're using
ebc72cbc35f4 same thing, for the annotationsListWidget
hamidouk
parents: 748
diff changeset
   168
     our popcorn lookalike or the real thing - if it's the case, use it as it's
ebc72cbc35f4 same thing, for the annotationsListWidget
hamidouk
parents: 748
diff changeset
   169
     more precise than currentTime which sometimes contains the place we where at */
ebc72cbc35f4 same thing, for the annotationsListWidget
hamidouk
parents: 748
diff changeset
   170
  if (IriSP.null_or_undefined(timecode) || typeof(timecode) != "number") {
ebc72cbc35f4 same thing, for the annotationsListWidget
hamidouk
parents: 748
diff changeset
   171
     var tcode = this._Popcorn.currentTime();     
ebc72cbc35f4 same thing, for the annotationsListWidget
hamidouk
parents: 748
diff changeset
   172
   } else {
ebc72cbc35f4 same thing, for the annotationsListWidget
hamidouk
parents: 748
diff changeset
   173
     var tcode = timecode;     
ebc72cbc35f4 same thing, for the annotationsListWidget
hamidouk
parents: 748
diff changeset
   174
  }
ebc72cbc35f4 same thing, for the annotationsListWidget
hamidouk
parents: 748
diff changeset
   175
   
ebc72cbc35f4 same thing, for the annotationsListWidget
hamidouk
parents: 748
diff changeset
   176
  
841
8da49ff273e0 Modifs cinecast
veltr
parents: 840
diff changeset
   177
  /* the platform gives us a special url - of the type : http://path/{{media}}/{{begin}}/{{end}}
748
ec1f7aa873f4 parse the url received by the platform.
hamidouk
parents: 745
diff changeset
   178
     we double the braces using regexps and we feed it to mustache to build the correct url
ec1f7aa873f4 parse the url received by the platform.
hamidouk
parents: 745
diff changeset
   179
     we have to do that because the platform only knows at run time what view it's displaying.
ec1f7aa873f4 parse the url received by the platform.
hamidouk
parents: 745
diff changeset
   180
  */
ec1f7aa873f4 parse the url received by the platform.
hamidouk
parents: 745
diff changeset
   181
     
842
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   182
  var media_id = this.currentMedia()["id"];
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   183
  var duration = this.getDuration();
698
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   184
  
752
ebc72cbc35f4 same thing, for the annotationsListWidget
hamidouk
parents: 748
diff changeset
   185
  var begin_timecode = (Math.floor(tcode) - 300) * 1000;
698
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   186
  if (begin_timecode < 0)
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   187
    begin_timecode = 0;
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   188
    
752
ebc72cbc35f4 same thing, for the annotationsListWidget
hamidouk
parents: 748
diff changeset
   189
  var end_timecode = (Math.floor(tcode) + 300) * 1000;
698
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   190
  if (end_timecode > duration)
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   191
    end_timecode = duration;
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   192
  
841
8da49ff273e0 Modifs cinecast
veltr
parents: 840
diff changeset
   193
  var templ = Mustache.to_html(this.ajax_url, {media: media_id, begin: begin_timecode,
748
ec1f7aa873f4 parse the url received by the platform.
hamidouk
parents: 745
diff changeset
   194
                                 end: end_timecode});
ec1f7aa873f4 parse the url received by the platform.
hamidouk
parents: 745
diff changeset
   195
698
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   196
  /* we create on the fly a serializer to get the ajax */
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   197
  var serializer = new IriSP.JSONSerializer(IriSP.__dataloader, templ);
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   198
  serializer.sync(IriSP.wrap(this, function(json) { this.processJson(json, serializer) }));
674
835f5f454595 WIP - working on ajax autoupdate of the widget.
hamidouk
parents: 642
diff changeset
   199
};
835f5f454595 WIP - working on ajax autoupdate of the widget.
hamidouk
parents: 642
diff changeset
   200
698
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   201
/** process the received json - it's a bit hackish */
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   202
IriSP.AnnotationsListWidget.prototype.processJson = function(json, serializer) {
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   203
  /* FIXME: DRY the whole thing */
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   204
  var annotations = serializer._data.annotations;
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   205
  if (IriSP.null_or_undefined(annotations))
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   206
    return;
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   207
  
784
2ce658b19b96 commented unused line.
hamidouk
parents: 753
diff changeset
   208
  /*
2ce658b19b96 commented unused line.
hamidouk
parents: 753
diff changeset
   209
  commented in case we wanted to discriminate against some annotation types.
698
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   210
  var view_types = serializer.getIds("Contributions");
784
2ce658b19b96 commented unused line.
hamidouk
parents: 753
diff changeset
   211
  */
698
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   212
  var l = [];
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   213
  
842
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   214
  var media = this.currentMedia()["id"];
714
9056928c46de WIP - making links to only annotations which are not present in the opened
hamidouk
parents: 703
diff changeset
   215
  
698
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   216
  for (i = 0; i < annotations.length; i++) {
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   217
    var obj = this.transformAnnotation(annotations[i])
836
526f91f5253e Changes for Cinecast
veltr
parents: 835
diff changeset
   218
      if (typeof obj.url == "undefined" || !obj.url) {
526f91f5253e Changes for Cinecast
veltr
parents: 835
diff changeset
   219
          /* only if the annotation isn't present in the document create an
526f91f5253e Changes for Cinecast
veltr
parents: 835
diff changeset
   220
             external link */
840
ac66e2240e1e bugfixes
veltr
parents: 838
diff changeset
   221
          if (this.annotations_ids.indexOf(obj.id.toLowerCase()) == -1) {
836
526f91f5253e Changes for Cinecast
veltr
parents: 835
diff changeset
   222
            // braindead url; jacques didn't want to create a new one in the platform,
526f91f5253e Changes for Cinecast
veltr
parents: 835
diff changeset
   223
            // so we append the cutting id to the url.
526f91f5253e Changes for Cinecast
veltr
parents: 835
diff changeset
   224
            obj.url = this.project_url + "/" + media + "/" + 
526f91f5253e Changes for Cinecast
veltr
parents: 835
diff changeset
   225
                         annotations[i].meta.project + "/" +
526f91f5253e Changes for Cinecast
veltr
parents: 835
diff changeset
   226
                         annotations[i].meta["id-ref"] + '#id=' + annotations[i].id;
840
ac66e2240e1e bugfixes
veltr
parents: 838
diff changeset
   227
                         
836
526f91f5253e Changes for Cinecast
veltr
parents: 835
diff changeset
   228
            // obj.url = document.location.href.split("#")[0] + "/" + annotation.meta.project;
526f91f5253e Changes for Cinecast
veltr
parents: 835
diff changeset
   229
          }
526f91f5253e Changes for Cinecast
veltr
parents: 835
diff changeset
   230
          }
716
16d61d539cbf fixed stupid bug.
hamidouk
parents: 714
diff changeset
   231
      l.push(obj);
698
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   232
  }
838
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   233
  this._ajax_cache = l;
698
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   234
  this.do_redraw(l);
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   235
};
599
a5a5e70d46a7 added support for widget redrawing.
hamidouk
parents: 595
diff changeset
   236
IriSP.AnnotationsListWidget.prototype.draw = function() {
714
9056928c46de WIP - making links to only annotations which are not present in the opened
hamidouk
parents: 703
diff changeset
   237
  
9056928c46de WIP - making links to only annotations which are not present in the opened
hamidouk
parents: 703
diff changeset
   238
  /* build a table of the annotations present in the document for faster 
9056928c46de WIP - making links to only annotations which are not present in the opened
hamidouk
parents: 703
diff changeset
   239
     lookup
9056928c46de WIP - making links to only annotations which are not present in the opened
hamidouk
parents: 703
diff changeset
   240
  */
840
ac66e2240e1e bugfixes
veltr
parents: 838
diff changeset
   241
  this.annotations_ids = IriSP.underscore(this._serializer._data.annotations).map(function(_a) {
ac66e2240e1e bugfixes
veltr
parents: 838
diff changeset
   242
    return _a.id.toLowerCase();
ac66e2240e1e bugfixes
veltr
parents: 838
diff changeset
   243
  });
714
9056928c46de WIP - making links to only annotations which are not present in the opened
hamidouk
parents: 703
diff changeset
   244
  
833
33a5d5882be4 Last commit before weekend
veltr
parents: 820
diff changeset
   245
  var _this = this;
674
835f5f454595 WIP - working on ajax autoupdate of the widget.
hamidouk
parents: 642
diff changeset
   246
    
842
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   247
    if (!this.ajax_mode || this.cinecast_version) {
838
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   248
        var _throttled = IriSP.underscore.throttle(function() {
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   249
            _this.drawList();
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   250
        }, 1500);
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   251
        _throttled();
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   252
        this._Popcorn.listen("IriSP.createAnnotationWidget.addedAnnotation", _throttled);
03b03865eb9b Transferred i18n data to widgets, corrected slider bug, added search in annotationslist
veltr
parents: 836
diff changeset
   253
        this._Popcorn.listen("timeupdate", _throttled);
842
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   254
        if (this.cinecast_version) {
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   255
            window.setInterval(function() {
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   256
                var _tmpSerializer = new IriSP.JSONSerializer(IriSP.__dataloader,  _this._config.metadata.src, true);
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   257
                _tmpSerializer.sync(function(json) {
855
1be5beb4b196 Corrected cinecast bug
veltr
parents: 852
diff changeset
   258
                    _this.annotations_ids = IriSP.underscore(_this._serializer._data.annotations).map(function(_a) {
1be5beb4b196 Corrected cinecast bug
veltr
parents: 852
diff changeset
   259
                      return _a.id.toLowerCase();
1be5beb4b196 Corrected cinecast bug
veltr
parents: 852
diff changeset
   260
                    });
842
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   261
                    IriSP.underscore(json.annotations).each(function(_a) {
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   262
                        var _j = _this.annotations_ids.indexOf(_a.id);
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   263
                        if (_j == -1) {
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   264
                            _this._serializer._data.annotations.push(_a);
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   265
                            _this.annotations_ids.push(_a.id);
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   266
                        } else {
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   267
                            _this._serializer._data.annotations[_j] = _a;
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   268
                        }
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   269
                        _throttled();
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   270
                    });
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   271
                }, true); // true is for force_refresh
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   272
            },this.refresh_interval);
4ae2247a59f4 Changes for Cinecast
veltr
parents: 841
diff changeset
   273
        }
674
835f5f454595 WIP - working on ajax autoupdate of the widget.
hamidouk
parents: 642
diff changeset
   274
  } else {
729
7ba63d0315ad load the widget when the video has finished loading.
hamidouk
parents: 716
diff changeset
   275
    /* update the widget when the video has finished loading and when it's seeked and paused */
698
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   276
    this._Popcorn.listen("seeked", IriSP.wrap(this, this.ajaxRedraw));
729
7ba63d0315ad load the widget when the video has finished loading.
hamidouk
parents: 716
diff changeset
   277
    this._Popcorn.listen("loadedmetadata", IriSP.wrap(this, this.ajaxRedraw));
698
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   278
    this._Popcorn.listen("paused", IriSP.wrap(this, this.ajaxRedraw));
730
357fc047503b redraw the widget after that an annotation has been added.
hamidouk
parents: 729
diff changeset
   279
    
357fc047503b redraw the widget after that an annotation has been added.
hamidouk
parents: 729
diff changeset
   280
    this._Popcorn.listen("IriSP.createAnnotationWidget.addedAnnotation", IriSP.wrap(this, this.ajaxRedraw));
674
835f5f454595 WIP - working on ajax autoupdate of the widget.
hamidouk
parents: 642
diff changeset
   281
  }
698
329333e07267 lot of work on the ajax update front.
hamidouk
parents: 674
diff changeset
   282
585
44a4a4a179c1 first version of the AnnotationListWidget.
hamidouk
parents:
diff changeset
   283
};