🏠 Home 

Crunchyroll ข้ามอัตโนมัติพร้อมการตั้งค่า

ข้ามส่วนเปิดและส่วนท้ายโดยอัตโนมัติหากมีให้。

// ==UserScript==
// @name           Crunchyroll Auto Skip with Settings
// @name:fr        Crunchyroll Saut Automatique avec Paramètres
// @name:ar        تخطي تلقائي لـ Crunchyroll مع الإعدادات
// @name:ca        Crunchyroll Auto Skip amb Configuracions
// @name:zh-CN     Crunchyroll 自动跳过设置
// @name:de        Crunchyroll Automatisches Überspringen mit Einstellungen
// @name:hi        क्रंचीरोल ऑटो स्किप सेटिंग्स के साथ
// @name:id        Crunchyroll Lewati Otomatis dengan Pengaturan
// @name:it        Crunchyroll Salta Automaticamente con Impostazioni
// @name:ja        Crunchyroll 自動スキップ設定付き
// @name:ms        Crunchyroll Langkau Auto dengan Tetapan
// @name:pl        Crunchyroll Automatyczne Pomijanie z Ustawieniami
// @name:pt-PT     Crunchyroll Pular Automático com Configurações
// @name:ru        Crunchyroll Автоматическое Пропускание с Настройками
// @name:es        Crunchyroll Salto Automático con Configuraciones
// @name:ta        க்ரஞ்சிரோல் தானியங்கி தவிர்க்கும் அமைப்புகளுடன்
// @name:te        క్రంచిరోల్ ఆటో స్కిప్ సెట్టింగులతో
// @name:th        Crunchyroll ข้ามอัตโนมัติพร้อมการตั้งค่า
// @name:tr        Crunchyroll Ayarlarla Otomatik Geçiş
// @name:vi        Crunchyroll Tự động Bỏ qua với Cài đặt
// @description    Automatically skip the intro and ending if available.
// @description:fr Sauter automatiquement l'intro et la fin si elles sont disponibles.
// @description:ar تخطي تلقائي للمقدمة والنهاية إذا كانت متوفرة.
// @description:ca Salta automàticament la introducció i el final si estan disponibles。
// @description:zh-CN 自动跳过片头和片尾(如果可用)。
// @description:de Überspringt automatisch das Intro und Ende, wenn verfügbar。
// @description:hi परिचय और अंत को स्वचालित रूप से छोड़ें, यदि उपलब्ध हो。
// @description:id Lewati intro dan akhir secara otomatis jika tersedia。
// @description:it Salta automaticamente l'intro e il finale se disponibili。
// @description:ja イントロとエンディングを自動的にスキップします(利用可能な場合)。
// @description:ms Langkau intro dan akhir secara automatik jika tersedia。
// @description:pl Automatycznie pomija intro i zakończenie, jeśli są dostępne。
// @description:pt-PT Pule automaticamente a introdução e o final, se disponível。
// @description:ru Автоматически пропускать вступление и концовку, если они доступны。
// @description:es Omite automáticamente la introducción y el final si están disponibles。
// @description:ta தொடக்கமும் முடிவும் கிடைத்தால் தானாகவே தவிர்க்கப்படும்。
// @description:te యింట్రో మరియు ఎండింగ్‌ను ఆటోమేటిక్‌గా స్కిప్ చేయండి, అందుబాటులో ఉంటే。
// @description:th ข้ามส่วนเปิดและส่วนท้ายโดยอัตโนมัติหากมีให้。
// @description:tr Giriş ve bitişi otomatik olarak atlar (eğer mevcutsa)。
// @description:vi Tự động bỏ qua phần giới thiệu và phần kết nếu có。
// @namespace    https://greasyfork.org/scripts/513644
// @version      3.3
// @author       MASTERD
// @match        *://*.crunchyroll.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=crunchyroll.com
// @grant        none
// ==/UserScript==
(function() {
'use strict';
// Langues prises en charge
const supportedLanguages = ['en', 'fr', 'ar', 'ca', 'zh', 'de', 'es', 'hi', 'id', 'it', 'ja', 'ms', 'pl', 'pt', 'ru', 'ta', 'te', 'th', 'tr', 'vi'];
const userLanguage = supportedLanguages.find(lang => navigator.language.startsWith(lang)) || 'en';
const defaultSettings = {
AutoSkipActive: true,
AutoSkipDelay: 0,
OverlayAutoSave: false,
OverlayAlertShow: true,
HistoryButton: true,
WatchlistButton: true,
ArrowLeftAutoSkip: false,
ArrowRightAutoSkip: true,
};
const storedSettings = JSON.parse(localStorage.getItem("AutoSkipParameter")) || {};
const updatedSettings = { ...defaultSettings, ...storedSettings };
localStorage.setItem("AutoSkipParameter", JSON.stringify(updatedSettings));
let settings = JSON.parse(localStorage.getItem("AutoSkipParameter"));
CleanUpdate();
let OrigineLoad = JSON.parse(localStorage.getItem("AutoSkipParameter"));
let firstLoad = true;
let mutationObserverActive = true;
let ObsSettingsButton = true, observerSkipButt = true, HisButton = true, WatButton = true;
new MutationObserver(() => {
if (ObsSettingsButton) addSettingsButton();
if (observerSkipButt) observeSkipButton();
if (HisButton) HisWatButton(document.querySelector('.erc-history-collection[data-t="history"]'), 'HistoryButton', 'HistoryButton');;
if (WatButton) HisWatButton(document.querySelector('.erc-watchlist-collection[data-t="watchlist"]'), 'WatchlistButton', 'WatchlistButton');;
}).observe(document.body, { childList: true, subtree: true });
const applyHoverFocusStyles = (element1, BackColorOn1, BackColorOff1, boxShadowOn1, boxShadowOff1, element2, BackColorOn2, BackColorOff2, boxShadowOn2, boxShadowOff2) => {
const addStyles = () => {
element1.style.backgroundColor = BackColorOn1;
element1.style.boxShadow = boxShadowOn1;
if(element2){
element2.style.backgroundColor = BackColorOn2;
element2.style.boxShadow = boxShadowOn2;
};
};
const removeStyles = () => {
element1.style.backgroundColor = BackColorOff1;
element1.style.boxShadow = boxShadowOff1;
if(element2){
element2.style.backgroundColor = BackColorOff2;
element2.style.boxShadow = boxShadowOff2;
};
};
element1.addEventListener('mouseover', addStyles);
element1.addEventListener('mouseout', removeStyles);
element1.addEventListener('focus', addStyles);
element1.addEventListener('blur', removeStyles);
};
function CleanUpdate() {
const oldKeys = ['active', 'delay', 'exsave', 'show'];
const newKeys = ['AutoSkipActive', 'AutoSkipDelay', 'OverlayAutoSave', 'OverlayAlertShow'];
const parseValue = (value) => {
if (value === '"true"') return true;
if (value === '"false"') return false;
if (!isNaN(value)) return Number(value); // Convertir en nombre si possible
return value; // Retourne la valeur telle quelle si ce n'est ni un booléen ni un nombre
};
oldKeys.forEach((key, i) => {
let value = localStorage.getItem(key);
if (value !== null) {
settings[newKeys[i]] = parseValue(value);
localStorage.removeItem(key);
}
});
Object.keys(settings).forEach((key) => {
if (!(key in defaultSettings)) {
delete settings[key];
}
});
localStorage.setItem("AutoSkipParameter", JSON.stringify(settings));
}
function addSettingsButton() {
const userActionsList = document.querySelector('.erc-user-actions');
if (userActionsList) {
const svgDiv = document.createElement('div');
svgDiv.innerHTML = `
<svg class="header-svg-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" data-t="settings-svg" aria-labelledby="settings-svg" aria-hidden="false" role="img" style="height: 2.5rem;">
<path d="M12,15.2 C10.2331429,15.2 8.8,13.7668571 8.8,12 C8.8,10.2331429 10.2331429,8.8 12,8.8 C13.7668571,8.8 15.2,10.2331429 15.2,12 C15.2,13.7668571 13.7668571,15.2 12,15.2 L12,15.2 Z M19.9691429,11.5005714 C19.9691429,11.3542857 19.9108571,11.224 19.7965714,11.1097143 C19.6822857,10.9954286 19.5622857,10.928 19.4377143,10.9062857 L18.344,10.7497143 C18.0102857,10.7085714 17.792,10.5314286 17.688,10.2182857 L17.2811429,9.21828571 C17.1348571,8.928 17.1565714,8.64571429 17.344,8.37485714 L18.0308571,7.50057143 C18.2182857,7.22971429 18.208,6.96914286 18,6.71885714 L17.2502857,6 C17.0205714,5.792 16.7702857,5.78171429 16.4994286,5.96914286 L15.6251429,6.62514286 C15.3542857,6.83314286 15.072,6.86514286 14.7817143,6.71885714 L13.7817143,6.312 C13.656,6.27085714 13.536,6.18285714 13.4217143,6.04685714 C13.3062857,5.912 13.2502857,5.78171429 13.2502857,5.656 L13.0937143,4.56228571 C13.072,4.43771429 13.0045714,4.31771429 12.8902857,4.20342857 C12.776,4.08914286 12.6457143,4.03085714 12.4994286,4.03085714 C12.3954286,4.01028571 12.2285714,4 12,4 L11.5005714,4.03085714 C11.3542857,4.03085714 11.224,4.08914286 11.1097143,4.20342857 C10.9942857,4.31771429 10.9268571,4.43771429 10.9062857,4.56228571 L10.7497143,5.656 C10.7085714,5.98971429 10.5314286,6.208 10.2194286,6.312 L9.21942857,6.71885714 C8.92685714,6.86514286 8.64571429,6.83314286 8.37485714,6.62514286 L7.50057143,5.96914286 C7.22971429,5.78171429 6.96914286,5.792 6.71885714,6 L6,6.71885714 C5.792,6.96914286 5.78171429,7.22971429 5.96914286,7.50057143 L6.62514286,8.37485714 C6.83314286,8.64685714 6.864,8.928 6.71885714,9.21942857 L6.312,10.2194286 C6.27085714,10.344 6.18171429,10.464 6.04685714,10.5782857 C5.91085714,10.6937143 5.78171429,10.7497143 5.656,10.7497143 L4.56228571,10.9062857 C4.43771429,10.928 4.31771429,10.9954286 4.20342857,11.1097143 C4.088,11.224 4.03085714,11.3542857 4.03085714,11.5005714 C4.01028571,11.6045714 4,11.7714286 4,12 L4.03085714,12.4994286 C4.03085714,12.6457143 4.088,12.776 4.20342857,12.8902857 C4.31771429,13.0057143 4.43771429,13.0731429 4.56228571,13.0937143 L5.656,13.2502857 C5.78171429,13.2502857 5.91085714,13.3074286 6.04685714,13.4217143 C6.18171429,13.5371429 6.27085714,13.656 6.312,13.7817143 L6.71885714,14.7817143 C6.864,15.0731429 6.83314286,15.3542857 6.62514286,15.6251429 L5.96914286,16.5005714 C5.78171429,16.7714286 5.76,16.9897143 5.90628571,17.1565714 C5.92685714,17.1771429 5.95314286,17.208 5.984,17.2502857 C6.016,17.2914286 6.05142857,17.3382857 6.09371429,17.3908571 C6.13485714,17.4422857 6.17714286,17.4902857 6.21828571,17.5314286 C6.26057143,17.5737143 6.30171429,17.6148571 6.344,17.656 C6.38514286,17.6982857 6.42628571,17.7394286 6.46857143,17.7817143 C6.50971429,17.8228571 6.552,17.8548571 6.59428571,17.8742857 C6.67657143,17.9588571 6.81714286,18.0205714 7.016,18.0628571 C7.21371429,18.104 7.37485714,18.0937143 7.50057143,18.0308571 L8.37485714,17.3748571 C8.64571429,17.1668571 8.92685714,17.136 9.21828571,17.2811429 L10.2182857,17.688 C10.344,17.7291429 10.464,17.8182857 10.5782857,17.9531429 C10.6925714,18.0891429 10.7497143,18.2182857 10.7497143,18.344 L10.9062857,19.4377143 C10.9268571,19.5622857 10.9942857,19.6822857 11.1097143,19.7965714 C11.224,19.9108571 11.3542857,19.968 11.4994286,19.968 C11.6034286,19.9897143 11.7702857,20 12,20 L12.4994286,19.9691429 C12.6457143,19.9691429 12.776,19.9108571 12.8902857,19.7965714 C13.0045714,19.6822857 13.072,19.5622857 13.0937143,19.4377143 L13.2502857,18.344 C13.2502857,18.2182857 13.3074286,18.0891429 13.4217143,17.9531429 C13.536,17.8182857 13.656,17.7291429 13.7817143,17.688 L14.7817143,17.2811429 C15.0731429,17.136 15.3542857,17.1668571 15.6251429,17.3748571 L16.5005714,18.0308571 C16.7702857,18.2182857 17.0308571,18.208 17.2811429,18 L18,17.2811429 C18.208,17.0308571 18.2182857,16.7714286 18.032,16.4994286 L17.344,15.6251429 C17.1565714,15.3542857 17.136,15.0731429 17.2811429,14.7817143 L17.688,13.7817143 C17.792,13.4685714 18.0102857,13.2914286 18.344,13.2502857 L19.4377143,13.0937143 C19.5622857,13.0731429 19.6822857,13.0057143 19.7965714,12.8902857 C19.9108571,12.776 19.9691429,12.6457143 19.9691429,12.4994286 C19.9897143,12.3965714 20,12.2297143 20,12 L19.9691429,11.5005714 Z"></path>
</svg>`;
svgDiv.classList.add('erc-header-svg');
const settingsButton = document.createElement('div');
settingsButton.classList.add('erc-header-tile');
settingsButton.classList.add('state-icon-only');
settingsButton.setAttribute('tabindex', '0');
settingsButton.addEventListener('keydown', (event) => {
if (event.key === ' ' || event.key === 'Enter') {
event.preventDefault();
showSettingsWindow(); // Ouvrir la fenêtre de paramètres
}
});
settingsButton.addEventListener('click', showSettingsWindow);
// Créer un nouvel élément <li> et y ajouter le bouton
const newLi = document.createElement('li');
newLi.classList.add('user-actions-item');
settingsButton.appendChild(svgDiv);
newLi.appendChild(settingsButton);
userActionsList.appendChild(newLi);
ObsSettingsButton = false;
}
}
// Fonction pour afficher la fenêtre de paramètres
function showSettingsWindow() {
const overlay = createElementWithStyles('div', {
position: 'fixed',
top: '0',
left: '0',
width: '100%',
height: '100%',
backgroundColor: 'rgba(0, 0, 0, 0.4)',
zIndex: '9994'
});
overlay.id = 'settingsOverlay';
const settingsWindow = createElementWithStyles('div', {
position: 'fixed',
top: '10%',
left: '25%',
width: '50%',
maxHeight: '80vh',
overflow: 'auto',
backgroundColor: 'white',
zIndex: '9995',
boxShadow: '0px 0px 10px rgba(0,0,0,0.5)',
borderRadius: '10px',
padding: '20px',
minWidth: '400px',
});
settingsWindow.id = 'settingsWindow';
settingsWindow.tabIndex = 0;
settingsWindow.addEventListener('mouseover', (event) => {
const target = event.target;
const activeElement = document.activeElement;
if (target === settingsWindow && activeElement.tagName !== 'INPUT' && activeElement.type !== 'text') {
settingsWindow.focus();
} else if (settingsWindow.contains(target) && target.tabIndex >= 0 && activeElement.tagName !== 'INPUT' && activeElement.type !== 'text') {
target.focus();
}
});
settingsWindow.addEventListener('keydown', (event) => {
if (document.activeElement === settingsWindow &&
(event.key === 'Tab' || event.key === 'ArrowUp' || event.key === 'ArrowLeft' || event.key === 'ArrowDown' || event.key === 'ArrowRight')) {
event.preventDefault();
closeButton.focus();
}
else if (event.key === 'Escape') {
hideSettingsWindow();
}
});
const closeButton = createButton('X', hideSettingsWindow, 1, {
fontSize: '4vw',
padding: '0.5vw',
maxWidth: '5vw',
maxHeight: '5vw',
minWidth: '5vw',
minHeight: '5vw'
});
const HeadLabelTitle = createElementWithStyles('p', {
flexGrow: '1',
whiteSpace: 'nowrap',
overflow: 'hidden',
textOverflow: 'ellipsis',
fontSize: '2vw',
color: 'rgb(255, 124, 0)',
webkitTextStroke: '1px black',
textShadow: 'rgb(255, 124, 0) 0px 0px 12px',
display: 'flex',
alignItems: 'center',
fontFamily: 'auto',
fontWeight: 'bold',
background: 'rgba(255, 255, 255, 0.2)',
backdropFilter: 'blur(0.5px)',
borderRadius: 'inherit',
padding: '10px'
}, translations[userLanguage].HeadLabelTitle);
const img = createElementWithStyles('img', {
sizes: '114x114',
margin: '10px',
width: '1.5em',
height: '1.5em',
boxShadow: 'inset 0 0 20px 0 rgb(255, 124, 0), 0 0 15px 4px rgb(255, 124, 0)',
borderRadius: '2000px'
});
img.src = '/build/assets/img/favicons/apple-touch-icon-v2-114x114.png';
HeadLabelTitle.insertBefore(img, HeadLabelTitle.firstChild);
const HeadBanner = createSection([
HeadLabelTitle,
closeButton
], { maxWidth: '100vw', position: 'sticky', top: '0px', display: 'flex', justifyContent: 'space-between' }, 1);
const HeadAutoSkip = createSection([
createToggle(translations[userLanguage].AutoSkipActiveToggle, settings.AutoSkipActive, v => settings.AutoSkipActive = v, 1),
createInput(translations[userLanguage].AutoSkipDelayInput, settings.AutoSkipDelay, v => settings.AutoSkipDelay = parseInt(v, 10), 1),
createArrowSkipSection()
], {}, 1);
const HeadOverlay = createSection([
createToggle(translations[userLanguage].OverlayAlertShowToggle, settings.OverlayAlertShow, v => settings.OverlayAlertShow = v, 1),
createToggle(translations[userLanguage].OverlayAutoSaveToggle, settings.OverlayAutoSave, v => settings.OverlayAutoSave = v, 1)
], {}, 1);
const HeadOther = createSection([
createToggle(translations[userLanguage].HistoryButtonToggle, settings.HistoryButton, v => settings.HistoryButton = v, 1),
createToggle(translations[userLanguage].WatchlistButtonToggle, settings.WatchlistButton, v => settings.WatchlistButton = v, 1)
], {}, 1);
const defaultButton = createButton(translations[userLanguage].defaultButton, resetDefaults, 1);
defaultButton.addEventListener('keydown', (event) => {
if (event.key === 'Tab') {
event.preventDefault();
closeButton.focus();
}
});
const HeadButton = createSection([
createButton(translations[userLanguage].saveButton, saveAndClose, 1),
createButton(translations[userLanguage].cancelButton, hideSettingsWindow, 1),
defaultButton
], { display: 'flex', justifyContent: 'space-between' }, 1);
settingsWindow.append(HeadBanner, document.createElement('br'), HeadAutoSkip, document.createElement('br'), HeadOverlay, document.createElement('br'), HeadOther, document.createElement('br'), HeadButton);
document.body.append(overlay, settingsWindow);
overlay.addEventListener('click', handleOverlayClick);
closeButton.focus();
}
function createElementWithStyles(tag, styles, textContent = '') {
const element = document.createElement(tag);
Object.assign(element.style, styles);
if (textContent) element.textContent = textContent;
return element;
}
function createSection(children, styles = {}, index) {
const section = createElementWithStyles('div', { borderRadius: 'inherit', userSelect: 'none', border: 'outset', padding: '5px', ...styles });
section.tabIndex = 0;
children.forEach(child => section.appendChild(child));
const firstFocusableChild = children.find(child => child.tabIndex === index);
section.addEventListener('keydown', (event) => {
if (document.activeElement === section &&
(event.key === 'Tab' || event.key === 'ArrowUp' || event.key === 'ArrowLeft' || event.key === 'ArrowDown' || event.key === 'ArrowRight')) {
event.preventDefault();
if (firstFocusableChild) {
firstFocusableChild.focus();
}
}
});
return section;
}
function createArrowSkipSection() {
const section = createElementWithStyles('div', { display: 'flex', alignItems: 'center', padding: '5px', width: 'fit-content', borderRadius: 'inherit' });
const label = createElementWithStyles('p', { color: 'black', padding: '5px 10px', width: 'fit-content', borderRadius: 'inherit', transition: 'background-color 0.2s ease' }, translations[userLanguage].ArrowAutoSkipToggle);
applyHoverFocusStyles(label, '#ff640a', '', '0 0 15px rgba(255, 124, 0, 1)', '');
const leftToggle = createToggle('[⬅]', settings.ArrowLeftAutoSkip, v => settings.ArrowLeftAutoSkip = v, 1);
const rightToggle = createToggle('[➡]', settings.ArrowRightAutoSkip, v => settings.ArrowRightAutoSkip = v, 1);
const leftCheckbox = leftToggle.querySelector('input[type="checkbox"]');
const rightCheckbox = rightToggle.querySelector('input[type="checkbox"]');
function syncCheckboxes() {
const bothChecked = leftCheckbox.checked && rightCheckbox.checked;
const newValue = !bothChecked;
[leftCheckbox, rightCheckbox].forEach(checkbox => checkbox.checked = newValue);
Object.assign(settings, { ArrowLeftAutoSkip: newValue, ArrowRightAutoSkip: newValue });
}
label.addEventListener('click', () => {
requestAnimationFrame(syncCheckboxes);
});
section.append(label, leftToggle, rightToggle);
return section;
}
// Création des éléments de formulaire
function createToggle(labelText, isChecked, onChange, index) {
const container = document.createElement('div');
Object.assign(container.style, {
display: 'flex',
alignItems: 'center',
cursor: 'pointer',
padding: '5px',
width: 'fit-content',
transition: 'background-color 0.2s ease',
borderRadius: 'inherit'
});
container.tabIndex = index;
applyHoverFocusStyles(container, '#ff640a', '', '0 0 15px rgba(255, 124, 0, 1)', '');
container.addEventListener('click', () => {
checkbox.checked = !checkbox.checked;
onChange(checkbox.checked);
});
container.addEventListener('keydown', (event) => {
if (event.key === ' ' || event.key === 'Enter') {
event.preventDefault();
checkbox.checked = !checkbox.checked;
onChange(checkbox.checked);
} else if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {
event.preventDefault();
navigateDivs('up', container, index);
} else if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {
event.preventDefault();
navigateDivs('down', container, index);
}
});
const checkbox = document.createElement('input');
checkbox.type = 'checkbox';
checkbox.checked = isChecked;
checkbox.style.cursor = 'pointer';
applyHoverFocusStyles(checkbox, '', '', '0 0 15px rgba(255, 124, 0, 1)', '');
checkbox.addEventListener('click', () => {
checkbox.checked = !checkbox.checked;
onChange(checkbox.checked);
});
const label = document.createElement('label');
label.textContent = labelText;
Object.assign(label.style, {
color: 'black',
padding: '0 10px',
cursor: 'pointer'
});
container.appendChild(label);
container.appendChild(checkbox);
return container;
}
function createInput(labelText, value, onChange, index) {
const container = document.createElement('div');
Object.assign(container.style, {
display: 'flex',
alignItems: 'center',
padding: '5px',
width: 'fit-content',
transition: 'background-color 0.2s ease',
borderRadius: 'inherit',
cursor: 'pointer'
});
container.addEventListener('click', () => {
if (document.activeElement !== input) {
input.focus();
input.select();
}
});
applyHoverFocusStyles(container, '#ff640a', '', '0 0 15px rgba(255, 124, 0, 1)', '');
const input = document.createElement('input');
input.type = 'text';
input.value = value;
input.tabIndex = index;
input.style.width = '100%';
applyHoverFocusStyles(input, '', '', '0 0 15px rgba(255, 124, 0, 1)', '', container, '#ff640a', '', '0 0 15px rgba(255, 124, 0, 1)', '');
input.addEventListener('input', () => onChange(input.value));
input.addEventListener('keydown', (event) => {
if (event.key === 'ArrowUp') {
event.preventDefault();
navigateDivs('up', input, index);
} else if (event.key === 'ArrowDown') {
event.preventDefault();
navigateDivs('down', input, index);
}
});
const label = document.createElement('label');
label.textContent = labelText;
Object.assign(label.style, {
color: 'black',
padding: '0 10px',
cursor: 'pointer'
});
container.appendChild(label);
container.appendChild(input);
return container;
}
function createButton(text, onClick, index) {
const button = document.createElement('button');
Object.assign(button.style, {
cursor: 'pointer',
padding: '10px',
margin: '3px',
border: 'revert',
borderRadius: 'inherit',
backgroundColor: 'lightgrey',
transition: 'background-color 0.2s ease'
});
button.textContent = text;
button.tabIndex = index;
applyHoverFocusStyles(button, '#ff640a', 'lightgrey', '0 0 15px rgba(255, 124, 0, 1)', '');
button.addEventListener('click', onClick);
button.addEventListener('keydown', (event) => {
if (event.key === ' ' || event.key === 'Enter') {
event.preventDefault();
document.activeElement.click();
} else if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') {
event.preventDefault();
navigateDivs('up', button, index);
} else if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {
event.preventDefault();
navigateDivs('down', button, index);
}
});
return button;
}
// Gérer les actions du formulaire
function saveAndClose() {
saveSettings();
hideSettingsWindow();
}
function resetDefaults() {
settings = defaultSettings;
saveSettings();
hideSettingsWindow();
}
function hideSettingsWindow() {
const overlay = document.getElementById('settingsOverlay');
const settingsWindow = document.getElementById('settingsWindow');
if (overlay) {
document.body.removeChild(overlay);
}
if (settingsWindow) {
document.body.removeChild(settingsWindow);
}
settings = JSON.parse(localStorage.getItem("AutoSkipParameter"));
}
function navigateDivs(direction, currentDiv, index) {
const allDivs = Array.from(document.querySelectorAll(`div[tabindex="${index}"], button[tabindex="${index}"], input[tabindex="${index}"]`));
const currentIndex = allDivs.indexOf(currentDiv);
let nextIndex;
if (index === 0 || index == null) return;
if (direction === 'up') {
nextIndex = (currentIndex - 1 + allDivs.length) % allDivs.length;
} else if (direction === 'down') {
nextIndex = (currentIndex + 1) % allDivs.length;
}
const nextDiv = allDivs[nextIndex];
if (nextDiv) {
nextDiv.focus();
if (nextDiv.tagName === 'INPUT') {
nextDiv.select();
}
}
}
// Fonction pour sauvegarder les paramètres dans localStorage
function saveSettings() {
localStorage.setItem("AutoSkipParameter", JSON.stringify(settings));
waitForIframe();
}
// Gérer le clic sur l'overlay
function handleOverlayClick() {
const UniqueLoadOverlay = JSON.parse(localStorage.getItem("AutoSkipParameter"));
if (UniqueLoadOverlay.OverlayAlertShow) {
// Créer l'overlay
const overlay = document.createElement('div');
overlay.id = 'customOverlay';
Object.assign(overlay.style, {
position: 'fixed',
top: '0',
left: '0',
width: '100%',
height: '100%',
backgroundColor: 'rgba(0, 0, 0, 0.5)',
zIndex: '9998'
});
// Créer le conteneur pour l'alerte
const alertDiv = document.createElement('div');
alertDiv.id = 'customAlert';
Object.assign(alertDiv.style, {
position: 'fixed',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
padding: '20px',
backgroundColor: '#fff',
border: '1px solid #ccc',
borderRadius: '10px',
zIndex: '9999',
boxShadow: '0px 0px 10px rgba(0, 0, 0, 0.1)',
color: '#000'
});
alertDiv.addEventListener('mouseover', (event) => {
const target = event.target;
if (target === alertDiv) {
alertDiv.focus();
} else if (alertDiv.contains(target) && target.tabIndex >= 0) {
target.focus();
}
});
// Ajouter le texte du message
const message = document.createElement('p');
message.textContent = translations[userLanguage].confirmExit;
alertDiv.appendChild(message);
// Ajouter une checkbox avec le texte "Sauvegarder votre choix"
let Toggle = false;
const checkboxDiv = createToggle(translations[userLanguage].saveChoice, false, v => Toggle = v, 2)
checkboxDiv.style.justifySelf = 'center';
// Ajouter les boutons Oui et Non
const buttonContainer = document.createElement('div');
Object.assign(buttonContainer.style, {
marginTop: '10px',
display: 'flex',
borderRadius: '10px',
justifyContent: 'space-between'
});
// Bouton Oui
const yesButton = createButton(translations[userLanguage].yes, saveAndClose, 2);
yesButton.onclick = function () {
if (Toggle) {
settings.OverlayAlertShow = false;
}
settings.OverlayAutoSave = true;
saveSettings();
hideSettingsWindow();
closeAlert();
};
// Bouton Non
const noButton = createButton(translations[userLanguage].no, hideSettingsWindow, 2);
noButton.onclick = function () {
const UniqueSettings = JSON.parse(localStorage.getItem("AutoSkipParameter"));
if (Toggle) {
UniqueSettings.OverlayAlertShow = false;
}
UniqueSettings.OverlayAutoSave = false;
localStorage.setItem("AutoSkipParameter", JSON.stringify(UniqueSettings));
hideSettingsWindow();
closeAlert();
// Rechargement des paramètres depuis le localStorage
settings = JSON.parse(localStorage.getItem("AutoSkipParameter"));
};
noButton.addEventListener('keydown', (event) => {
if (event.key === 'Tab') {
event.preventDefault();
checkboxDiv.focus();
}
});
// Ajouter les boutons au conteneur
buttonContainer.appendChild(yesButton);
buttonContainer.appendChild(noButton);
alertDiv.appendChild(checkboxDiv);
alertDiv.appendChild(buttonContainer);
// Ajouter la boîte de dialogue et l'overlay à la page
document.body.appendChild(overlay);
document.body.appendChild(alertDiv);
checkboxDiv.focus();
addKeyboardNavigation(overlay, checkboxDiv);
addKeyboardNavigation(alertDiv, checkboxDiv);
function addKeyboardNavigation(element, focusTarget) {
element.tabIndex = 0;
element.addEventListener('keydown', (event) => {
if (document.activeElement === element &&
['Tab', 'ArrowUp', 'ArrowLeft', 'ArrowDown', 'ArrowRight'].includes(event.key)) {
event.preventDefault();
if (focusTarget) focusTarget.focus();
}
});
}
function closeAlert() {
document.body.removeChild(alertDiv);
document.body.removeChild(overlay);
}
} else {
if (UniqueLoadOverlay.OverlayAutoSave) {
saveSettings();
}
hideSettingsWindow();
}
}
// Observer les changements de style sur le bouton "Passer l'intro"
function observeSkipButton() {
const skipButton = document.querySelector('div[data-testid="skipButton"]');
if (skipButton) {
let noSkipButton = document.querySelector('#noSkipButton');
if (!noSkipButton) {
noSkipButton = createButton(translations[userLanguage].AutoSkOff + ' [⬇]', toggleNoSkip, 0);
noSkipButton.id = 'noSkipButton';
noSkipButton.value = '0';
const skipButtonSize = skipButton.querySelector('.css-1dbjc4n.r-1awozwy');
if (skipButtonSize) {
const rect = skipButtonSize.getBoundingClientRect();
Object.assign(noSkipButton.style, {
position: 'absolute',
right: `${20 + rect.width}px`,
bottom: '97px',
height: '40px',
zIndex: '1',
fontWeight: 'bold',
});
}
skipButton.parentNode.insertBefore(noSkipButton, skipButton);
// Observer les changements de style du bouton "Passer l'intro"
const observerSkipButtAtt = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
Skip(observerSkipButtAtt);
// Gérer l'affichage du bouton "no skip"
const skipButt = document.querySelector('div[data-testid="skipButton"]');
if (skipButt.style.opacity === '0') {
if (noSkipButton) {
noSkipButton.style.display = 'none';
}
} else {
if (noSkipButton) {
noSkipButton.style.display = 'block';
}
}
});
});
observerSkipButtAtt.observe(skipButton, { attributes: true });
// Observer si le bouton "Passer l'intro" est supprimé du DOM
const skipButtonRemovalObserver = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
mutation.removedNodes.forEach((removedNode) => {
if (removedNode === skipButton) {
if (noSkipButton) {
skipButtonRemovalObserver.disconnect();
noSkipButton.remove(); // Supprimer le bouton "No Skip" quand "skipButton" disparaît
}
}
});
});
});
skipButtonRemovalObserver.observe(document.body, { childList: true, subtree: true });
// Désactiver temporairement l'observateur lorsque la souris est sur "noSkipButton"
noSkipButton.addEventListener('mouseover', () => {
mutationObserverActive = false; // Désactive l'observateur temporairement
if (skipButton) {
// Ajouter un MutationObserver pour surveiller les changements du style
const observerSkipOpa = new MutationObserver(() => {
// Vérifier et forcer l'affichage du bouton "skipButton"
if (getComputedStyle(skipButton).opacity !== '1') {
skipButton.style.opacity = '1'; // Forcer l'affichage
}
});
// Observer uniquement les modifications d'attributs de "skipButton"
observerSkipOpa.observe(skipButton, { attributes: true, attributeFilter: ['style'] });
// Arrêter l'observation après un certain temps ou à la sortie de la souris
noSkipButton.addEventListener('mouseout', () => {
mutationObserverActive = true; // Réactiver l'observateur principal
observerSkipOpa.disconnect(); // Arrêter l'observation
if (skipButton) {
skipButton.style.opacity = ''; // Rétablir l'état initial
}
}, { once: true });
}
});
}
}
}
function Skip(observerSkipButtAtt){
if (!mutationObserverActive) return; // Désactiver les mutations pendant le survol du bouton "No Skip"
const skipButt = document.querySelector('div[data-testid="skipButton"]');
const innerButton = skipButt.querySelector('div[tabindex="0"]');
let noSkipButton = document.querySelector('#noSkipButton');
if (innerButton) {
const UniqueLoadSkip = JSON.parse(localStorage.getItem("AutoSkipParameter"));
if (UniqueLoadSkip.AutoSkipActive && noSkipButton.value === "0") {
const x = UniqueLoadSkip.AutoSkipDelay || 0;
setTimeout(function() {
if (noSkipButton.value === "0" && mutationObserverActive) {
if (observerSkipButtAtt) {
observerSkipButtAtt.disconnect();
}
innerButton.click(); // Ne pas exécuter si "no skip" est activé
}
}, x);
}
}
}
function toggleNoSkip() {
const noSkipButton = document.querySelector('#noSkipButton');
if (!noSkipButton) return;
const newValue = noSkipButton.value === "0" ? "1" : "0";
noSkipButton.value = newValue;
noSkipButton.textContent = newValue === "1"
? translations[userLanguage].AutoSkON + ' [⬇]'
: translations[userLanguage].AutoSkOff + ' [⬇]';
sendMessageToParent({ type: 'noskip', value: noSkipButton.value });
}
function sendMessageToParent(message) {
window.parent.postMessage(message, '*');
}
function sendValuesToIframe(iframe) {
const UniqueLoadToIframe = JSON.parse(localStorage.getItem("AutoSkipParameter"));
if (JSON.stringify(UniqueLoadToIframe) !== JSON.stringify(OrigineLoad) || firstLoad) {
const message = {
type: 'AutoSkipParameter',
value: UniqueLoadToIframe
};
iframe.contentWindow.postMessage(message, 'https://static.crunchyroll.com');
OrigineLoad = UniqueLoadToIframe; // Mettre à jour la valeur précédente
firstLoad = false;
}
}
function waitForIframe() {
let iframe = document.querySelector('.video-player');
if (iframe && iframe.src.includes('https://static.crunchyroll.com')) {
iframe.onload = function() {
sendValuesToIframe(iframe);
};
const intervalId = setInterval(function() {
iframe = document.querySelector('.video-player');
if (iframe) {
sendValuesToIframe(iframe);
} else {
clearInterval(intervalId);
}
}, 1000);
} else {
setTimeout(waitForIframe, 500); // Réessayer après 500 ms si l'iframe n'est pas trouvé
}
}
function HistoryWatchlistButt(headerDiv) {
if (!headerDiv.querySelector('button')) {
let isExpanded = false;
const collectionDiv = headerDiv.nextElementSibling;
const history = collectionDiv.classList.contains('erc-history-collection');
const watchlist = collectionDiv.classList.contains('erc-watchlist-collection');
const button = createButton('▶', () => {
if (collectionDiv && (history || watchlist)) {
const items = collectionDiv.querySelectorAll('.collection-item');
isExpanded = !isExpanded;
button.textContent = isExpanded ? '▼' : '▶';
items.forEach((item, index) => {
if (index >= 5) {
if (isExpanded) {
Object.assign(item.style, {
display: 'block',
maxHeight: '0px',
overflow: 'hidden',
transition: 'max-height 1s'
});
item.offsetHeight;
item.style.maxHeight = '1000px';
} else {
item.style.maxHeight = '0px';
}
}
});
}
}, 0);
// Bouton stylé en cercle
Object.assign(button.style, {
width: '40px',
height: '40px',
borderRadius: '50%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontSize: '1.5rem',
marginLeft: '10px',
boxShadow: '0 0 15px rgba(255, 255, 255, 1)'
});
button.tabIndex = '0';
button.id = history ? 'HistoryButton' : 'WatchlistButton';
// Styles au survol et au focus
applyHoverFocusStyles(button, '#ff640a', 'white', '0 0 15px rgba(255, 124, 0, 1)', '0 0 15px rgba(255, 255, 255, 1)');
headerDiv.appendChild(button);
}
}
function HisWatButton(AB, settingKey, buttonId) {
if (AB && AB.previousElementSibling && AB.previousElementSibling.classList.contains('feed-header--ihqym')) {
if (settings[settingKey]) {
HistoryWatchlistButt(AB.previousElementSibling);
} else {
AB.previousElementSibling.querySelector(`#${buttonId}`)?.remove();
}
}
}
// Lancer la fonction de vérification lorsque la page est complètement chargée
window.addEventListener('load', waitForIframe);
// Récupérer les données envoyées à l'iframe
window.addEventListener('message', function(event) {
if (event.origin !== 'https://www.crunchyroll.com') {
return;
}
const receivedMessage = event.data;
if (receivedMessage.type === 'AutoSkipParameter') {
const AutoSkipParameter = receivedMessage.value;
localStorage.setItem("AutoSkipParameter", JSON.stringify(AutoSkipParameter));
}
});
if (window.location.hostname === "static.crunchyroll.com") {
document.addEventListener("keydown", function(event) {
const noSkipButton = document.querySelector("#noSkipButton");
const skipButt = document.querySelector('div[data-testid="skipButton"]');
const innerButton = skipButt?.querySelector('div[tabindex="0"]');
const settingsStatic = JSON.parse(localStorage.getItem("AutoSkipParameter")) || {};
if (noSkipButton &&
((event.key === "ArrowLeft" && settingsStatic.ArrowLeftAutoSkip) ||
(event.key === "ArrowRight" && settingsStatic.ArrowRightAutoSkip))) {
if (settingsStatic.AutoSkipActive && innerButton) {
innerButton.click();
}
}
if (noSkipButton && (event.key === "ArrowDown")) {
event.preventDefault();
event.stopPropagation();
toggleNoSkip();
}
}, true);
}
//traduction
const translations = {
en: {
HeadLabelTitle: "Auto Skip Parameter",
AutoSkipActiveToggle: "Enable automatic skip",
AutoSkipDelayInput: "Delay before skipping (ms)",
ArrowAutoSkipToggle: "Enable arrow automatic skip",
OverlayAlertShowToggle: "Show overlay alert",
OverlayAutoSaveToggle: "Save when exiting overlay",
HistoryButtonToggle: "Activate the button on the main page for more history",
WatchlistButtonToggle: "Activate the button on the main page for more watchlist",
saveButton: "Save",
cancelButton: "Cancel",
defaultButton: "Default",
confirmExit: "Do you want to quit and save the settings?",
saveChoice: "Save your choice",
yes: "Yes",
no: "No",
AutoSkOff: "Disable Auto Skip",
AutoSkON: "Re-enable Auto Skip"
},
fr: {
HeadLabelTitle: "Paramètre du saut automatique",
AutoSkipActiveToggle: "Activer le saut automatique",
AutoSkipDelayInput: "Délai avant de sauter (ms)",
ArrowAutoSkipToggle: "Activer le saut automatique avec les flèches",
OverlayAlertShowToggle: "Afficher l'alerte en superposition",
OverlayAutoSaveToggle: "Sauvegarder en quittant la superposition",
HistoryButtonToggle: "Activer le bouton sur la page principale pour plus d'historique",
WatchlistButtonToggle: "Activer le bouton sur la page principale pour plus de watchlist",
saveButton: "Enregistrer",
cancelButton: "Annuler",
defaultButton: "Par défaut",
confirmExit: "Voulez-vous quitter et enregistrer les paramètres ?",
saveChoice: "Enregistrer votre choix",
yes: "Oui",
no: "Non",
AutoSkOff: "Désactiver le saut automatique",
AutoSkON: "Réactiver le saut automatique"
},
ar: {
HeadLabelTitle: "معلمة التخطي التلقائي",
AutoSkipActiveToggle: "تمكين التخطي التلقائي",
AutoSkipDelayInput: "التأخير قبل التخطي (مللي ثانية)",
ArrowAutoSkipToggle: "تمكين التخطي التلقائي بالسهم",
OverlayAlertShowToggle: "عرض تنبيه التراكب",
OverlayAutoSaveToggle: "حفظ عند الخروج من التراكب",
HistoryButtonToggle: "تفعيل الزر في الصفحة الرئيسية للمزيد من السجل",
WatchlistButtonToggle: "تفعيل الزر في الصفحة الرئيسية للمزيد من قائمة المشاهدة",
saveButton: "حفظ",
cancelButton: "إلغاء",
defaultButton: "افتراضي",
confirmExit: "هل تريد الخروج وحفظ الإعدادات؟",
saveChoice: "حفظ اختيارك",
yes: "نعم",
no: "لا",
AutoSkOff: "تعطيل التخطي التلقائي",
AutoSkON: "إعادة تمكين التخطي التلقائي"
},
ca: {
HeadLabelTitle: "Paràmetre de salt automàtic",
AutoSkipActiveToggle: "Habilita el salt automàtic",
AutoSkipDelayInput: "Retard abans de saltar (ms)",
ArrowAutoSkipToggle: "Habilita el salt automàtic amb fletxes",
OverlayAlertShowToggle: "Mostra l'alerta de superposició",
OverlayAutoSaveToggle: "Desa en sortir de la superposició",
HistoryButtonToggle: "Activa el botó a la pàgina principal per més historial",
WatchlistButtonToggle: "Activa el botó a la pàgina principal per més llista de seguiment",
saveButton: "Desa",
cancelButton: "Cancel·la",
defaultButton: "Per defecte",
confirmExit: "Vols sortir i desar la configuració?",
saveChoice: "Desa la teva elecció",
yes: "Sí",
no: "No",
AutoSkOff: "Desactiva el salt automàtic",
AutoSkON: "Torna a activar el salt automàtic"
},
zh: {
HeadLabelTitle: "自动跳过参数",
AutoSkipActiveToggle: "启用自动跳过",
AutoSkipDelayInput: "跳过前的延迟(毫秒)",
ArrowAutoSkipToggle: "启用箭头自动跳过",
OverlayAlertShowToggle: "显示叠加警报",
OverlayAutoSaveToggle: "退出叠加时保存",
HistoryButtonToggle: "在主页上启用按钮以查看更多历史记录",
WatchlistButtonToggle: "在主页上启用按钮以查看更多观看列表",
saveButton: "保存",
cancelButton: "取消",
defaultButton: "默认",
confirmExit: "您想退出并保存设置吗?",
saveChoice: "保存您的选择",
yes: "是",
no: "否",
AutoSkOff: "禁用自动跳过",
AutoSkON: "重新启用自动跳过"
},
de: {
HeadLabelTitle: "Automatischer Überspring-Parameter",
AutoSkipActiveToggle: "Automatisches Überspringen aktivieren",
AutoSkipDelayInput: "Verzögerung vor dem Überspringen (ms)",
ArrowAutoSkipToggle: "Pfeil-Auto-Skip aktivieren",
OverlayAlertShowToggle: "Overlay-Warnung anzeigen",
OverlayAutoSaveToggle: "Beim Verlassen des Overlays speichern",
HistoryButtonToggle: "Schaltfläche auf der Hauptseite für mehr Verlauf aktivieren",
WatchlistButtonToggle: "Schaltfläche auf der Hauptseite für mehr Watchlist aktivieren",
saveButton: "Speichern",
cancelButton: "Abbrechen",
defaultButton: "Standard",
confirmExit: "Möchten Sie beenden und die Einstellungen speichern?",
saveChoice: "Ihre Auswahl speichern",
yes: "Ja",
no: "Nein",
AutoSkOff: "Automatisches Überspringen deaktivieren",
AutoSkON: "Automatisches Überspringen wieder aktivieren"
},
es: {
HeadLabelTitle: "Parámetro de omisión automática",
AutoSkipActiveToggle: "Habilitar salto automático",
AutoSkipDelayInput: "Retraso antes de saltar (ms)",
ArrowAutoSkipToggle: "Habilitar salto automático con flechas",
OverlayAlertShowToggle: "Mostrar alerta superpuesta",
OverlayAutoSaveToggle: "Guardar al salir de la superposición",
HistoryButtonToggle: "Activar el botón en la página principal para más historial",
WatchlistButtonToggle: "Activar el botón en la página principal para más lista de seguimiento",
saveButton: "Guardar",
cancelButton: "Cancelar",
defaultButton: "Predeterminado",
confirmExit: "¿Quieres salir y guardar la configuración?",
saveChoice: "Guardar tu elección",
yes: "Sí",
no: "No",
AutoSkOff: "Deshabilitar salto automático",
AutoSkON: "Rehabilitar salto automático"
},
hi: {
HeadLabelTitle: "स्वचालित छोड़ने का पैरामीटर",
AutoSkipActiveToggle: "स्वचालित स्किप सक्षम करें",
AutoSkipDelayInput: "स्किप से पहले विलंब (मि.से.)",
ArrowAutoSkipToggle: "तीर स्वचालित स्किप सक्षम करें",
OverlayAlertShowToggle: "ओवरले अलर्ट दिखाएं",
OverlayAutoSaveToggle: "ओवरले से बाहर निकलते समय सहेजें",
HistoryButtonToggle: "अधिक इतिहास के लिए मुख्य पृष्ठ पर बटन सक्रिय करें",
WatchlistButtonToggle: "अधिक वॉचलिस्ट के लिए मुख्य पृष्ठ पर बटन सक्रिय करें",
saveButton: "सहेजें",
cancelButton: "रद्द करें",
defaultButton: "डिफ़ॉल्ट",
confirmExit: "क्या आप बाहर निकलना और सेटिंग्स सहेजना चाहते हैं?",
saveChoice: "अपनी पसंद सहेजें",
yes: "हाँ",
no: "नहीं",
AutoSkOff: "स्वचालित स्किप अक्षम करें",
AutoSkON: "स्वचालित स्किप पुनः सक्षम करें"
},
id: {
HeadLabelTitle: "Parameter Lewati Otomatis",
AutoSkipActiveToggle: "Aktifkan lompatan otomatis",
AutoSkipDelayInput: "Tunda sebelum melompat (ms)",
ArrowAutoSkipToggle: "Aktifkan lompatan otomatis dengan panah",
OverlayAlertShowToggle: "Tampilkan peringatan overlay",
OverlayAutoSaveToggle: "Simpan saat keluar dari overlay",
HistoryButtonToggle: "Aktifkan tombol di halaman utama untuk riwayat lebih lanjut",
WatchlistButtonToggle: "Aktifkan tombol di halaman utama untuk daftar tontonan lebih lanjut",
saveButton: "Simpan",
cancelButton: "Batal",
defaultButton: "Default",
confirmExit: "Apakah Anda ingin keluar dan menyimpan pengaturan?",
saveChoice: "Simpan pilihan Anda",
yes: "Ya",
no: "Tidak",
AutoSkOff: "Nonaktifkan Lompatan Otomatis",
AutoSkON: "Aktifkan kembali Lompatan Otomatis"
},
it: {
HeadLabelTitle: "Parametro di salto automatico",
AutoSkipActiveToggle: "Abilita il salto automatico",
AutoSkipDelayInput: "Ritardo prima di saltare (ms)",
ArrowAutoSkipToggle: "Abilita il salto automatico con le frecce",
OverlayAlertShowToggle: "Mostra avviso in sovrimpressione",
OverlayAutoSaveToggle: "Salva quando si esce dalla sovrimpressione",
HistoryButtonToggle: "Attiva il pulsante nella pagina principale per più cronologia",
WatchlistButtonToggle: "Attiva il pulsante nella pagina principale per più lista di visione",
saveButton: "Salva",
cancelButton: "Annulla",
defaultButton: "Predefinito",
confirmExit: "Vuoi uscire e salvare le impostazioni?",
saveChoice: "Salva la tua scelta",
yes: "Sì",
no: "No",
AutoSkOff: "Disattiva il salto automatico",
AutoSkON: "Riattiva il salto automatico"
},
ja: {
HeadLabelTitle: "自動スキップパラメータ",
AutoSkipActiveToggle: "自動スキップを有効にする",
AutoSkipDelayInput: "スキップ前の遅延(ミリ秒)",
ArrowAutoSkipToggle: "矢印キーの自動スキップを有効にする",
OverlayAlertShowToggle: "オーバーレイアラートを表示",
OverlayAutoSaveToggle: "オーバーレイを終了するときに保存",
HistoryButtonToggle: "メインページでボタンを有効にして履歴を表示",
WatchlistButtonToggle: "メインページでボタンを有効にしてウォッチリストを表示",
saveButton: "保存",
cancelButton: "キャンセル",
defaultButton: "デフォルト",
confirmExit: "終了して設定を保存しますか?",
saveChoice: "選択を保存",
yes: "はい",
no: "いいえ",
AutoSkOff: "自動スキップを無効にする",
AutoSkON: "自動スキップを再有効化する"
},
ms: {
HeadLabelTitle: "Parameter Langkau Automatik",
AutoSkipActiveToggle: "Aktifkan langkau automatik",
AutoSkipDelayInput: "Kelewatan sebelum melangkau (ms)",
ArrowAutoSkipToggle: "Aktifkan langkau automatik dengan anak panah",
OverlayAlertShowToggle: "Tunjukkan amaran lapisan atas",
OverlayAutoSaveToggle: "Simpan apabila keluar dari lapisan atas",
HistoryButtonToggle: "Aktifkan butang di halaman utama untuk sejarah tambahan",
WatchlistButtonToggle: "Aktifkan butang di halaman utama untuk senarai tontonan tambahan",
saveButton: "Simpan",
cancelButton: "Batal",
defaultButton: "Default",
confirmExit: "Adakah anda ingin keluar dan menyimpan tetapan?",
saveChoice: "Simpan pilihan anda",
yes: "Ya",
no: "Tidak",
AutoSkOff: "Nyahaktifkan Langkau Automatik",
AutoSkON: "Aktifkan semula Langkau Automatik"
},
pl: {
HeadLabelTitle: "Parametr automatycznego pomijania",
AutoSkipActiveToggle: "Włącz automatyczne pomijanie",
AutoSkipDelayInput: "Opóźnienie przed pominięciem (ms)",
ArrowAutoSkipToggle: "Włącz automatyczne pomijanie strzałkami",
OverlayAlertShowToggle: "Pokaż alert nakładki",
OverlayAutoSaveToggle: "Zapisz po wyjściu z nakładki",
HistoryButtonToggle: "Aktywuj przycisk na stronie głównej, aby zobaczyć więcej historii",
WatchlistButtonToggle: "Aktywuj przycisk na stronie głównej, aby zobaczyć więcej listy obserwowanych",
saveButton: "Zapisz",
cancelButton: "Anuluj",
defaultButton: "Domyślne",
confirmExit: "Czy chcesz wyjść i zapisać ustawienia?",
saveChoice: "Zapisz swój wybór",
yes: "Tak",
no: "Nie",
AutoSkOff: "Wyłącz automatyczne pomijanie",
AutoSkON: "Ponownie włącz automatyczne pomijanie"
},
pt: {
HeadLabelTitle: "Parâmetro de Pular Automático",
AutoSkipActiveToggle: "Ativar pulo automático",
AutoSkipDelayInput: "Atraso antes de pular (ms)",
ArrowAutoSkipToggle: "Ativar pulo automático com setas",
OverlayAlertShowToggle: "Mostrar alerta em sobreposição",
OverlayAutoSaveToggle: "Salvar ao sair da sobreposição",
HistoryButtonToggle: "Ativar botão na página principal para mais histórico",
WatchlistButtonToggle: "Ativar botão na página principal para mais lista de observação",
saveButton: "Salvar",
cancelButton: "Cancelar",
defaultButton: "Padrão",
confirmExit: "Deseja sair e salvar as configurações?",
saveChoice: "Salvar sua escolha",
yes: "Sim",
no: "Não",
AutoSkOff: "Desativar Pulo Automático",
AutoSkON: "Reativar Pulo Automático"
},
ru: {
HeadLabelTitle: "Параметр автоматического пропуска",
AutoSkipActiveToggle: "Включить автоматическое пропускание",
AutoSkipDelayInput: "Задержка перед пропуском (мс)",
ArrowAutoSkipToggle: "Включить автоматический пропуск с помощью стрелок",
OverlayAlertShowToggle: "Показать уведомление в оверлее",
OverlayAutoSaveToggle: "Сохранить при выходе из оверлея",
HistoryButtonToggle: "Активировать кнопку на главной странице для просмотра истории",
WatchlistButtonToggle: "Активировать кнопку на главной странице для списка просмотра",
saveButton: "Сохранить",
cancelButton: "Отмена",
defaultButton: "По умолчанию",
confirmExit: "Вы хотите выйти и сохранить настройки?",
saveChoice: "Сохранить ваш выбор",
yes: "Да",
no: "Нет",
AutoSkOff: "Отключить автоматическое пропускание",
AutoSkON: "Включить автоматическое пропускание"
},
ta: {
HeadLabelTitle: "தானியங்கும் தாண்டும் அளவுரு",
AutoSkipActiveToggle: "தானியங்கி தவிர்க்கலை இயக்கவும்",
AutoSkipDelayInput: "தவிர்க்கும் முன் தாமதம் (மில்லி விநாடிகள்)",
ArrowAutoSkipToggle: "அம்பு தானியங்கி தவிர்க்கலை இயக்கவும்",
OverlayAlertShowToggle: "மேலே இடப்படும் எச்சரிக்கையை காட்டு",
OverlayAutoSaveToggle: "மேலே இடப்பட்டதை விட்டு வெளியேறும்போது சேமிக்கவும்",
HistoryButtonToggle: "மேலும் வரலாற்றை காண முதன்மை பக்கத்தில் பொத்தானை செயல்படுத்தவும்",
WatchlistButtonToggle: "மேலும் பார்வை பட்டியலை காண முதன்மை பக்கத்தில் பொத்தானை செயல்படுத்தவும்",
saveButton: "சேமிக்கவும்",
cancelButton: "ரத்துசெய்",
defaultButton: "இயல்புநிலை",
confirmExit: "நீங்கள் வெளியேறி அமைப்புகளைச் சேமிக்க விரும்புகிறீர்களா?",
saveChoice: "உங்கள் தேர்வைச் சேமிக்கவும்",
yes: "ஆம்",
no: "இல்லை",
AutoSkOff: "தானியங்கி தவிர்க்கலை முடக்கு",
AutoSkON: "தானியங்கி தவிர்க்கலை மீண்டும் இயக்கு"
},
te: {
HeadLabelTitle: "ఆటో స్కిప్ పరామితి",
AutoSkipActiveToggle: "ఆటో స్కిప్‌ను ప్రారంభించండి",
AutoSkipDelayInput: "స్కిప్ చేసేముందు ఆలస్యం (మి.సె.)",
ArrowAutoSkipToggle: "ఆరో స్కిప్‌ను ప్రారంభించండి",
OverlayAlertShowToggle: "ఓవర్లే అలర్ట్‌ను చూపించండి",
OverlayAutoSaveToggle: "ఓవర్లే నుండి బయటకు వచ్చినప్పుడు సేవ్ చేయండి",
HistoryButtonToggle: "మరింత చరిత్ర కోసం ప్రధాన పేజీలో బటన్‌ను ప్రారంభించండి",
WatchlistButtonToggle: "మరింత వీక్షణ జాబితా కోసం ప్రధాన పేజీలో బటన్‌ను ప్రారంభించండి",
saveButton: "సేవ్",
cancelButton: "రద్దు చేయండి",
defaultButton: "అప్రమేయం",
confirmExit: "మీరు నిష్క్రమించి సెట్టింగ్‌లను సేవ్ చేయాలనుకుంటున్నారా?",
saveChoice: "మీ ఎంపికను సేవ్ చేయండి",
yes: "అవును",
no: "కాదు",
AutoSkOff: "ఆటో స్కిప్‌ను నిలిపివేయి",
AutoSkON: "ఆటో స్కిప్‌ను మళ్లీ ప్రారంభించండి"
},
th: {
HeadLabelTitle: "พารามิเตอร์ข้ามอัตโนมัติ",
AutoSkipActiveToggle: "เปิดใช้งานการข้ามอัตโนมัติ",
AutoSkipDelayInput: "หน่วงเวลาก่อนข้าม (มิลลิวินาที)",
ArrowAutoSkipToggle: "เปิดใช้งานการข้ามอัตโนมัติด้วยลูกศร",
OverlayAlertShowToggle: "แสดงการแจ้งเตือนแบบซ้อนทับ",
OverlayAutoSaveToggle: "บันทึกเมื่อออกจากการซ้อนทับ",
HistoryButtonToggle: "เปิดใช้งานปุ่มบนหน้าแรกเพื่อดูประวัติเพิ่มเติม",
WatchlistButtonToggle: "เปิดใช้งานปุ่มบนหน้าแรกเพื่อดูรายการที่ต้องการ",
saveButton: "บันทึก",
cancelButton: "ยกเลิก",
defaultButton: "ค่าเริ่มต้น",
confirmExit: "คุณต้องการออกและบันทึกการตั้งค่าหรือไม่?",
saveChoice: "บันทึกตัวเลือกของคุณ",
yes: "ใช่",
no: "ไม่",
AutoSkOff: "ปิดการข้ามอัตโนมัติ",
AutoSkON: "เปิดใช้งานการข้ามอัตโนมัติอีกครั้ง"
},
tr: {
HeadLabelTitle: "Otomatik Atlatma Parametresi",
AutoSkipActiveToggle: "Otomatik geçişi etkinleştir",
AutoSkipDelayInput: "Geçmeden önce gecikme (ms)",
ArrowAutoSkipToggle: "Ok tuşlarıyla otomatik geçişi etkinleştir",
OverlayAlertShowToggle: "Bindirme uyarısını göster",
OverlayAutoSaveToggle: "Bindirmeden çıkarken kaydet",
HistoryButtonToggle: "Daha fazla geçmiş için ana sayfada düğmeyi etkinleştir",
WatchlistButtonToggle: "Daha fazla izleme listesi için ana sayfada düğmeyi etkinleştir",
saveButton: "Kaydet",
cancelButton: "İptal",
defaultButton: "Varsayılan",
confirmExit: "Çıkmak ve ayarları kaydetmek istiyor musunuz?",
saveChoice: "Seçiminizi kaydedin",
yes: "Evet",
no: "Hayır",
AutoSkOff: "Otomatik geçişi devre dışı bırak",
AutoSkON: "Otomatik geçişi yeniden etkinleştir"
},
vi: {
HeadLabelTitle: "Tham số bỏ qua tự động",
AutoSkipActiveToggle: "Bật bỏ qua tự động",
AutoSkipDelayInput: "Độ trễ trước khi bỏ qua (ms)",
ArrowAutoSkipToggle: "Bật bỏ qua tự động bằng phím mũi tên",
OverlayAlertShowToggle: "Hiển thị cảnh báo lớp phủ",
OverlayAutoSaveToggle: "Lưu khi thoát lớp phủ",
HistoryButtonToggle: "Bật nút trên trang chính để xem lịch sử nhiều hơn",
WatchlistButtonToggle: "Bật nút trên trang chính để xem danh sách theo dõi nhiều hơn",
saveButton: "Lưu",
cancelButton: "Hủy",
defaultButton: "Mặc định",
confirmExit: "Bạn có muốn thoát và lưu cài đặt không?",
saveChoice: "Lưu lựa chọn của bạn",
yes: "Có",
no: "Không",
AutoSkOff: "Tắt bỏ qua tự động",
AutoSkON: "Bật lại bỏ qua tự động"
}
};
})();