diff options
-rw-r--r-- | netflix-immersive.user.js | 33 | ||||
-rw-r--r-- | src/controls.ts | 53 |
2 files changed, 86 insertions, 0 deletions
diff --git a/netflix-immersive.user.js b/netflix-immersive.user.js index 003dc97..7800d96 100644 --- a/netflix-immersive.user.js +++ b/netflix-immersive.user.js @@ -30,6 +30,8 @@ var controls = { // Hide playback controls. hide: function () { logger_1.default.debug('hide():', 'Hiding controls'); + // When the player is activated, the mouse cursor is shown. + hide_cursor(); var controls_el = document.querySelector('.PlayerControlsNeo__layout.PlayerControlsNeo__layout--active'); logger_1.default.debug('hide():', 'Controls:', controls_el); controls_el @@ -38,6 +40,37 @@ var controls = { } }; exports.default = controls; +// Hide the cursor, which appears due to the `active` CSS class when the player +// is reactivated. +function hide_cursor() { + var style_el = document.createElement('style'); + // Hide the cursor. + function style() { + document.head.appendChild(style_el); + var stylesheet = style_el.sheet; + stylesheet.insertRule("\n\t\t\t.NFPlayer.nf-player-container.active {\n\t\t\t\tcursor: none !important;\n\t\t\t}", stylesheet.cssRules.length); + } + // When the player reappears, set it to inactive. + function set_player_inactive() { + var observer = new MutationObserver(function (mutation_list) { + for (var i = 0; i < mutation_list.length; i++) { + var mutation = mutation_list[i]; + var player = mutation.target; + if (player.classList.contains('active')) { + player.classList.replace('active', 'inactive'); + document.head.removeChild(style_el); + observer.disconnect(); + return; + } + } + }); + observer.observe(document.querySelector('.NFPlayer.nf-player-container'), { + attributeFilter: ['class'] + }); + } + set_player_inactive(); + style(); +} },{"./logger":4}],2:[function(require,module,exports){ "use strict"; diff --git a/src/controls.ts b/src/controls.ts index fe4a727..4be1752 100644 --- a/src/controls.ts +++ b/src/controls.ts @@ -23,6 +23,9 @@ const controls = { hide: function() { logger.debug('hide():', 'Hiding controls'); + // When the player is activated, the mouse cursor is shown. + hide_cursor(); + const controls_el = document.querySelector( '.PlayerControlsNeo__layout.PlayerControlsNeo__layout--active' ); @@ -38,3 +41,53 @@ const controls = { }; export default controls; + + +// Hide the cursor, which appears due to the `active` CSS class when the player +// is reactivated. +function hide_cursor () { + const style_el = document.createElement('style'); + + // Hide the cursor. + function style () { + document.head.appendChild(style_el); + + const stylesheet = style_el.sheet as CSSStyleSheet; + + stylesheet.insertRule(` + .NFPlayer.nf-player-container.active { + cursor: none !important; + }`, + stylesheet.cssRules.length + ); + } + + // When the player reappears, set it to inactive. + function set_player_inactive () { + 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; + + if (player.classList.contains('active')) { + player.classList.replace('active', 'inactive'); + + document.head.removeChild(style_el); + observer.disconnect(); + + return; + } + } + }); + + observer.observe( + document.querySelector('.NFPlayer.nf-player-container'), + { + attributeFilter: ['class'] + } + ); + } + + set_player_inactive() + style(); +} |