diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/index.ts | 4 | ||||
| -rw-r--r-- | src/seamless.ts | 73 | ||||
| -rw-r--r-- | src/styles.ts | 2 | 
3 files changed, 78 insertions, 1 deletions
| diff --git a/src/index.ts b/src/index.ts index 4d3a951..237d232 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -// Copyright (c) 2020  Teddy Wing +// Copyright (c) 2020–2021  Teddy Wing  //  // This file is part of Immersive.  // @@ -17,6 +17,7 @@  import fullscreen_credits from './fullscreen_credits';  import logger from './logger'; +import seamless from './seamless';  import styles from './styles';  import watch_credits from './watch_credits'; @@ -27,6 +28,7 @@ function main () {  	styles();  	fullscreen_credits();  	watch_credits(); +	seamless();  } diff --git a/src/seamless.ts b/src/seamless.ts new file mode 100644 index 0000000..50595d9 --- /dev/null +++ b/src/seamless.ts @@ -0,0 +1,73 @@ +// Copyright (c) 2021  Teddy Wing +// +// This file is part of Immersive. +// +// Immersive is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Immersive is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Immersive. If not, see <https://www.gnu.org/licenses/>. + +import logger from './logger'; +import wait_element from './wait_element'; + + +// Hide the cursor when seamless credits are played. +function init_mutation_observer (player) { +	const observer = new MutationObserver(function(mutation_list) { +		for (var i = 0; i < mutation_list.length; i++) { +			const mutation = mutation_list[i]; +			const player = mutation.target as HTMLElement; + +			const seamless_controls = document.querySelector( +				'.SeamlessControls--container' +			); + +			if (seamless_controls) { +				logger.debug('seamless', 'init_mutation_observer()', 'Handling seamless'); +				const style_el = document.createElement('style'); + +				// Hide the cursor. +				document.head.appendChild(style_el); + +				const stylesheet = style_el.sheet as CSSStyleSheet; + +				stylesheet.insertRule(` +					body { +						cursor: none !important; +					}`, +					stylesheet.cssRules.length +				); + +				document.body.onmousemove = function() { +					document.head.removeChild(style_el); +				} + +				return; +			} +		} +	}); + +	observer.observe( +		player, +		{ +			childList: true, +			subtree: true +		} +	); +} + +// Initialise the mutation observer when the video player becomes available. +export default function init () { +	wait_element('.watch-video--player-view') +		.then(function(player) { +			init_mutation_observer(player); +		}); +} diff --git a/src/styles.ts b/src/styles.ts index 3661fff..2b6ba24 100644 --- a/src/styles.ts +++ b/src/styles.ts @@ -28,9 +28,11 @@ export default function styles () {  	stylesheet.insertRule(`  		/* "Back to Browse" button that appears when credits are minimised. */  		.OriginalsPostPlay-BackgroundTrailer .BackToBrowse, +		.watch-video--seamless-back,  		/* Promo that appears during credis */  		.OriginalsPostPlay-BackgroundTrailer, +		.SeamlessControls--background-artwork-visible,  		/* Age rating. */  		.player-view-childrens, | 
