aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/index.ts4
-rw-r--r--src/seamless.ts73
-rw-r--r--src/styles.ts2
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,