web/static/res/js/popcorn.sequence.js
author ymh <ymh.work@gmail.com>
Tue, 12 Feb 2013 10:54:34 +0100
changeset 134 678b07d351ef
parent 78 8c3f0b94d056
permissions -rw-r--r--
Added tag V01.25 for changeset fe9ca5cd905e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
     1
/*!
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
     2
 * Popcorn.sequence
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
     3
 *
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
     4
 * Copyright 2011, Rick Waldron
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
     5
 * Licensed under MIT license.
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
     6
 *
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
     7
 */
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
     8
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
     9
/* jslint forin: true, maxerr: 50, indent: 4, es5: true  */
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    10
/* global Popcorn: true */
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    11
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    12
// Requires Popcorn.js
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    13
(function( global, Popcorn ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    14
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    15
  // TODO: as support increases, migrate to element.dataset
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    16
  var doc = global.document,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    17
      location = global.location,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    18
      rprotocol = /:\/\//,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    19
      // TODO: better solution to this sucky stop-gap
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    20
      lochref = location.href.replace( location.href.split("/").slice(-1)[0], "" ),
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    21
      // privately held
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    22
      range = function(start, stop, step) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    23
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    24
        start = start || 0;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    25
        stop = ( stop || start || 0 ) + 1;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    26
        step = step || 1;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    27
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    28
        var len = Math.ceil((stop - start) / step) || 0,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    29
            idx = 0,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    30
            range = [];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    31
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    32
        range.length = len;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    33
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    34
        while (idx < len) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    35
         range[idx++] = start;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    36
         start += step;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    37
        }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    38
        return range;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    39
      };
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    40
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    41
  Popcorn.sequence = function( parent, list ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    42
    return new Popcorn.sequence.init( parent, list );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    43
  };
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    44
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    45
  Popcorn.sequence.init = function( parent, list ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    46
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    47
    // Video element
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    48
    this.parent = doc.getElementById( parent );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    49
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    50
    // Store ref to a special ID
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    51
    this.seqId = Popcorn.guid( "__sequenced" );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    52
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    53
    // List of HTMLVideoElements
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    54
    this.queue = [];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    55
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    56
    // List of Popcorn objects
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    57
    this.playlist = [];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    58
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    59
    // Lists of in/out points
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    60
    this.inOuts = {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    61
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    62
      // Stores the video in/out times for each video in sequence
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    63
      ofVideos: [],
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    64
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    65
      // Stores the clip in/out times for each clip in sequences
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    66
      ofClips: []
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    67
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    68
    };
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    69
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    70
    // Store first video dimensions
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    71
    this.dims = {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    72
      width: 0, //this.video.videoWidth,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    73
      height: 0 //this.video.videoHeight
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    74
    };
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    75
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    76
    this.active = 0;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    77
    this.cycling = false;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    78
    this.playing = false;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    79
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    80
    this.times = {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    81
      last: 0
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    82
    };
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    83
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    84
    // Store event pointers and queues
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    85
    this.events = {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    86
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    87
    };
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    88
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    89
    var self = this,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    90
        clipOffset = 0;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    91
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    92
    // Create `video` elements
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    93
    Popcorn.forEach( list, function( media, idx ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    94
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    95
      var video = doc.createElement( "video" );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    96
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    97
      video.preload = "auto";
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    98
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
    99
      // Setup newly created video element
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   100
      video.controls = true;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   101
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   102
      // If the first, show it, if the after, hide it
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   103
      video.style.display = ( idx && "none" ) || "" ;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   104
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   105
      // Seta registered sequence id
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   106
      video.id = self.seqId + "-" + idx ;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   107
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   108
      // Push this video into the sequence queue
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   109
      self.queue.push( video );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   110
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   111
      var //satisfy lint
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   112
       mIn = media["in"],
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   113
       mOut = media["out"];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   114
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   115
      // Push the in/out points into sequence ioVideos
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   116
      self.inOuts.ofVideos.push({
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   117
        "in": mIn !== undefined && typeof mIn === "number" ?  mIn : 1,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   118
        "out": mOut !== undefined && typeof mOut === "number" ? mOut : 0
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   119
      });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   120
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   121
      self.inOuts.ofVideos[ idx ]["out"] = self.inOuts.ofVideos[ idx ]["out"] || self.inOuts.ofVideos[ idx ]["in"] + 2;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   122
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   123
      // Set the sources
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   124
      video.src = !rprotocol.test( media.src ) ? lochref + media.src : media.src;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   125
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   126
      // Set some squence specific data vars
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   127
      video.setAttribute("data-sequence-owner", parent );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   128
      video.setAttribute("data-sequence-guid", self.seqId );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   129
      video.setAttribute("data-sequence-id", idx );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   130
      video.setAttribute("data-sequence-clip", [ self.inOuts.ofVideos[ idx ]["in"], self.inOuts.ofVideos[ idx ]["out"] ].join(":") );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   131
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   132
      // Append the video to the parent element
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   133
      self.parent.appendChild( video );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   134
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   135
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   136
      self.playlist.push( Popcorn("#" + video.id ) );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   137
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   138
    });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   139
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   140
    self.inOuts.ofVideos.forEach(function( obj ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   141
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   142
      var clipDuration = obj["out"] - obj["in"],
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   143
          offs = {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   144
            "in": clipOffset,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   145
            "out": clipOffset + clipDuration
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   146
          };
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   147
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   148
      self.inOuts.ofClips.push( offs );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   149
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   150
      clipOffset = offs["out"];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   151
    });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   152
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   153
    Popcorn.forEach( this.queue, function( media, idx ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   154
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   155
      function canPlayThrough( event ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   156
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   157
        // If this is idx zero, use it as dimension for all
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   158
        if ( !idx ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   159
          self.dims.width = media.videoWidth;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   160
          self.dims.height = media.videoHeight;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   161
        }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   162
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   163
        // -0.2 prevents trackEvents from firing when they trigger on a clips in value
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   164
        media.currentTime = self.inOuts.ofVideos[ idx ]["in"] - 0.2;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   165
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   166
        media.removeEventListener( "canplaythrough", canPlayThrough, false );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   167
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   168
        return true;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   169
      }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   170
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   171
      // Hook up event oners for managing special playback
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   172
      media.addEventListener( "canplaythrough", canPlayThrough, false );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   173
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   174
      // TODO: consolidate & DRY
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   175
      media.addEventListener( "play", function( event ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   176
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   177
        self.playing = true;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   178
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   179
      }, false );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   180
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   181
      media.addEventListener( "pause", function( event ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   182
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   183
        self.playing = false;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   184
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   185
      }, false );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   186
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   187
      media.addEventListener( "timeupdate", function( event ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   188
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   189
        var target = event.srcElement || event.target,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   190
            seqIdx = +(  (target.dataset && target.dataset.sequenceId) || target.getAttribute("data-sequence-id") ),
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   191
            floor = Math.floor( media.currentTime );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   192
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   193
        if ( self.times.last !== floor &&
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   194
              seqIdx === self.active ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   195
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   196
          self.times.last = floor;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   197
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   198
          if ( floor === self.inOuts.ofVideos[ seqIdx ]["out"] ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   199
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   200
            Popcorn.sequence.cycle.call( self, seqIdx );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   201
          }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   202
        }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   203
      }, false );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   204
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   205
      media.addEventListener( "ended", function( event ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   206
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   207
        var target = event.srcElement || event.target,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   208
            seqIdx = +(  (target.dataset && target.dataset.sequenceId) || target.getAttribute("data-sequence-id") );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   209
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   210
        Popcorn.sequence.cycle.call( self, seqIdx );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   211
      }, false );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   212
    });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   213
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   214
    return this;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   215
  };
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   216
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   217
  Popcorn.sequence.init.prototype = Popcorn.sequence.prototype;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   218
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   219
  Popcorn.sequence.cycle = function( fromIdx, toIdx ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   220
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   221
    if ( !this.queue ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   222
      Popcorn.error("Popcorn.sequence.cycle is not a public method");
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   223
    }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   224
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   225
    // no cycle needed, bail
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   226
    if ( fromIdx === toIdx ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   227
      return this;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   228
    }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   229
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   230
    // Localize references
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   231
    var queue = this.queue,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   232
        ioVideos = this.inOuts.ofVideos,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   233
        current = queue[ fromIdx ],
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   234
        nextIdx, next, clip;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   235
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   236
    // Popcorn instances
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   237
    var $popnext,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   238
        $popprev;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   239
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   240
    nextIdx = typeof toIdx === "number" ? toIdx : fromIdx + 1;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   241
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   242
    // Reset queue
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   243
    if ( !queue[ nextIdx ] ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   244
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   245
      nextIdx = 0;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   246
      this.playlist[ fromIdx ].pause();
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   247
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   248
    } else {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   249
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   250
      next = queue[ nextIdx ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   251
      clip = ioVideos[ nextIdx ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   252
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   253
      // Constrain dimentions
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   254
      /*
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   255
      Popcorn.extend( next, {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   256
        width: this.dims.width,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   257
        height: this.dims.height
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   258
      });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   259
      */
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   260
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   261
      $popnext = this.playlist[ nextIdx ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   262
      $popprev = this.playlist[ fromIdx ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   263
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   264
      current.pause();
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   265
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   266
      this.active = nextIdx;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   267
      this.times.last = clip["in"] - 1;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   268
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   269
      // Hide the currently ending video
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   270
      current.style.display = "none";
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   271
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   272
      // Show the next video in the sequence
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   273
      next.style.display = "";
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   274
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   275
      // Play the next video in the sequence
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   276
      $popnext.currentTime( clip["in"] );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   277
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   278
      $popnext.play();
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   279
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   280
      // Trigger custom cycling event hook
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   281
      this.trigger( "cycle", {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   282
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   283
        position: {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   284
          previous: fromIdx,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   285
          current: nextIdx
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   286
        }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   287
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   288
      });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   289
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   290
      this.cycling = false;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   291
    }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   292
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   293
    return this;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   294
  };
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   295
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   296
  var excludes = [ "timeupdate", "play", "pause" ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   297
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   298
  // Sequence object prototype
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   299
  Popcorn.extend( Popcorn.sequence.prototype, {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   300
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   301
    // Returns Popcorn object from sequence at index
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   302
    eq: function( idx ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   303
      return this.playlist[ idx ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   304
    },
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   305
    // Remove a sequence from it's playback display container
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   306
    remove: function() {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   307
      this.parent.innerHTML = null;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   308
    },
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   309
    // Returns Clip object from sequence at index
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   310
    clip: function( idx ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   311
      return this.inOuts.ofVideos[ idx ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   312
    },
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   313
    // Returns sum duration for all videos in sequence
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   314
    duration: function() {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   315
      var ret = 0,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   316
          seq = this.inOuts.ofClips,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   317
          idx = 0;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   318
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   319
      for ( ; idx < seq.length; idx++ ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   320
        ret += seq[ idx ]["out"] - seq[ idx ]["in"];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   321
      }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   322
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   323
      return ret;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   324
    },
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   325
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   326
    // Returns sum duration for n first videos in sequences
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   327
    durationSeqs: function(n) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   328
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   329
      var ret = 0,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   330
          seq = this.inOuts.ofClips,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   331
          idx = 0;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   332
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   333
      for ( ; idx < n; idx++ ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   334
        ret += seq[ idx ]["out"] - seq[ idx ]["in"];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   335
      }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   336
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   337
      return ret;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   338
    },
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   339
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   340
    play: function() {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   341
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   342
      /*
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   343
      var c = Math.round( this.queue[ this.active ].currentTime );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   344
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   345
      if ( ( ( this.queue.length - 1 ) === this.active ) &&
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   346
           ( this.inOuts[ "ofVideos" ][ this.active ][ "out" ] >= Math.round( this.queue[ this.active ].currentTime ) ) )
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   347
      {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   348
        this.jumpTo( 0 );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   349
      } else */{
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   350
        this.queue[ this.active ].play();
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   351
      }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   352
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   353
      return this;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   354
    },
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   355
    // Pause the sequence
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   356
    pause: function() {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   357
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   358
      this.queue[ this.active ].pause();
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   359
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   360
      return this;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   361
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   362
    },
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   363
    // Attach an event to a single point in time
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   364
    cue: function ( time, fn ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   365
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   366
      var index = this.active;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   367
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   368
      this.inOuts.ofClips.forEach(function( off, idx ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   369
        if ( time >= off["in"] && time <= off["out"] ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   370
          index = idx;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   371
        }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   372
      });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   373
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   374
      //offsetBy = time - self.inOuts.ofVideos[ index ].in;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   375
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   376
      time += this.inOuts.ofVideos[ index ]["in"] - this.inOuts.ofClips[ index ]["in"];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   377
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   378
      // Cue up the callback on the correct popcorn instance
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   379
      this.playlist[ index ].cue( time, fn );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   380
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   381
      return this;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   382
    },
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   383
    // Binds event handlers that fire only when all
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   384
    // videos in sequence have heard the event
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   385
    on: function( type, callback ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   386
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   387
      var self = this,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   388
          seq = this.playlist,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   389
          total = seq.length,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   390
          count = 0,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   391
          fnName;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   392
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   393
      if ( !callback ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   394
        callback = Popcorn.nop;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   395
      }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   396
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   397
      // Handling for DOM and Media events
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   398
      if ( Popcorn.Events.Natives.indexOf( type ) > -1 ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   399
        Popcorn.forEach( seq, function( video ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   400
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   401
          video.on( type, function( event ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   402
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   403
            event.active = self;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   404
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   405
            if ( excludes.indexOf( type ) > -1 ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   406
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   407
              callback.call( video, event );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   408
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   409
            } else {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   410
              if ( ++count === total ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   411
                callback.call( video, event );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   412
              }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   413
            }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   414
          });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   415
        });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   416
      } else {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   417
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   418
        // If no events registered with this name, create a cache
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   419
        if ( !this.events[ type ] ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   420
          this.events[ type ] = {};
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   421
        }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   422
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   423
        // Normalize a callback name key
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   424
        fnName = callback.name || Popcorn.guid( "__" + type );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   425
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   426
        // Store in event cache
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   427
        this.events[ type ][ fnName ] = callback;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   428
      }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   429
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   430
      // Return the sequence object
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   431
      return this;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   432
    },
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   433
    off: function( type, name ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   434
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   435
      var seq = this.playlist;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   436
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   437
      if ( Popcorn.Events.Natives.indexOf( type ) > -1 ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   438
        Popcorn.forEach( seq, function( video ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   439
          video.off( type, name );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   440
        });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   441
      } else {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   442
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   443
        this.events[ type ] = null;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   444
      }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   445
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   446
      return this;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   447
    },
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   448
    emit: function( type, data ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   449
      var self = this;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   450
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   451
      // Handling for DOM and Media events
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   452
      if ( Popcorn.Events.Natives.indexOf( type ) > -1 ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   453
        //  find the active video and trigger api events on that video.
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   454
        return;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   455
      } else {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   456
        // Only proceed if there are events of this type
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   457
        // currently registered on the sequence
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   458
        if ( this.events[ type ] ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   459
          Popcorn.forEach( this.events[ type ], function( callback, name ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   460
            callback.call( self, { type: type }, data );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   461
          });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   462
        }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   463
      }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   464
      return this;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   465
    },
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   466
    currentTime: function() {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   467
      var index = this.active,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   468
          currentTime = 0;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   469
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   470
      this.inOuts.ofClips.forEach(function( off, idx ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   471
        if ( idx < index ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   472
          currentTime += this.inOuts.ofVideos[ idx ]["out"] - this.inOuts.ofVideos[ idx ]["in"];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   473
        }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   474
      }, this );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   475
      currentTime += this.playlist[ index ].currentTime() - this.inOuts.ofVideos[ index ]["in"];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   476
      return currentTime;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   477
    },
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   478
    jumpTo: function( time ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   479
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   480
      if ( time < 0 || time > this.duration() ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   481
        return this;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   482
      }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   483
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   484
      var index, found, real, curInOuts;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   485
          offsetTime = 0;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   486
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   487
      found = false;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   488
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   489
      this.inOuts.ofClips.forEach(function( off, idx ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   490
        var inOuts = this.inOuts;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   491
        if ( !found ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   492
          if ( (time >= inOuts.ofClips[ idx ]["in"] &&
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   493
                time <= inOuts.ofClips[ idx ]["out"]) ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   494
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   495
            found = true;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   496
            index = idx;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   497
            real = ( time - offsetTime ) + inOuts.ofVideos[ idx ]["in"];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   498
          } else {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   499
            offsetTime += inOuts.ofClips[ idx ]["out"] - offsetTime;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   500
          }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   501
        }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   502
      }, this );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   503
      Popcorn.sequence.cycle.call( this, this.active, index );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   504
      curInOuts = this.inOuts.ofVideos[ index ]
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   505
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   506
      // Jump to the calculated time in the clip, making sure it's in the correct range
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   507
      this.playlist[ index ].currentTime( real >= curInOuts["in"] && real <= curInOuts["out"] ? real : curInOuts["in"] );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   508
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   509
      return this;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   510
    }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   511
  });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   512
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   513
  [ ["exec", "cue"], ["listen", "on"], ["unlisten", "off"], ["trigger", "emit"] ].forEach(function( remap ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   514
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   515
    Popcorn.sequence.prototype[ remap[0] ] = Popcorn.sequence.prototype[ remap[1] ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   516
  })
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   517
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   518
  Popcorn.forEach( Popcorn.manifest, function( obj, plugin ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   519
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   520
    // Implement passthrough methods to plugins
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   521
    Popcorn.sequence.prototype[ plugin ] = function( options ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   522
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   523
      var videos = {}, assignTo = [],
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   524
          idx, off, inOuts, inIdx, outIdx,
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   525
          keys, clip, clipInOut, clipRange;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   526
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   527
      for ( idx = 0; idx < this.inOuts.ofClips.length; idx++  ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   528
        // store reference
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   529
        off = this.inOuts.ofClips[ idx ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   530
        // array to test against
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   531
        inOuts = range( off["in"], off["out"] );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   532
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   533
        inIdx = inOuts.indexOf( options.start );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   534
        outIdx = inOuts.indexOf( options.end );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   535
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   536
        if ( inIdx > -1 ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   537
          videos[ idx ] = Popcorn.extend( {}, off, {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   538
            start: inOuts[ inIdx ],
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   539
            clipIdx: inIdx
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   540
          });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   541
        }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   542
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   543
        if ( outIdx > -1 ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   544
          videos[ idx ] = Popcorn.extend( {}, off, {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   545
            end: inOuts[ outIdx ],
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   546
            clipIdx: outIdx
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   547
          });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   548
        }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   549
      }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   550
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   551
      keys = Object.keys( videos ).map(function( val ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   552
                return +val;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   553
              });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   554
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   555
      assignTo = range( keys[ 0 ], keys[ 1 ] );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   556
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   557
      for ( idx = 0; idx < assignTo.length; idx++ ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   558
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   559
        var compile = {},
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   560
        play = assignTo[ idx ],
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   561
        vClip = videos[ play ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   562
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   563
        if ( vClip ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   564
          // has instructions
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   565
          clip = this.inOuts.ofVideos[ play ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   566
          clipInOut = vClip.clipIdx;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   567
          clipRange = range( clip["in"], clip["out"] );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   568
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   569
          if ( vClip.start ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   570
            compile.start = clipRange[ clipInOut ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   571
            compile.end = clipRange[ clipRange.length - 1 ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   572
          }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   573
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   574
          if ( vClip.end ) {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   575
            compile.start = clipRange[ 0 ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   576
            compile.end = clipRange[ clipInOut ];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   577
          }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   578
        } else {
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   579
          compile.start = this.inOuts.ofVideos[ play ]["in"];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   580
          compile.end = this.inOuts.ofVideos[ play ]["out"];
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   581
        }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   582
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   583
        // Call the plugin on the appropriate Popcorn object in the playlist
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   584
        // Merge original options object & compiled (start/end) object into
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   585
        // a new object
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   586
        this.playlist[ play ][ plugin ](
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   587
          Popcorn.extend( {}, options, compile )
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   588
        );
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   589
      }
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   590
      // Return the sequence object
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   591
      return this;
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   592
    };
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   593
  });
Edwin Razafimahatratra <edwin@robotalismsoft.com>
parents: 18
diff changeset
   594
})( this, Popcorn );