Compare commits

...

23 Commits

Author SHA1 Message Date
Ajay Ramachandran
29e6ebab29 Merge pull request #414 from ajayyy/react
Improvements
2020-07-18 22:11:44 -04:00
Ajay Ramachandran
97e80c6f4e New Crowdin updates (#407)
* New translations messages.json (Romanian)

* New translations messages.json (German)

* New translations messages.json (French)

* New translations messages.json (Swedish)

* New translations messages.json (Japanese)

* New translations messages.json (Portuguese, Brazilian)

* New translations messages.json (Portuguese, Brazilian)

* New translations messages.json (French)

* New translations messages.json (German)
2020-07-18 21:22:23 -04:00
Ajay Ramachandran
3ac730c053 Fix errors when response fails 2020-07-18 21:21:53 -04:00
Ajay Ramachandran
d25951f313 Update version number 2020-07-18 21:20:36 -04:00
Ajay Ramachandran
886e134010 Made all preview segments auto skip 2020-07-18 21:20:18 -04:00
Ajay Ramachandran
cde50b0cb5 Update README.md 2020-07-18 17:52:47 -04:00
Ajay Ramachandran
19ac01a17c Updated description 2020-07-18 15:24:31 -04:00
Ajay Ramachandran
e9e53d1d43 Merge pull request #401 from ajayyy/react
Improvements
2020-07-12 23:09:43 -04:00
Ajay Ramachandran
07ab99a8d0 New Crowdin updates (#400)
* New translations messages.json (Romanian)

* New translations messages.json (German)

* New translations messages.json (Portuguese)

* New translations messages.json (Polish)

* New translations messages.json (Italian)

* New translations messages.json (French)

* New translations messages.json (Finnish)

* New translations messages.json (Spanish)

* New translations messages.json (Russian)

* New translations messages.json (Chinese Simplified)

* New translations messages.json (Ukrainian)

* New translations messages.json (Turkish)

* New translations messages.json (Swedish)

* New translations messages.json (Portuguese, Brazilian)

* New translations messages.json (German)
2020-07-12 23:08:04 -04:00
Ajay Ramachandran
896120d311 Update version number 2020-07-12 23:07:55 -04:00
Ajay Ramachandran
3dc6563048 Default to blank category when submitting 2020-07-12 20:59:35 -04:00
Ajay Ramachandran
2d74ce2093 Added hours to time with skips 2020-07-12 18:52:36 -04:00
Ajay Ramachandran
eac4ca4d71 Add edge 2020-07-08 21:43:26 -04:00
Ajay Ramachandran
399a5af990 Update README.md 2020-07-07 17:48:36 -04:00
Ajay Ramachandran
48861439b7 Don't run time without skips on mobile or invidious 2020-07-05 00:21:26 -04:00
Ajay Ramachandran
bd60875c66 Fix invidious css issues 2020-07-05 00:17:54 -04:00
Ajay Ramachandran
fe8f25fe23 Hide submit button on invidious 2020-07-05 00:11:29 -04:00
Ajay Ramachandran
87f3cf3881 Fixed invidious preview bar 2020-07-05 00:09:18 -04:00
Ajay Ramachandran
0b9df8a45c Remove submitting on mobile 2020-07-05 00:07:10 -04:00
Ajay Ramachandran
59c5b7eefe Remove unused function 2020-07-05 00:05:36 -04:00
Ajay Ramachandran
dea9dac20a Fix crashing on mobile youtube 2020-07-05 00:03:52 -04:00
Ajay Ramachandran
684cd676e5 Delete empty unsubmitted submissions when delete is called 2020-07-04 15:34:29 -04:00
Ajay Ramachandran
929e3396cd New Crowdin updates (#386)
* New translations messages.json (Romanian)

* New translations messages.json (German)

* New translations messages.json (Turkish)

* New translations messages.json (Ukrainian)

* New translations messages.json (Chinese Simplified)

* New translations messages.json (Slovak)

* New translations messages.json (Russian)

* New translations messages.json (French)

* New translations messages.json (Dutch)

* New translations messages.json (Portuguese, Brazilian)

* New translations messages.json (Finnish)

* New translations messages.json (Hungarian)

* New translations messages.json (Swedish)

* New translations messages.json (Bulgarian)

* New translations messages.json (Spanish)

* New translations messages.json (Gujarati)

* New translations messages.json (Polish)

* New translations messages.json (German)

* New translations messages.json (French)

* New translations messages.json (German)

* New translations messages.json (Swedish)

* New translations messages.json (Portuguese, Brazilian)

* New translations messages.json (Portuguese, Brazilian)

* New translations messages.json (German)

* New translations messages.json (Russian)

* New translations messages.json (Chinese Simplified)
2020-07-03 21:25:13 -04:00
31 changed files with 289 additions and 233 deletions

View File

@@ -12,6 +12,7 @@
<a href="https://chrome.google.com/webstore/detail/mnjggcdmjocbbbhaepdhchncahnbgone">Chrome/Chromium</a> |
<a href="https://addons.mozilla.org/addon/sponsorblock/?src=external-github">Firefox</a> |
<a href="https://github.com/ajayyy/SponsorBlock/wiki/Android">Android</a> |
<a href="https://github.com/ajayyy/SponsorBlock/wiki/Edge">Edge</a> |
<a href="https://sponsor.ajay.app">Website</a> |
<a href="https://sponsor.ajay.app/stats">Stats</a>
</p>
@@ -26,16 +27,16 @@
<p align="center">
<a href="https://addons.mozilla.org/addon/sponsorblock/?src=external-github"><img src="https://img.shields.io/amo/users/sponsorblock?label=Firefox%20Users" alt="Badge"></img></a>
<a href="https://chrome.google.com/webstore/detail/mnjggcdmjocbbbhaepdhchncahnbgone"><img src="https://img.shields.io/chrome-web-store/users/mnjggcdmjocbbbhaepdhchncahnbgone?label=Chrome%20Users" alt="Badge"></img></a>
<a href="https://sponsor.ajay.app/stats"><img src="https://img.shields.io/badge/dynamic/json?label=Sponsors%20Submitted&query=totalSubmissions&suffix=%20sponsors&url=http%3A%2F%2Fsponsor.ajay.app%2Fapi%2FgetTotalStats&color=darkred" alt="Badge"></img></a>
<a href="https://sponsor.ajay.app/stats"><img src="https://img.shields.io/badge/dynamic/json?label=Submissions&query=totalSubmissions&suffix=%20segments&url=http%3A%2F%2Fsponsor.ajay.app%2Fapi%2FgetTotalStats&color=darkred" alt="Badge"></img></a>
<a href="https://sponsor.ajay.app/stats"><img src="https://img.shields.io/badge/dynamic/json?label=Contributing%20Users&query=userCount&url=http%3A%2F%2Fsponsor.ajay.app%2Fapi%2FgetTotalStats&color=darkblue" alt="Badge"></img></a>
<a href="https://sponsor.ajay.app/stats"><img src="https://img.shields.io/badge/dynamic/json?label=Time%20Saved%20From%20Skips&query=daysSaved&url=http%3A%2F%2Fsponsor.ajay.app%2Fapi%2FgetDaysSavedFormatted&color=darkgreen&suffix=%20days" alt="Badge"></img></a>
</p>
SponsorBlock is an extension that will skip over sponsored segments of YouTube videos. SponsorBlock is a crowdsourced browser extension that lets anyone submit the start and end times of sponsored segments of YouTube videos. Once one person submits this information, everyone else with this extension will skip right over the sponsored segment.
SponsorBlock is an open-source crowdsourced browser extension to skip sponsor segments in YouTube videos. Users submit when a sponsor happens from the extension, and the extension automatically skips sponsors it knows about. It also supports skipping other categories, such as intros, outros and reminders to subscribe.
Also supports Invidio.us.
It also supports Invidio.us.
**Translate:** [![Crowdin](https://badges.crowdin.net/sponsorblock/localized.svg)](https://crowdin.com/project/sponsorblock)

View File

@@ -1,7 +1,7 @@
{
"name": "__MSG_fullName__",
"short_name": "SponsorBlock",
"version": "2.0.3",
"version": "2.0.4.1",
"default_locale": "en",
"description": "__MSG_Description__",
"content_scripts": [{

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock за YouTube - пропускай спонсорства",
"description": "Name of the extension."

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock für YouTube - Überspringe Sponsor Anzeigen",
"description": "Name of the extension."
@@ -12,10 +8,10 @@
"description": "Description of the extension."
},
"400": {
"message": "Ungültige Anforderung"
"message": "Der Server meldet, dass diese Anfrage ungültig war"
},
"429": {
"message": "Du hast zu viele Segmente in diesem Video eingereicht. Bist du dir sicher?"
"message": "Du hast zu viele Segmente in diesem Video eingereicht. Sind es wirklich so viele?"
},
"409": {
"message": "Dieser Inhalt wurde bereits eingereicht."
@@ -123,7 +119,7 @@
"message": "Öffne SponsorBlock-Popup"
},
"SubmitTimes": {
"message": "Sende Auswahl"
"message": "Diese Zeiten einreichen"
},
"submitCheck": {
"message": "Bist du sicher, dass die Auswahl abgeschickt werden soll?"
@@ -132,7 +128,7 @@
"message": "Kanal auf Whitelist setzen "
},
"removeFromWhitelist": {
"message": "Kanal von Whitelist entfernen"
"message": "Kanal von der Whitelist entfernen"
},
"voteOnTime": {
"message": "Stimme für Zeiten ab"
@@ -222,7 +218,7 @@
"message": "Benachrichtigung wieder zeigen"
},
"longDescription": {
"message": "SponsorBlock ist eine Erweiterung, die gesponsorte Segmente in YouTube-Videos überspringt. SponsorBlock ist ein Benutzernetzwerk, bei dem jeder Anfang und Ende eines Werbeblocks einreichen kann. Sobald die Information von einem Nutzer eingereicht wurde, überspringen die Erweiterungen der anderen dieses Segment automatisch.",
"message": "SponsorBlock ist eine Erweiterung, die gesponserte Segmente von YouTube Videos überspringt. SponsorBlock ist eine durch Crowdsourcing betriebene Browsererweiterung, die es jedem erlaubt, die Beginn- und Endzeitpunkte von gesponserten Segmenten in YouTube Videos einzureichen. Nachdem diese Information eingereicht wurde, wird das Segment für alle anderen Nutzer mit dieser Erweiterung direkt übersprungen.\n\nDu kannst auch den Vorspann, Nachspann, Erinnerungen zu abonnieren und andere Kategorien überspringen.",
"description": "Full description of the extension on the store pages."
},
"website": {
@@ -282,7 +278,7 @@
"message": "Auto-Überspringen deaktivieren"
},
"enableAutoSkip": {
"message": "Auto-Überspringen aktivieren"
"message": "Automatisches Überspringen aktivieren"
},
"autoSkipDescription": {
"message": "Auto-Überspringen überspringt gesponsorte Inhalte für dich. Wenn deaktiviert, fragt die Benachrichtigung, ob übersprungen werden soll."
@@ -293,6 +289,12 @@
"audioNotificationDescription": {
"message": "Audio-Benachrichtigung beim Überspringen wird einen Ton abspielen, wenn ein Sponsor übersprungen wird. Wenn deaktiviert (oder wenn Automatisches-Überspringen deaktiviert ist), wird kein Ton abgespielt."
},
"showTimeWithSkips": {
"message": "Zeit mit entfernten Überspringungen anzeigen"
},
"showTimeWithSkipsDescription": {
"message": "Diese Zeit wird in Klammern neben der aktuellen Zeit in der Suchleiste angezeigt. Diese Zeit die gesamte Dauer des Videos ohne jeglicher Segmente. Dies inkludiert auch Segmente, die als \"In Suchleiste anzeigen\" markiert sind."
},
"youHaveSkipped": {
"message": "Du übersprangst "
},
@@ -470,9 +472,6 @@
"theKey": {
"message": "Die Taste"
},
"keyAlreadyUsedByYouTube": {
"message": "wird bereits von Youtube verwendet. Bitte wählen Sie eine andere Taste."
},
"keyAlreadyUsed": {
"message": "an eine andere Aktion gebunden. Bitte wählen Sie eine andere Taste."
},
@@ -487,13 +486,13 @@
"message": "Bezahlte Promotion, bezahlte Empfehlungen und direkte Werbung. Nicht für Selbstpromotion oder kostenlose Shoutouts an Ursachen/Webseiten/Produkte, die sie mögen."
},
"category_intro": {
"message": "Intro Animation"
"message": "Unterbrechung/Vorspann"
},
"category_intro_description": {
"message": "Intro Animationen, die in der Serie wiederholt werden oder keinen direkten Wert haben. Dies sollte nicht für Musikvideos verwendet werden."
"message": "Ein Intervall ohne relevanten Inhalt. Beispiele dafür wären eine Pause, ein statisches Bild oder sich wiederholende Animationen. Dies sollte nicht für Übergänge benutzt werden, die Informationen erhalten oder für Musikvideos."
},
"category_intro_short": {
"message": "Intro"
"message": "Unterbrechung"
},
"category_outro": {
"message": "Endkarten/Credits"
@@ -558,7 +557,7 @@
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"enableTestingServer": {
"message": "Beta-Testing Server aktivieren"
"message": "Beta Testing Server aktivieren"
},
"whatEnableTestingServer": {
"message": "Deine Einreichungen und Stimmen werden NICHT für den Hauptserver geltend. Benutze dies nur für Tests."
@@ -572,6 +571,12 @@
"moreCategories": {
"message": "Weitere Kategorien"
},
"chooseACategory": {
"message": "Wähle eine Kategorie"
},
"youMustSelectACategory": {
"message": "Sie müssen eine Kategorie für alle Segmente auswählen, die Sie abschicken!"
},
"bracketEnd": {
"message": "(Ende)"
},
@@ -585,7 +590,7 @@
"message": "Kanal-ID wurde noch nicht geladen."
},
"adblockerIssue": {
"message": "Irgendetwas hält SponsorBlock davon ab, die Videodaten abzurufen. Möglicherweise ist es dein Werbeblocker. Mehr Infos: https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests"
"message": "Irgendwas hält SponsorBlock davon ab, die Videodaten abzurufen. Möglicherweise ist das dein Werbeblocker. Mehr Infos: https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests"
},
"itCouldBeAdblockerIssue": {
"message": "Falls dies weiterhin geschieht, könnte dies durch Ihren Werbeblocker verursacht werden. Bitte überprüfen Sie https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests"

View File

@@ -4,7 +4,7 @@
"description": "Name of the extension."
},
"Description": {
"message": "Skip over sponsorship on YouTube videos. Report sponsors on videos you watch to save the time of others.",
"message": "Skip sponsorships, subscription begging and more on YouTube videos. Report sponsors on videos you watch to save others' time.",
"description": "Description of the extension."
},
"400": {
@@ -218,7 +218,7 @@
"message": "Show Notice Again"
},
"longDescription": {
"message": "SponsorBlock is an extension that will skip over sponsored segments of YouTube videos. SponsorBlock is a crowdsourced browser extension that lets anyone submit the start and end times of sponsored segments of YouTube videos. Once one person submits this information, everyone else with this extension will skip right over the sponsored segment. \n\n You can also skip intros, outros, reminders to subscribe and other categories.",
"message": "SponsorBlock lets you skip over sponsors, intros, outros subscription reminders, and other annoying parts of YouTube videos. SponsorBlock is a crowdsourced browser extension that let's anyone submit the start and end time's of sponsored segments and other segments of YouTube videos. Once one person submits this information, everyone else with this extension will skip right over the sponsored segment. You can also skip over non music sections of music videos.",
"description": "Full description of the extension on the store pages."
},
"website": {
@@ -571,6 +571,12 @@
"moreCategories": {
"message": "More Categories"
},
"chooseACategory": {
"message": "Choose a Category"
},
"youMustSelectACategory": {
"message": "You must select a category for all segments you are submitting!"
},
"bracketEnd": {
"message": "(End)"
},

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock para YouTube - Omitir Sponsors",
"description": "Name of the extension."
@@ -221,10 +217,6 @@
"showNotice": {
"message": "Mostrar aviso de nuevo"
},
"longDescription": {
"message": "SponsorBlock es una extensión que se omitira segmentos de sponsor de vídeos de YouTube. SponsorBlock es una extensión de navegador que permite a cualquiera enviar los tiempos de comienzo y fin de segmentos de sponsor de vídeos de YouTube. Una vez que una persona envíe esta información, todos los demás con esta extensión pueden omitir directamente el segmento de sponsor.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Sitio Web",
"description": "Used on Firefox Store Page"
@@ -440,18 +432,12 @@
"theKey": {
"message": "El botón"
},
"keyAlreadyUsedByYouTube": {
"message": "ya está en uso por youtube. Por favor, seleccione otro botón."
},
"keyAlreadyUsed": {
"message": "está enlazado a otra acción. Por favor, seleccione otro botón."
},
"category_sponsor": {
"message": "Sponsor"
},
"category_intro": {
"message": "Animación de introducción"
},
"category_outro": {
"message": "Tarjetas/Créditos"
},

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock YouTubelle - Ohita sponsoroinnit",
"description": "Name of the extension."
@@ -314,9 +310,6 @@
"theKey": {
"message": "Näppäin"
},
"keyAlreadyUsedByYouTube": {
"message": "on jo YouTuben käytössä. Valitse toinen näppäin."
},
"keyAlreadyUsed": {
"message": "on jo liitetty toiseen toimintoon. Valitse toinen näppäin."
},
@@ -327,9 +320,6 @@
"category_sponsor": {
"message": "Sponsori"
},
"category_intro": {
"message": "Intro-animaatio"
},
"category_outro": {
"message": "Loppukortit/-tekstit"
},

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock pour YouTube - Supprime les messages commerciaux et publicités intégrées",
"description": "Name of the extension."
@@ -222,7 +218,7 @@
"message": "Afficher la notification"
},
"longDescription": {
"message": "SponsorBlock est une extension qui permet de passer les messages commerciaux des vidéos YouTube. SponsorBlock est une extension pour navigateur basée sur le crowdsourcing permettant à n'importe qui de soumettre le début et la fin des segments commerciaux sur les vidéos YouTube. s qu'une personne a soumis ces informations, les autres utilisateurs de l'extension en bénéficieront et verront les messages commerciaux automatiquement sautés.",
"message": "SponsorBlock est une extension qui permet de sauter les segments sponsorisés des vidéos de YouTube. SponsorBlock est une extension de navigateur participative qui permet à quiconque de soumettre les heures de début et de fin des segments sponsorisés des vidéos de YouTube. Une fois qu'une personne a soumis ces informations, toutes les autres personnes possédant cette extension sauteront automatiquement les segments sponsorisés. \n\n Vous pouvez également sauter les intros, les outros, les rappels d'abonnement et d'autres catégories.",
"description": "Full description of the extension on the store pages."
},
"website": {
@@ -293,6 +289,12 @@
"audioNotificationDescription": {
"message": "La notification audio lors du passage jouera un son à chaque fois qu'un sponsor est ignoré. Si désactivé (ou si le passage automatique est désactivé), aucun son ne sera joué."
},
"showTimeWithSkips": {
"message": "Afficher le temps avec les passages supprimés"
},
"showTimeWithSkipsDescription": {
"message": "Ce temps apparaît entre crochets à côté du temps actuel sous la barre de défilement. Cela indique la durée totale de la vidéo après déduction de tout les segments. Ceci comprend les segments marqués comme étant uniquement à \"Afficher dans la barre de recherche\"."
},
"youHaveSkipped": {
"message": "Vous avez passé "
},
@@ -470,9 +472,6 @@
"theKey": {
"message": "La clé"
},
"keyAlreadyUsedByYouTube": {
"message": "est déjà utilisé par YouTube. Veuillez sélectionner une autre clé."
},
"keyAlreadyUsed": {
"message": "est lié à une autre action. Veuillez sélectionner une autre clé."
},
@@ -487,13 +486,13 @@
"message": "Promotion rémunérée, parrainage rémunéré et publicité directe. Pas pour l'autopromotion ou les présentations gratuites de causes, de créateurs, de sites web ou de produits qu'ils aiment."
},
"category_intro": {
"message": "Générique d'introduction"
"message": "Entracte/Animation d'intro"
},
"category_intro_description": {
"message": "Introductions animées qui sont récurrentes ou qui n'ont pas de valeur ajoutée directe dans la série. Ne doit pas être utilisé pour les vidéos musicales."
"message": "Un intervalle sans contenu réel. Peut être une pause, une image statique, une animation répétitive. Ceci ne doit pas être utilisé pour les transitions contenant des informations ou être utilisé sur les vidéos musicales."
},
"category_intro_short": {
"message": "Introduction"
"message": "Entracte"
},
"category_outro": {
"message": "Générique de fin"
@@ -528,6 +527,9 @@
"category_livestream_messages": {
"message": "Stream : lecture de dons et messages"
},
"category_livestream_messages_short": {
"message": "Lecture de messages"
},
"disable": {
"message": "Désactiver"
},
@@ -569,6 +571,12 @@
"moreCategories": {
"message": "Autres catégories"
},
"chooseACategory": {
"message": "Choisissez une catégorie"
},
"youMustSelectACategory": {
"message": "Vous devez sélectionner une catégorie pour tous les segments que vous soumettez !"
},
"bracketEnd": {
"message": "(Fin)"
},

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "સ્પોન્સરબ્લોક",
"description": "Name of the extension."
},
"fullName": {
"message": "યુટ્યુબ માટે સ્પોન્સરબ્લોક - સ્પોન્સરશિપ છોડી દો",
"description": "Name of the extension."

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"Loading": {
"message": "Betöltés..."
},

View File

@@ -205,10 +205,6 @@
"showNotice": {
"message": "Mostra di Nuovo l'Avviso"
},
"longDescription": {
"message": "SponsorBlock è un'estensione che salta gli spezzoni con contenuti sponsorizzati nei video di YouTube. SponsorBlock è un'estensione crowdsourced per i browser che permette a chiunque di inviare i minutaggi degli spezzoni sponsorizzati nei video di YouTube. Quando una persona avrà inviato questa informazione, tutti gli utenti che utilizzano questa estensione potranno saltare lo spezzone sponsorizzato.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Sito Web",
"description": "Used on Firefox Store Page"

View File

@@ -1 +1,6 @@
{}
{
"fullName": {
"message": "SponserBlock for YouTube - 動画のスポンサーセクションを自動でスキップする",
"description": "Name of the extension."
}
}

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock voor YouTube - Sla sponsorberichten over",
"description": "Name of the extension."

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock na YouTube - Omiń reklamy sponsorów",
"description": "Name of the extension."
@@ -209,10 +205,6 @@
"showNotice": {
"message": "Pokaż informacje ponownie"
},
"longDescription": {
"message": "SponsorBlock jest rozszerzeniem które przewinie segmenty sponsorów w filmach na YouTube. SponsorBlock jest opartym na crowdsourcing rozszerzeniem które pozwala każdemu zgłaszać początek i koniec segmentu reklamowego w filmach na YouTube. Kiedy ktoś zgłosi taki fragment zostanie on pominięty przez innych użytkowników rozszerzenia.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Strona",
"description": "Used on Firefox Store Page"

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock para YouTube - Pule patrocínios",
"description": "Name of the extension."
@@ -35,9 +31,15 @@
"Segments": {
"message": "segmentos de patrocinadores"
},
"upvoteButtonInfo": {
"message": "Votar nesse segmento positivamente"
},
"reportButtonTitle": {
"message": "Reportar"
},
"reportButtonInfo": {
"message": "Reportar esse segmento como inválido."
},
"Dismiss": {
"message": "Ignorar"
},
@@ -54,7 +56,7 @@
"message": "Nunca mostrar"
},
"hitGoBack": {
"message": "Aperta reverter pulo para voltar onde estava"
"message": "Aperta \"reverter pulo\" para voltar onde estava."
},
"unskip": {
"message": "Reverter pulo"
@@ -65,6 +67,9 @@
"paused": {
"message": "Pausado"
},
"manualPaused": {
"message": "Tempo parado"
},
"confirmMSG": {
"message": "\n\nPara editar ou remover linhas individuais, clique com o botão direito ou abra o popup da extensão pelo icone no canto superior direito."
},
@@ -95,6 +100,9 @@
"voted": {
"message": "Votado!"
},
"serverDown": {
"message": "Parece que o servidor caiu. Contate o desenvolvedor o quanto antes."
},
"connectionError": {
"message": "Ocorreu um erro de conexão. Código de erro: "
},
@@ -210,7 +218,7 @@
"message": "Mostrar notificação outra vez"
},
"longDescription": {
"message": "SponsorBlock é uma extensão que salta segmentos patrocinados em vídeos do YouTube. SponsorBlock é uma extenção crowdfunded que permite a qualquer um submeter o início e o fim de segmentos patrocinados. Assim que uma pessoa submete essa informação todos com a extenção poderam saltar automaticamete o patrocínio.",
"message": "SponsorBlock é uma extensão que pula patrocínios em vídeos no YouTube. SponsorBlock é uma extensão de navegador que deixa qualquer pessoa enviar o começo e fim de segmentos patrocinados em vídeos no YouTube. Quando uma pessoa envia essa informação, todo mundo com a extensão vai pular essa mesma parte patrocinada. \n\n Você também pode pular introduções, finais do vídeo, lembretes para inscrever e outras categorias.",
"description": "Full description of the extension on the store pages."
},
"website": {
@@ -263,6 +271,9 @@
"skip": {
"message": "Pular"
},
"skipped": {
"message": "Pulado"
},
"disableAutoSkip": {
"message": "Desativar Salto Automático"
},
@@ -278,6 +289,9 @@
"audioNotificationDescription": {
"message": "A notificação de áudio ao pular irá tocar um som sempre que um patrocínio for ignorado. Se desativado (ou o pulo automático estiver desativado), nenhum som será reproduzido."
},
"showTimeWithSkips": {
"message": "Mostrar tempo com pulos removidos"
},
"youHaveSkipped": {
"message": "Você pulou "
},
@@ -455,9 +469,6 @@
"theKey": {
"message": "A tecla"
},
"keyAlreadyUsedByYouTube": {
"message": "já está sendo usado pelo youtube. Por favor, selecione outra tecla."
},
"keyAlreadyUsed": {
"message": "está vinculado a outra ação. Por favor, selecione outra tecla."
},
@@ -468,21 +479,24 @@
"category_sponsor": {
"message": "Patrocinador"
},
"category_intro": {
"message": "Animação de Introdução"
},
"category_outro": {
"message": "Finalização/Créditos"
},
"category_interaction": {
"message": "Lembrete de interação (inscrever-se)"
},
"category_interaction_short": {
"message": "Lembrete de interação"
},
"category_music_offtopic": {
"message": "Música: Seção sem música"
},
"category_livestream_messages": {
"message": "Livestream: Leituras de Doação/Mensagem"
},
"category_livestream_messages_short": {
"message": "Leitura de mensagens"
},
"disable": {
"message": "Desativar"
},
@@ -492,6 +506,20 @@
"showOverlay": {
"message": "Mostrar barra de progresso"
},
"previewColor": {
"message": "Cor de pré-visualização",
"description": "Referring to submissions that have not been sent to the server yet."
},
"seekBarColor": {
"message": "Cor da barra"
},
"category": {
"message": "Categoria"
},
"skipOption": {
"message": "Opção de pulo",
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"enableTestingServer": {
"message": "Habilitar Servidor em teste Beta"
},
@@ -534,10 +562,25 @@
"forceChannelCheckPopup": {
"message": "Considere habilitar a verificação de canal forçada antes de pular os patrocinadores"
},
"downvoteDescription": {
"message": "Incorreto/tempo errado"
},
"incorrectCategory": {
"message": "Categoria errada"
},
"nonMusicCategoryOnMusic": {
"message": "Este vídeo é classificado como música. Você tem certeza que deseja enviar segmentos com categorias que não são músicas? A menos que esse vídeo não seja de fato música, você não deve enviar esse segmento. Por favor leia as orientações se estiver em dúvidas."
},
"multipleSegments": {
"message": "Multiplos segmentos"
},
"categoryUpdate1": {
"message": "As categorias estão aqui!"
},
"unsubmittedWarning": {
"message": "Notificação de segmentos não enviados"
},
"unsubmittedWarningDescription": {
"message": "Enviar uma notificação quando você sair de um vídeo com segmentos que não foram enviados"
}
}

View File

@@ -205,10 +205,6 @@
"showNotice": {
"message": "Mostrar notificação outra vez"
},
"longDescription": {
"message": "SponsorBlock é uma extensão que salta segmentos patrocinados em vídeos do YouTube. SponsorBlock é uma extenção crowdfunded que permite a qualquer um submeter o início e o fim de segmentos patrocinados. Assim que uma pessoa submete essa informação todos com a extenção poderam saltar automaticamete o patrocínio.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Site",
"description": "Used on Firefox Store Page"

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock pentru YouTube - Sari peste sponsorizări",
"description": "Name of the extension."
@@ -222,7 +218,7 @@
"message": "Arată Notificarea Din Nou"
},
"longDescription": {
"message": "SponsorBlock este o extensie care va sări peste segmentele sponsorizate din videoclipurile de pe YouTube. SponsorBlock este o extensie crowdsourced care lasă pe oricine să trimită începutul și finalul segmentelor sponsorizate din videoclipurile de pe YouTube. Odată ce o persoană trimite aceste informații, toată lumea cu această extensie va sări peste acel segment sponsorizat.",
"message": "SponsorBlock este o extensie care va sări peste segmentele sponsorizate din videoclipurile de pe YouTube. SponsorBlock este o extensie crowdsourced care lasă pe oricine să trimită începutul și finalul segmentelor sponsorizate din videoclipurile de pe YouTube. Odată ce o persoană trimite aceste informații, toată lumea cu această extensie va sări peste acel segment sponsorizat. \n\n Poți de asemenea să sari peste intro-uri, outro-uri, amintiri de abonare și alte categorii.",
"description": "Full description of the extension on the store pages."
},
"website": {
@@ -293,6 +289,12 @@
"audioNotificationDescription": {
"message": "Notificarea audio va reda un sunet atunci când sari peste un segement sponsorizat. Daca este dezactivat (sau autoskip este dezactivat), niciun sunet nu va fi redat."
},
"showTimeWithSkips": {
"message": "Arată timpul cu săriturile eliminate"
},
"showTimeWithSkipsDescription": {
"message": "Acest timp apare în paranteze lângă ora curentă sub bara de progres. Aceasta arată durata totală a videoclipului minus orice segment. Aceasta include segmente marcate doar ca \"Afișare în Seekbar\"."
},
"youHaveSkipped": {
"message": "Ai sărit peste "
},
@@ -470,9 +472,6 @@
"theKey": {
"message": "Tasta"
},
"keyAlreadyUsedByYouTube": {
"message": "este deja utilizat de YouTube. Vă rugăm selectați o altă tastă."
},
"keyAlreadyUsed": {
"message": "este deja setată la o altă acțiune. Vă rugăm să selectați o altă tastă."
},
@@ -487,13 +486,13 @@
"message": "Promovare plătită, refferali plătiți și reclame directe. Nu pentru autopromovări sau promovări gratis ale cauzelor/creatorilor/website-urilor/produselor."
},
"category_intro": {
"message": "Animație de Început"
"message": "Pauză/Animație Intro"
},
"category_intro_description": {
"message": "Animațiile de introducere care se repetă în serie sau care nu oferă nici o valoare directă. Această opțiune nu ar trebui folosită în videoclipurile muzicale."
"message": "Un interval fără conținut real. Poate fi o pauză, un cadru static, o animație care se repetă. Acestea nu ar trebui utilizate pentru tranziții care conțin informații sau nu ar trebui utilizate pe videoclipuri muzicale."
},
"category_intro_short": {
"message": "Intro"
"message": "Pauză"
},
"category_outro": {
"message": "Ecran De Final/Credite"
@@ -572,6 +571,12 @@
"moreCategories": {
"message": "Mai multe categorii"
},
"chooseACategory": {
"message": "Alege o categorie"
},
"youMustSelectACategory": {
"message": "Trebuie să selectaţi o categorie pentru toate segmentele pe care le trimiteţi!"
},
"bracketEnd": {
"message": "(Sfârșit)"
},

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock для YouTube - Пропускайте спонсорские вставки",
"description": "Name of the extension."
@@ -65,6 +61,9 @@
"paused": {
"message": "Пауза"
},
"manualPaused": {
"message": "Таймер остановлен"
},
"confirmMSG": {
"message": "\n\nЧтобы изменить или удалить отдельные значения, нажмите кнопку «Информация» или откройте всплывающее окно расширения, щелкнув значок расширения в правом верхнем углу."
},
@@ -107,6 +106,9 @@
"clearTimes": {
"message": "Удалить отмеченные сегменты"
},
"openPopup": {
"message": "Открыть всплывающее окно SponsorBlock"
},
"SubmitTimes": {
"message": "Отправить отмеченные сегменты"
},
@@ -206,10 +208,6 @@
"showNotice": {
"message": "Показывать уведомление снова"
},
"longDescription": {
"message": "SponsorBlock — это расширение, которое пропускает спонсорские вставки в видео на YouTube. SponsorBlock — это краудсорсинговое расширение, которое позволяет каждому отправить время начала и конца спонсорских сегментов в видео на YouTube. После того, как кто-нибудь отправляет эту информацию, все остальные пользователи расширения будут автоматически пропускать спонсорские сегменты.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Сайт",
"description": "Used on Firefox Store Page"
@@ -413,6 +411,24 @@
"whatExportOptions": {
"message": "Это вся конфигурация в формате JSON. Этот файл содержит Ваш идентификатор пользователя, поэтому не забудьте общаться с этим разумно."
},
"submit": {
"message": "Отправить"
},
"cancel": {
"message": "Отменить"
},
"delete": {
"message": "Удалить"
},
"preview": {
"message": "Превью"
},
"edit": {
"message": "Редактировать"
},
"copyDebugInformation": {
"message": "Скопировать отладочную информацию в буфер обмена"
},
"bracketNow": {
"message": "(Сейчас)"
},

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"Sponsor": {
"message": "sponzor"
},

View File

@@ -1,14 +1,10 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock för YouTube - Hoppa över sponsring",
"description": "Name of the extension."
},
"Description": {
"message": "Hoppa över sponsormeddelanden på YouTube-videor. Rapportera sponsring på videor du ser på för att spara tid för andra.",
"message": "Hoppa över sponsormeddelanden på YouTube-videor. Rapportera sponsring på videor du ser på för att spara tid åt andra.",
"description": "Description of the extension."
},
"400": {
@@ -18,7 +14,7 @@
"message": "Du har rapporterat för många sponsormeddelanden för den här videon, är du säker att det finns så många?"
},
"409": {
"message": "Den här har redan blivit rapporterad."
"message": "Den här har redan blivit rapporterad"
},
"channelWhitelisted": {
"message": "Kanal vitlistad!"
@@ -54,7 +50,7 @@
"message": "Sekunder"
},
"Hide": {
"message": "\"Visa aldrig\"-knappen. "
"message": "Visa Aldrig"
},
"hitGoBack": {
"message": "Tryck på Tillbaka för att ångra åtgärden."
@@ -63,7 +59,7 @@
"message": "Tillbaka"
},
"reskip": {
"message": "Frammåt"
"message": "Framåt"
},
"paused": {
"message": "Pausad"
@@ -218,10 +214,6 @@
"showNotice": {
"message": "Visa Notisen Igen"
},
"longDescription": {
"message": "SponsorBlock är ett webbläsartillägg som hoppar över sponsormeddelanden på YouTube-videor. SponsorBlock är ett crowdsourcat webbläsartillägg som låter vem som hellst att rapportera start och sluttider för sponsorsegment på YouTube-videor. När informationen väl har rapporterats kommer alla andra med detta tillägg att hoppa över sponsorsegmentet.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Hemsida",
"description": "Used on Firefox Store Page"
@@ -467,9 +459,6 @@
"theKey": {
"message": "Nyckeln"
},
"keyAlreadyUsedByYouTube": {
"message": "används redan av YouTube. Välj en annan nyckel."
},
"keyAlreadyUsed": {
"message": "är kopplad till en annan funktion. Välj en annan knapp."
},
@@ -480,15 +469,6 @@
"category_sponsor": {
"message": "Sponsormeddelande"
},
"category_intro": {
"message": "Intro-animation"
},
"category_intro_description": {
"message": "Intro-animationer som är återkommande i serien eller inte ger direkt värde. Detta bör inte användas på musikvideor."
},
"category_intro_short": {
"message": "Intro"
},
"category_music_offtopic_description": {
"message": "Endast för användning i musikvideor. Detta inkluderar intros och outros i musikvideor."
},
@@ -522,6 +502,12 @@
"moreCategories": {
"message": "Fler Kategorier"
},
"chooseACategory": {
"message": "Välj en kategori"
},
"youMustSelectACategory": {
"message": "Du måste välja en kategori för alla segment du skickar in!"
},
"bracketEnd": {
"message": "(Slut)"
},

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "Youtube için SponsorBlock - Sponsorlukları Atla",
"description": "Name of the extension."
@@ -221,10 +217,6 @@
"showNotice": {
"message": "Uyarıyı Tekrar Göster"
},
"longDescription": {
"message": "SponsorBlock, YouTube'da sponsorlu bölümleri atlamanıza yardımcı olan bir eklentidir. SponsorBlock, herkesin YouTube videolarında bulunan sponsorlu bölümlerin başını ve sonunu göndermesine izin veren kitlekaynaklı bir tarayıcı eklentisidir. Bu bilgiyi biri yolladığında, bu sponsorlu bölüm herkeste atlanır.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Website",
"description": "Used on Firefox Store Page"
@@ -470,9 +462,6 @@
"theKey": {
"message": "Anahtar"
},
"keyAlreadyUsedByYouTube": {
"message": "YouTube tarafından zaten kullanımda. Lütfen başka bir anahtar seçin."
},
"keyAlreadyUsed": {
"message": "başka bir eyleme bağlı. Lütfen başka bir anahtar seçin."
},
@@ -483,9 +472,6 @@
"category_sponsor": {
"message": "Sponsor"
},
"category_intro": {
"message": "Giriş Animasyonu"
},
"category_outro": {
"message": "Bitiş Ekranı/Jenerik"
},
@@ -510,6 +496,20 @@
"showOverlay": {
"message": "Arama Çubuğunda Göster"
},
"previewColor": {
"message": "Önizleme Rengi",
"description": "Referring to submissions that have not been sent to the server yet."
},
"seekBarColor": {
"message": "Oynatma Çubuğu Rengi"
},
"category": {
"message": "Kategori"
},
"skipOption": {
"message": "Atlama Seçeneği",
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"enableTestingServer": {
"message": "Beta Deneme Sunucusunu Devreye Sok"
},
@@ -563,5 +563,15 @@
},
"multipleSegments": {
"message": "Birden Çok Bölüm"
},
"guidelines": {
"message": "Kılavuz"
},
"readTheGuidelines": {
"message": "Kılavuzu Oku!!",
"description": "Show the first time they submit or if they are \"high risk\""
},
"categoryUpdate1": {
"message": "Kategoriler burada!"
}
}

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock для YouTube - Пропускайте спонсорські вставки",
"description": "Name of the extension."
@@ -209,10 +205,6 @@
"showNotice": {
"message": "Показувати сповіщення знову"
},
"longDescription": {
"message": "SponsorBlock - це розширення, яке пропускає спонсорські вставки в відео на YouTube. SponsorBlock - це краудсорсінгове розширення, яке дозволяє кожному надіслати час початку і кінця спонсорських сегментів в відео на YouTube. Після того, як хто-небудь надсилає цю інформацію, всі інші користувачі розширення будуть автоматично пропускати спонсорські сегменти.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Сайт",
"description": "Used on Firefox Store Page"

View File

@@ -1,8 +1,4 @@
{
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock for YouTube - 跳过赞助商广告",
"description": "Name of the extension."
@@ -221,10 +217,6 @@
"showNotice": {
"message": "重新显示通知"
},
"longDescription": {
"message": "SponsorBlock 是一个用于跳过 YouTube 视频的赞助商广告片段的扩展。SponsorBlock 是一个众包的浏览器扩展,可以让任何人提交 Youtube 视频的赞助商广告片段的开始和结束时间。一旦有人提交了信息,其他所有使用此扩展的人都能直接跳过赞助商广告片段。",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "网站",
"description": "Used on Firefox Store Page"
@@ -470,9 +462,6 @@
"theKey": {
"message": "按键"
},
"keyAlreadyUsedByYouTube": {
"message": "已被 Youtube 使用。请选择其他按键。"
},
"keyAlreadyUsed": {
"message": "已绑定其他操作。请选择其他按键。"
},
@@ -483,24 +472,30 @@
"category_sponsor": {
"message": "赞助商广告"
},
"category_intro": {
"message": "开头动画"
},
"category_outro": {
"message": "结束画面/结尾职员表"
},
"category_interaction": {
"message": "互动提醒(订阅)"
},
"category_interaction_short": {
"message": "互动提醒"
},
"category_selfpromo": {
"message": "未收钱的/自我推销"
},
"category_music_offtopic": {
"message": "音乐:非音乐部分"
},
"category_music_offtopic_short": {
"message": "无音乐"
},
"category_livestream_messages": {
"message": "直播:捐赠/消息阅读"
},
"category_livestream_messages_short": {
"message": "阅读消息"
},
"disable": {
"message": "禁用"
},
@@ -510,6 +505,20 @@
"showOverlay": {
"message": "在搜索栏中显示"
},
"previewColor": {
"message": "预览颜色",
"description": "Referring to submissions that have not been sent to the server yet."
},
"seekBarColor": {
"message": "拖动条颜色"
},
"category": {
"message": "类别"
},
"skipOption": {
"message": "跳过选项",
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"enableTestingServer": {
"message": "启用 Beta 测试服务器"
},
@@ -563,5 +572,18 @@
},
"multipleSegments": {
"message": "多个片段"
},
"guidelines": {
"message": "指南"
},
"readTheGuidelines": {
"message": "阅读指南!!",
"description": "Show the first time they submit or if they are \"high risk\""
},
"categoryUpdate1": {
"message": "类别在这里!"
},
"categoryUpdate2": {
"message": "打开选项,跳过开头,结尾,商业等。"
}
}

View File

@@ -140,6 +140,7 @@
color: rgb(235, 235, 235);
border: none;
display: inline-block;
font-size: 13.3333px !important;
cursor: pointer;
@@ -179,6 +180,7 @@
.sponsorSkipNoticeCloseButton {
height: 10px;
width: 10px;
box-sizing: unset;
padding: 2px 5px;

View File

@@ -230,7 +230,12 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
}
getCategoryOptions() {
let elements = [];
let elements = [(
<option value={"chooseACategory"}
key={"chooseACategory"}>
{chrome.i18n.getMessage("chooseACategory")}
</option>
)];
for (const category of Config.config.categorySelections) {
elements.push(

View File

@@ -167,9 +167,16 @@ class SubmissionNoticeComponent extends React.Component<SubmissionNoticeProps, S
ref.current.saveEditTimes();
}
let sponsorTimesSubmitting = this.props.contentContainer().sponsorTimesSubmitting;
for (const sponsorTime of sponsorTimesSubmitting) {
if (sponsorTime.category === "chooseACategory") {
alert(chrome.i18n.getMessage("youMustSelectACategory"));
return;
}
}
// Check if any non music categories are being used on a music video
if (this.contentContainer().videoInfo?.microformat?.playerMicroformatRenderer?.category === "Music") {
let sponsorTimesSubmitting = this.props.contentContainer().sponsorTimesSubmitting;
for (const sponsorTime of sponsorTimesSubmitting) {
if (!sponsorTime.category.startsWith("music_")) {
if (!confirm(chrome.i18n.getMessage("nonMusicCategoryOnMusic"))) return;

View File

@@ -8,6 +8,7 @@ interface SBConfig {
userID: string,
// sponsorTimes: SBMap<string, SponsorTime[]>,
segmentTimes: SBMap<string, SponsorTime[]>,
defaultCategory: string,
whitelistedChannels: string[],
forceChannelCheck: boolean,
startSponsorKeybind: string,
@@ -40,6 +41,7 @@ interface SBConfig {
// Preview bar
barTypes: {
"preview-chooseACategory": PreviewBarOption,
"sponsor": PreviewBarOption,
"preview-sponsor": PreviewBarOption,
"intro": PreviewBarOption,
@@ -109,7 +111,15 @@ class SBMap<T, U> extends Map {
delete(key) {
const result = super.delete(key);
this.update();
// Make sure there are no empty elements
for (const entry of this.entries()) {
if (entry[1].length === 0) {
super.delete(entry[0]);
}
}
this.update();
return result;
}
@@ -129,6 +139,7 @@ var Config: SBObject = {
defaults: {
userID: null,
segmentTimes: new SBMap("segmentTimes"),
defaultCategory: "chooseACategory",
whitelistedChannels: [],
forceChannelCheck: false,
startSponsorKeybind: ";",
@@ -163,6 +174,10 @@ var Config: SBObject = {
// Preview bar
barTypes: {
"preview-chooseACategory": {
color: "#ffffff",
opacity: "0.7"
},
"sponsor": {
color: "#00d400",
opacity: "0.7"

View File

@@ -418,7 +418,7 @@ function createPreviewBar(): void {
const el = document.querySelectorAll(selector);
if (el && el.length && el[0]) {
previewBar = new PreviewBar(el[0], onMobileYouTube);
previewBar = new PreviewBar(el[0], onMobileYouTube, onInvidious);
updatePreviewBar();
@@ -493,7 +493,8 @@ function startSponsorSchedule(includeIntersectingSegments: boolean = false, curr
}
// Don't skip if this category should not be skipped
if (utils.getCategorySelection(currentSkip.category).option === CategorySkipOption.ShowOverlay) return;
if (utils.getCategorySelection(currentSkip.category)?.option === CategorySkipOption.ShowOverlay
&& skipInfo.array !== sponsorTimesSubmitting) return;
let skippingFunction = () => {
let forcedSkipTime: number = null;
@@ -504,8 +505,7 @@ function startSponsorSchedule(includeIntersectingSegments: boolean = false, curr
if (video.currentTime >= skipTime[0] && video.currentTime < skipTime[1]) {
skipToTime(video, skipTime, skippingSegments, skipInfo.openNotice);
// TODO: Know the autoSkip settings for ALL items being skipped
if (utils.getCategorySelection(currentSkip.category).option === CategorySkipOption.ManualSkip) {
if (utils.getCategorySelection(currentSkip.category)?.option === CategorySkipOption.ManualSkip) {
forcedSkipTime = skipTime[0] + 0.001;
} else {
forcedSkipTime = skipTime[1];
@@ -618,7 +618,7 @@ function sponsorsLookup(id: string) {
videoID: id,
categories
}).then(async (response: FetchResponse) => {
if (response.ok) {
if (response?.ok) {
let recievedSegments: SponsorTime[] = JSON.parse(response.responseText);
if (!recievedSegments.length) {
console.error("[SponsorBlock] Server returned malformed response: " + JSON.stringify(recievedSegments));
@@ -662,7 +662,7 @@ function sponsorsLookup(id: string) {
}
sponsorLookupRetries = 0;
} else if (response.status === 404) {
} else if (response?.status === 404) {
sponsorDataFound = false;
//check if this video was uploaded recently
@@ -897,13 +897,13 @@ function getNextSkipIndex(currentTime: number, includeIntersectingSegments: bool
*/
function getLatestEndTimeIndex(sponsorTimes: SponsorTime[], index: number, hideHiddenSponsors: boolean = true): number {
// Only combine segments for AutoSkip
if (index == -1 ||
utils.getCategorySelection(sponsorTimes[index].category).option !== CategorySkipOption.AutoSkip) return index;
if (index == -1 ||
utils.getCategorySelection(sponsorTimes[index].category)?.option !== CategorySkipOption.AutoSkip) return index;
// Default to the normal endTime
let latestEndTimeIndex = index;
for (let i = 0; i < sponsorTimes.length; i++) {
for (let i = 0; i < sponsorTimes?.length; i++) {
let currentSegment = sponsorTimes[i].segment;
let latestEndTime = sponsorTimes[latestEndTimeIndex].segment[1];
@@ -939,7 +939,7 @@ function getStartTimes(sponsorTimes: SponsorTime[], includeIntersectingSegments:
let startTimes: number[] = [];
for (let i = 0; i < sponsorTimes.length; i++) {
for (let i = 0; i < sponsorTimes?.length; i++) {
if ((minimum === undefined || (sponsorTimes[i].segment[0] >= minimum || (includeIntersectingSegments && sponsorTimes[i].segment[1] > minimum)))
&& (!onlySkippableSponsors || utils.getCategorySelection(sponsorTimes[i].category).option !== CategorySkipOption.ShowOverlay)
&& (!hideHiddenSponsors || sponsorTimes[i].hidden === SponsorHideType.Visible)) {
@@ -968,7 +968,7 @@ function previewTime(time: number) {
//skip from the start time to the end time for a certain index sponsor time
function skipToTime(v: HTMLVideoElement, skipTime: number[], skippingSegments: SponsorTime[], openNotice: boolean) {
// There will only be one submission if it is manual skip
let autoSkip: boolean = utils.getCategorySelection(skippingSegments[0].category).option === CategorySkipOption.AutoSkip;
let autoSkip: boolean = utils.getCategorySelection(skippingSegments[0].category)?.option === CategorySkipOption.AutoSkip;
if (autoSkip || sponsorTimesSubmitting.includes(skippingSegments[0])) {
v.currentTime = skipTime[1];
@@ -1011,8 +1011,6 @@ function unskipSponsorTime(segment: SponsorTime) {
if (sponsorTimes != null) {
//add a tiny bit of time to make sure it is not skipped again
video.currentTime = segment.segment[0] + 0.001;
checkIfInsideSegment();
}
}
@@ -1020,16 +1018,6 @@ function reskipSponsorTime(segment: SponsorTime) {
video.currentTime = segment.segment[1];
}
/**
* Checks if currently inside a segment and will trigger
* a skip schedule if true.
*
* This is used for when a manual skip is finished or a reskip is complete
*/
function checkIfInsideSegment() {
// for
}
function createButton(baseID, title, callback, imageName, isDraggable=false): boolean {
if (document.getElementById(baseID + "Button") != null) return false;
@@ -1038,18 +1026,10 @@ function createButton(baseID, title, callback, imageName, isDraggable=false): bo
newButton.draggable = isDraggable;
newButton.id = baseID + "Button";
newButton.classList.add("playerButton");
if (!onMobileYouTube) {
newButton.classList.add("ytp-button");
} else {
newButton.classList.add("icon-button");
newButton.style.padding = "0";
}
newButton.classList.add("ytp-button");
newButton.setAttribute("title", chrome.i18n.getMessage(title));
newButton.addEventListener("click", (event: Event) => {
callback();
// Prevents the contols from closing when clicked
if (onMobileYouTube) event.stopPropagation();
});
// Image HTML
@@ -1091,6 +1071,8 @@ function getControls(): HTMLElement | boolean {
//adds all the player controls buttons
async function createButtons(): Promise<boolean> {
if (onMobileYouTube) return;
let result = await utils.wait(getControls).catch();
//set global controls variable
@@ -1168,8 +1150,7 @@ function startSponsorClicked() {
sponsorTimesSubmitting.push({
segment: [getRealCurrentTime()],
UUID: null,
// Default to sponsor
category: "sponsor"
category: Config.config.defaultCategory
});
}
@@ -1217,9 +1198,9 @@ async function changeStartSponsorButton(showStartSponsor, uploadButtonVisible) {
(<HTMLImageElement> document.getElementById("startSponsorImage")).src = chrome.extension.getURL("icons/PlayerStartIconSponsorBlocker256px.png");
document.getElementById("startSponsorButton").setAttribute("title", chrome.i18n.getMessage("sponsorStart"));
if (document.getElementById("startSponsorImage").style.display != "none" && uploadButtonVisible && !Config.config.hideUploadButtonPlayerControls) {
if (document.getElementById("startSponsorImage").style.display != "none" && uploadButtonVisible && !Config.config.hideUploadButtonPlayerControls && !onInvidious) {
document.getElementById("submitButton").style.display = "unset";
} else if (!uploadButtonVisible) {
} else if (!uploadButtonVisible || onInvidious) {
//disable submit button
document.getElementById("submitButton").style.display = "none";
}
@@ -1592,6 +1573,8 @@ function updateAdFlag() {
}
function showTimeWithoutSkips(allSponsorTimes): void {
if (onMobileYouTube || onInvidious) return;
let skipDuration = 0;
// Calculate skipDuration based from the segments in the preview bar
@@ -1605,7 +1588,7 @@ function showTimeWithoutSkips(allSponsorTimes): void {
// YouTube player time display
let display = document.getElementsByClassName("ytp-time-display notranslate")[0];
if (display === undefined) return
if (!display) return;
let formatedTime = utils.getFormattedTime(video.duration - skipDuration);

View File

@@ -13,16 +13,18 @@ class PreviewBar {
container: HTMLUListElement;
parent: any;
onMobileYouTube: boolean;
onInvidious: boolean;
timestamps: number[][];
types: string;
constructor(parent, onMobileYouTube) {
constructor(parent, onMobileYouTube, onInvidious) {
this.container = document.createElement('ul');
this.container.id = 'previewbar';
this.parent = parent;
this.onMobileYouTube = onMobileYouTube;
this.onInvidious = onInvidious;
this.updatePosition(parent);
@@ -30,6 +32,8 @@ class PreviewBar {
}
setupHoverText() {
if (this.onMobileYouTube || this.onInvidious) return;
let seekBar = document.querySelector(".ytp-progress-bar-container");
// Create label placeholder

View File

@@ -338,7 +338,7 @@ async function runThePopup(messageListener?: MessageListener) {
if (sponsorTimes[sponsorTimesIndex] == undefined) {
sponsorTimes[sponsorTimesIndex] = {
segment: [],
category: "sponsor",
category: Config.config.defaultCategory,
UUID: null
};
}

View File

@@ -331,9 +331,10 @@ class Utils {
return seconds % 60;
}
getFormattedTime(seconds: number, precise?: boolean) {
let minutes = Math.floor(seconds / 60);
let secondsNum: number = seconds - minutes * 60;
getFormattedTime(seconds: number, precise?: boolean): string {
let hours = Math.floor(seconds / 60 / 60);
let minutes = Math.floor(seconds / 60) % 60;
let secondsNum = seconds % 60;
if (!precise) {
secondsNum = Math.floor(secondsNum);
}
@@ -345,7 +346,7 @@ class Utils {
secondsDisplay = "0" + secondsDisplay;
}
let formatted = minutes + ":" + secondsDisplay;
let formatted = (hours ? hours + ":" : "") + minutes + ":" + secondsDisplay;
return formatted;
}