From 4cbd302d1ea7c4b315228706b7a942f2635142d8 Mon Sep 17 00:00:00 2001 From: Alex Wilde Date: Thu, 16 Jul 2015 18:43:47 +0200 Subject: [PATCH] Use an existing player if present when video changes. See original issue https://github.com/brandly/angular-youtube-embed/issues/46 Fix adapted from https://github.com/brandly/angular-youtube-embed/pull/48 --- src/angular-youtube-embed.js | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/angular-youtube-embed.js b/src/angular-youtube-embed.js index 514c7c2..97dfd58 100644 --- a/src/angular-youtube-embed.js +++ b/src/angular-youtube-embed.js @@ -186,13 +186,34 @@ angular.module('youtube-embed', ['ng']) } function loadPlayer () { - if (scope.videoId || scope.playerVars.list) { - if (scope.player && typeof scope.player.destroy === 'function') { - scope.player.destroy(); + // If present, use an existing player + if(scope.player && scope.player.getIframe()) { + var playerVars = ( playerVars ? playerVars : angular.copy(scope.playerVars) ); + playerVars.start = playerVars.start || scope.urlStartTime; + playerVars.end = playerVars.end || scope.urlEndTime; + + // Use cueVideoById() instead of loadVideoById() so the video doesn't + // start to play automatically. + if (scope.videoId) { + scope.player.cueVideoById({ + videoId:scope.videoId, + startSeconds:playerVars.start, + endSeconds:playerVars.end + }); } - + else if(scope.playerVars.list) { + scope.player.cuePlaylist({ + playlist:scope.playerVars.list, + startSeconds:playerVars.start, + endSeconds:playerVars.end + }); + } + } + // Otherwise, create a new player + else if(scope.videoId || scope.playerVars.list) { scope.player = createPlayer(); } + }; var stopWatchingReady = scope.$watch(