aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--manifest/manifest.json2
-rw-r--r--public/_locales/bg/messages.json29
-rw-r--r--public/_locales/cs/messages.json17
-rw-r--r--public/_locales/da/messages.json25
-rw-r--r--public/_locales/de/messages.json19
-rw-r--r--public/_locales/el/messages.json3
-rw-r--r--public/_locales/es/messages.json17
-rw-r--r--public/_locales/et/messages.json17
-rw-r--r--public/_locales/fi/messages.json17
-rw-r--r--public/_locales/fr/messages.json17
-rw-r--r--public/_locales/hr/messages.json66
-rw-r--r--public/_locales/hu/messages.json204
-rw-r--r--public/_locales/id/messages.json3
-rw-r--r--public/_locales/it/messages.json3
-rw-r--r--public/_locales/ja/messages.json95
-rw-r--r--public/_locales/ko/messages.json17
-rw-r--r--public/_locales/ml/messages.json3
-rw-r--r--public/_locales/ms/messages.json3
-rw-r--r--public/_locales/nl/messages.json17
-rw-r--r--public/_locales/no/messages.json3
-rw-r--r--public/_locales/pl/messages.json23
-rw-r--r--public/_locales/pt_BR/messages.json20
-rw-r--r--public/_locales/ro/messages.json3
-rw-r--r--public/_locales/ru/messages.json17
-rw-r--r--public/_locales/sk/messages.json20
-rw-r--r--public/_locales/sv/messages.json17
-rw-r--r--public/_locales/ta/messages.json3
-rw-r--r--public/_locales/te/messages.json3
-rw-r--r--public/_locales/tr/messages.json3
-rw-r--r--public/_locales/uk/messages.json25
-rw-r--r--public/_locales/vi/messages.json5
-rw-r--r--public/_locales/zh_CN/messages.json3
-rw-r--r--public/_locales/zh_TW/messages.json3
-rw-r--r--public/content.css37
-rw-r--r--public/help/index.html9
-rw-r--r--public/help/styles.css52
-rw-r--r--src/components/CategorySkipOptionsComponent.tsx5
-rw-r--r--src/components/NoticeComponent.tsx4
-rw-r--r--src/components/SkipNoticeComponent.tsx15
-rw-r--r--src/components/SponsorTimeEditComponent.tsx13
-rw-r--r--src/content.ts78
-rw-r--r--src/js-components/previewBar.ts5
-rw-r--r--src/js-components/skipButtonControlBar.ts96
-rw-r--r--src/messageTypes.ts3
-rw-r--r--src/popup.ts5
-rw-r--r--src/utils.ts38
-rw-r--r--src/utils/pageUtils.ts20
47 files changed, 910 insertions, 192 deletions
diff --git a/manifest/manifest.json b/manifest/manifest.json
index e79ef72e..74f5e48d 100644
--- a/manifest/manifest.json
+++ b/manifest/manifest.json
@@ -1,7 +1,7 @@
{
"name": "__MSG_fullName__",
"short_name": "SponsorBlock",
- "version": "3.4",
+ "version": "3.5.2",
"default_locale": "en",
"description": "__MSG_Description__",
"homepage_url": "https://sponsor.ajay.app",
diff --git a/public/_locales/bg/messages.json b/public/_locales/bg/messages.json
index 12f01b69..bfa09428 100644
--- a/public/_locales/bg/messages.json
+++ b/public/_locales/bg/messages.json
@@ -4,7 +4,7 @@
"description": "Name of the extension."
},
"Description": {
- "message": "Прескачайте спонсорства, напомняния за абониране, и други неща в YouTube клипове. Докладвайте спонсорства на клиповете които гледате, за да спестите време на други потребители.",
+ "message": "Прескачайте спонсорства, напомняния за абониране и други неща в клипове в YouTube. Докладвайте спонсорства в клиповете, които гледате, за да спестите време на други потребители.",
"description": "Description of the extension."
},
"400": {
@@ -23,7 +23,7 @@
"message": "сегмент"
},
"Segments": {
- "message": "сегменти"
+ "message": "сегмента"
},
"upvoteButtonInfo": {
"message": "Одобряване на това предложение"
@@ -86,7 +86,7 @@
"message": "Отказ от създаването на сегмент"
},
"noVideoID": {
- "message": "Не е намерен видеоклип в YouTube.\nАко това е неправилно, опреснете раздела."
+ "message": "Не е намерен видеоклип в YouTube.\nАко това не е правилно, опреснете раздела."
},
"refreshSegments": {
"message": "Опресняване на сегментите"
@@ -131,7 +131,7 @@
"message": "Изпратени сегменти"
},
"savedPeopleFrom": {
- "message": "Вие сте помогнали на хората да пропуснат "
+ "message": "Помогнахте на хората да пропуснат "
},
"viewLeaderboard": {
"message": "Класиране"
@@ -156,7 +156,7 @@
"message": "Това се използва на страницата с публичната статистика, за да покаже колко сте допринесли. Вижте го"
},
"Username": {
- "message": "Потребителско име"
+ "message": "Потребител"
},
"setUsername": {
"message": "Задайте потребителско име"
@@ -528,7 +528,7 @@
"message": "Платена промоция, платени препоръки и директни реклами. Не за самореклама или безплатни препоръки за каузи/създатели/уебсайтове/продукти, които се харесват на автора."
},
"category_selfpromo": {
- "message": "Неплатени/Самореклама"
+ "message": "Неплатена/Самореклама"
},
"category_selfpromo_description": {
"message": "Подобно на „спонсорство“, но за безплатна реклама или самореклама. Това включва търговия със стоки, дарения или информация с кого каналът има сътрудничество."
@@ -700,7 +700,7 @@
"message": "Грешно/Неправилно време"
},
"incorrectCategory": {
- "message": "Грешна категория"
+ "message": "Промяна на категорията"
},
"nonMusicCategoryOnMusic": {
"message": "Това видео е категоризирано като музика. Сигурни ли сте, че това има спонсор? Ако това всъщност е „Немузикален сегмент“, отворете опциите на разширението и активирайте тази категория. След това можете да изпратите този сегмент като „Немузикален“ вместо като спонсор. Моля, прочетете указанията, ако сте объркани."
@@ -811,6 +811,21 @@
"LearnMore": {
"message": "Научете повече"
},
+ "CopyDownvoteButtonInfo": {
+ "message": "Гласуване против и създаване на локално копие, за да го изпратите отново"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "Отваряне на wiki страницата на тази категория."
+ },
+ "CopyAndDownvote": {
+ "message": "Копиране и гласуване против"
+ },
+ "ContinueVoting": {
+ "message": "Продължаване на гласуването"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "Това незабавно ще се приложи към вашите сегменти"
+ },
"SponsorTimeEditScrollNewFeature": {
"message": "Използвайте колелото на мишката, докато държите курсора върху полето за редактиране, за да коригирате бързо времето. Комбинации с клавиша ctrl или shift могат да се използват за фина настройка на промените."
}
diff --git a/public/_locales/cs/messages.json b/public/_locales/cs/messages.json
index fd9747cf..569e5400 100644
--- a/public/_locales/cs/messages.json
+++ b/public/_locales/cs/messages.json
@@ -700,7 +700,7 @@
"message": "Nesprávné / špatné časování"
},
"incorrectCategory": {
- "message": "Špatná kategorie"
+ "message": "Změnit kategorii"
},
"nonMusicCategoryOnMusic": {
"message": "Toto video je kategorizováno jako hudba. Jste si jisti, že je v něm sponzorská sekce? Pokud se opravdu jedná o \"Nehudební segment\", otevřete nastavení a povolte tuto kategorii. Poté budete moct odeslat segment jako \"Nehudební\" místo sponzorského. Pokud jste zmateni, přečtěte si prosím pokyny."
@@ -811,6 +811,21 @@
"LearnMore": {
"message": "Zjistit více"
},
+ "CopyDownvoteButtonInfo": {
+ "message": "Zahlasuje proti a vytvoří pro vás lokální kopii pro opětovné odeslání"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "Otevřít wiki stránku této kategorie."
+ },
+ "CopyAndDownvote": {
+ "message": "Zkopírovat a hlasovat proti"
+ },
+ "ContinueVoting": {
+ "message": "Pokračovat v hlasování"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "Toto bude okamžitě platit pro vaše segmenty"
+ },
"SponsorTimeEditScrollNewFeature": {
"message": "Použijte kolečko myši při přechodu přes editační okno pro rychlou úpravu času. Kombinace kláves Ctrl nebo Shift mohou být použity k doladění změn."
}
diff --git a/public/_locales/da/messages.json b/public/_locales/da/messages.json
index e7e131d1..c7411441 100644
--- a/public/_locales/da/messages.json
+++ b/public/_locales/da/messages.json
@@ -52,6 +52,9 @@
"reskip": {
"message": "Spring over"
},
+ "unmute": {
+ "message": "Lyd til"
+ },
"paused": {
"message": "Sat på pause"
},
@@ -115,7 +118,29 @@
"submitCheck": {
"message": "Er du sikker på, at du vil indsende dette?"
},
+ "whitelistChannel": {
+ "message": "Hvidliste kanal"
+ },
+ "removeFromWhitelist": {
+ "message": "Fjern kanal fra hvidliste"
+ },
"voteOnTime": {
"message": "Stem På Et Segment"
+ },
+ "Submissions": {
+ "message": "Indsendelser"
+ },
+ "savedPeopleFrom": {
+ "message": "Du har reddet folk fra "
+ },
+ "viewLeaderboard": {
+ "message": "Topliste"
+ },
+ "recordTimesDescription": {
+ "message": "Indsend"
+ },
+ "submissionEditHint": {
+ "message": "Sektionsredigering vises, når du klikker på afsend",
+ "description": "Appears in the popup to inform them that editing has been moved to the video player."
}
}
diff --git a/public/_locales/de/messages.json b/public/_locales/de/messages.json
index c2536ca6..a5452119 100644
--- a/public/_locales/de/messages.json
+++ b/public/_locales/de/messages.json
@@ -573,7 +573,7 @@
"message": "Musikvideoteile ohne Musik"
},
"category_poi_highlight": {
- "message": "Hervorheben"
+ "message": "Highlight"
},
"category_poi_highlight_description": {
"message": "Der Teil des Videos, nach dem die meisten Leute suchen, ähnlich wie \"Video startet bei x\" Kommentare."
@@ -700,7 +700,7 @@
"message": "Nicht korrekt oder falsches Timing"
},
"incorrectCategory": {
- "message": "Falsche Kategorie"
+ "message": "Kategorie ändern"
},
"nonMusicCategoryOnMusic": {
"message": "Dieses Video ist als Musikvideo kategorisiert. Bist du dir sicher, dass es ein gesponsertes Videosegment hat? Wenn dies tatsächlich ein Musikvideoteil ohne Musik ist, öffne die Optionen von SponsorBlock und aktiviere diese Kategorie. Danach kannst du dieses Segment als solches markieren. Bitte lese die Richtlinien, wenn du dir nicht sicher bist."
@@ -811,6 +811,21 @@
"LearnMore": {
"message": "Erfahre mehr"
},
+ "CopyDownvoteButtonInfo": {
+ "message": "Meldet als unzulässig und erstellt eine lokale Kopie zur späteren Einreichung"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "Den Wiki-Artikel dieser Kategorie aufrufen."
+ },
+ "CopyAndDownvote": {
+ "message": "Kopieren und abwerten"
+ },
+ "ContinueVoting": {
+ "message": "Bewerten fortsetzen"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "Dies wirkt sich sofort auf eigene Segmente aus"
+ },
"SponsorTimeEditScrollNewFeature": {
"message": "Benutze das Mausrad während der Mauszeiger über dem Eingabefeld schwebt um die Zeit schnell anzupassen. Benutze Strg bzw. Shift für gröbere/genauere Änderungen."
}
diff --git a/public/_locales/el/messages.json b/public/_locales/el/messages.json
index 57104163..7ae1cab4 100644
--- a/public/_locales/el/messages.json
+++ b/public/_locales/el/messages.json
@@ -139,9 +139,6 @@
"chooseACategory": {
"message": "Επιλέξτε μια κατηγορία"
},
- "incorrectCategory": {
- "message": "Λάθος κατηγορία"
- },
"multipleSegments": {
"message": "Πολλαπλά Τμήματα"
},
diff --git a/public/_locales/es/messages.json b/public/_locales/es/messages.json
index 45c78f50..45ed976e 100644
--- a/public/_locales/es/messages.json
+++ b/public/_locales/es/messages.json
@@ -700,7 +700,7 @@
"message": "Tiempo incorrecto/equivocado"
},
"incorrectCategory": {
- "message": "Categoría Incorrecta"
+ "message": "Cambiar Categoría"
},
"nonMusicCategoryOnMusic": {
"message": "Este video está clasificado como música. ¿Estás seguro de que esto tiene un sponsor? Si esto es realmente un \"Segmento Sin Música\", abre las opciones de la extensión y activa esta categoría. Entonces, puedes enviar este segmento como \"Sin Música\" en lugar de sponsor. Por favor, lee las instrucciones si estás confundido/a."
@@ -811,6 +811,21 @@
"LearnMore": {
"message": "Aprenda Más"
},
+ "CopyDownvoteButtonInfo": {
+ "message": "Vota negativamente y crea una copia local para que la puedas volver a enviar"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "Abrir la página de la wiki de esta categoría."
+ },
+ "CopyAndDownvote": {
+ "message": "Copiar y votar negativamente"
+ },
+ "ContinueVoting": {
+ "message": "Continuar Votando"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "Esto se aplicará instantáneamente a tus segmentos"
+ },
"SponsorTimeEditScrollNewFeature": {
"message": "Utilice la rueda del ratón mientras pasa el cursor por encima del cuadro de edición para ajustar el tiempo. Se pueden utilizar combinaciones de la tecla ctrl o shift para afinar los cambios."
}
diff --git a/public/_locales/et/messages.json b/public/_locales/et/messages.json
index 8fdc05b8..0e92fe8b 100644
--- a/public/_locales/et/messages.json
+++ b/public/_locales/et/messages.json
@@ -700,7 +700,7 @@
"message": "Sobimatu/vale ajastus"
},
"incorrectCategory": {
- "message": "Vale kategooria"
+ "message": "Muuda kategooriat"
},
"nonMusicCategoryOnMusic": {
"message": "See video on muusikana kategoriseeritud. Kas oled kindel, et sellel on sponsor? Kui see on tegelikult \"mitte-muusika segment\", ava laienduse valikud ning luba see kategooria. Seejärel saad selle segmendi saata \"mitte-muusika\" kategoorias. Segaduse korral palun loe üle juhised."
@@ -766,6 +766,21 @@
"LearnMore": {
"message": "Lisateave"
},
+ "CopyDownvoteButtonInfo": {
+ "message": "Annab vastuhääle ja loob kohaliku koopia, mida saad uuesti saata"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "Ava selle kategooria vikileht."
+ },
+ "CopyAndDownvote": {
+ "message": "Kopeeri ja anna vastuhääl"
+ },
+ "ContinueVoting": {
+ "message": "Jätka hääletamist"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "See rakendub sinu segmentidele koheselt"
+ },
"SponsorTimeEditScrollNewFeature": {
"message": "Kasuta hiirekursorit muutmiskasti kohal, et kiirelt aega reguleerida. Täpsemaks muutmiseks hoia kerimise ajal all Ctrl või Shift klahvi."
}
diff --git a/public/_locales/fi/messages.json b/public/_locales/fi/messages.json
index 6c85a5ec..6f5ea836 100644
--- a/public/_locales/fi/messages.json
+++ b/public/_locales/fi/messages.json
@@ -700,7 +700,7 @@
"message": "Virheellinen/väärä aika"
},
"incorrectCategory": {
- "message": "Väärä kategoria"
+ "message": "Vaihda kategoria"
},
"nonMusicCategoryOnMusic": {
"message": "Tämä video on luokiteltu musiikiksi. Oletko varma, että siinä on sponsori? Jos tämä on oikeasti \"Musiikiton segmentti\", avaa laajennuksen asetukset ja ota tämä kategoria käyttöön. Sitten voit lähettää tämän segmentin oikeassa kategoriassa. Lue säännöt, jos olet vielä hämilläsi."
@@ -811,6 +811,21 @@
"LearnMore": {
"message": "Opi lisää"
},
+ "CopyDownvoteButtonInfo": {
+ "message": "Äänestää alas ja luo paikallisen kopion, jonka voit lähettää uudelleen"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "Avaa tämän kategorian wiki-sivu."
+ },
+ "CopyAndDownvote": {
+ "message": "Kopioi ja äänestä alas"
+ },
+ "ContinueVoting": {
+ "message": "Jatka äänestystä"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "Tämä vaikuttaa sinun segmentteihin välittömästi"
+ },
"SponsorTimeEditScrollNewFeature": {
"message": "Käytä hiiren rullaa samalla kun osoitin on muokkauslaatikon päällä säätääksesi aikaa nopeasti. Ctrl- tai Shift-näppäimen yhdistelmiä voi käyttää muutoksien hienosäätelyyn."
}
diff --git a/public/_locales/fr/messages.json b/public/_locales/fr/messages.json
index e6500f75..609a7e07 100644
--- a/public/_locales/fr/messages.json
+++ b/public/_locales/fr/messages.json
@@ -700,7 +700,7 @@
"message": "Segment de mauvaise qualité"
},
"incorrectCategory": {
- "message": "Mauvaise catégorie"
+ "message": "Changer de catégorie"
},
"nonMusicCategoryOnMusic": {
"message": "Cette vidéo est catégorisée comme de la musique. Êtes-vous sûr qu'elle est sponsorisée? S'il s'agit en fait d'un \"Segment non musical\", allez dans les options de l'extension et activez cette catégorie. Ensuite, vous pourrez soumettre ce segment en tant que \"Segment non musical\" au lieu de sponsor. Lisez les instructions en cas de confusion."
@@ -811,6 +811,21 @@
"LearnMore": {
"message": "En savoir plus"
},
+ "CopyDownvoteButtonInfo": {
+ "message": "Vote négatif et crée une copie locale que vous pouvez soumettre à nouveau"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "Ouvrez la page wiki de cette catégorie."
+ },
+ "CopyAndDownvote": {
+ "message": "Copier et voter contre"
+ },
+ "ContinueVoting": {
+ "message": "Continuer à voter"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "Cela s'appliquera instantanément à vos segments"
+ },
"SponsorTimeEditScrollNewFeature": {
"message": "Utilisez la molette de votre souris en survolant la boîte d'édition pour ajuster rapidement le minutage. Les combinaisons de touches Ctrl ou Shift peuvent être utilisées pour affiner les modifications."
}
diff --git a/public/_locales/hr/messages.json b/public/_locales/hr/messages.json
index 1014c626..790790b6 100644
--- a/public/_locales/hr/messages.json
+++ b/public/_locales/hr/messages.json
@@ -52,6 +52,9 @@
"reskip": {
"message": "Preskoči opet"
},
+ "unmute": {
+ "message": "Uključi zvuk"
+ },
"paused": {
"message": "Pauzirano"
},
@@ -79,6 +82,15 @@
"sponsorEnd": {
"message": "Isječak završava sada"
},
+ "sponsorCancel": {
+ "message": "Otkaži Kreiranje Segmenta"
+ },
+ "noVideoID": {
+ "message": "Nijedan YouTube video nije pronađen.\nAko ovo nije točno, osvježite karticu."
+ },
+ "refreshSegments": {
+ "message": "Osvježi segmente"
+ },
"success": {
"message": "Uspjeh!"
},
@@ -97,15 +109,33 @@
"openPopup": {
"message": "Otvori okvir SponsorBlock"
},
+ "closePopup": {
+ "message": "Zatvori izbornik"
+ },
"SubmitTimes": {
"message": "Podnesi isječke"
},
"submitCheck": {
"message": "Jesi li siguran da želiš unijeti ovo?"
},
+ "whitelistChannel": {
+ "message": "Dopusti kanal"
+ },
+ "removeFromWhitelist": {
+ "message": "Izbaci kanal iz bijele liste"
+ },
"voteOnTime": {
"message": "Glasaj za isječak"
},
+ "Submissions": {
+ "message": "Podnesci"
+ },
+ "savedPeopleFrom": {
+ "message": "Sačuvali ste ljude od"
+ },
+ "viewLeaderboard": {
+ "message": "Ljestvica"
+ },
"recordTimesDescription": {
"message": "Pošalji"
},
@@ -113,21 +143,54 @@
"message": "Uređivanje dijela prikazat će se nakon što pritisneš gumb za slanje",
"description": "Appears in the popup to inform them that editing has been moved to the video player."
},
+ "popupHint": {
+ "message": "Savjet: Možete namjestiti tipke za podnošenje u opcijama"
+ },
"clearTimesButton": {
"message": "Očisti vremena"
},
"submitTimesButton": {
"message": "Unesi vremena"
},
+ "publicStats": {
+ "message": "Ovo se koristi na stranici sa javnim statistikama da se pokaže koliko se pridonijeli. Pogledajte"
+ },
"Username": {
"message": "Korisničko ime"
},
"setUsername": {
"message": "Postavi korisničko ime"
},
+ "copyPublicID": {
+ "message": "Kopiraj javni UserID"
+ },
+ "discordAdvert": {
+ "message": "Pridružite nam se u službenoj Discord zajednici i pošaljite svoje prijedloge i povrate informacije!"
+ },
+ "hideThis": {
+ "message": "Sakrijte ovo"
+ },
"Options": {
"message": "Opcije"
},
+ "showButtons": {
+ "message": "Pokažite gumbove na YouTube Player-u"
+ },
+ "hideButtons": {
+ "message": "Sakrite gumbove na YouTube Player-u"
+ },
+ "hideButtonsDescription": {
+ "message": "Ovo sakrije gumbove za pridonose segmenta za preskočiti koje se pokažu na YouTuve Player-u."
+ },
+ "showSkipButton": {
+ "message": "Ostavite gumb za preskakanje"
+ },
+ "showInfoButton": {
+ "message": "Pokažite gumb za Informacije na YouTube Player-u"
+ },
+ "hideInfoButton": {
+ "message": "Sakrijte gumb za Informacije na YouTube Player-u"
+ },
"showSkipNotice": {
"message": "Pokaži obavijest nakon preskakanja isječka"
},
@@ -309,9 +372,6 @@
"downvoteDescription": {
"message": "Neispravno/krivo vrijeme"
},
- "incorrectCategory": {
- "message": "Kriva kategorija"
- },
"nonMusicCategoryOnMusic": {
"message": "Ovaj je video kategoriziran kao glazba. Je li stvarno ima sponzora? Ako je ovo zapravo „Ne-glazbeni segment”, otvori opcije proširenja i aktiviraj ovu kategoriju. Zatim ovaj segment možeš posalti kao „Ne-glazbeni” umjesto sponzora. Pročitaj smjernice ako nešto nije jasno."
},
diff --git a/public/_locales/hu/messages.json b/public/_locales/hu/messages.json
index a2160da2..5a43da37 100644
--- a/public/_locales/hu/messages.json
+++ b/public/_locales/hu/messages.json
@@ -52,6 +52,9 @@
"reskip": {
"message": "Újra-átugrás"
},
+ "unmute": {
+ "message": "Némítás feloldása"
+ },
"paused": {
"message": "Szüneteltetve"
},
@@ -158,6 +161,9 @@
"setUsername": {
"message": "Felhasználónév megadása"
},
+ "copyPublicID": {
+ "message": "Nyilvános UserID másolása"
+ },
"discordAdvert": {
"message": "Csatlakozzon a hivatalos discord szerverhez, hogy javaslatokat és visszajelzést adhasson!"
},
@@ -176,6 +182,9 @@
"hideButtonsDescription": {
"message": "Ez elrejti az átugrandó szegmensek megjelöléséhez használt gombokat a YouTube lejátszón."
},
+ "showSkipButton": {
+ "message": "Kiemeléshez ugrás gomb maradjon a lejátszón"
+ },
"showInfoButton": {
"message": "Info gomb mutatása a YouTube lejátszón"
},
@@ -197,6 +206,9 @@
"whatViewTracking": {
"message": "Ez a funkció követi, mely szegmenseket ugrotta át, hogy más felhasználók megtudhassák mennyit segítettek a bejelentéseik és a szavazatokkal együtt egy mértékegységként van használva, hogy ne kerülhessen spam az adatbázisba. A bővítmény küld egy üzenetet a szervernek, minden alkalommal, mikor átugrik egy szegmenst. Remélhetőleg nem sokan állítják át ezt a beállítást, hogy a számok pontosak maradhassanak. :)"
},
+ "enableViewTrackingInPrivate": {
+ "message": "Átugrások számlálásának engedélyezése privát/inkognitó füleken"
+ },
"enableQueryByHashPrefix": {
"message": "Lekérdezés Hash előtaggal"
},
@@ -215,6 +227,21 @@
"showSkipNotice": {
"message": "Jelezzen, ha egy szegmens át lett ugorva"
},
+ "noticeVisibilityMode0": {
+ "message": "Teljes méretű átugrási értesítők"
+ },
+ "noticeVisibilityMode1": {
+ "message": "Kis méretű átugrási értesítők Auto átugrás esetén"
+ },
+ "noticeVisibilityMode2": {
+ "message": "Csak kis méretű átugrási értesítők"
+ },
+ "noticeVisibilityMode3": {
+ "message": "Halvány átugrási értesítők Auto átugrás esetén"
+ },
+ "noticeVisibilityMode4": {
+ "message": "Csak halvány átugrási értesítők"
+ },
"longDescription": {
"message": "A SponsorBlock-al átugorhatja a szponzorokat, introkat, outrokat, feliratkozás emlékeztetőket és a YouTube videók többi idegesítő részeit. A SponsorBlock egy közösség által vezérelt böngészőbővítmény, ami lehetővé tesz bárkit arra, hogy megjelölhesse egy szponzor vagy más szegmens kezdő és végpontjait. Ha megosztja ezt az információt, mindenki más ennek a bővítménynek a birtokában egyenesen átugorja majd ezt a szponzorszegmenst. Emellett például a zene videók nem-zene részei is átugorhatóak.",
"description": "Full description of the extension on the store pages."
@@ -238,6 +265,9 @@
"setSkipShortcut": {
"message": "Billentyű beállítása szegmens átugráshoz"
},
+ "setStartSponsorShortcut": {
+ "message": "Billentyű beállítása a szegmens kezdéséhez/befejezéséhez"
+ },
"setSubmitKeybind": {
"message": "Billentyű beállítása a beküldés gombhoz"
},
@@ -269,9 +299,31 @@
"skip": {
"message": "Átugrás"
},
+ "mute": {
+ "message": "Némítás"
+ },
"skip_category": {
"message": "Átugorja ezt: {0}?"
},
+ "mute_category": {
+ "message": "{0} némítása?"
+ },
+ "skip_to_category": {
+ "message": "Ugrás ide: {0}?",
+ "description": "Used for skipping to things (Skip to Highlight)"
+ },
+ "skipped": {
+ "message": "{0} átugorva",
+ "description": "Example: Sponsor Skipped"
+ },
+ "muted": {
+ "message": "{0} némítva",
+ "description": "Example: Sponsor Muted"
+ },
+ "skipped_to_category": {
+ "message": "Ide ugorva: {0}",
+ "description": "Used for skipping to things (Skipped to Highlight)"
+ },
"disableAutoSkip": {
"message": "Auto átugrás kikapcsolása"
},
@@ -320,6 +372,9 @@
"changeUserID": {
"message": "UserID importálása / exportálása"
},
+ "whatChangeUserID": {
+ "message": "Ez privát információnak minősül. Ez olyan, mint egy jelszó, így nem ajánlott megosztani senkivel. Ha valakinek birtokában van, megszemélyesítheti önt. Ha a nyilvános userID-ját keresi, kattintson a vágólap ikonra a felugró ablakban."
+ },
"setUserID": {
"message": "UserID beállítása"
},
@@ -335,9 +390,22 @@
"supportOtherSites": {
"message": "Harmadik fél Youtube oldalainak támogatása"
},
+ "supportOtherSitesDescription": {
+ "message": "Harmadik fél YouTube oldalainak támogatása. A támogatás bekapcsolásához el kell fogadnia az extra engedélyeket. NEM működik inkognitó módban Chrome-ban és egyéb Chromium változatokban.",
+ "description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
+ },
+ "supportedSites": {
+ "message": "Támogatott oldalak: "
+ },
"optionsInfo": {
"message": "Invidious támogatás engedélyezése, autoátugrás kikapcsolása, gombok eltűntetése és több."
},
+ "addInvidiousInstance": {
+ "message": "Harmadik fél kliens példányának hozzáadása"
+ },
+ "addInvidiousInstanceDescription": {
+ "message": "Egyedi példány hozzáadása. Formátuma CSAK a domain legyen. Például: invidious.ajay.app"
+ },
"add": {
"message": "Hozzáadás"
},
@@ -359,6 +427,12 @@
"minDurationDescription": {
"message": "A beállított értéknél rövidebb szegmenseket nem ugorja át és nem jeleníti meg a lejátszó."
},
+ "skipNoticeDuration": {
+ "message": "Átugrási értesítés hossza (másodpercek):"
+ },
+ "skipNoticeDurationDescription": {
+ "message": "Az átugrási értesítés ennyi ideig marad a képernyőn. Manuális átugrásnál tovább is látható maradhat."
+ },
"shortCheck": {
"message": "A következő szegmens rövidebb, mint az Ön által beállított minimális időtartam. Ez azt jelentheti, hogy már beküldhették, csak emiatt az opció miatt Önnek figyelmen kívül marad. Biztosan beküldi?"
},
@@ -486,9 +560,15 @@
"category_preview": {
"message": "Előzetes/Ismétlés"
},
+ "category_preview_description": {
+ "message": "Az előző részekben történtek rövid ismétlése, vagy a videó további tartalmának előzetese. Összevágott jelenetekhez, nem szóbeli összegzéshez."
+ },
"category_music_offtopic": {
"message": "Zene: nem-zene szegmens"
},
+ "category_music_offtopic_description": {
+ "message": "Csak videóklipekhez. Ezt csak videóklipek olyan részeihez szabad használni, amiket nem fed le a többi kategória."
+ },
"category_music_offtopic_short": {
"message": "Nem-Zene"
},
@@ -516,9 +596,28 @@
"disable": {
"message": "Kikapcsol"
},
+ "autoSkip_POI": {
+ "message": "Auto ugrás a kezdetéhez"
+ },
+ "manualSkip_POI": {
+ "message": "Kérdezzen rá a videó betöltésekor"
+ },
+ "showOverlay_POI": {
+ "message": "Megjelenítés a keresősávban"
+ },
+ "autoSkipOnMusicVideos": {
+ "message": "Minden szegmens automatikus átugrása, ha van nem-zene szegmens"
+ },
+ "muteSegments": {
+ "message": "Szegmensek engedélyezése, amelyek lenémítják a hangot az átugrás helyett"
+ },
"colorFormatIncorrect": {
"message": "A szín helytelenül van formázva. Egy 3 vagy 6 számjegyből álló hex kódnak kell lennie egy kettőskereszttel az elején."
},
+ "previewColor": {
+ "message": "Beküldetlen színe",
+ "description": "Referring to submissions that have not been sent to the server yet."
+ },
"seekBarColor": {
"message": "Keresősáv színe"
},
@@ -547,6 +646,13 @@
"chooseACategory": {
"message": "Válasszon kategóriát"
},
+ "enableThisCategoryFirst": {
+ "message": "Hogy \"{0}\" kategóriájú szegmenst küldhessen be, először engedélyeznie kell a beállításokban. Most átirányításra kerül a beállításokhoz.",
+ "description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
+ },
+ "poiOnlyOneSegment": {
+ "message": "Figyelem: Az ilyen típusú szegmensekből egyszerre csak egy lehet aktív. Több beküldése esetén véletlenszerűen az egyik fog megjelenni."
+ },
"youMustSelectACategory": {
"message": "Minden szegmenshez kategóriát kell választania beküldés előtt!"
},
@@ -559,9 +665,28 @@
"hiddenDueToDuration": {
"message": "elrejtve: túl rövid"
},
+ "channelDataNotFound": {
+ "description": "This error appears in an alert when they try to whitelist a channel and the extension is unable to determine what channel they are looking at.",
+ "message": "A csatorna ID még nem került betöltésre. Ha beágyazott videót használ, próbálja meg inkább a YouTube oldalon keresztül. Ezt okozhatja még a YouTube elrendezésének változása is. Ha így gondolja, hagyjon egy kommentet itt:"
+ },
+ "videoInfoFetchFailed": {
+ "message": "Úgy tűnik, valami korlátozza a SponsorBlock hozzáférését a videó adataihoz. További információkért látogasson el ide: https://github.com/ajayyy/SponsorBlock/issues/741 (angol nyelvű)."
+ },
+ "youtubePermissionRequest": {
+ "message": "Úgy tűnik, a SponsorBlock nem tud csatlakozni a YouTube API-hoz. A javításhoz fogadja el a megjelenő engedélykérést, várjon néhány másodpercet, majd töltse újra az oldalt."
+ },
"acceptPermission": {
"message": "Engedély jóváhagyása"
},
+ "permissionRequestSuccess": {
+ "message": "Engedélykérés sikeres!"
+ },
+ "permissionRequestFailed": {
+ "message": "Engedélykérés sikertelen. Nem nyomott az elutasításra?"
+ },
+ "adblockerIssueWhitelist": {
+ "message": "Ha nem sikerül megoldani a problémát, kapcsolja ki a \"Csatorna ellenőrzése átugrás előtt\" opciót, mert a SponsorBlock nem tudja megszerezni a csatorna-információkat ehhez a videóhoz"
+ },
"forceChannelCheck": {
"message": "Csatorna ellenőrzése átugrás előtt"
},
@@ -575,7 +700,7 @@
"message": "Helytelen/rossz időzítés"
},
"incorrectCategory": {
- "message": "Hibás kategória"
+ "message": "Kategória módosítása"
},
"nonMusicCategoryOnMusic": {
"message": "Ez a videó zeneként van kategorizálva. Biztos benne, hogy ennek van szponzora? Ha ez valójában egy \"nem-zene szegmens\", nyissa meg a bővítmény beállításait és kapcsolja be azt a kategóriát. Ezt követően elküldheti ezt a szegmenst \"nem-zene\"-ként szponzor helyett. Amennyiben nem érti, kérjük olvassa el az irányelveket."
@@ -603,28 +728,105 @@
"message": "Értettem",
"description": "Used as the button to dismiss a tooltip"
},
+ "experiementOptOut": {
+ "message": "Minden további kísérlet elutasítása",
+ "description": "This is used in a popup about a new experiment to get a list of unlisted videos to back up since all unlisted videos uploaded before 2017 will be set to private."
+ },
"hideForever": {
"message": "Eltüntetés örökre"
},
+ "warningChatInfo": {
+ "message": "Ön figyelmeztetést kapott, és ideiglenesen nem tud szegmenseket beküldeni. Ez azt jelenti, hogy észrevettük, hogy néhány ártalmatlan gyakori hibát vétett. Kérjük erősítse meg, hogy megértette a szabályokat és eltávolítjuk a figyelmeztetést. Ehhez a beszélgetéshez csatlakozhat a discord.gg/SponsorBlock vagy matrix.to/#/#sponsor:ajay.app címeken is."
+ },
+ "voteRejectedWarning": {
+ "message": "Szavazás visszautasítva figyelmeztetés miatt. Kattintson, hogy megnyisson egy beszélgetést a tisztázásához, vagy jöjjön vissza később, amikor ideje van.",
+ "description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
+ },
"Donate": {
"message": "Támogatás"
},
+ "hideDonationLink": {
+ "message": "Támogatás link elrejtése"
+ },
+ "helpPageThanksForInstalling": {
+ "message": "Köszönjük, hogy telepítette a SponsorBlockot."
+ },
+ "helpPageReviewOptions": {
+ "message": "Kérjük, nézze át az alábbi beállításokat"
+ },
+ "helpPageFeatureDisclaimer": {
+ "message": "Sok funkció le van tiltva alapból. Ha át akar ugrani bevezetőket, záróképernyőket, Invidioust használna, stb., engedélyezze őket alább. Lehetőség van a felület különböző elemeinek elrejtésére/megjelenítésére is."
+ },
+ "helpPageHowSkippingWorks": {
+ "message": "Az átugrás működése"
+ },
+ "helpPageHowSkippingWorks1": {
+ "message": "A videók szegmensei automatikusan átugrásra kerülnek, ha szerepelnek az adatbázisban. Megnyithatja a felugró ablakot a bővítmény ikonjára kattintva, hogy megtekinthesse őket."
+ },
+ "helpPageHowSkippingWorks2": {
+ "message": "Ahányszor átugrik egy szegmenst, kapni fog egy értesítést. Ha rossznak tűnik az időzítés, szavazza le a leszavazás gombra kattintva! A felugró ablakban is szavazhat."
+ },
"Submitting": {
"message": "Küldés"
},
+ "helpPageSubmitting1": {
+ "message": "Beküldeni lehet a felugró ablakban a \"Szegmens eleje\" gombra kattintva, vagy a videó lejátszón lévő gombokkal."
+ },
+ "helpPageSubmitting2": {
+ "message": "A lejátszás gomb megnyomása jelezte a szegmens kezdetét és a stop gomb megnyomása jelzi a végét. Több szponzort is előkészíthet, mielőtt a beküldésre nyomna. A feltöltés gombra kattintva beküldésre kerülnek a szegmensek. A szemetesre kattintva kitörlődnek."
+ },
"Editing": {
"message": "Szerkesztés"
},
+ "helpPageEditing1": {
+ "message": "Ha hibázott, szerkesztheti, vagy törölheti a szegmenseit, a felfele nyílra kattintást követően."
+ },
"helpPageTooSlow": {
"message": "Ez túl lassú"
},
+ "helpPageTooSlow1": {
+ "message": "Vannak gyorsbillentyűk is, ha használni szeretné őket. Nyomja meg a pontosvessző billentyűt egy szponzor szegmens elejének/végének jelzéséhez és nyomja meg a vesszőt a beküldéshez. Ezek módosíthatók a beállításokban. Ha nem QWERTY-t használ, valószínűleg szükséges lesz megváltoztatnia a billentyűket."
+ },
+ "helpPageCopyOfDatabase": {
+ "message": "Szerezhetek egy másolatot az adatbázisról? Mi történik, ha eltűnik a fejlesztő?"
+ },
+ "helpPageCopyOfDatabase1": {
+ "message": "Az adatbázis nyilvános, és elérhető itt:"
+ },
+ "helpPageCopyOfDatabase2": {
+ "message": "A forráskód szabadon elérhető. Tehát még ha valami történne is velem, a beküldések nem vesznek el."
+ },
"helpPageNews": {
"message": "Hírek és hogyan készül"
},
+ "helpPageSourceCode": {
+ "message": "Hol szerezhetem meg a forráskódot?"
+ },
"Credits": {
"message": "Készítők"
},
+ "highlightNewFeature": {
+ "message": "Új! Juss a videó lényegéhez csak egy kattintással, az új kiemelés kategóriával"
+ },
"LearnMore": {
"message": "Tudj meg többet"
+ },
+ "CopyDownvoteButtonInfo": {
+ "message": "Leszavazza és készít egy helyi másolatot, amit beküldhet"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "A kategória wiki lapjának megnyitása."
+ },
+ "CopyAndDownvote": {
+ "message": "Másol és leszavaz"
+ },
+ "ContinueVoting": {
+ "message": "Szavazás folytatása"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "Ez azonnal érvényes lesz a szegmenseire"
+ },
+ "SponsorTimeEditScrollNewFeature": {
+ "message": "Használja egérgörgőjét a szerkesztő mező fölött, hogy gyorsan módosíthassa az időt. A ctrl vagy shift billentyűk kombinációjával finomhangolhatja a változás mértékét."
}
}
diff --git a/public/_locales/id/messages.json b/public/_locales/id/messages.json
index 35b3ec1c..cc840333 100644
--- a/public/_locales/id/messages.json
+++ b/public/_locales/id/messages.json
@@ -699,9 +699,6 @@
"downvoteDescription": {
"message": "Salah, Waktu Tidak Tepat"
},
- "incorrectCategory": {
- "message": "Salah Kategori"
- },
"nonMusicCategoryOnMusic": {
"message": "Video ini dikategorikan sebagai musik. Apakah anda yakin ini berisi sponsor? Jika ini ternyata adalah \"Segmen non-musik\", buka pengaturan ekstensi dan aktifkan kategorinya. Lalu, anda bisa mengirim segmen ini sebagai \"Non-musik\" bukannya sponsor. Harap membaca panduan jika anda kebingungan."
},
diff --git a/public/_locales/it/messages.json b/public/_locales/it/messages.json
index 850faae3..a2a0684c 100644
--- a/public/_locales/it/messages.json
+++ b/public/_locales/it/messages.json
@@ -696,9 +696,6 @@
"downvoteDescription": {
"message": "Tempo Non Corretto/Errato"
},
- "incorrectCategory": {
- "message": "Categoria Errata"
- },
"nonMusicCategoryOnMusic": {
"message": "Questo video è classificato come musica. Sei sicuro che questo video contenga uno sponsor? Se questo è in realtà un \"Segmento Non-Musica\", apri le opzioni di questa estensione e abilita questa categoria. Quindi, è possibile inviare questo segmento come \"Non-Music\" invece di sponsor. Si prega di leggere la guida se si è confusi."
},
diff --git a/public/_locales/ja/messages.json b/public/_locales/ja/messages.json
index 358b7bef..0bab152b 100644
--- a/public/_locales/ja/messages.json
+++ b/public/_locales/ja/messages.json
@@ -52,6 +52,9 @@
"reskip": {
"message": "再スキップ"
},
+ "unmute": {
+ "message": "ミュート解除"
+ },
"paused": {
"message": "一時停止中"
},
@@ -80,13 +83,13 @@
"message": "セグメント終了を記録"
},
"sponsorCancel": {
- "message": "区間の作成を取り止める"
+ "message": "セグメントの作成を取り消す"
},
"noVideoID": {
"message": "YouTube動画が見つかりませんでした。\nこれが正しくない場合は、タブを再読み込みしてください。"
},
"refreshSegments": {
- "message": "区域を更新"
+ "message": "セグメントを更新"
},
"success": {
"message": "成功しました!"
@@ -158,6 +161,9 @@
"setUsername": {
"message": "ユーザー名を設定"
},
+ "copyPublicID": {
+ "message": "パブリックユーザIDをコピー"
+ },
"discordAdvert": {
"message": "公式Discordサーバーに参加して意見やフィードバックをお寄せください!"
},
@@ -176,6 +182,9 @@
"hideButtonsDescription": {
"message": "YouTube再生画面のセグメント提出ボタンを非表示にします。"
},
+ "showSkipButton": {
+ "message": "プレイヤーの「ハイライトまでスキップ」ボタン表示を維持する"
+ },
"showInfoButton": {
"message": "YouTubeプレーヤーの情報ボタンを表示する"
},
@@ -219,19 +228,19 @@
"message": "セグメントがスキップされた後に通知を表示する"
},
"noticeVisibilityMode0": {
- "message": "飛び越し通知(全体)"
+ "message": "標準サイズのスキップ通知"
},
"noticeVisibilityMode1": {
- "message": "自動飛び越し通知(小)"
+ "message": "自動スキップ通知を小型化"
},
"noticeVisibilityMode2": {
- "message": "すべての飛び越し通知(小)"
+ "message": "すべてのスキップ通知を小型化"
},
"noticeVisibilityMode3": {
- "message": "表示の終了した自動飛び越し通知"
+ "message": "自動スキップ通知を透過"
},
"noticeVisibilityMode4": {
- "message": "表示の終了した全ての飛び越し通知"
+ "message": "すべてのスキップ通知を透過"
},
"longDescription": {
"message": "SponsorBlockはスポンサー、イントロ、アウトロ、チャンネル登録のお願いなど、YouTube動画の煩わしい部分をスキップします。SponsorBlockはYouTube動画のスポンサー付きセグメントなどの開始時間と終了時間を誰でも投稿できる、クラウドソースのブラウザ拡張機能です。一人がセグメントの情報を送信すると、この拡張機能を使用している他の全員が、スポンサー付きセグメントをスキップできるようになります。また、ミュージックビデオの音楽がない部分をスキップすることもできます。",
@@ -290,9 +299,15 @@
"skip": {
"message": "スキップ"
},
+ "mute": {
+ "message": "ミュート"
+ },
"skip_category": {
"message": "{0} をスキップしますか?"
},
+ "mute_category": {
+ "message": "{0} をミュートしますか?"
+ },
"skip_to_category": {
"message": "{0}まで飛び越しますか?",
"description": "Used for skipping to things (Skip to Highlight)"
@@ -301,6 +316,10 @@
"message": "{0}を飛び越しました",
"description": "Example: Sponsor Skipped"
},
+ "muted": {
+ "message": "{0} ミュート済み",
+ "description": "Example: Sponsor Muted"
+ },
"skipped_to_category": {
"message": "{0}まで飛び越しました",
"description": "Used for skipping to things (Skipped to Highlight)"
@@ -353,6 +372,9 @@
"changeUserID": {
"message": "ユーザーIDのインポート/エクスポート"
},
+ "whatChangeUserID": {
+ "message": "この情報を誰にも開示しないでください。これはパスワードのように、誰とも共有するべきではありません。 誰かがこれを持っている場合、あなたになりすますことができます。パブリックユーザーIDを探している場合は、ポップアップのクリップボードアイコンをクリックしてください。"
+ },
"setUserID": {
"message": "ユーザーIDを設定"
},
@@ -551,10 +573,10 @@
"message": "音楽以外の部分"
},
"category_poi_highlight": {
- "message": "強調表示"
+ "message": "ハイライト"
},
"category_poi_highlight_description": {
- "message": "ほとんどの人が必要としている動画の箇所。「xx:xx 開始」というようなコメントと類似。"
+ "message": "多くの人が求めている動画の部分。「動画はXからスタート」のようなコメントです。"
},
"category_livestream_messages": {
"message": "ライブ配信: 寄付/メッセージの読み上げ"
@@ -575,7 +597,7 @@
"message": "無効"
},
"autoSkip_POI": {
- "message": "動画の開始時刻まで飛び越し"
+ "message": "冒頭へ自動スキップ"
},
"manualSkip_POI": {
"message": "動画を読み込んだ際に確認する"
@@ -586,6 +608,9 @@
"autoSkipOnMusicVideos": {
"message": "非音楽区域がある場合,全区域を自動的に飛び越す"
},
+ "muteSegments": {
+ "message": "スキップする代わりに音声をミュートしてセグメントを許可"
+ },
"colorFormatIncorrect": {
"message": "カラーコードの書式が間違っています。 #から始まる3桁または6桁の16進数コードでなければなりません。"
},
@@ -625,6 +650,9 @@
"message": "\"{0}\" のカテゴリでセグメントを送信するには、オプションでセグメントを有効にする必要があります。オプション画面にリダイレクトします。",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
+ "poiOnlyOneSegment": {
+ "message": "警告: このタイプのセグメントは一度に最大一つだけ有効にすることができます。複数送信するとランダムなものが表示されます。"
+ },
"youMustSelectACategory": {
"message": "送信するすべてのセグメントにカテゴリを選択する必要があります!"
},
@@ -672,7 +700,7 @@
"message": "不正確あるいは間違った時刻です"
},
"incorrectCategory": {
- "message": "カテゴリが違います"
+ "message": "カテゴリーを変更してください"
},
"nonMusicCategoryOnMusic": {
"message": "この動画は音楽として分類されています。本当にこの動画にスポンサー部分がありますか? 本セグメントが本当に「音楽以外の区域」だった場合は、設定画面からこの分類を有効にしてください。その後、「スポンサー部分」の代わりに「音楽以外のセグメント」としてセグメントを提出できます。よく分からない場合は、ガイドラインを参照してください。"
@@ -707,6 +735,9 @@
"hideForever": {
"message": "二度と表示しない"
},
+ "warningChatInfo": {
+ "message": "警告のためにあなたは一時的にセグメントを提出することができなくなりました。これはあなたが悪意のない一般的なミスを犯していることに私たちが気づいた事を意味します、ルールを理解していることを確認していただければこの警告を解除します。discord.gg/SponsorBlock または matrix.to/#/#sponsor:ajay.app を使ってこのチャットに参加することもできます。"
+ },
"voteRejectedWarning": {
"message": "警告により投票が拒否されました。クリックして運営に連絡するか,少し時間を置いてからやりなおしてください。",
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
@@ -738,9 +769,30 @@
"Submitting": {
"message": "提出中"
},
+ "helpPageSubmitting1": {
+ "message": "提出するにはポップアップの「セグメント開始を記録」ボタン、またはビデオプレーヤー内にあるボタンを押してください。"
+ },
+ "helpPageSubmitting2": {
+ "message": "再生ボタンをクリックするとセグメントの開始、停止アイコンをクリックすると終了となります。 複数のスポンサーを用意してから送信ボタンを押すことができます。アップロードボタンをクリックすると提出されます。ゴミ箱をクリックすると削除されます。"
+ },
"Editing": {
"message": "編集中"
},
+ "helpPageEditing1": {
+ "message": "もし失敗しても、上矢印ボタンをクリックすれば、セグメントを編集・削除することができます。"
+ },
+ "helpPageTooSlow": {
+ "message": "遅すぎます"
+ },
+ "helpPageTooSlow1": {
+ "message": "利用可能なホットキーがあります。セミコロンキーを押してスポンサーセグメントの開始/終了を示し、アポストロフィキーを押して送信します。これらはオプションで変更できます。QWERTYを使わない場合は、キーバインドを変更したほうがいいでしょう。"
+ },
+ "helpPageCopyOfDatabase": {
+ "message": "データベースのコピーを取得できますか? あなたがいなくなった場合はどうなりますか?"
+ },
+ "helpPageCopyOfDatabase1": {
+ "message": "データベースは公開されており、次の場所で利用できます:"
+ },
"helpPageCopyOfDatabase2": {
"message": "ソースコードは自由に利用できます。運営になにがあろうとも,あなたの貢献(提出された区域)が失われることはありません。"
},
@@ -753,7 +805,28 @@
"Credits": {
"message": "謝辞"
},
+ "highlightNewFeature": {
+ "message": "新機能! 新しいハイライトカテゴリを使用し、動画の要点にワンクリックで\n移動できます。"
+ },
"LearnMore": {
"message": "さらに詳しく"
+ },
+ "CopyDownvoteButtonInfo": {
+ "message": "反対票を投じ、再提出するためにローカルコピーを作成します。"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "このカテゴリーのWikiページを開きます。"
+ },
+ "CopyAndDownvote": {
+ "message": "コピーして反対票を投じる"
+ },
+ "ContinueVoting": {
+ "message": "投票を続ける"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "この変更は即座にあなたのセグメントに適用されます"
+ },
+ "SponsorTimeEditScrollNewFeature": {
+ "message": "編集ボックスにカーソルを合わせながらマウスホイールを使用すると、時間をすばやく調整できます。 CtrlキーまたはShiftキーの組み合わせを使用して変更を微調整できます。"
}
}
diff --git a/public/_locales/ko/messages.json b/public/_locales/ko/messages.json
index d9bfa85b..c864c408 100644
--- a/public/_locales/ko/messages.json
+++ b/public/_locales/ko/messages.json
@@ -700,7 +700,7 @@
"message": "잘못된 타이밍입니다"
},
"incorrectCategory": {
- "message": "잘못된 카테고리입니다"
+ "message": "카테고리 변경"
},
"nonMusicCategoryOnMusic": {
"message": "이 영상은 음악 영상으로 분류됩니다. 정말로 스폰서가 있는 것이 확실한가요? 만약 음악 이외의 구간인 경우, 확장 옵션을 열어 이 카테고리를 활성화 하세요. 그리고, 이 구간을 스폰서 대신 음악이 아닌 구간으로 제출하세요. 헷갈릴 경우 가이드라인을 읽으세요."
@@ -811,6 +811,21 @@
"LearnMore": {
"message": "더보기"
},
+ "CopyDownvoteButtonInfo": {
+ "message": "반대에 투표한 뒤 다시 제출할 수 있도록 미제출 사본을 생성합니다"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "해당 카테고리의 위키 페이지를 엽니다."
+ },
+ "CopyAndDownvote": {
+ "message": "복사 및 반대"
+ },
+ "ContinueVoting": {
+ "message": "계속 투표"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "당신의 구간에 즉시 적용될 것입니다"
+ },
"SponsorTimeEditScrollNewFeature": {
"message": "편집 상자 위에 커서를 올린 채 스크롤하면 시간을 빠르게 조정할 수 있습니다. Ctrl이나 Shift 키를 누른 채로 스크롤하면 세밀한 조정이 가능합니다."
}
diff --git a/public/_locales/ml/messages.json b/public/_locales/ml/messages.json
index cfc28ef2..7ed40577 100644
--- a/public/_locales/ml/messages.json
+++ b/public/_locales/ml/messages.json
@@ -554,9 +554,6 @@
"downvoteDescription": {
"message": "തെറ്റായ / തെറ്റായ സമയം"
},
- "incorrectCategory": {
- "message": "തെറ്റായ വിഭാഗം"
- },
"nonMusicCategoryOnMusic": {
"message": "ഈ വീഡിയോയെ സംഗീതമായി വർഗ്ഗീകരിച്ചിരിക്കുന്നു. ഇതിന് ഒരു സ്പോൺസർ ഉണ്ടെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ? ഇത് യഥാർത്ഥത്തിൽ \"സംഗീതേതര വിഭാഗമാണ്\" എങ്കിൽ, വിപുലീകരണ ഓപ്ഷനുകൾ തുറന്ന് ഈ വിഭാഗം പ്രാപ്തമാക്കുക. തുടർന്ന്, സ്പോൺസറിന് പകരം \"നോൺ-മ്യൂസിക്\" എന്ന് നിങ്ങൾക്ക് ഈ സെഗ്മെന്റ് സമർപ്പിക്കാൻ കഴിയും. നിങ്ങൾ ആശയക്കുഴപ്പത്തിലാണെങ്കിൽ ദയവായി മാർഗ്ഗനിർദ്ദേശങ്ങൾ വായിക്കുക."
},
diff --git a/public/_locales/ms/messages.json b/public/_locales/ms/messages.json
index e0a86c0a..57987dee 100644
--- a/public/_locales/ms/messages.json
+++ b/public/_locales/ms/messages.json
@@ -554,9 +554,6 @@
"downvoteDescription": {
"message": "Pemasaan Tidak Betul / Salah"
},
- "incorrectCategory": {
- "message": "Kategori Salah"
- },
"nonMusicCategoryOnMusic": {
"message": "Video ini dikategorikan sebagai muzik. Adakah anda pasti ini mempunyai penaja? Sekiranya ini sebenarnya adalah \"Segmen Bukan Muzik\", buka pilihan peluasan dan aktifkan kategori ini. Kemudian, anda boleh menghantar segmen ini sebagai \"Bukan Muzik\" dan bukannya penaja. Sila baca panduan sekiranya anda keliru."
},
diff --git a/public/_locales/nl/messages.json b/public/_locales/nl/messages.json
index e4426460..b1df5ee9 100644
--- a/public/_locales/nl/messages.json
+++ b/public/_locales/nl/messages.json
@@ -700,7 +700,7 @@
"message": "Verkeerde timing"
},
"incorrectCategory": {
- "message": "Verkeerde categorie"
+ "message": "Categorie wijzigen"
},
"nonMusicCategoryOnMusic": {
"message": "Deze video is gecategoriseerd als muziek. Weet u zeker dat dit een sponsor heeft? Als dit eigenlijk een \"niet-muzieksegment\" is, open dan de extensie-opties en schakel deze categorie in. Vervolgens kunt u dit segment indienen als \"niet-muziek\" in plaats van als sponsor. Lees de richtlijnen als u in de war bent."
@@ -811,6 +811,21 @@
"LearnMore": {
"message": "Meer informatie"
},
+ "CopyDownvoteButtonInfo": {
+ "message": "Doet een downvote en maakt een lokale kopie aan die u opnieuw kunt indienen"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "Wikipagina van deze categorie openen."
+ },
+ "CopyAndDownvote": {
+ "message": "Kopiëren en downvote doen"
+ },
+ "ContinueVoting": {
+ "message": "Doorgaan met stemmen"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "Dit is direct van toepassing op uw segmenten"
+ },
"SponsorTimeEditScrollNewFeature": {
"message": "Gebruik het muiswiel terwijl u over het invoerveld beweegt om de tijd snel aan te passen. Combinaties van de ctrl- of shift-toets kunnen worden gebruikt om de wijzigingen te verfijnen."
}
diff --git a/public/_locales/no/messages.json b/public/_locales/no/messages.json
index 8ab73527..ceae5a2e 100644
--- a/public/_locales/no/messages.json
+++ b/public/_locales/no/messages.json
@@ -566,9 +566,6 @@
"downvoteDescription": {
"message": "Feil tidtaking"
},
- "incorrectCategory": {
- "message": "Feil kategori"
- },
"nonMusicCategoryOnMusic": {
"message": "Denne videoen er kategorisert som musikk. Er du sikker på at dette har en sponsor? Hvis det egentlig er et \"Ikke-musikk-segment\", åpne opp innstillingene til utvidelsen og skru på denne kategorien. Deretter kan du sende dette segmentet som \"Ikke-musikk\" i stedet for som sponsing. Vennligst les retningslinjene hvis du er forvirret."
},
diff --git a/public/_locales/pl/messages.json b/public/_locales/pl/messages.json
index b8114a2d..9a2dc2bd 100644
--- a/public/_locales/pl/messages.json
+++ b/public/_locales/pl/messages.json
@@ -182,6 +182,9 @@
"hideButtonsDescription": {
"message": "Ta opcja ukrywa przyciski do zamieszczania segmentów pojawiające się na odtwarzaczu YouTube."
},
+ "showSkipButton": {
+ "message": "Kontynuuj wyświetlanie przycisku pomijania"
+ },
"showInfoButton": {
"message": "Pokaż przycisk informacyjny na odtwarzaczu YouTube"
},
@@ -697,7 +700,7 @@
"message": "Niepoprawne/Zły czas"
},
"incorrectCategory": {
- "message": "Zła kategoria"
+ "message": "Zmień kategorię"
},
"nonMusicCategoryOnMusic": {
"message": "Ten film jest skategoryzowany jako muzyka. Czy masz pewność, że jest tutaj sponsor? Jeśli w rzeczywistości jest to „Sekcja Niemuzyczna”, otwórz opcje rozszerzenia i włącz tę kategorię. Wtedy będziesz w stanie zamieścić ten segment jako „Bez Muzyki” zamiast sponsora. Przeczytaj proszę wytyczne, jeśli masz wątpliwości."
@@ -807,5 +810,23 @@
},
"LearnMore": {
"message": "Dowiedz się więcej"
+ },
+ "CopyDownvoteButtonInfo": {
+ "message": "Minusuje i tworzy lokalną kopię, abyś mógł przesłać poprawioną wersję"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "Otwórz stronę wiki dla tej kategorii."
+ },
+ "CopyAndDownvote": {
+ "message": "Skopiuj i zminusuj"
+ },
+ "ContinueVoting": {
+ "message": "Kontynuuj głosowanie"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "To natychmiastowo zostanie zastosowane do twoich segmentów"
+ },
+ "SponsorTimeEditScrollNewFeature": {
+ "message": "Użyj scroll'a myszy po najechaniu nad pole edycji, aby szybko dostosować czas. Kombinacje z ctrl'em i shift'em mogą być użyte, aby doszlifować zmiany."
}
}
diff --git a/public/_locales/pt_BR/messages.json b/public/_locales/pt_BR/messages.json
index dd7c2c07..1db9dc6a 100644
--- a/public/_locales/pt_BR/messages.json
+++ b/public/_locales/pt_BR/messages.json
@@ -700,7 +700,7 @@
"message": "Tempo errado ou incorreto"
},
"incorrectCategory": {
- "message": "Categoria errada"
+ "message": "Mudar Categoria"
},
"nonMusicCategoryOnMusic": {
"message": "Este vídeo é categorizado como música. Tem certeza de que isto tem um patrocinador? Se este é realmente um \"Segmento Não Musical\", abra as opções da extensão e habilite esta categoria. Assim você pode enviar este segmento como \"Não-Musical\" ao invés de patrocinador. Por favor leia as diretrizes se estiver confuso."
@@ -810,5 +810,23 @@
},
"LearnMore": {
"message": "Saiba mais"
+ },
+ "CopyDownvoteButtonInfo": {
+ "message": "Dá voto negativo e cria uma cópia local para você reenviar"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "Abrir a wiki dessa categoria."
+ },
+ "CopyAndDownvote": {
+ "message": "Copiar e dar voto negativo"
+ },
+ "ContinueVoting": {
+ "message": "Continuar Votando"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "Isto irá aplicar instantaneamente seus segmentos"
+ },
+ "SponsorTimeEditScrollNewFeature": {
+ "message": "Use a roda do mouse enquanto mantêm o cursor sobre a caixa de edição para ajustar o tempo rapidamente. Combinações das teclas ctrl e shift podem ser usadas para refinar as mudanças."
}
}
diff --git a/public/_locales/ro/messages.json b/public/_locales/ro/messages.json
index e9977e41..d16e186c 100644
--- a/public/_locales/ro/messages.json
+++ b/public/_locales/ro/messages.json
@@ -551,9 +551,6 @@
"downvoteDescription": {
"message": "Timpi Incorecți/Greșiți"
},
- "incorrectCategory": {
- "message": "Categorie Greșită"
- },
"nonMusicCategoryOnMusic": {
"message": "Acest videoclip este categorisit ca muzică. Ești sigur ca există un sponsor? Dacă acesta este defapt un segment non-muzical, deschideți opțiunile extensiei și activați această categorie. Apoi, puteți trimite acest segment ca non-muzical în loc de sponsol. Vă rugăm să citiți ghidul dacă sunteți confuz."
},
diff --git a/public/_locales/ru/messages.json b/public/_locales/ru/messages.json
index 360ce5fc..278e194c 100644
--- a/public/_locales/ru/messages.json
+++ b/public/_locales/ru/messages.json
@@ -700,7 +700,7 @@
"message": "Не нужен/неверно указано время"
},
"incorrectCategory": {
- "message": "Неверная категория"
+ "message": "Изменить категорию"
},
"nonMusicCategoryOnMusic": {
"message": "Это видео классифицировано как музыкальное. Вы уверены, что в нём есть спонсоры? Если на самом деле это \"Сегмент без музыки\", откройте параметры расширения и включите эту категорию. Затем вы можете отправить этот сегмент как \"Без музыки\", а не как спонсора. Пожалуйста, прочтите руководство, если вы запутались."
@@ -811,6 +811,21 @@
"LearnMore": {
"message": "Узнать больше"
},
+ "CopyDownvoteButtonInfo": {
+ "message": "Голосует против и создаёт локальную копию сегмента для повторной отправки"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "Открыть вики-страницу этой категории."
+ },
+ "CopyAndDownvote": {
+ "message": "Скопировать и проголосовать против"
+ },
+ "ContinueVoting": {
+ "message": "Продолжить голосование"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "Это мгновенно применится к вашим сегментам"
+ },
"SponsorTimeEditScrollNewFeature": {
"message": "Наведите курсор на поле редактирования и используйте колесо мыши для быстрой настройки времени. Клавиши Ctrl или Shift могут быть использованы для точной настройки."
}
diff --git a/public/_locales/sk/messages.json b/public/_locales/sk/messages.json
index 0273428f..6ecf7492 100644
--- a/public/_locales/sk/messages.json
+++ b/public/_locales/sk/messages.json
@@ -700,7 +700,7 @@
"message": "Nesprávne/Zlé načasovanie"
},
"incorrectCategory": {
- "message": "Nesprávna kategória"
+ "message": "Zmeniť kategóriu"
},
"nonMusicCategoryOnMusic": {
"message": "Toto video je kategorizované ako hudobné. Ste si istý, že obsahuje sponzora? Ak sa skutočne jedná o časť bez hudby, otvorte možnosti rozšírenia a povoľte túto kategóriu. Potom môžete tento segment uložiť ako kategóriu \"Bez hudby\" namiesto sponzora. Ak si neviete rady, tak si prosím prečítajte pravidlá."
@@ -810,5 +810,23 @@
},
"LearnMore": {
"message": "Zistiť viac"
+ },
+ "CopyDownvoteButtonInfo": {
+ "message": "Dá palec dole a vytvorí kópiu, aby ste mohli segment znova odoslať"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "Otvoriť wiki stránku tejto kategórie."
+ },
+ "CopyAndDownvote": {
+ "message": "Skopírovať a dať palec dole"
+ },
+ "ContinueVoting": {
+ "message": "Pokračovať v hodnotení"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "Týmto ihneď vykonáte zmeny v segmentoch"
+ },
+ "SponsorTimeEditScrollNewFeature": {
+ "message": "Čas môžete rýchlo zmeniť kolieskom myši, ak je kurozor nad zadávacím políčkom. Pre jemné zmeny pritom držte kláves ctrl alebo shift."
}
}
diff --git a/public/_locales/sv/messages.json b/public/_locales/sv/messages.json
index cefe4a85..a9aba6fe 100644
--- a/public/_locales/sv/messages.json
+++ b/public/_locales/sv/messages.json
@@ -700,7 +700,7 @@
"message": "Fel/Fel tidsintervall"
},
"incorrectCategory": {
- "message": "Fel kategori"
+ "message": "Ändra kategori"
},
"nonMusicCategoryOnMusic": {
"message": "Den här videon kategoriseras som musik. Är du säker på att denna har en sponsor? Om detta faktiskt är ett \"icke-musiksegment\", öppna tilläggsalternativen och aktivera denna kategori. Då kan du skicka in detta segment som \"icke-musik\" i stället för sponsor. Läs riktlinjerna om något är oklart."
@@ -811,6 +811,21 @@
"LearnMore": {
"message": "Läs mer"
},
+ "CopyDownvoteButtonInfo": {
+ "message": "Rösta ner och skapar en lokal kopia för dig att skicka igen"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "Öppna denna kategoris wiki-sida."
+ },
+ "CopyAndDownvote": {
+ "message": "Kopiera och rösta ner"
+ },
+ "ContinueVoting": {
+ "message": "Fortsätt rösta"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "Detta kommer omedelbart att verkställas till dina segment"
+ },
"SponsorTimeEditScrollNewFeature": {
"message": "Använd mushjulet medan du håller muspekaren över redigeringsrutan för att snabbt justera tiden. Kombinationer av CTRL- eller SKIFT-tangenten kan användas för att finjustera tiden."
}
diff --git a/public/_locales/ta/messages.json b/public/_locales/ta/messages.json
index 9913c228..9d6313df 100644
--- a/public/_locales/ta/messages.json
+++ b/public/_locales/ta/messages.json
@@ -655,9 +655,6 @@
"downvoteDescription": {
"message": "தவறான / தவறான நேரம்"
},
- "incorrectCategory": {
- "message": "தவறான வகை"
- },
"nonMusicCategoryOnMusic": {
"message": "இந்த வீடியோ இசை என வகைப்படுத்தப்பட்டுள்ளது. இதற்கு ஒரு ஸ்பான்சர் இருப்பதை நீங்கள் உறுதியாக நம்புகிறீர்களா? இது உண்மையில் \"இசை அல்லாத பிரிவு\" என்றால், நீட்டிப்பு விருப்பங்களைத் திறந்து இந்த வகையை இயக்கவும். பின்னர், நீங்கள் இந்த பகுதியை ஸ்பான்சருக்கு பதிலாக \"இசை அல்லாதது\" என்று சமர்ப்பிக்கலாம். நீங்கள் குழப்பமாக இருந்தால் வழிகாட்டுதல்களைப் படிக்கவும்."
},
diff --git a/public/_locales/te/messages.json b/public/_locales/te/messages.json
index ae5873f2..c76bd519 100644
--- a/public/_locales/te/messages.json
+++ b/public/_locales/te/messages.json
@@ -554,9 +554,6 @@
"downvoteDescription": {
"message": "తప్పు / తప్పు సమయం"
},
- "incorrectCategory": {
- "message": "తప్పు వర్గం"
- },
"nonMusicCategoryOnMusic": {
"message": "ఈ వీడియోను సంగీతంగా వర్గీకరించారు. దీనికి స్పాన్సర్ ఉందని మీరు ఖచ్చితంగా అనుకుంటున్నారా? ఇది వాస్తవానికి \"నాన్-మ్యూజిక్ సెగ్మెంట్\" అయితే, పొడిగింపు ఎంపికలను తెరిచి ఈ వర్గాన్ని ప్రారంభించండి. అప్పుడు, మీరు ఈ విభాగాన్ని స్పాన్సర్‌కు బదులుగా \"నాన్-మ్యూజిక్\" గా సమర్పించవచ్చు. మీరు గందరగోళంలో ఉంటే దయచేసి మార్గదర్శకాలను చదవండి."
},
diff --git a/public/_locales/tr/messages.json b/public/_locales/tr/messages.json
index df9764f9..346dc804 100644
--- a/public/_locales/tr/messages.json
+++ b/public/_locales/tr/messages.json
@@ -690,9 +690,6 @@
"downvoteDescription": {
"message": "Hatalı/Yanlış Zaman"
},
- "incorrectCategory": {
- "message": "Yanlış Kategori"
- },
"nonMusicCategoryOnMusic": {
"message": "Bu video müzik olarak sınıflandırılmıştır. Bunun bir sponsor olduğundan emin misin? Bu aslında bir \"Müzik Dışı bölüm\" ise, uzantı seçeneklerini açın ve bu kategoriyi etkinleştirin. Ardından, bu kısmı sponsor yerine \"Müzik Olmayan\" olarak gönderebilirsiniz. Kafanız karıştıysa lütfen yönergeleri okuyun."
},
diff --git a/public/_locales/uk/messages.json b/public/_locales/uk/messages.json
index 707a4f80..8fe6d2e3 100644
--- a/public/_locales/uk/messages.json
+++ b/public/_locales/uk/messages.json
@@ -309,7 +309,7 @@
"message": "Вимкнути звук {0}?"
},
"skip_to_category": {
- "message": "Пропустить до {0}?",
+ "message": "Пропустити до {0}?",
"description": "Used for skipping to things (Skip to Highlight)"
},
"skipped": {
@@ -576,7 +576,7 @@
"message": "Основне"
},
"category_poi_highlight_description": {
- "message": "Часть видео, которую ищут большинство людей. Аналогично комментарию «Видео начинается с X:XX»."
+ "message": "Частина відео яку шукає більшість людей (Аналогічно коментарю \"Відео починається з Х:ХХ\")."
},
"category_livestream_messages": {
"message": "Прямі трансляції: пожертвування/читання повідомлення"
@@ -597,13 +597,13 @@
"message": "Вимкнути"
},
"autoSkip_POI": {
- "message": "Автоматический переход к началу"
+ "message": "Автоматично перейти до початку"
},
"manualSkip_POI": {
"message": "Спитати поки відео завантажується"
},
"showOverlay_POI": {
- "message": "Показать на панели поиска"
+ "message": "Показати в смузі перемотування"
},
"autoSkipOnMusicVideos": {
"message": "Автоматично пропустити усі сегменти, якщо присутній сегмент без музики"
@@ -700,7 +700,7 @@
"message": "Невірно вказано час"
},
"incorrectCategory": {
- "message": "Невірна категорія"
+ "message": "Змінити категорію"
},
"nonMusicCategoryOnMusic": {
"message": "Це відео класифіковано як музичне. Ви впевнені, що в ньому є спонсори? Якщо насправді це \"Сегмент без музики\", відкрийте параметри розширення і увімкніть цю категорію. Потім ви можете надіслати цей сегмент як \"Без музики\", а не як спонсора. Будь ласка, прочитайте керівництво, якщо ви заплуталися."
@@ -811,6 +811,21 @@
"LearnMore": {
"message": "Дізнатися більше"
},
+ "CopyDownvoteButtonInfo": {
+ "message": "Голосує проти та створює локальну копію для повторного надсилання"
+ },
+ "OpenCategoryWikiPage": {
+ "message": "Відкрити вікі-сторінку цієї категорії."
+ },
+ "CopyAndDownvote": {
+ "message": "Скопіювати та проголосувати проти"
+ },
+ "ContinueVoting": {
+ "message": "Продовжити голосування"
+ },
+ "ChangeCategoryTooltip": {
+ "message": "Це миттєво буде застосовано до ваших сегментів"
+ },
"SponsorTimeEditScrollNewFeature": {
"message": "Навівши курсор на поле редагування, користуйтеся колесом прокрутки, щоб швидко відрегулювати час. Комбінації клавіш ctrl або shift можуть бути використані для точнішої настройки змін."
}
diff --git a/public/_locales/vi/messages.json b/public/_locales/vi/messages.json
index 3778d05f..0acf2472 100644
--- a/public/_locales/vi/messages.json
+++ b/public/_locales/vi/messages.json
@@ -688,14 +688,11 @@
"downvoteDescription": {
"message": "Phân đoạn sai / không đúng"
},
- "incorrectCategory": {
- "message": "Sai thể loại"
- },
"nonMusicCategoryOnMusic": {
"message": "Video này đã được phân loại là âm nhạc. Bạn có chắc đây là quảng cáo nhà tài trợ không? Nếu đây là phân đoạn \"Không phải nhạc\", hãy mở Cài đặt tiện ích và bật lựa chọn đó. Rồi bạn có thể đăng tải phân đoạn lên dưới danh mục \"Không phải nhạc\" thay vì \"Quảng cáo nhà tài trợ\". Hãy đọc Hướng dẫn nếu bạn vẫn còn vướng mắc"
},
"multipleSegments": {
- "message": "Nhiều đoạn"
+ "message": "Nhiều phân đoạn"
},
"guidelines": {
"message": "Hướng dẫn"
diff --git a/public/_locales/zh_CN/messages.json b/public/_locales/zh_CN/messages.json
index 5cd10a3c..ac80eb61 100644
--- a/public/_locales/zh_CN/messages.json
+++ b/public/_locales/zh_CN/messages.json
@@ -566,9 +566,6 @@
"downvoteDescription": {
"message": "不正确/错误的时间"
},
- "incorrectCategory": {
- "message": "错误的类别"
- },
"nonMusicCategoryOnMusic": {
"message": "此视频的分类为音乐。 您确定其中包含赞助商广告吗?如果这是“非音乐片段”,请打开扩展选项并启用此类别。 之后,您可以以“非音乐”而不是赞助商广告类别提交此片段。如果您不太明白,请阅读指南。"
},
diff --git a/public/_locales/zh_TW/messages.json b/public/_locales/zh_TW/messages.json
index 862a6c6b..30228ab7 100644
--- a/public/_locales/zh_TW/messages.json
+++ b/public/_locales/zh_TW/messages.json
@@ -632,9 +632,6 @@
"downvoteDescription": {
"message": "不正確/錯誤的時間"
},
- "incorrectCategory": {
- "message": "錯誤的類別"
- },
"nonMusicCategoryOnMusic": {
"message": "這個影片被分類為音樂。您確定這有贊助內容嗎?如果這其實是\"非音樂片段\"的話,開啟擴充功能設定並啟用這個類別。接下來您即可提交這個片段為\"非音樂片段\"。如果您感到困惑,請閱讀方針"
},
diff --git a/public/content.css b/public/content.css
index 4751d293..cf3c6847 100644
--- a/public/content.css
+++ b/public/content.css
@@ -1,3 +1,7 @@
+.hidden {
+ display: none;
+}
+
#previewbar {
overflow: visible;
padding: 0;
@@ -290,6 +294,10 @@
float: right;
}
+.sponsorSkipNoticeCloseButton.biggerCloseButton {
+ padding: 20px;
+}
+
.sponsorSkipMessage {
font-size: 14px;
font-weight: bold;
@@ -298,6 +306,7 @@
margin-top: auto;
display: inline-block;
margin-right: 10px;
+ margin-bottom: auto;
}
.sponsorSkipInfo {
@@ -526,12 +535,35 @@ input::-webkit-inner-spin-button {
.skipButtonControlBarContainer {
cursor: pointer;
display: flex;
+ color: white;
}
.skipButtonControlBarContainer.hidden {
display: none !important;
}
+.skipButtonControlBarContainer.mobile {
+ bottom: 30%;
+ margin-left: 5px;
+ position: absolute;
+ height: 20px;
+
+ background-color: #00000030;
+ opacity: 0.5;
+ border-radius: 10px;
+ padding: 4px;
+}
+
+.skipButtonControlBarContainer.mobile.textDisabled {
+ padding: 0;
+ background-color: transparent;
+}
+
+.skipButtonControlBarContainer.mobile > div {
+ margin: auto;
+ margin-left: 5px;
+}
+
#sbSkipIconControlBarImage {
height: 60%;
top: 0px;
@@ -540,6 +572,11 @@ input::-webkit-inner-spin-button {
margin: auto;
}
+.mobile #sbSkipIconControlBarImage {
+ height: 100%;
+ width: 20px;
+}
+
.sponsorBlockTooltip {
position: absolute;
background-color: rgba(28, 28, 28, 0.7);
diff --git a/public/help/index.html b/public/help/index.html
index 4d69f321..88742e0d 100644
--- a/public/help/index.html
+++ b/public/help/index.html
@@ -3,6 +3,7 @@
<head>
<title> SponsorBlock </title>
<meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
<link href="styles.css" rel="stylesheet"/>
@@ -39,7 +40,7 @@
__MSG_helpPageFeatureDisclaimer__
</p>
- <iframe src="../options/options.html#embed" width="100%" height="500px" style="border: none"></iframe>
+ <iframe class="optionsFrame" src="../options/options.html#embed" style="border: none"></iframe>
<h1>__MSG_helpPageHowSkippingWorks__</h1>
@@ -56,14 +57,12 @@
__MSG_helpPageHowSkippingWorks2__
</p>
- <div class="center"><img height="120px" src="images/voting on notice.gif"></div>
+ <div class="center"><img src="images/voting on notice.gif"></div>
<h1>__MSG_Submitting__</h1>
<p class="projectPreview">
- <span class="projectPreviewImageLargeRight">
- <img src="https://i.imgur.com/A1ilk6x.gif">
- </span>
+ <img class="projectPreviewImageLarge" src="https://i.imgur.com/A1ilk6x.gif">
__MSG_helpPageSubmitting1__
diff --git a/public/help/styles.css b/public/help/styles.css
index 2e392c2e..fea609a2 100644
--- a/public/help/styles.css
+++ b/public/help/styles.css
@@ -40,14 +40,6 @@ body {
transform: translateY(-20%);
}
-.projectPreviewImageLargeRight {
- position: absolute;
- right: -210px;
- width: 200px;
- top: 50%;
- transform: translateY(-50%);
-}
-
.createdBy {
font-size: 14px;
text-align: center;
@@ -142,18 +134,9 @@ p,li,code,a {
overflow-wrap: break-word;
}
-@media screen and (orientation:portrait) {
- p,li,code,a {
- max-width: 100%;
- }
-
- .projectPreviewImage {
- position: unset;
- width: 130px;
- display: block;
- margin: auto;
- transform: none;
- }
+.optionsFrame {
+ width: 100%;
+ height: 500px;
}
.previewImage {
@@ -187,4 +170,33 @@ svg {
#sbDonate {
font-size: 10px;
+}
+
+@media screen and (orientation:portrait) {
+ .projectPreviewImage {
+ position: unset;
+ width: 50%;
+ display: block;
+ margin: auto;
+ transform: none;
+ }
+
+ .projectPreviewImageLarge {
+ position: unset;
+ left: 0;
+ width: 50%;
+ display: block;
+ margin: auto;
+ transform: unset;
+ }
+
+ .container {
+ max-width: 100%;
+ margin: 5px;
+ text-align: center;
+ }
+
+ p,li,code,a {
+ text-align: center;
+ }
} \ No newline at end of file
diff --git a/src/components/CategorySkipOptionsComponent.tsx b/src/components/CategorySkipOptionsComponent.tsx
index f7baad46..2d18000a 100644
--- a/src/components/CategorySkipOptionsComponent.tsx
+++ b/src/components/CategorySkipOptionsComponent.tsx
@@ -1,6 +1,7 @@
import * as React from "react";
import Config from "../config"
+import * as CompileConfig from "../../config.json";
import { Category, CategorySkipOption } from "../types";
import { getCategoryActionType } from "../utils/categoryUtils";
@@ -93,6 +94,10 @@ class CategorySkipOptionsComponent extends React.Component<CategorySkipOptionsPr
<td
colSpan={2}>
{chrome.i18n.getMessage("category_" + this.props.category + "_description")}
+ {' '}
+ <a href={CompileConfig.wikiLinks[this.props.category]} target="_blank" rel="noreferrer">
+ {`${chrome.i18n.getMessage("LearnMore")}`}
+ </a>
</td>
</tr>
diff --git a/src/components/NoticeComponent.tsx b/src/components/NoticeComponent.tsx
index c317c0c1..d7307bca 100644
--- a/src/components/NoticeComponent.tsx
+++ b/src/components/NoticeComponent.tsx
@@ -33,6 +33,7 @@ export interface NoticeProps {
zIndex?: number,
style?: React.CSSProperties
+ biggerCloseButton?: boolean;
}
export interface NoticeState {
@@ -151,7 +152,8 @@ class NoticeComponent extends React.Component<NoticeProps, NoticeState> {
{/* Close button */}
<img src={chrome.extension.getURL("icons/close.png")}
- className="sponsorSkipObject sponsorSkipNoticeButton sponsorSkipNoticeCloseButton sponsorSkipNoticeRightButton"
+ className={"sponsorSkipObject sponsorSkipNoticeButton sponsorSkipNoticeCloseButton sponsorSkipNoticeRightButton"
+ + (this.props.biggerCloseButton ? " biggerCloseButton" : "")}
onClick={() => this.close()}>
</img>
</td>
diff --git a/src/components/SkipNoticeComponent.tsx b/src/components/SkipNoticeComponent.tsx
index 6d3c378b..6e8876ff 100644
--- a/src/components/SkipNoticeComponent.tsx
+++ b/src/components/SkipNoticeComponent.tsx
@@ -188,6 +188,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta
maxCountdownTime={this.state.maxCountdownTime}
videoSpeed={() => this.contentContainer().v?.playbackRate}
style={noticeStyle}
+ biggerCloseButton={this.contentContainer().onMobileYouTube}
ref={this.noticeRef}
closeListener={() => this.closeListener()}
smaller={this.state.smaller}
@@ -350,13 +351,21 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta
if (this.state.showSkipButton && (this.segments.length > 1
|| getCategoryActionType(this.segments[0].category) !== CategoryActionType.POI
|| this.props.unskipTime)) {
+
+ const style: React.CSSProperties = {
+ marginLeft: "4px",
+ color: (this.state.actionState === SkipNoticeAction.Unskip) ? this.selectedColor : this.unselectedColor
+ };
+ if (this.contentContainer().onMobileYouTube) {
+ style.padding = "20px";
+ style.minWidth = "100px";
+ }
+
return (
<span className="sponsorSkipNoticeUnskipSection">
<button id={"sponsorSkipUnskipButton" + this.idSuffix}
className="sponsorSkipObject sponsorSkipNoticeButton"
- style={{marginLeft: "4px",
- color: (this.state.actionState === SkipNoticeAction.Unskip) ? this.selectedColor : this.unselectedColor
- }}
+ style={style}
onClick={() => this.prepAction(SkipNoticeAction.Unskip)}>
{this.state.skipButtonText + (this.state.showKeybindHint ? " (" + Config.config.skipKeybind + ")" : "")}
</button>
diff --git a/src/components/SponsorTimeEditComponent.tsx b/src/components/SponsorTimeEditComponent.tsx
index 98c00616..72d3e44f 100644
--- a/src/components/SponsorTimeEditComponent.tsx
+++ b/src/components/SponsorTimeEditComponent.tsx
@@ -156,8 +156,7 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
<div id={"sponsorTimesContainer" + this.idSuffix}
className="sponsorTimeDisplay"
- onClick={this.toggleEditTime.bind(this)}
- onWheel={this.toggleEditTime.bind(this)}>
+ onClick={this.toggleEditTime.bind(this)}>
{utils.getFormattedTime(segment[0], true) +
((!isNaN(segment[1]) && getCategoryActionType(sponsorTime.category) === CategoryActionType.Skippable)
? " " + chrome.i18n.getMessage("to") + " " + utils.getFormattedTime(segment[1], true) : "")}
@@ -216,7 +215,7 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
{(!isNaN(segment[1]) && getCategoryActionType(sponsorTime.category) === CategoryActionType.Skippable) ? (
<span id={"sponsorTimePreviewButton" + this.idSuffix}
className="sponsorTimeEditButton"
- onClick={this.previewTime.bind(this)}>
+ onClick={(e) => this.previewTime(e.ctrlKey, e.shiftKey)}>
{chrome.i18n.getMessage("preview")}
</span>
): ""}
@@ -445,13 +444,17 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
this.props.contentContainer().updatePreviewBar();
}
- previewTime(): void {
+ previewTime(ctrlPressed = false, shiftPressed = false): void {
const sponsorTimes = this.props.contentContainer().sponsorTimesSubmitting;
const index = this.props.index;
const skipTime = sponsorTimes[index].segment[0];
- this.props.contentContainer().previewTime(skipTime - (2 * this.props.contentContainer().v.playbackRate));
+ let seekTime = 2;
+ if (ctrlPressed) seekTime = 0.5;
+ if (shiftPressed) seekTime = 0.25;
+
+ this.props.contentContainer().previewTime(skipTime - (seekTime * this.props.contentContainer().v.playbackRate));
}
inspectTime(): void {
diff --git a/src/content.ts b/src/content.ts
index 679f5847..ee989c30 100644
--- a/src/content.ts
+++ b/src/content.ts
@@ -17,6 +17,7 @@ import { getCategoryActionType } from "./utils/categoryUtils";
import { SkipButtonControlBar } from "./js-components/skipButtonControlBar";
import { Tooltip } from "./render/Tooltip";
import { getStartTimeFromUrl } from "./utils/urlParser";
+import { getControls } from "./utils/pageUtils";
// Hack to get the CSS loaded on permission-based sites (Invidious)
utils.wait(() => Config.config !== null, 5000, 10).then(addCSS);
@@ -30,7 +31,6 @@ let sponsorVideoID: VideoID = null;
// List of open skip notices
const skipNotices: SkipNotice[] = [];
let activeSkipKeybindElement: ToggleSkippable = null;
-let lastPOISkip = 0;
// JSON video info
let videoInfo: VideoInfo = null;
@@ -151,7 +151,8 @@ function messageListener(request: Message, sender: unknown, sendResponse: (respo
//send the sponsor times along with if it's found
sendResponse({
found: sponsorDataFound,
- sponsorTimes: sponsorTimes
+ sponsorTimes: sponsorTimes,
+ onMobileYouTube
});
if (!request.updating && popupInitialised && document.getElementById("sponsorBlockPopupContainer") != null) {
@@ -191,7 +192,8 @@ function messageListener(request: Message, sender: unknown, sendResponse: (respo
case "refreshSegments":
sponsorsLookup(sponsorVideoID, false).then(() => sendResponse({
found: sponsorDataFound,
- sponsorTimes: sponsorTimes
+ sponsorTimes: sponsorTimes,
+ onMobileYouTube
}));
return true;
@@ -336,6 +338,8 @@ async function videoIDChange(id) {
function handleMobileControlsMutations(): void {
updateVisibilityOfPlayerControlsButton();
+ skipButtonControlBar?.updateMobileControls();
+
if (previewBar !== null) {
if (document.body.contains(previewBar.container)) {
const progressBarBackground = document.querySelector<HTMLElement>(".progress-bar-background");
@@ -392,12 +396,6 @@ function createPreviewBar(): void {
function durationChangeListener(): void {
updateAdFlag();
updatePreviewBar();
-
- if (sponsorTimes) sponsorTimes = sponsorTimes.filter(segmentDurationFilter);
-}
-
-function segmentDurationFilter(segment: SponsorTime): boolean {
- return segment.videoDuration === 0 || !video?.duration || Math.abs(video.duration - segment.videoDuration) < 2;
}
function cancelSponsorSchedule(): void {
@@ -606,24 +604,6 @@ function setupVideoListeners() {
startSponsorSchedule();
}
-
- if (!Config.config.dontShowNotice) {
- const currentPoiSegment = sponsorTimes?.find((segment) =>
- getCategoryActionType(segment.category) === CategoryActionType.POI &&
- video.currentTime - segment.segment[0] > 0 &&
- video.currentTime - segment.segment[0] < previewBar.getMinimumSize(true));
- if (currentPoiSegment && lastPOISkip < Date.now() - 3000
- && !skipNotices.some((notice) => notice.segments.some((s) => s.UUID === currentPoiSegment.UUID))) {
- lastPOISkip = Date.now();
- skipToTime({
- v: video,
- skipTime: currentPoiSegment.segment,
- skippingSegments: [currentPoiSegment],
- openNotice: true,
- forceAutoSkip: true
- });
- }
- }
});
video.addEventListener('ratechange', () => startSponsorSchedule());
// Used by videospeed extension (https://github.com/igrigorik/videospeed/pull/740)
@@ -649,7 +629,8 @@ function setupSkipButtonControlBar() {
skippingSegments: [segment],
openNotice: true,
forceAutoSkip: true
- })
+ }),
+ onMobileYouTube
});
}
@@ -675,19 +656,31 @@ async function sponsorsLookup(id: string, keepOldSubmissions = true) {
categories.push(categorySelection.name);
}
+ const extraRequestData: Record<string, unknown> = {};
+ const windowHash = window.location.hash.substr(1);
+ if (windowHash) {
+ const params: Record<string, unknown> = windowHash.split('&').reduce((acc, param) => {
+ const [key, value] = param.split('=');
+ acc[key] = value;
+ return acc;
+ }, {});
+
+ if (params.requiredSegment) extraRequestData.requiredSegment = params.requiredSegment;
+ }
+
// Check for hashPrefix setting
const hashPrefix = (await utils.getHash(id, 1)).substr(0, 4);
const response = await utils.asyncRequestToServer('GET', "/api/skipSegments/" + hashPrefix, {
categories,
actionTypes: Config.config.muteSegments ? [ActionType.Skip, ActionType.Mute] : [ActionType.Skip],
- userAgent: `${chrome.runtime.id}`
+ userAgent: `${chrome.runtime.id}`,
+ ...extraRequestData
});
if (response?.ok) {
const recievedSegments: SponsorTime[] = JSON.parse(response.responseText)
?.filter((video) => video.videoID === id)
- ?.map((video) => video.segments)[0]
- ?.filter(segmentDurationFilter);
+ ?.map((video) => video.segments)[0];
if (!recievedSegments || !recievedSegments.length) {
// return if no video found
retryFetch();
@@ -1233,6 +1226,7 @@ function skipToTime({v, skipTime, skippingSegments, openNotice, forceAutoSkip, u
&& skippingSegments.length === 1
&& getCategoryActionType(skippingSegments[0].category) === CategoryActionType.POI) {
skipButtonControlBar.enable(skippingSegments[0], !Config.config.highlightCategoryUpdate ? 15 : 0);
+ if (onMobileYouTube) skipButtonControlBar.setShowKeybindHint(false);
if (!Config.config.highlightCategoryUpdate) {
new Tooltip({
@@ -1253,6 +1247,7 @@ function skipToTime({v, skipTime, skippingSegments, openNotice, forceAutoSkip, u
//send out the message saying that a sponsor message was skipped
if (!Config.config.dontShowNotice || !autoSkip) {
const newSkipNotice = new SkipNotice(skippingSegments, autoSkip, skipNoticeContentContainer, unskipTime);
+ if (onMobileYouTube) newSkipNotice.setShowKeybindHint(false);
skipNotices.push(newSkipNotice);
activeSkipKeybindElement?.setShowKeybindHint(false);
@@ -1340,27 +1335,6 @@ function shouldSkip(segment: SponsorTime): boolean {
(Config.config.autoSkipOnMusicVideos && sponsorTimes?.some((s) => s.category === "music_offtopic"));
}
-function getControls(): HTMLElement | false {
- const controlsSelectors = [
- // YouTube
- ".ytp-right-controls",
- // Mobile YouTube
- ".player-controls-top",
- // Invidious/videojs video element's controls element
- ".vjs-control-bar",
- ];
-
- for (const controlsSelector of controlsSelectors) {
- const controls = document.querySelectorAll(controlsSelector);
-
- if (controls && controls.length > 0) {
- return <HTMLElement> controls[controls.length - 1];
- }
- }
-
- return false;
-}
-
/** Creates any missing buttons on the YouTube player if possible. */
async function createButtons(): Promise<void> {
if (onMobileYouTube) return;
diff --git a/src/js-components/previewBar.ts b/src/js-components/previewBar.ts
index 191053b9..5ef5f822 100644
--- a/src/js-components/previewBar.ts
+++ b/src/js-components/previewBar.ts
@@ -197,8 +197,11 @@ class PreviewBar {
if (!this.onMobileYouTube) bar.style.opacity = Config.config.barTypes[fullCategoryName]?.opacity;
bar.style.position = "absolute";
+ const duration = segment[1] - segment[0];
if (segment[1] - segment[0] > 0) bar.style.width = this.timeToPercentage(segment[1] - segment[0]);
- bar.style.left = this.timeToPercentage(segment[0]);
+
+ const time = segment[1] ? Math.min(this.videoDuration - Math.max(0, duration), segment[0]) : segment[0];
+ bar.style.left = this.timeToPercentage(time);
return bar;
}
diff --git a/src/js-components/skipButtonControlBar.ts b/src/js-components/skipButtonControlBar.ts
index a3e47362..6f898d7f 100644
--- a/src/js-components/skipButtonControlBar.ts
+++ b/src/js-components/skipButtonControlBar.ts
@@ -7,6 +7,7 @@ const utils = new Utils();
export interface SkipButtonControlBarProps {
skip: (segment: SponsorTime) => void;
+ onMobileYouTube: boolean;
}
export class SkipButtonControlBar {
@@ -18,18 +19,31 @@ export class SkipButtonControlBar {
segment: SponsorTime;
showKeybindHint = true;
+ onMobileYouTube: boolean;
+
+ enabled = false;
timeout: NodeJS.Timeout;
duration = 0;
skip: (segment: SponsorTime) => void;
+ // Used if on mobile page
+ hideButton: () => void;
+ showButton: () => void;
+
+ // Used by mobile only for swiping away
+ left = 0;
+ swipeStart = 0;
+
constructor(props: SkipButtonControlBarProps) {
this.skip = props.skip;
+ this.onMobileYouTube = props.onMobileYouTube;
this.container = document.createElement("div");
this.container.classList.add("skipButtonControlBarContainer");
this.container.classList.add("hidden");
+ if (this.onMobileYouTube) this.container.classList.add("mobile");
this.skipIcon = document.createElement("img");
this.skipIcon.src = chrome.runtime.getURL("icons/skipIcon.svg");
@@ -43,6 +57,11 @@ export class SkipButtonControlBar {
this.container.addEventListener("click", () => this.toggleSkip());
this.container.addEventListener("mouseenter", () => this.stopTimer());
this.container.addEventListener("mouseleave", () => this.startTimer());
+ if (this.onMobileYouTube) {
+ this.container.addEventListener("touchstart", (e) => this.handleTouchStart(e));
+ this.container.addEventListener("touchmove", (e) => this.handleTouchMove(e));
+ this.container.addEventListener("touchend", () => this.handleTouchEnd());
+ }
}
getElement(): HTMLElement {
@@ -50,21 +69,38 @@ export class SkipButtonControlBar {
}
attachToPage(): void {
- const leftControlsContainer = document.querySelector(".ytp-left-controls");
+ const mountingContainer = this.getMountingContainer();
this.chapterText = document.querySelector(".ytp-chapter-container");
- if (leftControlsContainer && !leftControlsContainer.contains(this.container)) {
- leftControlsContainer.insertBefore(this.container, this.chapterText);
+ if (mountingContainer && !mountingContainer.contains(this.container)) {
+ if (this.onMobileYouTube) {
+ mountingContainer.appendChild(this.container);
+ } else {
+ mountingContainer.insertBefore(this.container, this.chapterText);
+ }
- if (Config.config.autoHideInfoButton) {
- utils.setupAutoHideAnimation(this.skipIcon, leftControlsContainer, false, false);
+ if (Config.config.autoHideInfoButton && !this.onMobileYouTube) {
+ utils.setupAutoHideAnimation(this.skipIcon, mountingContainer, false, false);
+ } else {
+ const { hide, show } = utils.setupCustomHideAnimation(this.skipIcon, mountingContainer, false, false);
+ this.hideButton = hide;
+ this.showButton = show;
}
}
}
+ private getMountingContainer(): HTMLElement {
+ if (!this.onMobileYouTube) {
+ return document.querySelector(".ytp-left-controls");
+ } else {
+ return document.getElementById("player-container-id");
+ }
+ }
+
enable(segment: SponsorTime, duration?: number): void {
if (duration) this.duration = duration;
this.segment = segment;
+ this.enabled = true;
this.refreshText();
this.textContainer?.classList?.remove("hidden");
@@ -103,6 +139,8 @@ export class SkipButtonControlBar {
this.chapterText?.classList?.remove("hidden");
this.getChapterPrefix()?.classList?.remove("hidden");
+
+ this.enabled = false;
}
toggleSkip(): void {
@@ -116,12 +154,28 @@ export class SkipButtonControlBar {
return;
}
+ this.container.classList.add("textDisabled");
this.textContainer?.classList?.add("hidden");
this.chapterText?.classList?.remove("hidden");
this.getChapterPrefix()?.classList?.add("hidden");
utils.enableAutoHideAnimation(this.skipIcon);
+ if (this.onMobileYouTube) {
+ this.hideButton();
+ }
+ }
+
+ updateMobileControls(): void {
+ const overlay = document.getElementById("player-control-overlay");
+
+ if (overlay && this.enabled) {
+ if (overlay?.classList?.contains("pointer-events-off")) {
+ this.hideButton();
+ } else {
+ this.showButton();
+ }
+ }
}
private getTitle(): string {
@@ -131,5 +185,37 @@ export class SkipButtonControlBar {
private getChapterPrefix(): HTMLElement {
return document.querySelector(".ytp-chapter-title-prefix");
}
+
+ // Swiping away on mobile
+ private handleTouchStart(event: TouchEvent): void {
+ this.swipeStart = event.touches[0].clientX;
+ }
+
+ // Swiping away on mobile
+ private handleTouchMove(event: TouchEvent): void {
+ const distanceMoved = this.swipeStart - event.touches[0].clientX;
+ this.left = Math.min(-distanceMoved, 0);
+
+ this.updateLeftStyle();
+ }
+
+ // Swiping away on mobile
+ private handleTouchEnd(): void {
+ if (this.left < -this.container.offsetWidth / 2) {
+ this.disableText();
+
+ // Don't let animation play
+ this.skipIcon.style.display = "none";
+ setTimeout(() => this.skipIcon.style.removeProperty("display"), 200);
+ }
+
+ this.left = 0;
+ this.updateLeftStyle();
+ }
+
+ // Swiping away on mobile
+ private updateLeftStyle() {
+ this.container.style.left = this.left + "px";
+ }
}
diff --git a/src/messageTypes.ts b/src/messageTypes.ts
index 49a5ad92..4989c741 100644
--- a/src/messageTypes.ts
+++ b/src/messageTypes.ts
@@ -31,9 +31,10 @@ interface IsInfoFoundMessage {
export type Message = BaseMessage & (DefaultMessage | BoolValueMessage | IsInfoFoundMessage);
-interface IsInfoFoundMessageResponse {
+export interface IsInfoFoundMessageResponse {
found: boolean;
sponsorTimes: SponsorTime[];
+ onMobileYouTube: boolean;
}
interface GetVideoIdResponse {
diff --git a/src/popup.ts b/src/popup.ts
index 5a75c8ba..41bf1062 100644
--- a/src/popup.ts
+++ b/src/popup.ts
@@ -2,7 +2,7 @@ import Config from "./config";
import Utils from "./utils";
import { SponsorTime, SponsorHideType, CategoryActionType } from "./types";
-import { Message, MessageResponse } from "./messageTypes";
+import { Message, MessageResponse, IsInfoFoundMessageResponse } from "./messageTypes";
import { showDonationLink } from "./utils/configUtils";
import { getCategoryActionType } from "./utils/categoryUtils";
const utils = new Utils();
@@ -278,7 +278,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
}, (tabs) => onTabs(tabs, updating));
}
- function infoFound(request: { found: boolean, sponsorTimes: SponsorTime[] }) {
+ function infoFound(request: IsInfoFoundMessageResponse) {
if (chrome.runtime.lastError) {
//This page doesn't have the injected content script, or at least not yet
displayNoVideo();
@@ -289,6 +289,7 @@ async function runThePopup(messageListener?: MessageListener): Promise<void> {
if (request != undefined) {
//remove loading text
PageElements.mainControls.style.display = "flex";
+ if (request.onMobileYouTube) PageElements.mainControls.classList.add("hidden");
PageElements.whitelistButton.classList.remove("hidden");
PageElements.loadingIndicator.style.display = "none";
diff --git a/src/utils.ts b/src/utils.ts
index 99d61137..bdb441e7 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -183,7 +183,7 @@ export default class Utils {
}
}
- setupAutoHideAnimation(element: Element, container: Element, enabled = true, rightSlide = true): void {
+ setupCustomHideAnimation(element: Element, container: Element, enabled = true, rightSlide = true): { hide: () => void, show: () => void } {
if (enabled) element.classList.add("autoHiding");
element.classList.add("hidden");
element.classList.add("animationDone");
@@ -191,22 +191,30 @@ export default class Utils {
let mouseEntered = false;
- container.addEventListener("mouseenter", () => {
- mouseEntered = true;
- element.classList.remove("animationDone");
+ return {
+ hide: () => {
+ mouseEntered = false;
+ if (element.classList.contains("autoHiding")) {
+ element.classList.add("hidden");
+ }
+ },
+ show: () => {
+ mouseEntered = true;
+ element.classList.remove("animationDone");
+
+ // Wait for next event loop
+ setTimeout(() => {
+ if (mouseEntered) element.classList.remove("hidden")
+ }, 10);
+ }
+ };
+ }
- // Wait for next event loop
- setTimeout(() => {
- if (mouseEntered) element.classList.remove("hidden")
- }, 10);
- });
+ setupAutoHideAnimation(element: Element, container: Element, enabled = true, rightSlide = true): void {
+ const { hide, show } = this.setupCustomHideAnimation(element, container, enabled, rightSlide);
- container.addEventListener("mouseleave", () => {
- mouseEntered = false;
- if (element.classList.contains("autoHiding")) {
- element.classList.add("hidden");
- }
- });
+ container.addEventListener("mouseleave", () => hide());
+ container.addEventListener("mouseenter", () => show());
}
enableAutoHideAnimation(element: Element): void {
diff --git a/src/utils/pageUtils.ts b/src/utils/pageUtils.ts
new file mode 100644
index 00000000..e88f7cc9
--- /dev/null
+++ b/src/utils/pageUtils.ts
@@ -0,0 +1,20 @@
+export function getControls(): HTMLElement | false {
+ const controlsSelectors = [
+ // YouTube
+ ".ytp-right-controls",
+ // Mobile YouTube
+ ".player-controls-top",
+ // Invidious/videojs video element's controls element
+ ".vjs-control-bar",
+ ];
+
+ for (const controlsSelector of controlsSelectors) {
+ const controls = document.querySelectorAll(controlsSelector);
+
+ if (controls && controls.length > 0) {
+ return <HTMLElement> controls[controls.length - 1];
+ }
+ }
+
+ return false;
+} \ No newline at end of file