diff options
-rw-r--r-- | src/controls.ts | 23 | ||||
-rw-r--r-- | src/fullscreen_credits.ts | 17 | ||||
-rw-r--r-- | src/index.ts | 2 | ||||
-rw-r--r-- | src/logger.ts | 5 | ||||
-rw-r--r-- | src/player.ts | 16 | ||||
-rw-r--r-- | src/wait_element.ts | 16 | ||||
-rw-r--r-- | src/watch_credits.ts | 49 | ||||
-rw-r--r-- | tsconfig.json | 1 |
8 files changed, 103 insertions, 26 deletions
diff --git a/src/controls.ts b/src/controls.ts new file mode 100644 index 0000000..ad8f47c --- /dev/null +++ b/src/controls.ts @@ -0,0 +1,23 @@ +import logger from './logger'; +import wait_element from './wait_element'; + + +const controls = { + hide: function() { + logger.debug('hide():', 'Hiding controls'); + + wait_element('.PlayerControlsNeo__layout.PlayerControlsNeo__layout--active') + .then(function(controls) { + logger.debug('hide():', 'Controls:', controls); + + controls + .classList + .replace( + 'PlayerControlsNeo__layout--active', + 'PlayerControlsNeo__layout--inactive' + ); + }); + } +}; + +export default controls; diff --git a/src/fullscreen_credits.ts b/src/fullscreen_credits.ts index d8b68b9..9844bb3 100644 --- a/src/fullscreen_credits.ts +++ b/src/fullscreen_credits.ts @@ -1,4 +1,5 @@ -import with_player from './player'; +import controls from './controls'; +import wait_element from './wait_element'; function init_mutation_observer (player) { @@ -24,12 +25,7 @@ function init_mutation_observer (player) { // .classList // .add('PlayerControlsNeo__bottom-controls--faded'); - document.querySelector('.PlayerControlsNeo__layout.PlayerControlsNeo__layout--active') - .classList - .replace( - 'PlayerControlsNeo__layout--active', - 'PlayerControlsNeo__layout--inactive' - ); + controls.hide(); // .OriginalsPostPlay-BackgroundTrailer .BackToBrowse @@ -48,7 +44,8 @@ function init_mutation_observer (player) { } export default function init () { - with_player().then(function(player) { - init_mutation_observer(player); - }); + wait_element('.NFPlayer.nf-player-container') + .then(function(player) { + init_mutation_observer(player); + }); } diff --git a/src/index.ts b/src/index.ts index 504a7d7..0097f62 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,8 @@ import fullscreen_credits from './fullscreen_credits'; +import watch_credits from './watch_credits'; import { styles } from './styles'; fullscreen_credits(); +watch_credits(); styles(); diff --git a/src/logger.ts b/src/logger.ts new file mode 100644 index 0000000..d03b6f8 --- /dev/null +++ b/src/logger.ts @@ -0,0 +1,5 @@ +export default { + debug(...args) { + console.debug('NoSkip:', ...args); + } +}; diff --git a/src/player.ts b/src/player.ts deleted file mode 100644 index ea0e541..0000000 --- a/src/player.ts +++ /dev/null @@ -1,16 +0,0 @@ -export default function with_player (): Promise<HTMLElement> { - return new Promise(function(resolve) { - const interval = setInterval( - function() { - const player = document.querySelector('.NFPlayer.nf-player-container'); - - if (player) { - clearInterval(interval); - - resolve(player); - } - }, - 1000 - ); - }); -} diff --git a/src/wait_element.ts b/src/wait_element.ts new file mode 100644 index 0000000..f24b891 --- /dev/null +++ b/src/wait_element.ts @@ -0,0 +1,16 @@ +export default function wait_element (selector: string): Promise<Element> { + return new Promise(function(resolve) { + const interval = setInterval( + function() { + const element = document.querySelector(selector); + + if (element) { + clearInterval(interval); + + resolve(element); + } + }, + 1000 + ); + }); +} diff --git a/src/watch_credits.ts b/src/watch_credits.ts new file mode 100644 index 0000000..3aba520 --- /dev/null +++ b/src/watch_credits.ts @@ -0,0 +1,49 @@ +import controls from './controls'; +import logger from './logger'; +import wait_element from './wait_element'; + + +// const watch_credits_button = document.querySelector('[data-uia="watch-credits-seamless-button"]'); + + + +function init_mutation_observer (controls) { + var observer = new MutationObserver(function(mutation_list) { + for (var i = 0; i < mutation_list.length; i++) { + var mutation = mutation_list[i]; + var element = mutation.target as HTMLElement; + + var watch_credits_button: HTMLButtonElement = element.querySelector( + '[data-uia="watch-credits-seamless-button"]' + ); + + if (watch_credits_button) { + logger.debug('found Watch Credits button', watch_credits_button); + + var pointer_event = new PointerEvent('pointerdown', { bubbles: true }); + watch_credits_button.dispatchEvent(pointer_event); + + controls.hide(); + + return; + } + } + }); + + observer.observe( + controls, + { + childList: true, + subtree: true + } + ); +} + +export default function init () { + wait_element('.PlayerControlsNeo__all-controls') + .then(function(controls) { + logger.debug('Controls element:', controls); + + init_mutation_observer(controls); + }); +} diff --git a/tsconfig.json b/tsconfig.json index c521338..a6a912e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,6 +5,7 @@ "outDir": "./build", "sourceMap": true, "lib": [ + "DOM", "ES2015" ] }, |