diff --git a/out/PiPer.safariextz b/out/PiPer.safariextz index 3d266f1..5385a01 100644 Binary files a/out/PiPer.safariextz and b/out/PiPer.safariextz differ diff --git a/src/scripts/main.js b/src/scripts/main.js index 495dbc1..94398cf 100644 --- a/src/scripts/main.js +++ b/src/scripts/main.js @@ -22,7 +22,7 @@ const COMPILED = false; const BUTTON_ID = 'PIPButton'; -let /** boolean */ buttonAdded = false; +let /** ?Element */ button = null; let /** ?PIPResource */ currentResource = null; const log = function(message) { @@ -30,38 +30,43 @@ const log = function(message) { } const addButton = function(/** Element */ parent) { - const button = document.createElement(currentResource.buttonElementType || 'button'); - - button.id = BUTTON_ID; - button.title = 'Open Picture in Picture mode'; - if (currentResource.buttonStyle) button.style.cssText = currentResource.buttonStyle; - if (currentResource.buttonClassName) button.className = currentResource.buttonClassName; - - const image = document.createElement('img'); - image.src = safari.extension.baseURI + 'images/' + (currentResource.buttonImage || 'default') + '.svg'; - image.style.width = image.style.height = '100%'; - if (currentResource.buttonScale) image.style.transform = 'scale(' + currentResource.buttonScale + ')'; - button.appendChild(image); - - if (currentResource.buttonHoverStyle) { - const style = document.createElement('style'); - const css = '#' + BUTTON_ID + ':hover{' + currentResource.buttonHoverStyle + '}'; - style.appendChild(document.createTextNode(css)); - button.appendChild(style); - } - - button.addEventListener('click', function(event) { - event.preventDefault(); - - const video = /** @type {?HTMLVideoElement} */ (currentResource.videoElement()); - if (!video) { - log('Unable to find video'); - return; + + if (!button) { + button = document.createElement(currentResource.buttonElementType || 'button'); + + button.id = BUTTON_ID; + button.title = 'Open Picture in Picture mode'; + if (currentResource.buttonStyle) button.style.cssText = currentResource.buttonStyle; + if (currentResource.buttonClassName) button.className = currentResource.buttonClassName; + + const image = document.createElement('img'); + image.src = safari.extension.baseURI + 'images/' + (currentResource.buttonImage || 'default') + '.svg'; + image.style.width = image.style.height = '100%'; + if (currentResource.buttonScale) image.style.transform = 'scale(' + currentResource.buttonScale + ')'; + button.appendChild(image); + + if (currentResource.buttonHoverStyle) { + const style = document.createElement('style'); + const css = '#' + BUTTON_ID + ':hover{' + currentResource.buttonHoverStyle + '}'; + style.appendChild(document.createTextNode(css)); + button.appendChild(style); } - - const presentationMode = 'inline' === video.webkitPresentationMode ? 'picture-in-picture' : 'inline'; - video.webkitSetPresentationMode(presentationMode); - }); + + button.addEventListener('click', function(event) { + event.preventDefault(); + + const video = /** @type {?HTMLVideoElement} */ (currentResource.videoElement()); + if (!video) { + log('Unable to find video'); + return; + } + + const presentationMode = 'inline' === video.webkitPresentationMode ? 'picture-in-picture' : 'inline'; + video.webkitSetPresentationMode(presentationMode); + }); + + log('Picture in Picture button created'); + } const referenceNode = currentResource.buttonInsertBefore ? currentResource.buttonInsertBefore(parent) : null; parent.insertBefore(button, referenceNode); @@ -69,18 +74,13 @@ const addButton = function(/** Element */ parent) { const buttonObserver = function() { - if (buttonAdded) { - if (document.getElementById(BUTTON_ID)) return; - log('Button removed'); - buttonAdded = false; - } + if (document.getElementById(BUTTON_ID)) return; const buttonParent = currentResource.buttonParent(); if (buttonParent) { addButton(buttonParent); if (currentResource.buttonDidAppear) currentResource.buttonDidAppear(); - log('Button added'); - buttonAdded = true; + log('Picture in Picture button added to webpage'); } }; diff --git a/update.plist b/update.plist index 94598e4..ea80798 100644 --- a/update.plist +++ b/update.plist @@ -8,9 +8,9 @@ CFBundleIdentifier com.amarcus.safari.piper CFBundleShortVersionString - 0.1.3 + 0.2.0 CFBundleVersion - 24 + 25 Developer Identifier BQ6Q24MF9X URL