Ver Fonte

Merge branch 'Anarios:main' into main

Eryk Darnowski há 3 anos atrás
pai
commit
94cc5734cb

+ 6 - 4
Extensions/UserScript/Return Youtube Dislike.user.js

@@ -2,7 +2,7 @@
 // @name         Return YouTube Dislike
 // @namespace    https://www.returnyoutubedislike.com/
 // @homepage     https://www.returnyoutubedislike.com/
-// @version      0.9.0
+// @version      3.0.1
 // @encoding     utf-8
 // @description  Return of the YouTube Dislike, Based off https://www.returnyoutubedislike.com/
 // @icon         https://github.com/Anarios/return-youtube-dislike/raw/main/Icons/Return%20Youtube%20Dislike%20-%20Transparent.png
@@ -468,7 +468,9 @@ function numberFormat(numberState) {
         ?.find((n) => n?.getAttribute("href")?.includes("?locale="))
         ?.getAttribute("href")
     )?.searchParams?.get("locale");
-  } catch {}
+  } catch {
+    userLocales = document.documentElement.lang;
+  }
 
   let numberDisplay;
   if (extConfig.numberDisplayRoundDown === false) {
@@ -476,12 +478,12 @@ function numberFormat(numberState) {
   } else {
     numberDisplay = roundDown(numberState);
   }
-  return getNumberFormatter(extConfig.numberDisplayFormat).format(
+  return getNumberFormatter(extConfig.numberDisplayFormat, userLocales).format(
     numberDisplay
   );
 }
 
-function getNumberFormatter(optionSelect) {
+function getNumberFormatter(optionSelect, userLocales) {
   let formatterNotation;
   let formatterCompactDisplay;
 

+ 20 - 16
Extensions/combined/_locales/de/messages.json

@@ -1,50 +1,54 @@
 {
   "extensionName": {
-      "message": "Return YouTube Dislike"
+    "message": "Return YouTube Dislike"
+  },
+
+  "extensionNameBeta": {
+    "message": "Return YouTube Dislike Beta"
   },
   "extensionDesc": {
-      "message": "Macht Dislikes wieder sichtbar"
+    "message": "Macht Dislikes wieder sichtbar"
   },
   "textDeveloper": {
-      "message": "von Dmitry Selivanov & Community"
+    "message": "von Dmitry Selivanov & Community"
   },
   "linkWebsite": {
-      "message": "Website"
+    "message": "Website"
   },
   "linkFAQ": {
-      "message": "FAQ"
+    "message": "FAQ"
   },
   "linkDonate": {
-      "message": "Spenden"
+    "message": "Spenden"
   },
   "linkHelp": {
-      "message": "Hilfe"
+    "message": "Hilfe"
   },
   "legendSettings": {
-      "message": "Einstellungen"
+    "message": "Einstellungen"
   },
   "textSettings": {
-      "message": "Deaktiviere Like/Dislike-Übermittlung"
+    "message": "Deaktiviere Like/Dislike-Übermittlung"
   },
   "textSettingsHover": {
-      "message": "Stoppt deine Likes und Dislikes zu zählen."
+    "message": "Stoppt deine Likes und Dislikes zu zählen."
   },
   "textUpdate": {
-      "message": "aktualisieren auf"
+    "message": "aktualisieren auf"
   },
   "version30installed": {
-      "message": "Version 4.0.0.0 installiert"
+    "message": "Version 3.0.0.1 installiert"
   },
   "whatsnew": {
-      "message": "Was ist neu"
+    "message": "Was ist neu"
   },
   "shortsSupport": {
-      "message": "YouTube Shorts Unterstützung"
+    "message": "YouTube Shorts Unterstützung"
   },
   "customColors": {
-      "message": "Benutzerdefinierte Farben für Dislike-Leiste und Buttons"
+    "message": "Benutzerdefinierte Farben für Dislike-Leiste und Buttons"
   },
   "customNumberFormats": {
-      "message": "Benutzerdefinierte Zahlenformate"
+    "message": "Benutzerdefinierte Zahlenformate"
   }
 }

+ 60 - 54
Extensions/combined/_locales/en/messages.json

@@ -1,56 +1,62 @@
 {
-    "extensionName": {
-        "message": "Return YouTube Dislike"
-    },
-    "extensionDesc": {
-        "message": "Returns ability to see dislikes"
-    },
-    "textDeveloper": {
-        "message": "by Dmitry Selivanov & Community"
-    },
-    "linkWebsite": {
-        "message": "Website"
-    },
-    "linkFAQ": {
-        "message": "FAQ"
-    },
-    "linkDonate": {
-        "message": "Donate"
-    },
-    "linkHelp": {
-        "message": "Help"
-    },
-    "legendSettings": {
-        "message": "Settings"
-    },
-    "textSettings": {
-        "message": "Disable like/dislike submission"
-    },
-    "textLikesDisabled": {
-        "message": "disabled by owner"
-    },
-    "textSettingsHover": {
-        "message": "Stops counting your likes and dislikes."
-    },
-    "textTempUnavailable": {
-        "message": "temporarily unavailable"
-    },
-    "textUpdate": {
-        "message": "update to"
-    },
-    "version30installed": {
-        "message": "Version 4.0.0.0 installed"
-    },
-    "whatsnew": {
-        "message": "What's new"
-    },
-    "shortsSupport": {
-        "message": "YouTube Shorts Support"
-    },
-    "customColors": {
-        "message": "Custom colors for dislike bar and buttons"
-    },
-    "customNumberFormats": {
-        "message": "Custom number formats"
-    }
+  "extensionName": {
+    "message": "Return YouTube Dislike"
+  },
+  "extensionNameBeta": {
+    "message": "Return YouTube Dislike Beta"
+  },
+  "extensionDesc": {
+    "message": "Returns ability to see dislikes"
+  },
+  "textDeveloper": {
+    "message": "by Dmitry Selivanov & Community"
+  },
+  "linkWebsite": {
+    "message": "Website"
+  },
+  "linkFAQ": {
+    "message": "FAQ"
+  },
+  "linkDonate": {
+    "message": "Donate"
+  },
+  "linkHelp": {
+    "message": "Help"
+  },
+  "legendSettings": {
+    "message": "Settings"
+  },
+  "textSettings": {
+    "message": "Disable like/dislike submission"
+  },
+  "textLikesDisabled": {
+    "message": "disabled by owner"
+  },
+  "textSettingsHover": {
+    "message": "Stops counting your likes and dislikes."
+  },
+  "textTempUnavailable": {
+    "message": "temporarily unavailable"
+  },
+  "textUpdate": {
+    "message": "update to"
+  },
+  "version30installed": {
+    "message": "Version 3.0.0.1 installed"
+  },
+  "whatsnew": {
+    "message": "What's new"
+  },
+  "shortsSupport": {
+    "message": "YouTube Shorts Support"
+  },
+  "customColors": {
+    "message": "Custom colors for dislike bar and buttons"
+  },
+  "customNumberFormats": {
+    "message": "Custom number formats"
+  },
+  "considerDonating": {
+    "message": "The only thing that keeps the extension running is your donations, please consider supporting the project."
+  }
 }

+ 36 - 33
Extensions/combined/_locales/es/messages.json

@@ -1,35 +1,38 @@
 {
-    "extensionName": {
-        "message": "Regresar los Dislikes de YouTube"
-    },
-    "extensionDesc": {
-        "message": "Regresa la posibilidad de ver los dislikes"
-    },
-    "textDeveloper": {
-        "message": "por Dmitry Selivanov y la Comunidad"
-    },
-    "linkWebsite": {
-        "message": "Página web"
-    },
-    "linkFAQ": {
-        "message": "P+F"
-    },
-    "linkDonate": {
-        "message": "Donar"
-    },
-    "linkHelp": {
-        "message": "Ayuda"
-    },
-    "legendSettings": {
-        "message": "Ajustes"
-    },
-    "textSettings": {
-        "message": "Desactivar los dislikes"
-    },
-    "textSettingsHover": {
-        "message": "Dejar de contar los dislikes."
-    },
-    "textUpdate": {
-        "message": "actualizar a"
-    }
+  "extensionName": {
+    "message": "Regresar los Dislikes de YouTube"
+  },
+  "extensionNameBeta": {
+    "message": "Return YouTube Dislike Beta"
+  },
+  "extensionDesc": {
+    "message": "Regresa la posibilidad de ver los dislikes"
+  },
+  "textDeveloper": {
+    "message": "por Dmitry Selivanov y la Comunidad"
+  },
+  "linkWebsite": {
+    "message": "Página web"
+  },
+  "linkFAQ": {
+    "message": "P+F"
+  },
+  "linkDonate": {
+    "message": "Donar"
+  },
+  "linkHelp": {
+    "message": "Ayuda"
+  },
+  "legendSettings": {
+    "message": "Ajustes"
+  },
+  "textSettings": {
+    "message": "Desactivar los dislikes"
+  },
+  "textSettingsHover": {
+    "message": "Dejar de contar los dislikes."
+  },
+  "textUpdate": {
+    "message": "actualizar a"
+  }
 }

+ 42 - 39
Extensions/combined/_locales/fr/messages.json

@@ -1,41 +1,44 @@
 {
-    "extensionName": {
-        "message": "Return YouTube Dislike"
-    },
-    "extensionDesc": {
-        "message": "Ré-affiche les pouces rouges/dislikes des vidées"
-    },
-    "textDeveloper": {
-        "message": "par Dmitry Selivanov & Communauté"
-    },
-    "linkWebsite": {
-        "message": "Site web"
-    },
-    "linkFAQ": {
-        "message": "Questions fréquentes"
-    },
-    "linkDonate": {
-        "message": "Faire un don"
-    },
-    "linkHelp": {
-        "message": "Aide"
-    },
-    "legendSettings": {
-        "message": "Paramètres"
-    },
-    "textLikesDisabled": {
-        "message": "Désactivé par le créateur"
-    },
-    "textSettings": {
-        "message": "Désactiver l'envoi des likes/dislikes"
-    },
-    "textSettingsHover": {
-        "message": "Arrête de compter les likes et les dislikes mis sur les vidéos."
-    },
-    "textTempUnavailable": {
-        "message": "temporairement indisponible"
-    },
-    "textUpdate": {
-        "message": "mettre à jour vers"
-    }
+  "extensionName": {
+    "message": "Return YouTube Dislike"
+  },
+  "extensionNameBeta": {
+    "message": "Return YouTube Dislike Beta"
+  },
+  "extensionDesc": {
+    "message": "Ré-affiche les pouces rouges/dislikes des vidées"
+  },
+  "textDeveloper": {
+    "message": "par Dmitry Selivanov & Communauté"
+  },
+  "linkWebsite": {
+    "message": "Site web"
+  },
+  "linkFAQ": {
+    "message": "Questions fréquentes"
+  },
+  "linkDonate": {
+    "message": "Faire un don"
+  },
+  "linkHelp": {
+    "message": "Aide"
+  },
+  "legendSettings": {
+    "message": "Paramètres"
+  },
+  "textLikesDisabled": {
+    "message": "Désactivé par le créateur"
+  },
+  "textSettings": {
+    "message": "Désactiver l'envoi des likes/dislikes"
+  },
+  "textSettingsHover": {
+    "message": "Arrête de compter les likes et les dislikes mis sur les vidéos."
+  },
+  "textTempUnavailable": {
+    "message": "temporairement indisponible"
+  },
+  "textUpdate": {
+    "message": "mettre à jour vers"
+  }
 }

+ 0 - 50
Extensions/combined/_locales/gr/manifest.json

@@ -1,50 +0,0 @@
-{
-    "extensionName": {
-        "message": "Επιστροφή του YouTube Dislike"
-    },
-    "extensionDesc": {
-        "message": "Επιστρέφει τα dislikes"
-    },
-    "textDeveloper": {
-        "message": "από τον Dmitry Selivanov & την κοινότητα"
-    },
-    "linkWebsite": {
-        "message": "Ιστοσελίδα"
-    },
-    "linkFAQ": {
-        "message": "Γρήγορες Ερωτήσιες & Απαντήσεις"
-    },
-    "linkDonate": {
-        "message": "Στηρίξτε"
-    },
-    "linkHelp": {
-        "message": "Βοήθεια"
-    },
-    "legendSettings": {
-        "message": "Ρυθμίσεις"
-    },
-    "textSettings": {
-        "message": "Διακοπή υποβολής like/dislike"
-    },
-    "textSettingsHover": {
-        "message": "Σταματάει να μετράει τα likes & dislikes που κάνεις."
-    },
-    "textUpdate": {
-        "message": "ενημέρωση σε"
-    },
-    "version30installed": {
-        "message": "Εκδοση 4.0.0.0 εγκαταστάθηκε"
-    },
-    "whatsnew": {
-        "message": "Τι είναι νέο;"
-    },
-    "shortsSupport": {
-        "message": "Υποστήριξη για YouTube Shorts"
-    },
-    "customColors": {
-        "message": "Προσαρμοζόμενα χρώματα για τα κουμπιά και την μπάρα dislike"
-    },
-    "customNumberFormats": {
-        "message": "Προσαρμοζόμενη μορφή αριθμών."
-    }
-}

+ 53 - 0
Extensions/combined/_locales/gr/messages.json

@@ -0,0 +1,53 @@
+{
+  "extensionName": {
+    "message": "Επιστροφή του YouTube Dislike"
+  },
+  "extensionNameBeta": {
+    "message": "Return YouTube Dislike Beta"
+  },
+  "extensionDesc": {
+    "message": "Επιστρέφει τα dislikes"
+  },
+  "textDeveloper": {
+    "message": "από τον Dmitry Selivanov & την κοινότητα"
+  },
+  "linkWebsite": {
+    "message": "Ιστοσελίδα"
+  },
+  "linkFAQ": {
+    "message": "Γρήγορες Ερωτήσιες & Απαντήσεις"
+  },
+  "linkDonate": {
+    "message": "Στηρίξτε"
+  },
+  "linkHelp": {
+    "message": "Βοήθεια"
+  },
+  "legendSettings": {
+    "message": "Ρυθμίσεις"
+  },
+  "textSettings": {
+    "message": "Διακοπή υποβολής like/dislike"
+  },
+  "textSettingsHover": {
+    "message": "Σταματάει να μετράει τα likes & dislikes που κάνεις."
+  },
+  "textUpdate": {
+    "message": "ενημέρωση σε"
+  },
+  "version30installed": {
+    "message": "Εκδοση 3.0.0.1 εγκαταστάθηκε"
+  },
+  "whatsnew": {
+    "message": "Τι είναι νέο;"
+  },
+  "shortsSupport": {
+    "message": "Υποστήριξη για YouTube Shorts"
+  },
+  "customColors": {
+    "message": "Προσαρμοζόμενα χρώματα για τα κουμπιά και την μπάρα dislike"
+  },
+  "customNumberFormats": {
+    "message": "Προσαρμοζόμενη μορφή αριθμών."
+  }
+}

+ 51 - 48
Extensions/combined/_locales/it/messages.json

@@ -1,50 +1,53 @@
 {
-    "extensionName": {
-        "message": "Return YouTube Dislike"
-    },
-    "extensionDesc": {
-        "message": "Ripristina la possibilità di vedere i dislikes"
-    },
-    "textDeveloper": {
-        "message": "di Dmitry Selivanov e la Community"
-    },
-    "linkWebsite": {
-        "message": "Sito web"
-    },
-    "linkFAQ": {
-        "message": "Domande frequenti"
-    },
-    "linkDonate": {
-        "message": "Fai una donazione"
-    },
-    "linkHelp": {
-        "message": "Aiuto"
-    },
-    "legendSettings": {
-        "message": "Impostazioni"
-    },
-    "textSettings": {
-        "message": "Disabilita l'invio di like/dislike"
-    },
-    "textSettingsHover": {
-        "message": "Interrompe il conteggio dei tuoi likes e dislikes."
-    },
-    "textUpdate": {
-        "message": "aggiorna a"
-    },
-    "version30installed": {
-        "message": "Versione 4.0.0.0 installata"
-    },
-    "whatsnew": {
-        "message": "Cosa c'è di nuovo"
-    },
-    "shortsSupport": {
-        "message": "Supporto per YouTube Shorts"
-    },
-    "customColors": {
-        "message": "Colori personalizzati per la barra dei dislike e i bottoni"
-    },
-    "customNumberFormats": {
-        "message": "Formati numerici personalizzati"
-    }
+  "extensionName": {
+    "message": "Return YouTube Dislike"
+  },
+  "extensionNameBeta": {
+    "message": "Return YouTube Dislike Beta"
+  },
+  "extensionDesc": {
+    "message": "Ripristina la possibilità di vedere i dislikes"
+  },
+  "textDeveloper": {
+    "message": "di Dmitry Selivanov e la Community"
+  },
+  "linkWebsite": {
+    "message": "Sito web"
+  },
+  "linkFAQ": {
+    "message": "Domande frequenti"
+  },
+  "linkDonate": {
+    "message": "Fai una donazione"
+  },
+  "linkHelp": {
+    "message": "Aiuto"
+  },
+  "legendSettings": {
+    "message": "Impostazioni"
+  },
+  "textSettings": {
+    "message": "Disabilita l'invio di like/dislike"
+  },
+  "textSettingsHover": {
+    "message": "Interrompe il conteggio dei tuoi likes e dislikes."
+  },
+  "textUpdate": {
+    "message": "aggiorna a"
+  },
+  "version30installed": {
+    "message": "Versione 3.0.0.1 installata"
+  },
+  "whatsnew": {
+    "message": "Cosa c'è di nuovo"
+  },
+  "shortsSupport": {
+    "message": "Supporto per YouTube Shorts"
+  },
+  "customColors": {
+    "message": "Colori personalizzati per la barra dei dislike e i bottoni"
+  },
+  "customNumberFormats": {
+    "message": "Formati numerici personalizzati"
+  }
 }

+ 36 - 33
Extensions/combined/_locales/pt_BR/messages.json

@@ -1,35 +1,38 @@
 {
-    "extensionName": {
-        "message": "Devolver Dislikes do YouTube"
-    },
-    "extensionDesc": {
-        "message": "A capacidade de ver os retornos de não gostos"
-    },
-    "textDeveloper": {
-        "message": "por Dmitry Selivanov e a Comunidade"
-    },
-    "linkWebsite": {
-        "message": "Website"
-    },
-    "linkFAQ": {
-        "message": "FAQ"
-    },
-    "linkDonate": {
-        "message": "Doe"
-    },
-    "linkHelp": {
-        "message": "Ajuda"
-    },
-    "legendSettings": {
-        "message": "Ajustes"
-    },
-    "textSettings": {
-        "message": "Desaproveitar as aversões"
-    },
-    "textSettingsHover": {
-        "message": "Pare de contar as antipatias."
-    },
-    "textUpdate": {
-        "message": "atualização para"
-    }
+  "extensionName": {
+    "message": "Devolver Dislikes do YouTube"
+  },
+  "extensionNameBeta": {
+    "message": "Return YouTube Dislike Beta"
+  },
+  "extensionDesc": {
+    "message": "A capacidade de ver os retornos de não gostos"
+  },
+  "textDeveloper": {
+    "message": "por Dmitry Selivanov e a Comunidade"
+  },
+  "linkWebsite": {
+    "message": "Website"
+  },
+  "linkFAQ": {
+    "message": "FAQ"
+  },
+  "linkDonate": {
+    "message": "Doe"
+  },
+  "linkHelp": {
+    "message": "Ajuda"
+  },
+  "legendSettings": {
+    "message": "Ajustes"
+  },
+  "textSettings": {
+    "message": "Desaproveitar as aversões"
+  },
+  "textSettingsHover": {
+    "message": "Pare de contar as antipatias."
+  },
+  "textUpdate": {
+    "message": "atualização para"
+  }
 }

+ 54 - 48
Extensions/combined/_locales/ru/messages.json

@@ -1,50 +1,56 @@
 {
-    "extensionName": {
-        "message": "Return YouTube Dislike"
-    },
-    "extensionDesc": {
-        "message": "Возвращает способность видеть дизлайки"
-    },
-    "textDeveloper": {
-        "message": "Дмитрий Селиванов и сообщество"
-    },
-    "linkWebsite": {
-        "message": "Сайт"
-    },
-    "linkFAQ": {
-        "message": "ЧАВО"
-    },
-    "linkDonate": {
-        "message": "Пожертвовать"
-    },
-    "linkHelp": {
-        "message": "Помощь"
-    },
-    "legendSettings": {
-        "message": "Настройки"
-    },
-    "textSettings": {
-        "message": "Отключить отправку лайков/дизлайков"
-    },
-    "textSettingsHover": {
-        "message": "Отключает отправку ваших отметок нравится/не нравится"
-    },
-    "textUpdate": {
-        "message": "обновление до"
-    },
-    "version30installed": {
-        "message": "Версия 4.0.0.0 установлена"
-    },
-    "whatsnew": {
-        "message": "Что нового"
-    },
-    "shortsSupport": {
-        "message": "Поддержка YouTube Shorts"
-    },
-    "customColors": {
-        "message": "Выбор цветов панели дизлайков и кнопок"
-    },
-    "customNumberFormats": {
-        "message": "Выбор формата чисел"
-    }
+  "extensionName": {
+    "message": "Return YouTube Dislike"
+  },
+  "extensionNameBeta": {
+    "message": "Return YouTube Dislike Beta"
+  },
+  "extensionDesc": {
+    "message": "Возвращает способность видеть дизлайки"
+  },
+  "textDeveloper": {
+    "message": "Дмитрий Селиванов и сообщество"
+  },
+  "linkWebsite": {
+    "message": "Сайт"
+  },
+  "linkFAQ": {
+    "message": "ЧАВО"
+  },
+  "linkDonate": {
+    "message": "Пожертвовать"
+  },
+  "linkHelp": {
+    "message": "Помощь"
+  },
+  "legendSettings": {
+    "message": "Настройки"
+  },
+  "textSettings": {
+    "message": "Отключить отправку лайков/дизлайков"
+  },
+  "textSettingsHover": {
+    "message": "Отключает отправку ваших отметок нравится/не нравится"
+  },
+  "textUpdate": {
+    "message": "обновление до"
+  },
+  "version30installed": {
+    "message": "Версия 3.0.0.1 установлена"
+  },
+  "whatsnew": {
+    "message": "Что нового"
+  },
+  "shortsSupport": {
+    "message": "Поддержка YouTube Shorts"
+  },
+  "customColors": {
+    "message": "Выбор цветов панели дизлайков и кнопок"
+  },
+  "customNumberFormats": {
+    "message": "Выбор формата чисел"
+  },
+  "considerDonating": {
+    "message": "Единственный источник доходов позволяющий расширению продолжать работу - ваши пожертвования. Пожалуйста, поддержите нас и помогите нам развиваться."
+  }
 }

+ 3 - 1
Extensions/combined/changelog/3/changelog_3.0.html

@@ -31,7 +31,7 @@
   <h2>__MSG_whatsnew__:</h2>
 
 
-  <div>
+  <div style="margin-bottom: 5rem">
     <ul style="margin-bottom: 5rem">
       <li>__MSG_shortsSupport__</li>
       <li>__MSG_customColors__</li>
@@ -40,6 +40,8 @@
       <li>__MSG_customNumberFormats__</li>
       <img src="/changelog/images/number_format.jpg"/>
     </ul>
+
+    <p>__MSG_considerDonating__</p>
     <center>
       <button id="link_website" title="__MSG_linkWebsite__">
         __MSG_linkWebsite__

+ 1 - 3
Extensions/combined/manifest-chrome.json

@@ -12,9 +12,7 @@
     "128": "icons/icon128.png"
   },
   "host_permissions": ["*://*.youtube.com/*"],
-  "permissions": [
-    "storage"
-  ],
+  "permissions": ["storage"],
   "action": {
     "default_popup": "popup.html"
   },

+ 14 - 2
Extensions/combined/manifest-firefox.json

@@ -9,9 +9,14 @@
   },
   "icons": {
     "48": "icons/icon48.png",
-   "128": "icons/icon128.png"
+    "128": "icons/icon128.png"
   },
-  "permissions": ["activeTab", "*://*.youtube.com/*", "storage", "*://returnyoutubedislikeapi.com/*"],
+  "permissions": [
+    "activeTab",
+    "*://*.youtube.com/*",
+    "storage",
+    "*://returnyoutubedislikeapi.com/*"
+  ],
   "browser_action": {
     "default_popup": "popup.html"
   },
@@ -24,4 +29,11 @@
       "js": ["ryd.content-script.js"]
     }
   ]
