diff options
author | Sam Potts <me@sampotts.me> | 2017-06-04 15:50:47 +1000 |
---|---|---|
committer | Sam Potts <me@sampotts.me> | 2017-06-04 15:50:47 +1000 |
commit | a49d77afab490f1945f31558feb2454f780866c1 (patch) | |
tree | a055b689b4405b870b34244372dcfc0cef4ce73b /src/js | |
parent | 7daa08c32f9a85512e4ff946fcbb572bf4bb1c7b (diff) | |
download | plyr-a49d77afab490f1945f31558feb2454f780866c1.tar.lz plyr-a49d77afab490f1945f31558feb2454f780866c1.tar.xz plyr-a49d77afab490f1945f31558feb2454f780866c1.zip |
Source change fix
Diffstat (limited to 'src/js')
-rw-r--r-- | src/js/plyr.js | 61 |
1 files changed, 35 insertions, 26 deletions
diff --git a/src/js/plyr.js b/src/js/plyr.js index 459bc6fd..1d3f7e93 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -1194,6 +1194,7 @@ var player = this; var timers = {}; var api = {}; + player.ready = false; // Get the media element player.media = media; @@ -1282,7 +1283,6 @@ if (utils.is.string(element)) { utils.removeElement(player.elements[element]); player.elements[element] = null; - } else { utils.removeElement(element); } @@ -3389,9 +3389,6 @@ return; } - // Remove ready class hook - player.ready = false; - // Stop playback player.stop(); @@ -3410,7 +3407,7 @@ player.embed = null; // Remove media - removeElement('media'); + removeElement(player.media); // Remove the old captions removeElement('captions'); @@ -4111,6 +4108,8 @@ // Everything done function ready() { + player.ready = true; + // Ready event at end of execution stack trigger(player.elements.container, 'ready', true); @@ -4209,7 +4208,7 @@ player.elements.container = utils.wrap(target, utils.createElement('div')); // Cache original element state for .destroy() - player.original = target.cloneNode(true); + player.elements.original = target.cloneNode(true); // Allow focus to be captured player.elements.container.setAttribute('tabindex', 0); @@ -5007,28 +5006,29 @@ // http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory Player.prototype.destroy = function(callback, restore) { var player = this; + // Type specific stuff switch (player.type) { case 'youtube': // Clear timers - window.clearInterval(player.timers.buffering); - window.clearInterval(player.timers.playing); + window.clearInterval(player.core.timers.buffering); + window.clearInterval(player.core.timers.playing); // Destroy YouTube API player.embed.destroy(); // Clean up - cleanUp(); + done(); break; case 'vimeo': // Destroy Vimeo API // then clean up (wait, to prevent postmessage errors) - player.embed.unload().then(cleanUp); + player.embed.unload().then(done); // Vimeo does not always return - window.setTimeout(cleanUp, 200); + window.setTimeout(done, 200); break; @@ -5038,35 +5038,44 @@ player.core.toggleNativeControls(true); // Clean up - cleanUp(); + done(); break; } - function cleanUp() { + function done() { + // Bail if already destroyed + if (!player.ready) { + return; + } + // Default to restore original element if (!utils.is.boolean(restore)) { restore = true; } - // Callback - if (utils.is.function(callback)) { - callback.call(player.original); - } - - // Bail if we don't need to restore the original element - if (!restore) { - return; - } + // Reset overflow (incase destroyed while in fullscreen) + document.body.style.overflow = ''; // Replace the container with the original element provided - player.elements.container.parentNode.replaceChild(player.original, player.elements.container); + if (restore) { + var parent = player.elements.container.parentNode; - // Reset overflow (incase destroyed while fullscreen) - document.body.style.overflow = ''; + if (utils.is.htmlElement(parent)) { + parent.replaceChild(player.elements.original, player.elements.container); + } + } + + // Remove ready state + player.ready = false; // Event - player.core.trigger(player.original, 'destroyed', true); + player.core.trigger(player.elements.original, 'destroyed', true); + + // Callback + if (utils.is.function(callback)) { + callback.call(player.elements.original); + } } // Allow chaining |