Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Anarios/return-youtube-dislike.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/ISSUE_TEMPLATE/bug.yml6
-rw-r--r--CONTRIBUTING.md2
-rw-r--r--CONTRIBUTINGfr.md2
-rw-r--r--CONTRIBUTINGru.md2
-rw-r--r--CONTRIBUTINGtr.md2
-rw-r--r--CONTRIBUTINGuk.md67
-rw-r--r--Docs/FAQ.md4
-rw-r--r--Docs/FAQfr.md2
-rw-r--r--Docs/FAQru.md4
-rw-r--r--Docs/FAQtr.md2
-rw-r--r--Docs/FAQuk.md61
-rw-r--r--Docs/SECURITY-FAQ.md2
-rw-r--r--Docs/SECURITY-FAQfr.md2
-rw-r--r--Docs/SECURITY-FAQru.md2
-rw-r--r--Docs/SECURITY-FAQtr.md2
-rw-r--r--Docs/SECURITY-FAQuk.md31
-rw-r--r--Extensions/UserScript/Return Youtube Dislike.user.js31
-rw-r--r--Extensions/combined/_locales/sv_SE/messages.json134
-rw-r--r--Extensions/combined/_locales/uk/messages.json134
-rw-r--r--Extensions/combined/content-style.css20
-rw-r--r--Extensions/combined/manifest-chrome.json2
-rw-r--r--Extensions/combined/manifest-firefox.json2
-rw-r--r--Extensions/combined/readme.md2
-rw-r--r--Extensions/combined/src/bar.js22
-rw-r--r--Extensions/combined/src/buttons.js8
-rw-r--r--Extensions/combined/src/state.js30
-rw-r--r--Extensions/combined/src/utils.js3
-rw-r--r--README.md2
-rw-r--r--READMEes.md2
-rw-r--r--READMEfr.md2
-rw-r--r--READMEja.md2
-rw-r--r--READMEru.md2
-rw-r--r--READMEtr.md2
-rw-r--r--READMEuk.md94
-rw-r--r--Website/_locales/en.ts10
-rw-r--r--Website/_locales/sv_SE.ts119
-rw-r--r--Website/_locales/uk.ts119
-rw-r--r--Website/layouts/default.vue2
-rw-r--r--Website/nuxt.config.js3
-rw-r--r--Website/pages/links.vue4
-rw-r--r--extension-description-store-ukrainian.txt20
41 files changed, 902 insertions, 62 deletions
diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
index efacc6d..496ec3e 100644
--- a/.github/ISSUE_TEMPLATE/bug.yml
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -3,6 +3,12 @@ description: File a bug report!
# title: "(Bug): "
labels: ["bug"]
body:
+ - type: checkboxes
+ attributes:
+ label: Have you tried to find similar open issues?
+ options:
+ - label: "Yes, this issue is not a duplicate"
+ required: true
- type: input
attributes:
label: Browser
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 8e8da18..f7996eb 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,4 +1,4 @@
-Read this in other languages: [русский](CONTRIBUTINGru.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md)
+Read this in other languages: [русский](CONTRIBUTINGru.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md)
# Welcome To Return YouTube Dislikes contributing guide
diff --git a/CONTRIBUTINGfr.md b/CONTRIBUTINGfr.md
index c9b9e91..b8e9d2c 100644
--- a/CONTRIBUTINGfr.md
+++ b/CONTRIBUTINGfr.md
@@ -1,4 +1,4 @@
-Lisez ceci dans d'autres langues : [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), [Türkçe](CONTRIBUTINGtr.md)
+Lisez ceci dans d'autres langues : [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md)
# Bienvenue dans le guide de contribution à Return YouTube Dislikes
diff --git a/CONTRIBUTINGru.md b/CONTRIBUTINGru.md
index 0907d33..ec2195a 100644
--- a/CONTRIBUTINGru.md
+++ b/CONTRIBUTINGru.md
@@ -1,4 +1,4 @@
-Прочитать на других языках: [English](CONTRIBUTING.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md)
+Прочитать на других языках: [English](CONTRIBUTING.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md)
# Добро пожаловать в руководство по внесению вклада Return YouTube Dislikes
diff --git a/CONTRIBUTINGtr.md b/CONTRIBUTINGtr.md
index 4a33b15..f439221 100644
--- a/CONTRIBUTINGtr.md
+++ b/CONTRIBUTINGtr.md
@@ -1,4 +1,4 @@
-Bunu diğer dillerde okuyun: [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), [Français](CONTRIBUTINGfr.md)
+Bunu diğer dillerde okuyun: [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), [Français](CONTRIBUTINGfr.md), [українська](CONTRIBUTINGuk.md)
# "YouTube Dislike Sayısını Geri Getir"in katkı kılavuzuna Hoş Geldiniz
diff --git a/CONTRIBUTINGuk.md b/CONTRIBUTINGuk.md
new file mode 100644
index 0000000..05d2ab4
--- /dev/null
+++ b/CONTRIBUTINGuk.md
@@ -0,0 +1,67 @@
+Read this in other languages: [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md)
+
+# Вітаємо у посібнику внеску в Return YouTube Dislikes
+
+Дякуємо, що вкладаєте свій час у розвиток нашого проєкту! Усі ваші зміни буде відображено в наступній версії розширення (або ж [вебсайту](https://www.returnyoutubedislike.com/)).
+
+## Почнімо працювати
+
+Будь ласка, використовуйте Prettier із налаштуваннями за замовчуванням для форматування коду.
+
+#### Заздалегідь
+
+Вам потрібно встановити node і npm, щоб створити bundled версію джерела.
+
+Версії, що використовувались при налаштуванні:
+
+- node: 12.18.4
+- npm: 6.14.6
+
+Для створення `bundled-content-script.js`, який містить більшу частину бізнес-логіки цього розширення, спочатку потрібно встановити всі залежності.
+
+1. Перейдіть в корінь репозиторію та виконайте наступне:
+
+```
+npm install
+```
+
+2. Виконайте наступну команду, щоб створити `bundled-content-script.js`, який використовується в `manifest.json`
+
+```
+npm start // для створення файлу(ів) збірки та запуску спостерігача за файлами, який виконує hot-reload при збереженні
+
+// або ж
+
+npm run build // для створення файлу(ів) збірки один раз
+```
+
+Вітаємо, тепер ви готові до розробки!
+
+Якщо ви новачок у розробці розширення Chrome або вам потрібна додаткова допомога, перегляньте [це керівництво на YouTube](https://www.youtube.com/watch?v=mdOj6HYE3_0) (англ.)
+
+### Проблеми
+
+#### Відкриття нової проблеми
+
+Якщо у вас виникли проблеми з розширенням, здійсніть пошук і переконайтеся, що про цю проблему ще не повідомляли. Якщо ні, створіть Issue, використання форми проблеми наполегливо рекомендується, але не є обов’язковим.
+
+#### Вирішення проблеми
+
+Якщо ви знайшли проблему, і гадаєте, що можете її вирішити, не соромтеся. Створіть Pull Request на вилучення з виправленням і обов'язково вкажіть проблему, яку ви усуваєте.
+
+### Запит функції
+
+#### Відкриття запиту на нову функцію
+
+Якщо у вас є ідея щодо розширення, не соромтеся створіть Pull Request, але, будь ласка, здійсніть пошук і переконайтеся, що ця функція ще не запропонована. Використання форми функції наполегливо рекомендується, але не є обов’язковим.
+
+#### Реалізація запиту функції
+
+Якщо ви знайшли функцію, і гадаєте, що можете її реалізувати, не соромтеся. Створіть Pull Request із виправленням і обов’язково вкажіть функцію, яку ви впроваджуєте.
+
+### Які Pull Request ми приймаємо?
+
+- Виправлення проблем.
+- Впровадження нових функцій.
+- Виправлення помилок та спрощення тексту.
+- Поліпшення сайту. \ No newline at end of file
diff --git a/Docs/FAQ.md b/Docs/FAQ.md
index aaa2d52..73ca83b 100644
--- a/Docs/FAQ.md
+++ b/Docs/FAQ.md
@@ -1,4 +1,4 @@
-Read this in other languages: [русский](FAQru.md), [Français](FAQfr.md), [Türkçe](FAQtr.md)
+Read this in other languages: [русский](FAQru.md), [Français](FAQfr.md), [Türkçe](FAQtr.md), [українська](FAQuk.md)
# Frequently Asked Questions
@@ -36,7 +36,7 @@ The backend will switch to using a combination of archived dislike stats, estima
### **5. How is the dislike count calculated?**
-RYD uses the votes from it's users to extrapolate the dislike count.
+RYD uses the votes from its users to extrapolate the dislike count.
- If the video was uploaded after the API was shut down:
diff --git a/Docs/FAQfr.md b/Docs/FAQfr.md
index 1ad62d2..b53bb4f 100644
--- a/Docs/FAQfr.md
+++ b/Docs/FAQfr.md
@@ -1,4 +1,4 @@
-Lisez ceci dans d'autres langues : [English](FAQ.md), [русский](FAQru.md), [Türkçe](FAQtr.md)
+Lisez ceci dans d'autres langues : [English](FAQ.md), [русский](FAQru.md), [Türkçe](FAQtr.md), [українська](FAQuk.md)
# Foire Aux Questions
diff --git a/Docs/FAQru.md b/Docs/FAQru.md
index b6ac8f9..f78f430 100644
--- a/Docs/FAQru.md
+++ b/Docs/FAQru.md
@@ -1,4 +1,4 @@
-Read this in other languages: [English](FAQ.md), [Français](FAQfr.md), [Türkçe](FAQtr.md)
+Read this in other languages: [English](FAQ.md), [Français](FAQfr.md), [Türkçe](FAQtr.md), [українська](FAQuk.md)
# Часто задаваемые вопросы
@@ -21,4 +21,4 @@ Read this in other languages: [English](FAQ.md), [Français](FAQfr.md), [Türkç
Внутренняя часть нашего сервера переключится на использование комбинации архивных статистик отметок «Не нравится», оценок, экстраполированных из данных о пользователях расширения, и оценок, основанных на соотношении просмотров и отметок «Нравится» для видео, чьи отметки «Не нравится» не были заархивированы, и для устаревших архивов с отметками «Не нравится».
## Я беспокоюсь о безопасности / конфиденциальности
-Более подробную информацию смотрите на [этой странице](SECURITY-FAQ.md). \ No newline at end of file
+Более подробную информацию смотрите на [этой странице](SECURITY-FAQ.md).
diff --git a/Docs/FAQtr.md b/Docs/FAQtr.md
index cfab81f..bd4fb97 100644
--- a/Docs/FAQtr.md
+++ b/Docs/FAQtr.md
@@ -1,4 +1,4 @@
-Bunu diğer dillerde okuyun: [English](FAQ.md), [русский](FAQru.md), [Français](FAQfr.md)
+Bunu diğer dillerde okuyun: [English](FAQ.md), [русский](FAQru.md), [Français](FAQfr.md), [українська](FAQuk.md)
# Sıkça Sorulan Sorular
diff --git a/Docs/FAQuk.md b/Docs/FAQuk.md
new file mode 100644
index 0000000..0c4812a
--- /dev/null
+++ b/Docs/FAQuk.md
@@ -0,0 +1,61 @@
+Read this in other languages: [English](FAQ.md), [русский](FAQru.md), [Français](FAQfr.md), [Türkçe](FAQtr.md)
+
+# Часті питання
+
+## Перш ніж задавати питання на GitHub або у Discord, будь ласка, ознайомтеся з цим.
+
+<br>
+
+### **1. Звідки це розширення отримує дані?**
+
+Комбінація Google API та старих даних.
+
+Ми зберігаємо всі доступні дані в нашій базі, аби вони були доступні після того, як Google вимкне лічильник відміток «Не подобається» у своєму API.
+
+<br>
+
+### **2. Лічильник «Не подобається» не оновлюється**
+
+Наразі відео з відмітками «Не подобається» кешуються і оновлюються не надто часто. Не частіше, ніж раз в 2-3 дні.
+
+Так, це не ідеально, але маємо те, що маємо. Ми працюємо над тим, щоб збільшити частоту їх оновлення.
+
+<br>
+
+### **3. Як це працює?**
+
+Розширення отримує ID відео, яке ви переглядаєте, та дізнається кількість відміток «Не подобається» (та інші дані: перегляди, відмітки «Подобається» тощо) за допомогою нашого API, якщо відео було витягнуте нашим API вперше, воно використовує YouTube API для отримання даних, потім зберігає дані в базі даних для кешування (кешуються близько 2-3 днів) та архівування й повертає їх вам. Після цього розширення відображає відмітки «Не подобається» вам.
+
+<br>
+
+### **4. Що станеться після того, як YouTube API перестане повертати кількість відміток «Не подобається»?**
+
+Сервер перейде на використання комбінації заархівованих статистичних даних відміток «Не подобається» екстрапольованих із даними .
+
+<br>
+
+### **5. Як розраховується кількість відміток «Не подобається»?**
+
+RYD використовує відмітки своїх користувачів, щоб екстраполювати кількість відміток «Не подобається».
+
+- Якщо відео було завантажено після вимкнення API:
+
+ $$ \textup{К-ть відміток «Не подобається» у RYD} = \left( \frac{\textup{К-ть відміток «Подобається» серед користувачів RYD}}{\textup{К-ть відміток «Не подобається» серед користувачів RYD}} \right) \times \textup{Публічна к-ть відміток «Подобається»} $$
+
+- Якщо база даних RYD якимось чином мала фактичну кількість відміток «Подобається» та «Не подобається» (надану завантажувачем або з архіву), кількість відміток «Не подобається» буде розраховано на основі відміток користувачів і архівного значення. Архівне значення матиме менший вплив на остаточний підрахунок у міру актуальності.
+
+<br>
+
+---
+
+Це все, але у відео форматі
+
+[![IReturn YouTube Dislike Explained](https://yt-embed.herokuapp.com/embed?v=GSmmtv-0yYQ)](https://www.youtube.com/watch?v=GSmmtv-0yYQ)
+
+---
+
+<br>
+
+## Я турбуюся про безпеку/конфіденційність
+
+Детальніше про це дивіться [тут](SECURITY-FAQuk.md). \ No newline at end of file
diff --git a/Docs/SECURITY-FAQ.md b/Docs/SECURITY-FAQ.md
index b51bd78..a414b1f 100644
--- a/Docs/SECURITY-FAQ.md
+++ b/Docs/SECURITY-FAQ.md
@@ -1,4 +1,4 @@
-Read this in other languages: [русский](SECURITY-FAQru.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md)
+Read this in other languages: [русский](SECURITY-FAQru.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md)
# Security
diff --git a/Docs/SECURITY-FAQfr.md b/Docs/SECURITY-FAQfr.md
index c4b7ef3..f191b09 100644
--- a/Docs/SECURITY-FAQfr.md
+++ b/Docs/SECURITY-FAQfr.md
@@ -1,4 +1,4 @@
-Lisez ceci dans d'autres langues : [English](SECURITY-FAQ.md), [русский](SECURITY-FAQru.md), [Türkçe](SECURITY-FAQtr.md)
+Lisez ceci dans d'autres langues : [English](SECURITY-FAQ.md), [русский](SECURITY-FAQru.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md)
# Sécurité
diff --git a/Docs/SECURITY-FAQru.md b/Docs/SECURITY-FAQru.md
index be486e5..d746b3c 100644
--- a/Docs/SECURITY-FAQru.md
+++ b/Docs/SECURITY-FAQru.md
@@ -1,4 +1,4 @@
-Прочитать на других языках: [English](SECURITY-FAQ.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md)
+Прочитать на других языках: [English](SECURITY-FAQ.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md)
# Безопасность
diff --git a/Docs/SECURITY-FAQtr.md b/Docs/SECURITY-FAQtr.md
index 5ae14c7..642e253 100644
--- a/Docs/SECURITY-FAQtr.md
+++ b/Docs/SECURITY-FAQtr.md
@@ -1,4 +1,4 @@
-Read this in other languages: [English](SECURITY-FAQ.md), [русский](SECURITY-FAQru.md), [Français](SECURITY-FAQfr.md)
+Read this in other languages: [English](SECURITY-FAQ.md), [русский](SECURITY-FAQru.md), [Français](SECURITY-FAQfr.md), [українська](SECURITY-FAQuk.md)
# Güvenlik
diff --git a/Docs/SECURITY-FAQuk.md b/Docs/SECURITY-FAQuk.md
new file mode 100644
index 0000000..4d18acc
--- /dev/null
+++ b/Docs/SECURITY-FAQuk.md
@@ -0,0 +1,31 @@
+Read this in other languages: [English](SECURITY-FAQ.md), [русский](SECURITY-FAQru.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md)
+
+# Безпека
+
+### Ви відстежуєте мою історію переглядів?
+
+Ні. Код розширення знаходиться у відкритому доступі, і ви можете ознайомитись з ним самостійно. Єдина інформація, що передається - це ID відео, який необхідний для отримання даних про кількість відміток. Жодних додаткових заголовків не передається. На комунікаційному рівні серверу буде передано вашу публічну IP-адресу, а також час, коли було зроблено запит. Однак ніщо з цього ніяк не здатно вас ідентифіквати. Припускаючи середовище з нульовою довірою, найцінніше, що ми можемо отримати це динамічний IP. Який сьогодні ваш, а завтра – вашого сусіда. Якщо ви дійсно турбуєтеся про те, що ваш IP може бути відстежений, ви, ймовірно, вже використовуєте якийсь VPN.
+
+### Чи можете ви однозначно ідентифікувати мене, коли я залишаю відмітку «Не подобається»?
+
+Так. Коли ви залишаєте відео позначку «Не подобається», ми створюємо для вас випадковий унікальний ID, який не прив'язаний до вашого облікового запису Google. Це робиться для уникнення атаки ботів. Але немає жодного способу зв'язати цей випадковий ID до вас або вашого особистого облікового запису YouTube.
+
+### Якою саме інформацією ви володієте?
+
+Лише ID відео. Ні ваших коментарів, ні вашого імені користувача, ні того, з ким ви поділилися відео, ні будь-яких інших додаткових метаданих. Нічого. Лише ID відео.
+
+### Як зберігається моя IP-адреса?
+
+Внутрішня частина нашого сервера зберігає нехешовані IP-адреси лише в енергозалежній пам'яті (ОЗП). Ці адреси не зберігаються на жорсткому диску і тому ніде не записані. Ми хешуємо IP-адреси, і вони зберігаються замість інших. Це зроблено для запобігання вандалізму у базі даних.
+
+### Я чув дискусію щодо OAuth і доступу до мого облікового запису YouTube!
+
+Ця функція буде необов'язковою та дуже необхідною. Якщо ви творець YouTube і хочете поділитися з нами кількістю ваших відміток «Не подобається», ви зможете це зробити. За структурою [OAuth](https://uk.wikipedia.org/wiki/OAuth#:~:text=%D0%B1%D0%B5%D0%B7%20%D0%BD%D0%B5%D0%BE%D0%B1%D1%85%D1%96%D0%B4%D0%BD%D0%BE%D1%81%D1%82%D1%96%20%D0%B2%D0%B2%D0%BE%D0%B4%D1%83%20%D1%96%D0%BC%D0%B5%D0%BD%D1%96%20%D0%BA%D0%BE%D1%80%D0%B8%D1%81%D1%82%D1%83%D0%B2%D0%B0%D1%87%D0%B0%20%D1%82%D0%B0%20%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8E) надбезпечний. Ви зможете відкликати доступ до свого облікового запису в будь-яку мить, і зможете дати нам обмежені дозволи. Ми не будемо вимагати жодних дозволів, крім необжідних. Ми будемо вимагати лише дозволи перегляду статистики ваших відео.
+
+### Наскільки достовірна ця кількость відміток «Не подобається»?
+
+Ми вжили заходів щодо запобігання атакам ботів і збираємося продовжувати працювати над підвищенням ефективності цієї сисеми надалі: це допоможе нам зберегти підрахунок відміток «Не подобається» як хороше представлення фактичної кількості. Звичайно, він ніколи не буде точним на всі 100%, тож ви самі вирішуєте, довіряти йому чи ні.
+
+### Чому б вам не поділитися внутрішнім кодом вашого сервера?
+
+Ми поділимося ним у якийсь момент – але зараз немає жодних причин це робити. Це дасть хибне почуття безпеки - адже в системі з нульовою довірою ми можемо з таким самим успіхом поділитися однією версією, але розгорнути іншу. Є багато причин тримати код у таємниці, зокрема, як ми боремося зі спамом. Приховування та затьмарення коду обробки спаму є доволі стандартною практикою. \ No newline at end of file
diff --git a/Extensions/UserScript/Return Youtube Dislike.user.js b/Extensions/UserScript/Return Youtube Dislike.user.js
index b9ffa27..f3062fa 100644
--- a/Extensions/UserScript/Return Youtube Dislike.user.js
+++ b/Extensions/UserScript/Return Youtube Dislike.user.js
@@ -58,6 +58,9 @@ function isInViewport(element) {
const height = innerHeight || document.documentElement.clientHeight;
const width = innerWidth || document.documentElement.clientWidth;
return (
+ // When short (channel) is ignored, the element (like/dislike AND short itself) is
+ // hidden with a 0 DOMRect. In this case, consider it outside of Viewport
+ !(rect.top == 0 && rect.left == 0 && rect.bottom == 0 && rect.right == 0) &&
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= height &&
@@ -97,7 +100,8 @@ function getLikeButton() {
function getLikeTextContainer() {
return (
getLikeButton().querySelector("#text") ??
- getLikeButton().getElementsByTagName("yt-formatted-string")[0]
+ getLikeButton().getElementsByTagName("yt-formatted-string")[0] ??
+ getLikeButton().querySelector("span[role='text']")
);
}
@@ -219,20 +223,29 @@ function setDislikes(dislikesCount) {
mobileDislikes = dislikesCount;
return;
}
+ getDislikeTextContainer()?.removeAttribute('is-empty');
getDislikeTextContainer().innerText = dislikesCount;
}
function getLikeCountFromButton() {
- if (isShorts()) {
- //Youtube Shorts don't work with this query. It's not nessecary; we can skip it and still see the results.
- //It should be possible to fix this function, but it's not critical to showing the dislike count.
+ try {
+ if (isShorts()) {
+ //Youtube Shorts don't work with this query. It's not necessary; we can skip it and still see the results.
+ //It should be possible to fix this function, but it's not critical to showing the dislike count.
+ return false;
+ }
+ let likeButton = getLikeButton()
+ .querySelector("yt-formatted-string#text") ??
+ getLikeButton().querySelector("button");
+
+ let likesStr = likeButton.getAttribute("aria-label")
+ .replace(/\D/g, "");
+ return likesStr.length > 0 ? parseInt(likesStr) : false;
+ }
+ catch {
return false;
}
- let likesStr = getLikeButton()
- .querySelector("yt-formatted-string#text")
- .getAttribute("aria-label")
- .replace(/\D/g, "");
- return likesStr.length > 0 ? parseInt(likesStr) : false;
+
}
(typeof GM_addStyle != "undefined"
diff --git a/Extensions/combined/_locales/sv_SE/messages.json b/Extensions/combined/_locales/sv_SE/messages.json
new file mode 100644
index 0000000..7ed2ce8
--- /dev/null
+++ b/Extensions/combined/_locales/sv_SE/messages.json
@@ -0,0 +1,134 @@
+{
+ "extensionName": {
+ "message": "Return YouTube Dislike"
+ },
+ "extensionNameBeta": {
+ "message": "Return YouTube Dislike Beta"
+ },
+ "extensionDesc": {
+ "message": "Återställer förmågan att se ogilla"
+ },
+ "textDeveloper": {
+ "message": "av Dmitry Selivanov & Community"
+ },
+ "linkWebsite": {
+ "message": "Hemsida"
+ },
+ "linkFAQ": {
+ "message": "FAQ"
+ },
+ "linkDonate": {
+ "message": "Donera"
+ },
+ "linkHelp": {
+ "message": "Hjälp"
+ },
+ "linkChangelog": {
+ "message": "Ändringslogg"
+ },
+ "legendSettings": {
+ "message": "Inställningar"
+ },
+ "textSettings": {
+ "message": "Inaktivera gilla-/ogilla-inskickningar"
+ },
+ "textLikesDisabled": {
+ "message": "Inaktiverad av ägaren"
+ },
+ "textSettingsHover": {
+ "message": "Slutar räkna dina gilla och ogilla."
+ },
+ "textRoundingNumbers": {
+ "message": "Avrunda statistiken neråt för gilla/ogilla (standard YouTube-beteende)"
+ },
+ "textRoundingNumbersHover": {
+ "message": "Visa avrundad statistik."
+ },
+ "textConsistentFormat": {
+ "message": "Gör formatet på gilla och ogilla konsekvent"
+ },
+ "textConsistentFormatHover": {
+ "message": "Omformatera som siffror."
+ },
+ "textNumberFormat": {
+ "message": "Sifforformat:"
+ },
+ "textColorizeRatioBar": {
+ "message": "Färgsätt förhållandefältet"
+ },
+ "textColorizeRatioBarHover": {
+ "message": "Använd anpassade färger för förhållandefältet."
+ },
+ "textColorizeThumbs": {
+ "message": "Färglägg tummarna"
+ },
+ "textColorizeThumbsHover": {
+ "message": "Använd anpassade färger för tumikoner."
+ },
+ "textColorTheme": {
+ "message": "Färgtema:"
+ },
+ "textColorTheme1": {
+ "message": "Klassisk"
+ },
+ "textColorTheme2": {
+ "message": "Tillgänglig"
+ },
+ "textColorTheme3": {
+ "message": "Neon"
+ },
+ "textTempUnavailable": {
+ "message": "Tillfälligt otillgänglig"
+ },
+ "textUpdate": {
+ "message": "Uppdatera till"
+ },
+ "version30installed": {
+ "message": "Version 3.0.0.1 installerad"
+ },
+ "whatsnew": {
+ "message": "Vad är nytt"
+ },
+ "shortsSupport": {
+ "message": "YouTube Shorts Support"
+ },
+ "customColors": {
+ "message": "Anpassade färger för knappar och fältet ogilla"
+ },
+ "customNumberFormats": {
+ "message": "Anpassade sifforformat"
+ },
+ "considerDonating": {
+ "message": "Det enda som håller tillägget i gång är dina donationer, överväg att stöda projektet."
+ },
+ "roundNumbers": {
+ "message": "Visa avrundade siffror"
+ },
+ "roundNumbersHover": {
+ "message": "Avrunda siffrorna neråt (standard YouTube-beteende)."
+ },
+ "reformatLikes": {
+ "message": "Omformatera som siffror"
+ },
+ "reformatLikesHover": {
+ "message": "Gör formatet på gilla och ogilla konsekvent."
+ },
+ "numberFormat": {
+ "message": "Sifforformat:"
+ },
+ "colorizeRatio": {
+ "message": "Färgsätt förhållandefältet"
+ },
+ "colorizeRatioHover": {
+ "message": "Använd anpassade färger för förhållandefältet."
+ },
+ "colorizeThumbs": {
+ "message": "Färglägg tummarna"
+ },
+ "colorizeThumbsHover": {
+ "message": "Använd anpassade färger för tumikoner."
+ },
+ "colorTheme": {
+ "message": "Färgtema:"
+ }
+}
diff --git a/Extensions/combined/_locales/uk/messages.json b/Extensions/combined/_locales/uk/messages.json
new file mode 100644
index 0000000..4919c6e
--- /dev/null
+++ b/Extensions/combined/_locales/uk/messages.json
@@ -0,0 +1,134 @@
+{
+ "extensionName": {
+ "message": "Return YouTube Dislike"
+ },
+ "extensionNameBeta": {
+ "message": "Return YouTube Dislike Beta"
+ },
+ "extensionDesc": {
+ "message": "Повертає здатність бачити відмітки «Не подобається»"
+ },
+ "textDeveloper": {
+ "message": "від Дмитра Селіванова та спільноти"
+ },
+ "linkWebsite": {
+ "message": "Вебсайт"
+ },
+ "linkFAQ": {
+ "message": "ЧаПи"
+ },
+ "linkDonate": {
+ "message": "Підтримати"
+ },
+ "linkHelp": {
+ "message": "Допомога"
+ },
+ "linkChangelog": {
+ "message": "Журнал змін"
+ },
+ "legendSettings": {
+ "message": "Налаштування"
+ },
+ "textSettings": {
+ "message": "Вимкнути надсилання відміток"
+ },
+ "textLikesDisabled": {
+ "message": "Вимкнуто власником"
+ },
+ "textSettingsHover": {
+ "message": "Вимикає надсилання відміток «Подобається»/«Не подобається»."
+ },
+ "textRoundingNumbers": {
+ "message": "Округлює значення відміток (стандартний параметр YouTube)"
+ },
+ "textRoundingNumbersHover": {
+ "message": "Показувати заокруглені значення."
+ },
+ "textConsistentFormat": {
+ "message": "Зробить формат «Подобається» та «Не подобається» однаковим"
+ },
+ "textConsistentFormatHover": {
+ "message": "Форматувати як числа."
+ },
+ "textNumberFormat": {
+ "message": "Формат значень:"
+ },
+ "textColorizeRatioBar": {
+ "message": "Обрати кольори стрічки співвідношення"
+ },
+ "textColorizeRatioBarHover": {
+ "message": "Змінює кольори стрічки співвідношення на обрані вами."
+ },
+ "textColorizeThumbs": {
+ "message": "Обрати кольори відміток"
+ },
+ "textColorizeThumbsHover": {
+ "message": "Змінює кольори піктограм відміток на обрані вами."
+ },
+ "textColorTheme": {
+ "message": "Кольорова схема:"
+ },
+ "textColorTheme1": {
+ "message": "Класика"
+ },
+ "textColorTheme2": {
+ "message": "Доступність"
+ },
+ "textColorTheme3": {
+ "message": "Неон"
+ },
+ "textTempUnavailable": {
+ "message": "Тимчасово недоступно"
+ },
+ "textUpdate": {
+ "message": "Оновлення до"
+ },
+ "version30installed": {
+ "message": "Версію 3.0.0.1 встановлено"
+ },
+ "whatsnew": {
+ "message": "Що нового"
+ },
+ "shortsSupport": {
+ "message": "Підтримка YouTube Shorts"
+ },
+ "customColors": {
+ "message": "Користувальницькі кольори стрічки співвідношення та кнопок"
+ },
+ "customNumberFormats": {
+ "message": "Користувацькі формати значень"
+ },
+ "considerDonating": {
+ "message": "Розширення досі існує лише за допомогою ваших пожертв, будь ласка, підтримайте проєкт."
+ },
+ "roundNumbers": {
+ "message": "Показувати заокруглені значення"
+ },
+ "roundNumbersHover": {
+ "message": "Округлює значення відміток (стандартний параметр YouTube)"
+ },
+ "reformatLikes": {
+ "message": "Форматувати як числа"
+ },
+ "reformatLikesHover": {
+ "message": "Зробить формат «Подобається» та «Не подобається» однаковим"
+ },
+ "numberFormat": {
+ "message": "Формат значень:"
+ },
+ "colorizeRatio": {
+ "message": "Обрати кольори стрічки співвідношення"
+ },
+ "colorizeRatioHover": {
+ "message": "Змінює кольори стрічки співвідношення на обрані вами.."
+ },
+ "colorizeThumbs": {
+ "message": "Обрати кольори відміток"
+ },
+ "colorizeThumbsHover": {
+ "message": "Змінює кольори піктограм відміток на обрані вами."
+ },
+ "colorTheme": {
+ "message": "Кольорова схема:"
+ }
+}
diff --git a/Extensions/combined/content-style.css b/Extensions/combined/content-style.css
index d8da7db..4e53f87 100644
--- a/Extensions/combined/content-style.css
+++ b/Extensions/combined/content-style.css
@@ -30,12 +30,21 @@
}
.ryd-tooltip {
- position: relative;
display: block;
height: 2px;
+}
+
+.ryd-tooltip-old-design {
+ position: relative;
top: 9px;
}
+.ryd-tooltip-new-design {
+ position: absolute;
+ bottom: -10px;
+ left: -4px;
+}
+
.ryd-tooltip-bar-container {
width: 100%;
height: 2px;
@@ -44,3 +53,12 @@
padding-bottom: 12px;
top: -6px;
}
+
+/* required to make the ratio bar visible in the new design */
+ytd-menu-renderer.ytd-watch-metadata {
+ overflow-y: visible !important;
+}
+
+#top-level-buttons-computed {
+ position: relative !important;
+}
diff --git a/Extensions/combined/manifest-chrome.json b/Extensions/combined/manifest-chrome.json
index 95fe7e9..dddd2f6 100644
--- a/Extensions/combined/manifest-chrome.json
+++ b/Extensions/combined/manifest-chrome.json
@@ -2,7 +2,7 @@
"name": "__MSG_extensionName__",
"description": "__MSG_extensionDesc__",
"default_locale": "en",
- "version": "3.0.0.4",
+ "version": "3.0.0.6",
"manifest_version": 3,
"background": {
"service_worker": "ryd.background.js"
diff --git a/Extensions/combined/manifest-firefox.json b/Extensions/combined/manifest-firefox.json
index efb42a4..3ce248f 100644
--- a/Extensions/combined/manifest-firefox.json
+++ b/Extensions/combined/manifest-firefox.json
@@ -2,7 +2,7 @@
"name": "__MSG_extensionName__",
"description": "__MSG_extensionDesc__",
"default_locale": "en",
- "version": "3.0.0.5",
+ "version": "3.0.0.7",
"manifest_version": 2,
"background": {
"scripts": ["ryd.background.js"]
diff --git a/Extensions/combined/readme.md b/Extensions/combined/readme.md
index 0818eb3..faee230 100644
--- a/Extensions/combined/readme.md
+++ b/Extensions/combined/readme.md
@@ -6,7 +6,7 @@
<ol>
<li>Go to the root directory of the project</li>
- <li>Run <code>npm i</code> to install all project dependancies (if not done so already)</li>
+ <li>Run <code>npm i</code> to install all project dependencies (if not done so already)</li>
<li>run <code>npm run dev</code> to compile the extension to the <code>~/Extensions/combined/dist/</code> folder.</li>
</ol>
diff --git a/Extensions/combined/src/bar.js b/Extensions/combined/src/bar.js
index 930f0f5..fea42a9 100644
--- a/Extensions/combined/src/bar.js
+++ b/Extensions/combined/src/bar.js
@@ -1,9 +1,10 @@
-import { getButtons, getDislikeButton, getLikeButton } from './buttons';
+import { getButtons, getDislikeButton, getLikeButton } from "./buttons";
import {
extConfig,
isMobile,
isLikesDisabled,
isNewDesign,
+ isRoundedDesign,
isShorts,
} from "./state";
import { cLog, getColorFromTheme } from "./utils";
@@ -15,7 +16,7 @@ function createRateBar(likes, dislikes) {
const widthPx =
getLikeButton().clientWidth +
getDislikeButton().clientWidth +
- 8;
+ (isRoundedDesign() ? 0 : 8);
const widthPercent =
likes + dislikes > 0 ? (likes / (likes + dislikes)) * 100 : 50;
@@ -57,14 +58,12 @@ function createRateBar(likes, dislikes) {
(
document.getElementById(
- isNewDesign() ? "actions-inner" : "menu-container"
+ isNewDesign() ? "top-level-buttons-computed" : "menu-container"
) || document.querySelector("ytm-slim-video-action-bar-renderer")
).insertAdjacentHTML(
"beforeend",
`
- <div class="ryd-tooltip" style="width: ${widthPx}px${
- isNewDesign() ? "; margin-bottom: -2px" : ""
- }">
+ <div class="ryd-tooltip ryd-tooltip-${isNewDesign() ? "new" : "old"}-design" style="width: ${widthPx}px">
<div class="ryd-tooltip-bar-container">
<div
id="ryd-bar-container"
@@ -80,15 +79,22 @@ function createRateBar(likes, dislikes) {
<!--css-build:shady-->${tooltipInnerHTML}
</tp-yt-paper-tooltip>
</div>
- `
+ `
);
- // Add border between info and comments
if (isNewDesign()) {
+ // Add border between info and comments
let descriptionAndActionsElement = document.getElementById("top-row");
descriptionAndActionsElement.style.borderBottom =
"1px solid var(--yt-spec-10-percent-layer)";
descriptionAndActionsElement.style.paddingBottom = "10px";
+
+ // Fix like/dislike ratio bar offset in new UI
+ document.getElementById("actions-inner").style.width = "revert";
+ if (isRoundedDesign()) {
+ document.getElementById("actions").style.flexDirection =
+ "row-reverse";
+ }
}
} else {
document.getElementById("ryd-bar-container").style.width =
diff --git a/Extensions/combined/src/buttons.js b/Extensions/combined/src/buttons.js
index 6b344d9..b78670c 100644
--- a/Extensions/combined/src/buttons.js
+++ b/Extensions/combined/src/buttons.js
@@ -24,7 +24,7 @@ function getButtons() {
//--- If Menu Element Is Displayed: ---//
if (document.getElementById("menu-container")?.offsetParent === null) {
return document.querySelector("ytd-menu-renderer.ytd-watch-metadata > div");
- //--- If Menu Element Isnt Displayed: ---//
+ //--- If Menu Element Isn't Displayed: ---//
} else {
return document
.getElementById("menu-container")
@@ -42,7 +42,8 @@ function getLikeButton() {
function getLikeTextContainer() {
return (
getLikeButton().querySelector("#text") ??
- getLikeButton().getElementsByTagName("yt-formatted-string")[0]
+ getLikeButton().getElementsByTagName("yt-formatted-string")[0] ??
+ getLikeButton().querySelector("span[role='text']")
);
}
@@ -56,7 +57,8 @@ function getDislikeButton() {
function getDislikeTextContainer() {
let result =
getDislikeButton().querySelector("#text") ??
- getDislikeButton().getElementsByTagName("yt-formatted-string")[0];
+ getDislikeButton().getElementsByTagName("yt-formatted-string")[0] ??
+ getDislikeButton().querySelector("span[role='text']");
if (result == null) {
let textSpan = document.createElement("span");
textSpan.id = "text";
diff --git a/Extensions/combined/src/state.js b/Extensions/combined/src/state.js
index cda281b..58c3e29 100644
--- a/Extensions/combined/src/state.js
+++ b/Extensions/combined/src/state.js
@@ -51,6 +51,10 @@ function isNewDesign() {
return document.getElementById("comment-teaser") !== null;
}
+function isRoundedDesign() {
+ return document.getElementById("segmented-like-button") !== null;
+}
+
let mutationObserver = new Object();
if (isShorts() && mutationObserver.exists !== true) {
@@ -96,9 +100,7 @@ function isLikesDisabled() {
getButtons().children[0].querySelector(".button-renderer-text").innerText
);
}
- return /^\D*$/.test(
- getButtons().children[0].innerText
- );
+ return /^\D*$/.test(getButtons().children[0].innerText);
}
function isVideoLiked() {
@@ -133,10 +135,14 @@ function getState(storedData) {
//--- Sets The Likes And Dislikes Values ---//
function setLikes(likesCount) {
+ cLog(`SET likes ${likesCount}`)
getLikeTextContainer().innerText = likesCount;
}
function setDislikes(dislikesCount) {
+ cLog(`SET dislikes ${dislikesCount}`)
+ getDislikeTextContainer()?.removeAttribute("is-empty");
+ getDislikeTextContainer()?.removeAttribute('is-empty');
if (!isLikesDisabled()) {
if (isMobile()) {
getButtons().children[1].querySelector(
@@ -160,20 +166,21 @@ function setDislikes(dislikesCount) {
function getLikeCountFromButton() {
try {
if (isShorts()) {
- //Youtube Shorts don't work with this query. It's not nessecary; we can skip it and still see the results.
+ //Youtube Shorts don't work with this query. It's not necessary; we can skip it and still see the results.
//It should be possible to fix this function, but it's not critical to showing the dislike count.
return false;
}
- let likesStr = getLikeButton()
- .querySelector("yt-formatted-string#text")
- .getAttribute("aria-label")
+
+ let likeButton = getLikeButton()
+ .querySelector("yt-formatted-string#text") ??
+ getLikeButton().querySelector("button");
+
+ let likesStr = likeButton.getAttribute("aria-label")
.replace(/\D/g, "");
return likesStr.length > 0 ? parseInt(likesStr) : false;
- }
- catch {
+ } catch {
return false;
}
-
}
function processResponse(response, storedData) {
@@ -190,7 +197,7 @@ function processResponse(response, storedData) {
createRateBar(storedData.likes, storedData.dislikes);
if (extConfig.coloredThumbs === true) {
if (isShorts()) {
- // for shorts, leave deactived buttons in default color
+ // for shorts, leave deactivated buttons in default color
let shortLikeButton = getLikeButton().querySelector(
"tp-yt-paper-button#button"
);
@@ -361,6 +368,7 @@ export {
isVideoDisliked,
isVideoLiked,
isNewDesign,
+ isRoundedDesign,
getState,
setState,
setInitialState,
diff --git a/Extensions/combined/src/utils.js b/Extensions/combined/src/utils.js
index b92bc0c..e789815 100644
--- a/Extensions/combined/src/utils.js
+++ b/Extensions/combined/src/utils.js
@@ -87,6 +87,9 @@ function isInViewport(element) {
const height = innerHeight || document.documentElement.clientHeight;
const width = innerWidth || document.documentElement.clientWidth;
return (
+ // When short (channel) is ignored, the element (like/dislike AND short itself) is
+ // hidden with a 0 DOMRect. In this case, consider it outside of Viewport
+ !(rect.top == 0 && rect.left == 0 && rect.bottom == 0 && rect.right == 0) &&
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= height &&
diff --git a/README.md b/README.md
index b31aa56..ff3287b 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
[![Discord](https://img.shields.io/discord/909435648170160229?label=Discord&style=flat&logo=discord)](https://discord.gg/UMxyMmCgfF)
[![License](https://img.shields.io/badge/License-GPLv3-blue.svg?style=flat)](https://github.com/Anarios/return-youtube-dislike/blob/main/LICENSE)
-Read this in other languages: [Español](READMEes.md), [русский](READMEru.md), [Français](READMEfr.md), [日本語](READMEja.md), [Türkçe](READMEtr.md)
+Read this in other languages: [Español](READMEes.md), [русский](READMEru.md), [Français](READMEfr.md), [日本語](READMEja.md), [Türkçe](READMEtr.md), [українська](READMEuk.md)
# Return YouTube Dislike
diff --git a/READMEes.md b/READMEes.md
index 57950c0..055ab06 100644
--- a/READMEes.md
+++ b/READMEes.md
@@ -7,7 +7,7 @@
[![Discord](https://img.shields.io/discord/909435648170160229?label=Discord&style=flat&logo=discord)](https://discord.gg/UMxyMmCgfF)
[![License](https://img.shields.io/badge/License-GPLv3-blue.svg?style=flat)](https://github.com/Anarios/return-youtube-dislike/blob/main/LICENSE)
-Leer en otros idiomas: [English](README.md), [русский](READMEru.md), [Français](READMEfr.md), [日本語](READMEja.md), [Türkçe](READMEtr.md)
+Leer en otros idiomas: [English](README.md), [русский](READMEru.md), [Français](READMEfr.md), [日本語](READMEja.md), [Türkçe](READMEtr.md), [українська](READMEuk.md)
# Return YouTube Dislike
diff --git a/READMEfr.md b/READMEfr.md
index 63a7ee8..14729bf 100644
--- a/READMEfr.md
+++ b/READMEfr.md
@@ -7,7 +7,7 @@
[![Discord](https://img.shields.io/discord/909435648170160229?label=Discord&style=flat&logo=discord)](https://discord.gg/UMxyMmCgfF)
[![License](https://img.shields.io/badge/License-GPLv3-blue.svg?style=flat)](LICENSE)
-Lisez ceci dans d'autres langues : [English](README.md), [Español](READMEes.md), [русский](READMEru.md), [日本語](READMEja.md), [Türkçe](READMEtr.md)
+Lisez ceci dans d'autres langues : [English](README.md), [Español](READMEes.md), [русский](READMEru.md), [日本語](READMEja.md), [Türkçe](READMEtr.md), [українська](READMEuk.md)
# Return YouTube Dislike
diff --git a/READMEja.md b/READMEja.md
index 7b29861..a454960 100644
--- a/READMEja.md
+++ b/READMEja.md
@@ -7,7 +7,7 @@
[![Discord](https://img.shields.io/discord/909435648170160229?label=Discord&style=flat&logo=discord)](https://discord.gg/UMxyMmCgfF)
[![License](https://img.shields.io/badge/License-GPLv3-blue.svg?style=flat)](https://github.com/Anarios/return-youtube-dislike/blob/main/LICENSE)
-別の言語: [English](README.md), [Español](READMEes.md), [русский](READMEru.md), [Français](READMEfr.md), [Türkçe](READMEtr.md)
+別の言語: [English](README.md), [Español](READMEes.md), [русский](READMEru.md), [Français](READMEfr.md), [Türkçe](READMEtr.md), [українська](READMEuk.md)
# Return YouTube Dislike
diff --git a/READMEru.md b/READMEru.md
index 1609f37..dd0b0a5 100644
--- a/READMEru.md
+++ b/READMEru.md
@@ -7,7 +7,7 @@
[![Discord](https://img.shields.io/discord/909435648170160229?label=Discord&style=flat&logo=discord)](https://discord.gg/UMxyMmCgfF)
[![License](https://img.shields.io/badge/License-GPLv3-blue.svg?style=flat)](https://github.com/Anarios/return-youtube-dislike/blob/main/LICENSE)
-Прочитать на других языках: [English](README.md), [Español](READMEes.md), [Français](READMEfr.md), [日本語](READMEja.md), [Türkçe](READMEtr.md)
+Прочитать на других языках: [English](README.md), [Español](READMEes.md), [Français](READMEfr.md), [日本語](READMEja.md), [Türkçe](READMEtr.md), [українська](READMEuk.md)
# Return YouTube Dislike
diff --git a/READMEtr.md b/READMEtr.md
index a119123..1db1be8 100644
--- a/READMEtr.md
+++ b/READMEtr.md
@@ -7,7 +7,7 @@
[![Discord](https://img.shields.io/discord/909435648170160229?label=Discord&style=flat&logo=discord)](https://discord.gg/UMxyMmCgfF)
[![Lisans](https://img.shields.io/badge/License-GPLv3-blue.svg?style=flat)](https://github.com/Anarios/return-youtube-dislike/blob/main/LICENSE)
-Bunu diğer dillerde okuyun: [English](README.md), [Español](READMEes.md), [Français](READMEfr.md), [русский](READMEru.md), [日本語](READMEja.md)
+Bunu diğer dillerde okuyun: [English](README.md), [Español](READMEes.md), [Français](READMEfr.md), [русский](READMEru.md), [日本語](READMEja.md), [українська](READMEuk.md)
# YouTube Dislike Sayısını Geri Getir
diff --git a/READMEuk.md b/READMEuk.md
new file mode 100644
index 0000000..d296b9c
--- /dev/null
+++ b/READMEuk.md
@@ -0,0 +1,94 @@
+[![Chrome Web Store](https://img.shields.io/chrome-web-store/stars/gebbhagfogifgggkldgodflihgfeippi?label=Chrome%20Rating&style=flat&logo=google)](https://chrome.google.com/webstore/detail/youtube-dislike-button/gebbhagfogifgggkldgodflihgfeippi/)
+[![Chrome Web Store Users](https://img.shields.io/chrome-web-store/users/gebbhagfogifgggkldgodflihgfeippi?label=Chrome%20Users&style=flat&logo=google)](https://chrome.google.com/webstore/detail/youtube-dislike-button/gebbhagfogifgggkldgodflihgfeippi/)
+[![Mozilla rating](https://img.shields.io/amo/stars/return-youtube-dislikes?label=Firefox%20Rating&style=flat&logo=firefox)](https://addons.mozilla.org/en-US/firefox/addon/return-youtube-dislikes/)
+[![Mozilla downloads](https://img.shields.io/amo/users/return-youtube-dislikes?label=Firefox%20Users&style=flat&logo=firefox)](https://addons.mozilla.org/en-US/firefox/addon/return-youtube-dislikes/)
+[![Commit rate](https://img.shields.io/github/commit-activity/m/Anarios/return-youtube-dislike?label=Commits&style=flat)](https://github.com/Anarios/return-youtube-dislike/commits/main)
+[![Issues](https://img.shields.io/github/issues/Anarios/return-youtube-dislike?style=flat&label=Issues)](https://github.com/Anarios/return-youtube-dislike/issues)
+[![Discord](https://img.shields.io/discord/909435648170160229?label=Discord&style=flat&logo=discord)](https://discord.gg/UMxyMmCgfF)
+[![License](https://img.shields.io/badge/License-GPLv3-blue.svg?style=flat)](https://github.com/Anarios/return-youtube-dislike/blob/main/LICENSE)
+
+Read this in other languages: [English](README.md), [Español](READMEes.md), [русский](READMEru.md), [Français](READMEfr.md), [日本語](READMEja.md), [Türkçe](READMEtr.md)
+
+# Return YouTube Dislike
+
+<p align="center">
+ <b>Return YouTube Dislike - це розширення з відкритим вихідним кодом, яке повертає лічильник відміток «Не подобається» на YouTube.</b><br>
+ Доступно для Chrome та Firefox як веброзширення.<br>
+ Також доступний для інших браузерів як JS UserScript.<br><br>
+ <img width="400px" src="https://user-images.githubusercontent.com/18729296/141743755-2be73297-250e-4cd1-ac93-8978c5a39d10.png"/>
+</p>
+
+## Історія
+
+10 листопада 2021 року Google [оголосили](https://blog.youtube/news-and-events/update-to-youtube/), що лічильник відміток «Не подобається» на YouTube буде видалено.
+
+Крім того, поле позначок `dislike` у YouTube API було [видалено](https://support.google.com/youtube/thread/134791097/update-to-youtube-dislike-counts) 13 грудня 2021 року, прибравши єдину можливість оцінити якість вмісту перед переглядом.
+
+## Як це працює
+
+Після видаленням статистики відміток з API YouTube наш сервер перейшов на використання комбінації заархівованих статистичних даних відміток «Не подобається» екстрапольованих із даними користувачів розширення.
+
+[ЧаПи](https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/FAQuk.md)
+
+## Чому це важливо
+
+Ви можете дізнатися більше на нашому вебсайті: [returnyoutubedislike.com](https://www.returnyoutubedislike.com/)
+
+## Документація API
+
+Використання цього відкритого API сторонніми особами дозволено з наступними обмеженнями:
+
+- **Атрибуція**: Цей проєкт має бути чітко описано, використовуючи посилання на [returnyoutubedislike.com](https://returnyoutubedislike.com/).
+- **Обмеження**: Існують обмеження на швидкісті для кожного клієнта - 100 за хвилину і 10 000 за день. Це видасть код помилки 429, який вказує на те, що вашому додатку слід завершити роботу.
+
+API доступний за наступною URL-адресою:
+https://returnyoutubedislikeapi.com
+
+Перелік доступних «ендпоінтів» можна переглянути тут:
+https://returnyoutubedislikeapi.com/swagger/index.html
+
+### Отримати оцінки
+
+Приклад отримання оцінок відео на YouTube за ID:
+`/votes?videoId=kxOuG8jMIgI`
+
+```json
+{
+ "id": "kxOuG8jMIgI",
+ "dateCreated": "2021-12-20T12:25:54.418014Z",
+ "likes": 27326,
+ "dislikes": 498153,
+ "rating": 1.212014408444885,
+ "viewCount": 3149885,
+ "deleted": false
+}
+```
+
+Недійсний YouTube ID видасть код помилки 404 "Not Found".
+YouTube ID у невірному форматі видасть код помилки 400 "Bad Request".
+
+<!---
+## Документація API
+
+Ви можете переглянути всю документацію на нашому сайті.
+[https://returnyoutubedislike.com/documentation/](https://returnyoutubedislike.com/documentation/) -->
+
+## Взяти участь у розробці
+
+Будь ласка, ознайомтеся із [посібником внеску в проєкт](https://github.com/Anarios/return-youtube-dislike/blob/main/CONTRIBUTINGuk.md).
+
+## Підтримайте цей проєкт!
+
+Ви можете підтримати цей проєкт пожертвою за посиланням нижче:
+
+[Підтримати](https://returnyoutubedislike.com/donate)
+
+## Спонсори
+
+[Piepacker](https://piepacker.com)
+
+[Seed4.Me VPN](https://www.seed4.me/users/register?gift=ReturnYoutubeDislike)
+
+[PocketTube](https://yousub.info/?utm_source=returnyoutubedislike)
+
+[Станьте нашим спонсором](https://www.patreon.com/join/returnyoutubedislike/checkout?rid=8008601) \ No newline at end of file
diff --git a/Website/_locales/en.ts b/Website/_locales/en.ts
index 8cc26f6..81254f7 100644
--- a/Website/_locales/en.ts
+++ b/Website/_locales/en.ts
@@ -67,13 +67,13 @@ export default {
bullet41: "in our",
bullet4a: "Tell us your Operating System, Browser Name and Browser Version",
bullet4b:
- "Take screenshot of page with problem (i.e. youtube video page) with console open (press ",
+ "Take a screenshot of the page with the problem (i.e. Youtube video page) with the console open (press ",
bullet4b1: ") - example screenshot below.",
bullet4c:
- "Take screenshot of extensions page of your browser with extension installed.",
+ "Take a screenshot of the extensions page of your browser with the extension installed.",
bullet4c1: "To see extensions put this into address bar: ",
firefox: "for Firefox",
- chrome: "for Chrome, Edge, Brave, Opera, Vivaldi",
+ chrome: "for Chrome, Edge, Brave, Opera, and Vivaldi",
},
faq: {
name: "FAQ",
@@ -87,13 +87,13 @@ export default {
"Right now video dislikes are cached and they aren't updated very frequently. It varies depending on a video's popularity but can take anywhere between a few hours and a few days to update.",
bullet3: "How does this work?",
bullet3text:
- "The extension collects the video ID of the video you are watching, and fetches the dislike (and other fields like views, likes etc) using our API. The extension then displays the dislike count and ratio on the page. If you like or dislike a video, that is recorded and sent to the database so an accurate dislike count can be extrapolated.",
+ "The extension collects the video ID of the video you are watching, and fetches the number of dislikes (and other fields like views, likes etc) using our API. The extension then displays the dislike count and ratio on the page. If you like or dislike a video, that is recorded and sent to the database so an accurate dislike count can be extrapolated.",
bullet4: "Can I share my dislike count with you?",
bullet4text:
"Coming soon. We are looking into using Oauth or a different read only API with a limited scope so creators can share their dislike counts verifiability.",
bullet5: "What data do you collect and how is it treated?",
bullet5text:
- 'The extension only collects data that is strictly necessary for it to function properly, such as IP address or ID of the video you\'re watching. None of your data will ever be sold to 3rd parties. If you would like to know more about how we handle security and privacy check out our <a href="https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQ.md">security FAQ</a>.',
+ 'The extension only collects data that is strictly necessary for it to function properly, such as the IP address or ID of the video you\'re watching. None of your data will ever be sold to 3rd parties. If you would like to know more about how we handle security and privacy check out our <a href="https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQ.md">security FAQ</a>.',
bullet6: "How does the API/Backend work?",
bullet6text:
"The backend is using archived data from when the youtube api was still returning the dislike count, extension users like/dislike count and extrapolation. In the near future we will be allowing content creators to submit their dislike count easily and safely and we will be adding ArchiveTeam's archived data (4.56 billion videos) into our current database. You can also view a video on the topic.",
diff --git a/Website/_locales/sv_SE.ts b/Website/_locales/sv_SE.ts
new file mode 100644
index 0000000..ab7d967
--- /dev/null
+++ b/Website/_locales/sv_SE.ts
@@ -0,0 +1,119 @@
+import { sv_SE } from "vuetify/src/locale";
+
+export default {
+ ...sv_SE,
+ home: {
+ name: "Hem",
+ title: "Return YouTube Dislike",
+ subtitle: "Webbläsartillägg och ett API som visar antalet ogilla på Youtube",
+ ukraine: "Stöd Ukraina",
+ sponsors: "Sponsorer",
+ },
+ install: {
+ name: "Installera",
+ title: "Välj din webbläsare",
+ subtitle: "Tillgängligt för Firefox och alla Chromium-webbläsare",
+ title2: "Andra webbläsare",
+ subtitle2: "Om din webbläsare ännu inte stöds, prova detta UserScript",
+ title3: "Tredjepartsimplementeringar",
+ subtitle3: "Inget ansvar från vår sida, använd på egen risk",
+ },
+ api: {
+ name: "API",
+ title: "Välkommen till de officiella RYD-dokumenten!",
+ subtitle: "För att komma igång, välj ett avsnitt från menyn.",
+ rights: {
+ title: "Användningsrättigheter",
+ subtitle:
+ "Tredjepartsanvändning av detta öppna API är tillåtet med följande begränsningar:",
+ bullet1: "Tillskrivning: ",
+ bullet1text:
+ "Detta projekt bör tydligt tillskrivas med antingen en länk till denna repo eller en länk till returnyoutubedislike.com",
+ bullet2: "Satsbegränsning: ",
+ bullet2text:
+ "Det finns satsbegränsningar per användare med 100 per minut och 10000 per dag. Detta kommer att returnera en statushod 429 som indikerar att din applikation ska hålla sig borta",
+ },
+ url: {
+ title: "Webbadressinformation",
+ subtitle: "API:et är tillgängligt via följande baswebbadress: ",
+ },
+ endpoints: {
+ title: "Tillgängliga slutpunkter",
+ subtitle: "Lista över tillgängliga slutpunkter finns här: ",
+ },
+ fetching: {
+ title: "Grundläggande handledning för hämtning",
+ subtitle: "Exempel för att hämta röster för ett bestämt YouTubevideo-ID: ",
+ title2: "Example Request: ",
+ url: "Request URL: ",
+ method: "Request Method: ",
+ headers: "Headers: ",
+ response: "Response: ",
+ error1: 'Ett ogiltigt YouTube-ID returnerar statuskoden 404 "Not Found"',
+ error2:
+ 'Ett felaktigt formaterat YouTube-ID returnerar 400 "Bad Request"',
+ },
+ },
+ help: {
+ name: "Hjälp",
+ title: "Felsökning",
+ bullet1: "Se till att du har den senaste versionen av tillägget installerat, ",
+ bullet11: "just nu",
+ bullet2:
+ "Försök att avinstallera tillägget och installera det igen, starta sedan om webbläsaren (alla aktiva fönster, inte bara en flik)",
+ bullet3: "Se till att den här länken öppnas: ",
+ bullet31: "du bör se vanlig text: ",
+ bullet4: "Om inget av ovanstående hjälper - rapportera ditt problem i",
+ bullet41: "i vår",
+ bullet4a: "Tala om för oss ditt operativsystem, webbläsarnamn och webbläsarversion",
+ bullet4b:
+ "Ta en skärmdump av sidan du har problem med (t.ex en youtube-videosida) med konsolfönstret öppet (tryck ",
+ bullet4b1: ") - exempel på skärmdump nedan.",
+ bullet4c:
+ "Ta en skärmdump av tilläggssidan i din webbläsare med tillägg installerat.",
+ bullet4c1: "För att se tilläggen skriv in detta i adressfältet: ",
+ firefox: "för Firefox",
+ chrome: "för Chrome, Edge, Brave, Opera och Vivaldi",
+ },
+ faq: {
+ name: "FAQ",
+ title: "Vanliga frågor",
+ subtitle: "Har du fortfarande frågor? Gå gärna med i vår Discord!",
+ bullet1: "Var får tillägget sina data?",
+ bullet1text:
+ "En kombination av arkiverad data från innan det officiella YouTube ogilla-API:et stängdes av och och extrapolerat tilläggsanvändarbeteende.",
+ bullet2: "Varför uppdateras inte antalet ogilla?",
+ bullet2text:
+ "Just nu cachelagras ogilla för videoklipp och de uppdateras inte särskilt ofta. Det varierar beroende på en videos popularitet, men det kan ta allt från några timmar till några dagar att uppdatera.",
+ bullet3: "Hur fungerar detta?",
+ bullet3text:
+ "Tillägget samlar in video-ID:t för videon du tittar på och hämtar ogilla (and other fields like views, likes etc) med hjälp av vårt API. Tillägget visar sedan antalet ogilla och förhållandet på sidan. Om du gillar eller ogillar en video, spelas det in och skickas till databasen så att ett korrekt antal ogilla kan extrapoleras.",
+ bullet4: "Kan jag dela mina antalet ogilla med dig?",
+ bullet4text:
+ "Kommer snart. Vi tittar på att använda Oauth eller ett annat skrivskyddat API med ett begränsat omfång så att kreatörer kan dela med sig av verifierbarheten av sina antal ogilla.",
+ bullet5: "Vilken data samlar du in och hur behandlas den?",
+ bullet5text:
+ 'Tillägget samlar bara in data som är absolut nödvändig för att den ska fungera korrekt, som IP-adressen eller ID:t på videon du tittar på. Inga uppgifter kommer någonsin att säljas till tredjepart. Om du vill veta mer om hur vi hanterar säkerhet och integritet läs då vår <a href="https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQ.md">vanliga frågor om säkerhet</a>.',
+ bullet6: "Hur fungerar API/Backend?",
+ bullet6text:
+ "Backend använder arkiverad data från när YouTubes API fortfarande returnerade antalet ogilla. Inom en snar framtid kommer vi att tillåta innehållsskapare att enkelt och säkert skicka in sina ogilla och vi kommer att lägga till ArchiveTeams arkiverade data (4,56 miljarder videor) i vår nuvarande databas. Du kan också se en video om ämnet.",
+ bullet7: "Varför visar antalet ogilla "OGILLA ÄR INAKTIVERAT"?",
+ bullet7text:
+ "I bland kan en nyligen uppladdad video visa 'OGILLA ÄR INAKTIVERAT' även om ägaren inte har inaktiverat den. Detta beror på hur informationen om ogilla är inaktiverat hämtas ut. Det bör försvinna inom några timmar eller genom att gilla eller ogilla videon och uppdatera sidan (förhoppningsvis).",
+ },
+ donate: {
+ name: "Donera",
+ subtitle:
+ "Du kan stöda våra ansträngningar att hålla internet fritt med en donation!",
+ },
+ links: {
+ name: "Länkar",
+ title: "Projektlänkar",
+ subtitle: "Länkar till projektet och dess utvecklare",
+ contact: "Kontakta mig",
+ translators: "Översättare",
+ coolProjects: "Häftiga projekt",
+ sponsorBlockDescription: "Hoppar över annonser integrerade i videon",
+ filmotDescription: "Sök efter YouTube-videor i undertexterna",
+ },
+};
diff --git a/Website/_locales/uk.ts b/Website/_locales/uk.ts
new file mode 100644
index 0000000..17d06ab
--- /dev/null
+++ b/Website/_locales/uk.ts
@@ -0,0 +1,119 @@
+import { uk } from "vuetify/src/locale";
+// By dsty#1614
+export default {
+ ...uk,
+ home: {
+ name: "Головна",
+ title: "Return YouTube Dislike",
+ subtitle: "Браузерне розширення та API, що дозволяє вам бачити відмітки «Не подобається» на YouTube",
+ ukraine: "Підтримати Україну",
+ sponsors: "Спонсори",
+ },
+ install: {
+ name: "Завантажити",
+ title: "Оберіть вашу платформу",
+ subtitle: "Доступно на Firefox та усіх Chromium браузерах",
+ title2: "Інші платформи",
+ subtitle2: "Якщо ваш браузер не підтримується, спробуйте цей UserScript",
+ title3: "Стороннє ПЗ",
+ subtitle3: "Ми не маємо відношення до цього, використовуйте на свій страх і ризик",
+ },
+ api: {
+ name: "API",
+ title: "Вітаємо у офіційній документації RYD!",
+ subtitle: "Щоб почати, виберіть розділ у меню.",
+ rights: {
+ title: "Права використання",
+ subtitle:
+ "Використання цього відкритого API сторонніми особами дозволено з наступними обмеженнями:",
+ bullet1: "Атрибуція: ",
+ bullet1text:
+ "Цей проєкт має бути чітко описано, використовуючи посилання, або ж на цей репозиторій, або ж на returnyoutubedislike.com",
+ bullet2: "Обмеження: ",
+ bullet2text:
+ "Існують обмеження на швидкісті для кожного клієнта - 100 за хвилину і 10 000 за день. Це видасть код помилки 429, який вказує на те, що вашому додатку слід завершити роботу",
+ },
+ url: {
+ title: "Інформація про посилання",
+ subtitle: "API доступний за наступним посиланням: ",
+ },
+ endpoints: {
+ title: "Достпупні «ендпоінти»",
+ subtitle: "Перелік доступних «ендпоінтів» можна переглянути тут: ",
+ },
+ fetching: {
+ title: "Базовий посібник по отриманню",
+ subtitle: "Приклад отримання оцінок відео на YouTube за ID ",
+ title2: "Приклад запиту: ",
+ url: "Посилання запиту: ",
+ method: "Метод запиту: ",
+ headers: "Заголовок: ",
+ response: "Відповідь: ",
+ error1: 'Недійсний YouTube ID видасть код помилки 404 "Not Found"',
+ error2:
+ 'YouTube ID у невірному форматі видасть код помилки 400 "Bad Request"',
+ },
+ },
+ help: {
+ name: "Допомога",
+ title: "Усунення несправностей",
+ bullet1: "Переконайтеся, що у вас встановлена остання версія розширення, наразі це - ",
+ bullet11: "",
+ bullet2:
+ "Спробуйте видалити розширення і встановити його знову, а потім перезавантажте браузер (усі активні вікна, а не лише одну вкладку).",
+ bullet3: "Переконайтеся, що наступне посилання відкривається: ",
+ bullet31: "і ви бачите там цей текст: ",
+ bullet4: "Якщо нічого з перерахованого вище не допомогло - повідомте про проблему в каналі",
+ bullet41: "у нашому",
+ bullet4a: "Повідомте нам вашу операційну систему, назву та версію браузера",
+ bullet4b:
+ "Зробіть знімок екрана сторінки з проблемою (тобто сторінки відео на YouTube) із відкритою консоллю (натисніть ",
+ bullet4b1: ") - приклад знімка екрана нижче.",
+ bullet4c:
+ "Зробіть знімок екрана сторінки з встановленими розширеннями вашого браузера.",
+ bullet4c1: "Щоб побачити розширення, напишіть це в адресний рядок: ",
+ firefox: "для Firefox",
+ chrome: "для Chrome, Edge, Brave, Opera, Vivaldi",
+ },
+ faq: {
+ name: "ЧаПи",
+ title: "Часті питання",
+ subtitle: "Залишилися питання? Не соромтеся приєднуватися до нашого Discord!",
+ bullet1: "Звідки розширення отримує дані?",
+ bullet1text:
+ "Комбінація архівних даних, отриманих до закриття офіційного API відміток «Не подобається» на YouTube та екстрапольованої поведінки користувачів розширення.",
+ bullet2: "Чому кількість відміток «Не подобається» не оновлюється?",
+ bullet2text:
+ "Наразі відмітки «Не подобається» кешуються й не оновлюються надто часто. Це залежить від популярності відео, але для оновлення може знадобитися від кількох годин до кількох днів.",
+ bullet3: "Як це працює?",
+ bullet3text:
+ "Розширення отримує ID відео, яке ви переглядаєте, та дізнається кількість відміток «Не подобається» (та інші дані: перегляди, відмітки «Подобається» тощо) за допомогою нашого API. Потім розширення відображає кількість відміток «Не подобається» та їх коефіцієнт на сторінці. Якщо ви ставите відмітки «Подобається» чи «Не подобається», це записується та надсилається до бази даних, щоб можна було екстраполювати точну їх кількість нелайків.",
+ bullet4: "Чи можу я поділитися з вами своїми відмітками «Не подобається»?",
+ bullet4text:
+ "Незабаром. Ми розглядаємо можливість використання Oauth або іншого API, доступного тільки для читання, з обмеженою областю дій, щоб творці могли ділитися своїми відмітками «Не подобається»",
+ bullet5: "Які дані ви збираєте та як вони обробляються?",
+ bullet5text:
+ 'Розширення збирає лише ті дані, які необхідні для правильної його роботи, такі як IP-адреси або ID відео, яке ви дивитеся. Ваші дані ніколи не будуть продані третім особам. Якщо ви хочете дізнатися більше про те, як ми забезпечуємо безпеку та конфіденційність, ознайомтесь з нашими <a href="https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQ.md">ЧаПи по безпеці</a>.',
+ bullet6: "Як працює API/серверна сторона?",
+ bullet6text:
+ "Серверна частина використовує архівні дані з тих пір, доки YouTube API все ще видавав кількість відміток «Не подобається», а також відмітки «Подобається»/«Не подобається» користувачів розширення та екстраполяцію. В найближчому майбутньому ми дозволимо творцям контенту легко та безпечно надсилати свої відмітки «Не подобається», а також ми додамо архівні дані ArchiveTeam (4,56 мільярди відео) до нашої поточної бази даних. Ви можете переглянути відео на цю тему.",
+ bullet7: "Чому лічильник відміток «Не подобається» пише 'DISLIKES DISABLED'?",
+ bullet7text:
+ "Іноді на нещодавно завантаженому відео може з'являтися повідомлення 'DISLIKES DISABLED', навіть попри те, що автор не вимикав відмітки «Не подобається». Це пов’язано з тим, як ми визначаємо, чи вимкнені оцінки «Не подобається». Це повідомлення має зникнути через кілька годин або після отримання відмітки «Подобається»/«Не подобається» і оновлення сторінки (сподіваюся).",
+ },
+ donate: {
+ name: "Підтримати",
+ subtitle:
+ "Ви можете підтримати пожертвою наші зусилля зробити Інтернет вільнішим!",
+ },
+ links: {
+ name: "Посилання",
+ title: "Посилання проєкту",
+ subtitle: "Посилання на проєкт і його розробників",
+ contact: "Зв'язок зі мною",
+ translators: "Перекладачі",
+ coolProjects: "Круті проєкти",
+ sponsorBlockDescription: "пропускає вбудовану у відео рекламу",
+ filmotDescription: "пошук відео на YouTube по субтитрах",
+ },
+}; \ No newline at end of file
diff --git a/Website/layouts/default.vue b/Website/layouts/default.vue
index 4d5e195..221ce0f 100644
--- a/Website/layouts/default.vue
+++ b/Website/layouts/default.vue
@@ -107,7 +107,7 @@ export default {
{ name: "日本語", locale: "ja" },
{ name: "Français", locale: "fr" },
// { name: "Deutsch", locale: "de" },
- // ...
+ { name: "Українська", locale: "uk" },
],
alert: {
show: false,
diff --git a/Website/nuxt.config.js b/Website/nuxt.config.js
index bf5bbbc..cd7d1d4 100644
--- a/Website/nuxt.config.js
+++ b/Website/nuxt.config.js
@@ -5,6 +5,7 @@ import ru from "./_locales/ru";
import cs from "./_locales/cs";
import ja from "./_locales/ja";
import fr from "./_locales/fr";
+import de from "./_locales/uk";
// import de from "./_locales/de";
// ...
export default {
@@ -50,7 +51,7 @@ export default {
// Vuetify module configuration: https://go.nuxtjs.dev/config-vuetify
vuetify: {
lang: {
- locales: { en, es, tr, ru, cs, ja, fr /* de, ...*/ },
+ locales: { en, es, tr, ru, cs, ja, fr, uk /* de, ...*/ },
current: "en",
},
theme: {
diff --git a/Website/pages/links.vue b/Website/pages/links.vue
index cd6c446..d438594 100644
--- a/Website/pages/links.vue
+++ b/Website/pages/links.vue
@@ -113,6 +113,10 @@ export default {
tag: "NiniKo",
lang: "Français",
},
+ {
+ tag: "dsty#1614",
+ lang: "Українська",
+ },
],
coolProjects: [
{
diff --git a/extension-description-store-ukrainian.txt b/extension-description-store-ukrainian.txt
new file mode 100644
index 0000000..e595652
--- /dev/null
+++ b/extension-description-store-ukrainian.txt
@@ -0,0 +1,20 @@
+Return YouTube Dislike відновлює можливість бачити кількість відміток «Не подобається» на YouTube.
+
+Якщо не працює: відкрийте вкладку розширень (chrome://extensions/), вимкніть це розширення та увімкніть його знову. Це має вирішити більшість проблем, оскільки в Chromium є помилка, яка в деяких випадках перешкоджає роботі розширення. Сподіваюся, команда Chromium незабаром виправить це.
+
+Починаючи з 13 грудня 2021 року YouTube видалив можливість бачити відмітки «Не подобається» зі свого API.
+Це розширення має намір повернути владу користувачам, використовуючи поєднання архівних даних про кількість відмітко «Подобається» та «Не подобається», а також відмітки «Подобається»/«Не подобається» користувачів розширення, аби показати найточніші рейтинги.
+
+На разі більше ніж 200 мільйонів даних про відмітки «Подобається»/«Не подобається» збережено до 13 грудня 2021 року
+
+Активно росте та оновюється новими відео, що завантажені після 13 грудня 2021 року
+
+Що більше користувачів використовує розширення, то точніше воно буде
+
+Не надто популярні відео, завантажені після 13 грудня 2021 року, можуть містити менш точні дані, ніж популярні відео.
+
+Це розширення наразі знаходиться в активній стадії розробки, тому, якщо у вас виникнуть будь-які проблеми, не соромтесь повідомляти про них на нашій сторінці GitHub або на нашому сервері в Discord.
+
+Більше можливостей з'явиться найближчим часом!
+
+https://github.com/Anarios/return-youtube-dislike \ No newline at end of file