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