var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; ///<reference path="../../base/BaseClass.ts" /> ///<reference path="../MediaTracker.ts" /> ///<reference path="../IMediaTrackerConfigOptions.ts" /> ///<reference path="../../debug.ts" /> ///<reference path="../../lib-definitions/jwplayer.d.ts" /> var econda; (function (econda) { var media; (function (media) { var helper; (function (helper) { /** * Helper to setup trackig for jwplayer. * <a target="blank" href="http://www.longtailvideo.com/jw-player/">http://www.longtailvideo.com/jw-player/</a> * * * Example: * <!-- video will be placed here --> * <div id="myElement">Loading the player...</div> * * <script type="text/javascript"> * var myPlayer = jwplayer("myElement").setup({ * file: "./media-files/movies/trailer.mp4" * }); * * // setup econda video tracking * * // enable debug output * econda.debug.setEnabled(true); * * // disable real server requests for this demo page * econda.media.transport.configure({ * type: "direct", * disabled: true * }); * * // Setup player tracker * var trackingHelper = new econda.media.helper.JwPlayerTracker({ * player: myPlayer, * tracker: {content: "/Examples/JwPlayer Example"} * }); * * </script> * * @class econda.media.helper.JwPlayerTracker * @extends econda.base.BaseClass */ var JwPlayerTracker = (function (_super) { __extends(JwPlayerTracker, _super); function JwPlayerTracker(cfg) { _super.call(this); /** * @cfg {econda.media.MediaTracker/Object} tracker Reference to tracker object or config options for a new tracker object. * @accessor */ this._tracker = null; /** * @cfg {Object} player Reference to jw player instance element * @accessor */ this._player = null; this.__defaultProperty = "player"; /** * Reference to element where we can get duration etc... * video or source tag. * @private * @property {Object} ve */ this._ve = null; /** * True as soon as we could read infos from player object. * (Duration, etc...) * @private * @property {Boolean} playerDataLoaded */ this._playerDataLoaded = false; /** * Data we wrote or have to write to tracker object * @private * @property {Object} trackerData */ this._trackerData = {}; if (cfg instanceof JwPlayerTracker) { return cfg; } this.initConfig(cfg); } JwPlayerTracker.prototype.getTracker = function () { return this._tracker; }; JwPlayerTracker.prototype.setTracker = function (tracker) { this._tracker = new econda.media.MediaTracker(tracker); // write cached data to tracker object this.updateTrackerData(); return this; }; JwPlayerTracker.prototype.getPlayer = function () { return this._player; }; JwPlayerTracker.prototype.setPlayer = function (jwplayer) { if (!jwplayer) { econda.debug.error("No player object given."); return this; } this._player = jwplayer; this.addEventListeners(); return this; }; /** * Helper function to update tracker properties. * We can't do this directly because the tracker might be set * at a later time. You can call this function without parameters * to write all stored data to tracker. * * @method * @private * @param {String} property Property name to update * @param {Mixed} value Value to assign */ JwPlayerTracker.prototype.updateTrackerData = function (property, value) { if (typeof property != 'undefined') { this._trackerData[property] = value; } if (typeof this._tracker != 'undefined') { this._tracker.set(this._trackerData); } return this; }; /** * Add event listeners to jwplayer * @method * @private */ JwPlayerTracker.prototype.addEventListeners = function () { var cmp = this; var p = this._player; p.onReady(function () { cmp.handleReadyEvent.apply(cmp, arguments); }); p.onPlay(function () { cmp.handlePlayEvent.apply(cmp, arguments); }); p.onPause(function () { cmp.handlePauseEvent.apply(cmp, arguments); }); p.onSeek(function () { cmp.handleSeekEvent.apply(cmp, arguments); }); p.onComplete(function () { cmp.handleCompleteEvent.apply(cmp, arguments); }); return this; }; /** * Handles the players loadeddata event * @method * @private */ JwPlayerTracker.prototype.handleReadyEvent = function () { econda.debug.log("got onReady event"); this.updateTrackerData("duration", this._player.getDuration()); this._playerDataLoaded = true; // tracker should have all data now, so initialize it. if (this._tracker) { this._tracker.init(); } }; /** * Handle video "play" events * @method * @private */ JwPlayerTracker.prototype.handlePlayEvent = function () { var t = this._tracker, p = this._player; econda.debug.log("got play event"); if (t) { t.setDuration(p.getDuration()); t.setState("playing", p.getPosition()); } }; /** * Handle video "seek" events * @method * @private * @param {Object} arguments {position: position, offset: new position} */ JwPlayerTracker.prototype.handleSeekEvent = function (args) { var t = this._tracker, p = this._player; econda.debug.log("got seek event to " + args.offset); if (t) { // t.setState("paused", arguments.position); FIXME t.setState("playing", args.offset); } }; /** * Handle video "pause" events * @method * @private * @param {Object} event Event object */ JwPlayerTracker.prototype.handlePauseEvent = function (event) { var t = this._tracker; econda.debug.log("got pause event"); if (t) { t.setState("paused", this._player.getPosition()); } }; /** * Handle video "ended" events * @method * @private * @param {Object} event Event object */ JwPlayerTracker.prototype.handleCompleteEvent = function (event) { var t = this._tracker; econda.debug.log("got completed event"); if (t) { t.setState("stopped", this._player.getPosition()); } }; return JwPlayerTracker; }(econda.base.BaseClass)); helper.JwPlayerTracker = JwPlayerTracker; })(helper = media.helper || (media.helper = {})); })(media = econda.media || (econda.media = {})); })(econda || (econda = {}));