diff -r 61c384dda19e -r d35ad8111c5e src/js/libs/popcorn.code.js --- a/src/js/libs/popcorn.code.js Thu May 03 17:52:52 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,182 +0,0 @@ -// PLUGIN: Code - -(function ( Popcorn ) { - - /** - * Code Popcorn Plug-in - * - * Adds the ability to run arbitrary code (JavaScript functions) according to video timing. - * - * @param {Object} options - * - * Required parameters: start, end, template, data, and target. - * Optional parameter: static. - * - * start: the time in seconds when the mustache template should be rendered - * in the target div. - * - * end: the time in seconds when the rendered mustache template should be - * removed from the target div. - * - * onStart: the function to be run when the start time is reached. - * - * onFrame: [optional] a function to be run on each paint call - * (e.g., called ~60 times per second) between the start and end times. - * - * onEnd: [optional] a function to be run when the end time is reached. - * - * Example: - var p = Popcorn('#video') - - // onStart function only - .code({ - start: 1, - end: 4, - onStart: function( options ) { - // called on start - } - }) - - // onStart + onEnd only - .code({ - start: 6, - end: 8, - onStart: function( options ) { - // called on start - }, - onEnd: function ( options ) { - // called on end - } - }) - - // onStart, onEnd, onFrame - .code({ - start: 10, - end: 14, - onStart: function( options ) { - // called on start - }, - onFrame: function ( options ) { - // called on every paint frame between start and end. - // uses mozRequestAnimationFrame, webkitRequestAnimationFrame, - // or setTimeout with 16ms window. - }, - onEnd: function ( options ) { - // called on end - } - }); - * - */ - - Popcorn.plugin( "code" , function( options ) { - var running = false; - - // Setup a proper frame interval function (60fps), favouring paint events. - var step = (function() { - - var buildFrameRunner = function( runner ) { - return function( f, options ) { - - var _f = function() { - running && f(); - running && runner( _f ); - }; - - _f(); - }; - }; - - // Figure out which level of browser support we have for this - if ( window.webkitRequestAnimationFrame ) { - return buildFrameRunner( window.webkitRequestAnimationFrame ); - } else if ( window.mozRequestAnimationFrame ) { - return buildFrameRunner( window.mozRequestAnimationFrame ); - } else { - return buildFrameRunner( function( f ) { - window.setTimeout( f, 16 ); - }); - } - - })(); - - if ( !options.onStart || typeof options.onStart !== "function" ) { - - if ( Popcorn.plugin.debug ) { - throw new Error( "Popcorn Code Plugin Error: onStart must be a function." ); - } - options.onStart = Popcorn.nop; - } - - if ( options.onEnd && typeof options.onEnd !== "function" ) { - - if ( Popcorn.plugin.debug ) { - throw new Error( "Popcorn Code Plugin Error: onEnd must be a function." ); - } - options.onEnd = undefined; - } - - if ( options.onFrame && typeof options.onFrame !== "function" ) { - - if ( Popcorn.plugin.debug ) { - throw new Error( "Popcorn Code Plugin Error: onFrame must be a function." ); - } - options.onFrame = undefined; - } - - return { - start: function( event, options ) { - options.onStart( options ); - - if ( options.onFrame ) { - running = true; - step( options.onFrame, options ); - } - }, - - end: function( event, options ) { - if ( options.onFrame ) { - running = false; - } - - if ( options.onEnd ) { - options.onEnd( options ); - } - } - }; - }, - { - about: { - name: "Popcorn Code Plugin", - version: "0.1", - author: "David Humphrey (@humphd)", - website: "http://vocamus.net/dave" - }, - options: { - start: { - elem: "input", - type: "text", - label: "In" - }, - end: { - elem: "input", - type: "text", - label: "Out" - }, - onStart: { - elem: "input", - type: "function", - label: "onStart" - }, - onFrame: { - elem: "input", - type: "function", - label: "onFrame" - }, - onEnd: { - elem: "input", - type: "function", - label: "onEnd" - } - } - }); -})( Popcorn );