Merge pull request #174 from Serraniel/feature/autoplay-focus-change
Feature/autoplay focus change
This commit is contained in:
commit
bf14f46d30
|
@ -44,6 +44,12 @@
|
||||||
<input type="checkbox" id="playerAutoplayAfterScreenshot" data-default-value="true" />
|
<input type="checkbox" id="playerAutoplayAfterScreenshot" data-default-value="true" />
|
||||||
<label for="playerAutoplayAfterScreenshot">Autoplay after screenshots</label><br />
|
<label for="playerAutoplayAfterScreenshot">Autoplay after screenshots</label><br />
|
||||||
|
|
||||||
|
<input type="checkbox" id="playerAutopauseAfterFocusLost" data-default-value="true" />
|
||||||
|
<label for="playerAutopauseAfterFocusLost">Autopause after tab unfocused</label><br />
|
||||||
|
|
||||||
|
<input type="checkbox" id="playerAutoplayAfterFocusGain" data-default-value="true" />
|
||||||
|
<label for="playerAutoplayAfterFocusGain">Autoplay after tab focused</label><br />
|
||||||
|
|
||||||
<h3>Watch2gether</h3>
|
<h3>Watch2gether</h3>
|
||||||
<input type="checkbox" id="w2gDisplayCharacterCounter" data-default-value="true" />
|
<input type="checkbox" id="w2gDisplayCharacterCounter" data-default-value="true" />
|
||||||
<label for="w2gDisplayCharacterCounter">Display character count in chat</label><br />
|
<label for="w2gDisplayCharacterCounter">Display character count in chat</label><br />
|
||||||
|
|
|
@ -14,6 +14,8 @@ export const SETTINGS_animeLanguageDisplay = 'animeLanguageDisplay';
|
||||||
export const SETTINGS_requestBeautifyPage = 'requestBeautifyPage';
|
export const SETTINGS_requestBeautifyPage = 'requestBeautifyPage';
|
||||||
// player
|
// player
|
||||||
export const SETTINGS_playerAutoplayAfterScreenshot = 'playerAutoplayAfterScreenshot';
|
export const SETTINGS_playerAutoplayAfterScreenshot = 'playerAutoplayAfterScreenshot';
|
||||||
|
export const SETTINGS_playerAutopauseAfterFocusLost = 'playerAutopauseAfterFocusLost';
|
||||||
|
export const SETTINGS_playerAutoplayAfterFocusGain = 'playerAutoplayAfterFocusGain';
|
||||||
// w2g
|
// w2g
|
||||||
export const SETTINGS_w2gDisplayCharacterCounter = 'w2gDisplayCharacterCounter';
|
export const SETTINGS_w2gDisplayCharacterCounter = 'w2gDisplayCharacterCounter';
|
||||||
class Configuration {
|
class Configuration {
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
import { getGlobalConfiguration, SETTINGS_playerAutoplayAfterScreenshot } from '../configuration/configuration';
|
import { getGlobalConfiguration,
|
||||||
|
SETTINGS_playerAutoplayAfterScreenshot,
|
||||||
|
SETTINGS_playerAutopauseAfterFocusLost,
|
||||||
|
SETTINGS_playerAutoplayAfterFocusGain } from '../configuration/configuration';
|
||||||
import * as core from '../utils/aniwatchCore';
|
import * as core from '../utils/aniwatchCore';
|
||||||
import * as helper from '../utils/helpers';
|
import * as helper from '../utils/helpers';
|
||||||
|
|
||||||
const SCREENSHOT_TOOLTIP_ID = 'anilyr-screenshots-tooltip';
|
const SCREENSHOT_TOOLTIP_ID = 'anilyr-screenshots-tooltip';
|
||||||
const PLAYER_ID = 'player';
|
const PLAYER_ID = 'player';
|
||||||
|
let resumePlayerOnVisible: boolean;
|
||||||
|
|
||||||
export function init(): void {
|
export function init(): void {
|
||||||
getGlobalConfiguration().getProperty(SETTINGS_playerAutoplayAfterScreenshot, value => {
|
getGlobalConfiguration().getProperty(SETTINGS_playerAutoplayAfterScreenshot, value => {
|
||||||
|
@ -16,6 +20,18 @@ export function init(): void {
|
||||||
}, "^/anime/[0-9]*/[0-9]*$");
|
}, "^/anime/[0-9]*/[0-9]*$");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
getGlobalConfiguration().getProperty(SETTINGS_playerAutopauseAfterFocusLost, value => {
|
||||||
|
if (value) {
|
||||||
|
core.registerScript((node: Node) => {
|
||||||
|
window.addEventListener('visibilitychange', observeTabFocus, false);
|
||||||
|
}, "^/anime/[0-9]*/[0-9]*$");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
getGlobalConfiguration().getProperty(SETTINGS_playerAutoplayAfterFocusGain, value => {
|
||||||
|
resumePlayerOnVisible = value;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function observeScreenshotTooltip(tooltip: HTMLElement): void {
|
function observeScreenshotTooltip(tooltip: HTMLElement): void {
|
||||||
|
@ -38,6 +54,21 @@ function observeScreenshotTooltip(tooltip: HTMLElement): void {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function observeTabFocus(): void {
|
||||||
|
let docState = document.visibilityState;
|
||||||
|
let playerElement = findPlayerElement();
|
||||||
|
if (docState === 'hidden') {
|
||||||
|
if (helper.assigned(playerElement)) {
|
||||||
|
pausePlayer(playerElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (docState === 'visible' && resumePlayerOnVisible) {
|
||||||
|
if (helper.assigned(playerElement)) {
|
||||||
|
resumePlayer(playerElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function findPlayerElement(): HTMLVideoElement {
|
function findPlayerElement(): HTMLVideoElement {
|
||||||
let playerCandidate = document.getElementById(PLAYER_ID);
|
let playerCandidate = document.getElementById(PLAYER_ID);
|
||||||
if (playerCandidate instanceof HTMLVideoElement) {
|
if (playerCandidate instanceof HTMLVideoElement) {
|
||||||
|
@ -49,4 +80,8 @@ function findPlayerElement(): HTMLVideoElement {
|
||||||
|
|
||||||
function resumePlayer(player: HTMLVideoElement) {
|
function resumePlayer(player: HTMLVideoElement) {
|
||||||
player.play();
|
player.play();
|
||||||
|
}
|
||||||
|
|
||||||
|
function pausePlayer(player: HTMLVideoElement) {
|
||||||
|
player.pause()
|
||||||
}
|
}
|
Loading…
Reference in a new issue