diff --git a/CHANGELOG.md b/CHANGELOG.md
index a9dacd9..0c57212 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
# Changelog
+__v2.1.0 - Dec 2, 2016__
+
+* Exposed default settings `$.tubeplayer.defaults.settings`
+* New player event: "onPlayerLoaded", _complementing_ $.tubeplayer.defaults.afterReady
+
__v2.0.0 - Dec 2, 2016__
* Removed code to handle flash player (due to deprecation); instead - uses iframe player exclusively
diff --git a/README.md b/README.md
index 9f354b8..feafada 100644
--- a/README.md
+++ b/README.md
@@ -15,20 +15,15 @@ In your web page:
```html
-
+
@@ -39,7 +34,7 @@ jQuery(document).ready(function(){
### TubePlayer Plugin Defaults
```javascript
-{
+$.tubeplayer.defaults.settings = {
// Plugin init params
width: 480, // the width of the player
@@ -74,6 +69,7 @@ jQuery(document).ready(function(){
onPlayerPaused: function(){}, // player returns a state of paused
onPlayerBuffering: function(){}, // player returns a state of buffering
onPlayerCued: function(){}, // player returns a state of cued
+ onPlayerLoaded: function(){}, // player is initially loaded and attached to the DOM
onQualityChange: function(quality){}, // player quality changes
onRateChange: function(rate){}, // player rate changes
@@ -107,6 +103,7 @@ onPlayerPlaying
onPlayerPaused
onPlayerBuffering
onPlayerCued
+onPlayerLoaded
onQualityChange
onRateChange
diff --git a/bower.json b/bower.json
index 20bdd20..022e21a 100644
--- a/bower.json
+++ b/bower.json
@@ -1,6 +1,6 @@
{
"name": "jquery-tubeplayer-plugin",
- "version": "2.0.0",
+ "version": "2.1.0",
"homepage": "https://github.com/nirvanatikku/jQuery-TubePlayer-Plugin",
"authors": [
"Nirvana Tikku "
diff --git a/dist/jquery.tubeplayer.js b/dist/jquery.tubeplayer.js
index b2a765d..087722c 100644
--- a/dist/jquery.tubeplayer.js
+++ b/dist/jquery.tubeplayer.js
@@ -1,4 +1,4 @@
-/*! jQuery TubePlayer - Simplified YouTube Player Management - v2.0.0-beta - 2016-12-02
+/*! jQuery TubePlayer - Simplified YouTube Player Management - v2.1.0 - 2016-12-02
* https://github.com/nirvanatikku/jQuery-TubePlayer-Plugin
* Copyright (c) 2016 Nirvana Tikku; Licensed MIT */
(function($) {
@@ -123,7 +123,8 @@
playing: {},
paused: {},
buffering: {},
- cued: {}
+ cued: {},
+ loaded: {}
},
onErr: {
defaultError: {},
@@ -138,7 +139,7 @@
* plugin to work without providing any parameters. They
* are merged with the users options.
*/
- var defaults = {
+ $.tubeplayer.defaults.settings = {
// public facing
width: 480,
@@ -169,6 +170,7 @@
onUnMute: function() {},
// functions called when events are triggered from the youtube player itself
+ onPlayerLoaded: function(){},
onPlayerUnstarted: function() {},
onPlayerEnded: function() {},
onPlayerPlaying: function() {},
@@ -225,7 +227,7 @@
'id' : ids ? ids : ''
});
$this.replaceWith(newDiv);
- var new_input = $.extend({}, defaults, settings, input);
+ var new_input = $.extend({}, $.tubeplayer.defaults.settings, settings, input);
TP.init(newDiv, new_input);
}
} else {
@@ -280,7 +282,7 @@
if ($player.hasClass(TUBEPLAYER_CLASS)) {
return $player;
}
- var o = $.extend({}, defaults, opts);
+ var o = $.extend({}, $.tubeplayer.defaults.settings, opts);
o.playerID += "-" + guid();
$player.addClass(TUBEPLAYER_CLASS).data(OPTS, o);
for (var event in PlayerEvents){
@@ -342,6 +344,7 @@
'onReady': function(evt) {
TP.ytplayers[o.playerID] = evt.target;
var $player = $(evt.target.getIframe()).parents("." + TUBEPLAYER_CLASS);
+ $player.tubeplayer('opts').onPlayerLoaded.call($player);
$.tubeplayer.defaults.afterReady($player);
},
'onPlaybackQualityChange': $.tubeplayer.defaults.qualityChange(o.playerID),
@@ -385,6 +388,7 @@
dp.paused[ID] = o.onPlayerPaused;
dp.buffering[ID] = o.onPlayerBuffering;
dp.cued[ID] = o.onPlayerCued;
+ dp.loaded[ID] = o.onPlayerLoaded;
// default onQualityChange
d.onQualityChange[ID] = o.onQualityChange;
@@ -592,7 +596,7 @@
delete TP.ytplayers[p.opts.playerID];
// cleanup callback handler references..
var d = $.tubeplayer.defaults;
- var events = ['unstarted', 'ended', 'playing', 'paused', 'buffering', 'cued'];
+ var events = ['unstarted', 'ended', 'playing', 'paused', 'buffering', 'cued', 'loaded'];
$.each(events, function(i, event) {
delete d.onPlayer[event][p.opts.playerID];
});
diff --git a/dist/jquery.tubeplayer.min.js b/dist/jquery.tubeplayer.min.js
index 891cbee..653c4f7 100644
--- a/dist/jquery.tubeplayer.min.js
+++ b/dist/jquery.tubeplayer.min.js
@@ -1,4 +1,4 @@
-/*! jQuery TubePlayer - Simplified YouTube Player Management - v2.0.0-beta - 2016-12-02
+/*! jQuery TubePlayer - Simplified YouTube Player Management - v2.1.0 - 2016-12-02
* https://github.com/nirvanatikku/jQuery-TubePlayer-Plugin
* Copyright (c) 2016 Nirvana Tikku; Licensed MIT */
-(function(e){"use strict";function t(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=0|16*Math.random(),a="x"==e?t:8|3&t;return a.toString(16)})}var a=".tubeplayer",r="jquery-youtube-tubeplayer",n="opts"+a,o={inited:!1,ytplayers:{},inits:[],iframeScriptInited:!1,State:{UNSTARTED:-1,ENDED:0,PLAYING:1,PAUSED:2,BUFFERING:3,CUED:5},Error:{BAD_INIT:0,INVALID_PARAM:2,NOT_FOUND:100,NOT_EMBEDDABLE:101,CANT_PLAY:150}};e.tubeplayer={TubePlayer:o},e.tubeplayer.defaults={afterReady:function(){},stateChange:function(t){var a=this.onPlayer;return function(r){var n=e("#"+t).parent();switch("object"==typeof r&&(r=r.data),r){case o.State.UNSTARTED:return a.unstarted[t].call(n);case o.State.ENDED:return a.ended[t].call(n);case o.State.PLAYING:return a.playing[t].call(n);case o.State.PAUSED:return a.paused[t].call(n);case o.State.BUFFERING:return a.buffering[t].call(n);case o.State.CUED:return a.cued[t].call(n);default:return null}}},onError:function(t){var a=this.onErr;return function(r){var n=e("#"+t).parent();switch("object"==typeof r&&(r=r.data),r){case o.Error.BAD_INIT:case o.Error.INVALID_PARAM:case o.Error.CANT_PLAY:return a.invalidParameter[t].call(n);case o.Error.NOT_FOUND:return a.notFound[t].call(n);case o.Error.NOT_EMBEDDABLE:return a.notEmbeddable[t].call(n);default:return a.defaultError[t].call(n)}}},qualityChange:function(t){var a=this;return function(r){var n=e("#"+t).parent();return"object"==typeof r&&(r=r.data),a.onQualityChange[t].call(n,r)}},rateChange:function(t){var a=this;return function(r){var n=e("#"+t).parent();return"object"==typeof r&&(r=r.data),a.onRateChange[t].call(n,r)}},onQualityChange:{},onRateChange:{},onPlayer:{unstarted:{},ended:{},playing:{},paused:{},buffering:{},cued:{}},onErr:{defaultError:{},notFound:{},notEmbeddable:{},invalidParameter:{}}};var l={width:480,height:270,allowFullScreen:"true",initialVideo:"DkoeNLuMbcI",start:0,preferredQuality:"default",controls:1,showRelated:!1,playsinline:!1,annotations:!0,autoPlay:!1,loop:0,color:"red",showinfo:!1,modestbranding:!0,protocol:"https:"==window.location.protocol?"https":"http",allowScriptAccess:"always",playerID:"tubeplayer-player-container",onPlay:function(){},onPause:function(){},onStop:function(){},onSeek:function(){},onMute:function(){},onUnMute:function(){},onPlayerUnstarted:function(){},onPlayerEnded:function(){},onPlayerPlaying:function(){},onPlayerPaused:function(){},onPlayerBuffering:function(){},onPlayerCued:function(){},onQualityChange:function(){},onRateChange:function(){},onError:function(){},onErrorNotFound:function(){},onErrorNotEmbeddable:function(){},onErrorInvalidParameter:function(){}};e.fn.tubeplayer=function(t,r){var n=e(this),i=typeof t;return 0===arguments.length||"object"===i?n.each(function(){if(n=e(this),"IFRAME"==n.prop("tagName")){var a=/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/,r=n.attr("src").match(a);if(r&&11==r[7].length){var i={initialVideo:r[7]},u=n.attr("class"),y=n.attr("id");n.attr("width")&&(i.width=n.attr("width")),n.attr("height")&&(i.height=n.attr("height")),i.allowFullScreen=void 0!==n.attr("allowfullscreen")?"true":!1;var d=e("").attr({"class":u?u:"",id:y?y:""});n.replaceWith(d);var s=e.extend({},l,i,t);o.init(d,s)}}else o.init(e(this),t)}):"string"===i?n.triggerHandler(t+a,r!==void 0?r:null):void 0};var i=function(e){return function(t,a){var r=o.getPkg(t);if(r.ytplayer){var n=e(t,a,r);return n===void 0&&(n=r.$player),n}return r.$player}};e.tubeplayer.getPlayers=function(){return o.ytplayers},o.init=function(i,y){if(i.hasClass(r))return i;var d=e.extend({},l,y);d.playerID+="-"+t(),i.addClass(r).data(n,d);for(var s in u)i.bind(s+a,i,u[s]);return o.initDefaults(e.tubeplayer.defaults,d),e("").attr("id",d.playerID).appendTo(i),o.initPlayer(i,d),i},o.getPkg=function(e){var t=e.data,a=t.data(n),r=o.ytplayers[a.playerID];return{$player:t,opts:a,ytplayer:r}},o.iframeReady=function(t){return o.inits.push(function(){new YT.Player(t.playerID,{videoId:t.initialVideo,width:t.width,height:t.height,playerVars:{autoplay:t.autoPlay?1:0,controls:t.controls?t.controls:0,loop:t.loop?1:0,playlist:t.playlist?t.playlist:0,rel:t.showRelated?1:0,fs:t.allowFullScreen?1:0,showinfo:t.showinfo?1:0,modestbranding:t.modestbranding?1:0,iv_load_policy:t.annotations?1:3,start:t.start,color:t.color,playsinline:t.playsinline,origin:window.location.origin},events:{onReady:function(a){o.ytplayers[t.playerID]=a.target;var n=e(a.target.getIframe()).parents("."+r);e.tubeplayer.defaults.afterReady(n)},onPlaybackQualityChange:e.tubeplayer.defaults.qualityChange(t.playerID),onPlaybackRateChange:e.tubeplayer.defaults.rateChange(t.playerID),onStateChange:e.tubeplayer.defaults.stateChange(t.playerID),onError:e.tubeplayer.defaults.onError(t.playerID)}})}),o.inits.length>=1&&!o.inited?function(){for(var e=0;o.inits.length>e;e++)o.inits[e]();o.inited=!0}:(o.inited&&o.inits.pop()(),window.onYouTubePlayerAPIReady)},o.initDefaults=function(e,t){var a=t.playerID,r=e.onPlayer;r.unstarted[a]=t.onPlayerUnstarted,r.ended[a]=t.onPlayerEnded,r.playing[a]=t.onPlayerPlaying,r.paused[a]=t.onPlayerPaused,r.buffering[a]=t.onPlayerBuffering,r.cued[a]=t.onPlayerCued,e.onQualityChange[a]=t.onQualityChange,e.onRateChange[a]=t.onRateChange;var n=e.onErr;n.defaultError[a]=t.onError,n.notFound[a]=t.onErrorNotFound,n.notEmbeddable[a]=t.onErrorNotEmbeddable,n.invalidParameter[a]=t.onErrorInvalidParameter},o.initPlayer=function(e,t){if(!o.iframeScriptInited){var a=document.createElement("script");a.src=t.protocol+"://www.youtube.com/iframe_api";var r=document.getElementsByTagName("script")[0];r.parentNode.insertBefore(a,r),o.iframeScriptInited=!0}window.onYouTubePlayerAPIReady=o.iframeReady(t)},o.getVideoIDFromURL=function(e){e=e||"";var t=e.indexOf("?"),a=e.substring(t,e.length),r=a.indexOf("v=");if(r>-1){var n=a.indexOf("&",r);return-1===n&&(n=a.length),a.substring(r+"v=".length,n)}return""};var u={opts:i(function(e,t,a){return a.opts}),cue:i(function(e,t,a){a.ytplayer.cueVideoById(t,0,a.opts.preferredQuality)}),cuePlaylist:i(function(e,t,a){a.ytplayer.cuePlaylist(t.playlist,t.index||0,t.startSeconds||0,a.opts.preferredQuality)}),play:i(function(e,t,a){var r,n;"object"==typeof t?(r=t.id,n=t.time):t!==void 0&&(r=t,n=0),r?a.ytplayer.loadVideoById({videoId:r,startSeconds:n,suggestedQuality:a.opts.preferredQuality}):a.ytplayer.playVideo(),a.opts.onPlay(t)}),playPlaylist:i(function(e,t,a){var r,n,o;if("object"==typeof t){var l=void 0!==t.length;r=l?t:t.playlist,o=l?0:t.time||0,n=l?0:t.index||0}else t!==void 0&&(r=t,o=0,n=0);r&&(a.ytplayer.loadPlaylist(r,n,o,a.opts.preferredQuality),a.opts.onPlay(t))}),next:i(function(e,t,a){a.ytplayer.nextVideo()}),previous:i(function(e,t,a){a.ytplayer.previousVideo()}),playVideoAt:i(function(e,t,a){a.ytplayer.playVideoAt(t)}),pause:i(function(e,t,a){a.ytplayer.pauseVideo(),a.opts.onPause(a)}),stop:i(function(e,t,a){a.ytplayer.stopVideo(),a.opts.onStop(a)}),seek:i(function(e,t,a){if(/:/.test(t)){var r=t.split(":").reverse();t=0;for(var n=0;r.length>n;n++)t+=Math.pow(60,n)*(0|r[n])}a.ytplayer.seekTo(t,!0),a.opts.onSeek(t)}),mute:i(function(e,t,a){a.$player.attr("data-prev-mute-volume",a.ytplayer.getVolume()),a.ytplayer.mute(),a.opts.onMute(a)}),unmute:i(function(e,t,a){a.ytplayer.unMute(),a.ytplayer.setVolume(a.$player.attr("data-prev-mute-volume")||50),a.opts.onUnMute()}),isMuted:i(function(e,t,a){return a.ytplayer.isMuted()}),volume:i(function(e,t,a){return void 0===t?a.ytplayer.getVolume():(a.ytplayer.setVolume(t),a.$player.attr("data-prev-mute-volume",a.ytplayer.getVolume()),void 0)}),quality:i(function(e,t,a){return void 0===t?a.ytplayer.getPlaybackQuality():(a.ytplayer.setPlaybackQuality(t),void 0)}),playbackRate:i(function(e,t,a){return void 0===t?a.ytplayer.getPlaybackRate():(a.ytplayer.setPlaybackRate(t),void 0)}),data:i(function(e,t,a){var r={},n=a.ytplayer;return r.videoLoadedFraction=n.getVideoLoadedFraction(),r.bytesLoaded=n.getVideoBytesLoaded(),r.bytesTotal=n.getVideoBytesTotal(),r.startBytes=n.getVideoStartBytes(),r.state=n.getPlayerState(),r.currentTime=n.getCurrentTime(),r.duration=n.getDuration(),r.videoURL=n.getVideoUrl(),r.playlist={videoIDs:n.getPlaylist(),currentIndex:n.getPlaylistIndex()},r.videoEmbedCode=n.getVideoEmbedCode(),r.videoID=o.getVideoIDFromURL(r.videoURL),r.availableQualityLevels=n.getAvailableQualityLevels(),r.availablePlaybackRates=n.getAvailablePlaybackRates(),r}),videoId:i(function(e,t,a){return o.getVideoIDFromURL(a.ytplayer.getVideoUrl())}),size:i(function(t,a,r){a!==void 0&&a.width&&a.height&&(r.ytplayer.setSize(a.width,a.height),e(r.ytplayer).css(a))}),destroy:i(function(t,l,i){i.$player.removeClass(r).data(n,null).unbind(a).html(""),delete o.ytplayers[i.opts.playerID];var u=e.tubeplayer.defaults,y=["unstarted","ended","playing","paused","buffering","cued"];return e.each(y,function(e,t){delete u.onPlayer[t][i.opts.playerID]}),y=["defaultError","notFound","notEmbeddable","invalidParameter"],e.each(y,function(e,t){delete u.onErr[t][i.opts.playerID]}),delete u.onQualityChange[i.opts.playerID],delete u.onRateChange[i.opts.playerID],"destroy"in i.ytplayer&&i.ytplayer.destroy(),e(i.ytplayer).remove(),null}),player:i(function(e,t,a){return a.ytplayer})}})(jQuery);
\ No newline at end of file
+(function(e){"use strict";function t(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=0|16*Math.random(),a="x"==e?t:8|3&t;return a.toString(16)})}var a=".tubeplayer",r="jquery-youtube-tubeplayer",n="opts"+a,o={inited:!1,ytplayers:{},inits:[],iframeScriptInited:!1,State:{UNSTARTED:-1,ENDED:0,PLAYING:1,PAUSED:2,BUFFERING:3,CUED:5},Error:{BAD_INIT:0,INVALID_PARAM:2,NOT_FOUND:100,NOT_EMBEDDABLE:101,CANT_PLAY:150}};e.tubeplayer={TubePlayer:o},e.tubeplayer.defaults={afterReady:function(){},stateChange:function(t){var a=this.onPlayer;return function(r){var n=e("#"+t).parent();switch("object"==typeof r&&(r=r.data),r){case o.State.UNSTARTED:return a.unstarted[t].call(n);case o.State.ENDED:return a.ended[t].call(n);case o.State.PLAYING:return a.playing[t].call(n);case o.State.PAUSED:return a.paused[t].call(n);case o.State.BUFFERING:return a.buffering[t].call(n);case o.State.CUED:return a.cued[t].call(n);default:return null}}},onError:function(t){var a=this.onErr;return function(r){var n=e("#"+t).parent();switch("object"==typeof r&&(r=r.data),r){case o.Error.BAD_INIT:case o.Error.INVALID_PARAM:case o.Error.CANT_PLAY:return a.invalidParameter[t].call(n);case o.Error.NOT_FOUND:return a.notFound[t].call(n);case o.Error.NOT_EMBEDDABLE:return a.notEmbeddable[t].call(n);default:return a.defaultError[t].call(n)}}},qualityChange:function(t){var a=this;return function(r){var n=e("#"+t).parent();return"object"==typeof r&&(r=r.data),a.onQualityChange[t].call(n,r)}},rateChange:function(t){var a=this;return function(r){var n=e("#"+t).parent();return"object"==typeof r&&(r=r.data),a.onRateChange[t].call(n,r)}},onQualityChange:{},onRateChange:{},onPlayer:{unstarted:{},ended:{},playing:{},paused:{},buffering:{},cued:{},loaded:{}},onErr:{defaultError:{},notFound:{},notEmbeddable:{},invalidParameter:{}}},e.tubeplayer.defaults.settings={width:480,height:270,allowFullScreen:"true",initialVideo:"DkoeNLuMbcI",start:0,preferredQuality:"default",controls:1,showRelated:!1,playsinline:!1,annotations:!0,autoPlay:!1,loop:0,color:"red",showinfo:!1,modestbranding:!0,protocol:"https:"==window.location.protocol?"https":"http",allowScriptAccess:"always",playerID:"tubeplayer-player-container",onPlay:function(){},onPause:function(){},onStop:function(){},onSeek:function(){},onMute:function(){},onUnMute:function(){},onPlayerLoaded:function(){},onPlayerUnstarted:function(){},onPlayerEnded:function(){},onPlayerPlaying:function(){},onPlayerPaused:function(){},onPlayerBuffering:function(){},onPlayerCued:function(){},onQualityChange:function(){},onRateChange:function(){},onError:function(){},onErrorNotFound:function(){},onErrorNotEmbeddable:function(){},onErrorInvalidParameter:function(){}},e.fn.tubeplayer=function(t,r){var n=e(this),l=typeof t;return 0===arguments.length||"object"===l?n.each(function(){if(n=e(this),"IFRAME"==n.prop("tagName")){var a=/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/,r=n.attr("src").match(a);if(r&&11==r[7].length){var l={initialVideo:r[7]},i=n.attr("class"),u=n.attr("id");n.attr("width")&&(l.width=n.attr("width")),n.attr("height")&&(l.height=n.attr("height")),l.allowFullScreen=void 0!==n.attr("allowfullscreen")?"true":!1;var d=e("").attr({"class":i?i:"",id:u?u:""});n.replaceWith(d);var y=e.extend({},e.tubeplayer.defaults.settings,l,t);o.init(d,y)}}else o.init(e(this),t)}):"string"===l?n.triggerHandler(t+a,r!==void 0?r:null):void 0};var l=function(e){return function(t,a){var r=o.getPkg(t);if(r.ytplayer){var n=e(t,a,r);return n===void 0&&(n=r.$player),n}return r.$player}};e.tubeplayer.getPlayers=function(){return o.ytplayers},o.init=function(l,u){if(l.hasClass(r))return l;var d=e.extend({},e.tubeplayer.defaults.settings,u);d.playerID+="-"+t(),l.addClass(r).data(n,d);for(var y in i)l.bind(y+a,l,i[y]);return o.initDefaults(e.tubeplayer.defaults,d),e("").attr("id",d.playerID).appendTo(l),o.initPlayer(l,d),l},o.getPkg=function(e){var t=e.data,a=t.data(n),r=o.ytplayers[a.playerID];return{$player:t,opts:a,ytplayer:r}},o.iframeReady=function(t){return o.inits.push(function(){new YT.Player(t.playerID,{videoId:t.initialVideo,width:t.width,height:t.height,playerVars:{autoplay:t.autoPlay?1:0,controls:t.controls?t.controls:0,loop:t.loop?1:0,playlist:t.playlist?t.playlist:0,rel:t.showRelated?1:0,fs:t.allowFullScreen?1:0,showinfo:t.showinfo?1:0,modestbranding:t.modestbranding?1:0,iv_load_policy:t.annotations?1:3,start:t.start,color:t.color,playsinline:t.playsinline,origin:window.location.origin},events:{onReady:function(a){o.ytplayers[t.playerID]=a.target;var n=e(a.target.getIframe()).parents("."+r);n.tubeplayer("opts").onPlayerLoaded.call(n),e.tubeplayer.defaults.afterReady(n)},onPlaybackQualityChange:e.tubeplayer.defaults.qualityChange(t.playerID),onPlaybackRateChange:e.tubeplayer.defaults.rateChange(t.playerID),onStateChange:e.tubeplayer.defaults.stateChange(t.playerID),onError:e.tubeplayer.defaults.onError(t.playerID)}})}),o.inits.length>=1&&!o.inited?function(){for(var e=0;o.inits.length>e;e++)o.inits[e]();o.inited=!0}:(o.inited&&o.inits.pop()(),window.onYouTubePlayerAPIReady)},o.initDefaults=function(e,t){var a=t.playerID,r=e.onPlayer;r.unstarted[a]=t.onPlayerUnstarted,r.ended[a]=t.onPlayerEnded,r.playing[a]=t.onPlayerPlaying,r.paused[a]=t.onPlayerPaused,r.buffering[a]=t.onPlayerBuffering,r.cued[a]=t.onPlayerCued,r.loaded[a]=t.onPlayerLoaded,e.onQualityChange[a]=t.onQualityChange,e.onRateChange[a]=t.onRateChange;var n=e.onErr;n.defaultError[a]=t.onError,n.notFound[a]=t.onErrorNotFound,n.notEmbeddable[a]=t.onErrorNotEmbeddable,n.invalidParameter[a]=t.onErrorInvalidParameter},o.initPlayer=function(e,t){if(!o.iframeScriptInited){var a=document.createElement("script");a.src=t.protocol+"://www.youtube.com/iframe_api";var r=document.getElementsByTagName("script")[0];r.parentNode.insertBefore(a,r),o.iframeScriptInited=!0}window.onYouTubePlayerAPIReady=o.iframeReady(t)},o.getVideoIDFromURL=function(e){e=e||"";var t=e.indexOf("?"),a=e.substring(t,e.length),r=a.indexOf("v=");if(r>-1){var n=a.indexOf("&",r);return-1===n&&(n=a.length),a.substring(r+"v=".length,n)}return""};var i={opts:l(function(e,t,a){return a.opts}),cue:l(function(e,t,a){a.ytplayer.cueVideoById(t,0,a.opts.preferredQuality)}),cuePlaylist:l(function(e,t,a){a.ytplayer.cuePlaylist(t.playlist,t.index||0,t.startSeconds||0,a.opts.preferredQuality)}),play:l(function(e,t,a){var r,n;"object"==typeof t?(r=t.id,n=t.time):t!==void 0&&(r=t,n=0),r?a.ytplayer.loadVideoById({videoId:r,startSeconds:n,suggestedQuality:a.opts.preferredQuality}):a.ytplayer.playVideo(),a.opts.onPlay(t)}),playPlaylist:l(function(e,t,a){var r,n,o;if("object"==typeof t){var l=void 0!==t.length;r=l?t:t.playlist,o=l?0:t.time||0,n=l?0:t.index||0}else t!==void 0&&(r=t,o=0,n=0);r&&(a.ytplayer.loadPlaylist(r,n,o,a.opts.preferredQuality),a.opts.onPlay(t))}),next:l(function(e,t,a){a.ytplayer.nextVideo()}),previous:l(function(e,t,a){a.ytplayer.previousVideo()}),playVideoAt:l(function(e,t,a){a.ytplayer.playVideoAt(t)}),pause:l(function(e,t,a){a.ytplayer.pauseVideo(),a.opts.onPause(a)}),stop:l(function(e,t,a){a.ytplayer.stopVideo(),a.opts.onStop(a)}),seek:l(function(e,t,a){if(/:/.test(t)){var r=t.split(":").reverse();t=0;for(var n=0;r.length>n;n++)t+=Math.pow(60,n)*(0|r[n])}a.ytplayer.seekTo(t,!0),a.opts.onSeek(t)}),mute:l(function(e,t,a){a.$player.attr("data-prev-mute-volume",a.ytplayer.getVolume()),a.ytplayer.mute(),a.opts.onMute(a)}),unmute:l(function(e,t,a){a.ytplayer.unMute(),a.ytplayer.setVolume(a.$player.attr("data-prev-mute-volume")||50),a.opts.onUnMute()}),isMuted:l(function(e,t,a){return a.ytplayer.isMuted()}),volume:l(function(e,t,a){return void 0===t?a.ytplayer.getVolume():(a.ytplayer.setVolume(t),a.$player.attr("data-prev-mute-volume",a.ytplayer.getVolume()),void 0)}),quality:l(function(e,t,a){return void 0===t?a.ytplayer.getPlaybackQuality():(a.ytplayer.setPlaybackQuality(t),void 0)}),playbackRate:l(function(e,t,a){return void 0===t?a.ytplayer.getPlaybackRate():(a.ytplayer.setPlaybackRate(t),void 0)}),data:l(function(e,t,a){var r={},n=a.ytplayer;return r.videoLoadedFraction=n.getVideoLoadedFraction(),r.bytesLoaded=n.getVideoBytesLoaded(),r.bytesTotal=n.getVideoBytesTotal(),r.startBytes=n.getVideoStartBytes(),r.state=n.getPlayerState(),r.currentTime=n.getCurrentTime(),r.duration=n.getDuration(),r.videoURL=n.getVideoUrl(),r.playlist={videoIDs:n.getPlaylist(),currentIndex:n.getPlaylistIndex()},r.videoEmbedCode=n.getVideoEmbedCode(),r.videoID=o.getVideoIDFromURL(r.videoURL),r.availableQualityLevels=n.getAvailableQualityLevels(),r.availablePlaybackRates=n.getAvailablePlaybackRates(),r}),videoId:l(function(e,t,a){return o.getVideoIDFromURL(a.ytplayer.getVideoUrl())}),size:l(function(t,a,r){a!==void 0&&a.width&&a.height&&(r.ytplayer.setSize(a.width,a.height),e(r.ytplayer).css(a))}),destroy:l(function(t,l,i){i.$player.removeClass(r).data(n,null).unbind(a).html(""),delete o.ytplayers[i.opts.playerID];var u=e.tubeplayer.defaults,d=["unstarted","ended","playing","paused","buffering","cued","loaded"];return e.each(d,function(e,t){delete u.onPlayer[t][i.opts.playerID]}),d=["defaultError","notFound","notEmbeddable","invalidParameter"],e.each(d,function(e,t){delete u.onErr[t][i.opts.playerID]}),delete u.onQualityChange[i.opts.playerID],delete u.onRateChange[i.opts.playerID],"destroy"in i.ytplayer&&i.ytplayer.destroy(),e(i.ytplayer).remove(),null}),player:l(function(e,t,a){return a.ytplayer})}})(jQuery);
\ No newline at end of file
diff --git a/package.json b/package.json
index f4c5e76..84c3cec 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "jquery-tubeplayer-plugin",
"title": "jQuery TubePlayer Plugin",
"description": "Simplified management of embedded YouTube players",
- "version": "2.0.0",
+ "version": "2.1.0",
"homepage": "https://github.com/nirvanatikku/jQuery-TubePlayer-Plugin",
"bugs": "https://github.com/nirvanatikku/jQuery-TubePlayer-Plugin/issues",
"author": {
diff --git a/src/tubeplayer.js b/src/tubeplayer.js
index 1fe60eb..3bae754 100644
--- a/src/tubeplayer.js
+++ b/src/tubeplayer.js
@@ -120,7 +120,8 @@
playing: {},
paused: {},
buffering: {},
- cued: {}
+ cued: {},
+ loaded: {}
},
onErr: {
defaultError: {},
@@ -135,7 +136,7 @@
* plugin to work without providing any parameters. They
* are merged with the users options.
*/
- var defaults = {
+ $.tubeplayer.defaults.settings = {
// public facing
width: 480,
@@ -166,6 +167,7 @@
onUnMute: function() {},
// functions called when events are triggered from the youtube player itself
+ onPlayerLoaded: function(){},
onPlayerUnstarted: function() {},
onPlayerEnded: function() {},
onPlayerPlaying: function() {},
@@ -222,7 +224,7 @@
'id' : ids ? ids : ''
});
$this.replaceWith(newDiv);
- var new_input = $.extend({}, defaults, settings, input);
+ var new_input = $.extend({}, $.tubeplayer.defaults.settings, settings, input);
TP.init(newDiv, new_input);
}
} else {
@@ -277,7 +279,7 @@
if ($player.hasClass(TUBEPLAYER_CLASS)) {
return $player;
}
- var o = $.extend({}, defaults, opts);
+ var o = $.extend({}, $.tubeplayer.defaults.settings, opts);
o.playerID += "-" + guid();
$player.addClass(TUBEPLAYER_CLASS).data(OPTS, o);
for (var event in PlayerEvents){
@@ -339,6 +341,7 @@
'onReady': function(evt) {
TP.ytplayers[o.playerID] = evt.target;
var $player = $(evt.target.getIframe()).parents("." + TUBEPLAYER_CLASS);
+ $player.tubeplayer('opts').onPlayerLoaded.call($player);
$.tubeplayer.defaults.afterReady($player);
},
'onPlaybackQualityChange': $.tubeplayer.defaults.qualityChange(o.playerID),
@@ -382,6 +385,7 @@
dp.paused[ID] = o.onPlayerPaused;
dp.buffering[ID] = o.onPlayerBuffering;
dp.cued[ID] = o.onPlayerCued;
+ dp.loaded[ID] = o.onPlayerLoaded;
// default onQualityChange
d.onQualityChange[ID] = o.onQualityChange;
@@ -589,7 +593,7 @@
delete TP.ytplayers[p.opts.playerID];
// cleanup callback handler references..
var d = $.tubeplayer.defaults;
- var events = ['unstarted', 'ended', 'playing', 'paused', 'buffering', 'cued'];
+ var events = ['unstarted', 'ended', 'playing', 'paused', 'buffering', 'cued', 'loaded'];
$.each(events, function(i, event) {
delete d.onPlayer[event][p.opts.playerID];
});
diff --git a/test_console/index.html b/test_console/index.html
index 22adb2b..afa49c8 100644
--- a/test_console/index.html
+++ b/test_console/index.html
@@ -48,7 +48,7 @@
@@ -483,6 +483,9 @@ Player Activity Callbacks
onPlayerCued: function(){
printPlayerUpdate("CUED (onPlayerCued)");
},
+ onPlayerLoaded: function(){
+ printPlayerUpdate("LOADED (onPlayerLoaded)");
+ },
onQualityChange: function(qual){
printPlayerUpdate("QUALITY CHANGED: " + qual +" (onQualityChange)");
},
diff --git a/tubeplayer.jquery.json b/tubeplayer.jquery.json
index cc96c67..ac732a8 100644
--- a/tubeplayer.jquery.json
+++ b/tubeplayer.jquery.json
@@ -2,7 +2,7 @@
"name": "tubeplayer",
"title": "jQuery TubePlayer - Simplified YouTube Player Management",
"description": "Simplified management of embedded YouTube players",
- "version": "2.0.0",
+ "version": "2.1.0",
"homepage": "https://github.com/nirvanatikku/jQuery-TubePlayer-Plugin",
"bugs": "https://github.com/nirvanatikku/jQuery-TubePlayer-Plugin/issues",
"author": {