diff --git a/.babelrc b/.babelrc index 1320b9a..896ad42 100644 --- a/.babelrc +++ b/.babelrc @@ -1,3 +1,4 @@ { - "presets": ["@babel/preset-env"] + "presets": ["@babel/preset-env"], + "plugins": ["rewire"] } diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 496ec3e..c940165 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -5,7 +5,7 @@ labels: ["bug"] body: - type: checkboxes attributes: - label: Have you tried to find similar open issues? + label: Have you tried to find similar issues (open or recently closed)? options: - label: "Yes, this issue is not a duplicate" required: true diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..60783b1 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,14 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "daily" + - package-ecosystem: "npm" + directory: "/Website" + schedule: + interval: "daily" diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000..1ec69ed --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,54 @@ +name: Test Build Extension + +on: + push: + branches: + - main + paths: + - Extensions/combined/** + pull_request: + branches: + - main + paths: + - Extensions/combined/** + +jobs: + build: + runs-on: ubuntu-24.04 + + defaults: + run: + working-directory: ./Extensions/combined + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.x' + + - name: Install dependencies + run: npm ci + + - name: Build extension + run: npm run build + + - name: Upload Chrome artifact + uses: actions/upload-artifact@v4 + with: + name: ryd-chrome + path: ./Extensions/combined/dist/chrome + + - name: Upload Firefox artifact + uses: actions/upload-artifact@v4 + with: + name: ryd-firefox + path: ./Extensions/combined/dist/firefox + + - name: Upload Safari artifact + uses: actions/upload-artifact@v4 + with: + name: ryd-safari + path: ./Extensions/combined/dist/safari diff --git a/.github/workflows/commentCommands.yml b/.github/workflows/commentCommands.yml deleted file mode 100644 index 1d9b47c..0000000 --- a/.github/workflows/commentCommands.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: commentCommands - -on: - issue_comment: - types: created - -jobs: - assign-commenter: - runs-on: ubuntu-latest - if: | - contains(github.event.comment.body, '/assignme') || - contains(github.event.comment.body, '/assign me') - steps: - - name: Assigning to commenter - run: | - curl \ - -X POST \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ - https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/assignees \ - -d '{"assignees":["${{ github.event.comment.user.login }}"]}' - request-issue-framing-improvement: - runs-on: ubuntu-latest - if: | - contains(github.event.comment.body,'/improve') && ( - github.event.comment.author_association == 'OWNER' || - github.event.comment.author_association == 'COLLABORATOR' || - github.event.comment.author_association == 'CONTRIBUTOR' ) - steps: - - name: request-issue-framing-improvement - run: | - curl \ - -X POST \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ - https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/comments \ - -d '{"body":"This issue is put on hold due to low quality. No reviews or fixes will be performed at this time. Eventually, it will be closed. While we appreciate your effort writing, we are not able to further investigate it. Please improve it by writing a better title or providing more details, and you may re-open it."}' - add-label-duplicate: - runs-on: ubuntu-latest - if: | - contains(github.event.comment.body, '/duplicate') && ( - github.event.comment.author_association == 'OWNER' || - github.event.comment.author_association == 'COLLABORATOR' || - github.event.comment.author_association != 'CONTRIBUTOR' ) - steps: - - name: add-label-duplicate - run: | - curl \ - -X POST \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ - https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/labels \ - -d '{"labels":["duplicate"]}' diff --git a/.github/workflows/commentcommands.yml b/.github/workflows/commentcommands.yml new file mode 100644 index 0000000..8ac13d2 --- /dev/null +++ b/.github/workflows/commentcommands.yml @@ -0,0 +1,57 @@ +name: Comment Commands + +on: + issue_comment: + types: [created] + +jobs: + assign-commenter: + runs-on: ubuntu-24.04 + if: | + contains(github.event.comment.body, '/assignme') || + contains(github.event.comment.body, '/assign me') + steps: + - name: Assigning commenter + run: | + curl \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/assignees \ + -d '{"assignees":["${{ github.event.comment.user.login }}"]}' + + request-issue-framing-improvement: + runs-on: ubuntu-24.04 + if: | + contains(github.event.comment.body, '/improve') && ( + github.event.comment.author_association == 'OWNER' || + github.event.comment.author_association == 'COLLABORATOR' || + github.event.comment.author_association == 'CONTRIBUTOR' + ) + steps: + - name: Request issue framing improvement + run: | + curl \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/comments \ + -d '{"body":"This issue is put on hold due to low quality. No reviews or fixes will be performed at this time. Eventually, it will be closed. While we appreciate your effort writing, we are not able to further investigate it. Please improve it by writing a better title or providing more details, and you may re-open it."}' + + add-duplicate-label: + runs-on: ubuntu-24.04 + if: | + contains(github.event.comment.body, '/duplicate') && ( + github.event.comment.author_association == 'OWNER' || + github.event.comment.author_association == 'COLLABORATOR' || + github.event.comment.author_association != 'CONTRIBUTOR' + ) + steps: + - name: Add duplicate label + run: | + curl \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ + https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/labels \ + -d '{"labels":["duplicate"]}' diff --git a/.github/workflows/weblint.yml b/.github/workflows/weblint.yml index 3ca18a3..70e4521 100644 --- a/.github/workflows/weblint.yml +++ b/.github/workflows/weblint.yml @@ -4,22 +4,28 @@ name: Website Lint on: push: - branches: [main] + branches: + - main paths: - Website/** - pull_request: - branches: [main] + branches: + - main paths: - Website/** jobs: weblint: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@main - - run: npm install + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install dependencies + run: npm install working-directory: Website - - run: npm run lint + + - name: Run lint + run: npm run lint working-directory: Website diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1e2f3f5..7f7afba 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,5 +1,4 @@ -Read this in other languages: [русский](CONTRIBUTINGru.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md), [Tiếng Việt](CONTRIBUTINGvi.md) - +Read this in other languages: [русский](CONTRIBUTINGru.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md), [Deutsch](CONTRIBUTINGde.md), [Español](CONTRIBUTINGes.md), [Bahasa Indonesia](CONTRIBUTINGid.md), [中文](CONTRIBUTINGcn.md), [български](CONTRIBUTINGbg.md), [Tiếng Việt](CONTRIBUTINGvi.md) # Welcome To Return YouTube Dislikes contributing guide diff --git a/CONTRIBUTINGar.md b/CONTRIBUTINGar.md new file mode 100644 index 0000000..8d739c1 --- /dev/null +++ b/CONTRIBUTINGar.md @@ -0,0 +1,67 @@ +اقرأ هذا بلغات أخرى: [русский](CONTRIBUTINGru.md)، [Nederlands](CONTRIBUTINGnl.md)، [Français](CONTRIBUTINGfr.md)، [Türkçe](CONTRIBUTINGtr.md)، [українська](CONTRIBUTINGuk.md)، [Polski](CONTRIBUTINGpl.md)، [Deutsch](CONTRIBUTINGde.md) + +# مرحبًا بكم في دليل المساهمة في Return YouTube Dislikes + +شكرًا لك على استثمار وقتك في المساهمة في مشروعنا! سيتم عكس جميع تغييراتك في الإصدار التالي من الامتداد (أو [الموقع](https://www.returnyoutubedislike.com/)). + +## البدء + +يرجى استخدام Prettier بالإعدادات الافتراضية للتنسيق. + +#### المتطلبات الأساسية + +تحتاج إلى تثبيت node و npm لإنشاء النسخة المجمعة من المصدر. + +الإصدارات المستخدمة عند الإعداد: + +- node: 12.18.4 +- npm: 6.14.6 + +لإنشاء `bundled-content-script.js` الذي يحتوي على معظم منطق العمل لهذا الامتداد، يجب عليك تثبيت جميع التبعيات أولاً. + +1. انتقل إلى جذر المستودع وقم بتشغيل: + +``` +npm install +``` + +2. قم بتشغيل الأمر التالي لإنشاء `bundled-content-script.js` الذي يستخدم في `manifest.json` + +``` +npm start // لإنشاء ملف(ات) البناء وبدء مراقب الملفات الذي يعيد التحميل تلقائيًا عند الحفظ + +// أو + +npm run build // لإنشاء ملف(ات) البناء مرة واحدة +``` + +تهانينا، أنت الآن جاهز للتطوير! + +إذا كنت جديدًا في تطوير ملحقات Chrome، أو تحتاج إلى مساعدة إضافية، يرجى مشاهدة [هذا الفيديو التعليمي على YouTube](https://www.youtube.com/watch?v=mdOj6HYE3_0) + +### المشاكل + +#### فتح مشكلة جديدة + +إذا كانت لديك أي مشاكل مع الامتداد، يرجى البحث للتأكد من أن المشكلة لم يتم الإبلاغ عنها بالفعل. إذا لم تكن كذلك، افتح مشكلة، يوصى بشدة باستخدام نموذج المشكلة ولكنه ليس إلزاميًا. + +#### حل مشكلة + +إذا وجدت مشكلة تشعر أنك قد تكون قادرًا على حلها، لا تخجل. افتح PR مع الإصلاح وتأكد من ذكر المشكلة التي تقوم بإصلاحها. + +### طلب ميزة + +#### فتح طلب ميزة جديدة + +إذا كانت لديك فكرة للامتداد، لا تتردد في فتح طلب ميزة، ولكن يرجى البحث أولاً للتأكد من أن الميزة لم يتم اقتراحها بالفعل. يوصى بشدة باستخدام نموذج الميزة ولكنه ليس إلزاميًا. + +#### تنفيذ طلب ميزة + +إذا وجدت ميزة تشعر أنك قد تكون قادرًا على تنفيذها، لا تخجل. افتح PR مع الإصلاح وتأكد من ذكر الميزة التي تقوم بتنفيذها. + +### ما PRs التي نقبلها؟ + +- إصلاحات المشاكل. +- تنفيذ الميزات. +- الأخطاء المطبعية أو الكلمات الأفضل والأسهل للاستخدام. +- مساهمات الموقع. diff --git a/CONTRIBUTINGaz.md b/CONTRIBUTINGaz.md new file mode 100644 index 0000000..1fdc32d --- /dev/null +++ b/CONTRIBUTINGaz.md @@ -0,0 +1,69 @@ +```markdown +Bunu diğer dillerde oxuyun: [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md), [Deutsch](CONTRIBUTINGde.md), [Español](CONTRIBUTINGes.md) + +# "YouTube Dislike Sayını Geri Qaytar" layihəsinə qatqı qaydalarına Xoş Gəlmisiniz + +Layihəmizə qatqı etmək üçün vaxt ayırdığınız üçün təşəkkür edirik! Bütün dəyişiklikləriniz uzantının növbəti versiyasına (və ya [internet saytına](https://www.returnyoutubedislike.com/)) əlavə ediləcəkdir. + +## Başlamaq + +Formatlama üçün xahiş olunur ki, Prettier-i standart parametrlərdə istifadə edin. + +#### Tələblər + +Layihənin paketlənmiş versiyasını yaratmaq üçün node və npm quraşdırılmalıdır. + +Quraşdırma zamanı istifadə olunan versiyalar: + +- node: 12.18.4 +- npm: 6.14.6 + +Bu uzantının əsas məntiqini ehtiva edən `bundled-content-script.js` faylını yaratmaq üçün əvvəlcə bütün asılılıqları quraşdırmalısınız. + +1. Deponun əsas qovluğuna keçin və aşağıdakı əmri icra edin: + +``` +npm install +``` + +2. `manifest.json` içərisində istifadə olunan `bundled-content-script.js` faylını yaratmaq üçün aşağıdakı əmri çalışdırın. + +``` +npm start // fayl yaradılarkən və saxlanarkən avtomatik yenilənən fayl izləyicisini başlatmaq üçün + +// ya da + +npm run build // faylları yalnız bir dəfə yaratmaq üçün +``` + +Təbriklər, artıq inkişaf etməyə hazırsınız! + +Chrome uzantılarının inkişafına yeni başlamısınızsa və ya əlavə yardıma ehtiyacınız varsa, lütfən [bu YouTube dərsinə](https://www.youtube.com/watch?v=mdOj6HYE3_0) baxın. + +### Issue'lar + +#### Yeni bir issue açmaq + +Uzantı ilə bağlı hər hansı bir probleminiz varsa, problemin əvvəllər bildirilmədiyindən əmin olmaq üçün axtarış aparın. Əgər daha əvvəl bildirilməyibsə, bir mövzu açın. Problem formunun istifadəsi şiddətlə tövsiyə olunur, lakin məcburi deyil. + +#### Bir issue'yu həll etmək + +Həll edə biləcəyinizi düşündüyünüz bir problem tapsanız, çəkinmədən çalışın. Problemi həll edən bir PR açın və həll etdiyiniz problemi müəyyənləşdirdiyinizdən əmin olun. + +### Xüsusiyyət İstəkləri + +#### Yeni bir xüsusiyyət istəyi açmaq + +Uzantı haqqında bir ideyanız varsa, yeni bir xüsusiyyət istəyi açmaqdan çəkinməyin, lakin xüsusiyyətin daha əvvəl təklif olunmadığından əmin olmaq üçün axtarış edin. Xüsusiyyət formasının istifadəsi şiddətlə tövsiyə olunur, lakin məcburi deyil. + +#### Bir xüsusiyyət istəyini tətbiq etmək + +Tətbiq edə biləcəyinizi düşündüyünüz bir xüsusiyyət tapsanız, çəkinmədən çalışın. Xüsusiyyəti tətbiq edən bir PR açın və əlavə etdiyiniz xüsusiyyəti qeyd etdiyinizdən əmin olun. + +### Hansı PR növlərini qəbul edirik? + +- Problem həlləri. +- Xüsusiyyət tətbiqləri. +- Yazı səhvləri və ya daha aydın ifadələr. +- Sayt qatqıları. +``` \ No newline at end of file diff --git a/CONTRIBUTINGbg.md b/CONTRIBUTINGbg.md new file mode 100644 index 0000000..70c6a0d --- /dev/null +++ b/CONTRIBUTINGbg.md @@ -0,0 +1,68 @@ +Прочетете това на други езици: [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md) + + +# Добре дошли в ръководството за сътрудничество на Return YouTube Dislikes + +Благодарим ви, че отделяте време за принос към нашия проект! Всички вашите промени ще се отразят в следващата версия на разширението (или на [уебсайта](https://www.returnyoutubedislike.com/)). + +## Започване + +Моля, използвайте Prettier с настройките по подразбиране за форматиране. + +#### Изисквания + +Трябва да имате инсталирани node и npm, за да създадете обединената версия на изходния код. + +Използвани версии при настройване: + +- node: 12.18.4 +- npm: 6.14.6 + +За да създадете `bundled-content-script.js`, който съдържа повечето от бизнес логиката на това разширение, трябва първо да инсталирате всички зависимости. + +1. Отидете в коренната папка на хранилището и изпълнете: + +``` +npm install +``` + +2. Изпълнете следната команда, за да създадете `bundled-content-script.js`, който се използва в `manifest.json` + +``` +npm start // за създаване на файл(ове) за сборка и стартиране на файлов наблюдател, който рестартира автоматично след запазване + +// или + +npm run build // за създаване на файл(ове) за сборка веднъж +``` + +Поздравления, вече сте готови за разработка! + +Ако сте нов в разработката на разширения за Chrome или ви трябва допълнителна помощ, моля вижте [този урок на YouTube](https://www.youtube.com/watch?v=mdOj6HYE3_0) + +### Проблеми + +#### Отваряне на нов проблем + +Ако имате проблеми с разширението, моля, направете търсене, за да се уверите, че проблемът вече не е сигнализиран. Ако не е, отворете проблема (issue), използването на формуляра за проблем е настоятелно препоръчително, но не задължително. + +#### Решаване на проблем + +Ако сте открили проблем, който чувствате, че можете да решите, не бъдете срамежливи. Направете PR с решението и се уверете, че споменавате проблема, който решавате. + +### Заявки за функционалности + +#### Отваряне на нова заявка за функционалност + +Ако имате идея за разширението, не се колебайте да отворите заявка за функционалност, но моля, направете търсене, за да се уверите, че функционалността вече не е предложена. Използването на формуляра за функционалности е настоятелно препоръчително, но не задължително. + +#### Изпълнение на заявка за функционалност + +Ако сте открили функционалност, която чувствате, че можете да изпълните, не бъдете срамежливи. Отворете PR с решението и се уверете, че споменавате функционалността, която изпълнявате. + +### Какви PR-ове приемаме? + +- Коригиране на проблеми. +- Изпълнение на функционалности. +- Правописни грешки или по-добри и по-лесни думи за употреба. +- Приноси към уебсайта. diff --git a/CONTRIBUTINGcn.md b/CONTRIBUTINGcn.md new file mode 100644 index 0000000..838a77f --- /dev/null +++ b/CONTRIBUTINGcn.md @@ -0,0 +1,67 @@ +阅读其他语言版本:[русский](CONTRIBUTINGru.md)、[Nederlands](CONTRIBUTINGnl.md)、[Français](CONTRIBUTINGfr.md)、[Türkçe](CONTRIBUTINGtr.md)、[українська](CONTRIBUTINGuk.md)、[Polski](CONTRIBUTINGpl.md)、[Deutsch](CONTRIBUTINGde.md) + +# 欢迎来到 Return YouTube Dislikes 贡献指南 + +感谢您花时间为我们的项目做出贡献!您的所有更改都将反映在扩展的下一个版本中(或 [网站](https://www.returnyoutubedislike.com/))。 + +## 入门 + +请使用 Prettier 的默认设置进行格式化。 + +#### 先决条件 + +您需要安装 node 和 npm 才能创建源代码的捆绑版本。 + +设置时使用的版本: + +- node:12.18.4 +- npm:6.14.6 + +要创建包含此扩展的大部分业务逻辑的 `bundled-content-script.js`,您必须先安装所有依赖项。 + +1. 转到 repo 的根目录并运行: + +``` +npm install +``` + +2. 运行以下命令创建 `manifest.json` 中使用的 `bundled-content-script.js` + +``` +npm start // 创建构建文件并启动在保存时热重载的文件观察器 + +// 或 + +npm run build // 创建构建文件一次 +``` + +恭喜,您现在可以开始开发了! + +如果您是 Chrome 扩展程序开发新手,或者需要额外帮助,请参阅[此 YouTube 教程](https://www.youtube.com/watch?v=mdOj6HYE3_0) + +### 问题 + +#### 打开新问题 + +如果您对扩展程序有任何问题,请搜索以确保该问题尚未被报告。如果没有,请打开一个问题,强烈建议使用问题表单,但这不是强制性的。 + +#### 解决问题 + +如果您发现一个您认为可以解决的问题,请随时提出来,不必客气。打开带有修复程序的 PR,并确保提及您正在修复的问题。 + +### 功能请求 + +#### 打开新的功能请求 + +如果您对扩展程序有想法,请随时打开功能请求,但请先搜索以确保该功能尚未被建议。强烈建议使用功能表单,但这不是强制性的 + +#### 实现功能请求 + +如果您发现您认为可以实现的功能,请随时提出来,不必客气。打开带有修复的 PR,并确保提及您正在实现的功能。 + +### 我们接受哪些 PR? + +- 问题修复。 +- 功能实现。 +- 拼写错误或更好、更易用的词语。 +- 网站贡献。 \ No newline at end of file diff --git a/CONTRIBUTINGde.md b/CONTRIBUTINGde.md new file mode 100644 index 0000000..dc7be81 --- /dev/null +++ b/CONTRIBUTINGde.md @@ -0,0 +1,67 @@ +Read this in other languages: [русский](CONTRIBUTINGru.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md), [العربية](CONTRIBUTINGar.md), [Bahasa Indonesia](CONTRIBUTINGid.md), [中文](CONTRIBUTINGcn.md) + +# Willkommen beim Leitfaden für Beitragende von Return YouTube Dislikes + +Vielen Dank, dass du deine Zeit investierst, um zu unserem Projekt beizutragen! Alle deine Änderungen werden in der nächsten Version der Erweiterung (oder der [Website](https://www.returnyoutubedislike.com/)) reflektiert. + +## Erste Schritte + +Bitte verwende Prettier mit den Standardeinstellungen für die Formatierung. + +#### Voraussetzungen + +Du musst Node und npm installiert haben, um die gebündelte Version der Quelle zu erstellen. + +Verwendete Versionen beim Einrichten: + +- Node: 12.18.4 +- npm: 6.14.6 + +Um die `bundled-content-script.js` zu erstellen, die den Großteil der Geschäftslogik dieser Erweiterung enthält, musst du zuerst alle Abhängigkeiten installieren. + +1. Gehe zum Root-Verzeichnis des Repos und führe aus: + +``` +npm install +``` + +2. Führe den folgenden Befehl aus, um `bundled-content-script.js` zu erstellen, das in `manifest.json` verwendet wird: + +``` +npm start // um die Build-Datei(en) zu erstellen und einen Datei-Watcher zu starten, der bei jedem Speichern neu lädt + +// oder + +npm run build // um die Build-Datei(en) einmal zu erstellen +``` + +Herzlichen Glückwunsch, du bist jetzt bereit zum Entwickeln! + +Wenn du neu in der Entwicklung von Chrome-Erweiterungen bist oder zusätzliche Hilfe benötigst, sieh dir bitte [dieses YouTube-Tutorial](https://www.youtube.com/watch?v=mdOj6HYE3_0) an. + +### Probleme + +#### Öffnen eines neuen Problems + +Wenn du Probleme mit der Erweiterung hast, suche bitte, um sicherzustellen, dass das Problem noch nicht gemeldet wurde. Wenn nicht, öffne ein Problem. Die Verwendung des Problemformulars wird dringend empfohlen, ist aber nicht zwingend erforderlich. + +#### Lösung eines Problems + +Wenn du ein Problem gefunden hast, das du lösen könntest, sei nicht schüchtern. Öffne einen PR mit der Lösung und vergewissere dich, dass du das behobene Problem erwähnst. + +### Feature-Anfrage + +#### Öffnen einer neuen Feature-Anfrage + +Wenn du eine Idee für die Erweiterung hast, kannst du gerne eine Feature-Anfrage öffnen, aber suche bitte zuerst, um sicherzustellen, dass das Feature noch nicht vorgeschlagen wurde. Die Verwendung des Feature-Formulars wird dringend empfohlen, ist aber nicht zwingend erforderlich. + +#### Implementierung einer Feature-Anfrage + +Wenn du ein Feature gefunden hast, das du implementieren könntest, sei nicht schüchtern. Öffne einen PR mit der Implementierung und vergewissere dich, dass du das implementierte Feature erwähnst. + +### Welche PRs akzeptieren wir? + +- Fehlerbehebungen. +- Implementierung von Funktionen. +- Rechtschreibfehler oder bessere und einfachere Wörter zur Verwendung. +- Beiträge zur Website. diff --git a/CONTRIBUTINGes.md b/CONTRIBUTINGes.md new file mode 100644 index 0000000..22976a0 --- /dev/null +++ b/CONTRIBUTINGes.md @@ -0,0 +1,68 @@ +Lea esto en otros idiomas: [русский](CONTRIBUTINGru.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md) + + +# Bienvenido(a) a la guía de contribución de Return YouTube Dislikes + +¡Gracias por invertir tiempo en contribuir al proyecto! Todos sus cambios serán mostrados en la siguiente versión de la extensión (o en la [pagina web](https://www.returnyoutubedislike.com/)) + +## Empecemos + +Por favor, utiliza Prettier con la configuración predeterminada para el formateo + +#### Requisitos previos + +Necesita tener instalados node y npm para crear la versión empaquetada del código fuente + +Versiones utilizadas durante la configuración: + +- node: 12.18.4 +- npm: 6.14.6 + +Para crear el archivo `bundled-content-script.js` que contiene la mayor parte de la lógica de negocio de esta extensión, primero debe instalar todas las dependencias + +1. Ve a la raíz del repositorio y ejecute: + +``` +npm install +``` + +2. Ejecuta el siguiente comando para crear `bundled-content-script.js`, el cual se utiliza en `manifest.json` + +``` +npm start // para crear el/los archivo(s) de compilación y comenzar un observador de archivos que se recargue automáticamente al guardar cambios + +// o + +npm run build // para crear el/los archivo(s) de compilación una vez +``` + +¡Felicitaciones! ¡Ahora estás listo(a) para desarrollar! + +Si eres nuevo/a en el desarrollo de extensiones de Chrome o necesitas ayuda adicional, por favor consulta [este tutorial en YouTube](https://www.youtube.com/watch?v=mdOj6HYE3_0) + +### Problemas + +#### Abrir un nuevo problema + +Si tiene algún problema con la extensión, por favor verifique si el problema ya ha sido reportado. Si no lo ha sido, abre un problema. Se recomienda encarecidamente utilizar el formulario de problema, pero no es obligatorio. + +#### Resolver un problema + +Si encontró un problema que crea que pueda resolver, no dude en hacerlo. Abra una solicitud de extracción (PR) con la solución y asegúrese de mencionar el problema que está solucionando + +### Solicitud de función + +#### Abrir una nueva solicitud de función + +If you have an idea for the extension, feel free to open a feature request, but please search it before to make sure the feature isn't already suggested. Using the feature form is highly recommended but not mandatory + +#### Implementando una solicitud de funcionalidad + +Si encontró una función que pueda implementar, no dude en hacerlo. Abra una solicitud de extracción (PR) con la solución y asegúrese de mencionar la función que está implementando + +### ¿Qué PRs aceptamos? + +- Corrección de problemas. +- Implementación de funciones. +- Corrección de errores tipográficos o uso de palabras mejores y más sencillas. +- Contribuciones al sitio web. diff --git a/CONTRIBUTINGfr.md b/CONTRIBUTINGfr.md index e7eb6ce..aa61c0e 100644 --- a/CONTRIBUTINGfr.md +++ b/CONTRIBUTINGfr.md @@ -1,5 +1,4 @@ - -Lisez ceci dans d'autres langues : [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), [Nederlands](CONTRIBUTINGnl.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md), [Tiếng Việt](CONTRIBUTINGvi.md) +Lisez ceci dans d'autres langues : [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), Nederlands](CONTRIBUTINGnl.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md), [Deutsch](CONTRIBUTINGde.md), [Español](CONTRIBUTINGes.md), [العربية](CONTRIBUTINGar.md), [Bahasa Indonesia](CONTRIBUTINGid.md), [中文](CONTRIBUTINGcn.md), [български](CONTRIBUTINGbg.md), [Tiếng Việt](CONTRIBUTINGvi.md) # Bienvenue dans le guide de contribution à Return YouTube Dislikes diff --git a/CONTRIBUTINGgr.md b/CONTRIBUTINGgr.md new file mode 100644 index 0000000..e53e15f --- /dev/null +++ b/CONTRIBUTINGgr.md @@ -0,0 +1,68 @@ +Διαβάστε το παρόν σε άλλες γλώσσες: [русский](CONTRIBUTINGru.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [العربية](CONTRIBUTINGar.md), [Bahasa Indonesia](CONTRIBUTINGid.md), [中文](CONTRIBUTINGcn.md) + + +# Welcome To Return YouTube Dislikes contributing guide + +Σας ευχαριστούμε που αφιερώσατε χρόνο για να συνεισφέρετε στο έργο μας! Όλες οι αλλαγές σας θα εμφανιστούν στην επόμενη έκδοση της επέκτασης (ή στην [ιστοσελίδα](https://www.returnyoutubedislike.com/)). + +## Ξεκινώντας + +Παρακαλώ χρησιμοποιήστε το Prettier με τις προκαθορισμένες ρυθμίσεις για τη μορφοποίηση. + +#### Προαπαιτούμενα + +Πρέπει να έχετε το node και το npm εγκαταστημένο για να δημιουργήσετε την ομαδοποιημένη έκδοση της πηγής. + +Εκδόσεις για την εγκατάσταση: + +- node: 12.18.4 +- npm: 6.14.6 + +Για να δημιουργήσετε το `bundled-content-script.js` που περιέχει το περισσότερο business logic αυτής της επέκτασης πρέπει να εγκαταστήσετε όλα τα dependencies πρώτα. + +1. Πηγαίντε στη ρίζα (root) του repo και εκτελέστε: + +``` +npm install +``` + +2. Εκτελέστε την ακόλουθη εντολή για να δημιουργήσετε το `bundled-content-script.js` το οποίο χρησιμοποιείται στο `manifest.json` + +``` +npm start // για να δημιουργήσετε τα build file(s) και να ξεκινήσετε ένα πρόγραμμα παρακολούθυησης αρχείων που τα φορτώνει ξανά κατά την αποθήκευση + +// ή + +npm run build // για να δημιουργήσετε τα build file(s) μία φορά +``` + +Συγχαρητήρια, τώρα είστε έτοιμος να δημιουργήσετε! + +Εάν είστε νέος στη δημιουργία επεκτάσεων στο Chrome, ή χρειάζεστε επιπλέον βοήθεια, παρακαλώ δείτε [αυτόν τον οδηγό στο YouTube](https://www.youtube.com/watch?v=mdOj6HYE3_0) + +### Ζητήματα + +#### Δημιουργώντας ένα νέο ζήτημα + +Εάν αντιμετωπίζετε κάποιο πρόβλημα με την επέκταση, παρακαλώ κάντε μια αναζήτηση για να σιγουρευτείτε ότι το ζήτημα δεν έχει αναφερθεί ήδη. Αν δεν είναι, δημιουργήστε ένα νέο ζήτημα χρησιμοποιώντας την φόρμα ζητημάτων η οποία συστήνεται αλλά δεν είναι απαραίτητη. + +#### Λύνοντας ένα ζήτημα + +Εάν βρήκατε ένα ζήτημα που πιστεύετε ότι ίσως μπορέσετε να λύσετε, μην ντρέπεστε. Ανοίξτε ένα PR με την επιδιόρθωση και φροντίστε να αναφέρετε το πρόβλημα που επιδιορθώνετε. + +### Αίτηση για νέα λειτουργίας + +#### Άνοιγμα αιτήματος νέας λειτουργίας + +Εάν έχετε μια ιδέα για την επέκταση, μη διστάσετε να ανοίξετε ένα αίτημα λειτουργίας, αλλά ψάξτε το προηγουμένως για να βεβαιωθείτε ότι η λειτουργία δεν έχει ήδη προταθεί. Η χρήση της φόρμας για νέες λειτουργίες συστήνεται αλλά δεν είναι απαραίτητη. + +#### Υλοποιώντας ένα αίτημα νέας λειτουργίας + +Αν βρήκατε μια δυνατότητα που πιστεύετε ότι μπορεί να μπορέσετε να εφαρμόσετε, μην ντρέπεστε. Ανοίξτε ένα PR με την επιδιόρθωση και φροντίστε να αναφέρετε τη δυνατότητα που εφαρμόζετε. + +### Τι PR δεχόμαστε; + +- Διορθώσεις ζητημάτων. +- Υλοποίηση νέων λειτουργιών. +- Τυπογραφικά λάθη ή καλύτερες και πιο εύκολες λέξεις στη χρήση. +- Συνεισφορές στην ιστοσελίδα. diff --git a/CONTRIBUTINGid.md b/CONTRIBUTINGid.md new file mode 100644 index 0000000..59f1482 --- /dev/null +++ b/CONTRIBUTINGid.md @@ -0,0 +1,67 @@ +Baca ini dibahasa lain: [русский](CONTRIBUTINGru.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md), [Deutsch](CONTRIBUTINGde.md) + +# Selamat datang di petunjuk kontribusi Return Youtube Dislikes + +Terima kasih telah menggunakan waktumu untuk berkontribusi pada proyek kami! Semua perubahan akan diaplikasikan pada versi extension selanjutnya (atau [website](https://www.returnyoutubedislike.com/)). + +## Mula-mula + +Tolong gunakan Prettier dengan setting bawaan untuk melakukan formatting. + +#### Prerequisites + +Kamu harus menginstall node dan npm untuk membuat versi bundled dari source code. + +Versi yang digunakan: + +- node: 12.18.4 +- npm: 6.14.6 + +Untuk membuat `bundled-content-script.js` yang memiliki semua logic dari extension ini, kamu harus menginstall semua dependency terlebih dahulu. + +1. Masuk ke root dari repo dan jalankan: + +``` +npm install +``` + +2. Jalankan command berikut untuk membuat `bundled-content-script.js` yang akan digunakan di `manifest.json` + +``` +npm start // untuk membuat build file dan menjalankan file watcher yang akan melakukan hot-reloads ketika menyimpan. + +// atau + +npm run build // untuk membuat build file satu kali. +``` + +Selamat, kamu sekarang sudah siap untuk melakukan develop! + +Jika kamu baru dalam melakukan develop extension Chrome, atau membutuhkan bantuan tambahan, tolong kunjungi [tutorial Youtube ini](https://www.youtube.com/watch?v=mdOj6HYE3_0). + +### Issues + +#### Membuat issue baru + +Jika kamu menemuakan issue mengenai extension, tolong cari terlebih dahulu untuk memastikan issue tersebuat telah di laporkan. Jika belum, buat issue baru, direkomendasikan menggunakan form issue tapi tidak harus. + +#### Menyelesaikan issue + +Jika kamu menemukan issue yang dapat kamu selesaikan, jangan malu. Buat PR dan pastikan untuk mention issue yang sedang diperbaiki. + +### Rqeust Fitur + +#### Membuat request fitur + +Jika kamu memiliki ide mengenai extension, silakan untuk membuat request fitur, tapi tolong cari terlebih dahulu untuk memastikan fitur tersebut belum direquest oleh orang lain. Direkomendasikan menggunakan form request fitur tapi tidak harus. + +#### Implementasi request fitur + +Jika kamu menemukan request fitur yang dapat kamu kerjakan, jangan malu. Buat PR dan pastikan untuk mention request fitur yang sedang dikerjakan. + +### PR apa saja yang kami terima? + +- Memperbaiki issue. +- Implementasi fitur. +- Typo atau improvisasi kata dan kalimat. +- Kontribusi website. diff --git a/CONTRIBUTINGnl.md b/CONTRIBUTINGnl.md index 3c83e7a..02b042c 100644 --- a/CONTRIBUTINGnl.md +++ b/CONTRIBUTINGnl.md @@ -1,4 +1,5 @@ -Lees dit in andere talen: [English](CONTRIBUTINGen.md), [русский](CONTRIBUTINGru.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md), [Tiếng Việt](CONTRIBUTINGvi.md) +Lees dit in andere talen: [English](CONTRIBUTINGen.md), [русский](CONTRIBUTINGru.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md), [Deutsch](CONTRIBUTINGde.md), [Español](CONTRIBUTINGes.md), [العربية](CONTRIBUTINGar.md), [Bahasa Indonesia](CONTRIBUTINGid.md), [中文](CONTRIBUTINGcn.md), [български](CONTRIBUTINGbg.md), [Tiếng Việt](CONTRIBUTINGvi.md) + # Welkom bij de YouTube Dislikes bijdragengids diff --git a/CONTRIBUTINGpl.md b/CONTRIBUTINGpl.md index b84164c..ac746c1 100644 --- a/CONTRIBUTINGpl.md +++ b/CONTRIBUTINGpl.md @@ -1,5 +1,4 @@ -Read this in other languages: [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [Tiếng Việt](CONTRIBUTINGvi.md) - +Read this in other languages: [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [Deutsch](CONTRIBUTINGde.md), [العربية](CONTRIBUTINGar.md), [Bahasa Indonesia](CONTRIBUTINGid.md), [中文](CONTRIBUTINGcn.md), [български](CONTRIBUTINGbg.md), [Tiếng Việt](CONTRIBUTINGvi.md) # Witamy w przewodniku współtworzenia Return YouTube Dislike diff --git a/CONTRIBUTINGpt_BR.md b/CONTRIBUTINGpt_BR.md new file mode 100644 index 0000000..0a53cea --- /dev/null +++ b/CONTRIBUTINGpt_BR.md @@ -0,0 +1,68 @@ +Read this in other languages: [русский](CONTRIBUTINGru.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md), [Español](CONTRIBUTINGes.md), [العربية](CONTRIBUTINGar.md) ou [English (Para Melhor precisão!)](CONTRIBUTING.md), [Bahasa Indonesia](CONTRIBUTINGid.md), [中文](CONTRIBUTINGcn.md) + + +# Bem-vindo ao guia de contribuição do Return YouTube Dislikes + +Obrigado por investir seu tempo contribuindo para o nosso projeto! Todas as mudanças serão refletidas na próxima versão da extensão (ou do [website](https://www.returnyoutubedislike.com/)). + +## Começando + +Por favor use o Prettier com as configurações padrão de formatação. + +#### Pré requisitos + +Você precisa ter o node e o npm instalados para criar o pacote a partir do código-fonte. + +Versões usadas na configuração: + +- node: 12.18.4 +- npm: 6.14.6 + +Para criar o `bundled-content-script.js` que contém muita da lógica de negócio dessa extensão você precisará instalar todas as dependências primeiro. + +1. Vá para a raiz do repositório e execute: + +``` +npm install +``` + +2. Execute o comando a seguir para criar o `bundled-content-script.js` que será usado no `manifest.json` + +``` +npm start // Para criar os arquivos de build e iniciar um file watcher que recarrega o conteúdo automaticamente ao salvar + +// ou + +npm run build // Para criar os arquivos de build apenas uma vez +``` + +Parabéns, agora você está pronto para desenvolver! + +Se você é novo no desenvolvimento de extensões para o Chrome, ou precisa de ajuda extra, por favor dê uma olhada [nesse tutorial do YouTube](https://www.youtube.com/watch?v=mdOj6HYE3_0) + +### Problemas(Issues) + +#### Abrindo uma nova issue + +Se você tiver qualquer problema com a extensão, por favor pesquise nas issues do nosso repositório para ter certeza de que o problema já não foi reportado. Se não foi, abra uma issue, usar o formulário de issues é altamente recomendado mas não é obrigatório. + +#### Resolvendo issues + +Se você encontrou uma issue que você sente que é capaz de corrigir, não tenha vergonha. Abra uma PR com a correção e certifique-se de mencionar a issue que você está corrigindo. + +### Sugerir um nova funcionalidade(Feature request) + +#### Abrindo uma feature request + +Se você tem uma ideia de funcionalidade para a extensão, sinta-se livre para abrir uma feature request no nosso repositório, mas por favor certifique-se de que a funcionalidade já não foi sugerida. Usar o formulário de features é altamente recomendado mas não é obrigatório. + +#### Implementando uma feature request + +Se você encontrou uma feature request que você sente que é capaz de implementar, não tenha vergonha. Abra uma PR com a implementação e certifique-se de mencionar a feature request que você está implementando. + +### Quais PRs nós aceitamos? + +- Correção de problemas. +- Implementação de funcionalidades. +- Erros de digitação e palavras melhores ou mais fáceis de entender. +- Contribuições para o Website. diff --git a/CONTRIBUTINGru.md b/CONTRIBUTINGru.md index 545cef2..4fa5402 100644 --- a/CONTRIBUTINGru.md +++ b/CONTRIBUTINGru.md @@ -1,4 +1,4 @@ -Прочитать на других языках: [English](CONTRIBUTING.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md), [Tiếng Việt](CONTRIBUTINGvi.md) +Прочитать на других языках: [English](CONTRIBUTING.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md), [Deutsch](CONTRIBUTINGde.md), [Español](CONTRIBUTINGes.md), [العربية](CONTRIBUTINGar.md), [Bahasa Indonesia](CONTRIBUTINGid.md), [中文](CONTRIBUTINGcn.md), [български](CONTRIBUTINGbg.md), [Tiếng Việt](CONTRIBUTINGvi.md) # Добро пожаловать в руководство по внесению вклада Return YouTube Dislikes diff --git a/CONTRIBUTINGtr.md b/CONTRIBUTINGtr.md index fecc599..bca1a88 100644 --- a/CONTRIBUTINGtr.md +++ b/CONTRIBUTINGtr.md @@ -1,4 +1,4 @@ -Bunu diğer dillerde okuyun: [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md), [Tiếng Việt](CONTRIBUTINGvi.md) +Bunu diğer dillerde okuyun: [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), [Nederlands](CONTRIBUTINGnl.md), [Français](CONTRIBUTINGfr.md), [українська](CONTRIBUTINGuk.md), [Polski](CONTRIBUTINGpl.md), [Deutsch](CONTRIBUTINGde.md), [Español](CONTRIBUTINGes.md), [العربية](CONTRIBUTINGar.md), [Bahasa Indonesia](CONTRIBUTINGid.md), [中文](CONTRIBUTINGcn.md), [български](CONTRIBUTINGbg.md), [Tiếng Việt](CONTRIBUTINGvi.md) # "YouTube Dislike Sayısını Geri Getir"in katkı kılavuzuna Hoş Geldiniz diff --git a/CONTRIBUTINGuk.md b/CONTRIBUTINGuk.md index 8ef4443..5178d3d 100644 --- a/CONTRIBUTINGuk.md +++ b/CONTRIBUTINGuk.md @@ -1,67 +1,68 @@ -Read this in other languages: [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [Polski](CONTRIBUTINGpl.md), [Tiếng Việt](CONTRIBUTINGvi.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 +Read this in other languages: [English](CONTRIBUTING.md), [русский](CONTRIBUTINGru.md), [Français](CONTRIBUTINGfr.md), [Türkçe](CONTRIBUTINGtr.md), [Polski](CONTRIBUTINGpl.md), [Deutsch](CONTRIBUTINGde.md), [Español](CONTRIBUTINGes.md), [العربية](CONTRIBUTINGar.md), [Bahasa Indonesia](CONTRIBUTINGid.md), [中文](CONTRIBUTINGcn.md), [български](CONTRIBUTINGbg.md), [Tiếng Việt](CONTRIBUTINGvi.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 ми приймаємо? + +- Виправлення проблем. +- Впровадження нових функцій. +- Виправлення помилок та спрощення тексту. +- Поліпшення сайту. diff --git a/Docs/FAQ.md b/Docs/FAQ.md index a9270a3..1a02417 100644 --- a/Docs/FAQ.md +++ b/Docs/FAQ.md @@ -1,4 +1,4 @@ -Read this in other languages: [русский](FAQru.md), [Français](FAQfr.md), [Nederlands](FAQnl.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [Tiếng Việt](FAQvi.md) +Read this in other languages: [русский](FAQru.md), [Français](FAQfr.md), [Nederlands](FAQnl.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [Deutsch](FAQde.md), [Português do Brasil](FAQpt_BRmd), [العربية](FAQar.md), [Bahasa Indonesia](FAQid.md), [中文](FAqcn.md), [български](FAQbg.md), [Tiếng Việt](FAQvi.md) # Frequently Asked Questions @@ -17,7 +17,7 @@ We save all available data to our DB for it to be available after Google shuts d ### **2. Video dislike count doesn't update** -Right now video dislikes are cached, and aren't updated very frequenly. Once every 2-3 days, not more often. +Right now video dislikes are cached, and aren't updated very frequently. Once every 2-3 days, not more often. Yeah, it's not ideal, but it is what it is. Working on improving how often we can update them. diff --git a/Docs/FAQar.md b/Docs/FAQar.md new file mode 100644 index 0000000..1224f94 --- /dev/null +++ b/Docs/FAQar.md @@ -0,0 +1,61 @@ +اقرأ هذا بلغات أخرى: [русский](FAQru.md), [Français](FAQfr.md), [Nederlands](FAQnl.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [Deutsch](FAQde.md), [Português do Brasil](FAQpt_BRmd) + +# الأسئلة الشائعة + +## قبل طرح سؤال على GitHub أو Discord، يرجى الرجوع إلى هذا. + +
+ +### **1. من أين تحصل هذه الإضافة على البيانات؟** + +مزيج من واجهات برمجة تطبيقات Google والبيانات المستخرجة. + +نحن نحفظ جميع البيانات المتاحة في قاعدة بياناتنا لتكون متاحة بعد أن تقوم Google بإيقاف عداد عدم الإعجاب في واجهة برمجة التطبيقات الخاصة بهم. + +
+ +### **2. عداد عدم الإعجاب بالفيديو لا يتم تحديثه** + +حاليًا، يتم تخزين عدم الإعجاب بالفيديو مؤقتًا، ولا يتم تحديثه بشكل متكرر. مرة كل 2-3 أيام، وليس أكثر. + +نعم، إنه ليس مثاليًا، لكنه ما هو عليه. نعمل على تحسين عدد مرات التحديث. + +
+ +### **3. كيف يعمل هذا؟** + +تجمع الإضافة معرف الفيديو الذي تشاهده، وتسترجع عدم الإعجاب (وحقول أخرى مثل المشاهدات، الإعجابات، إلخ) باستخدام واجهة برمجة التطبيقات الخاصة بنا، إذا كانت هذه هي المرة الأولى التي يتم فيها استرجاع الفيديو بواسطة واجهة برمجة التطبيقات الخاصة بنا، فستستخدم واجهة برمجة تطبيقات YouTube للحصول على البيانات، ثم تخزن البيانات في قاعدة بيانات للتخزين المؤقت (مخزنة مؤقتًا لمدة 2-3 أيام) ولأغراض الأرشفة وتعيدها إليك. ثم تعرض الإضافة عدم الإعجاب لك. + +
+ +### **4. ماذا سيحدث بعد أن تتوقف واجهة برمجة تطبيقات YouTube عن إرجاع عداد عدم الإعجاب؟** + +سيتحول الخلفية إلى استخدام مزيج من إحصائيات عدم الإعجاب المؤرشفة، والتقديرات المستخلصة من بيانات مستخدمي الإضافة والتقديرات بناءً على نسب المشاهدة/الإعجاب للفيديوهات التي لم يتم أرشفة عدم الإعجاب بها ولأرشيفات عدم الإعجاب القديمة. + +
+ +### **5. كيف يتم حساب عداد عدم الإعجاب؟** + +تستخدم RYD أصوات مستخدميها لاستخلاص عداد عدم الإعجاب. + +- إذا تم تحميل الفيديو بعد إيقاف واجهة برمجة التطبيقات: + + $$ \textup{عداد عدم الإعجاب في RYD} = \left( \frac{\textup{عداد عدم الإعجاب لمستخدمي RYD}}{\textup{عداد الإعجاب لمستخدمي RYD}} \right) \times \textup{عداد الإعجاب العام} $$ + +- إذا كانت قاعدة بيانات RYD تحتوي بطريقة ما على عداد الإعجاب وعدم الإعجاب الفعلي (مقدم من الناشر أو من الأرشيف)، فسيتم حساب عداد عدم الإعجاب بناءً على كل من - أصوات المستخدمين والقيمة المؤرشفة. سيكون للقيمة المؤرشفة تأثير أقل على العد النهائي مع مرور الوقت. + +
+ +--- + +هذا في شكل فيديو + +[![شرح IReturn YouTube Dislike](https://yt-embed.herokuapp.com/embed?v=GSmmtv-0yYQ)](https://www.youtube.com/watch?v=GSmmtv-0yYQ) + +--- + +
+ +## لدي مخاوف بشأن الأمان / الخصوصية + +انظر [هذه الصفحة](SECURITY-FAQ.md) لمزيد من المعلومات. \ No newline at end of file diff --git a/Docs/FAQaz.md b/Docs/FAQaz.md new file mode 100644 index 0000000..0014ad5 --- /dev/null +++ b/Docs/FAQaz.md @@ -0,0 +1,57 @@ +Bunu digər dillərdə oxuyun: [English](FAQ.md), [русский](FAQru.md), [Nederlands](FAQnl.md), [Français](FAQfr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [Deutsch](FAQde.md) + +# Tez-tez verilən suallar + +## GitHub və ya Discord-da sual verməzdən əvvəl bura nəzər salın. + +
+ +### **1.Bu uzantı məlumatları haradan əldə edir??** + +Google API-lərin və silinmiş məlumatların birləşməsi.Google API-lərin və silinmiş məlumatların birləşməsi. + +Google öz API-də bəyənməmə saylarını bağladıqdan sonra istifadə oluna bilməsi üçün bütün mövcud məlumatları verilənlər bazamızda saxlayırıq. +
+ +### **2. Videonun bəyənməmə sayı yenilənmir** + +Hazırda videonun bəyənməmələri keşlənir və tez-tez yenilənmir. Hər 2-3 gündə, daha tez-tez deyil. + +Bəli, bu ideal deyil, amma olduğu kimidir. Biz bunları daha tez-tez necə yeniləyə biləcəyimizi anlamaq üzərində işləyirik. +
+ +### **3. Bu uzantı necə işləyir?** + +Artırma bizim API-dən istifadə edərək baxdığınız videonun video identifikatorunu götürür, bəyənmədiklərini (və baxışlar, bəyənmələr və s. kimi digər sahələri) alır; video API tərəfindən ilk dəfə alınırsa, YouTube API-dən istifadə edir. Məlumatları əldə etmək üçün o, keşləmə (təxminən 2-3 gün ərzində yaddaşda saxlanılır) və arxivləşdirmə məqsədləri üçün verilənlər bazasında saxlanılır və sizə qaytarılır. Daha sonra uzantı sizə bəyənmədiyinizləri göstərir. + +
+ +### **4. YouTube API bəyənməmə saylarını qaytarmağı dayandırdıqda nə baş verir?** + +Backend arxivləşdirilmiş bəyənməmə statistikası, genişləndirmə istifadəçi məlumatlarından ekstrapolyasiya edilmiş təxminlər və arxivləşdirilməmiş videolar və köhnə bəyənməmə arxivləri üçün baxış/bəyənmə nisbətlərinə əsaslanan təxminlərin birləşməsindən istifadə etməyə keçəcək. + +
+ +### **5. Bəyənməmələrin sayı necə hesablanır?** + +YDS bəyənməmələrin sayını hesablamaq üçün istifadəçilərinin səslərindən istifadə edir. + +- Video API bağlandıqdan sonra yüklənibsə: + + $$ \textup{YDS Bəyənməmə Sayısı} = \left( \frac{\textup{YDS İstifadəçiləri Saymağı Bəyənirlər}}{\textup{YDS İstifadəçilərinin Bəyənmədiyi Say}} \right) \times \textup{İctimai Bəyənmə Sayısı} $$ + +- Əgər YDS verilənlər bazasında hansısa şəkildə real bəyənmə və bəyənməmə sayları varsa (yükləyən və ya arxivdən təqdim olunur), bəyənməmə sayı həm istifadəçilərin səsləri, həm də arxivləşdirilmiş dəyər əsasında hesablanacaq. Arxivləşdirilmiş dəyər yaşlandıqca son hesaba daha az təsir edəcək. +
+ +--- + +Bu video formada + +[![IReturn YouTube Dislike Explained](https://yt-embed.herokuapp.com/embed?v=GSmmtv-0yYQ)](https://www.youtube.com/watch?v=GSmmtv-0yYQ) + +--- + +
+ +## Məxfilik/təhlükəsizliklə bağlı narahatlıqlarım var +Ətraflı məlumat üçün [bu səyfə](SECURITY-FAQtr.md)ya baxın. diff --git a/Docs/FAQbg.md b/Docs/FAQbg.md new file mode 100644 index 0000000..57dbef8 --- /dev/null +++ b/Docs/FAQbg.md @@ -0,0 +1,62 @@ +Прочетете това на други езици: [English](FAQ.md), [русский](FAQru.md), [Français](FAQfr.md), [Nederlands](FAQnl.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Polski](FAQpl.md) + + +# Често задавани въпроси + +## Преди да зададете въпрос в GitHub или Discord, моля, обърнете се към това. + +
+ +### **1. Откъде взема разширението тези данни?** + +Комбинация от Google APIs и скрейпнати данни. + +Запазваме всички налични данни в нашата база данни, за да бъдат налични след като Google затвори броя на дизлайковете в техния API. + +
+ +### **2. Броят на дизлайковете на видеото не се обновява** + +В момента дизлайковете на видеата се кешират и не се обновяват много често. Веднъж на всеки 2-3 дни, не по-често. + +Да, не е идеално, но каквото, такова. Работим по подобрение на това, колко често можем да ги актуализираме. + +
+ +### **3. HКак работи това?** + +Разширението взима video id на видеото, което гледате, извлича дизлайковете (и други полета като гледания, харесвания и т.н.) чрез нашия API. Ако това е първият път, когато видеото беше извлечено от нашия API, той ще използва YouTube API, за да получи данните, след което ще ги запази в база данни за кеширане (кеширане за около 2-3 дни) и архивиране и ще ги върне. Разширението след това ви показва дизлайковете. + +
+ +### **4. Какво ще стане, след като YouTube API спре да връща броя на дизлайковете?** + +Бекендът ще премине към използване на комбинация от архивирани статистики за дизлайкове, оценки екстраполирани от данните на потребителите на разширението и оценки на базата на съотношението гледания/харесвания за видеа, чиито дизлайкове не са били архивирани и за стари архиви с дизлайкове. + +
+ +### **5. Как се изчислява броят на дизлайковете?** + +RYD използва гласовете от своите потребители, за да екстраполира броя на дизлайковете. + +- Ако видеото е качено след като API е затворил: + + $$ \textup{RYD Брой на дизлайковете} = \left( \frac{\textup{RYD Брой на дизлайковете от потребителите}}{\textup{RYD Брой на харесвания от потребителите}} \right) \times \textup{Общ брой харесвания} $$ + +- Ако базата данни на RYD по някакъв начин има реалния брой на харесвания и дизлайкове (предоставени от качителя или от архива), броят на дизлайковете ще бъде изчислен на базата и на гласовете на потребителите, и на архивната стойност. Архивната стойност ще има по-малко влияние върху крайния брой, докато остарее. + +
+ +--- + +Това във видео форма + +[![IReturn YouTube Dislike Explained](https://yt-embed.herokuapp.com/embed?v=GSmmtv-0yYQ)](https://www.youtube.com/watch?v=GSmmtv-0yYQ) + +--- + +
+ +## Имам опасения относно сигурността / личните данни + +Вижте [тази страница](SECURITY-FAQbg.md) за повече информация. diff --git a/Docs/FAQcn.md b/Docs/FAQcn.md new file mode 100644 index 0000000..ddf6bfe --- /dev/null +++ b/Docs/FAQcn.md @@ -0,0 +1,62 @@ +以其他语言阅读: [русский](FAQru.md), [Français](FAQfr.md), [Nederlands](FAQnl.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [Deutsch](FAQde.md), [Português do Brasil](FAQpt_BRmd) + + +# 常见问题 + +## 在 GitHub 或 Discord 上提问之前,请先参阅此内容. + +
+ +### **1. 此扩展程序从哪里获取数据?** + +Google API 和抓取数据的组合。 + +我们将所有可用数据保存到我们的数据库中,以便 Google 关闭其 API 中的不喜欢计数后仍可用。 + +
+ +### **2. 视频不喜欢计数未更新** + +目前,视频的点赞信息会被缓存,更新频率不高。每 2-3 天更新一次,不会更频繁。 + +这并不理想,但这就是现状。我们正在努力提高更新频率。 + +
+ +### **3. 这是如何运作的?** + +该扩展程序会收集您正在观看的视频的视频 ID,使用我们的 API 获取不喜欢的内容(以及其他字段,如观看次数、喜欢次数等),如果这是我们的 API 首次获取该视频,它将使用 YouTube API 获取数据,然后将数据存储在数据库中以供缓存(缓存约 2-3 天)和存档,并将其返回给您。然后,该扩展程序会向您显示不喜欢的内容。 + +
+ +### **4. YouTube API 停止返回不喜欢计数后会发生什么?** + +后端将切换到使用已存档的不喜欢统计数据、从扩展用户数据推断出的估计值以及基于未存档的不喜欢的视频和过时的不喜欢存档的观看/喜欢比率的估计值的组合。 + +
+ +### **5. 如何计算不喜欢数?** + +RYD 使用用户的投票来推断不喜欢的数量。 + +- 如果视频是在 API 关闭后上传的: + + $$ \textup{RYD Dislike Count} = \left( \frac{\textup{RYD Users Dislike Count}}{\textup{RYD Users Like Count}} \right) \times \textup{Public Like Count} $$ + +- 如果 RYD 数据库以某种方式拥有实际的喜欢和不喜欢计数(由上传者提供或来自存档),则不喜欢计数将根据用户的投票和存档值计算。存档值随着时间的推移对最终计数的影响会越来越小。 + +
+ +--- + +这是视频形式 + +[![IReturn YouTube 不喜欢解释](https://yt-embed.herokuapp.com/embed?v=GSmmtv-0yYQ)](https://www.youtube.com/watch?v=GSmmtv-0yYQ) + +--- + +
+ +## I have security / privacy concerns + +有关详细信息,请参阅[此页面](SECURITY-FAQ.md)。 \ No newline at end of file diff --git a/Docs/FAQde.md b/Docs/FAQde.md new file mode 100644 index 0000000..891f9e4 --- /dev/null +++ b/Docs/FAQde.md @@ -0,0 +1,61 @@ +Read this in other languages: [русский](FAQru.md), [Français](FAQfr.md), [Nederlands](FAQnl.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [العربية](FAQar.md), [Bahasa Indonesia](FAQid.md), [中文](FAqcn.md) + +# Häufig gestellte Fragen + +## Bevor Sie eine Frage auf GitHub oder Discord stellen, sehen Sie bitte hier nach. + +
+ +### **1. Woher stammt die Datenquelle dieser Erweiterung?** + +Eine Kombination aus Google-APIs und gescrapten Daten. + +Wir speichern alle verfügbaren Daten in unserer Datenbank, damit sie verfügbar sind, nachdem Google die Anzahl der Dislikes in ihrer API abschaltet. + +
+ +### **2. Die Anzahl der Dislikes bei Videos aktualisiert sich nicht** + +Aktuell werden die Dislikes bei Videos zwischengespeichert und nicht sehr häufig aktualisiert. Etwa alle 2-3 Tage, nicht öfter. + +Ja, das ist nicht ideal, aber es ist wie es ist. Wir arbeiten daran, wie oft wir sie aktualisieren können, zu verbessern. + +
+ +### **3. Wie funktioniert das?** + +Die Erweiterung sammelt die Video-ID des von Ihnen angesehenen Videos, ruft die Dislikes (und andere Felder wie Aufrufe, Likes usw.) über unsere API ab. Wenn dies das erste Mal ist, dass das Video von unserer API abgerufen wurde, wird die YouTube-API verwendet, um die Daten zu erhalten. Anschließend werden die Daten für den Zwischenspeicher (ca. 2-3 Tage zwischengespeichert) und Archivierungszwecke in einer Datenbank gespeichert und an Sie zurückgegeben. Die Erweiterung zeigt Ihnen dann die Dislikes an. + +
+ +### **4. Was passiert, wenn die YouTube-API aufhört, die Anzahl der Dislikes zurückzugeben?** + +Das Backend wird auf eine Kombination aus archivierten Dislike-Statistiken, Schätzungen, die aus den Daten der Erweiterungsnutzer extrapoliert werden, und Schätzungen basierend auf Ansichts-/Like-Verhältnissen für Videos, deren Dislikes nicht archiviert wurden, und veralteten Dislike-Archiven umstellen. + +
+ +### **5. Wie wird die Anzahl der Dislikes berechnet?** + +RYD verwendet die Stimmen seiner Benutzer, um die Anzahl der Dislikes zu extrapolieren. + +- Wenn das Video nach dem Abschalten der API hochgeladen wurde: + + $$ \textup{RYD Dislike Count} = \left( \frac{\textup{RYD Users Dislike Count}}{\textup{RYD Users Like Count}} \right) \times \textup{Public Like Count} $$ + +- Wenn die RYD-Datenbank auf irgendeine Weise die tatsächliche Anzahl von Likes und Dislikes enthielt (vom Ersteller bereitgestellt oder aus dem Archiv), wird die Anzahl der Dislikes basierend auf beiden - den Stimmen der Benutzer und dem archivierten Wert - berechnet. Der archivierte Wert wird mit zunehmendem Alter weniger Einfluss auf die endgültige Zählung haben. + +
+ +--- + +Dies in Videoform + +[![IReturn YouTube Dislike Explained](https://yt-embed.herokuapp.com/embed?v=GSmmtv-0yYQ)](https://www.youtube.com/watch?v=GSmmtv-0yYQ) + +--- + +
+ +## Ich habe Sicherheits-/Privatsphärebedenken + +Siehe [diese Seite](SECURITY-FAQde.md) für weitere Informationen. diff --git a/Docs/FAQfr.md b/Docs/FAQfr.md index b7d8f31..6b6226a 100644 --- a/Docs/FAQfr.md +++ b/Docs/FAQfr.md @@ -1,5 +1,4 @@ -Lisez ceci dans d'autres langues : [English](FAQ.md), [русский](FAQru.md), [Nederlands](FAQnl.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [Tiếng Việt](FAQvi.md) - +Lisez ceci dans d'autres langues : [English](FAQ.md), [русский](FAQru.md), [Nederlands](FAQnl.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [Deutsch](FAQde.md), [العربية](FAQar.md), [Bahasa Indonesia](FAQid.md), [中文](FAqcn.md), [български](FAQbg.md), [Tiếng Việt](FAQvi.md) # Foire Aux Questions diff --git a/Docs/FAQid.md b/Docs/FAQid.md new file mode 100644 index 0000000..f941be5 --- /dev/null +++ b/Docs/FAQid.md @@ -0,0 +1,64 @@ +Baca ini dibahasa lain: [русский](FAQru.md), [Français](FAQfr.md), [Nederlands](FAQnl.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [Deutsch](FAQde.md), [Português do Brasil](FAQpt_BRmd) + + +# Pertayaan yang Sering Ditanyakan + +## Sebelum bertanya di GitHub atau Discord, tolong lihat halaman ini. + +
+ +### **1. Darimana extension ini mendapatkan datanya?** + +Kombinasi dari API Google dan scraping data. + +Kami telah menyimpan semua data yang ada kedalam DB agar datanya tetap ada meskipun setelah Google menghapus jumlah dislike dari API mereka. + +
+ +### **2. Jumlah dislike video tidak update** + + +Sekarang jumlah dislike video dicache, dan tidak update selalu. +Sekali setiap 2-3 hari, tidak lebih dari itu. + +Benar, itu tidak ideal, tapi inilah yang bisa kami lakukan dan kami sedang melakukan improvisasi agar dapat melakukan update sesering mungkin. + +
+ +### **3. Bagaimana cara kerjanya?** + +Extension mengumpulkan id dari video yang sedang ditonton, mengambil data dislike (dan lainnya seperti jumlah views, likes, dll) menggunakan API kami, jika video ini pertama kali diambil datanya menggunakan API kami, API yang digunakan akan diubah ke API Youtube untuk mengambil datanya dan datanya akan disimpan kedalam database kami untuk dilakukan cache (untuk 2-3 hari) yang bertujuan untuk pengarsipan data dan datanya dikembalikan ke kamu. Lalu extension akan menampilkan jumlah dislike ke kamu. + +
+ +### **4. Apa yang akan terjadi setelah API Youtube menghapus jumlah dislike?** + +Bagian backend akan berganti dengan menggunakan kombinasi dari data arsip dislike, estimasi perkiraan dari pengguna, dan estimasi berdasarkan jumlah rasio view/like untuk video yang dislikenya tidak diarsip dan arsip dislike yang sudah tua. + +
+ +### **5. Bagaimana cara menghitung jumlah dislike?** + +RYD mernggunakan sistem voting dari pengguna untuk memperkirakan jumlah dislike. + +- Jika video diupload setelah API dislike dihapus: + + $$ \textup{Jumlah RYD Dislike} = \left( \frac{\textup{Jumlah RYD Dislike Pengguna}}{\textup{Jumlah RYD Like Pengguna}} \right) \times \textup{Jumlah Public Like Publik} $$ + +- Jika entah bagaimana Database RYD memiliki data jumlah asli dari like dan dislike (diberikan dari pengupload atau arsip), jumlah dislike akan dihitung berdasarkan jumlah voting dari pengguna dan arsip. Semakin tua data arsip maka semakin sedikit pengaruhnya ke hasil akhir perhitungan dislike. + +
+ +--- + +Berikut adalah form video + +[![Mengenai IReturn YouTube Dislike](https://yt-embed.herokuapp.com/embed?v=GSmmtv-0yYQ)](https://www.youtube.com/watch?v=GSmmtv-0yYQ) + +--- + +
+ +## Saya memiliki masalah keamanan/privasi + +Lihat [halaman ini](SECURITY-FAQid.md) untuk informasi lebih lanjut. diff --git a/Docs/FAQnl.md b/Docs/FAQnl.md index 779f950..84c0726 100644 --- a/Docs/FAQnl.md +++ b/Docs/FAQnl.md @@ -1,4 +1,4 @@ -Lees dit in andere talen: [Engels](FAQ.md), [русский](FAQru.md), [Français](FAQfr.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [Tiếng Việt](FAQvi.md) +Lees dit in andere talen: [Engels](FAQ.md), [русский](FAQru.md), [Français](FAQfr.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [Deutsch](FAQde.md), [العربية](FAQar.md), [Bahasa Indonesia](FAQid.md), [中文](FAqcn.md), [български](FAQbg.md), [Tiếng Việt](FAQvi.md) # Veel Gestelde Vragen diff --git a/Docs/FAQpl.md b/Docs/FAQpl.md index 76696cc..e2973df 100644 --- a/Docs/FAQpl.md +++ b/Docs/FAQpl.md @@ -1,5 +1,4 @@ -Read this in other languages: [English](FAQ.md), [русский](FAQru.md), [Français](FAQfr.md), [Nederlands](FAQnl.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Tiếng Việt](FAQvi.md) - +Read this in other languages: [English](FAQ.md), [русский](FAQru.md), [Français](FAQfr.md), [Nederlands](FAQnl.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Deutsch](FAQde.md), [العربية](FAQar.md), [Bahasa Indonesia](FAQid.md), [中文](FAqcn.md), [български](FAQbg.md), [Tiếng Việt](FAQvi.md) # Często zadawane pytania @@ -17,7 +16,7 @@ Zapisujemy wszystkie dostępne dane do naszej bazy danych, żeby były dostępne ### **2. Licznik łapek w dół się nie aktualizuje** -Na chwile obecną łapki w dół są buforowane i nie są bardzo często aktualizowane. Raz na 2-3 dni, nie częściej. +Na chwile obecną łapki w dół są buforowane i nie są bardzo często aktualizowane. Raz na 2-3 dni, nie częściej. No nie jest to idealne, ale tak już jest. Pracujemy nad tym jak częściej możemy to aktualizować. diff --git a/Docs/FAQpt_BR.md b/Docs/FAQpt_BR.md new file mode 100644 index 0000000..03ca758 --- /dev/null +++ b/Docs/FAQpt_BR.md @@ -0,0 +1,61 @@ +Leia isso em outros Idiomas: [русский](FAQru.md), [Français](FAQfr.md), [Nederlands](FAQnl.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [العربية](FAQar.md), [Bahasa Indonesia](FAQid.md), [中文](FAqcn.md) + +# Frequently Asked Questions + +## Before asking a question on GitHub or Discord, please refer to this. + +
+ +### **1. Where does this extension get the data?** + +A Combination of Google APIs and scraped data. + +We save all available data to our DB for it to be available after Google shuts down dislike counts in their API. + +
+ +### **2. Video dislike count doesn't update** + +Right now video dislikes are cached, and aren't updated very frequenly. Once every 2-3 days, not more often. + +Yeah, it's not ideal, but it is what it is. Working on improving how often we can update them. + +
+ +### **3. How does this work?** + +The extension collects the video id of the video you are watching, fetches the dislike (and other fields like views, likes etc) using our API, if this is the first time the video was fetched by our API, it will use the YouTube API to get the data, then stores the data in a database for caching (cached for around 2-3 days) and archiving purposes and returns it to you. The extension then displays the dislikes to you. + +
+ +### **4. What will happen after the YouTube API stops returning the dislike count?** + +The backend will switch to using a combination of archived dislike stats, estimates extrapolated from extension user data and estimates based on view/like ratios for videos whose dislikes weren't archived and for outdated dislike archives. + +
+ +### **5. How is the dislike count calculated?** + +RYD uses the votes from its users to extrapolate the dislike count. + +- If the video was uploaded after the API was shut down: + + $$ \textup{RYD Dislike Count} = \left( \frac{\textup{RYD Users Dislike Count}}{\textup{RYD Users Like Count}} \right) \times \textup{Public Like Count} $$ + +- If the RYD database somehow had the actual like and dislike count (provided by the uploader or from the archive), the dislike count will be calculated based on both - the users' votes and the archived value. The archived value will have less influence on the final count as it ages. + +
+ +--- + +Essa a This in video form + +[![IReturn YouTube Dislike Explained](https://yt-embed.herokuapp.com/embed?v=GSmmtv-0yYQ)](https://www.youtube.com/watch?v=GSmmtv-0yYQ) + +--- + +
+ +## I have security / privacy concerns + +See [this page](SECURITY-FAQpt_BR.md) for more info. diff --git a/Docs/FAQru.md b/Docs/FAQru.md index d7bcf44..7355e6b 100644 --- a/Docs/FAQru.md +++ b/Docs/FAQru.md @@ -1,25 +1,29 @@ -Read this in other languages: [English](FAQ.md), [Nederlands](FAQnl.md), Français](FAQfr.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [Tiếng Việt](FAQvi.md) - +Read this in other languages: [English](FAQ.md), [Nederlands](FAQnl.md), [Français](FAQfr.md), [Türkçe](FAQtr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [Deutsch](FAQde.md), [العربية](FAQar.md), [Bahasa Indonesia](FAQid.md), [中文](FAqcn.md), [български](FAQbg.md), [Tiếng Việt](FAQvi.md) # Часто задаваемые вопросы ## Прежде чем задать вопрос на GitHub или в Discord, пожалуйста, ознакомьтесь с этим. ### **1. Откуда это расширение получает данные?** + Комбинация API Google и старых данных. Мы сохраняем все имеющиеся данные в нашей базе данных, чтобы они были доступны после того, как Google прекратит подсчёт отметок «Не нравится» в своём API. ### **2. Количество не понравившихся видео не обновляется** + В настоящее время видео с отметками «Не нравится» кэшируются и обновляются не очень часто. Раз в 2-3 дня, не чаще. Да, это не идеально, но это то, что есть. Мы работаем над тем, чтобы улучшить частоту их обновления. ### **3. Как это работает?** + Расширение собирает идентификатор видео, которое вы смотрите, извлекает данные об отметках «Не нравится» (и другие поля, такие как просмотры, отметки «Нравится» и т.д.) с помощью нашего API, если видео было извлечено нашим API впервые, оно использует YouTube API для получения данных, затем сохраняет данные в базе данных для кэширования (кэшируются около 2-3 дней) и архивирования и возвращает их вам. После этого расширение отображает отметки «Не нравится» вам. ### **4. Что произойдёт после того, как API YouTube перестанет возвращать данные о количестве отметок «Не нравится»?** + Внутренняя часть нашего сервера переключится на использование комбинации архивных статистик отметок «Не нравится», оценок, экстраполированных из данных о пользователях расширения, и оценок, основанных на соотношении просмотров и отметок «Нравится» для видео, чьи отметки «Не нравится» не были заархивированы, и для устаревших архивов с отметками «Не нравится». ## Я беспокоюсь о безопасности / конфиденциальности + Более подробную информацию смотрите на [этой странице](SECURITY-FAQ.md). diff --git a/Docs/FAQtr.md b/Docs/FAQtr.md index d5275b2..2d01ab0 100644 --- a/Docs/FAQtr.md +++ b/Docs/FAQtr.md @@ -1,5 +1,4 @@ -Bunu diğer dillerde okuyun: [English](FAQ.md), [русский](FAQru.md), ), [Nederlands](FAQnl.md), [Français](FAQfr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [Tiếng Việt](FAQvi.md) - +Bunu diğer dillerde okuyun: [English](FAQ.md), [русский](FAQru.md), [Nederlands](FAQnl.md), [Français](FAQfr.md), [українська](FAQuk.md), [Polski](FAQpl.md), [Deutsch](FAQde.md), [العربية](FAQar.md), [Bahasa Indonesia](FAQid.md), [中文](FAqcn.md), [български](FAQbg.md), [Tiếng Việt](FAQvi.md) # Sıkça Sorulan Sorular diff --git a/Docs/FAQuk.md b/Docs/FAQuk.md index b2d99aa..a1d1d79 100644 --- a/Docs/FAQuk.md +++ b/Docs/FAQuk.md @@ -1,61 +1,61 @@ -Read this in other languages: [English](FAQ.md), [русский](FAQru.md), [Français](FAQfr.md), [Türkçe](FAQtr.md), [Tiếng Việt](FAQvi.md) - -# Часті питання - -## Перш ніж задавати питання на GitHub або у Discord, будь ласка, ознайомтеся з цим. - -
- -### **1. Звідки це розширення отримує дані?** - -Комбінація Google API та старих даних. - -Ми зберігаємо всі доступні дані в нашій базі, аби вони були доступні після того, як Google вимкне лічильник відміток «Не подобається» у своєму API. - -
- -### **2. Лічильник «Не подобається» не оновлюється** - -Наразі відео з відмітками «Не подобається» кешуються і оновлюються не надто часто. Не частіше, ніж раз в 2-3 дні. - -Так, це не ідеально, але маємо те, що маємо. Ми працюємо над тим, щоб збільшити частоту їх оновлення. - -
- -### **3. Як це працює?** - -Розширення отримує ID відео, яке ви переглядаєте, та дізнається кількість відміток «Не подобається» (та інші дані: перегляди, відмітки «Подобається» тощо) за допомогою нашого API, якщо відео було витягнуте нашим API вперше, воно використовує YouTube API для отримання даних, потім зберігає дані в базі даних для кешування (кешуються близько 2-3 днів) та архівування й повертає їх вам. Після цього розширення відображає відмітки «Не подобається» вам. - -
- -### **4. Що станеться після того, як YouTube API перестане повертати кількість відміток «Не подобається»?** - -Сервер перейде на використання комбінації заархівованих статистичних даних відміток «Не подобається» екстрапольованих із даними . - -
- -### **5. Як розраховується кількість відміток «Не подобається»?** - -RYD використовує відмітки своїх користувачів, щоб екстраполювати кількість відміток «Не подобається». - -- Якщо відео було завантажено після вимкнення API: - - $$ \textup{К-ть відміток «Не подобається» у RYD} = \left( \frac{\textup{К-ть відміток «Подобається» серед користувачів RYD}}{\textup{К-ть відміток «Не подобається» серед користувачів RYD}} \right) \times \textup{Публічна к-ть відміток «Подобається»} $$ - -- Якщо база даних RYD якимось чином мала фактичну кількість відміток «Подобається» та «Не подобається» (надану завантажувачем або з архіву), кількість відміток «Не подобається» буде розраховано на основі відміток користувачів і архівного значення. Архівне значення матиме менший вплив на остаточний підрахунок у міру актуальності. - -
- ---- - -Це все, але у відео форматі - -[![IReturn YouTube Dislike Explained](https://yt-embed.herokuapp.com/embed?v=GSmmtv-0yYQ)](https://www.youtube.com/watch?v=GSmmtv-0yYQ) - ---- - -
- -## Я турбуюся про безпеку/конфіденційність - -Детальніше про це дивіться [тут](SECURITY-FAQuk.md). \ No newline at end of file +Read this in other languages: [English](FAQ.md), [русский](FAQru.md), [Français](FAQfr.md), [Türkçe](FAQtr.md), [Deutsch](FAQde.md), [العربية](FAQar.md), [Bahasa Indonesia](FAQid.md), [中文](FAqcn.md), [български](FAQbg.md), [Tiếng Việt](FAQvi.md) + +# Часті питання + +## Перш ніж задавати питання на GitHub або у Discord, будь ласка, ознайомтеся з цим. + +
+ +### **1. Звідки це розширення отримує дані?** + +Комбінація Google API та старих даних. + +Ми зберігаємо всі доступні дані в нашій базі, аби вони були доступні після того, як Google вимкне лічильник відміток «Не подобається» у своєму API. + +
+ +### **2. Лічильник «Не подобається» не оновлюється** + +Наразі відео з відмітками «Не подобається» кешуються і оновлюються не надто часто. Не частіше, ніж раз в 2-3 дні. + +Так, це не ідеально, але маємо те, що маємо. Ми працюємо над тим, щоб збільшити частоту їх оновлення. + +
+ +### **3. Як це працює?** + +Розширення отримує ID відео, яке ви переглядаєте, та дізнається кількість відміток «Не подобається» (та інші дані: перегляди, відмітки «Подобається» тощо) за допомогою нашого API, якщо відео було витягнуте нашим API вперше, воно використовує YouTube API для отримання даних, потім зберігає дані в базі даних для кешування (кешуються близько 2-3 днів) та архівування й повертає їх вам. Після цього розширення відображає відмітки «Не подобається» вам. + +
+ +### **4. Що станеться після того, як YouTube API перестане повертати кількість відміток «Не подобається»?** + +Сервер перейде на використання комбінації заархівованих статистичних даних відміток «Не подобається» екстрапольованих із даними . + +
+ +### **5. Як розраховується кількість відміток «Не подобається»?** + +RYD використовує відмітки своїх користувачів, щоб екстраполювати кількість відміток «Не подобається». + +- Якщо відео було завантажено після вимкнення API: + + $$ \textup{К-ть відміток «Не подобається» у RYD} = \left( \frac{\textup{К-ть відміток «Подобається» серед користувачів RYD}}{\textup{К-ть відміток «Не подобається» серед користувачів RYD}} \right) \times \textup{Публічна к-ть відміток «Подобається»} $$ + +- Якщо база даних RYD якимось чином мала фактичну кількість відміток «Подобається» та «Не подобається» (надану завантажувачем або з архіву), кількість відміток «Не подобається» буде розраховано на основі відміток користувачів і архівного значення. Архівне значення матиме менший вплив на остаточний підрахунок у міру актуальності. + +
+ +--- + +Це все, але у відео форматі + +[![IReturn YouTube Dislike Explained](https://yt-embed.herokuapp.com/embed?v=GSmmtv-0yYQ)](https://www.youtube.com/watch?v=GSmmtv-0yYQ) + +--- + +
+ +## Я турбуюся про безпеку/конфіденційність + +Детальніше про це дивіться [тут](SECURITY-FAQuk.md). diff --git a/Docs/SECURITY-FAQ.md b/Docs/SECURITY-FAQ.md index 36160ef..da850a1 100644 --- a/Docs/SECURITY-FAQ.md +++ b/Docs/SECURITY-FAQ.md @@ -1,5 +1,4 @@ -Read this in other languages: [русский](SECURITY-FAQru.md), [Nederlands](SECURITY_FAQnl.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [Tiếng Việt](SECURITY-FAQvi.md) - +Read this in other languages: [русский](SECURITY-FAQru.md), [Nederlands](SECURITY_FAQnl.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [Deutsch](SECURITY-FAQde.md), [العربية](SECURITY-FAQar.md), [Bahasa Indonesia](SECURITY-FAQid.md), [中文](SECURITY-FAQcn.md), [български](SECURITY-FAQbg.md), [Tiếng Việt](SECURITY-FAQvi.md) # Security diff --git a/Docs/SECURITY-FAQaz.md b/Docs/SECURITY-FAQaz.md new file mode 100644 index 0000000..fc43185 --- /dev/null +++ b/Docs/SECURITY-FAQaz.md @@ -0,0 +1,29 @@ +Read this in other languages: [English](SECURITY-FAQ.md), [русский](SECURITY-FAQru.md), [Nederlands](SECURITY_FAQnl.md), [Français](SECURITY-FAQfr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [Deutsch](SECURITY-FAQde.md) + +# Təhlükəsizlik + +### Baxış tarixçəmi izləyirsiniz? + +Xeyr. Artırmanın kodu ictimaiyyətə açıqdır və siz bunu özünüz görə bilərsiniz. Göndərilən yeganə məlumat videolar üçün bəyənməmə sayını almaq üçün tələb olunan video ID-dir. Göndərilən başqa əlavə başlıq yoxdur. Rabitə təbəqəsi vasitəsilə ictimai IP-niz serverə və sorğunun edildiyi vaxta məruz qalacaq. Bununla belə, bunların heç biri sizi heç bir şəkildə unikal şəkildə müəyyənləşdirmir. Sıfır etibar mühitini fərz etsək, əldə edə biləcəyimiz ən yaxşısı dinamik IP-dir. Bu İP bu gün sənin, sabah qonşunun ola bilər. Əgər həqiqətən IP-nizin izlənilməsindən narahatsınızsa, yəqin ki, artıq VPN-dən istifadə edirsiniz. + +### Videonu bəyənməsəm, məni unikal şəkildə tanıya bilərsiniz?? + +Bəli. Videonu bəyənmədiyiniz zaman biz sizin üçün Google hesabınızla əlaqəli olmayan təsadüfi yaradılmış unikal ID yaradırıq. Bu, botlardan istifadənin qarşısını almaq üçün edilir. Bununla belə, bu təsadüfi identifikatoru sizə və ya şəxsi YouTube hesabınıza bağlamağın heç bir yolu yoxdur. + +### Sizdə dəqiq olaraq hansı məlumat var?? + +Sadəcə video identifikatoru. Şərhləriniz, istifadəçi adınız, videonu kiminlə paylaşdığınız, heç bir əlavə metadata deyil. heç nə. Sadəcə video identifikatoru. + +### Mənim IP ünvanım necə saxlanılır? + +Backend yalnız müvəqqəti yaddaşda (RAM) haşiyələnməmiş IP ünvanlarını saxlayır. Bu ünvanlar sabit diskdə saxlanmır və buna görə də qeyd olunmur. Biz IP ünvanlarını hash edirik və əvəzinə onlar saxlanılır. Bu, verilənlər bazası vandalizminin qarşısını almaq üçün edilir. + +### OAuth vasitəsilə YouTube hesabıma daxil olmaq haqqında bəzi mübahisələr eşitdim! + +Bu xüsusiyyət istəyə bağlı olacaq və çox üstünlük təşkil edəcək. Əgər siz YouTube yaradıcısısınızsa və bəyənmədiyiniz statistikanı bizimlə bölüşmək istəyirsinizsə, bunu edə bilərsiniz. [OAuth](https://en.wikipedia.org/wiki/OAuth#:~:text=but%20without%20giving%20them%20the%20passwords.) Qurulma şəkli, əslində çox təhlükəsizdir. İstənilən vaxt hesabınıza girişi ləğv edə və bizə çox xüsusi icazələr verə bilərsiniz. Biz heç bir lazımsız icazə istəməyəcəyik. Biz yalnız video statistikanıza baxmaq üçün icazə istəyəcəyik. +### Bu sayda bəyənməmələrə necə etibar edə bilərəm?? + +Biz bot hücumlarının qarşısını almaq üçün tədbirlər gördük və anti-bot sisteminin effektivliyini artırmaq üçün işi davam etdirəcəyik: bu, bəyənməmələrin sayını real rəqəmin yaxşı nümayəndəsi kimi saxlamağa kömək edəcək. Əlbəttə ki, bu, heç vaxt 100% dəqiq olmayacaq, ona görə də hesaba etibar edib etməmək sizə bağlıdır. + +### Niyə backend kodunu paylaşmırsınız? +Biz bunu nə vaxtsa paylaşacağıq - lakin hazırda paylaşmaq üçün həqiqətən heç bir səbəb yoxdur. Bu, yanlış təhlükəsizlik hissi verə bilər - çünki sıfır inamlı sistemdə biz bir versiyanı ifşa edə, digərini yerləşdirə bilərik. Kodu gizli saxlamağın bir çox səbəbi var, xüsusən də spamla necə mübarizə aparırıq. Spam emalı kodunu ört-basdır etmək/gizlətmək olduqca standart təcrübədir. \ No newline at end of file diff --git a/Docs/SECURITY-FAQbg.md b/Docs/SECURITY-FAQbg.md new file mode 100644 index 0000000..44f93f8 --- /dev/null +++ b/Docs/SECURITY-FAQbg.md @@ -0,0 +1,32 @@ +Прочетете това на други езици: [English](SECURITY-FAQ.md), [русский](SECURITY-FAQru.md), [Nederlands](SECURITY_FAQnl.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md) + + +# Сигурност + +### Проследявате ли историята на гледанията ми? + +Не. Кода на разширението е публичен и може да го видите сами. Единствената информация, която се изпраща, е идентификаторът на видеото, който е необходим, за да вземе броя на дизлайковете за видеата. Няма допълнителни заглавия, изпращани. Чрез комуникационния слой вашите обществени IP адреси ще бъдат изложени на сървъра, както и времето, в което беше направен заявката. Обаче нито едно от тези не ви идентифицира уникално по никакъв начин. Предполагайки среда с нулево доверие, най-доброто, което можем да получим, е динамичен IP адрес. Който днес е вашият, утре е на вашия съсед. Ако наистина се притеснявате, че вашият IP адрес бива проследен, вероятно вече използвате VPN. + +### Можете ли да ме идентифицирате уникално, ако дизлайкна? + +Да. Когато дизлайкнете видео, създаваме случайно генериран уникален идентификатор за вас, който не е свързан с вашия Google акаунт. Това се прави, за да предотвратим бот атаки. Но няма начин този случаен идентификатор да бъде свързан с вас или с вашия личен акаунт на YouTube. + +### Какви точно информация имате? + +Само идентификатора на видеото. Нито вашите коментари, нито потребителското ви име, нито на кого сте споделили видеото, нито допълнителни метаданни. Нищо. Само идентификатора на видеото. + +### Как се съхранява моят IP адрес? + +Бекендът държи незакодирани IP адреси само в изменяемата памет (RAM). Те не се съхраняват на твърд диск и следователно не се записват. Ние кодираме IP адресите, и това се съхранява. Това се прави, за да се предотврати вандализмът върху базата данни. + +### Чух за OAuth и достъп до акаунта ми на YouTube! + +Тази функция ще бъде по избор и изключително от ваш избор. Ако сте създател на YouTube и искате да споделите статистиката за дизлайковете с нас, можете. Структурата на [OAuth](https://en.wikipedia.org/wiki/OAuth#:~:text=but%20without%20giving%20them%20the%20passwords.) е наистина много сигурна. Всеки път можете да отмените достъпа до акаунта си и да дадете много конкретни разрешения на нас. Няма да поискаме никакви разрешения, които не са необходими. Ще поискаме само разрешения за преглед на статистиката на вашите видеа. + +### Как мога да се доверя на този брой дизлайкове? + +Въведохме мерки за предотвратяване на атаки с ботове и ще продължим да работим по подобряване на ефективността на системата за предотвратяване на ботове: това ще ни помогне да поддържаме броя на дизлайковете като добър представител на реалния брой. Разбира се, той никога няма да бъде 100% точен, така че решението дали да вярвате на броя или не, зависи от вас. + +### Защо не споделяте кода на бекенда? + +Ще го споделим на някакъв етап - но наистина няма реална причина да го споделяме в момента. Това създава лъжливо чувство за сигурност - защото в среда с нулево доверие можем съвсем спокойно да разкрием една версия, но да развием друга. Има много причини да държим кода скрит, специално начина, по който се борим срещу спама. Скриването/затъмняването на кода за борба със спама е стандартна практика. diff --git a/Docs/SECURITY-FAQcn.md b/Docs/SECURITY-FAQcn.md new file mode 100644 index 0000000..728b476 --- /dev/null +++ b/Docs/SECURITY-FAQcn.md @@ -0,0 +1,31 @@ +阅读其他语言版本:[русский](SECURITY-FAQru.md)、[Nederlands](SECURITY_FAQnl.md)、[Français](SECURITY-FAQfr.md)、[Türkçe](SECURITY-FAQtr.md)、[українська](SECURITY-FAQk.md)、[Polski](SECURITY-FAQpl.md)、[Deutsch](SECURITY-FAQde.md) + +# 安全 + +### 您是否在跟踪我的观看历史记录? + +否。扩展程序的代码是公开的,您可以自己查看。发送的唯一信息是视频 ID,这是获取视频的不喜欢计数所必需的。没有发送其他标头。在通信层上,您的公共 IP 以及发出请求的时间将暴露给服务器。但是,这些都不能以任何方式唯一地识别您。假设一个零信任环境,我们能得到的最好东西就是动态 IP。今天是你的,明天是你的邻居的。如果你真的担心你的 IP 被追踪,你可能已经使用了 VPN。 + +### 如果我不喜欢,你能唯一地识别我吗? + +是。当你不喜欢某个视频时,我们会为你创建一个随机生成的唯一 ID,该 ID 不与你的 Google 帐户绑定。这样做是为了防止机器人。但是没有办法将这个随机 ID 绑定到你或你的个人 YouTube 帐户。 + +### 你到底有什么信息? + +只有视频 ID。不是你的评论,不是你的用户名,不是你与谁分享了视频,也不是任何其他元数据。什么都没有。只有视频 ID。 + +### 我的 IP 如何存储? + +后端仅将未散列的 IP 地址保存在易失性存储器 (RAM) 中。这些地址不存储在硬盘上,因此不会被记录。我们对 IP 地址进行散列,然后将其存储起来。这样做是为了防止数据库遭到破坏。 + +### 我听到一些关于 OAuth 和访问我的 YouTube 帐户的讨论! + +此功能是可选的,并且非常可选择加入。如果您是 YouTube 创作者,并且想与我们分享您的不喜欢统计数据,您可以这样做。 [OAuth](https://en.wikipedia.org/wiki/OAuth#:~:text=but%20without%20giving%20them%20the%20passwords.) 的结构方式实际上非常安全。您可以随时撤销对您帐户的访问权限,并可以向我们授予非常具体的权限。我们不会要求任何不必要的权限。我们只会要求查看您的视频统计数据的权限。 + +### 我如何信任这个不喜欢计数? + +我们已经实施了防止机器人攻击的措施,并将继续努力提高机器人预防系统的有效性:这将帮助我们将不喜欢计数保持为实际计数的良好代表。当然,它永远不会 100% 准确,因此由您决定是否信任计数。 + +### 您为什么不共享后端代码? + +我们会在某个时候共享它 - 但现在真的没有真正的理由共享它。它给人一种虚假的安全感 - 因为在零信任系统中,我们也可以披露一个版本但部署另一个版本。隐藏代码的原因有很多,特别是我们如何对抗垃圾邮件。隐藏/混淆垃圾邮件处理代码是一种相当标准的做法。 \ No newline at end of file diff --git a/Docs/SECURITY-FAQde.md b/Docs/SECURITY-FAQde.md new file mode 100644 index 0000000..8fb3005 --- /dev/null +++ b/Docs/SECURITY-FAQde.md @@ -0,0 +1,32 @@ +Read this in other languages: [русский](SECURITY-FAQru.md), [Nederlands](SECURITY_FAQnl.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [العربية](SECURITY-FAQar.md), [Bahasa Indonesia](SECURITY-FAQid.md), [中文](SECURITY-FAQcn.md) + + +# Sicherheit + +### Verfolgen Sie meine Anzeigehistorie? + +Nein. Der Code der Erweiterung ist öffentlich und Sie können ihn selbst einsehen. Die einzige übermittelte Information ist die Video-ID, die benötigt wird, um die Anzahl der Dislikes für die Videos abzurufen. Es werden keine zusätzlichen Header gesendet. Über die Kommunikationsschicht wird Ihre öffentliche IP-Adresse an den Server übermittelt, sowie die Zeit, zu der die Anfrage gestellt wurde. Keine dieser Informationen identifiziert Sie auf eindeutige Weise. Unter der Annahme einer Zero-Trust-Umgebung ist das Beste, was wir bekommen können, eine dynamische IP. Die heute Ihnen gehört, gehört morgen Ihrem Nachbarn. Wenn Sie sich wirklich Sorgen machen, dass Ihre IP zurückverfolgt wird, verwenden Sie wahrscheinlich bereits ein VPN. + +### Können Sie mich eindeutig identifizieren, wenn ich etwas dislike? + +Ja. Wenn Sie ein Video nicht mögen, erstellen wir eine zufällig generierte eindeutige ID für Sie, die nicht mit Ihrem Google-Konto verknüpft ist. Dies geschieht, um das Botting zu verhindern. Es gibt jedoch keine Möglichkeit, diese zufällige ID mit Ihnen oder Ihrem persönlichen YouTube-Konto zu verknüpfen. + +### Welche Informationen haben Sie genau? + +Nur die Video-ID. Nicht Ihre Kommentare, nicht Ihren Benutzernamen, nicht mit wem Sie das Video geteilt haben, keine zusätzlichen Metadaten. Nichts. Nur die Video-ID. + +### Wie wird meine IP gespeichert? + +Der Backend speichert nicht gehashte IP-Adressen nur im flüchtigen Speicher (RAM). Diese Adressen werden nicht auf einer Festplatte gespeichert und daher nicht protokolliert. Wir hashen die IP-Adressen und speichern diese stattdessen. Dies geschieht, um Datenbankvandalismus zu verhindern. + +### Ich habe etwas über OAuth gehört und den Zugriff auf mein YouTube-Konto! + +Diese Funktion wird optional sein und sehr stark opt-in. Wenn Sie ein YouTube-Ersteller sind und Ihre Dislike-Statistiken mit uns teilen möchten, können Sie dies tun. Die Art und Weise, wie [OAuth](https://en.wikipedia.org/wiki/OAuth#:~:text=but%20without%20giving%20them%20the%20passwords.) strukturiert wurde, ist tatsächlich sehr sicher. Sie können den Zugriff auf Ihr Konto jederzeit widerrufen und uns sehr spezifische Berechtigungen erteilen. Wir werden nicht nach Berechtigungen fragen, die nicht erforderlich sind. Wir werden nur um Berechtigungen bitten, um Ihre Video-Statistiken anzeigen zu können. + +### Wie kann ich diesem Dislike-Zähler vertrauen? + +Wir haben Maßnahmen implementiert, um Bot-Angriffe zu verhindern, und werden weiterhin daran arbeiten, die Effektivität des Bot-Präventionssystems zu verbessern: Dies wird uns helfen, den Dislike-Zähler als gute Repräsentation der tatsächlichen Anzahl zu halten. Natürlich wird es nie zu 100% genau sein, also liegt es an Ihnen zu entscheiden, ob Sie dem Zähler vertrauen oder nicht. + +### Warum teilen Sie den Backend-Code nicht? + +Wir werden ihn irgendwann teilen - aber es gibt wirklich keinen echten Grund, ihn jetzt zu teilen. Es vermittelt ein falsches Sicherheitsgefühl - denn in einem Zero-Trust-System könnten wir genauso gut eine Version offenlegen, aber eine andere bereitstellen. Es gibt viele Gründe, den Code verborgen zu halten, insbesondere wie wir gegen Spam kämpfen. Das Verbergen/Verfremden des Spam-Behandlungscodes ist eine ziemlich standardmäßige Praxis. diff --git a/Docs/SECURITY-FAQfr.md b/Docs/SECURITY-FAQfr.md index 1c5ee06..82952b9 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), [Nederlands](SECURITY_FAQnl.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [Tiếng Việt](SECURITY-FAQvi.md) +Lisez ceci dans d'autres langues : [English](SECURITY-FAQ.md), [русский](SECURITY-FAQru.md), [Nederlands](SECURITY_FAQnl.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [Deutsch](SECURITY-FAQde.md), [العربية](SECURITY-FAQar.md), [Bahasa Indonesia](SECURITY-FAQid.md), [中文](SECURITY-FAQcn.md), [български](SECURITY-FAQbg.md), [Tiếng Việt](SECURITY-FAQvi.md) # Sécurité diff --git a/Docs/SECURITY-FAQid.md b/Docs/SECURITY-FAQid.md new file mode 100644 index 0000000..883d9a1 --- /dev/null +++ b/Docs/SECURITY-FAQid.md @@ -0,0 +1,31 @@ +Baca ini dibahasa lain: [русский](SECURITY-FAQru.md), [Nederlands](SECURITY_FAQnl.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [Deutsch](SECURITY-FAQde.md) + +# Keamanan + +### Apakah kalian melacak riwayat video yang saya tonton? + +Tidak, Kode extension bersifat publik dan kamu dapat melihatnya sendiri. Informasi yang kami ambil hanya id dari video, yang diperlukan untuk pengambilan jumlah dislike. Tidak ada tambahan data headers lainnya. Pada communication layer, IP Publik kamu akan terekspos ke server, bersamaan dengan waktu ketika requestnya dibuat. Meskipun begitu, data ini tidaklah bersifat unik atau mengidentifikasikan kamu dalam bentuk apapun. Asumsikan environment yang tidak terpercaya, hal terbaik yang dapat kami ambil adalah IP dinamis. Yang bisa saja hari ini adalah milikmu, besok milik tetanggamu. Jika kamu merasa khawati jika IP-mu dilacak, kamu mungkin telah menggunakan VPN. + +### Bisakah kalian mengidentifikasi saya ketika saya dislike suatu video? + +Iya. Ketika kamu dislike suatu video, kami membuat id yang digenerate secara acak untukmu yang tidak ada hubungannya dengan akun Google. Ini dilakukan untuk menghindari bot. Tapi tidak mungkin untuk mencari kamu atau akun Youtube-mu menggunakan id acak ini. + +### Informasi apa saja yang kalian punya? + +Hanya id dari video. Bukan komentarmu, bukan usernamemu, bukan siapa saja orang yang pernah kamu kirimkan video, bukan metadata tambahan. Tidak ada. Hanya id dari video. + +### Bagaimana IP saya disimpan? + +Backend menyimpan alamat IP yang tidak di hash hanya di dalam RAM. Alamat ini tidak disimpan di hard drive, sehingga tidak di log. Kami melakukan hash terhadap alamat IP dan menyimpan yang itu. Ini dilakukan untuk mencegah perusakan database. + +### Saya pernah mendengar diskusi mengenai OAuth, dan akses ke akun Youtube saya! + +Fitur ini bersifat opsional, dan banyak yang berpartisipasi. Jika kamu merupakan seorang Youtuber, dan mau membagikan data dislikenya kepada kami, kamu bisa melakukannya. Dengan cara [OAuth](https://en.wikipedia.org/wiki/OAuth#:~:text=but%20without%20giving%20them%20the%20passwords.) yang terstruktur, dan sangat aman. Kamu dapat menghapus akses ke akunmu kapanpun, dan bisa menentukan data mana yang mau dibagikan dan tidak dibagikan secara spesifik. Kami tidak akan meminta izin apapun yang bersifat tidak wajib. Kami hanya akan meminta izin untuk melihat data video kamu. + +### Bagaimana bisa saya percaya jumlah dislike ini? + +Kami telah melakukan tidakan pencegahan dari penyerangan bot dan akan terus mengimprovisasi keefektifan sistem dari pecegahan bot tersebut: ini akan membantu kami menjaga jumlah dislike agar tetap bisa menjadi representasi dari jumlah yang asli. Tentu jumlahnya tidak akan akurat 100% jadi pada akhirnya itu semua terserah padamu untuk percaya atau tidak dengan jumlah dislikenya. + +### Mengapa kamu tidak memberikan kode backend? + +Kami akan memberikannya nanti pada satu waktu - tapi tidak ada alasan khusus untuk memberikanny sekarang. Itu memberikan rasa keamanan yang salah - karena pada sistem yang tidak terpercaya, kami bisa saja memberikan versi yang berdeda dengan yang kami deploy. Ada beberapa alsan lain untuk tetap menyembunyikan kodenya, terutama untuk memerangi spam. Menyembunyikan/menyamarkan kode penanganan spam adalah praktik yang cukup standar dilakukan. diff --git a/Docs/SECURITY-FAQnl.md b/Docs/SECURITY-FAQnl.md index f876a9d..9d628b0 100644 --- a/Docs/SECURITY-FAQnl.md +++ b/Docs/SECURITY-FAQnl.md @@ -1,30 +1,30 @@ -Lees dit in andere talen: [English](SECURITY_FAQ.md), [русский](SECURITY-FAQru.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [Tiếng Việt](SECURITY-FAQvi.md) +Lees dit in andere talen: [English](SECURITY_FAQ.md), [русский](SECURITY-FAQru.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [Deutsch](SECURITY-FAQde.md), [العربية](SECURITY-FAQar.md), [Bahasa Indonesia](SECURITY-FAQid.md), [中文](SECURITY-FAQcn.md), [български](SECURITY-FAQbg.md), [Tiếng Việt](SECURITY-FAQvi.md) # Veiligheid ### Houd je mijn kijkgeschiedenis bij? -Nee. De code van de extensie is openbaar en u kunt deze zelf zien. De enige informatie die wordt verzonden, is de video-ID, die -nodig is om het aantal dislikes voor de video's op te halen. Er worden geen extra headers verzonden. Via de communicatielaag -wordt uw openbare IP-adres zichtbaar voor de server, evenals het tijdstip waarop het verzoek is gedaan. Geen van deze -identificeert u echter op enigerlei wijze uniek. Uitgaande van een zero-trust-omgeving, is het beste wat we kunnen krijgen een -dynamisch IP-adres. Wat vandaag van jou is, morgen van je buurman. Als u zich echt zorgen maakt dat uw IP-adres wordt +Nee. De code van de extensie is openbaar en u kunt deze zelf zien. De enige informatie die wordt verzonden, is de video-ID, die +nodig is om het aantal dislikes voor de video's op te halen. Er worden geen extra headers verzonden. Via de communicatielaag +wordt uw openbare IP-adres zichtbaar voor de server, evenals het tijdstip waarop het verzoek is gedaan. Geen van deze +identificeert u echter op enigerlei wijze uniek. Uitgaande van een zero-trust-omgeving, is het beste wat we kunnen krijgen een +dynamisch IP-adres. Wat vandaag van jou is, morgen van je buurman. Als u zich echt zorgen maakt dat uw IP-adres wordt getraceerd, gebruikt u waarschijnlijk al een VPN. ### Kun je me uniek identificeren als ik een hekel heb? -Ja. Als je een video niet leuk vindt, maken we een willekeurig gegenereerde unieke ID voor je die niet is gekoppeld aan je -Google-account. Dit wordt gedaan om botting te voorkomen. Maar er is geen manier om deze willekeurige id aan jou of je +Ja. Als je een video niet leuk vindt, maken we een willekeurig gegenereerde unieke ID voor je die niet is gekoppeld aan je +Google-account. Dit wordt gedaan om botting te voorkomen. Maar er is geen manier om deze willekeurige id aan jou of je persoonlijke YouTube-account te koppelen. ### Welke informatie heb je precies? -Alleen de video-ID. Niet je opmerkingen, niet je gebruikersnaam, niet met wie je de video hebt gedeeld, geen aanvullende +Alleen de video-ID. Niet je opmerkingen, niet je gebruikersnaam, niet met wie je de video hebt gedeeld, geen aanvullende metadata. Niks. Alleen de video-ID. ### Hoe wordt mijn IP opgeslagen? -De backend bewaart niet-gehashte IP-adressen alleen in vluchtig geheugen (RAM). Deze adressen worden niet opgeslagen op een +De backend bewaart niet-gehashte IP-adressen alleen in vluchtig geheugen (RAM). Deze adressen worden niet opgeslagen op een harde schijf en worden daarom niet gelogd. We hashen de IP-adressen en dat wordt in plaats daarvan opgeslagen. Dit wordt gedaan om databasevandalisme te voorkomen. @@ -38,4 +38,4 @@ We hebben maatregelen genomen om botaanvallen te voorkomen en zullen blijven wer ### Waarom deel je de backend-code niet? -We zullen het op een gegeven moment delen - maar er is echt geen echte reden om het nu te delen. Het geeft een vals gevoel van veiligheid - omdat we in een zero-trust-systeem net zo goed de ene versie kunnen onthullen, maar een andere kunnen implementeren. Er zijn tal van redenen om de code verborgen te houden, met name hoe we spam bestrijden. Het verbergen/verduisteren van de spamverwerkingscode is een vrij standaardpraktijk. \ No newline at end of file +We zullen het op een gegeven moment delen - maar er is echt geen echte reden om het nu te delen. Het geeft een vals gevoel van veiligheid - omdat we in een zero-trust-systeem net zo goed de ene versie kunnen onthullen, maar een andere kunnen implementeren. Er zijn tal van redenen om de code verborgen te houden, met name hoe we spam bestrijden. Het verbergen/verduisteren van de spamverwerkingscode is een vrij standaardpraktijk. diff --git a/Docs/SECURITY-FAQpl.md b/Docs/SECURITY-FAQpl.md index f1d8106..35ff7b8 100644 --- a/Docs/SECURITY-FAQpl.md +++ b/Docs/SECURITY-FAQpl.md @@ -1,5 +1,4 @@ -Read this in other languages: [English](SECURITY-FAQ.md), [русский](SECURITY-FAQru.md), [Nederlands](SECURITY_FAQnl.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Tiếng Việt](SECURITY-FAQvi.md) - +Read this in other languages: [English](SECURITY-FAQ.md), [русский](SECURITY-FAQru.md), [Nederlands](SECURITY_FAQnl.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Deutsch](SECURITY-FAQde.md), [العربية](SECURITY-FAQar.md), [Bahasa Indonesia](SECURITY-FAQid.md), [中文](SECURITY-FAQcn.md), [български](SECURITY-FAQbg.md), [Tiếng Việt](SECURITY-FAQvi.md) # Security diff --git a/Docs/SECURITY-FAQpt_BR.md b/Docs/SECURITY-FAQpt_BR.md new file mode 100644 index 0000000..40c0be9 --- /dev/null +++ b/Docs/SECURITY-FAQpt_BR.md @@ -0,0 +1,31 @@ +Leia isso em outros idiomas: [русский](SECURITY-FAQru.md), [Nederlands](SECURITY_FAQnl.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [العربية](SECURITY-FAQar.md), [Bahasa Indonesia](SECURITY-FAQid.md), [中文](SECURITY-FAQcn.md) + +# Segurança + +### Are you tracking my viewing history? + +No. The extension's code is public and you can see it for yourself. The only information being sent is the video ID, which is required to fetch the dislike count for the videos. There are no additional headers being sent. Over the communication layer, your public IP will be exposed to the server, as well as the time when the request was made. However, none of these are uniquely identifying you in any way. Assuming a zero-trust environment, the best we could get is a dynamic IP. Which, today is yours, tomorrow is your neighbor's. If you're really worried about your IP being traced, you probably already use a VPN. + +### Can you uniquely identify me if I dislike? + +Yes. When you dislike a video, we create a randomly generated unique ID for you that is not tied to your Google account. This is done to prevent botting. But there is no way to tie this random Id to you or your personal YouTube account. + +### Quais as informações que você tem, exatamente? + +Somente seu video ID. Não temos seus comentarios, seu nome de usuario, ou qualquer outro Not your comments, not your username, not who you've shared the video with, not any additional metadata. NADA. Apenas seu Video ID. + +### How is my IP stored? + +The backend keeps unhashed IP addresses in volatile memory (RAM) only. These addresses aren't stored on a hard drive, and therefore aren't logged. We hash the IP addresses, and that's stored instead. This is done to prevent database vandalism. + +### I heard some discussion over OAuth, and access to my YouTube account! + +This feature will be optional, and very much opt-in. If you are a YouTube creator, and would like to share your dislike stats with us, you can. The way [OAuth](https://en.wikipedia.org/wiki/OAuth#:~:text=but%20without%20giving%20them%20the%20passwords.) was structured, it's actually very secure. You can revoke access to your account at any time, and can give very specific permissions to us. We will not ask for any permissions that aren't required. We'll only ask for permissions to view your video stats. + +### How can I trust this dislike count? + +We have implemented measures to prevent bot attacks and are gonna continue to work on improving the effectiveness of the bot prevention system: this will help us keep the dislike count as a good representative of the actual count. Of course it will never be 100% accurate so it's up to you to decide whether you trust the count or not. + +### Why don't you share the backend code? + +We will share it at some point - but there's really no real reason to share it right now. It gives a false sense of security - because in a zero-trust system, we could just as well disclose one version but deploy another. There are plenty of reasons to keep the code hidden, specifically, how we battle spam. Hiding/Obfuscating the spam handling code is a fairly standard practice. diff --git a/Docs/SECURITY-FAQru.md b/Docs/SECURITY-FAQru.md index d97c143..594c7cf 100644 --- a/Docs/SECURITY-FAQru.md +++ b/Docs/SECURITY-FAQru.md @@ -1,4 +1,4 @@ -Прочитать на других языках: [English](SECURITY-FAQ.md), [Nederlands](SECURITY_FAQnl.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [Tiếng Việt](SECURITY-FAQvi.md) +Прочитать на других языках: [English](SECURITY-FAQ.md), [Nederlands](SECURITY_FAQnl.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [Deutsch](SECURITY-FAQde.md), [العربية](SECURITY-FAQar.md), [Bahasa Indonesia](SECURITY-FAQid.md), [中文](SECURITY-FAQcn.md), [български](SECURITY-FAQbg.md), [Tiếng Việt](SECURITY-FAQvi.md) # Безопасность diff --git a/Docs/SECURITY-FAQtr.md b/Docs/SECURITY-FAQtr.md index 69b9607..7546a9e 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), [Nederlands](SECURITY_FAQnl.md), [Français](SECURITY-FAQfr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [Tiếng Việt](SECURITY-FAQvi.md) +Read this in other languages: [English](SECURITY-FAQ.md), [русский](SECURITY-FAQru.md), [Nederlands](SECURITY_FAQnl.md), [Français](SECURITY-FAQfr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [Deutsch](SECURITY-FAQde.md), [العربية](SECURITY-FAQar.md), [Bahasa Indonesia](SECURITY-FAQid.md), [中文](SECURITY-FAQcn.md), [български](SECURITY-FAQbg.md), [Tiếng Việt](SECURITY-FAQvi.md) # Güvenlik diff --git a/Docs/SECURITY-FAQuk.md b/Docs/SECURITY-FAQuk.md index 31ab7e6..2b64d1c 100644 --- a/Docs/SECURITY-FAQuk.md +++ b/Docs/SECURITY-FAQuk.md @@ -1,31 +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), [Polski](SECURITY-FAQpl.md), [Tiếng Việt](SECURITY-FAQvi.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 +Read this in other languages: [English](SECURITY-FAQ.md), [русский](SECURITY-FAQru.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [Polski](SECURITY-FAQpl.md), [Deutsch](SECURITY-FAQde.md), [العربية](SECURITY-FAQar.md), [Bahasa Indonesia](SECURITY-FAQid.md), [中文](SECURITY-FAQcn.md), [български](SECURITY-FAQbg.md), [Tiếng Việt](SECURITY-FAQvi.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%, тож ви самі вирішуєте, довіряти йому чи ні. + +### Чому б вам не поділитися внутрішнім кодом вашого сервера? + +Ми поділимося ним у якийсь момент – але зараз немає жодних причин це робити. Це дасть хибне почуття безпеки - адже в системі з нульовою довірою ми можемо з таким самим успіхом поділитися однією версією, але розгорнути іншу. Є багато причин тримати код у таємниці, зокрема, як ми боремося зі спамом. Приховування та затьмарення коду обробки спаму є доволі стандартною практикою. diff --git a/Docs/SECURITY_FAQar.md b/Docs/SECURITY_FAQar.md new file mode 100644 index 0000000..d327de4 --- /dev/null +++ b/Docs/SECURITY_FAQar.md @@ -0,0 +1,31 @@ +اقرأ هذا بلغات أخرى: [русский](SECURITY-FAQru.md), [Nederlands](SECURITY_FAQnl.md), [Français](SECURITY-FAQfr.md), [Türkçe](SECURITY-FAQtr.md), [українська](SECURITY-FAQuk.md), [Polski](SECURITY-FAQpl.md), [Deutsch](SECURITY-FAQde.md) + +# الأمان + +### هل تقومون بتتبع سجل المشاهدة الخاص بي؟ + +لا. كود الإضافة عام ويمكنك رؤيته بنفسك. المعلومات الوحيدة التي يتم إرسالها هي معرف الفيديو، وهو مطلوب لجلب عدد عدم الإعجاب للفيديوهات. لا يتم إرسال أي رؤوس إضافية. عبر طبقة الاتصال، سيتم كشف عنوان IP العام الخاص بك للخادم، وكذلك الوقت الذي تم فيه الطلب. ومع ذلك، لا يمكن لأي من هذه المعلومات تحديد هويتك بشكل فريد بأي طريقة. بافتراض بيئة عدم الثقة، أفضل ما يمكننا الحصول عليه هو عنوان IP ديناميكي. والذي، اليوم هو لك، وغدًا هو لجارك. إذا كنت قلقًا حقًا بشأن تتبع عنوان IP الخاص بك، فمن المحتمل أنك تستخدم VPN بالفعل. + +### هل يمكنكم تحديد هويتي بشكل فريد إذا قمت بعدم الإعجاب؟ + +نعم. عندما تقوم بعدم الإعجاب بفيديو، نقوم بإنشاء معرف فريد عشوائي لك غير مرتبط بحساب Google الخاص بك. يتم ذلك لمنع التلاعب. ولكن لا توجد طريقة لربط هذا المعرف العشوائي بك أو بحساب YouTube الشخصي الخاص بك. + +### ما هي المعلومات التي لديكم بالضبط؟ + +فقط معرف الفيديو. ليس تعليقاتك، وليس اسم المستخدم الخاص بك، وليس من شاركت الفيديو معه، وليس أي بيانات إضافية. لا شيء. فقط معرف الفيديو. + +### كيف يتم تخزين عنوان IP الخاص بي؟ + +يحتفظ الخلفية بعناوين IP غير المشفرة في الذاكرة المتطايرة (RAM) فقط. هذه العناوين لا يتم تخزينها على القرص الصلب، وبالتالي لا يتم تسجيلها. نقوم بتشفير عناوين IP، ويتم تخزين هذا التشفير بدلاً من ذلك. يتم ذلك لمنع تخريب قاعدة البيانات. + +### سمعت بعض النقاش حول OAuth والوصول إلى حساب YouTube الخاص بي! + +هذه الميزة ستكون اختيارية، وبشكل كبير تعتمد على الموافقة. إذا كنت منشئ محتوى على YouTube، وترغب في مشاركة إحصائيات عدم الإعجاب الخاصة بك معنا، يمكنك ذلك. الطريقة التي تم بها هيكلة [OAuth](https://en.wikipedia.org/wiki/OAuth#:~:text=but%20without%20giving%20them%20the%20passwords.) آمنة جدًا في الواقع. يمكنك إلغاء الوصول إلى حسابك في أي وقت، ويمكنك منحنا أذونات محددة جدًا. لن نطلب أي أذونات غير مطلوبة. سنطلب فقط الأذونات لعرض إحصائيات الفيديو الخاصة بك. + +### كيف يمكنني الوثوق بعدد عدم الإعجاب هذا؟ + +لقد قمنا بتنفيذ تدابير لمنع هجمات الروبوتات وسنواصل العمل على تحسين فعالية نظام منع الروبوتات: سيساعدنا ذلك في الحفاظ على عدد عدم الإعجاب كممثل جيد للعدد الفعلي. بالطبع لن يكون دقيقًا بنسبة 100% لذا الأمر متروك لك لتقرر ما إذا كنت تثق في العدد أم لا. + +### لماذا لا تشاركون كود الخلفية؟ + +سنشاركه في وقت ما - ولكن لا يوجد سبب حقيقي لمشاركته الآن. إنه يعطي إحساسًا زائفًا بالأمان - لأنه في نظام عدم الثقة، يمكننا الكشف عن إصدار واحد ولكن نشر آخر. هناك العديد من الأسباب للحفاظ على الكود مخفيًا، تحديدًا، كيفية مكافحة البريد العشوائي. إخفاء/تشويش كود معالجة البريد العشوائي هو ممارسة قياسية إلى حد ما. \ No newline at end of file diff --git a/Docs/readme.md b/Docs/readme.md index 306f49b..df160ec 100644 --- a/Docs/readme.md +++ b/Docs/readme.md @@ -1,4 +1,4 @@ -Read this in other languages: [Nederlands](readmenl.md), [Français](readmefr.md), [Türkçe](readmetr.md), [Tiếng Việt](readmevi.md) +Read this in other languages: [Nederlands](readmenl.md), [Français](readmefr.md), [Türkçe](readmetr.md), [Bahasa Indonesia](readmeid.md), [中文](readmecn.md), [Tiếng Việt](readmevi.md) **Contents** diff --git a/Docs/readmeaz.md b/Docs/readmeaz.md new file mode 100644 index 0000000..9177ca3 --- /dev/null +++ b/Docs/readmeaz.md @@ -0,0 +1,39 @@ +Read this in other languages: [English](readme.md), [Nederlands](readmenl.md), [Français](readmefr.md) + +**İçerikler** + +- [Bələdçilər](#rehberler) +- [Tez-tez verilən suallar](#sss'ler) + + +
+ +## Bələdçilər + +- [Yükləyin, quraşdırın və istifadə edin](https://github.com/Anarios/return-youtube-dislike/wiki/Downloading,-Installing-&-Using) +- [Problemlərin aradan qaldırılması](https://github.com/Anarios/return-youtube-dislike/wiki/Troubleshooting-Guide) + + + +
+ +## Tez-tez verilən suallar + +- [Ümumi](https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/FAQaz.md) +- [Təhlükəsizlik](https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQaz.md) + + diff --git a/Docs/readmecn.md b/Docs/readmecn.md new file mode 100644 index 0000000..c82d0f5 --- /dev/null +++ b/Docs/readmecn.md @@ -0,0 +1,39 @@ +阅读其他语言版本:[English](readme.md), [Nederlands](readmenl.md), [Français](readmefr.md), [Türkçe](readmetr.md) + +**目录** + +- [指南](#guides) +- [常见问题](#faqs) + + +
+ +## 指南 + +- [下载、安装和使用](https://github.com/Anarios/return-youtube-dislike/wiki/Downloading,-Installing-&-Using) +- [故障排除](https://github.com/Anarios/return-youtube-dislike/wiki/Troubleshooting-Guide) + + + +
+ +## 常见问题 + +- [常规](https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/FAQcn.md) +- [安全](https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQcn.md) + + \ No newline at end of file diff --git a/Docs/readmefr.md b/Docs/readmefr.md index 1d4285b..c44a26a 100644 --- a/Docs/readmefr.md +++ b/Docs/readmefr.md @@ -1,4 +1,4 @@ -Lisez ceci dans d'autres langues : [English](readme.md), [Nederlands](readmenl.md), [Türkçe](readmetr.md), [Tiếng Việt](readmevi.md) +Lisez ceci dans d'autres langues : [English](readme.md), [Nederlands](readmenl.md), [Türkçe](readmetr.md), [Bahasa Indonesia](readmeid.md), [中文](readmecn.md), [Tiếng Việt](readmevi.md) **Contenu** diff --git a/Docs/readmeid.md b/Docs/readmeid.md new file mode 100644 index 0000000..1fcb269 --- /dev/null +++ b/Docs/readmeid.md @@ -0,0 +1,39 @@ +Baca ini dibahasa lain: [Nederlands](readmenl.md), [Français](readmefr.md), [Türkçe](readmetr.md) + +**Isi** + +- [Petunjuk](#petunjuk) +- [Pertanyaan yang Sering Ditanyakan](#pertanyaan-yang-sering-ditanyakan) + + +
+ +## Petunjuk + +- [Mengunduh, Menginstall, dan Menggunakan](https://github.com/Anarios/return-youtube-dislike/wiki/Downloading,-Installing-&-Using) +- [Troubleshooting](https://github.com/Anarios/return-youtube-dislike/wiki/Troubleshooting-Guide) + + + +
+ +## Pertanyaan yang Sering Ditanyakan + +- [Umum](https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/FAQ.md) +- [Keamanan](https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQ.md) + + diff --git a/Docs/readmenl.md b/Docs/readmenl.md index 837ce56..7824849 100644 --- a/Docs/readmenl.md +++ b/Docs/readmenl.md @@ -1,4 +1,4 @@ -Read this in other languages: [English](readme.md), [Français](readmefr.md), [Türkçe](readmetr.md), [Tiếng Việt](readmevi.md) +Read this in other languages: [English](readme.md), [Français](readmefr.md), [Türkçe](readmetr.md), [Bahasa Indonesia](readmeid.md), [中文](readmecn.md), [Tiếng Việt](readmevi.md) **Inhoud** diff --git a/Docs/readmept_BR.md b/Docs/readmept_BR.md new file mode 100644 index 0000000..e55f566 --- /dev/null +++ b/Docs/readmept_BR.md @@ -0,0 +1,39 @@ +Leia isso em outros idiomas: [Nederlands](readmenl.md), [Français](readmefr.md), [Türkçe](readmetr.md), [Bahasa Indonesia](readmeid.md), [中文](readmecn.md) + +**Contents** + +- [Guides](#guides) +- [FAQs](#faqs) + + +
+ +## Guides + +- [Downloading, Installing & Using](https://github.com/Anarios/return-youtube-dislike/wiki/Downloading,-Installing-&-Using) +- [Troubleshooting](https://github.com/Anarios/return-youtube-dislike/wiki/Troubleshooting-Guide) + + + +
+ +## FAQs + +- [General](https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/FAQ.md) +- [Security](https://github.com/Anarios/return-youtube-dislike/blob/main/Docs/SECURITY-FAQ.md) + + diff --git a/Docs/readmetr.md b/Docs/readmetr.md index 332991f..05a7bec 100644 --- a/Docs/readmetr.md +++ b/Docs/readmetr.md @@ -1,4 +1,4 @@ -Read this in other languages: [English](readme.md), [Nederlands](readmenl.md), [Français](readmefr.md), [Tiếng Việt](readmevi.md) +Read this in other languages: [English](readme.md), [Nederlands](readmenl.md), [Français](readmefr.md), [Bahasa Indonesia](readmeid.md), [中文](readmecn.md), [Tiếng Việt](readmevi.md) **İçerikler** diff --git a/Extensions/UserScript/Return Youtube Dislike.user.js b/Extensions/UserScript/Return Youtube Dislike.user.js index 5b8f236..c513630 100644 --- a/Extensions/UserScript/Return Youtube Dislike.user.js +++ b/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 3.1.3 +// @version 3.1.5 // @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 @@ -28,6 +28,7 @@ const extConfig = { // You may change the following variables to allowed values listed in the corresponding brackets (* means default). Keep the style and keywords intact. showUpdatePopup: false, // [true, false*] Show a popup tab after extension update (See what's new) disableVoteSubmission: false, // [true, false*] Disable like/dislike submission (Stops counting your likes and dislikes) + disableLogging: true, // [true*, false] Disable Logging API Response in JavaScript Console. coloredThumbs: false, // [true, false*] Colorize thumbs (Use custom colors for thumb icons) coloredBar: false, // [true, false*] Colorize ratio bar (Use custom colors for ratio bar) colorTheme: "classic", // [classic*, accessible, neon] Color theme (red/green, blue/yellow, pink/cyan) @@ -35,6 +36,7 @@ const extConfig = { numberDisplayRoundDown: true, // [true*, false] Round down numbers (Show rounded down numbers) tooltipPercentageMode: "none", // [none*, dash_like, dash_dislike, both, only_like, only_dislike] Mode of showing percentage in like/dislike bar tooltip. numberDisplayReformatLikes: false, // [true, false*] Re-format like numbers (Make likes and dislikes format consistent) + rateBarEnabled: false, // [true, false*] Enables ratio bar under like/dislike buttons // END USER OPTIONS }; @@ -44,13 +46,16 @@ const NEUTRAL_STATE = "NEUTRAL_STATE"; let previousState = 3; //1=LIKED, 2=DISLIKED, 3=NEUTRAL let likesvalue = 0; let dislikesvalue = 0; +let preNavigateLikeButton = null; let isMobile = location.hostname == "m.youtube.com"; let isShorts = () => location.pathname.startsWith("/shorts"); let mobileDislikes = 0; function cLog(text, subtext = "") { - subtext = subtext.trim() === "" ? "" : `(${subtext})`; - console.log(`[Return YouTube Dislikes] ${text} ${subtext}`); + if (!extConfig.disableLogging) { + subtext = subtext.trim() === "" ? "" : `(${subtext})`; + console.log(`[Return YouTube Dislikes] ${text} ${subtext}`); + } } function isInViewport(element) { @@ -71,9 +76,7 @@ function isInViewport(element) { function getButtons() { if (isShorts()) { let elements = document.querySelectorAll( - isMobile - ? "ytm-like-button-renderer" - : "#like-button > ytd-like-button-renderer" + isMobile ? "ytm-like-button-renderer" : "#like-button > ytd-like-button-renderer", ); for (let element of elements) { if (isInViewport(element)) { @@ -93,23 +96,33 @@ function getButtons() { document.querySelector("ytd-menu-renderer.ytd-video-primary-info-renderer > div") ); } else { - return document - .getElementById("menu-container") - ?.querySelector("#top-level-buttons-computed"); + return document.getElementById("menu-container")?.querySelector("#top-level-buttons-computed"); } } function getDislikeButton() { - return getButtons().children[0].tagName === - "YTD-SEGMENTED-LIKE-DISLIKE-BUTTON-RENDERER" - ? getButtons().children[0].children[1] === undefined ? document.querySelector("#segmented-dislike-button") : getButtons().children[0].children[1] - : getButtons().querySelector("dislike-button-view-model") ?? getButtons().children[1]; + if (getButtons().children[0].tagName === "YTD-SEGMENTED-LIKE-DISLIKE-BUTTON-RENDERER") { + if (getButtons().children[0].children[1] === undefined) { + return document.querySelector("#segmented-dislike-button"); + } else { + return getButtons().children[0].children[1]; + } + } else { + if (getButtons().querySelector("segmented-like-dislike-button-view-model")) { + const dislikeViewModel = getButtons().querySelector("dislike-button-view-model"); + if (!dislikeViewModel) cLog("Dislike button wasn't added to DOM yet..."); + return dislikeViewModel; + } else { + return getButtons().children[1]; + } + } } function getLikeButton() { - return getButtons().children[0].tagName === - "YTD-SEGMENTED-LIKE-DISLIKE-BUTTON-RENDERER" - ? document.querySelector("#segmented-like-button") !== null ? document.querySelector("#segmented-like-button") : getButtons().children[0].children[0] + return getButtons().children[0].tagName === "YTD-SEGMENTED-LIKE-DISLIKE-BUTTON-RENDERER" + ? document.querySelector("#segmented-like-button") !== null + ? document.querySelector("#segmented-like-button") + : getButtons().children[0].children[0] : getButtons().querySelector("like-button-view-model") ?? getButtons().children[0]; } @@ -121,79 +134,80 @@ function getLikeTextContainer() { ); } - function getDislikeTextContainer() { + const dislikeButton = getDislikeButton(); let result = - getDislikeButton().querySelector("#text") ?? - getDislikeButton().getElementsByTagName("yt-formatted-string")[0] ?? - getDislikeButton().querySelector("span[role='text']") + dislikeButton?.querySelector("#text") ?? + dislikeButton?.getElementsByTagName("yt-formatted-string")[0] ?? + dislikeButton?.querySelector("span[role='text']"); if (result === null) { let textSpan = document.createElement("span"); textSpan.id = "text"; textSpan.style.marginLeft = "6px"; - getDislikeButton().querySelector("button").appendChild(textSpan); - getDislikeButton().querySelector("button").style.width = "auto"; - result = getDislikeButton().querySelector("#text"); + dislikeButton?.querySelector("button").appendChild(textSpan); + if (dislikeButton) dislikeButton.querySelector("button").style.width = "auto"; + result = textSpan; } return result; } -let mutationObserver = new Object(); - -if (isShorts() && mutationObserver.exists !== true) { - cLog("initializing mutation observer"); - mutationObserver.options = { - childList: false, - attributes: true, - subtree: false, +function createObserver(options, callback) { + const observerWrapper = new Object(); + observerWrapper.options = options; + observerWrapper.observer = new MutationObserver(callback); + observerWrapper.observe = function (element) { + this.observer.observe(element, this.options); }; - 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" - ) { - cLog("Short thumb button status changed"); - if (mutation.target.getAttribute("aria-pressed") === "true") { - mutation.target.style.color = - mutation.target.parentElement.parentElement.id === "like-button" - ? getColorFromTheme(true) - : getColorFromTheme(false); - } else { - mutation.target.style.color = "unset"; + observerWrapper.disconnect = function () { + this.observer.disconnect(); + }; + return observerWrapper; +} + +let shortsObserver = null; + +if (isShorts() && !shortsObserver) { + cLog("Initializing shorts mutation observer"); + shortsObserver = createObserver( + { + attributes: true, + }, + (mutationList) => { + 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") { + mutation.target.style.color = + mutation.target.parentElement.parentElement.id === "like-button" + ? getColorFromTheme(true) + : getColorFromTheme(false); + } else { + mutation.target.style.color = "unset"; + } + return; } - return; - } - cLog( - "unexpected mutation observer event: " + mutation.target + mutation.type - ); - }); - }); + cLog("Unexpected mutation observer event: " + mutation.target + mutation.type); + }); + }, + ); } function isVideoLiked() { if (isMobile) { - return ( - getLikeButton().querySelector("button").getAttribute("aria-label") == - "true" - ); + return getLikeButton().querySelector("button").getAttribute("aria-label") == "true"; } return getLikeButton().classList.contains("style-default-active"); } function isVideoDisliked() { if (isMobile) { - return ( - getDislikeButton().querySelector("button").getAttribute("aria-label") == - "true" - ); + return getDislikeButton()?.querySelector("button").getAttribute("aria-label") == "true"; } - return getDislikeButton().classList.contains("style-default-active"); + return getDislikeButton()?.classList.contains("style-default-active"); } function isVideoNotLiked() { @@ -207,7 +221,7 @@ function isVideoNotDisliked() { if (isMobile) { return !isVideoDisliked(); } - return getDislikeButton().classList.contains("style-text"); + return getDislikeButton()?.classList.contains("style-text"); } function checkForUserAvatarButton() { @@ -233,8 +247,7 @@ function getState() { function setLikes(likesCount) { if (isMobile) { - getButtons().children[0].querySelector(".button-renderer-text").innerText = - likesCount; + getButtons().children[0].querySelector(".button-renderer-text").innerText = likesCount; return; } getLikeTextContainer().innerText = likesCount; @@ -245,8 +258,12 @@ function setDislikes(dislikesCount) { mobileDislikes = dislikesCount; return; } - getDislikeTextContainer()?.removeAttribute('is-empty'); - getDislikeTextContainer().innerText = dislikesCount; + + const _container = getDislikeTextContainer(); + _container?.removeAttribute("is-empty"); + if (_container?.innerText !== dislikesCount) { + _container.innerText = dislikesCount; + } } function getLikeCountFromButton() { @@ -256,18 +273,14 @@ function getLikeCountFromButton() { //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 likeButton = + getLikeButton().querySelector("yt-formatted-string#text") ?? getLikeButton().querySelector("button"); - let likesStr = likeButton.getAttribute("aria-label") - .replace(/\D/g, ""); + let likesStr = likeButton.getAttribute("aria-label").replace(/\D/g, ""); return likesStr.length > 0 ? parseInt(likesStr) : false; - } - catch { + } catch { return false; } - } (typeof GM_addStyle != "undefined" @@ -290,10 +303,10 @@ function getLikeCountFromButton() { } .ryd-tooltip { - position: relative; + position: absolute; display: block; height: 2px; - top: 9px; + bottom: -10px; } .ryd-tooltip-bar-container { @@ -301,24 +314,28 @@ function getLikeCountFromButton() { height: 2px; position: absolute; padding-top: 6px; - padding-bottom: 28px; + padding-bottom: 12px; top: -6px; } + + ytd-menu-renderer.ytd-watch-metadata { + overflow-y: visible !important; + } + + #top-level-buttons-computed { + position: relative !important; + } `); function createRateBar(likes, dislikes) { - if (isMobile) { + if (isMobile || !extConfig.rateBarEnabled) { return; } let rateBar = document.getElementById("return-youtube-dislike-bar-container"); - const widthPx = - getButtons().children[0].clientWidth + - getButtons().children[1].clientWidth + - 8; + const widthPx = getLikeButton().clientWidth + (getDislikeButton()?.clientWidth ?? 52); - const widthPercent = - likes + dislikes > 0 ? (likes / (likes + dislikes)) * 100 : 50; + const widthPercent = likes + dislikes > 0 ? (likes / (likes + dislikes)) * 100 : 50; var likePercentage = parseFloat(widthPercent.toFixed(1)); const dislikePercentage = (100 - likePercentage).toLocaleString(); @@ -353,7 +370,7 @@ function createRateBar(likes, dislikes) { colorDislikeStyle = "; background-color: " + getColorFromTheme(false); } - document.getElementById("menu-container").insertAdjacentHTML( + getButtons().insertAdjacentHTML( "beforeend", `
@@ -372,25 +389,18 @@ function createRateBar(likes, dislikes) { ${tooltipInnerHTML}
-` +`, ); + let descriptionAndActionsElement = document.getElementById("top-row"); + descriptionAndActionsElement.style.borderBottom = "1px solid var(--yt-spec-10-percent-layer)"; + descriptionAndActionsElement.style.paddingBottom = "10px"; } else { - document.getElementById( - "return-youtube-dislike-bar-container" - ).style.width = widthPx + "px"; - document.getElementById("return-youtube-dislike-bar").style.width = - widthPercent + "%"; - - document.querySelector("#ryd-dislike-tooltip > #tooltip").innerHTML = - tooltipInnerHTML; + document.querySelector(".ryd-tooltip").style.width = widthPx + "px"; + document.getElementById("return-youtube-dislike-bar").style.width = widthPercent + "%"; if (extConfig.coloredBar) { - document.getElementById( - "return-youtube-dislike-bar-container" - ).style.backgroundColor = getColorFromTheme(false); - document.getElementById( - "return-youtube-dislike-bar" - ).style.backgroundColor = getColorFromTheme(true); + document.getElementById("return-youtube-dislike-bar-container").style.backgroundColor = getColorFromTheme(false); + document.getElementById("return-youtube-dislike-bar").style.backgroundColor = getColorFromTheme(true); } } } @@ -399,9 +409,7 @@ function setState() { cLog("Fetching votes..."); let statsSet = false; - fetch( - `https://returnyoutubedislikeapi.com/votes?videoId=${getVideoId()}` - ).then((response) => { + fetch(`https://returnyoutubedislikeapi.com/votes?videoId=${getVideoId()}`).then((response) => { response.json().then((json) => { if (json && !("traceId" in response) && !statsSet) { const { dislikes, likes } = json; @@ -417,31 +425,22 @@ function setState() { } createRateBar(likes, dislikes); if (extConfig.coloredThumbs === true) { + const dislikeButton = getDislikeButton(); 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" - ); + const shortLikeButton = getLikeButton().querySelector("tp-yt-paper-button#button"); + const shortDislikeButton = dislikeButton?.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 && shortDislikeButton.getAttribute("aria-pressed") === "true") { shortDislikeButton.style.color = getColorFromTheme(false); } - mutationObserver.observer.observe( - shortLikeButton, - mutationObserver.options - ); - mutationObserver.observer.observe( - shortDislikeButton, - mutationObserver.options - ); + shortsObserver.observe(shortLikeButton); + shortsObserver.observe(shortDislikeButton); } else { getLikeButton().style.color = getColorFromTheme(true); - getDislikeButton().style.color = getColorFromTheme(false); + if (dislikeButton) dislikeButton.style.color = getColorFromTheme(false); } } } @@ -449,22 +448,25 @@ function setState() { }); } +function updateDOMDislikes() { + setDislikes(numberFormat(dislikesvalue)); + createRateBar(likesvalue, dislikesvalue); +} + function likeClicked() { if (checkForUserAvatarButton() == true) { if (previousState == 1) { likesvalue--; - createRateBar(likesvalue, dislikesvalue); - setDislikes(numberFormat(dislikesvalue)); + updateDOMDislikes(); previousState = 3; } else if (previousState == 2) { likesvalue++; dislikesvalue--; - setDislikes(numberFormat(dislikesvalue)); - createRateBar(likesvalue, dislikesvalue); + updateDOMDislikes(); previousState = 1; } else if (previousState == 3) { likesvalue++; - createRateBar(likesvalue, dislikesvalue); + updateDOMDislikes(); previousState = 1; } if (extConfig.numberDisplayReformatLikes === true) { @@ -480,19 +482,16 @@ function dislikeClicked() { if (checkForUserAvatarButton() == true) { if (previousState == 3) { dislikesvalue++; - setDislikes(numberFormat(dislikesvalue)); - createRateBar(likesvalue, dislikesvalue); + updateDOMDislikes(); previousState = 2; } else if (previousState == 2) { dislikesvalue--; - setDislikes(numberFormat(dislikesvalue)); - createRateBar(likesvalue, dislikesvalue); + updateDOMDislikes(); previousState = 3; } else if (previousState == 1) { likesvalue--; dislikesvalue++; - setDislikes(numberFormat(dislikesvalue)); - createRateBar(likesvalue, dislikesvalue); + updateDOMDislikes(); previousState = 2; if (extConfig.numberDisplayReformatLikes === true) { const nativeLikes = getLikeCountFromButton(); @@ -512,7 +511,7 @@ function getVideoId() { const urlObject = new URL(window.location.href); const pathname = urlObject.pathname; if (pathname.startsWith("/clip")) { - return document.querySelector("meta[itemprop='videoId']").content; + return (document.querySelector("meta[itemprop='videoId']") || document.querySelector("meta[itemprop='identifier']")).content; } else { if (pathname.startsWith("/shorts")) { return pathname.slice(8); @@ -528,7 +527,12 @@ function isVideoLoaded() { const videoId = getVideoId(); return ( - document.querySelector(`ytd-watch-flexy[video-id='${videoId}']`) !== null + // desktop: spring 2024 UI + document.querySelector(`ytd-watch-grid[video-id='${videoId}']`) !== null || + // desktop: older UI + document.querySelector(`ytd-watch-flexy[video-id='${videoId}']`) !== null || + // mobile: no video-id attribute + document.querySelector('#player[loading="false"]:not([hidden])') !== null ); } @@ -547,9 +551,7 @@ function numberFormat(numberState) { } else { numberDisplay = roundDown(numberState); } - return getNumberFormatter(extConfig.numberDisplayFormat).format( - numberDisplay - ); + return getNumberFormatter(extConfig.numberDisplayFormat).format(numberDisplay); } function getNumberFormatter(optionSelect) { @@ -563,12 +565,10 @@ function getNumberFormatter(optionSelect) { userLocales = new URL( Array.from(document.querySelectorAll("head > link[rel='search']")) ?.find((n) => n?.getAttribute("href")?.includes("?locale=")) - ?.getAttribute("href") + ?.getAttribute("href"), )?.searchParams?.get("locale"); } catch { - cLog( - "Cannot find browser locale. Use en as default for number formatting." - ); + cLog("Cannot find browser locale. Use en as default for number formatting."); userLocales = "en"; } } @@ -625,6 +625,8 @@ function getColorFromTheme(voteIsLike) { return colorString; } +let smartimationObserver = null; + function setEventListeners(evt) { let jsInitChecktimer; @@ -632,21 +634,46 @@ function setEventListeners(evt) { //console.log(); if (isShorts() || (getButtons()?.offsetParent && isVideoLoaded())) { const buttons = getButtons(); + const dislikeButton = getDislikeButton(); - if (!window.returnDislikeButtonlistenersSet) { + if (preNavigateLikeButton !== getLikeButton() && dislikeButton) { cLog("Registering button listeners..."); try { getLikeButton().addEventListener("click", likeClicked); - getDislikeButton().addEventListener("click", dislikeClicked); + dislikeButton?.addEventListener("click", dislikeClicked); getLikeButton().addEventListener("touchstart", likeClicked); - getDislikeButton().addEventListener("touchstart", dislikeClicked); + dislikeButton?.addEventListener("touchstart", dislikeClicked); + dislikeButton?.addEventListener("focusin", updateDOMDislikes); + dislikeButton?.addEventListener("focusout", updateDOMDislikes); + preNavigateLikeButton = getLikeButton(); + + if (!smartimationObserver) { + smartimationObserver = createObserver( + { + attributes: true, + subtree: true, + childList: true, + }, + updateDOMDislikes, + ); + smartimationObserver.container = null; + } + + const smartimationContainer = buttons.querySelector("yt-smartimation"); + if (smartimationContainer && smartimationObserver.container != smartimationContainer) { + cLog("Initializing smartimation mutation observer"); + smartimationObserver.disconnect(); + smartimationObserver.observe(smartimationContainer); + smartimationObserver.container = smartimationContainer; + } } catch { return; } //Don't spam errors into the console - window.returnDislikeButtonlistenersSet = true; } - setInitialState(); - clearInterval(jsInitChecktimer); + if (dislikeButton) { + setInitialState(); + clearInterval(jsInitChecktimer); + } } } @@ -667,12 +694,11 @@ if (isMobile) { return originalPush.apply(history, args); }; setInterval(() => { - if(getDislikeButton().querySelector(".button-renderer-text") === null){ + const dislikeButton = getDislikeButton(); + if (dislikeButton?.querySelector(".button-renderer-text") === null) { getDislikeTextContainer().innerText = mobileDislikes; - } - else{ - getDislikeButton().querySelector(".button-renderer-text").innerText = - mobileDislikes; + } else { + if (dislikeButton) dislikeButton.querySelector(".button-renderer-text").innerText = mobileDislikes; } }, 1000); } diff --git a/Extensions/combined/_locales/az/messages.json b/Extensions/combined/_locales/az/messages.json new file mode 100644 index 0000000..8eeaa78 --- /dev/null +++ b/Extensions/combined/_locales/az/messages.json @@ -0,0 +1,135 @@ +{ + "extensionName": { + "message": "YouTube Dislike Sayını Geri Qaytar" + }, + "extensionNameBeta": { + "message": "YouTube Dislike Sayını Geri Qaytar Beta" + }, + "extensionDesc": { + "message": "Dislike-ları görmə qabiliyyəti verir" + }, + "textDeveloper": { + "message": "Dmitry Selivanov və İcma tərəfindən" + }, + "linkWebsite": { + "message": "Sayt" + }, + "linkFAQ": { + "message": "Tez-tez verilən suallar" + }, + "linkDonate": { + "message": "Bağış Et" + }, + "linkHelp": { + "message": "Kömək" + }, + "linkChangelog": { + "message": "Dəyişiklik Jurnalı" + }, + "legendSettings": { + "message": "Parametrlər" + }, + "textSettings": { + "message": "Like/dislike göndərməsini deaktiv et" + }, + "textLikesDisabled": { + "message": "Sahibi tərəfindən deaktiv edilib" + }, + "textSettingsHover": { + "message": "Like və dislike-larınızı saymağı dayandırır." + }, + "textRoundingNumbers": { + "message": "Like/dislike statistikasını aşağı yuvarlayır (standart YouTube davranışı)" + }, + "textRoundingNumbersHover": { + "message": "Yuvarlanmış statistikaları göstər." + }, + "textConsistentFormat": { + "message": "Like və dislike formatını uyğunlaşdırır" + }, + "textConsistentFormatHover": { + "message": "Like sayılarının formatını yeniləyir." + }, + "textNumberFormat": { + "message": "Sayı formatı:" + }, + "textColorizeRatioBar": { + "message": "Bəyənmə nisbəti çubuğunu rəngləndir" + }, + "textColorizeRatioBarHover": { + "message": "Nisbət çubuğu üçün xüsusi rənglər istifadə edin." + }, + "textColorizeThumbs": { + "message": "Düymələri rəngləndir" + }, + "textColorizeThumbsHover": { + "message": "Düymə simvolları üçün xüsusi rənglər istifadə edin." + }, + "textColorTheme": { + "message": "Rəng mövzusu:" + }, + "textColorTheme1": { + "message": "Klassik" + }, + "textColorTheme2": { + "message": "Aydın" + }, + "textColorTheme3": { + "message": "Neon" + }, + "textTempUnavailable": { + "message": "Müvəqqəti olaraq istifadədən kənar" + }, + "textUpdate": { + "message": "Bu versiyaya yenilə" + }, + "version30installed": { + "message": "Versiya __RYD_VERSION__ yükləndi" + }, + "whatsnew": { + "message": "Yeniliklər" + }, + "shortsSupport": { + "message": "YouTube Shorts Dəstəyi" + }, + "customColors": { + "message": "Dislike çubuğu və düymələr üçün xüsusi rənglər" + }, + "customNumberFormats": { + "message": "Xüsusi say formatları" + }, + "considerDonating": { + "message": "Uzantının mövcud olmasını təmin edən tək şey ianələrinizdir, lütfən layihəni dəstəkləməyi düşünün." + }, + "roundNumbers": { + "message": "Aşağı yuvarlanmış sayıları göstərir" + }, + "roundNumbersHover": { + "message": "Sayıları aşağıya yuvarla (standart YouTube davranışı)." + }, + "reformatLikes": { + "message": "Like sayılarının formatını yeniləyir" + }, + "reformatLikesHover": { + "message": "Like və dislike formatını uyğunlaşdırır." + }, + "numberFormat": { + "message": "Sayı formatı:" + }, + "colorizeRatio": { + "message": "Bəyənmə nisbəti çubuğunu rəngləndir" + }, + "colorizeRatioHover": { + "message": "Bəyənmə nisbəti çubuğu üçün xüsusi rənglər istifadə edin." + }, + "colorizeThumbs": { + "message": "Düymələri rəngləndir" + }, + "colorizeThumbsHover": { + "message": "Düymə simvolları üçün xüsusi rənglər istifadə edin." + }, + "colorTheme": { + "message": "Rəng mövzusu:" + } + } + \ No newline at end of file diff --git a/Extensions/combined/_locales/cs/messages.json b/Extensions/combined/_locales/cs/messages.json index edbd284..a786b6a 100644 --- a/Extensions/combined/_locales/cs/messages.json +++ b/Extensions/combined/_locales/cs/messages.json @@ -42,7 +42,7 @@ "message": "aktualizovat na" }, "version30installed": { - "message": "Verze 3.0.0.13 nainstalována" + "message": "Verze __RYD_VERSION__ nainstalována" }, "whatsnew": { "message": "Co je nového" diff --git a/Extensions/combined/_locales/de/messages.json b/Extensions/combined/_locales/de/messages.json index 8f22347..14c7804 100644 --- a/Extensions/combined/_locales/de/messages.json +++ b/Extensions/combined/_locales/de/messages.json @@ -9,7 +9,7 @@ "message": "Macht Dislikes wieder sichtbar" }, "textDeveloper": { - "message": "von Dmitry Selivanov & Community" + "message": "von Dmitry Selivanov & der Community" }, "linkWebsite": { "message": "Website" @@ -23,20 +23,68 @@ "linkHelp": { "message": "Hilfe" }, + "linkChangelog": { + "message": "Änderungshistorie" + }, "legendSettings": { "message": "Einstellungen" }, "textSettings": { "message": "Deaktiviere Like/Dislike-Übermittlung" }, + "textLikesDisabled": { + "message": "Deaktiviert vom Ersteller" + }, "textSettingsHover": { "message": "Stoppt deine Likes und Dislikes zu zählen." }, + "textRoundingNumbers": { + "message": "Runde Likes/Dislikes ab (Standardverhalten von YouTube)" + }, + "textRoundingNumbersHover": { + "message": "Zeige abgerundete Zahlen." + }, + "textConsistentFormat": { + "message": "Das Format der Likes und Dislikes einheitlich machen." + }, + "textConsistentFormatHover": { + "message": "Likes neu formatieren" + }, + "textNumberFormat": { + "message": "Zahlenformat:" + }, + "textColorizeRatioBar": { + "message": "Verhältnisbalken einfärben" + }, + "textColorizeRatioBarHover": { + "message": "Benutzerdefinierte Farben für die Verhältnisleiste verwenden." + }, + "textColorizeThumbs": { + "message": "Like/Dislike-Icons einfärben" + }, + "textColorizeThumbsHover": { + "message": "Benutzerdefinierte Farben für die Like/Dislike-Icons verwenden." + }, + "textColorTheme": { + "message": "Farbschema:" + }, + "textColorTheme1": { + "message": "Klassisch" + }, + "textColorTheme2": { + "message": "Barrierefrei" + }, + "textColorTheme3": { + "message": "Neon" + }, + "textTempUnavailable": { + "message": "Temporär nicht verfügbar" + }, "textUpdate": { - "message": "aktualisieren auf" + "message": "Aktualisieren auf" }, "version30installed": { - "message": "Version 3.0.0.13 installiert" + "message": "Version __RYD_VERSION__ installiert" }, "whatsnew": { "message": "Was ist neu" @@ -45,7 +93,7 @@ "message": "YouTube Shorts Unterstützung" }, "customColors": { - "message": "Benutzerdefinierte Farben für Dislike-Leiste und Buttons" + "message": "Benutzerdefinierte Farben für die Dislike-Leiste und Knopf" }, "customNumberFormats": { "message": "Benutzerdefinierte Zahlenformate" @@ -60,10 +108,10 @@ "message": "Zahlen abrunden (Standardverhalten von YouTube)." }, "reformatLikes": { - "message": "Wie Zahlen neu formatieren" + "message": "Likes neu formatieren" }, "reformatLikesHover": { - "message": "Machen Sie das Format der Vorlieben und Abneigungen konsistent." + "message": "Das Format der Likes und Dislikes einheitlich machen." }, "numberFormat": { "message": "Zahlenformat:" @@ -75,10 +123,10 @@ "message": "Benutzerdefinierte Farben für die Verhältnisleiste verwenden." }, "colorizeThumbs": { - "message": "Buttons einfärben" + "message": "Like/Dislike-Icons eifärben" }, "colorizeThumbsHover": { - "message": "Benutzerdefinierte Farben für die Schaltflächensymbole verwenden." + "message": "Benutzerdefinierte Farben für die Like/Dislike-Icons verwenden." }, "colorTheme": { "message": "Farbschema:" diff --git a/Extensions/combined/_locales/el/messages.json b/Extensions/combined/_locales/el/messages.json index 612627c..60f0746 100644 --- a/Extensions/combined/_locales/el/messages.json +++ b/Extensions/combined/_locales/el/messages.json @@ -1,12 +1,12 @@ { "extensionName": { - "message": "Επιστροφή του YouTube Dislike" + "message": "Επαναφορά του YouTube Dislike" }, "extensionNameBeta": { "message": "Return YouTube Dislike Beta" }, "extensionDesc": { - "message": "Επιστρέφει τα dislikes" + "message": "Επαναφέρει τη δυνατότητα να βλέπετε τα dislikes" }, "textDeveloper": { "message": "από τον Dmitry Selivanov & την κοινότητα" @@ -84,7 +84,7 @@ "message": "Ενημέρωση σε" }, "version30installed": { - "message": "Εκδοση 3.0.0.13 εγκαταστάθηκε" + "message": "Εκδοση __RYD_VERSION__ εγκαταστάθηκε" }, "whatsnew": { "message": "Τί νέο υπάρχει" diff --git a/Extensions/combined/_locales/en/messages.json b/Extensions/combined/_locales/en/messages.json index 0c8bc57..88ac951 100644 --- a/Extensions/combined/_locales/en/messages.json +++ b/Extensions/combined/_locales/en/messages.json @@ -84,7 +84,7 @@ "message": "Update to" }, "version30installed": { - "message": "Version 3.0.0.13 installed" + "message": "Version __RYD_VERSION__ installed" }, "whatsnew": { "message": "What's new" @@ -130,5 +130,17 @@ }, "colorTheme": { "message": "Color theme:" + }, + "showTooltipPercentage": { + "message": "Percentage in like/dislike bar tooltip." + }, + "showTooltipPercentageHover": { + "message": "Display percentage in like/dislike bar tooltip." + }, + "tooltipPercentageMode": { + "message": "Percent mode:" + }, + "tooltipPercentageModeHover": { + "message": "Use custom percentage display on hover." } } diff --git a/Extensions/combined/_locales/es/messages.json b/Extensions/combined/_locales/es/messages.json index 7a2f1c8..74412d8 100644 --- a/Extensions/combined/_locales/es/messages.json +++ b/Extensions/combined/_locales/es/messages.json @@ -84,7 +84,7 @@ "message": "actualizar a" }, "version30installed": { - "message": "Versión 3.0.0.13 instalada" + "message": "Versión __RYD_VERSION__ instalada" }, "whatsnew": { "message": "Novedades" @@ -130,5 +130,17 @@ }, "colorTheme": { "message": "Combinación de colores:" + }, + "showTooltipPercentage": { + "message": "Porcentaje en el tooltip de la barra de like/dislike." + }, + "showTooltipPercentageHover": { + "message": "Mostrar porcentaje en el tooltip de la barra de like/dislike." + }, + "tooltipPercentageMode": { + "message": "Modo de porcentaje:" + }, + "tooltipPercentageModeHover": { + "message": "Usar visualización de porcentaje personalizada al pasar el puntero." } } diff --git a/Extensions/combined/_locales/fr/messages.json b/Extensions/combined/_locales/fr/messages.json index a329d61..126ff8b 100644 --- a/Extensions/combined/_locales/fr/messages.json +++ b/Extensions/combined/_locales/fr/messages.json @@ -42,7 +42,7 @@ "message": "mettre à jour vers" }, "version30installed": { - "message": "Version 3.0.0.13 installée" + "message": "Version __RYD_VERSION__ installée" }, "whatsnew": { "message": "Quoi de neuf" diff --git a/Extensions/combined/_locales/hu/messages.json b/Extensions/combined/_locales/hu/messages.json new file mode 100644 index 0000000..eb21073 --- /dev/null +++ b/Extensions/combined/_locales/hu/messages.json @@ -0,0 +1,62 @@ +{ + "extensionName": { + "message": "Return YouTube Dislike" + }, + "extensionNameBeta": { + "message": "Return YouTube Dislike Beta" + }, + "extensionDesc": { + "message": "Visszaállítja a dislike számlálót" + }, + "textDeveloper": { + "message": "Készítő: Dmitry Selivanov & Community" + }, + "linkWebsite": { + "message": "Weboldal" + }, + "linkFAQ": { + "message": "GYIK" + }, + "linkDonate": { + "message": "Támogatás" + }, + "linkHelp": { + "message": "Segítség" + }, + "legendSettings": { + "message": "Beállítások" + }, + "textSettings": { + "message": "Like/Dislike beküldés kikapcsolása" + }, + "textLikesDisabled": { + "message": "tulajdonos által kikapcsolva" + }, + "textSettingsHover": { + "message": "Nem számolja tovább a like és dislike adataidat." + }, + "textTempUnavailable": { + "message": "temp n/a" + }, + "textUpdate": { + "message": "frissítés erre:" + }, + "version30installed": { + "message": "3.0.0.1 verzió telepítve" + }, + "whatsnew": { + "message": "Újdonságok" + }, + "shortsSupport": { + "message": "YouTube Shorts támogatás" + }, + "customColors": { + "message": "Egyéni színek a dislike csíkon és gombon" + }, + "customNumberFormats": { + "message": "Egyéni számformátum" + }, + "considerDonating": { + "message": "Ez a bővítmény kizárólag a támogatásoknak köszönhetően működik. Kérjük, támogasd a projektet!" + } +} diff --git a/Extensions/combined/_locales/id/messages.json b/Extensions/combined/_locales/id/messages.json new file mode 100644 index 0000000..18f00ce --- /dev/null +++ b/Extensions/combined/_locales/id/messages.json @@ -0,0 +1,134 @@ +{ + "extensionName": { + "message": "Return YouTube Dislike" + }, + "extensionNameBeta": { + "message": "Return YouTube Dislike Beta" + }, + "extensionDesc": { + "message": "Mengembalikan kemampuan untuk melihat jumlah dislike" + }, + "textDeveloper": { + "message": "oleh Dmitry Selivanov & Komunitas" + }, + "linkWebsite": { + "message": "Website" + }, + "linkFAQ": { + "message": "Pertanyaan" + }, + "linkDonate": { + "message": "Donasi" + }, + "linkHelp": { + "message": "Bantuan" + }, + "linkChangelog": { + "message": "Log Perubahan" + }, + "legendSettings": { + "message": "Pengaturan" + }, + "textSettings": { + "message": "Matikan pengiriman like/dislike" + }, + "textLikesDisabled": { + "message": "Dimatikan oleh Pemilik" + }, + "textSettingsHover": { + "message": "Memberhentikan penghitungan like dan dislikemu" + }, + "textRoundingNumbers": { + "message": "Membulatkan data like/dislike kebawah (bawaan YouTube)" + }, + "textRoundingNumbersHover": { + "message": "Munculkan data pembulatan kebawah." + }, + "textConsistentFormat": { + "message": "Membuat format like dan dislike konsisten" + }, + "textConsistentFormatHover": { + "message": "Format ulang jumlah like." + }, + "textNumberFormat": { + "message": "Format angka:" + }, + "textColorizeRatioBar": { + "message": "Warnai bar rasio" + }, + "textColorizeRatioBarHover": { + "message": "Gunakan warna kustom bar rasio." + }, + "textColorizeThumbs": { + "message": "Warnai jempol" + }, + "textColorizeThumbsHover": { + "message": "Gunakan warna kustom untuk ikon jempol." + }, + "textColorTheme": { + "message": "Warnai tema:" + }, + "textColorTheme1": { + "message": "Klasik" + }, + "textColorTheme2": { + "message": "Mudah diakses" + }, + "textColorTheme3": { + "message": "Neon" + }, + "textTempUnavailable": { + "message": "Tidak Ada Untuk Sementara Waktu" + }, + "textUpdate": { + "message": "Update ke" + }, + "version30installed": { + "message": "Versi __RYD_VERSION__ terinstall" + }, + "whatsnew": { + "message": "Apa yang baru" + }, + "shortsSupport": { + "message": "Mendukung YouTube Short" + }, + "customColors": { + "message": "Warna kustom untuk bar dislike dan tombol" + }, + "customNumberFormats": { + "message": "Format angka kustom" + }, + "considerDonating": { + "message": "Donasimulah yang hanya bisa membuat extension ini terus berjalan, tolong pertimbangkan untuk mendukung proyek ini." + }, + "roundNumbers": { + "message": "Munculkan angka yang dibulatkan kebawah" + }, + "roundNumbersHover": { + "message": "Bulatkan angka kebawah (bawaan YouTube)." + }, + "reformatLikes": { + "message": "Format ulang jumlah like" + }, + "reformatLikesHover": { + "message": "Membuat format like dan dislike konsisten." + }, + "numberFormat": { + "message": "Format angka:" + }, + "colorizeRatio": { + "message": "Warnai bar rasio" + }, + "colorizeRatioHover": { + "message": "Gunakan warna kustom untuk rasio bar." + }, + "colorizeThumbs": { + "message": "Warnai jempol" + }, + "colorizeThumbsHover": { + "message": "Gunakan warna kustom untuk ikon jempol." + }, + "colorTheme": { + "message": "Warnai tema:" + } +} diff --git a/Extensions/combined/_locales/it/messages.json b/Extensions/combined/_locales/it/messages.json index 3b0531a..9837110 100644 --- a/Extensions/combined/_locales/it/messages.json +++ b/Extensions/combined/_locales/it/messages.json @@ -6,81 +6,129 @@ "message": "Return YouTube Dislike Beta" }, "extensionDesc": { - "message": "Ripristina la possibilità di vedere i dislikes" + "message": "Riporta il numero di Non mi piace" }, "textDeveloper": { - "message": "grazie a Dmitry Selivanov e alla Comunità" + "message": "di Dmitry Selivanov e della comunità" }, "linkWebsite": { "message": "Sito web" }, "linkFAQ": { - "message": "Domande frequenti" + "message": "FAQ" }, "linkDonate": { - "message": "Fai una donazione" + "message": "Dona" }, "linkHelp": { "message": "Aiuto" }, + "linkChangelog": { + "message": "Note di versione" + }, "legendSettings": { "message": "Impostazioni" }, "textSettings": { - "message": "Disabilita l'invio dei like e dei dislike" + "message": "Disattiva invio di Mi piace/Non mi piace" + }, + "textLikesDisabled": { + "message": "Disattivati dal proprietario" }, "textSettingsHover": { - "message": "Interrompe il conteggio dei tuoi likes e dislikes da parte dell'estensione." + "message": "Smette di contare i tuoi Mi piace e Non mi piace." + }, + "textRoundingNumbers": { + "message": "Arrotonda per difetto il numero di Mi Piace/Non mi piace (comportamento standard di YouTube)." + }, + "textRoundingNumbersHover": { + "message": "Mostra stastistiche arrotondate per difetto." + }, + "textConsistentFormat": { + "message": "Rendi uniforme il formato di Mi piace e Non mi piace." + }, + "textConsistentFormatHover": { + "message": "Ri-formatta numero di Mi piace." + }, + "textNumberFormat": { + "message": "Formato numeri:" + }, + "textColorizeRatioBar": { + "message": "Colora barra di rapporto" + }, + "textColorizeRatioBarHover": { + "message": "Usa colori personalizzati per la barra di rapporto." + }, + "textColorizeThumbs": { + "message": "Colora pollici" + }, + "textColorizeThumbsHover": { + "message": "Usa colori personalizzati per le icone dei pollici." + }, + "textColorTheme": { + "message": "Colore tema:" + }, + "textColorTheme1": { + "message": "Classico" + }, + "textColorTheme2": { + "message": "Accessibile" + }, + "textColorTheme3": { + "message": "Neon" + }, + "textTempUnavailable": { + "message": "Temporaneamente non disponibile" }, "textUpdate": { - "message": "aggiorna a" + "message": "Aggiorna a" }, "version30installed": { - "message": "Versione 3.0.0.13 installata" + "message": "Versione __RYD_VERSION__ installata" }, "whatsnew": { - "message": "Quali sono le novità" + "message": "Novità" }, "shortsSupport": { "message": "Supporto per YouTube Shorts" }, "customColors": { - "message": "Colori personalizzati per la barra dei dislike e i bottoni" + "message": "Colori personalizzati per barra dei Non mi piace e bottoni" }, "customNumberFormats": { - "message": "Formati numerici personalizzati" + "message": "Formato numeri personalizzato" }, "considerDonating": { - "message": "Le uniche cosa che tengono in piedi il progetto sono le vostre donazioni. Per favore, considera di effettuare una donazione per supportarci. Grazie." + "message": "L'unica cosa che manda avanti questa estensione sono le tue donazioni, valuta se sostenere il progetto." }, "roundNumbers": { - "message": "Mostra i numeri arrotondati" + "message": "Mostra numeri arrotondati per difetto" }, "roundNumbersHover": { - "message": "Arrotonda il valore del conteggio (questa è l'opzione predefinita di YouTube)." + "message": "Arrotonda numeri per difetto (comportamento standard di YouTube)." }, "reformatLikes": { - "message": "Formatta il numero di like" + "message": "Ri-formatta numero Mi piace" }, "reformatLikesHover": { - "message": "Rende il valore delle statistiche più consistente." + "message": "Rendi uniforme il formato di Mi piace e Non mi piace." }, "numberFormat": { - "message": "Formato numerico" + "message": "Formato numeri:" }, "colorizeRatio": { - "message": "Colora la barra dei dislike" + "message": "Colora barra di rapporto" }, "colorizeRatioHover": { - "message": "Colora la barra dei dislike con colori personalizzati." + "message": "Usa colori personalizzati per la barra di rapporto." }, "colorizeThumbs": { - "message": "Colora i pulsanti" + "message": "Colora pollici" }, "colorizeThumbsHover": { - "message": "Colora i pulsanti dei like e dei dislike con colori personalizzati." + "message": "Usa colori personalizzati per le icone dei pollici." }, "colorTheme": { - "message": "Schema colori:" + "message": "Colore tema:" } } diff --git a/Extensions/combined/_locales/ja/messages.json b/Extensions/combined/_locales/ja/messages.json index 97bfb46..2515a0b 100644 --- a/Extensions/combined/_locales/ja/messages.json +++ b/Extensions/combined/_locales/ja/messages.json @@ -42,7 +42,7 @@ "message": "アップデート:" }, "version30installed": { - "message": "バージョン 3.0.0.13 がインストールされました。" + "message": "バージョン __RYD_VERSION__ がインストールされました。" }, "whatsnew": { "message": "新機能" diff --git a/Extensions/combined/_locales/ko/messages.json b/Extensions/combined/_locales/ko/messages.json index 7557ecc..a1cc6fb 100644 --- a/Extensions/combined/_locales/ko/messages.json +++ b/Extensions/combined/_locales/ko/messages.json @@ -84,7 +84,7 @@ "message": "업데이트" }, "version30installed": { - "message": "3.0.0.13 버전이 설치됨" + "message": "__RYD_VERSION__ 버전이 설치됨" }, "whatsnew": { "message": "새로운 점" diff --git a/Extensions/combined/_locales/nl/messages.json b/Extensions/combined/_locales/nl/messages.json index a7f04f6..1a08974 100644 --- a/Extensions/combined/_locales/nl/messages.json +++ b/Extensions/combined/_locales/nl/messages.json @@ -1,4 +1,5 @@ { + "extensionName": { "message": "Return YouTube Dislike" }, @@ -6,7 +7,7 @@ "message": "Return YouTube Dislike Beta" }, "extensionDesc": { - "message": "Retourneert het vermogen om dislikes te zien" + "message": "Herstelt de functie om dislikes te kunnen zien" }, "textDeveloper": { "message": "door Dmitry Selivanov & Gemeenschap" @@ -24,7 +25,7 @@ "message": "Help" }, "linkChangelog": { - "message": "Wijzig-log" + "message": "Wijzigingslog" }, "legendSettings": { "message": "Instellingen" @@ -51,7 +52,7 @@ "message": "Herformatteer als getallen." }, "textNumberFormat": { - "message": "Nummer formaat:" + "message": "Getalnotatie:" }, "textColorizeRatioBar": { "message": "Verhoudingsbalk inkleuren" @@ -60,13 +61,13 @@ "message": "Gebruik aangepaste kleuren voor de verhoudingsbalk." }, "textColorizeThumbs": { - "message": "Duimen inkleuren" + "message": "Duimpjes inkleuren" }, "textColorizeThumbsHover": { "message": "Gebruik aangepaste kleuren voor duimpictogrammen." }, "textColorTheme": { - "message": "Kleuren thema:" + "message": "Kleurenthema:" }, "textColorTheme1": { "message": "Klassiek" @@ -81,7 +82,7 @@ "message": "Tijdelijk niet beschikbaar" }, "textUpdate": { - "message": "Update naar" + "message": "Actualiseer naar" }, "version30installed": { "message": "Versie 3.0.0.13 geïnstalleerd" @@ -90,7 +91,7 @@ "message": "Wat is er nieuw" }, "shortsSupport": { - "message": "YouTube Shorts Ondersteuning" + "message": "Ondersteuning voor YouTube Shorts" }, "customColors": { "message": "Aangepaste kleuren voor afkeerbalk en knoppen" @@ -99,7 +100,7 @@ "message": "Aangepaste getalnotaties" }, "considerDonating": { - "message": "Het enige dat de extensie draaiende houdt, zijn uw donaties, overweeg alstublieft om het project te steunen." + "message": "Het enige dat de extensie draaiende houdt, zijn uw donaties. Overweeg alstublieft om het project te steunen." }, "roundNumbers": { "message": "Afgeronde getallen weergeven" @@ -114,7 +115,7 @@ "message": "Maak het formaat voor leuk en niet leuk consistent." }, "numberFormat": { - "message": "Nummer formaat:" + "message": "Getalnotatie:" }, "colorizeRatio": { "message": "Verhoudingsbalk inkleuren" @@ -123,12 +124,12 @@ "message": "Gebruik aangepaste kleuren voor de verhoudingsbalk." }, "colorizeThumbs": { - "message": "Duimen inkleuren" + "message": "Duimpjes inkleuren" }, "colorizeThumbsHover": { "message": "Gebruik aangepaste kleuren voor de duimpictogrammen." }, "colorTheme": { - "message": "Kleuren thema:" + "message": "Kleurenthema:" } - } +} diff --git a/Extensions/combined/_locales/pl/messages.json b/Extensions/combined/_locales/pl/messages.json index d613ade..67cee3b 100644 --- a/Extensions/combined/_locales/pl/messages.json +++ b/Extensions/combined/_locales/pl/messages.json @@ -84,7 +84,7 @@ "message": "Zaktualizuj do" }, "version30installed": { - "message": "Zainstalowana wersja 3.0.0.1" + "message": "Zainstalowana wersja __RYD_VERSION__" }, "whatsnew": { "message": "Co nowego" diff --git a/Extensions/combined/_locales/pt_BR/messages.json b/Extensions/combined/_locales/pt_BR/messages.json index d6d747e..08e1be3 100644 --- a/Extensions/combined/_locales/pt_BR/messages.json +++ b/Extensions/combined/_locales/pt_BR/messages.json @@ -1,15 +1,15 @@ { "extensionName": { - "message": "Voltar Dislikes do YouTube" + "message": "Volta Descurtidas do YouTube" }, "extensionNameBeta": { - "message": "Voltar Dislikes do YouTube Beta" + "message": "Volta Descurtidas do YouTube Beta" }, "extensionDesc": { - "message": "Voltar os Deslikes do YouTube" + "message": "Retorna a capacidade de ver descurtidas" }, "textDeveloper": { - "message": "por Dmitry Selivanov e Comunidade" + "message": "por Dmitry Selivanov & Comunidade" }, "linkWebsite": { "message": "Website" @@ -18,45 +18,117 @@ "message": "Perguntas Frequentes" }, "linkDonate": { - "message": "Doe" + "message": "Doar" }, "linkHelp": { "message": "Ajuda" }, + "linkChangelog": { + "message": "Registro de alterações" + }, "legendSettings": { "message": "Configurações" }, "textSettings": { - "message": "Desativar envio de Curtidas/Não Curtidas" + "message": "Desativar envio de curtidas/descurtidas" }, "textLikesDisabled": { "message": "Desativado pelo proprietário" }, "textSettingsHover": { - "message": "Parar de contar suas curtidas e não curtidas." + "message": "Para de contar suas curtidas e descurtidas." + }, + "textRoundingNumbers": { + "message": "Arredondar as estatísticas de curtidas/descurtidas para baixo (comportamento padrão do YouTube)" + }, + "textRoundingNumbersHover": { + "message": "Mostrar estatísticas arredondadas" + }, + "textConsistentFormat": { + "message": "Tornar o formato de curtidas e descurtidas consistente" + }, + "textConsistentFormatHover": { + "message": "Re-formatar número de curtidas." + }, + "textNumberFormat": { + "message": "Formato numérico:" + }, + "textColorizeRatioBar": { + "message": "Colorir barra de proporção" + }, + "textColorizeRatioBarHover": { + "message": "Usar cores personalizadas para a barra de proporção." + }, + "textColorizeThumbs": { + "message": "Colorir botões" + }, + "textColorizeThumbsHover": { + "message": "Usar cores personalizadas para os botões de curtir e descurtir." + }, + "textColorTheme": { + "message": "Tema de cores:" + }, + "textColorTheme1": { + "message": "Clássico" + }, + "textColorTheme2": { + "message": "Acessível" + }, + "textColorTheme3": { + "message": "Néon" }, "textTempUnavailable": { - "message": "Temporariamente indisponível" + "message": "Temporariamente Indisponível" }, "textUpdate": { "message": "Atualizar para" }, "version30installed": { - "message": "Versão 3.0.0.13 instalada" + "message": "Versão __RYD_VERSION__ instalada" }, "whatsnew": { - "message": "O que há de novo?" + "message": "O que há de novo?:" }, "shortsSupport": { - "message": "Suporte para Shorts" + "message": "Suporte a curtas do YouTube" }, "customColors": { - "message": "Cores personalizadas para barra de não curtidas e botões" + "message": "Cores personalizadas para barra de proporção e botões" }, "customNumberFormats": { - "message": "Formato de números personalizados" + "message": "Formato numérico personalizado" }, "considerDonating": { "message": "A única coisa que mantém a extensão funcionando são suas doações, considere apoiar o projeto." + }, + "roundNumbers": { + "message": "Mostrar números arredondados" + }, + "roundNumbersHover": { + "message": "Arredondar os números para baixo (comportamento padrão do YouTube)." + }, + "reformatLikes": { + "message": "Re-formatar número de curtidas" + }, + "reformatLikesHover": { + "message": "Tornar o formato de curtidas e descurtidas consistente." + }, + "numberFormat": { + "message": "Formato numérico:" + }, + "colorizeRatio": { + "message": "Colorir barra de proporção" + }, + "colorizeRatioHover": { + "message": "Usar cores personalizadas para a barra de proporção." + }, + "colorizeThumbs": { + "message": "Colorir botões" + }, + "colorizeThumbsHover": { + "message": "Usar cores personalizadas para os botões de curtir e descurtir." + }, + "colorTheme": { + "message": "Tema de Cores:" } } diff --git a/Extensions/combined/_locales/ru/messages.json b/Extensions/combined/_locales/ru/messages.json index b2bd428..9b5d4df 100644 --- a/Extensions/combined/_locales/ru/messages.json +++ b/Extensions/combined/_locales/ru/messages.json @@ -23,20 +23,68 @@ "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.13 установлена" + "message": "Версия __RYD_VERSION__ установлена" }, "whatsnew": { "message": "Что нового" diff --git a/Extensions/combined/_locales/sv_SE/messages.json b/Extensions/combined/_locales/sv_SE/messages.json index 35fa57c..69ec0de 100644 --- a/Extensions/combined/_locales/sv_SE/messages.json +++ b/Extensions/combined/_locales/sv_SE/messages.json @@ -84,7 +84,7 @@ "message": "Uppdatera till" }, "version30installed": { - "message": "Version 3.0.0.13 installerad" + "message": "Version __RYD_VERSION__ installerad" }, "whatsnew": { "message": "Vad är nytt" diff --git a/Extensions/combined/_locales/tr/messages.json b/Extensions/combined/_locales/tr/messages.json index a0ebde6..c5e0a69 100644 --- a/Extensions/combined/_locales/tr/messages.json +++ b/Extensions/combined/_locales/tr/messages.json @@ -84,7 +84,7 @@ "message": "Şu sürüme güncelle" }, "version30installed": { - "message": "Sürüm 3.0.0.13 yüklendi" + "message": "Sürüm __RYD_VERSION__ yüklendi" }, "whatsnew": { "message": "Yeni Ne Var" diff --git a/Extensions/combined/_locales/uk/messages.json b/Extensions/combined/_locales/uk/messages.json index 6c87e62..b723cee 100644 --- a/Extensions/combined/_locales/uk/messages.json +++ b/Extensions/combined/_locales/uk/messages.json @@ -84,7 +84,7 @@ "message": "Оновлення до" }, "version30installed": { - "message": "Версію 3.0.0.13 встановлено" + "message": "Версію __RYD_VERSION__ встановлено" }, "whatsnew": { "message": "Що нового" diff --git a/Extensions/combined/changelog/3/changelog_3.0.html b/Extensions/combined/changelog/3/changelog_3.0.html index 4ffe4bc..f127845 100644 --- a/Extensions/combined/changelog/3/changelog_3.0.html +++ b/Extensions/combined/changelog/3/changelog_3.0.html @@ -1,4 +1,4 @@ - + diff --git a/Extensions/combined/icons/logo.svg b/Extensions/combined/icons/logo.svg new file mode 100644 index 0000000..092f65a --- /dev/null +++ b/Extensions/combined/icons/logo.svg @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/Extensions/combined/manifest-chrome.json b/Extensions/combined/manifest-chrome.json index 9dc609c..00cf492 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.12", + "version": "__RYD_VERSION__", "manifest_version": 3, "background": { "service_worker": "ryd.background.js" @@ -11,8 +11,12 @@ "48": "icons/icon48.png", "128": "icons/icon128.png" }, - "host_permissions": ["*://*.youtube.com/*"], - "permissions": ["storage"], + "host_permissions": [ + "*://*.youtube.com/*" + ], + "permissions": [ + "storage" + ], "action": { "default_popup": "popup.html" }, @@ -23,18 +27,31 @@ "*://www.youtube.com/*", "*://m.youtube.com/*" ], - "exclude_matches": ["*://*.music.youtube.com/*"], - "js": ["ryd.content-script.js"], - "css": ["content-style.css"] + "exclude_matches": [ + "*://*.music.youtube.com/*" + ], + "js": [ + "ryd.content-script.js" + ], + "css": [ + "content-style.css" + ] } ], "externally_connectable": { - "matches": ["*://*.youtube.com/*"] + "matches": [ + "*://*.youtube.com/*" + ] }, "web_accessible_resources": [ { - "resources": ["ryd.script.js"], - "matches": ["*://*.youtube.com/*"] + "resources": [ + "ryd.script.js", + "menu-fixer.js" + ], + "matches": [ + "*://*.youtube.com/*" + ] } ], "options_ui": { diff --git a/Extensions/combined/manifest-firefox.json b/Extensions/combined/manifest-firefox.json index 7f0fb23..33de9f7 100644 --- a/Extensions/combined/manifest-firefox.json +++ b/Extensions/combined/manifest-firefox.json @@ -2,10 +2,12 @@ "name": "__MSG_extensionName__", "description": "__MSG_extensionDesc__", "default_locale": "en", - "version": "3.0.0.12", + "version": "__RYD_VERSION__", "manifest_version": 2, "background": { - "scripts": ["ryd.background.js"] + "scripts": [ + "ryd.background.js" + ] }, "icons": { "48": "icons/icon48.png", @@ -22,19 +24,31 @@ }, "content_scripts": [ { - "matches": ["*://*.youtube.com/*"], - "exclude_matches": ["*://*.music.youtube.com/*"], + "matches": [ + "*://*.youtube.com/*" + ], + "exclude_matches": [ + "*://*.music.youtube.com/*" + ], "run_at": "document_idle", - "css": ["content-style.css"], - "js": ["ryd.content-script.js"] + "css": [ + "content-style.css" + ], + "js": [ + "ryd.content-script.js" + ] } ], "options_ui": { "page": "popup.html", "open_in_tab": false - } - // uncomment this section for local storage to work in firefox locally - // "browser_specific_settings": { + }, + "web_accessible_resources": [ + "menu-fixer.js" + ] + + // uncomment this section for local storage to work in firefox locally, + // ,"browser_specific_settings": { // "gecko": { // "id": "addon@example.com", // "strict_min_version": "42.0" diff --git a/Extensions/combined/manifest-safari.json b/Extensions/combined/manifest-safari.json index 4a38cb3..0c7f8e3 100644 --- a/Extensions/combined/manifest-safari.json +++ b/Extensions/combined/manifest-safari.json @@ -2,7 +2,7 @@ "name": "__MSG_extensionName__", "description": "__MSG_extensionDesc__", "default_locale": "en", - "version": "3.0.0.8", + "version": "__RYD_VERSION__", "manifest_version": 2, "background": { "scripts": ["ryd.background.js"], diff --git a/Extensions/combined/menu-fixer.js b/Extensions/combined/menu-fixer.js new file mode 100644 index 0000000..73649a5 --- /dev/null +++ b/Extensions/combined/menu-fixer.js @@ -0,0 +1,61 @@ +function debounceAsync(func, wait, renderer) { + let timeout; + let lastCallTime = 0; + + return async function (...args) { + const context = this; + const now = Date.now(); + + if (!lastCallTime || now - lastCallTime > wait) { + // If the last call was long enough ago or this is the first call, execute immediately + lastCallTime = now; + return await func.apply(context, args); + } else { + // Hide all optional menu items - prevents endless loop + if (renderer?.polymerController?.flexAsTopLevelButtons) { + renderer.polymerController.flexAsTopLevelButtons = []; + } + + // Otherwise, delay the call + return new Promise((resolve) => { + clearTimeout(timeout); + timeout = setTimeout(async () => { + lastCallTime = Date.now(); + resolve(await func.apply(context, args)); + }, wait); + }); + } + }; +} + +const fixYtdMenuRenderer = (ytdMenuRenderer) => { + if (!ytdMenuRenderer?.polymerController?.maybeUpdateFlexibleMenuImpl) { + return; + } + const originalMaybeUpdateFlexibleMenuImpl = ytdMenuRenderer.polymerController.maybeUpdateFlexibleMenuImpl.bind( + ytdMenuRenderer.polymerController, + ); + + ytdMenuRenderer.polymerController.maybeUpdateFlexibleMenuImpl = debounceAsync( + originalMaybeUpdateFlexibleMenuImpl, + 100, + ytdMenuRenderer, + ); +}; + +const fixedYtdMenuRenderers = []; +const observer = new MutationObserver(() => { + const ytdMenuRenderers = [...document.querySelectorAll("ytd-menu-renderer")].filter( + (el) => !fixedYtdMenuRenderers.includes(el), + ); + if (!ytdMenuRenderers.length) return; + + for (const el of ytdMenuRenderers) { + fixYtdMenuRenderer(el); + fixedYtdMenuRenderers.push(el); + } +}); +observer.observe(document.documentElement, { + subtree: true, + childList: true, +}); diff --git a/Extensions/combined/popup.css b/Extensions/combined/popup.css index a5cdb7b..7a4a19c 100644 --- a/Extensions/combined/popup.css +++ b/Extensions/combined/popup.css @@ -1,20 +1,52 @@ /* Variables */ :root { - --primary: #cc2929; - --accent: #581111; + color-scheme: dark; - --background: #111; - --secondary: #272727; - --tertiary: #424242; + --primary: #cc2929; + --primary: #f39090; + --secondary: #502e2e; + --tertiary: #221818; + --background: #352929; + + --accent: #581111; --lightGrey: #999; - --white: #fff; } +/*** MATERIAL 3 ***/ +.m3-primary { + background: var(--primary) !important; + color: var(--background) !important; +} +.m3-btn { + background: var(--tertiary); + color: var(--primary); + transition: 0.4s; + border-radius: 4px; + font-weight: 500; + border-radius: 100em; + box-shadow: 0 5px 5px rgba(0,0,0,0.1); + margin: 0.25em; +} +.m3-btn:hover { + background: var(--secondary) !important; + color: var(--primary) !important; +} + +select { + border-radius: 1em; + background-color: var(--secondary); + color: var(--primary); + border: none; + outline: none; + padding: 3px 2px; +} +/*** END MATERIAL 3 ***/ + /* Window Styling */ html, body { background-color: var(--background); - color: var(--white); + color: var(--primary); min-width: 310px; min-height: 350px; padding: 0.5em; @@ -26,30 +58,19 @@ h1 { font-size: 26px; } -button { - color: var(--white); - background: var(--secondary); - cursor: pointer; - padding: 5px 16px; - border: none; - border-radius: 4px; - font-weight: 500; - /* box-shadow: 0 2px 4px -1px rgb(0 0 0 / 20%), 0 4px 5px 0 rgb(0 0 0 / 14%), - 0 1px 10px 0 rgb(0 0 0 / 12%); */ - transition: 0.4s; -} - -button:hover { - background: #444; -} - #ext-version { padding: 0.25rem 0.5rem; } +button { + cursor: pointer; + padding: 5px 16px; + border: none; +} + #ext-update { cursor: pointer; - color: var(--white); + color: var(--primary); text-decoration: none; background: var(--primary); border-radius: 0.25rem; @@ -74,7 +95,9 @@ button:hover { content: attr(data-hover); visibility: hidden; opacity: 0; - transition: visibility 0.1s linear, opacity 0.1s linear; + transition: + visibility 0.1s linear, + opacity 0.1s linear; width: 250px; background-color: var(--secondary); border-radius: 0.5rem; @@ -113,17 +136,17 @@ button:hover { position: fixed; background: none; box-shadow: none; - color: var(--lightGrey); + color: var(--primary); top: 26px; right: 26px; padding: 2px; z-index: 69; height: 2rem; width: 2rem; + transition-duration: .25s; } #advancedToggle:hover { - color: var(--white); transform: rotate(-90deg); } @@ -143,11 +166,10 @@ button:hover { right: 14px; width: calc(100% - 65px); height: calc(100% - 58px); - border: 2px solid var(--secondary); - border-radius: 0.5rem; padding: 1rem; overflow-y: auto; overflow-x: hidden; + border: none; } ::-webkit-scrollbar { @@ -159,7 +181,7 @@ button:hover { } ::-webkit-scrollbar-thumb { - background-color: #333; /* color of the scroll thumb */ + background-color: var(--primary); /* color of the scroll thumb */ border-radius: 1rem 0 0 1rem; /* roundness of the scroll thumb */ border-bottom: 0.25rem solid #111; /* creates padding around scroll thumb */ border-left: 0.25rem solid #111; /* creates padding around scroll thumb */ @@ -175,7 +197,7 @@ button:hover { } #advancedLegend { - color: var(--tertiary) !important; + color: var(--secondary) !important; /* margin: auto; */ /* Center the label */ /* padding: .25rem .5rem; */ /* border-radius: .25rem; */ @@ -226,7 +248,7 @@ button:hover { width: 13px; left: 2px; bottom: 2px; - background: var(--lightGrey); + background: var(--primary); transition: 0.4s; border-radius: 50%; } diff --git a/Extensions/combined/popup.html b/Extensions/combined/popup.html index 9bf53cd..782b60d 100644 --- a/Extensions/combined/popup.html +++ b/Extensions/combined/popup.html @@ -1,5 +1,7 @@ - + + + __MSG_extensionName__ @@ -11,15 +13,10 @@ rel="stylesheet" /> +
- - - - +

__MSG_extensionName__

@@ -27,27 +24,29 @@ __MSG_textDeveloper__

- - +
- - - +
-
- - __MSG_legendSettings__ - - + +
- +
+
+ +

@@ -175,17 +178,17 @@
__MSG_tooltipPercentageMode__