+  //  ,
+  //  "browser_specific_settings": {
+  //    "gecko": {
+  //      "id": "addon@example.com",
+  //      "strict_min_version": "42.0"
+  //    }
+  //  }
 }

+ 79 - 74
Extensions/combined/ryd.background.js

@@ -73,24 +73,36 @@ api.runtime.onMessage.addListener((request, sender, sendResponse) => {
   }
 });
 
-api.storage.sync.get(['lastShowChangelogVersion'], (details) => {
-  if (extConfig.showUpdatePopup === true &&
-    details.lastShowChangelogVersion !== chrome.runtime.getManifest().version
-    ) {
-    // keep it inside get to avoid race condition
-    api.storage.sync.set({'lastShowChangelogVersion ': chrome.runtime.getManifest().version});
-    // wait until async get runs & don't steal tab focus
-    api.tabs.create({url: api.runtime.getURL("/changelog/3/changelog_3.0.html"), active: false});
-  }
+api.runtime.onInstalled.addListener((details) => {
+  if (
+    // No need to show changelog if its was a browser update (and not extension update)
+    details.reason === "browser_update" ||
+    // No need to show changelog if developer just reloaded the extension
+    details.reason === "update"
+  )
+    return;
+  api.tabs.create({
+    url: api.runtime.getURL("/changelog/3/changelog_3.0.html"),
+  });
 });
 
+// api.storage.sync.get(['lastShowChangelogVersion'], (details) => {
+//   if (extConfig.showUpdatePopup === true &&
+//     details.lastShowChangelogVersion !== chrome.runtime.getManifest().version
+//     ) {
+//     // keep it inside get to avoid race condition
+//     api.storage.sync.set({'lastShowChangelogVersion ': chrome.runtime.getManifest().version});
+//     // wait until async get runs & don't steal tab focus
+//     api.tabs.create({url: api.runtime.getURL("/changelog/3/changelog_3.0.html"), active: false});
+//   }
+// });
+
 async function sendVote(videoId, vote) {
   api.storage.sync.get(null, async (storageResult) => {
     if (!storageResult.userId || !storageResult.registrationConfirmed) {
       await register();
-      return;
     }
-    fetch(`${apiUrl}/interact/vote`, {
+    let voteResponse = await fetch(`${apiUrl}/interact/vote`, {
       method: "POST",
       headers: {
         "Content-Type": "application/json",
@@ -100,82 +112,72 @@ async function sendVote(videoId, vote) {
         videoId,
         value: vote,
       }),
-    })
-      .then(async (response) => {
-        if (response.status == 401) {
-          await register();
-          await sendVote(videoId, vote);
-          return;
-        }
-        return response.json();
-      })
-      .then((response) => {
-        solvePuzzle(response).then((solvedPuzzle) => {
-          fetch(`${apiUrl}/interact/confirmVote`, {
-            method: "POST",
-            headers: {
-              "Content-Type": "application/json",
-            },
-            body: JSON.stringify({
-              ...solvedPuzzle,
-              userId: storageResult.userId,
-              videoId,
-            }),
-          });
-        });
-      });
+    });
+
+    if (voteResponse.status == 401) {
+      await register();
+      await sendVote(videoId, vote);
+      return;
+    }
+    const voteResponseJson = await voteResponse.json();
+    const solvedPuzzle = await solvePuzzle(voteResponseJson);
+    if (!solvedPuzzle.solution) {
+      await sendVote(videoId, vote);
+      return;
+    }
+
+    await fetch(`${apiUrl}/interact/confirmVote`, {
+      method: "POST",
+      headers: {
+        "Content-Type": "application/json",
+      },
+      body: JSON.stringify({
+        ...solvedPuzzle,
+        userId: storageResult.userId,
+        videoId,
+      }),
+    });
   });
 }
 
-function register() {
-  let userId = generateUserID();
+async function register() {
+  const userId = generateUserID();
   api.storage.sync.set({ userId });
-  return fetch(`${apiUrl}/puzzle/registration?userId=${userId}`, {
-    method: "GET",
+  const registrationResponse = await fetch(
+    `${apiUrl}/puzzle/registration?userId=${userId}`,
+    {
+      method: "GET",
+      headers: {
+        Accept: "application/json",
+      },
+    }
+  ).then((response) => response.json());
+  const solvedPuzzle = await solvePuzzle(registrationResponse);
+  if (!solvedPuzzle.solution) {
+    await register();
+    return;
+  }
+  const result = await fetch(`${apiUrl}/puzzle/registration?userId=${userId}`, {
+    method: "POST",
     headers: {
-      Accept: "application/json",
+      "Content-Type": "application/json",
     },
-  })
-    .then((response) => response.json())
-    .then((response) => {
-      return solvePuzzle(response).then((solvedPuzzle) => {
-        return fetch(`${apiUrl}/puzzle/registration?userId=${userId}`, {
-          method: "POST",
-          headers: {
-            "Content-Type": "application/json",
-          },
-          body: JSON.stringify(solvedPuzzle),
-        }).then((response) =>
-          response.json().then((result) => {
-            if (result === true) {
-              return api.storage.sync.set({ registrationConfirmed: true });
-            }
-          })
-        );
-      });
-    })
-    .catch();
+    body: JSON.stringify(solvedPuzzle),
+  }).then((response) => response.json());
+  if (result === true) {
+    return api.storage.sync.set({ registrationConfirmed: true });
+  }
 }
 
-api.storage.sync.get(null, (res) => {
+api.storage.sync.get(null, async (res) => {
   if (!res || !res.userId || !res.registrationConfirmed) {
-    register();
+    await register();
   }
 });
 
 const sentIds = new Set();
 let toSend = [];
 
-function sendUserSubmittedStatisticsToApi(statistics) {
-  fetch(`${apiUrl}/votes/user-submitted`, {
-    method: "POST",
-    headers: {
-      "Content-Type": "application/json",
-    },
-    body: JSON.stringify(statistics),
-  });
-}
-
 function countLeadingZeroes(uInt8View, limit) {
   let zeroes = 0;
   let value = 0;
@@ -210,7 +212,7 @@ async function solvePuzzle(puzzle) {
   let buffer = new ArrayBuffer(20);
   let uInt8View = new Uint8Array(buffer);
   let uInt32View = new Uint32Array(buffer);
-  let maxCount = Math.pow(2, puzzle.difficulty) * 5;
+  let maxCount = Math.pow(2, puzzle.difficulty) * 3;
   for (let i = 4; i < 20; i++) {
     uInt8View[i] = challenge[i - 4];
   }
@@ -225,6 +227,7 @@ async function solvePuzzle(puzzle) {
       };
     }
   }
+  return {};
 }
 
 function generateUserID(length = 36) {
@@ -270,7 +273,9 @@ function storageChangeHandler(changes, area) {
     handleNumberDisplayFormatChangeEvent(changes.numberDisplayFormat.newValue);
   }
   if (changes.numberDisplayReformatLikes !== undefined) {
-    handleNumberDisplayReformatLikesChangeEvent(changes.numberDisplayReformatLikes.newValue);
+    handleNumberDisplayReformatLikesChangeEvent(
+      changes.numberDisplayReformatLikes.newValue
+    );
   }
 }
 

+ 0 - 3
Extensions/combined/ryd.content-script.js

@@ -34,7 +34,6 @@ import {
 } from "./src/utils";
 import { createRateBar } from "./src/bar";
 import {
-  sendVideoIds,
   sendVote,
   likeClicked,
   dislikeClicked,
@@ -67,5 +66,3 @@ document.addEventListener("yt-navigate-finish", function (event) {
   window.returnDislikeButtonlistenersSet = false;
   setEventListeners();
 });
-
-setTimeout(() => sendVideoIds(), 2500);

+ 0 - 27
Extensions/combined/src/events.js

@@ -21,32 +21,6 @@ function sendVote(vote) {
   }
 }
 
-function sendVideoIds() {
-  let links = Array.from(
-    document.getElementsByClassName(
-      "yt-simple-endpoint ytd-compact-video-renderer"
-    )
-  ).concat(
-    Array.from(
-      document.getElementsByClassName("yt-simple-endpoint ytd-thumbnail")
-    )
-  );
-  // Also try mobile
-  if (links.length < 1)
-    links = Array.from(
-      document.querySelectorAll(
-        ".large-media-item-metadata > a, a.large-media-item-thumbnail-container"
-      )
-    );
-  const ids = links
-    .filter((x) => x.href && x.href.indexOf("/watch?v=") > 0)
-    .map((x) => getVideoId(x.href));
-  getBrowser().runtime.sendMessage({
-    message: "send_links",
-    videoIds: ids,
-  });
-}
-
 function likeClicked() {
   if (checkForSignInButton() === false) {
     if (storedData.previousState === DISLIKED_STATE) {
@@ -166,7 +140,6 @@ function handleNumberDisplayReformatLikesChangeEvent(value) {
 
 export {
   sendVote,
-  sendVideoIds,
   likeClicked,
   dislikeClicked,
   addLikeDislikeEventListener,

+ 44 - 29
Extensions/combined/src/state.js

@@ -7,7 +7,6 @@ import {
   numberFormat,
   getColorFromTheme,
 } from "./utils";
-import { sendVideoIds } from "./events";
 import { localize } from "./utils";
 
 //TODO: Do not duplicate here and in ryd.background.js
@@ -42,33 +41,40 @@ function isShorts() {
   return location.pathname.startsWith("/shorts");
 }
 
-
 let mutationObserver = new Object();
 
 if (isShorts() && mutationObserver.exists !== true) {
-  cLog('initializing mutation observer')
+  cLog("initializing mutation observer");
   mutationObserver.options = {
     childList: false,
     attributes: true,
-    subtree: false
+    subtree: false,
   };
   mutationObserver.exists = true;
-  mutationObserver.observer = new MutationObserver( function(mutationList, observer) {
-    mutationList.forEach( (mutation) => {
-      if (mutation.type === 'attributes' && 
-        mutation.target.nodeName === 'TP-YT-PAPER-BUTTON' && 
-        mutation.target.id === 'button') {
+  mutationObserver.observer = new MutationObserver(function (
+    mutationList,
+    observer
+  ) {
+    mutationList.forEach((mutation) => {
+      if (
+        mutation.type === "attributes" &&
+        mutation.target.nodeName === "TP-YT-PAPER-BUTTON" &&
+        mutation.target.id === "button"
+      ) {
         // cLog('Short thumb button status changed');
-        if (mutation.target.getAttribute('aria-pressed') === 'true') {
+        if (mutation.target.getAttribute("aria-pressed") === "true") {
           mutation.target.style.color =
-            (mutation.target.parentElement.parentElement.id === 'like-button') ? 
-            getColorFromTheme(true) : getColorFromTheme(false);
+            mutation.target.parentElement.parentElement.id === "like-button"
+              ? getColorFromTheme(true)
+              : getColorFromTheme(false);
         } else {
-          mutation.target.style.color = 'unset';
+          mutation.target.style.color = "unset";
         }
         return;
       }
-      cLog('unexpected mutation observer event: ' + mutation.target + mutation.type);
+      cLog(
+        "unexpected mutation observer event: " + mutation.target + mutation.type
+      );
     });
   });
 }
@@ -80,7 +86,9 @@ function isLikesDisabled() {
       getButtons().children[0].querySelector(".button-renderer-text").innerText
     );
   }
-  return /^\D*$/.test(getButtons().children[0].querySelector("#text").innerText);
+  return /^\D*$/.test(
+    getButtons().children[0].querySelector("#text").innerText
+  );
 }
 
 function isVideoLiked() {
@@ -135,9 +143,8 @@ function setDislikes(dislikesCount) {
       ).innerText = localize("TextLikesDisabled");
       return;
     }
-    getButtons().children[1].querySelector("#text").innerText = localize(
-      "TextLikesDisabled"
-    );
+    getButtons().children[1].querySelector("#text").innerText =
+      localize("TextLikesDisabled");
   }
 }
 
@@ -167,17 +174,28 @@ function processResponse(response, storedData) {
   storedData.likes = getLikeCountFromButton() || parseInt(response.likes);
   createRateBar(storedData.likes, storedData.dislikes);
   if (extConfig.coloredThumbs === true) {
-    if (isShorts()) { // for shorts, leave deactived buttons in default color
-      let shortLikeButton = getLikeButton().querySelector('tp-yt-paper-button#button');
-      let shortDislikeButton = getDislikeButton().querySelector('tp-yt-paper-button#button');
-      if (shortLikeButton.getAttribute('aria-pressed') === 'true') {
+    if (isShorts()) {
+      // for shorts, leave deactived buttons in default color
+      let shortLikeButton = getLikeButton().querySelector(
+        "tp-yt-paper-button#button"
+      );
+      let shortDislikeButton = getDislikeButton().querySelector(
+        "tp-yt-paper-button#button"
+      );
+      if (shortLikeButton.getAttribute("aria-pressed") === "true") {
         shortLikeButton.style.color = getColorFromTheme(true);
       }
-      if (shortDislikeButton.getAttribute('aria-pressed') === 'true') {
+      if (shortDislikeButton.getAttribute("aria-pressed") === "true") {
         shortDislikeButton.style.color = getColorFromTheme(false);
       }
-      mutationObserver.observer.observe(shortLikeButton, mutationObserver.options);
-      mutationObserver.observer.observe(shortDislikeButton, mutationObserver.options);
+      mutationObserver.observer.observe(
+        shortLikeButton,
+        mutationObserver.options
+      );
+      mutationObserver.observer.observe(
+        shortDislikeButton,
+        mutationObserver.options
+      );
     } else {
       getLikeButton().style.color = getColorFromTheme(true);
       getDislikeButton().style.color = getColorFromTheme(false);
@@ -227,9 +245,6 @@ async function setState(storedData) {
 
 function setInitialState() {
   setState(storedData);
-  setTimeout(() => {
-    sendVideoIds();
-  }, 1500);
 }
 
 function initExtConfig() {
@@ -351,5 +366,5 @@ export {
   extConfig,
   initExtConfig,
   storedData,
-  isLikesDisabled
+  isLikesDisabled,
 };

+ 8 - 0
Extensions/combined/src/utils.js

@@ -36,6 +36,14 @@ function localize(localeString) {
 function getNumberFormatter(optionSelect) {
   let formatterNotation;
   let formatterCompactDisplay;
+  let userLocales;
+  try {
+    userLocales = new URL(
+      Array.from(document.querySelectorAll("head > link[rel='search']"))
+      ?.find((n) => n?.getAttribute("href")?.includes("?locale="))
+      ?.getAttribute("href")
+    )?.searchParams?.get("locale");
+  } catch {}
 
   switch (optionSelect) {
     case "compactLong":

+ 2 - 6
README.md

@@ -88,13 +88,9 @@ You can support this project by donating to us on the link below:
 ## Sponsors
 [Piepacker](https://piepacker.com)
 
-[nodetube](https://github.com/mayeaux/nodetube)
-
-trig404
-
-[Peter33](https://www.youtube.com/watch?v=G5kzUpWAusI)
-
 [Seed4.Me VPN](https://www.seed4.me/users/register?gift=ReturnYoutubeDislike)
 
 [PocketTube](https://yousub.info/?utm_source=returnyoutubedislike)
 
+[Become our sponsor](https://www.patreon.com/join/returnyoutubedislike/checkout?rid=8008601)
+

+ 4 - 7
Website/pages/index.vue

@@ -67,7 +67,7 @@
       </h3>
     </div>
 
-    <div id="cool-people" class="d-flex flex-column items-center py-8">
+    <div id="biggest-supporters" class="d-flex flex-column items-center py-8">
       <h3 class="mb-4">
         <v-icon class="mb-2">mdi-heart</v-icon>
         Sponsors
@@ -105,12 +105,6 @@ export default {
       discordLink: "https://discord.gg/mYnESY4Md5",
       sponsors: [
         { name: "Piepacker", link: "https://piepacker.com/" },
-        { name: "nodetube", link: "https://github.com/mayeaux/nodetube" },
-        { name: "trig404" },
-        {
-          name: "Peter33",
-          link: "https://www.youtube.com/watch?v=G5kzUpWAusI",
-        },
         {
           name: "Seed4.Me VPN",
           link: "https://www.seed4.me/users/register?gift=ReturnYoutubeDislike",
@@ -118,6 +112,9 @@ export default {
         {
           name: "PocketTube",
           link: "https://yousub.info/?utm_source=returnyoutubedislike"
+        }, {
+          name: "Become our sponsor",
+          link: "https://www.patreon.com/join/returnyoutubedislike/checkout?rid=8008601"
         }
       ],
     };

+ 1 - 1
Website/pages/links.vue

@@ -22,7 +22,7 @@
 
     <v-btn class="mainAltButton" :href="emailLink" target="_blank">
       <v-icon style="margin-right: 0.5em">mdi-email</v-icon>
-      Email
+      selivano.d@gmail.com
     </v-btn>
 
     <p id="credits" class="flex-row no-wrap">