src/js/widgets/arrowWidget.js
author veltr
Thu, 08 Mar 2012 18:38:46 +0100
branchpopcorn-port
changeset 830 18ca612e9ff0
parent 820 7968346b9689
child 842 4ae2247a59f4
permissions -rw-r--r--
Lots of changes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
299
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
     1
IriSP.ArrowWidget = function(Popcorn, config, Serializer) {
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
     2
  IriSP.Widget.call(this, Popcorn, config, Serializer);
321
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
     3
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
     4
  this._oldAnnotation = null;
563
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
     5
  this._blockArrow = false;
299
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
     6
};
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
     7
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
     8
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
     9
IriSP.ArrowWidget.prototype = new IriSP.Widget();
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
    10
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
    11
IriSP.ArrowWidget.prototype.clear = function() {
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
    12
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
    13
};
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
    14
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
    15
IriSP.ArrowWidget.prototype.clearWidget = function() {
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
    16
};
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
    17
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
    18
IriSP.ArrowWidget.prototype.draw = function() {
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
    19
  var templ = Mustache.to_html(IriSP.arrowWidget_template, {});
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
    20
  this.selector.append(templ);
321
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    21
  this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.timeUpdateHandler));
563
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    22
  this._Popcorn.listen("IriSP.ArrowWidget.blockArrow", IriSP.wrap(this, this.blockArrow));
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    23
  this._Popcorn.listen("IriSP.ArrowWidget.releaseArrow", IriSP.wrap(this, this.releaseArrow));
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    24
  
299
d2005f747d5a added a new widget, the arrowWidget.
hamidouk
parents:
diff changeset
    25
};
305
e8d05c3f77ed created an arrow widget.
hamidouk
parents: 299
diff changeset
    26
