remove controller when video is removed from DOM

Closes #119.
This commit is contained in:
Ilya Grigorik
2016-07-20 22:46:55 -07:00
parent 2342ff6f56
commit 707c0c3f16

View File

@@ -166,15 +166,23 @@ chrome.extension.sendMessage({}, function(response) {
return false; return false;
}, true); }, true);
function checkForVideo(node, parent) { function checkForVideo(node, parent, added) {
if (node.nodeName === 'VIDEO') { if (node.nodeName === 'VIDEO') {
if (!node.classList.contains('vsc-initialized')) { if (added) {
new tc.videoController(node, parent); if (!node.classList.contains('vsc-initialized')) {
new tc.videoController(node, parent);
}
} else {
if (node.classList.contains('vsc-initialized')) {
var id = node.dataset['vscid'];
document.querySelector(`div[data-vscid="${id}"]`).remove();
}
} }
} else if (node.children != undefined) { } else if (node.children != undefined) {
for (var i = 0; i < node.children.length; i++) { for (var i = 0; i < node.children.length; i++) {
checkForVideo(node.children[i], checkForVideo(node.children[i],
node.children[i].parentNode || parent); node.children[i].parentNode || parent,
added);
} }
} }
} }
@@ -183,8 +191,12 @@ chrome.extension.sendMessage({}, function(response) {
forEach.call(mutation.addedNodes, function(node) { forEach.call(mutation.addedNodes, function(node) {
if (typeof node === "function") if (typeof node === "function")
return; return;
checkForVideo(node, node.parentNode || mutation.target, true);
checkForVideo(node, node.parentNode || mutation.target); })
forEach.call(mutation.removedNodes, function(node) {
if (typeof node === "function")
return;
checkForVideo(node, node.parentNode || mutation.target, false);
}) })
}); });
}); });