321
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    27
IriSP.ArrowWidget.prototype.timeUpdateHandler = function(percents) {
563
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    28
  if (this._blockArrow)
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    29
    return;
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    30
  
321
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    31
  var currentTime = this._Popcorn.currentTime();
664
c548eb0be4ef fixed annotation type bug.
hamidouk
parents: 563
diff changeset
    32
  var currentAnnotation = this._serializer.currentChapitre(currentTime);
754
b119a956b647 don't move the arrow widget when there's no annotation at the time.
hamidouk
parents: 664
diff changeset
    33
  if (IriSP.null_or_undefined(currentAnnotation)) {
b119a956b647 don't move the arrow widget when there's no annotation at the time.
hamidouk
parents: 664
diff changeset
    34
    var c_annots = this._serializer.currentAnnotation(currentTime)
b119a956b647 don't move the arrow widget when there's no annotation at the time.
hamidouk
parents: 664
diff changeset
    35
    if (c_annots.length != 0)
b119a956b647 don't move the arrow widget when there's no annotation at the time.
hamidouk
parents: 664
diff changeset
    36
      var currentAnnotation = c_annots[0]; // FIXME : use the others ?
b119a956b647 don't move the arrow widget when there's no annotation at the time.
hamidouk
parents: 664
diff changeset
    37
    else
b119a956b647 don't move the arrow widget when there's no annotation at the time.
hamidouk
parents: 664
diff changeset
    38
      return;
b119a956b647 don't move the arrow widget when there's no annotation at the time.
hamidouk
parents: 664
diff changeset
    39
  }
b119a956b647 don't move the arrow widget when there's no annotation at the time.
hamidouk
parents: 664
diff changeset
    40
  
321
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    41
  /* move the arrow only if the current annotation changes */
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    42
  if (currentAnnotation != this._oldAnnotation) {
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    43
    var begin = (+ currentAnnotation.begin) / 1000;
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    44
    var end = (+ currentAnnotation.end) / 1000;
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    45
820
7968346b9689 Added compatibility with cinecast format (with get_aliased)
veltr
parents: 803
diff changeset
    46
    var duration = this._serializer.getDuration() / 1000;
321
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    47
    var middle_time = (begin + end) / 2;
560
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    48
    var percents = middle_time / duration;
321
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    49
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    50
    // we need to apply a fix because the arrow has a certain length
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    51
    // it's half the length of the arrow (27 / 2). We need to convert
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    52
    // it in percents though.
664
c548eb0be4ef fixed annotation type bug.
hamidouk
parents: 563
diff changeset
    53
    var totalWidth = this.selector.width();    
560
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    54
    var pixels = percents * totalWidth;
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    55
    var correction = (27 / 2);
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    56
    var corrected_pixels = pixels - correction;
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    57
    
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    58
    /* make sure that the arrow is aligned with the pattern
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    59
       of the widget under it */
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    60
    if (corrected_pixels % 3 != 0)
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    61
      corrected_pixels -= (corrected_pixels % 3 - 1);
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    62
    
337
ee1d1e4fcf45 prevent the arrow from leaving the screen.
hamidouk
parents: 321
diff changeset
    63
    /* don't move out of the screen */
560
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    64
    if (corrected_pixels <= 0)
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    65
      corrected_pixels = 0;
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    66
    
803
4955d857e304 move css code from js to css classes for arrowWidget.
hamidouk
parents: 754
diff changeset
    67
    if (corrected_pixels <= 15) {      
4955d857e304 move css code from js to css classes for arrowWidget.
hamidouk
parents: 754
diff changeset
    68
      this.selector.children(".Ldt-arrowWidget").removeClass("Ldt-arrowLeftEdge Ldt-arrowCenter Ldt-arrowRightEdge")
4955d857e304 move css code from js to css classes for arrowWidget.
hamidouk
parents: 754
diff changeset
    69
                                                .addClass("Ldt-arrowLeftEdge"); 
560
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    70
    } else if (corrected_pixels >= totalWidth - 25) {
803
4955d857e304 move css code from js to css classes for arrowWidget.
hamidouk
parents: 754
diff changeset
    71
           this.selector.children(".Ldt-arrowWidget").removeClass("Ldt-arrowLeftEdge Ldt-arrowCenter Ldt-arrowRightEdge")
4955d857e304 move css code from js to css classes for arrowWidget.
hamidouk
parents: 754
diff changeset
    72
                                                .addClass("Ldt-arrowRightEdge"); 
535
7c25af985344 made the arrowWidget.js changed its arrow at the edges of the screen.
hamidouk
parents: 337
diff changeset
    73
    } else {
803
4955d857e304 move css code from js to css classes for arrowWidget.
hamidouk
parents: 754
diff changeset
    74
      this.selector.children(".Ldt-arrowWidget").removeClass("Ldt-arrowLeftEdge Ldt-arrowCenter Ldt-arrowRightEdge")
4955d857e304 move css code from js to css classes for arrowWidget.
hamidouk
parents: 754
diff changeset
    75
                                                .addClass("Ldt-arrowCenter"); 
535
7c25af985344 made the arrowWidget.js changed its arrow at the edges of the screen.
hamidouk
parents: 337
diff changeset
    76
    }
7c25af985344 made the arrowWidget.js changed its arrow at the edges of the screen.
hamidouk
parents: 337
diff changeset
    77
    
560
68e91efc5a58 the arrow is now aligned with the pixels under it.
hamidouk
parents: 535
diff changeset
    78
    this.selector.children(".Ldt-arrowWidget").animate({"left" : corrected_pixels + "px"});
321
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    79
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    80
    this._oldAnnotation = currentAnnotation;
21d840371c6b Arrow Positioning that Just Works (tm)
hamidouk
parents: 313
diff changeset
    81
  }
563
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    82
};
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    83
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    84
/** Block the arrow for instance when the user is annotating */
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    85
IriSP.ArrowWidget.prototype.blockArrow = function() {
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    86
  this._blockArrow = true;
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    87
};
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    88
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    89
IriSP.ArrowWidget.prototype.releaseArrow = function() {
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    90
  this._blockArrow = false;   
4816e3425933 block the arrow when the user is annotating.
hamidouk
parents: 560
diff changeset
    91
};