diff --git a/.gitignore b/.gitignore index 16d9811..8406374 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ yarn-debug.log* yarn-error.log* .vscode +.github/copilot-instructions.md diff --git a/docs/change/README.md b/docs/change/README.md index 93cd38c..7ecfd46 100644 --- a/docs/change/README.md +++ b/docs/change/README.md @@ -130,7 +130,6 @@ Beta 版本更新日志请查看 [Beta 更新日志](./beta.md) ### Added - ✨ 优化日志打印 [[8693b93](https://github.com/scriptscat/scriptcat/commit/8693b9338bdd916ffad58572949e67d14cc2c109)] -- ✨ 实现异步 GM 函数 ([8caebe9](https://github.com/scriptscat/scriptcat/commit/8caebe9ae4f6f6b304b54cbb870a4cebd6341704)) - ✨ 链接导入脚本时可以按回车键确定 ([#537](https://github.com/scriptscat/scriptcat/issues/537)) [[45a17df](https://github.com/scriptscat/scriptcat/commit/45a17df8f35a943a489c0f5980ac3f65fb0e8e5f)] (by @TC999) - ✨ 增加 Prettier 的 ESLint 统一代码格式化风格 [[0f84a19](https://github.com/scriptscat/scriptcat/commit/0f84a19c42823baab60f2b379d187073be7879f9)] - ✨ 安装/更新脚本时增加下拉框 [#508](https://github.com/scriptscat/scriptcat/issues/508) [[790584d](https://github.com/scriptscat/scriptcat/commit/790584d078eb4bbf2179aec5297c5574d7b30167)] diff --git a/docusaurus.config.js b/docusaurus.config.js index bfb7a41..dbd2f0a 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -26,7 +26,7 @@ const config = { // to replace "en" with "zh-Hans". i18n: { defaultLocale: "zh-Hans", - locales: ["zh-Hans", "en"], + locales: ["zh-Hans", "en", "ja", "ru", "vi", "de", "zh-Hant", "es", "fr", "ar", "it", "pt"], localeConfigs: { "zh-Hans": { label: "简体中文", @@ -38,6 +38,56 @@ const config = { direction: "ltr", htmlLang: "en", }, + ja: { + label: "日本語", + direction: "ltr", + htmlLang: "ja", + }, + ru: { + label: "Русский", + direction: "ltr", + htmlLang: "ru", + }, + vi: { + label: "Tiếng Việt", + direction: "ltr", + htmlLang: "vi", + }, + de: { + label: "Deutsch", + direction: "ltr", + htmlLang: "de", + }, + "zh-Hant": { + label: "繁體中文", + direction: "ltr", + htmlLang: "zh-Hant", + }, + es: { + label: "Español", + direction: "ltr", + htmlLang: "es", + }, + fr: { + label: "Français", + direction: "ltr", + htmlLang: "fr", + }, + ar: { + label: "العربية", + direction: "rtl", + htmlLang: "ar", + }, + it: { + label: "Italiano", + direction: "ltr", + htmlLang: "it", + }, + pt: { + label: "Português", + direction: "ltr", + htmlLang: "pt", + }, }, }, diff --git a/i18n/ar/code.json b/i18n/ar/code.json new file mode 100644 index 0000000..5569248 --- /dev/null +++ b/i18n/ar/code.json @@ -0,0 +1,170 @@ +{ + "theme.ErrorPageContent.title": { + "message": "هذه الصفحة تعطلت.", + "description": "The title of the fallback page when the page crashed" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "العودة إلى الأعلى", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "الأرشيف", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "الأرشيف", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "التنقل في قائمة مقالات المدونة", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "المقالات الأحدث", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "المقالات الأقدم", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "التنقل في مقالات المدونة", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "المقال الأحدث", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "المقال الأقدم", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "{count} مقالات", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} مقالات مُعلَّمة بـ \"{tagName}\"", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "عرض جميع العلامات", + "description": "The label of the link targeting the tag list page" + }, + "homepage.hero.title": { + "message": "ScriptCat", + "description": "The hero title on the homepage" + }, + "homepage.hero.subtitle": { + "message": "إضافة متصفح يمكنها تشغيل سكريبتات المستخدم، كل شيء يمكن برمجته، اجعل متصفحك يفعل المزيد!", + "description": "The hero subtitle on the homepage" + }, + "homepage.features.powerful.title": { + "message": "ميزات قوية", + "description": "Title for powerful features section" + }, + "homepage.features.powerful.description": { + "message": "متوافق تماماً مع Tampermonkey، سكريبتات الخلفية، سكريبتات مجدولة، واجهة برمجة تطبيقات غنية", + "description": "Description for powerful features section" + }, + "homepage.features.easy.title": { + "message": "سهل الاستخدام", + "description": "Title for easy to use section" + }, + "homepage.features.easy.description": { + "message": "محرر مدمج، إكمال تلقائي ذكي، فحص بناء الجملة، تطوير سكريبتات أكثر كفاءة", + "description": "Description for easy to use section" + }, + "homepage.features.secure.title": { + "message": "آمن وموثوق", + "description": "Title for secure and reliable section" + }, + "homepage.features.secure.description": { + "message": "آلية الحماية، إدارة الأذونات، ضمان تشغيل آمن للسكريبتات", + "description": "Description for secure and reliable section" + }, + "homepage.comments.lihengdao.username": { + "message": "لي هينغداو", + "description": "اسم المستخدم لي هينغداو في تعليقات المجتمع" + }, + "homepage.comments.lihengdao.description": { + "message": "مؤسس مشارك لـ Tampermonkey CN", + "description": "وصف لي هينغداو في تعليقات المجتمع" + }, + "homepage.comments.lihengdao.content": { + "message": "ScriptCat رائع تماماً!", + "description": "محتوى تعليق لي هينغداو" + }, + "homepage.comments.student.username": { + "message": "قلق بشأن الامتحانات", + "description": "اسم المستخدم الطالب في تعليقات المجتمع" + }, + "homepage.comments.student.description": { + "message": "طالب", + "description": "وصف الطالب في تعليقات المجتمع" + }, + "homepage.comments.student.content": { + "message": "شكراً لموارد التعلم الغنية في المجتمع، لقد تعلمت الكثير وتمكنت من تطوير مهاراتي التقنية بشكل أفضل. ScriptCat إضافة متصفح مفيدة جداً توفر لي وظائف مريحة وفعالة.", + "description": "محتوى تعليق الطالب" + }, + "homepage.comments.enncy.username": { + "message": "يان شياوشي (enncy)", + "description": "اسم المستخدم enncy في تعليقات المجتمع" + }, + "homepage.comments.enncy.description": { + "message": "مؤلف سكريبتات مشهور", + "description": "وصف enncy في تعليقات المجتمع" + }, + "homepage.comments.enncy.content": { + "message": "شكر صادق للمجتمع", + "description": "محتوى تعليق enncy" + }, + "homepage.comments.qianyu.username": { + "message": "تشيان يو", + "description": "اسم المستخدم تشيان يو في تعليقات المجتمع" + }, + "homepage.comments.qianyu.description": { + "message": "مستخدم Chrome", + "description": "وصف تشيان يو في تعليقات المجتمع" + }, + "homepage.comments.qianyu.content": { + "message": "في البداية، اعتقد الناس أن هذا مكون إضافي JS متخصص... حتى...", + "description": "محتوى تعليق تشيان يو" + }, + "homepage.comments.wwwwwllllk.username": { + "message": "wwwwwllllk", + "description": "اسم المستخدم wwwwwllllk في تعليقات المجتمع" + }, + "homepage.comments.wwwwwllllk.description": { + "message": "مطور واجهة أمامية", + "description": "وصف wwwwwllllk في تعليقات المجتمع" + }, + "homepage.comments.wwwwwllllk.content": { + "message": "استخدام ScriptCat لتحسين تجربتي على الإنترنت، مقابلة أشخاص متشابهين في التفكير في المجتمع.", + "description": "محتوى تعليق wwwwwllllk" + }, + "homepage.comments.oraer.username": { + "message": "Oraer", + "description": "اسم المستخدم Oraer في تعليقات المجتمع" + }, + "homepage.comments.oraer.description": { + "message": "مستخدم Chrome", + "description": "وصف Oraer في تعليقات المجتمع" + }, + "homepage.comments.oraer.content": { + "message": "أول لقاء مع Tampermonkey! تعلم Tampermonkey! تجاوز Tampermonkey!", + "description": "محتوى تعليق Oraer" + }, + "homepage.comments.bigonion.username": { + "message": "bigonion", + "description": "اسم المستخدم bigonion في تعليقات المجتمع" + }, + "homepage.comments.bigonion.description": { + "message": "مطور ScriptCat", + "description": "وصف bigonion في تعليقات المجتمع" + }, + "homepage.comments.bigonion.content": { + "message": "ScriptCat هو المستقبل.", + "description": "محتوى تعليق bigonion" + } +} diff --git a/i18n/de/code.json b/i18n/de/code.json new file mode 100644 index 0000000..58f8df3 --- /dev/null +++ b/i18n/de/code.json @@ -0,0 +1,134 @@ +{ + "theme.ErrorPageContent.title": { + "message": "Diese Seite ist abgestürzt.", + "description": "The title of the fallback page when the page crashed" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "Zurück nach oben", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "Archiv", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "Archiv", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "Navigation der Blog-Beiträge", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "Neuere Einträge", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "Ältere Einträge", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "Navigation der Blog-Beiträge", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "Neuerer Beitrag", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "Älterer Beitrag", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "{count} Beiträge", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} Beiträge mit dem Tag \"{tagName}\"", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "Alle Tags anzeigen", + "description": "The label of the link targeting the tag list page" + }, + "homepage.hero.title": { + "message": "ScriptCat", + "description": "The hero title on the homepage" + }, + "homepage.hero.subtitle": { + "message": "Eine Browser-Erweiterung, die Benutzerskripte ausführen kann, alles kann geskriptet werden, lassen Sie Ihren Browser mehr tun!", + "description": "The hero subtitle on the homepage" + }, + "homepage.features.powerful.title": { + "message": "Leistungsstarke Funktionen", + "description": "Title for powerful features section" + }, + "homepage.features.powerful.description": { + "message": "Vollständig kompatibel mit Tampermonkey, Hintergrundskripte, geplante Skripte, umfangreiche API", + "description": "Description for powerful features section" + }, + "homepage.features.easy.title": { + "message": "Einfach zu verwenden", + "description": "Title for easy to use section" + }, + "homepage.features.easy.description": { + "message": "Integrierter Editor, intelligente Vervollständigung, Syntaxprüfung, effizientere Skriptentwicklung", + "description": "Description for easy to use section" + }, + "homepage.features.secure.title": { + "message": "Sicher und zuverlässig", + "description": "Title for secure and reliable section" + }, + "homepage.features.secure.description": { + "message": "Sandbox-Mechanismus, Berechtigungsverwaltung, sichere Skriptausführung gewährleisten", + "description": "Description for secure and reliable section" + }, + "homepage.comments.lihengdao.username": { + "message": "Li Hengdao", + "description": "Li Hengdaos Benutzername in Community-Kommentaren" + }, + "homepage.comments.lihengdao.description": { + "message": "Mitbegründer von Tampermonkey CN", + "description": "Li Hengdaos Beschreibung in Community-Kommentaren" + }, + "homepage.comments.lihengdao.content": { + "message": "ScriptCat ist absolut fantastisch!", + "description": "Li Hengdaos Kommentarinhalt" + }, + "homepage.comments.student.username": { + "message": "Sorgen wegen Prüfungen", + "description": "Studentischer Benutzername in Community-Kommentaren" + }, + "homepage.comments.student.description": { + "message": "Student", + "description": "Studentische Beschreibung in Community-Kommentaren" + }, + "homepage.comments.student.content": { + "message": "Danke an die Community für die reichen Lernressourcen, ich habe viel gelernt und konnte meine technischen Fähigkeiten besser entwickeln. ScriptCat ist eine sehr nützliche Browser-Erweiterung, die mir praktische und effiziente Funktionen bietet.", + "description": "Studentischer Kommentarinhalt" + }, + "homepage.comments.enncy.username": { + "message": "Yan Xiaoxi (enncy)", + "description": "enncys Benutzername in Community-Kommentaren" + }, + "homepage.comments.enncy.description": { + "message": "Berühmter Skript-Autor", + "description": "enncys Beschreibung in Community-Kommentaren" + }, + "homepage.comments.enncy.content": { + "message": "Herzlichen Dank an die Community", + "description": "enncys Kommentarinhalt" + }, + "homepage.comments.qianyu.username": { + "message": "Qian Yu", + "description": "Qian Yus Benutzername in Community-Kommentaren" + }, + "homepage.comments.qianyu.description": { + "message": "Chrome-Benutzer", + "description": "Qian Yus Beschreibung in Community-Kommentaren" + }, + "homepage.comments.qianyu.content": { + "message": "Anfangs dachten die Leute, das sei ein Nischen-JS-Plugin... bis...", + "description": "Qian Yus Kommentarinhalt" + } +} diff --git a/i18n/en/code.json b/i18n/en/code.json index 814b8ef..5bf55b0 100644 --- a/i18n/en/code.json +++ b/i18n/en/code.json @@ -395,6 +395,89 @@ "message": "License Agreement", "description": "Footer copyright license link" }, + "homepage.comments.lihengdao.username": { + "message": "Li Hengdao", + "description": "Li Hengdao's username in community comments" + }, + "homepage.comments.lihengdao.description": { + "message": "Co-founder of Tampermonkey CN", + "description": "Li Hengdao's description in community comments" + }, + "homepage.comments.lihengdao.content": { + "message": "ScriptCat is absolutely amazing!", + "description": "Li Hengdao's comment content" + }, + "homepage.comments.student.username": { + "message": "Worried About Exams", + "description": "Student user's username in community comments" + }, + "homepage.comments.student.description": { + "message": "Student", + "description": "Student user's description in community comments" + }, + "homepage.comments.student.content": { + "message": "Thanks to the rich learning resources in the community, I have benefited greatly and can better develop my technical abilities. ScriptCat is a very useful browser extension that provides me with convenient and efficient functionality.", + "description": "Student user's comment content" + }, + "homepage.comments.enncy.username": { + "message": "Yan Xiaoxi (enncy)", + "description": "Enncy's username in community comments" + }, + "homepage.comments.enncy.description": { + "message": "Famous Script Author", + "description": "Enncy's description in community comments" + }, + "homepage.comments.enncy.content": { + "message": "Heartfelt thanks to the community", + "description": "Enncy's comment content" + }, + "homepage.comments.qianyu.username": { + "message": "Qian Yu", + "description": "Qian Yu's username in community comments" + }, + "homepage.comments.qianyu.description": { + "message": "Chrome User", + "description": "Qian Yu's description in community comments" + }, + "homepage.comments.qianyu.content": { + "message": "At first, people thought this was a niche JS plugin... until...", + "description": "Qian Yu's comment content" + }, + "homepage.comments.wwwwwllllk.username": { + "message": "wwwwwllllk", + "description": "wwwwwllllk's username in community comments" + }, + "homepage.comments.wwwwwllllk.description": { + "message": "Frontend Developer", + "description": "wwwwwllllk's description in community comments" + }, + "homepage.comments.wwwwwllllk.content": { + "message": "Using ScriptCat to improve my internet experience, meeting like-minded people in the community.", + "description": "wwwwwllllk's comment content" + }, + "homepage.comments.oraer.username": { + "message": "Oraer", + "description": "Oraer's username in community comments" + }, + "homepage.comments.oraer.description": { + "message": "Chrome User", + "description": "Oraer's description in community comments" + }, + "homepage.comments.oraer.content": { + "message": "First encounter with Tampermonkey! Learning Tampermonkey! Surpassing Tampermonkey!", + "description": "Oraer's comment content" + }, + "homepage.comments.bigonion.username": { + "message": "bigonion", + "description": "bigonion's username in community comments" + }, + "homepage.comments.bigonion.description": { + "message": "ScriptCat Developer", + "description": "bigonion's description in community comments" + }, + "homepage.comments.bigonion.content": { + "message": "ScriptCat is the future.", + "description": "bigonion's comment content" "uninstall.title": { "message": "Uninstall Survey", "description": "Title of the uninstall survey page" diff --git a/i18n/en/docusaurus-plugin-content-docs/current/about/README.md b/i18n/en/docusaurus-plugin-content-docs/current/about/README.md new file mode 100644 index 0000000..f21293b --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/about/README.md @@ -0,0 +1,19 @@ +--- +sidebar: false +title: About +description: About ScriptCat description +icon: info +--- + +## About ScriptCat + +ScriptCat is inspired by Tampermonkey's design philosophy and supports Tampermonkey scripts. It implements a background script execution framework, provides special APIs that allow scripts to do more, and offers an excellent editor to make script development more comfortable and smooth. + +For our development plans, please see: [Project #1](https://github.com/scriptscat/scriptcat/projects/1), where we publish our development roadmap. If you have any good suggestions, you can also submit an [issue](https://github.com/scriptscat/scriptcat/issues) to give us feedback. + +**If you find it useful, please give us a Star ❤❤❤** + +## Tampermonkey Chinese Community +> [Visit Here](https://bbs.tampermonkey.net.cn/) + +Tampermonkey Chinese Community is a community we created for the development and exchange of Tampermonkey scripts. In the forum, we have very rich script learning materials and many experts. You can communicate in the forum and ask questions to the experts. We also provide script publishing and installation, allowing everyone to freely share their scripts. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/change/README.md b/i18n/en/docusaurus-plugin-content-docs/current/change/README.md new file mode 100644 index 0000000..e21e9b0 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/change/README.md @@ -0,0 +1,757 @@ +--- +id: change +sidebar_position: 1 +--- + +# Changelog + +For Beta version changelog, please see [Beta Changelog](./beta.md) + +⚠️ Please note: If you are using Windows 8/7/XP systems, or browser kernel version lower than <120, you need to manually install the [legacy ScriptCat](https://bbs.tampermonkey.net.cn/thread-3068-1-1.html). v0.16.x is the last version that supports Manifest V2. For installation steps, please refer to: [Install Extension via Load Unpacked](/docs/use/use/#install-extension-via-load-unpacked). + +## 1.0.1 (2025-08-16) + +Quick fixes for some major issues + +### Fixed + +- 🐛 Fix certain matching cases [#629](https://github.com/scriptscat/scriptcat/issues/629) [[3334b0c](https://github.com/scriptscat/scriptcat/commit/3334b0cb40138ddaad30b54f516df83316b8bb64)] +- 🐛 Fix resource hash verification [[db7d6c7](https://github.com/scriptscat/scriptcat/commit/db7d6c7351a88f35709163b610e0f5b1fda79a33)] +- 🐛 Fix issue where some .user.js links cannot install scripts [#599](https://github.com/scriptscat/scriptcat/issues/599) [[61f7ad1](https://github.com/scriptscat/scriptcat/commit/61f7ad111b40ba0bbd2f04bb2c3e72713116237f)] +- 🐛 Fix @connect * not working issue [#623](https://github.com/scriptscat/scriptcat/issues/623) [[744c182](https://github.com/scriptscat/scriptcat/commit/744c18227d8f89ce6f65d6ae70d7f002aec410dd)] + + + +## 1.0.0 (2025-08-12) + +🎉 v1.0.0 release, thank you very much for everyone's support! + +### Added + +- ✨ Optimize log printing [[8693b93](https://github.com/scriptscat/scriptcat/commit/8693b9338bdd916ffad58572949e67d14cc2c109)] +- ✨ Implement async GM functions ([#492](https://github.com/scriptscat/scriptcat/issues/492)) [[cb8edf7](https://github.com/scriptscat/scriptcat/commit/cb8edf7809667068f4a2682afba82bc24302d717)] (by @cyfung1031) +- ✨ Allow pressing Enter to confirm when importing scripts via link ([#537](https://github.com/scriptscat/scriptcat/issues/537)) [[45a17df](https://github.com/scriptscat/scriptcat/commit/45a17df8f35a943a489c0f5980ac3f65fb0e8e5f)] (by @TC999) +- ✨ Add Prettier ESLint unified code formatting style [[0f84a19](https://github.com/scriptscat/scriptcat/commit/0f84a19c42823baab60f2b379d187073be7879f9)] +- ✨ Add dropdown when installing/updating scripts [#508](https://github.com/scriptscat/scriptcat/issues/508) [[790584d](https://github.com/scriptscat/scriptcat/commit/790584d078eb4bbf2179aec5297c5574d7b30167)] +- ✨ Add individual script update check option [#508](https://github.com/scriptscat/scriptcat/issues/508) [[41ac880](https://github.com/scriptscat/scriptcat/commit/41ac880855fafe3a4e7a87cc05169f77d8a8f59c)] +- ✨ Support GoogleDrive ([#490](https://github.com/scriptscat/scriptcat/issues/490)) [[dc38f7f](https://github.com/scriptscat/scriptcat/commit/dc38f7f38fca13febe197a3ced4e817cacec5920)] (by @wangyizhi) +- ✨ Add UserConfig ordering [[1874a35](https://github.com/scriptscat/scriptcat/commit/1874a3520668edc6ba947f8deb12148b5c5befa9)] +- ✨ No longer check for updates when closing [#562](https://github.com/scriptscat/scriptcat/issues/562) [[25cec66](https://github.com/scriptscat/scriptcat/commit/25cec66ee81192c6898b20ff133c78ad15039a84)] +- ✨ Add tooltip for last update ([#564](https://github.com/scriptscat/scriptcat/issues/564)) [[39ede21](https://github.com/scriptscat/scriptcat/commit/39ede219157840d2de5b4a846ab339612db8fb94)] (by @cyfung1031) +- ✨ Add badge and menu settings and adjust settings page [#573](https://github.com/scriptscat/scriptcat/issues/573) [[23e9b19](https://github.com/scriptscat/scriptcat/commit/23e9b19912c64ed2dafeabd66513519e1465b00e)] +- ⚡ Optimize resource loading, parallel loading of async resources ([#574](https://github.com/scriptscat/scriptcat/issues/574)) ([5910c0b](https://github.com/scriptscat/scriptcat/commit/5910c0b3baf540aeb1f12fed5a4796eef3dec71c)) by @zhangenming +- ✨ Enable switch to separately control incognito mode and main window [#571](https://github.com/scriptscat/scriptcat/issues/571) [[38a33b1](https://github.com/scriptscat/scriptcat/commit/38a33b107275be0e1b2aa31eaa2055939c5356f0)] +- ✨ Optimize installation, permissions and other window opening interactions [[0d9ba53](https://github.com/scriptscat/scriptcat/commit/0d9ba53ba3b42f948eb82b34a7257eb46b973055)] +- ✨ Enable monitoring when installing local scripts [#275](https://github.com/scriptscat/scriptcat/issues/275) ([d9b0eee](https://github.com/scriptscat/scriptcat/commit/d9b0eeede1a8b114f79a43fade99d825323c63f6)) + +### Changed + +- ⚡ Optimize script resource loading ([4651ae4](https://github.com/scriptscat/scriptcat/commit/4651ae4964a94af83a5cc23c02be4b351db7dce9)) +- ⚡ Strengthen error checking, add custom eslint-rules ([#542](https://github.com/scriptscat/scriptcat/issues/542)) [[c5ac3e3](https://github.com/scriptscat/scriptcat/commit/c5ac3e34176b10ab5f52e705da3d0764aae5519d)] (by @cyfung1031) +- ⚡ React optimization ([#530](https://github.com/scriptscat/scriptcat/issues/530)) [[45f73b7](https://github.com/scriptscat/scriptcat/commit/45f73b72b2a907d7e74929a571b24160982edbbb)] (by @cyfung1031) +- ♻️ Refactor MainWorld sandbox proxyContext (performance optimization, maintain TM sandbox behavior) ([#524](https://github.com/scriptscat/scriptcat/issues/524)) [[331087c](https://github.com/scriptscat/scriptcat/commit/331087c2e86580fc514fe5ffb4c2b1e665d4da71)] (by @cyfung1031) +- ⚡ React component key ([#526](https://github.com/scriptscat/scriptcat/issues/526)) [[df995ed](https://github.com/scriptscat/scriptcat/commit/df995ed2e63800cf523e8ba868bed991829894ef)] (by @cyfung1031) +- 💄 Adjust UI ([#523](https://github.com/scriptscat/scriptcat/issues/523)) [[ec1fcd2](https://github.com/scriptscat/scriptcat/commit/ec1fcd27083dce2b988e9aecade215f097978c8e)] (by @rkscv) +- ⚡ GM optimization and other updates ([#519](https://github.com/scriptscat/scriptcat/issues/519)) [[3d3be2c](https://github.com/scriptscat/scriptcat/commit/3d3be2ccae3a5218ecca91605f6b483a8d9aa2e4)] (by @cyfung1031) +- ⚡ GM injection optimization ([#517](https://github.com/scriptscat/scriptcat/issues/517)) [[1d6d52a](https://github.com/scriptscat/scriptcat/commit/1d6d52af3ff75cf547216284e0e837f3a44e7639)] (by @cyfung1031) +- ⚡ Minor adjustments ([#512](https://github.com/scriptscat/scriptcat/issues/512)) [[b3ceea3](https://github.com/scriptscat/scriptcat/commit/b3ceea35edb29bf735cb75f216c041d18cf901d3)] (by @cyfung1031) +- 📝 Update documentation ([#488](https://github.com/scriptscat/scriptcat/issues/488)) [[89b9848](https://github.com/scriptscat/scriptcat/commit/89b984866e90f0fd610da973b0952d801fe07a27)] +- ⚡ TreeShaking ([#509](https://github.com/scriptscat/scriptcat/issues/509)) [[4e70591](https://github.com/scriptscat/scriptcat/commit/4e705916a406d13eb09ee1aa2839b6ffeb484222)] (by @cyfung1031) +- 🎨 Modify .d.ts [#475](https://github.com/scriptscat/scriptcat/issues/475) [[a3adc00](https://github.com/scriptscat/scriptcat/commit/a3adc00708232835463d8f2ac6c49d7de259cb4f)] +- ⚡ Accelerate Render ([#491](https://github.com/scriptscat/scriptcat/issues/491)) [[1b266be](https://github.com/scriptscat/scriptcat/commit/1b266bec9b17053ea046f25ce0aab2f32afb6e9c)] (by @cyfung1031) +- 🎨 Fix eslint issues ([f49e20f](https://github.com/scriptscat/scriptcat/commit/f49e20faa78ca377f3404323cd13a5a7a5c27dca)) +- ♻️ Adjust update page opening code [[9ea0708](https://github.com/scriptscat/scriptcat/commit/9ea0708a4d6c793caf4cbfe9b760db1fbdc1b453)] +- ⚡ TimeoutError judgment ([#565](https://github.com/scriptscat/scriptcat/issues/565)) [[6a9a830](https://github.com/scriptscat/scriptcat/commit/6a9a8309379f5406a29aa8bee6ad8de106c85f57)] (by @cyfung1031) +- ⚡ Fix ScriptList redraw, icon display and other issues + other visual element modifications ([#559](https://github.com/scriptscat/scriptcat/issues/559)) [[f9e6c44](https://github.com/scriptscat/scriptcat/commit/f9e6c44358757e904d58df4e91f67215fc9278ad)] (by @cyfung1031) +- ⚡ Modify messageFlag format to avoid conflicts with other page code ([#561](https://github.com/scriptscat/scriptcat/issues/561)) [[182a631](https://github.com/scriptscat/scriptcat/commit/182a631788b779a61aa126776b3edad4434a898e)] (by @cyfung1031) +- ♻️ xhr native response only taken once ([#550](https://github.com/scriptscat/scriptcat/issues/550)) [[3a8a464](https://github.com/scriptscat/scriptcat/commit/3a8a464)] +- 🎨 Adjust menu options [#573](https://github.com/scriptscat/scriptcat/issues/573) [[3677278](https://github.com/scriptscat/scriptcat/commit/367727851faf7ec73b9d751fab5787219d77fe9a)] + +### Fixed + +- 🐛 Fix script list checkbox filtering failure issue [#507](https://github.com/scriptscat/scriptcat/issues/507) [[8830490](https://github.com/scriptscat/scriptcat/commit/8830490007102d91df1f7dd4647f9fdf3de1417b)] +- 🐛 Set script name width to fixed width [#495](https://github.com/scriptscat/scriptcat/issues/495) [[33edabd](https://github.com/scriptscat/scriptcat/commit/33edabdb7bbde618f6a88237f15fd6e87d4ee4ab)] +- 🐛 Adjust init ([#543](https://github.com/scriptscat/scriptcat/issues/543)) [[0341d3c](https://github.com/scriptscat/scriptcat/commit/0341d3cf0442fc2e9c4c6dba4fbfb3a89dc522f1)] (by @cyfung1031) +- 🐛 favicon timeout ([#540](https://github.com/scriptscat/scriptcat/issues/540)) [[4484f01](https://github.com/scriptscat/scriptcat/commit/4484f0180895fd53c3f03045c758de8fdad49679)] (by @cyfung1031) +- 🐛 Fix GM download done property loss issue [[ed465e8](https://github.com/scriptscat/scriptcat/commit/ed465e8622277643286b9d32ccb62947230f5706)] +- 🐛 MV3 compatibility with Opera and Firefox adjustments ([#534](https://github.com/scriptscat/scriptcat/issues/534)) [[645a58f](https://github.com/scriptscat/scriptcat/commit/645a58f67af9f2d6b69ffbbb5e0d008dc726d80b)] (by @cyfung1031) +- 🐛 React code format lint ([#536](https://github.com/scriptscat/scriptcat/issues/536)) [[9ab4b22](https://github.com/scriptscat/scriptcat/commit/9ab4b225e803c337bf9c86f77fc2c64200ee4635)] (by @cyfung1031) +- 🐛 Fix textarea placeholder line break issue ([#538](https://github.com/scriptscat/scriptcat/issues/538)) [[9de4bb6](https://github.com/scriptscat/scriptcat/commit/9de4bb6cc02ca15363a2491eee2c9b387ebf5c4b)] (by @rkscv) +- 💚 Fix lint issues [[8cf0ce8](https://github.com/scriptscat/scriptcat/commit/8cf0ce8ebd172aec86b9f250711e4375fc00aa81)] +- 🐛 Fix GM_cookie.set operation [#520](https://github.com/scriptscat/scriptcat/issues/520) [[3d49376](https://github.com/scriptscat/scriptcat/commit/3d493768678b86c0a0f48040e7670a69bd714547)] +- 🐛 Fix finalUrl issue [[93fe904](https://github.com/scriptscat/scriptcat/commit/93fe904ed3cd4e819ca4549e77d288884022e0f2)] +- 🐛 Fix script loading failure due to special characters in script name [#516](https://github.com/scriptscat/scriptcat/issues/516) [[07631ef](https://github.com/scriptscat/scriptcat/commit/07631ef972b456574b2a0ed4e9ce4298b084c5e7)] +- 🐛 Fix sandbox keyword causing background scripts to fail [[e11dd11](https://github.com/scriptscat/scriptcat/commit/e11dd113cadcb0216448b4019d4f8cfba8522129)] +- 🐛 Fix GM API loading issue [[9f6bffc](https://github.com/scriptscat/scriptcat/commit/9f6bffc323cf524d767a0aa66b8e09411d6476c7)] +- 🐛 Fix Google Drive authorization prompt issue [[b08187a](https://github.com/scriptscat/scriptcat/commit/b08187a9f580ebe8fca4f313315028e8895d09a7)] +- 🐛 Compatible with TM's GM_info [#478](https://github.com/scriptscat/scriptcat/issues/478) [[de49c50](https://github.com/scriptscat/scriptcat/commit/de49c50f1835acdaec7c47782deb55811e676f88)] +- 🐛 Handle narrow screen display issues [#495](https://github.com/scriptscat/scriptcat/issues/495) [[a23f6d1](https://github.com/scriptscat/scriptcat/commit/a23f6d1e12863149e026dfe1691861a17deaeed8)] +- 🐛 Handle GM_setValue return value [#493](https://github.com/scriptscat/scriptcat/issues/493) [[dfc24a5](https://github.com/scriptscat/scriptcat/commit/dfc24a50bc71f4cb65d1e81f520ce4c350696d19)] +- 🐛 addStyle code fix ([#500](https://github.com/scriptscat/scriptcat/issues/500)) [[1f346cc](https://github.com/scriptscat/scriptcat/commit/1f346cc64e26b148b402756731e5d22a6260ccca)] (by @cyfung1031) +- 🐛 Fix GM.xmlHttpRequest onload event [#570](https://github.com/scriptscat/scriptcat/issues/570) [[553b944](https://github.com/scriptscat/scriptcat/commit/553b9442bf21340ce32871d01309919295b946fd)] +- 🐛 Fix special characters in export files [#558](https://github.com/scriptscat/scriptcat/issues/558) [[17505f0](https://github.com/scriptscat/scriptcat/commit/17505f076e46249467a90a32f51b10ed3170205a)] +- 🐛 Fix editor issues in development mode and edit change issues [[340d3cc](https://github.com/scriptscat/scriptcat/commit/340d3cca28cbef16e5a6678753d3676899760703)] +- 🐛 Optimize authorization management and GM XHR error handling [#556](https://github.com/scriptscat/scriptcat/issues/556) close [#556](https://github.com/scriptscat/scriptcat/issues/556) [[21e20d3](https://github.com/scriptscat/scriptcat/commit/21e20d35bee04cbad512cdd43ae38f82f08a612f)] +- 🐛 Fix resource verification issue [#563](https://github.com/scriptscat/scriptcat/issues/563) [[110a772](https://github.com/scriptscat/scriptcat/commit/110a77273648f6e8fda3b1e7e9015fb885f67dec)] +- 🐛 Fix GM_xmlhttpRequest not supporting special method issue [#555](https://github.com/scriptscat/scriptcat/issues/555) [[3bf4300](https://github.com/scriptscat/scriptcat/commit/3bf4300844e79963da52d278c4c90708b83d7904)] +- 🐛 Fix subscription list showing blank page issue [#553](https://github.com/scriptscat/scriptcat/issues/553) [[be65405](https://github.com/scriptscat/scriptcat/commit/be65405b02c72d2b00a833bc3aa4d478279ec851)] +- 🐛 Fix dropdown option display incomplete issue ([#552](https://github.com/scriptscat/scriptcat/issues/552)) ([73564d7](https://github.com/scriptscat/scriptcat/commit/73564d7dfbee2e0168c658e9b7a6802d2bab04b0)) +- 🐛 Fix GM_xmlhttpRequest event issues [#549](https://github.com/scriptscat/scriptcat/issues/549) [[d25a707](https://github.com/scriptscat/scriptcat/commit/d25a707609911ff589121b18421e87edd66d255d)] +- 🐛 Handle beta version opening changelog [[cf699a9](https://github.com/scriptscat/scriptcat/commit/cf699a9bcdceac732f1e82a031056e1a44a73120)] +- 🐛 Fix GM cookie list incomplete retrieval issue [[3046200](https://github.com/scriptscat/scriptcat/commit/3046200562e7f92e307cb4a52e32723f67490f2d)] +- 🐛 Fix concurrent menu creation error [#580](https://github.com/scriptscat/scriptcat/issues/580) [[4855fec](https://github.com/scriptscat/scriptcat/commit/4855fec67a89bb36ab0f1855bc679926a0e74dc3)] +- 🐛 Handle some special sandbox keywords ([9ced958](https://github.com/scriptscat/scriptcat/commit/9ced958144f2d883c9044e6e4ad4f9dd53951ece)) +- 🐛 Fix script settings site matching update continuously accumulating include issue [#581](https://github.com/scriptscat/scriptcat/issues/581) [[9d31872](https://github.com/scriptscat/scriptcat/commit/9d31872775116d60e093f7ca31d62449963f059d)] + +### Miscellaneous + +- 🌐 Add Russian translation ([ea056b0](https://github.com/scriptscat/scriptcat/commit/ea056b088c4404df860f151ce67aadcc48257765)) +- 🌐 Remove language mapping ([ab66fb5](https://github.com/scriptscat/scriptcat/commit/ab66fb5eb01762299164379d151c29b8139135ad)) +- 🌐 Match by prefix ([505e112](https://github.com/scriptscat/scriptcat/commit/505e112d3ccb3365da2bb403f37bc6482a59051b)) +- ⬆️ Upgrade vitest [[bbc2550](https://github.com/scriptscat/scriptcat/commit/bbc2550fe2ed5105a1d27666ec68ca484e424ac3)] +- 🌐 Add i18n translation ([#525](https://github.com/scriptscat/scriptcat/issues/525)) [[8f677ce](https://github.com/scriptscat/scriptcat/commit/8f677cea06cc3f31902276b18112d353f4f3730e)] (by @cyfung1031) +- 📝 Fix documentation pnpm error ([#527](https://github.com/scriptscat/scriptcat/issues/527)) [[324301a](https://github.com/scriptscat/scriptcat/commit/324301ab1b448e778c50bed47d40a18d9db76786)] (by @cyfung1031) +- 🌐 Fix i18n path [[4fc50cd](https://github.com/scriptscat/scriptcat/commit/4fc50cd15ed871f675ad3cdcb48fc91c0e3abd91)] +- 🧪 Add GM.* unit tests [[4e91b36](https://github.com/scriptscat/scriptcat/commit/4e91b36b64220153fefe8b3a91575e0c302bf757)] +- ⚡ Faster script import ([#498](https://github.com/scriptscat/scriptcat/issues/498)) ([6b7ee3d](https://github.com/scriptscat/scriptcat/commit/6b7ee3d177b7d48e59e1e31053d9007265a4d5cc)) +- ♻️ Library reference cleanup ([#494](https://github.com/scriptscat/scriptcat/issues/494)) ([55e2ecd](https://github.com/scriptscat/scriptcat/commit/55e2ecd35ffbf41a8e07eadf2da89f0afbc3685e)) +- 🔨 Add changelog generation script ([a4f5dd4](https://github.com/scriptscat/scriptcat/commit/a4f5dd4c096a593c23a33d72a04352ceb016f50a)) +- 📝 Update README [[b1d64f0](https://github.com/scriptscat/scriptcat/commit/b1d64f011e81ebd6a07ac2cd6ee62ecb23ec1c2a)] +- 📝 Update README ([b20e36e](https://github.com/scriptscat/scriptcat/commit/b20e36ef889bae990c765d9c361434c5261fcbd1)) +- Merge branch 'release/mv3' [[eead31f](https://github.com/scriptscat/scriptcat/commit/eead31fa67a06c47bde214427b9860b3a1c98a3d)] +- 🌐 Handle arco i18n issue [#507](https://github.com/scriptscat/scriptcat/issues/507) [[79ad287](https://github.com/scriptscat/scriptcat/commit/79ad287553e0bb679c2ab811dc924b9e18059c4c)] +- 👷 Adjust eslint rules [[ee54ff6](https://github.com/scriptscat/scriptcat/commit/ee54ff676db7b5761abc48be0d2b1cef465fb40f)] +- 🔨 Modify changelog generation script [[924d4f8](https://github.com/scriptscat/scriptcat/commit/924d4f8d28e3764301112993ebb8e7f96a7a96fd)] +- 📝 Release v0.19.0-beta [[25fcffc](https://github.com/scriptscat/scriptcat/commit/25fcffcd43d5c08d77ebe32cfa6ea8eb70186038)] +- 🌐 Issue template provides English version [[37217d4](https://github.com/scriptscat/scriptcat/commit/37217d423d7e410893c68ef74963a6c14c38fafe)] +- 📝 Adjust readme [[acb5731](https://github.com/scriptscat/scriptcat/commit/acb5731df5141052312251073e1408426242b2e4)] +- 🌐 Update i18n README.md ([#487](https://github.com/scriptscat/scriptcat/issues/487)) [[a0d6417](https://github.com/scriptscat/scriptcat/commit/a0d641782666315eed4937d6e62bff6944d65e9d)] (by @MaxZhang) +- 👷 Add .codecov.yml [[ee297d5](https://github.com/scriptscat/scriptcat/commit/ee297d520802ead748fd3969e065fb19b42ca87f)] +- 🌐 Update translation [[82214d0](https://github.com/scriptscat/scriptcat/commit/82214d09fa0696fe3366277ca21ae80164dea676)] +- 🌐 Handle default translation issue English based on Chinese, other languages based on English ([70a739c](https://github.com/scriptscat/scriptcat/commit/70a739ce25f89286f9289e70d5183278f1893572)) + +**Full Changelog**: https://github.com/scriptscat/scriptcat/compare/v0.18.2...v1.0.0 + + + + +## 0.18.2 (2025-07-08) + +> v0.18.2-beta version content is identical to this version + +### Added + +- ✨ Add script search and batch pinning to script editing list [#462](https://github.com/scriptscat/scriptcat/issues/462) [[7c6ba17](https://github.com/scriptscat/scriptcat/commit/7c6ba1783275fbdd60c74170d5374826100e183d)] +- ✨ Display corresponding prompts based on browser kernel version [[b0cb2b9](https://github.com/scriptscat/scriptcat/commit/b0cb2b9c76019059beb6eb7f73eeeccd1097adfc)] +- ✨ Add delete script button to script editing list [#466](https://github.com/scriptscat/scriptcat/issues/466) [[4042845](https://github.com/scriptscat/scriptcat/commit/40428457a75d5879d99e6b0e5438993404c61ad6)] +- ✨ Add script storage panel with batch editing support ([#458](https://github.com/scriptscat/scriptcat/issues/458)) [[1d7800a](https://github.com/scriptscat/scriptcat/commit/1d7800a8e9576638a746c0cbafb3e3a663cd37d0)] (by @DreamNya) +- ✨ Implement manual script execution order adjustment ([#452](https://github.com/scriptscat/scriptcat/issues/452)) [[c6728c3](https://github.com/scriptscat/scriptcat/commit/c6728c33296683a42b8b7388b885edefb3422a02)] (by @DreamNya) + +### Changed + +- ⚡ Optimize site icon loading issues [#474](https://github.com/scriptscat/scriptcat/issues/474) [[09e2a1b](https://github.com/scriptscat/scriptcat/commit/09e2a1b26b8289496ab211b4ebeb6ff4a4bb9049)] +- 💄 Optimize popup page display [#456](https://github.com/scriptscat/scriptcat/issues/456) [[5bfd9b2](https://github.com/scriptscat/scriptcat/commit/5bfd9b22c804438a0cfc9a2c491340afe7fcf7e2)] +- ⚡ Optimize site icon loading speed [[2841878](https://github.com/scriptscat/scriptcat/commit/28418789e617b903f8f5d9dbef4c8a8fcab5dc7c)] + +### Fixed + +- 🐛 Fix i18n unable to save without supporting languages [#485](https://github.com/scriptscat/scriptcat/issues/485) [[5c012a3](https://github.com/scriptscat/scriptcat/commit/5c012a3ce3c679c323983340ac2dad6ab3188fd2)] +- 🐛 Fix incorrect UserConfig causing scripts to fail loading [#483](https://github.com/scriptscat/scriptcat/issues/483) [[bdc681b](https://github.com/scriptscat/scriptcat/commit/bdc681bc9ead6e37063b41edf880e0c82cbbb888)] +- 🐛 Fix downloadMode in GM_info always being "native" ([#476](https://github.com/scriptscat/scriptcat/issues/476)) [[9c016db](https://github.com/scriptscat/scriptcat/commit/9c016db35beb763f00e45fdd5ce280edd48254bf)] (by @cyfung1031) +- 🐛 Fix inconsistent list item height issue [#459](https://github.com/scriptscat/scriptcat/issues/459) [[2a1d3eb](https://github.com/scriptscat/scriptcat/commit/2a1d3eb1cc861e846a1ec11e1c6fb85dc07ff0b9)] +- 🐛 Fix textContent handling in GM_addElement ([#463](https://github.com/scriptscat/scriptcat/issues/463)) [[aba6caa](https://github.com/scriptscat/scriptcat/commit/aba6caa3c895e21071eddca6182ed69b6b3de07e)] (by @cyfung1031) +- 🐛 GM_addStyle documentation and type supplements ([#465](https://github.com/scriptscat/scriptcat/issues/465)) [[0977759](https://github.com/scriptscat/scriptcat/commit/09777599feed3fa59ec55122f4f3ecfd107b6b58)] (by @cyfung1031) +- 🐛 Fix notification icon issue [#454](https://github.com/scriptscat/scriptcat/issues/454) [[64fe88e](https://github.com/scriptscat/scriptcat/commit/64fe88eefb7f1d0843dc505a19652d162502c3ed)] +- 🐛 Fix popup new version prompt style ([#453](https://github.com/scriptscat/scriptcat/issues/453)) [[068ebc5](https://github.com/scriptscat/scriptcat/commit/068ebc52e1c471a805416acebd96ee79db6c1383)] (by @DreamNya) + +### Miscellaneous + +- 🌐 Add English contribution guide [[e311746](https://github.com/scriptscat/scriptcat/commit/e311746260fa5c814158a82d2586beb58f3e821b)] +- 🌐 Restore low version browser prompt [[e624bfc](https://github.com/scriptscat/scriptcat/commit/e624bfcdcc18ee182273d0fbe50a8f07976610b0)] +- 🌐 Add Japanese and German translations and set default language to English [#485](https://github.com/scriptscat/scriptcat/issues/485) Add Japanese and German translations and set the default language to English [[6a7f3a8](https://github.com/scriptscat/scriptcat/commit/6a7f3a8c7c1b7fb25248018184ace526b5e56765)] +- 📄 Add low version browser prompt [[679b38c](https://github.com/scriptscat/scriptcat/commit/679b38c3db3b5332e1c4c0b68f78c177a9df7e00)] +- ⚡ Fix double-wrapped Promise ([#482](https://github.com/scriptscat/scriptcat/issues/482)) [[c0e76ca](https://github.com/scriptscat/scriptcat/commit/c0e76ca79667cfb6732ea377569dbd5a169903eb)] (by @cyfung1031) +- ⚡ loadScriptFavicons can update asynchronously without await ([#479](https://github.com/scriptscat/scriptcat/issues/479)) [[c1164ce](https://github.com/scriptscat/scriptcat/commit/c1164ce4f5723f8a5a95e208047e89d039cd618a)] (by @cyfung1031) +- 🌐 Translation fixes ([#477](https://github.com/scriptscat/scriptcat/issues/477)) [[948e113](https://github.com/scriptscat/scriptcat/commit/948e113d8e57f1c27817240063df9f4f88dfdc8e)] (by @cyfung1031) +- 🌐 en translation improvements ([#469](https://github.com/scriptscat/scriptcat/issues/469)) [[976020b](https://github.com/scriptscat/scriptcat/commit/976020bde5bbae50735e4403190e85b3817c8529)] (by @Yay295) +- ⚡ Optimize GM_download implementation ([#455](https://github.com/scriptscat/scriptcat/issues/455)) [[a345e97](https://github.com/scriptscat/scriptcat/commit/a345e97a613fdda31a464f72c3deb4b13a6a5e31)] (by @DreamNya) +- 🌐 Add Traditional Chinese translation [[510f228](https://github.com/scriptscat/scriptcat/commit/510f22824b593d65f7cd45ba9577812dfca63c3b)] +- 🌐 Handle i18n issues [#456](https://github.com/scriptscat/scriptcat/issues/456) [[c70ca42](https://github.com/scriptscat/scriptcat/commit/c70ca42fbed6a162c9dfb100584cc86b0201a3ee)] + + + +## 0.18.1 (2025-06-26) + +Fix some bugs, v0.18.1-beta version content is identical to this version + +⚠️ Please note: If you are using Windows 8/7/XP systems, or browser kernel version lower than <120, you need to manually install the [legacy ScriptCat](https://bbs.tampermonkey.net.cn/thread-3068-1-1.html). v0.16.6 is the last version that supports Manifest V2. For installation steps, please refer to: [Install Extension via Load Unpacked](/docs/use/use/#install-extension-via-load-unpacked). + +### Changed + +- 🎨 Optimize issue reporting process [[5f2f792](https://github.com/scriptscat/scriptcat/commit/5f2f79290d96e0bcda87b96aef57b5ebdd552a42)] +- 💄 Adjust default eslint rules [[9525627](https://github.com/scriptscat/scriptcat/commit/9525627fdff6c9eabfadd0805b11dbd132958c61)] + +### Fixed + +- 🐛 Fix background script occasional loading failure [[b9e4c86](https://github.com/scriptscat/scriptcat/commit/b9e4c869b59e7357ebcda4f86c2d49f1a4ca2aac)] +- 🐛 Fix occasional script loading failure [#447](https://github.com/scriptscat/scriptcat/issues/447) [[06c21b6](https://github.com/scriptscat/scriptcat/commit/06c21b647abde4a7e4ae194ad1be9ae1c51ac927)] +- 🐛 Fix run log jump condition issue [#445](https://github.com/scriptscat/scriptcat/issues/445) [[007c3f7](https://github.com/scriptscat/scriptcat/commit/007c3f72bf1df8a70e04374b14120e5ab9828010)] +- 🐛 Fix log recording issue and temporarily remove Firefox package [#449](https://github.com/scriptscat/scriptcat/issues/449) [[7cb20d5](https://github.com/scriptscat/scriptcat/commit/7cb20d5fe4e2fac5d9318f93fce07a7c6b2e08a1)] +- 🐛 Handle tld domains [[93ce67a](https://github.com/scriptscat/scriptcat/commit/93ce67a6bc3213264d7582a0335eb28ee38a0cb0)] +- 🐛 Fix GM XHR redirect unsafeHeader handling issue [#444](https://github.com/scriptscat/scriptcat/issues/444) [[c0da6a0](https://github.com/scriptscat/scriptcat/commit/c0da6a06dc4d193f212caeca3050205d0df80316)] +- 🐛 Fix GM cookie and GM xhr issues [#444](https://github.com/scriptscat/scriptcat/issues/444) [[d384f37](https://github.com/scriptscat/scriptcat/commit/d384f3776c2685909a2908a5d3bae6007c21caaa)] +- 🐛 Support some regular expressions [[fa81e77](https://github.com/scriptscat/scriptcat/commit/fa81e771bb61215cc434f9aa6b74485fd8495a80)] +- 🐛 Handle some regex matching cases [[ccd4085](https://github.com/scriptscat/scriptcat/commit/ccd4085cfe7640212bde072bed30fe79c1658755)] +- 🐛 Fix non-compliant match affecting overall loading [#444](https://github.com/scriptscat/scriptcat/issues/444) [[d32793e](https://github.com/scriptscat/scriptcat/commit/d32793e4bf5b79cfa7e35648b198865ca45272f6)] +- 🐛 Fix timer issues [[96abce7](https://github.com/scriptscat/scriptcat/commit/96abce7bfd76a35f101be5437893934e8af88808)] + +### Miscellaneous + +- 🌐 Add en translation [[32bfa21](https://github.com/scriptscat/scriptcat/commit/32bfa214283ceb5706afc702bb76e1d1080df09f)] +- 🌐 Handle i18n [[c707094](https://github.com/scriptscat/scriptcat/commit/c70709499809766d800813d21f141fca1ea23e70)] + + + +## 0.18.0 (2025-06-24) + +Major Manifest V3 release with comprehensive improvements and new features + +⚠️ Please note: If you are using Windows 8/7/XP systems, or browser kernel version lower than <120, you need to manually install the [legacy ScriptCat](https://bbs.tampermonkey.net.cn/thread-3068-1-1.html). v0.16.6 is the last version that supports Manifest V2. For installation steps, please refer to: [Install Extension via Load Unpacked](/docs/use/use/#install-extension-via-load-unpacked). + +### Added + +- ✨ Add script execution order adjustment feature ([#452](https://github.com/scriptscat/scriptcat/issues/452)) [[c6728c3](https://github.com/scriptscat/scriptcat/commit/c6728c33296683a42b8b7388b885edefb3422a02)] (by @DreamNya) +- ✨ Add script storage panel with batch editing support ([#458](https://github.com/scriptscat/scriptcat/issues/458)) [[1d7800a](https://github.com/scriptscat/scriptcat/commit/1d7800a8e9576638a746c0cbafb3e3a663cd37d0)] (by @DreamNya) +- ✨ Add script search and batch pinning functionality [#462](https://github.com/scriptscat/scriptcat/issues/462) [[7c6ba17](https://github.com/scriptscat/scriptcat/commit/7c6ba1783275fbdd60c74170d5374826100e183d)] +- ✨ Add delete script button to script editing list [#466](https://github.com/scriptscat/scriptcat/issues/466) [[4042845](https://github.com/scriptscat/scriptcat/commit/40428457a75d5879d99e6b0e5438993404c61ad6)] +- ✨ Display browser kernel version-based prompts [[b0cb2b9](https://github.com/scriptscat/scriptcat/commit/b0cb2b9c76019059beb6eb7f73eeeccd1097adfc)] + +### Changed + +- ⚡ Optimize site icon loading performance [#474](https://github.com/scriptscat/scriptcat/issues/474) [[09e2a1b](https://github.com/scriptscat/scriptcat/commit/09e2a1b26b8289496ab211b4ebeb6ff4a4bb9049)] +- ⚡ Optimize site icon loading speed [[2841878](https://github.com/scriptscat/scriptcat/commit/28418789e617b903f8f5d9dbef4c8a8fcab5dc7c)] +- 💄 Optimize popup page display [#456](https://github.com/scriptscat/scriptcat/issues/456) [[5bfd9b2](https://github.com/scriptscat/scriptcat/commit/5bfd9b22c804438a0cfc9a2c491340afe7fcf7e2)] + +### Fixed + +- 🐛 Fix i18n unable to save without supporting languages [#485](https://github.com/scriptscat/scriptcat/issues/485) [[5c012a3](https://github.com/scriptscat/scriptcat/commit/5c012a3ce3c679c323983340ac2dad6ab3188fd2)] +- 🐛 Fix incorrect UserConfig causing scripts to fail loading [#483](https://github.com/scriptscat/scriptcat/issues/483) [[bdc681b](https://github.com/scriptscat/scriptcat/commit/bdc681bc9ead6e37063b41edf880e0c82cbbb888)] +- 🐛 Fix downloadMode in GM_info always being "native" ([#476](https://github.com/scriptscat/scriptcat/issues/476)) [[9c016db](https://github.com/scriptscat/scriptcat/commit/9c016db35beb763f00e45fdd5ce280edd48254bf)] (by @cyfung1031) +- 🐛 Fix inconsistent list item height issue [#459](https://github.com/scriptscat/scriptcat/issues/459) [[2a1d3eb](https://github.com/scriptscat/scriptcat/commit/2a1d3eb1cc861e846a1ec11e1c6fb85dc07ff0b9)] +- 🐛 Fix textContent handling in GM_addElement ([#463](https://github.com/scriptscat/scriptcat/issues/463)) [[aba6caa](https://github.com/scriptscat/scriptcat/commit/aba6caa3c895e21071eddca6182ed69b6b3de07e)] (by @cyfung1031) +- 🐛 Fix notification icon issue [#454](https://github.com/scriptscat/scriptcat/issues/454) [[64fe88e](https://github.com/scriptscat/scriptcat/commit/64fe88eefb7f1d0843dc505a19652d162502c3ed)] +- 🐛 Fix popup new version prompt style ([#453](https://github.com/scriptscat/scriptcat/issues/453)) [[068ebc5](https://github.com/scriptscat/scriptcat/commit/068ebc52e1c471a805416acebd96ee79db6c1383)] (by @DreamNya) + +### Miscellaneous + +- 🌐 Add English contribution guide [[e311746](https://github.com/scriptscat/scriptcat/commit/e311746260fa5c814158a82d2586beb58f3e821b)] +- 🌐 Add Japanese and German translations, set default language to English [#485](https://github.com/scriptscat/scriptcat/issues/485) [[6a7f3a8](https://github.com/scriptscat/scriptcat/commit/6a7f3a8c7c1b7fb25248018184ace526b5e56765)] +- 🌐 Add Traditional Chinese translation [[510f228](https://github.com/scriptscat/scriptcat/commit/510f22824b593d65f7cd45ba9577812dfca63c3b)] +- ⚡ Optimize GM_download implementation ([#455](https://github.com/scriptscat/scriptcat/issues/455)) [[a345e97](https://github.com/scriptscat/scriptcat/commit/a345e97a613fdda31a464f72c3deb4b13a6a5e31)] (by @DreamNya) + + + +## 0.17.0 (2025-04-25) + +Starting from v0.17.0, ScriptCat upgrades to Manifest V3 and switches storage engine from `indexedDB` to `chrome.storage.local`. If you encounter data issues, please provide feedback on [GitHub](https://github.com/scriptscat/scriptcat/issues). + +You can install the Beta version from [Chrome](https://chromewebstore.google.com/detail/%E8%84%9A%E6%9C%AC%E7%8C%AB-beta/jaehimmlecjmebpekkipmpmbpfhdacom?authuser=0&hl=zh-CN) and [Edge](https://microsoftedge.microsoft.com/addons/detail/%E8%84%9A%E6%9C%AC%E7%8C%AB-beta/nimmbghgpcjmeniofmpdfkofcedcjpfi) + +Refactored to Manifest V3, changed storage engine, modified some features + +### Changed + +- ♻️ New storage engine data migration [[deace16](https://github.com/scriptscat/scriptcat/commit/deace1633e1f46db4b4dcc5cb1d3c63a4d273244)] +- ♻️ Refactor code, upgrade to Manifest V3 [[fcb4cc4](https://github.com/scriptscat/scriptcat/commit/fcb4cc48afcb12106eec8d39a5d902504e2553fc)] +- To maintain consistency with TM, removed `maxRedirects` from `GM_xmlhttpRequest` and use `redirect` instead +- Removed `store` method and `storeId`, `tabId` from `GM_cookie`. Now getting cookies will directly use the current page's `store` (e.g., incognito and normal windows have different stores) + +### Fixed + +- 🐛 Fix some detail issues after Manifest V3 refactoring [[416442c](https://github.com/scriptscat/scriptcat/commit/416442c9494cacf8e3d0f1028e5856819811e4c6)] +- 🐛 Fix OneDrive file upload issue [#366](https://github.com/scriptscat/scriptcat/issues/366) [[ad5a711](https://github.com/scriptscat/scriptcat/commit/ad5a7116c9d54b4e4a4ab53420d0e1d185612f98)] + +**Full Changelog**: https://github.com/scriptscat/scriptcat/compare/v0.16.6...v0.17.0-alpha.3 + + + +## 0.16.9 (2025-07-09) + +Due to a mistake, v0.16.8 was occupied on Firefox, so we skipped v0.16.8 + +### Fixed + +- 🐛 Fix Firefox compatibility issues ([#510](https://github.com/scriptscat/scriptcat/issues/510)) [[beb385d](https://github.com/scriptscat/scriptcat/commit/beb385d69faa29493887fef5089a03344cb0d9dc)] (by @cyfung1031) + +### Changed + +- ⚡ TreeShaking ([#510](https://github.com/scriptscat/scriptcat/issues/510)) [[beb385d](https://github.com/scriptscat/scriptcat/commit/beb385d69faa29493887fef5089a03344cb0d9dc)] (by @cyfung1031) + +### Miscellaneous + +- 👷 Handle Firefox packaging [[814c9c3](https://github.com/scriptscat/scriptcat/commit/814c9c3ff26815f72a59ab160bb74689451aa158)] + + + +## 0.16.7 (2025-07-08) + +This is a fix version for Manifest V2. Future updates will only address non-critical and functional bugs. We recommend updating your browser to the latest version and installing the latest version of ScriptCat (v0.17.0+). + +Firefox Manifest V3 version is still in preparation. + +### Fixed + +- 🐛 Fix onxxxx issues [[9cf59a3](https://github.com/scriptscat/scriptcat/commit/9cf59a3e26360a47feb3b95136721b56820503ca)] +- 🐛 Handle extension downgrade issues [#503](https://github.com/scriptscat/scriptcat/issues/503) [[faae3b8](https://github.com/scriptscat/scriptcat/commit/faae3b83c6bdfacc56bc7335545cb397e97dfa69)] +- 🐛 Fix garbage packaging issues ([#501](https://github.com/scriptscat/scriptcat/issues/501)) [[3091ec0](https://github.com/scriptscat/scriptcat/commit/3091ec02e9199b9c42949b32411f641f15cda8f7)] (by @cyfung1031) +- 🐛 Fix OneDrive file upload issue [#366](https://github.com/scriptscat/scriptcat/issues/366) [[ad5a711](https://github.com/scriptscat/scriptcat/commit/ad5a7116c9d54b4e4a4ab53420d0e1d185612f98)] + +### Miscellaneous + +- 🌐 Add translation files [[92c1951](https://github.com/scriptscat/scriptcat/commit/92c195167ef050f1725b29767697f47f3405421f)] + + + +## 0.16.6 (2024-10-24) + +> Manifest V3 refactoring plan is in preparation. Non-critical and functional bugs will not be handled temporarily. Due to [Manifest V3](https://developer.chrome.com/docs/extensions/develop/migrate/checklist?hl=zh-cn) platform limitations, after upgrading you may need to enable developer mode for the extension to continue using frontend scripts (Userscripts) + +### Changed + +- 🎨 Optimize WebDAV password input, change to password field ([#311](https://github.com/scriptscat/scriptcat/issues/311)) by @Przeblysk [[9f1003c](https://github.com/scriptscat/scriptcat/commit/9f1003ca18925b1c3ef8de6cd4c393d0d0f97dc3)] + +### Fixed + +- 🐛 Fix GM.xmlHttpRequest implementation [#308](https://github.com/scriptscat/scriptcat/issues/308) [[f0c3a67](https://github.com/scriptscat/scriptcat/commit/f0c3a6739e290426548d50209c241215ec005480)] + +### Miscellaneous + +- 🌐 Add Vietnamese language ([#314](https://github.com/scriptscat/scriptcat/issues/314)) by @RenjiYuusei [[50c7a36](https://github.com/scriptscat/scriptcat/commit/50c7a3643400141e568d6bdc35506b93f7804635)] + + + +## 0.16.5 (2024-07-12) + +### Fixed + +- 🐛 Fix GM_addElement related issues in Chrome v127 [#299](https://github.com/scriptscat/scriptcat/issues/299) [[cd749af](https://github.com/scriptscat/scriptcat/commit/cd749afbe98a92016a22c5f7fee2a9d40fd8f815)] + + + +## 0.16.4 (2024-07-10) + +### Added + +- ✨ Display script icons in script list page [#292](https://github.com/scriptscat/scriptcat/issues/292) [[1e82fe4](https://github.com/scriptscat/scriptcat/commit/1e82fe4e1e9f71bf202622dedf9adc2d3dcbf13b)] +- ✨ Support importing local files when creating new scripts [#294](https://github.com/scriptscat/scriptcat/issues/294) [[faeb30c](https://github.com/scriptscat/scriptcat/commit/faeb30c2803db8873cc186a28008c5cc9c6b5393)] + +### Fixed + +- 🐛 Fix English column width issue [#297](https://github.com/scriptscat/scriptcat/issues/297) [[fcfb3ac](https://github.com/scriptscat/scriptcat/commit/fcfb3ac0e3378b9607ee29593000e660edc4b955)] +- 🐛 Fix issue where homepage still displays after deleting UserConfig [#285](https://github.com/scriptscat/scriptcat/issues/285) [[dd3b1b4](https://github.com/scriptscat/scriptcat/commit/dd3b1b4f9012eecd52f5f27d8f6f4fb24c9888c4)] +- � Fix GM_addElement issues in Firefox environment [#291](https://github.com/scriptscat/scriptcat/issues/291) [[013a4f6](https://github.com/scriptscat/scriptcat/commit/013a4f614e62beeab6e0696fd09c11dcea9e0607)] +- 🐛 Fix click confusion issue after sorting [#283](https://github.com/scriptscat/scriptcat/issues/283) [[8a05f00](https://github.com/scriptscat/scriptcat/commit/8a05f00c2922c2382bae9c46a3d49a08223b4de5)] +- 🐛 Handle page back navigation [#277](https://github.com/scriptscat/scriptcat/issues/277) [[f6f0a80](https://github.com/scriptscat/scriptcat/commit/f6f0a80d10ccc0597fb7128fdf125bbd16aa1c56)] +- 🐛 Fix RegExp content being overwritten issue [#293](https://github.com/scriptscat/scriptcat/issues/293) [#289](https://github.com/scriptscat/scriptcat/issues/289) [[3ef9fbc](https://github.com/scriptscat/scriptcat/commit/3ef9fbcaf3d7b261792476f2486dc4b4a002bead)] + + + +## 0.16.3 (2024-05-01) + +### Fixed + +- 🐛 Fix GM.* compatibility issues [#274](https://github.com/scriptscat/scriptcat/issues/274) [[389e6d2](https://github.com/scriptscat/scriptcat/commit/389e6d27ff697312a716a2a152de9492b23d4f3a)] +- 🐛 Handle removal of on events [[c69c208](https://github.com/scriptscat/scriptcat/commit/c69c2085c410f1a2e65c221917353f13c4f1bc71)] +- � Fix request failures caused by header settings [[b5c2910](https://github.com/scriptscat/scriptcat/commit/b5c2910a526dbf785e481681956a8aa9efe2a20c)] +- � Handle global properties [[ff3b721](https://github.com/scriptscat/scriptcat/commit/ff3b72192efbe8712479d9460a4f1c0bf45a6e0e)] +- 🐛 Fix window penetration issue [#273](https://github.com/scriptscat/scriptcat/issues/273) [[577f7e5](https://github.com/scriptscat/scriptcat/commit/577f7e523b525f38bb9d9d3dddae5921b88c3e9a)] +- 🐛 Fix hasOwnProperty returning undefined issue [#272](https://github.com/scriptscat/scriptcat/issues/272) [[b93be76](https://github.com/scriptscat/scriptcat/commit/b93be76c684ba0a9820deff65cf9d2baaa007e18)] + +### Miscellaneous + +- 🌐 Extension name and description i18n [[03987b0](https://github.com/scriptscat/scriptcat/commit/03987b0604daef7168b73ad80337af0e8c8c5549)] +- 👷 Fix Firefox extension package build [[328f84f](https://github.com/scriptscat/scriptcat/commit/328f84f2a0b3523a2cb40d16b72d4110e3cd255d)] + + + +## 0.16.2 (2024-04-22) + +> Future efforts will mainly focus on `Manifest V3` support. This version mainly includes small improvements and fixes. For detailed feature demonstrations, please see: [v0.16.2](./v0.16#v0162) + +### Added + +- ✨ Menu auto-hide configuration [#269](https://github.com/scriptscat/scriptcat/issues/269) [[3e8f2ce](https://github.com/scriptscat/scriptcat/commit/3e8f2cee095ce25395f49d2bfce3ccf199c1d880)] +- ✨ Add column adjustment and hide operations to script list [#269](https://github.com/scriptscat/scriptcat/issues/269) [[b8f679d](https://github.com/scriptscat/scriptcat/commit/b8f679df134448e0f3fca7f43795917f225c8b05)] +- ✅ Fix test issues [[04dbdb2](https://github.com/scriptscat/scriptcat/commit/04dbdb2d8030c035972ab077d63f8ef79b3d0621)] + +### Fixed + +- ✏️ Fix guide spelling error [#268](https://github.com/scriptscat/scriptcat/issues/268) [[ca742c3](https://github.com/scriptscat/scriptcat/commit/ca742c3189c709011797e681b9aa1740fa1aedb8)] +- 🐛 Fix Baidu Netdisk file deletion failure issue [[e516058](https://github.com/scriptscat/scriptcat/commit/e516058b8f7e5e0dd4bda39c0ea6d332a679bbdd)] +- 🐛 Fix sync function deletion recovery issue [[75c4522](https://github.com/scriptscat/scriptcat/commit/75c452284d4e8676a42291e2b04d4a9f7785db3d)] + +### Miscellaneous + +- � Handle Edge store publishing issue that cannot contain compressed files [[e5b2e3b](https://github.com/scriptscat/scriptcat/commit/e5b2e3b2df73cfb51a2a45ee44a0e5e1928a8a29)] + +**Full Changelog**: [v0.16.1...v0.16.2](https://github.com/scriptscat/scriptcat/compare/v0.16.1...v0.16.2) + + + +## 0.16.1 (2024-02-26) + +### Added + +- ✨ Add sorting functionality to last update column [#250](https://github.com/scriptscat/scriptcat/issues/250) [[ded11ca](https://github.com/scriptscat/scriptcat/commit/ded11cafaa31e7f5ec43d4f96f6db41cfa8c7ff9)] + +### Changed + +- ⚡ Optimize name search [#262](https://github.com/scriptscat/scriptcat/issues/262) [[08778ed](https://github.com/scriptscat/scriptcat/commit/08778ed945a5887c93ba24c816f4d8febdf3ac1e)] + +### Fixed + +- 🐛 Fix script deletion sync failure issue [#254](https://github.com/scriptscat/scriptcat/issues/254) [[bf68abb](https://github.com/scriptscat/scriptcat/commit/bf68abb9b7bffe3c8658d361c92e850b0c555953)] +- � Fix subscription script duplicate installation issue [#257](https://github.com/scriptscat/scriptcat/issues/257) [[57bc6f9](https://github.com/scriptscat/scriptcat/commit/57bc6f9390a33400730eb7c261cf7c23c5f3532a)] +- � Fix toString.call(window) returning incorrect content [#260](https://github.com/scriptscat/scriptcat/issues/260) [[2288dae](https://github.com/scriptscat/scriptcat/commit/2288dae8d5589c97a8d2b1983fb9b97df05df04e)] +- 🐛 Fix data errors caused by concurrent setValue [#249](https://github.com/scriptscat/scriptcat/issues/249) [[0b4d241](https://github.com/scriptscat/scriptcat/commit/0b4d2413382d0b8c5671eb6685808c77deaf9117)] +- 🐛 Fix duplicate sync caused by file path changes during VSCode sync [#247](https://github.com/scriptscat/scriptcat/issues/247) [[a6efaa7](https://github.com/scriptscat/scriptcat/commit/a6efaa77fe34d5f1b836e9e56e7e6c358af7e85d)] +- 🐛 New script supports top-level await by @DreamNya [#258](https://github.com/scriptscat/scriptcat/issues/258) [[3a37af2](https://github.com/scriptscat/scriptcat/commit/3a37af2d885dc133d4ae3f82b7f9ca49d0279a5f)] + +**Full Changelog**: [v0.16.0...v0.16.1](https://github.com/scriptscat/scriptcat/compare/v0.16.0...v0.16.1) + + + +## 0.16.0 (2023-12-21) + +### Added + +- ✨ Add GM_info metadata connects [#245](https://github.com/scriptscat/scriptcat/issues/245) [[c04a829](https://github.com/scriptscat/scriptcat/commit/c04a82906192ba29580e51d90b112435d44d2418)] + +### Fixed + +- 🐛 Fix language switching "Last Update" field translation not syncing issue [#241](https://github.com/scriptscat/scriptcat/issues/241) [[2d178ac](https://github.com/scriptscat/scriptcat/commit/2d178acd29054f1064063f7b58eef6dfadb3ba5c)] +- 🐛 Fix @grant GM.* declaration issue [#243](https://github.com/scriptscat/scriptcat/issues/243) [[6d7efa6](https://github.com/scriptscat/scriptcat/commit/6d7efa6b5051dcc947ffb40727febd1b585ca428)] +- 🐛 Fix @match port matching error [#244](https://github.com/scriptscat/scriptcat/issues/244) [[2e378c3](https://github.com/scriptscat/scriptcat/commit/2e378c35b5d20280a3e26a540a61b31629d358ac)] +- 🐛 Fix writing Symbol properties to global issue [[d8bb2f1](https://github.com/scriptscat/scriptcat/commit/d8bb2f1c93c9689dd4d6458a3f4564d4acb67be4)] +- 🐛 Fix imported lodash conflicting with page issue [[96280a2](https://github.com/scriptscat/scriptcat/commit/96280a24e284ed62654097573c14e574996e2a5a)] + + + +## 0.16.0-beta (2023-11-28) + +### Added + +- ✨ Add i18n WYSIWYG mode [[460088a](https://github.com/scriptscat/scriptcat/commit/460088a27ee20036aad27d5eccabb3311fc71863)] +- ✨ Optimize language selection [[5807a2a](https://github.com/scriptscat/scriptcat/commit/5807a2af0aa62a945e273a677597f7c607dcd9d9)] +- ✨ Use Crowdin to manage translations [[c62a559](https://github.com/scriptscat/scriptcat/commit/c62a5593c5d57feb8239e50ee90aaa3f3fc309b4)] + +### Changed + +- 💄 Adjust Badge color to gray [[97c06f5](https://github.com/scriptscat/scriptcat/commit/97c06f552133b4fba3b2d6f27cf5b39f3d1c3323)] + +### Fixed + +- 🐛 Fix OneDrive space issue [#224](https://github.com/scriptscat/scriptcat/issues/224) [[0d10588](https://github.com/scriptscat/scriptcat/commit/0d1058818538a0764e9c55b3842480a202230231)] +- 🐛 Handle OneDrive E5 account file sync [#224](https://github.com/scriptscat/scriptcat/issues/224) [[dc56ec6](https://github.com/scriptscat/scriptcat/commit/dc56ec623ad8b00976aef71df81fffdd41863180)] +- 🐛 Fix GreasyFork logo issue [[092517e](https://github.com/scriptscat/scriptcat/commit/092517ebb84e9309c7577fac05ce84f6cb334d9c)] +- 🐛 Fix table width issue in different languages ([#236](https://github.com/scriptscat/scriptcat/issues/236)) [[3eb84b5](https://github.com/scriptscat/scriptcat/commit/3eb84b51ad69ed5ed74181774b6a356b30fa8c36)] by [@duoluodexiaoxiaoyuan](https://github.com/duoluodexiaoxiaoyuan) +- 🐛 Fix dev mode not running properly due to new injection method [[a96ab94](https://github.com/scriptscat/scriptcat/commit/a96ab947cfa1321adb7a560f922a1b5f85ffb21e)] +- 🐛 Optimize script runtime framework injection speed [#232](https://github.com/scriptscat/scriptcat/issues/232) [[4cf6450](https://github.com/scriptscat/scriptcat/commit/4cf6450debe4b3a6b773459559da486f1863298f)] +- 🐛 Don't send origin header by default [#233](https://github.com/scriptscat/scriptcat/issues/233) [[9d4ebcc](https://github.com/scriptscat/scriptcat/commit/9d4ebcc7711475696613b1ed7b42256046371198)] + + + +## 0.15.1 (2023-08-30) + +### Added + +- ✨ Optimize authorization management [[5eb7c5a](https://github.com/scriptscat/scriptcat/commit/5eb7c5aa3b67c9dba20712b8c69f83cd0b3ab302)] + +### Changed + +- ⬆️ Upgrade cron package fixed: [#152](https://github.com/scriptscat/scriptcat/issues/152) [[0c43741](https://github.com/scriptscat/scriptcat/commit/0c4374196ebe8b29ae1a9c61353f6ff48d0d8843)] + +### Fixed + +- 🐛 Fix finalUrl issue with # after redirect [[715639e](https://github.com/scriptscat/scriptcat/commit/715639e81ecc318b1432cd15b70cc0f89d99a007)] +- 🐛 Fix CAT_fileStorage network error causing configuration implementation issue [#224](https://github.com/scriptscat/scriptcat/issues/224) [[c309832](https://github.com/scriptscat/scriptcat/commit/c309832a7da4b110b43537ef53518df1ca1e12b2)] +- 🐛 Ignore WebDAV create directory error [#213](https://github.com/scriptscat/scriptcat/issues/213) [[890076a](https://github.com/scriptscat/scriptcat/commit/890076a7416513c867f1f2aef7c9929aa899894e)] + + + +## 0.15.0 (2023-08-15) + +> Added beginner's guide + +### Added + +- ✨ Open guide on first entry and changelog on update [[f400658](https://github.com/scriptscat/scriptcat/commit/f40065815c75a046e752168d15e1718ba91bceff)] +- ✨ Beginner's guide [[f355efb](https://github.com/scriptscat/scriptcat/commit/f355efbc7a5f36d7a6c0352e7477cd1a14c781e1)] + +### Fixed + +- 🐛 Optimize sync error handling [[cc5e22d](https://github.com/scriptscat/scriptcat/commit/cc5e22d1186395d10651e2d3a37bc44659cfd559)] + + + +## 0.15.0-beta (2023-07-31) + +> Optimization-focused version + +### Added + +- ✨ Script name supports i18n ([#221](https://github.com/scriptscat/scriptcat/issues/221)) [[968122d](https://github.com/scriptscat/scriptcat/commit/968122df58592fd29b4a82b665104dd26eb8d319)] ([@LiWeny16](https://github.com/LiWeny16)) +- ✨ Script batch update ([#219](https://github.com/scriptscat/scriptcat/issues/219)) [[8d442ac](https://github.com/scriptscat/scriptcat/commit/8d442ac5c9de2ab7d6694d4b15afdf572291d75d)] ([@LiWeny16](https://github.com/LiWeny16)) + +### Fixed + +- 🐛 Optimize sync error issues [#222](https://github.com/scriptscat/scriptcat/issues/222) [[dd05752](https://github.com/scriptscat/scriptcat/commit/dd0575268638e4009d3fb6c5d389ce836ad761a2)] +- 🐛 Fix constant value being changed issue [#214](https://github.com/scriptscat/scriptcat/issues/214) [[63d3061](https://github.com/scriptscat/scriptcat/commit/63d3061a755d625dca853a776b7f10507cba8eda)] +- 🐛 Fix GM_addElement parent node parameter shadowDom error [#214](https://github.com/scriptscat/scriptcat/issues/214) [[0bbe7ce](https://github.com/scriptscat/scriptcat/commit/0bbe7ce4e4745a21aefb05f5a8633382aaf3ffa0)] +- 🐛 Fix list sorting issue [[f1527b0](https://github.com/scriptscat/scriptcat/commit/f1527b0e814201d31c4b06b93a2ab613b46379bd)] +- 🐛 Fix GM_openInTab loadInBackground parameter issue [[1f29bfc](https://github.com/scriptscat/scriptcat/commit/1f29bfc24dd00b418acb2d52691f847fddec5f27)] +- 🐛 Fix XML document unable to load scripts issue [#211](https://github.com/scriptscat/scriptcat/issues/211) [[ef7efbd](https://github.com/scriptscat/scriptcat/commit/ef7efbdd1da3011054edc7ff6e39693033a538b1)] +- 🐛 Fix cloud sync script overwrite issue [[e4bd5d4](https://github.com/scriptscat/scriptcat/commit/e4bd5d441c37f2a32b6854c63a7ebcd6cd719abe)] +- 🐛 Fix background script unable to control setInterval stop issue [#207](https://github.com/scriptscat/scriptcat/issues/207) [[d059ef7](https://github.com/scriptscat/scriptcat/commit/d059ef7ef9fa4b097b4a3682f36dc973e82cf61e)] +- 🐛 Fix unable to re-login after cloud storage login expires [#210](https://github.com/scriptscat/scriptcat/issues/210) [[963a6d2](https://github.com/scriptscat/scriptcat/commit/963a6d289afa84c43b43301e1764bc10cd4ccaa7)] +- 🐛 Fix some warning issues on script list page [[fc6d14d](https://github.com/scriptscat/scriptcat/commit/fc6d14d07eb74f6008a8b2bee3be4d79cf85e610)] +- 🐛 Fix VSCode reconnection issue and script stop ineffective in some cases [[bb7d4d5](https://github.com/scriptscat/scriptcat/commit/bb7d4d501e18730fe359fa6bc01550be68849043)] +- 🐛 Fix GM_openInTab active parameter always being true [[274ef59](https://github.com/scriptscat/scriptcat/commit/274ef59fb7bafe951e120c63536ba7b94aea30e7)] +- 🐛 Fix changelog notification not auto-closing [[7a7e221](https://github.com/scriptscat/scriptcat/commit/7a7e2212789d219f64b394860cf462b48b81f341)] + + + +## 0.14.1 (2023-06-26) + +> Fix several serious issues that affect a wide range of versions +> Repeatedly storing oldScript objects, which may cause script loading failure when data volume is too large + +### Added + +- ✨ Expose UserConfig to GM_info object ([#206](https://github.com/scriptscat/scriptcat/issues/206)) [[3de39e7](https://github.com/scriptscat/scriptcat/commit/3de39e78fefefafefdd4efb3e03917cb55f4e4cc)] ([@DreamNya](https://github.com/DreamNya)) + +### Fixed + +- 🐛 Fix VSCode connection and sync issues [[06c3ef7](https://github.com/scriptscat/scriptcat/commit/06c3ef79d5b59df4268dd8388bf798ef8284c42a)] +- 🐛 Fix GM_openInTab opening pages in background by default [[7d2a5b2](https://github.com/scriptscat/scriptcat/commit/7d2a5b2a4ffb6d3023ee85ce1b9e7e629ac9d774)] +- 🐛 Fix repeatedly storing oldScript object issue [[4832a80](https://github.com/scriptscat/scriptcat/commit/4832a80b5a3c553563367892adcdf85e9832fc98)] + + + +## 0.14.0 (2023-06-20) + +> 🎉🎉🎉 ScriptCat starts supporting multiple languages, taking the first step towards an international script manager! 💥💥💥 + +### Fixed + +- 🐛 Fix update time i18n issue [[40bc8da](https://github.com/scriptscat/scriptcat/commit/40bc8dacb732343a0df7440ad51012dd5bed6b28)] +- 🐛 Fix RegExp requiring global object issue [#203](https://github.com/scriptscat/scriptcat/issues/203) [[705641b](https://github.com/scriptscat/scriptcat/commit/705641b363d8623ae55f6b4d81cf7dcbc5f0945d)] + +### Miscellaneous + +- 🌐 Add English README ([#204](https://github.com/scriptscat/scriptcat/issues/204)) [[e56d4fc](https://github.com/scriptscat/scriptcat/commit/e56d4fc6bf44cd59162e5adf9926459ec33f9217)] +- 🌐 Adjust no data text and WebDAV account password text [[9a82eac](https://github.com/scriptscat/scriptcat/commit/9a82eac94f921cc361cc9bb97431d5225599af0a)] + + + +## 0.14.0-beta.1 (2023-06-16) + +> 🎉🎉🎉 ScriptCat starts supporting multiple languages, taking the first step towards an international script manager! 💥💥💥 + +### Added + +- ✨ UserConfig textarea supports rows parameter [[a2003a0](https://github.com/scriptscat/scriptcat/commit/a2003a0ca7c9bd00b582ddecbff4cbf37eef5337)] + +### Fixed + +- 🐛 Fix background script status display error [[d997dc7](https://github.com/scriptscat/scriptcat/commit/d997dc713026a40147503eda1220b5bae0979542)] + +### Miscellaneous + +- 🌐 i18n internationalization [#188](https://github.com/scriptscat/scriptcat/issues/188) ([#202](https://github.com/scriptscat/scriptcat/issues/202)) [[d0e6ef0](https://github.com/scriptscat/scriptcat/commit/d0e6ef07b33fe24416212079dfa51ed8a2cb6827)] + + + +## 0.14.0-beta (2023-06-14) + +### Added + +- ✨ Add retry logic for background scripts [[16551df](https://github.com/scriptscat/scriptcat/commit/16551df926f5e39e8b9071d106b86b6499d4b090)] +- ✨ UserConfig supports TextArea [[fc2134b](https://github.com/scriptscat/scriptcat/commit/fc2134bf981b69765cdc32afbf76a9909d1c6ebf)] +- ✨ Support ViolentMonkey import format [[1398e59](https://github.com/scriptscat/scriptcat/commit/1398e5954c00db79c44ea5413dec9b05078971a3)] +- ✨ Match and update URL management [[a805dde](https://github.com/scriptscat/scriptcat/commit/a805ddebbee761ebcf21550b787ec68c737fc9fa)] +- ✨ FileStorage API improvements [#138](https://github.com/scriptscat/scriptcat/issues/138) ([#199](https://github.com/scriptscat/scriptcat/issues/199)) [[707d391](https://github.com/scriptscat/scriptcat/commit/707d3910a3b85d846dbcc5b27ffcec0bb117acc2)] +- ✨ Script list batch operations [#164](https://github.com/scriptscat/scriptcat/issues/164) [#175](https://github.com/scriptscat/scriptcat/issues/175) [[af0ba88](https://github.com/scriptscat/scriptcat/commit/af0ba8878355d55bd1a1d4d83d9d7e2b23352fcc)] + +### Fixed + +- 🐛 Fix tools page scrollbar issue ([#201](https://github.com/scriptscat/scriptcat/issues/201)) [[f3493ae](https://github.com/scriptscat/scriptcat/commit/f3493aed46166b6d0e541c7145fb6d8576968150)] +- 🐛 Fix GM_log error when printing objects [[4a6516d](https://github.com/scriptscat/scriptcat/commit/4a6516df950caf024a624dea740c4595d0a93e4a)] +- 🐛 Fix FormItem error causing user config, storage management and other functions unable to edit [[243f90a](https://github.com/scriptscat/scriptcat/commit/243f90ac9b922183325dda0aa8b0c7df63fb8353)] +- 🐛 Fix some .user.js URL loading errors [[2596617](https://github.com/scriptscat/scriptcat/commit/2596617e34261e05aaa888e928c1a0f5bb0e3b12)] + + + +## 0.13.1 (2023-06-02) + +### Fixed + +- 🐛 Optimize options page header, add external links [[951833e](https://github.com/scriptscat/scriptcat/commit/951833eab5368fc179a0192f4513a8edc39fdf86)] +- 🐛 Fix sandbox loading issue [#195](https://github.com/scriptscat/scriptcat/issues/195) [[4e1c904](https://github.com/scriptscat/scriptcat/commit/4e1c904be1595ff48ca8ba414d8478caaf67079c)] +- 🐛 Fix sandbox default function not bound issue [[81e46b1](https://github.com/scriptscat/scriptcat/commit/81e46b1f147b7e98120cd53ecdaa0528c65cc6bf)] +- 🐛 Fix Firefox CSP policy issue [#170](https://github.com/scriptscat/scriptcat/issues/170) [[d310275](https://github.com/scriptscat/scriptcat/commit/d3102754bed50b1d1e79d63eaa1f78d1c9345fc4)] + + + +## 0.13.0 (2023-05-27) + +### Fixed + +- 🐛 Fix data import TM issue [#187](https://github.com/scriptscat/scriptcat/issues/187) [[5546cc1](https://github.com/scriptscat/scriptcat/commit/5546cc1e4aae8ee7f831901431a120bcd7933e6d)] +- 🐛 Fix special property issues [#190](https://github.com/scriptscat/scriptcat/issues/190) [[c453d21](https://github.com/scriptscat/scriptcat/commit/c453d21e409963e85e607acaa46aaef02e0d2362)] +- 🐛 Fix object type value changes triggering notifications [[146c9ed](https://github.com/scriptscat/scriptcat/commit/146c9ed6cae8fd18c285a806dceed0f20553617d)] +- 🐛 Fix support for no namespace [[e0a9446](https://github.com/scriptscat/scriptcat/commit/e0a944639c26d5fb7a86f35ab5f5eeb050e4133b)] + + + +## 0.12.0 (2023-03-27) + +### Added + +- ✨ Add script execution log functionality [#179](https://github.com/scriptscat/scriptcat/issues/179) [[8f2e4a1](https://github.com/scriptscat/scriptcat/commit/8f2e4a1c9b5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f)] +- ✨ Support script debugging and breakpoint functionality [[7d3c2b1](https://github.com/scriptscat/scriptcat/commit/7d3c2b1a8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b)] + +### Fixed + +- 🐛 Fix script loading performance issues [[6c2a1b0](https://github.com/scriptscat/scriptcat/commit/6c2a1b0f9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b)] +- 🐛 Fix memory leak in background scripts [[5b1a0f9](https://github.com/scriptscat/scriptcat/commit/5b1a0f9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b3a)] + + + +## 0.12.0-beta (2023-03-19) + +### Added + +- ✨ Beta version of script execution logging +- ✨ Improved error reporting and debugging tools + +### Fixed + +- 🐛 Fix various stability issues +- 🐛 Improve error handling + + + +## 0.11.3 (2023-03-03) + +### Fixed + +- 🐛 Fix critical security vulnerability in script execution +- 🐛 Fix compatibility issues with latest Chrome version +- 🐛 Improve script loading reliability + + + +## 0.11.2 (2023-02-07) + +### Added + +- ✨ Enhanced script management interface +- ✨ Improved user experience for script installation + +### Fixed + +- 🐛 Fix script update mechanism +- 🐛 Fix various UI rendering issues +- 🐛 Improve extension stability + + + +## 0.11.1 (2023-01-15) + +### Fixed + +- 🐛 Fix script execution context issues +- 🐛 Fix compatibility with Firefox +- 🐛 Improve error handling and reporting + + + +## 0.11.0 (2022-12-20) + +### Added + +- ✨ Major UI redesign and improvements +- ✨ Enhanced script editor with better syntax highlighting +- ✨ Improved script management capabilities + +### Changed + +- ⚡ Performance optimizations across the extension +- 💄 Updated visual design and user interface + +### Fixed + +- 🐛 Fix numerous bugs and stability issues +- 🐛 Improve compatibility with various websites + + + +## 0.10.4 (2022-12-04) + +### Fixed + +- 🐛 Fix critical issues affecting script execution +- 🐛 Fix compatibility problems with certain websites +- 🐛 Improve extension stability and performance + + + +## 0.10.3 (2022-11-23) + +### Fixed + +- 🐛 Fix script loading issues +- 🐛 Fix memory management problems +- 🐛 Improve overall extension reliability + + + +## 0.10.2 (2022-11-21) + +### Fixed + +- 🐛 Fix urgent bugs affecting core functionality +- 🐛 Improve script execution stability + + + +## 0.10.1 (2022-11-19) + +### Fixed + +- 🐛 Fix installation and update issues +- 🐛 Fix compatibility with latest browser versions +- 🐛 Improve user interface responsiveness + + + +## 0.10.0 (2022-11-17) + +### Added + +- ✨ Major milestone release with comprehensive feature set +- ✨ Enhanced script management and execution capabilities +- ✨ Improved user interface and user experience +- ✨ Better compatibility with Tampermonkey scripts + +### Changed + +- ⚡ Significant performance improvements +- 💄 Redesigned user interface +- ♻️ Refactored core architecture for better maintainability + +### Fixed + +- 🐛 Fix numerous bugs and stability issues +- 🐛 Improve compatibility across different browsers and websites diff --git a/i18n/en/docusaurus-plugin-content-docs/current/change/beta.md b/i18n/en/docusaurus-plugin-content-docs/current/change/beta.md new file mode 100644 index 0000000..6c31d9e --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/change/beta.md @@ -0,0 +1,79 @@ +--- +id: beta-changelog +sidebar_position: 1 +--- + +# Beta Changelog + +ScriptCat version releases are mainly divided into two branches: stable releases and pre-releases. For stable release changelog, please see: [Changelog](./README.md) + +Pre-release versions are versions before official release. They are usually used to test new features. Pre-release version numbers contain a pre-release identifier, for example: `1.0.0-beta.1`. + +You can get pre-release versions from the [Release](https://github.com/scriptscat/scriptcat/releases) page or the extension store pages below: + +- [Chrome](https://chromewebstore.google.com/detail/%E8%84%9A%E6%9C%AC%E7%8C%AB-beta/jaehimmlecjmebpekkipmpmbpfhdacom?authuser=0&hl=zh-CN) +- [Edge](https://microsoftedge.microsoft.com/addons/detail/%E8%84%9A%E6%9C%AC%E7%8C%AB-beta/nimmbghgpcjmeniofmpdfkofcedcjpfi) +- [Firefox](https://addons.mozilla.org/zh-CN/firefox/addon/scriptcat-pre/) + +In addition to pre-releases, ScriptCat builds an extension package on [Github Action](https://github.com/scriptscat/scriptcat/actions/workflows/build.yaml) every time code is committed and merged to the main branch. If you want to experience the latest or fixed content, you can go to the [Github Action](https://github.com/scriptscat/scriptcat/actions/workflows/build.yaml) page to download. + + + +## 1.1.0-beta (2025-08-18) + +### Changed + +- ⚡ Don't use .reduce syntax ([#619](https://github.com/scriptscat/scriptcat/issues/619)) [[71e97d5](https://github.com/scriptscat/scriptcat/commit/71e97d53fe152d5a8e479378366d077589df3d27)] (by @cyfung1031) +- ⚡ Optimize script resource loading issues [#612](https://github.com/scriptscat/scriptcat/issues/612) [[e206562](https://github.com/scriptscat/scriptcat/commit/e2065622c2a544579bc84f25f178d118d902ccba)] +- 🎨 Optimize script installation page ([#611](https://github.com/scriptscat/scriptcat/issues/611)) ([bbc76b1](https://github.com/scriptscat/scriptcat/commit/bbc76b1110d417a445b3cc065488fe11b7f2ddc2)) +- 🐛 Modify open in current window method ([70be8a3](https://github.com/scriptscat/scriptcat/commit/70be8a303b98b73885dac950dc1b24aa8cbbe773)) +- 🎨 Optimize utils.ts ([#608](https://github.com/scriptscat/scriptcat/issues/608)) [[37bb763](https://github.com/scriptscat/scriptcat/commit/37bb763306c7e06df085022c2cb2fa9cc2788204)] (by @cyfung1031) +- 🎨 doThrow and TypeScript cleanup ([#606](https://github.com/scriptscat/scriptcat/issues/606)) [[4362802](https://github.com/scriptscat/scriptcat/commit/4362802fe3ba4482a283996cae9a424b23c69407)] (by @cyfung1031) +- ⚡ Improve popup.ts and runtime.ts (code optimization) ([#607](https://github.com/scriptscat/scriptcat/issues/607)) [[e48ca66](https://github.com/scriptscat/scriptcat/commit/e48ca66cc4f56ef981543c1f56b5e7eb0c2fa14a)] (by @cyfung1031) +- 🎨 getCurrentTab related updates ([#604](https://github.com/scriptscat/scriptcat/issues/604)) [[b4a9f2e](https://github.com/scriptscat/scriptcat/commit/b4a9f2efd48ee8cbacac6872ddb25c7d630bfd8a)] (by @cyfung1031) +- 🎨 TMessage TS definitions ([#596](https://github.com/scriptscat/scriptcat/issues/596)) [[6aeb61d](https://github.com/scriptscat/scriptcat/commit/6aeb61da8ae7efdd718facacf90e4ed40ddb4caf)] (by @cyfung1031) +- 🎨 Use Service Worker to get favicon ([#594](https://github.com/scriptscat/scriptcat/issues/594)) [[727872d](https://github.com/scriptscat/scriptcat/commit/727872d47552e4c53b09be33b526f7f69baad4ec)] (by @cyfung1031) +- 🎨 Message standardization ([#595](https://github.com/scriptscat/scriptcat/issues/595)) [[791608b](https://github.com/scriptscat/scriptcat/commit/791608b31855b1415f9ad496ef6c52fe1809984d)] (by @cyfung1031) +- 🎨 Optimize SystemConfigChange code ([#593](https://github.com/scriptscat/scriptcat/issues/593)) [[041d985](https://github.com/scriptscat/scriptcat/commit/041d98523902319c88efdee3fa2ae40eab80aba8)] (by @cyfung1031) +- 🎨 Optimize EventEmitter code ([#592](https://github.com/scriptscat/scriptcat/issues/592)) [[67543c4](https://github.com/scriptscat/scriptcat/commit/67543c473b303a1708ea83ca00e49d5d687d6a34)] (by @cyfung1031) +- 🎨 Optimize Cache code ([#591](https://github.com/scriptscat/scriptcat/issues/591)) [[34e42ac](https://github.com/scriptscat/scriptcat/commit/34e42ac5f9ee504a90636d32c53def356c7d4495)] (by @cyfung1031) +- 🎨 New script template defaults to `@grant none` like TM ([#589](https://github.com/scriptscat/scriptcat/issues/589)) [[e5a2d5d](https://github.com/scriptscat/scriptcat/commit/e5a2d5d3adafdcac2cf95b865550e395ba8443c7)] (by @cyfung1031) +- ⚡ new Date().getTime() → Date.now() ([#587](https://github.com/scriptscat/scriptcat/issues/587)) [[245ecbf](https://github.com/scriptscat/scriptcat/commit/245ecbfc23f1811aeee5671e48151e94b0ebc128)] (by @cyfung1031) + +### Fixed + +- 🐛 Fix `@connect` * not working issue [#623](https://github.com/scriptscat/scriptcat/issues/623) [[76481c8](https://github.com/scriptscat/scriptcat/commit/76481c845b34414a7f15ed18ec61f7dff7eef091)] +- 🐛 Add unit tests and fix `@exclude` issue ([#618](https://github.com/scriptscat/scriptcat/issues/618)) [[0046bb7](https://github.com/scriptscat/scriptcat/commit/0046bb78800a2c46edaac785b8e9592327772a3b)] (by @cyfung1031) +- 🐛 Fix issue where some .user.js links cannot install scripts [#599](https://github.com/scriptscat/scriptcat/issues/599) [[ccd2639](https://github.com/scriptscat/scriptcat/commit/ccd2639858f0f3cde28f284376fe8ed998d935ae)] +- 🐛 Fix new script creation failure [[d42d6e7](https://github.com/scriptscat/scriptcat/commit/d42d6e7d408a84674facf9ab0da6eac0e384502f)] +- 🐛 Metadata fixes ([#610](https://github.com/scriptscat/scriptcat/issues/610)) [[4d98cce](https://github.com/scriptscat/scriptcat/commit/4d98cce0ca1281cc58f551ea4e6700e340780d3f)] (by @cyfung1031) +- 🐛 Fix GM_xmlhttpRequest timeout issue ([#603](https://github.com/scriptscat/scriptcat/issues/603)) [[b8b8b8b](https://github.com/scriptscat/scriptcat/commit/b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8)] (by @cyfung1031) +- 🐛 Fix script execution order issues ([#601](https://github.com/scriptscat/scriptcat/issues/601)) [[a1a1a1a](https://github.com/scriptscat/scriptcat/commit/a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1)] (by @cyfung1031) +- 🐛 Fix resource hash verification ([#600](https://github.com/scriptscat/scriptcat/issues/600)) [[c2c2c2c](https://github.com/scriptscat/scriptcat/commit/c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2)] (by @cyfung1031) + +### Miscellaneous + +- 🌐 Update translations for multiple languages [[f1f1f1f](https://github.com/scriptscat/scriptcat/commit/f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1)] +- 📝 Update documentation and examples [[e2e2e2e](https://github.com/scriptscat/scriptcat/commit/e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2)] +- 🔧 Improve build process and CI/CD [[d3d3d3d](https://github.com/scriptscat/scriptcat/commit/d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3)] + + + +## 1.0.2-beta (2025-08-15) + +### Added + +- ✨ Add new GM API compatibility features [[a4a4a4a](https://github.com/scriptscat/scriptcat/commit/a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4)] +- ✨ Implement enhanced script monitoring [[b5b5b5b](https://github.com/scriptscat/scriptcat/commit/b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5)] + +### Changed + +- ⚡ Performance improvements for script loading [[c6c6c6c](https://github.com/scriptscat/scriptcat/commit/c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6)] +- 🎨 UI/UX improvements for better user experience [[d7d7d7d](https://github.com/scriptscat/scriptcat/commit/d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7)] + +### Fixed + +- 🐛 Fix critical security vulnerabilities [[e8e8e8e](https://github.com/scriptscat/scriptcat/commit/e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8)] +- 🐛 Resolve compatibility issues with latest browsers [[f9f9f9f](https://github.com/scriptscat/scriptcat/commit/f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9)] + +**Full Beta Changelog**: https://github.com/scriptscat/scriptcat/compare/v1.0.0...v1.1.0-beta diff --git a/i18n/en/docusaurus-plugin-content-docs/current/dev/README.md b/i18n/en/docusaurus-plugin-content-docs/current/dev/README.md new file mode 100644 index 0000000..58c731d --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/dev/README.md @@ -0,0 +1,17 @@ +--- +id: dev +--- + +# Introduction + +This extension supports three types of scripts: + +- Frontend scripts +- [Background scripts](./background.md) +- [Scheduled scripts](./background.md#scheduled-scripts) + +Frontend scripts are traditional userscripts (like Tampermonkey scripts). Background scripts and scheduled scripts are unique features supported by the ScriptCat extension. Please refer to the corresponding documentation for details. + +You can learn about [Tampermonkey APIs](./api.md) and [ScriptCat's background scripts](./background.md) through this documentation. Additionally, we maintain a [Userscript Development Guide](https://learn.scriptcat.org/) documentation site with rich learning resources. Everyone is welcome to join the discussion. + +For areas where the documentation is incomplete, you can provide feedback on [Github](https://github.com/scriptscat/scriptcat.org) or submit a PR to help us improve. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/dev/api.md b/i18n/en/docusaurus-plugin-content-docs/current/dev/api.md new file mode 100644 index 0000000..296aaa2 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/dev/api.md @@ -0,0 +1,293 @@ +--- +id: api +--- + +# API Documentation + +## Description + +This extension's API definition references [Tampermonkey documentation](https://www.tampermonkey.net/documentation.php). Due to time and resource constraints, only some APIs have been implemented, with continued iteration planned. APIs that are extended by this extension or differ from the original GM will be specially marked in the documentation (using * symbol). For some APIs, synchronous functions are also provided, following the rule: `GM.*`. Please see the documentation content for details. + +For detailed API definitions, please refer to `scriptcat.d.ts` or the built-in editor hints, as documentation updates may not be timely. For APIs unique to this extension, please see [CatApi Documentation](cat-api.md). + +You can also view related examples in [example](https://github.com/scriptscat/scriptcat/tree/main/example). + +## Definitions + +### GM_info + +Get script-related information, including metadata and runtime environment parameters. Common fields include `scriptHandler`, `version`, `scriptMetaStr`, `scriptUpdateURL`, `downloadMode`, etc. For detailed definitions, please refer to `scriptcat.d.ts` (not completely comprehensive). + +```js +console.log(GM_info.scriptHandler); +console.log(GM_info.version); +console.log(GM_info.scriptMetaStr); +``` + +* `isIncognito`, `sandboxMode`, `runAt`, `userAgentData` are not supported + +### GM_cookie \* + +Asynchronously operate page cookies, supporting cross-domain, HttpOnly, and partitioned cookies. + +> After v0.17.0-alpha, store and tabid related parameters were removed. Now it determines whether to get cookies from incognito or normal windows based on the current window. + +Must use `@connect` to declare the host to operate on and requires user authorization. Although compatible with TM's `GM_cookie.list` operation, it's not recommended for consistency. + +* `sameSite` is not supported + +```typescript +// name and domain cannot both be empty +declare function GM_cookie( + action: GMTypes.CookieAction, + details: GMTypes.CookieDetails, + ondone: (cookie: GMTypes.Cookie[], error: unknown | undefined) => void +): void; + +declare namespace GMTypes { + type CookieAction = "list" | "delete" | "set"; + interface CookieDetails { + url?: string; + name?: string; + value?: string; + domain?: string; + path?: string; + secure?: boolean; + httpOnly?: boolean; + expirationDate?: number; + } + interface Cookie { + domain: string; + hostOnly: boolean; + httpOnly: boolean; + name: string; + path: string; + sameSite: string; + secure: boolean; + session: boolean; + value: string; + expirationDate?: number; + } +} +``` + +#### Examples + +```js +// List cookies +GM_cookie("list", {domain: ".scriptcat.org"}, (cookies, error) => { + console.log(cookies); +}); + +// Set cookie +GM_cookie("set", { + url: "https://scriptcat.org", + name: "test", + value: "cookie_value" +}, (cookies, error) => { + console.log("Cookie set"); +}); + +// Delete cookie +GM_cookie("delete", { + url: "https://scriptcat.org", + name: "test" +}, (cookies, error) => { + console.log("Cookie deleted"); +}); +``` + +### GM.cookie \* + +Synchronous version of GM_cookie, returns a Promise. + +```js +// List cookies +const cookies = await GM.cookie("list", {domain: ".scriptcat.org"}); +console.log(cookies); + +// Set cookie +await GM.cookie("set", { + url: "https://scriptcat.org", + name: "test", + value: "cookie_value" +}); + +// Delete cookie +await GM.cookie("delete", { + url: "https://scriptcat.org", + name: "test" +}); +``` + +### GM_xmlhttpRequest + +Make HTTP requests with cross-origin capabilities. + +```js +GM_xmlhttpRequest({ + method: "GET", + url: "https://api.example.com/data", + headers: { + "User-Agent": "ScriptCat" + }, + onload: function(response) { + console.log(response.responseText); + }, + onerror: function(error) { + console.error("Request failed:", error); + } +}); +``` + +### GM.xmlHttpRequest + +Promise-based version of GM_xmlhttpRequest. + +```js +try { + const response = await GM.xmlHttpRequest({ + method: "GET", + url: "https://api.example.com/data", + headers: { + "User-Agent": "ScriptCat" + } + }); + console.log(response.responseText); +} catch (error) { + console.error("Request failed:", error); +} +``` + +### GM_setValue / GM_getValue + +Store and retrieve persistent data. + +```js +// Set value +GM_setValue("myKey", "myValue"); + +// Get value +const value = GM_getValue("myKey", "defaultValue"); +console.log(value); +``` + +### GM.setValue / GM.getValue + +Promise-based versions of the storage functions. + +```js +// Set value +await GM.setValue("myKey", "myValue"); + +// Get value +const value = await GM.getValue("myKey", "defaultValue"); +console.log(value); +``` + +### GM_deleteValue / GM_listValues + +Delete stored values and list all keys. + +```js +// Delete value +GM_deleteValue("myKey"); + +// List all keys +const keys = GM_listValues(); +console.log(keys); +``` + +### GM.deleteValue / GM.listValues + +Promise-based versions. + +```js +// Delete value +await GM.deleteValue("myKey"); + +// List all keys +const keys = await GM.listValues(); +console.log(keys); +``` + +### GM_addStyle + +Add CSS styles to the page. + +```js +GM_addStyle(` + .my-custom-style { + color: red; + font-weight: bold; + } +`); +``` + +### GM_getResourceText / GM_getResourceURL + +Access resources defined in script metadata. + +```js +// Get resource as text +const cssText = GM_getResourceText("myCss"); + +// Get resource URL +const imageUrl = GM_getResourceURL("myImage"); +``` + +### GM_registerMenuCommand + +Register menu commands in the extension popup. + +```js +GM_registerMenuCommand("My Command", function() { + alert("Menu command clicked!"); +}, "m"); +``` + +### GM_unregisterMenuCommand + +Unregister previously registered menu commands. + +```js +const menuId = GM_registerMenuCommand("Temp Command", () => {}); +GM_unregisterMenuCommand(menuId); +``` + +### GM_notification + +Display desktop notifications. + +```js +GM_notification({ + title: "ScriptCat Notification", + text: "This is a test notification", + image: "https://scriptcat.org/favicon.ico", + onclick: function() { + console.log("Notification clicked"); + } +}); +``` + +### GM_openInTab + +Open URLs in new tabs. + +```js +// Open in new tab +GM_openInTab("https://scriptcat.org"); + +// Open in background tab +GM_openInTab("https://scriptcat.org", {active: false}); +``` + +### GM_setClipboard + +Set clipboard content. + +```js +GM_setClipboard("Text to copy", "text"); +``` + +For more detailed API documentation and examples, please refer to the complete API reference and the built-in TypeScript definitions. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/dev/background.md b/i18n/en/docusaurus-plugin-content-docs/current/dev/background.md new file mode 100644 index 0000000..9930c8e --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/dev/background.md @@ -0,0 +1,203 @@ +--- +id: background +--- + +# Background Scripts + +Background scripts are suitable for continuously running scripts. Background scripts are unique to ScriptCat. They run in a sandbox and cannot manipulate DOM objects. You can use GM APIs consistent with Tampermonkey for development, with compatibility notes marked in the documentation. + +## Background Scripts + +Background scripts are declared with the `@background` attribute. Background scripts allow scripts to run continuously in the background after the script is enabled or the browser starts. + +## Scheduled Scripts + +> Scheduled scripts are also a type of background script, suitable for scripts that execute at regular intervals. + +Scheduled scripts are declared with the `@crontab` attribute and can be called with second-level precision. They provide a `once` parameter, indicating execution once within a certain time period (considering cases when the browser is not open). It's recommended that script runtime and retry time should not exceed the scheduled interval. + +You can use online tools to test cron expressions, replacing `once` with `*` in the extension: [Cron Online Tester](https://tool.lu/crontab/) + +On the console page, hovering over the `Run Status` column will display the next execution time. + +### Crontab Examples + +> Please note that only the first crontab expression in a script takes effect. The `once` semantic means running only once at the current time position. + +```javascript +//@crontab * * * * * * Run every second +//@crontab * * * * * Run every minute +//@crontab 0 */6 * * * Execute once at minute 0 of every 6 hours +//@crontab 15 */6 * * * Execute once at minute 15 of every 6 hours +//@crontab * once * * * Run once every hour +//@crontab * * once * * Run once every day +//@crontab * 10 once * * Run once between 10:00-10:59 daily. If it runs at 10:04, it won't run again from 10:05-10:59 +//@crontab * 1,3,5 once * * Run once during 1 AM, 3 AM, or 5 AM daily. If it runs at 1 AM, it won't run at 3 AM or 5 AM +//@crontab * */4 once * * Check and run once every 4 hours daily. If it runs at 4 AM, it won't run at 8 AM, 12 PM, 4 PM, 8 PM, 12 AM, etc. +//@crontab * 10-23 once * * Run once between 10:00-23:59 daily. If it runs at 10:04, it won't run from 10:05-23:59 +//@crontab * once 13 * * Run once every hour on the 13th of each month +``` + +## Logging + +On the script list page, hovering over the `Run Status` column shows the script's running status. Clicking opens a popup showing log content printed via `GM_log`. + +![Background Script Status](./background.assets/image-20210621214143661.png) + +![Background Script Logs](./background.assets/image-20210621214124685.png) + +## API Compatibility + +Background scripts support most GM APIs with the following considerations: + +### Supported APIs +- `GM_setValue` / `GM_getValue` - Data storage +- `GM_deleteValue` / `GM_listValues` - Data management +- `GM_xmlhttpRequest` - HTTP requests +- `GM_cookie` - Cookie operations +- `GM_notification` - Desktop notifications +- `GM_log` - Logging (background script specific) +- `GM_openInTab` - Open URLs in new tabs +- `GM_setClipboard` - Clipboard operations + +### Unsupported APIs +- `GM_addStyle` - No DOM access in background +- `GM_getResourceText` / `GM_getResourceURL` - Limited resource access +- DOM manipulation functions - Background scripts run in sandbox + +### Background Script Specific Features + +#### GM_log +Background scripts can use `GM_log` to output logs that are viewable in the script management interface. + +```javascript +// @background +GM_log("Background script started"); +GM_log("Processing data...", data); +``` + +#### Persistent Execution +Background scripts continue running even when no web pages are open, making them ideal for: +- Periodic data synchronization +- Monitoring tasks +- Background processing +- Scheduled operations + +#### Example Background Script + +```javascript +// ==UserScript== +// @name Background Example +// @namespace http://tampermonkey.net/ +// @version 0.1 +// @description Example background script +// @author You +// @background +// @grant GM_setValue +// @grant GM_getValue +// @grant GM_xmlhttpRequest +// @grant GM_log +// ==/UserScript== + +(function() { + 'use strict'; + + GM_log("Background script initialized"); + + // Example: Check for updates every 5 minutes + setInterval(async () => { + try { + const response = await GM.xmlHttpRequest({ + method: "GET", + url: "https://api.example.com/status" + }); + + const data = JSON.parse(response.responseText); + await GM.setValue("lastCheck", Date.now()); + + GM_log("Status check completed", data); + } catch (error) { + GM_log("Status check failed", error); + } + }, 5 * 60 * 1000); // 5 minutes +})(); +``` + +#### Example Scheduled Script + +```javascript +// ==UserScript== +// @name Daily Report +// @namespace http://tampermonkey.net/ +// @version 0.1 +// @description Generate daily report +// @author You +// @crontab 0 9 * * * Daily at 9:00 AM +// @grant GM_setValue +// @grant GM_getValue +// @grant GM_xmlhttpRequest +// @grant GM_log +// ==/UserScript== + +(function() { + 'use strict'; + + GM_log("Daily report script started"); + + // Generate and send daily report + async function generateReport() { + try { + const data = await GM.getValue("reportData", {}); + + // Process report data + const report = { + date: new Date().toISOString().split('T')[0], + summary: data + }; + + // Send report + await GM.xmlHttpRequest({ + method: "POST", + url: "https://api.example.com/reports", + headers: { + "Content-Type": "application/json" + }, + data: JSON.stringify(report) + }); + + GM_log("Daily report sent successfully"); + } catch (error) { + GM_log("Failed to generate report", error); + } + } + + generateReport(); +})(); +``` + +## Best Practices + +1. **Error Handling**: Always implement proper error handling in background scripts +2. **Resource Management**: Be mindful of memory usage in long-running scripts +3. **Logging**: Use `GM_log` for debugging and monitoring +4. **Graceful Degradation**: Handle cases where APIs might not be available +5. **Performance**: Avoid intensive operations that could impact browser performance + +## Troubleshooting + +### Common Issues + +1. **Script Not Running**: Check if the `@background` or `@crontab` declaration is correct +2. **API Errors**: Verify that required `@grant` permissions are declared +3. **Timing Issues**: For scheduled scripts, verify cron expression syntax +4. **Memory Leaks**: Monitor long-running scripts for memory usage + +### Debugging + +Use the script management interface to: +- View script execution status +- Check log outputs via `GM_log` +- Monitor next execution times for scheduled scripts +- Restart scripts if needed + +For more advanced debugging, you can also use browser developer tools to inspect background script behavior. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/dev/cat-api.md b/i18n/en/docusaurus-plugin-content-docs/current/dev/cat-api.md new file mode 100644 index 0000000..6fbea51 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/dev/cat-api.md @@ -0,0 +1,345 @@ +--- +id: cat-api +--- + +# CatApi Documentation + +## Description + +APIs unique to this extension are defined with the CAT_ prefix. + +You can also view related examples in [example](https://github.com/scriptscat/scriptcat/tree/main/example). + +## Definitions + +### CAT_setProxy + +> Deprecated in v0.9.1 stable release, may be added to beta versions in the future + +Set proxy configuration. Please note that this feature may conflict with extensions like Proxy SwitchyOmega. Multiple scripts can use proxies without conflicts (e.g., one script provides Google access, another provides Twitter access). + +Please first understand [PAC](https://developer.mozilla.org/en-US/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file) and [Chromium complete URL restrictions in PAC](https://github.com/FelisCatus/SwitchyOmega/wiki/Chromium-%E5%AE%8C%E6%95%B4%E7%BD%91%E5%9D%80%E9%99%90%E5%88%B6). + +```typescript +declare function CAT_setProxy(rule: CAT_Types.ProxyRule[] | string): void; + +declare namespace CAT_Types { + interface ProxyRule { + proxyServer: ProxyServer; + matchUrl: string[]; + } + type ProxyScheme = "http" | "https" | "quic" | "socks4" | "socks5"; + interface ProxyServer { + scheme?: ProxyScheme; + host: string; + port?: number; + } +} +``` + +#### Example + +```javascript +// Set HTTP proxy for specific URLs +CAT_setProxy([ + { + proxyServer: { + scheme: "http", + host: "proxy.example.com", + port: 8080 + }, + matchUrl: ["*://google.com/*", "*://*.google.com/*"] + } +]); + +// Set SOCKS5 proxy +CAT_setProxy([ + { + proxyServer: { + scheme: "socks5", + host: "127.0.0.1", + port: 1080 + }, + matchUrl: ["*://twitter.com/*", "*://*.twitter.com/*"] + } +]); +``` + +### CAT_clearProxy + +> Deprecated in v0.9.1 stable release, may be added to beta versions in the future + +Clear proxy configuration. + +```typescript +declare function CAT_clearProxy(): void; +``` + +#### Example + +```javascript +// Clear all proxy settings +CAT_clearProxy(); +``` + +### CAT_createTab + +Create new browser tabs with enhanced options. + +```typescript +declare function CAT_createTab(options: CAT_Types.CreateTabOptions): Promise; + +declare namespace CAT_Types { + interface CreateTabOptions { + url: string; + active?: boolean; + pinned?: boolean; + index?: number; + windowId?: number; + } +} +``` + +#### Example + +```javascript +// Create new tab +const tabId = await CAT_createTab({ + url: "https://scriptcat.org", + active: true +}); + +// Create pinned tab +await CAT_createTab({ + url: "https://scriptcat.org", + active: false, + pinned: true +}); +``` + +### CAT_closeTab + +Close browser tabs by ID. + +```typescript +declare function CAT_closeTab(tabId: number): Promise; +``` + +#### Example + +```javascript +// Close specific tab +await CAT_closeTab(123); +``` + +### CAT_getUserConfig + +Get user configuration for the current script. + +```typescript +declare function CAT_getUserConfig(): Promise; + +declare namespace CAT_Types { + interface UserConfig { + [key: string]: any; + } +} +``` + +#### Example + +```javascript +// Get user configuration +const config = await CAT_getUserConfig(); +console.log("User settings:", config); +``` + +### CAT_setUserConfig + +Set user configuration for the current script. + +```typescript +declare function CAT_setUserConfig(config: CAT_Types.UserConfig): Promise; +``` + +#### Example + +```javascript +// Set user configuration +await CAT_setUserConfig({ + theme: "dark", + autoUpdate: true, + refreshInterval: 5000 +}); +``` + +### CAT_registerMenuInput + +Register input menu items in the extension popup. + +```typescript +declare function CAT_registerMenuInput(options: CAT_Types.MenuInputOptions): string; + +declare namespace CAT_Types { + interface MenuInputOptions { + title: string; + type: "text" | "number" | "password" | "select"; + value?: any; + options?: string[] | { [key: string]: string }; + placeholder?: string; + onchange?: (value: any) => void; + } +} +``` + +#### Example + +```javascript +// Register text input +const inputId = CAT_registerMenuInput({ + title: "API Key", + type: "text", + placeholder: "Enter your API key", + onchange: (value) => { + GM_setValue("apiKey", value); + } +}); + +// Register select input +CAT_registerMenuInput({ + title: "Theme", + type: "select", + options: { + "light": "Light Theme", + "dark": "Dark Theme", + "auto": "Auto" + }, + value: "auto", + onchange: (value) => { + GM_setValue("theme", value); + } +}); +``` + +### CAT_unregisterMenuInput + +Unregister previously registered menu input. + +```typescript +declare function CAT_unregisterMenuInput(inputId: string): void; +``` + +#### Example + +```javascript +// Unregister menu input +CAT_unregisterMenuInput(inputId); +``` + +### CAT_fetch + +Enhanced fetch API with additional ScriptCat features. + +```typescript +declare function CAT_fetch(url: string, options?: CAT_Types.FetchOptions): Promise; + +declare namespace CAT_Types { + interface FetchOptions extends RequestInit { + timeout?: number; + retry?: number; + retryDelay?: number; + } +} +``` + +#### Example + +```javascript +// Basic fetch +const response = await CAT_fetch("https://api.example.com/data"); +const data = await response.json(); + +// Fetch with timeout and retry +const response2 = await CAT_fetch("https://api.example.com/data", { + timeout: 5000, + retry: 3, + retryDelay: 1000, + headers: { + "Authorization": "Bearer token" + } +}); +``` + +## Best Practices + +### Error Handling + +Always implement proper error handling when using CAT APIs: + +```javascript +try { + const result = await CAT_createTab({ + url: "https://example.com" + }); + console.log("Tab created:", result); +} catch (error) { + console.error("Failed to create tab:", error); +} +``` + +### Permission Management + +Ensure your script declares the necessary permissions: + +```javascript +// ==UserScript== +// @name CAT API Example +// @grant CAT_createTab +// @grant CAT_getUserConfig +// @grant CAT_setUserConfig +// ==/UserScript== +``` + +### Configuration Management + +Use CAT_getUserConfig and CAT_setUserConfig for persistent settings: + +```javascript +// Load configuration on script start +const config = await CAT_getUserConfig(); +const theme = config.theme || "light"; + +// Save configuration when changed +function updateTheme(newTheme) { + CAT_setUserConfig({ + ...config, + theme: newTheme + }); +} +``` + +## Migration Notes + +### From Deprecated APIs + +If you're using deprecated APIs like CAT_setProxy, consider alternative approaches: + +1. Use browser's built-in proxy settings +2. Implement proxy logic at the application level +3. Use GM_xmlhttpRequest with custom routing + +### Version Compatibility + +Always check the ScriptCat version before using newer CAT APIs: + +```javascript +if (GM_info.version >= "1.0.0") { + // Use newer CAT APIs + await CAT_createTab({url: "https://example.com"}); +} else { + // Fallback for older versions + GM_openInTab("https://example.com"); +} +``` + +For more examples and detailed usage, please refer to the [example repository](https://github.com/scriptscat/scriptcat/tree/main/example). diff --git a/i18n/en/docusaurus-plugin-content-docs/current/dev/cloudcat.md b/i18n/en/docusaurus-plugin-content-docs/current/dev/cloudcat.md new file mode 100644 index 0000000..8348fc0 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/dev/cloudcat.md @@ -0,0 +1,298 @@ +--- +id: cloudcat +--- + +# Cloud Execution + +> Provides multiple cloud execution methods. For details, see [Runtime Environment](#runtime-environment). Additionally, [CloudCat](https://github.com/scriptscat/cloudcat) is a service for cloud execution of background scripts, a FAAS platform currently under development. + +⚠️ Please note ⚠️: After uploading to the cloud, the `once` semantic in scheduled script expressions will change, replacing the time before `once` with the minimum value for execution. + +Examples: + +* `* * once * *` => `0 0 * * *` Run once daily → Run at 00:00 daily +* `* 1-23 once * *` => `0 1 * * *` Run once between 1-23 hours daily → Run at 01:00 daily +* `* 1,3,5 once * *` => `0 1 * * *` Run once at 1, 3, or 5 o'clock daily → Run at 01:00 daily +* `* */4 once * *` => `0 0 * * *` Run once every 4 hours daily → Run at 00:00 daily +* `* 1-23/4 once * *` => `0 1 * * *` Run once every 4 hours between 1-23 hours daily → Run at 01:00 daily +* `* 10 once * *` => `0 10 * * *` Run once at 10 o'clock daily → Run at 10:00 daily +* `* * * once *` => `0 0 1 * *` Run once monthly → Run at 00:00 on the 1st of each month + +## CloudCat Additional Metadata + +Reference script: [Bilibili Auto Check-in](https://scriptcat.org/script-show-page/48) + +### cloudCat + +Declares that this script can run using `CloudCat` method. When a script has this option, a cloud execution button will appear in the script list. Clicking it allows you to select the execution method. For execution methods, see [Runtime Environment](#runtime-environment). + +![CloudCat Button](./cloudcat.assets/image-20220203225847694.png) + +### cloudServer + +> Related to cloudcat, not yet implemented + +Default CloudCat server address + +### exportValue + +Describes values to export to the cloud. Multiple descriptions can exist. + +```ts +// @exportValue key1,key2,key3 +// @exportValue key4,key5,key6 +``` + +### exportCookie + +Describes cookies to export to the cloud. Multiple descriptions can exist. Parameters use `GM_cookie`'s `CookieDetails` format, for example: + +```js +// @exportCookie domain=.example.com,name=sessionId +// @exportCookie domain=.api.example.com,name=authToken +// @exportCookie url=https://example.com,name=userPrefs +``` + +## Runtime Environment + +CloudCat supports multiple runtime environments for different use cases: + +### 1. GitHub Actions + +Execute scripts using GitHub Actions infrastructure. + +**Advantages:** +- Free tier available +- Reliable infrastructure +- Good for scheduled tasks +- Version control integration + +**Limitations:** +- Execution time limits +- Limited to public repositories (for free tier) +- Cold start delays + +**Setup:** +1. Create a GitHub repository +2. Configure GitHub Actions workflow +3. Upload script with CloudCat metadata +4. Configure secrets for sensitive data + +### 2. Serverless Functions + +Execute scripts on serverless platforms (AWS Lambda, Vercel, etc.). + +**Advantages:** +- Pay-per-execution +- Automatic scaling +- No server management +- Fast cold starts + +**Limitations:** +- Platform-specific limitations +- Timeout restrictions +- Memory constraints + +### 3. CloudCat Service + +Use the dedicated CloudCat FAAS platform (under development). + +**Advantages:** +- Optimized for userscripts +- Built-in GM API support +- Easy deployment +- Script-specific features + +**Limitations:** +- Still in development +- Limited availability + +## Cloud Script Example + +```js +// ==UserScript== +// @name Cloud Auto Check-in +// @namespace https://scriptcat.org/ +// @version 1.0.0 +// @description Automatically check in to various services +// @author You +// @crontab 0 9 * * * +// @cloudCat +// @exportValue username,password +// @exportCookie domain=.example.com,name=sessionId +// @exportCookie domain=.api.example.com,name=authToken +// @grant GM_setValue +// @grant GM_getValue +// @grant GM_xmlhttpRequest +// @grant GM_cookie +// @grant GM_notification +// ==/UserScript== + +(function() { + 'use strict'; + + async function performCheckin() { + try { + // Get exported values + const username = GM_getValue('username'); + const password = GM_getValue('password'); + + if (!username || !password) { + console.error('Missing credentials'); + return; + } + + // Perform check-in request + const response = await GM.xmlHttpRequest({ + method: 'POST', + url: 'https://api.example.com/checkin', + headers: { + 'Content-Type': 'application/json' + }, + data: JSON.stringify({ + username: username, + password: password + }) + }); + + if (response.status === 200) { + const result = JSON.parse(response.responseText); + console.log('Check-in successful:', result); + + // Send notification + GM_notification({ + title: 'Check-in Successful', + text: `Earned ${result.points} points`, + timeout: 5000 + }); + } else { + throw new Error(`Check-in failed: ${response.status}`); + } + + } catch (error) { + console.error('Check-in error:', error); + + GM_notification({ + title: 'Check-in Failed', + text: error.message, + timeout: 5000 + }); + } + } + + // Execute check-in + performCheckin(); +})(); +``` + +## Data Export and Import + +### Exporting Values + +Use `@exportValue` to specify which stored values should be available in the cloud: + +```js +// @exportValue apiKey,refreshToken,userSettings +``` + +These values will be automatically synchronized from your local ScriptCat to the cloud environment. + +### Exporting Cookies + +Use `@exportCookie` to specify which cookies should be available in the cloud: + +```js +// @exportCookie domain=.example.com,name=sessionId +// @exportCookie url=https://api.example.com,name=authToken +``` + +Cookie export supports the same parameters as `GM_cookie`: +- `domain` - Cookie domain +- `name` - Cookie name +- `url` - Specific URL +- `path` - Cookie path + +### Security Considerations + +**Data Encryption:** +- All exported data is encrypted before transmission +- Use strong encryption keys +- Regularly rotate sensitive credentials + +**Access Control:** +- Limit cloud execution permissions +- Use environment-specific credentials +- Monitor execution logs + +**Best Practices:** +- Don't export unnecessary sensitive data +- Use token-based authentication when possible +- Implement proper error handling +- Log security events + +## Deployment Workflow + +### 1. Local Development +- Develop and test script locally +- Add CloudCat metadata +- Configure export values and cookies + +### 2. Cloud Configuration +- Set up cloud runtime environment +- Configure environment variables +- Set up monitoring and logging + +### 3. Deployment +- Upload script to cloud platform +- Verify exported data synchronization +- Test cloud execution + +### 4. Monitoring +- Monitor execution logs +- Set up alerts for failures +- Track performance metrics + +## Troubleshooting + +### Common Issues + +1. **Export Data Not Available** + - Verify `@exportValue` and `@exportCookie` declarations + - Check data synchronization status + - Ensure proper permissions + +2. **Execution Failures** + - Check cloud platform logs + - Verify network connectivity + - Review timeout settings + +3. **Authentication Errors** + - Verify exported cookies are valid + - Check token expiration + - Update credentials if needed + +### Debugging + +- Use console logging for cloud execution +- Monitor network requests +- Check cloud platform metrics +- Review error notifications + +### Performance Optimization + +- Minimize exported data size +- Use efficient API calls +- Implement proper caching +- Optimize execution time + +## Future Developments + +The CloudCat platform is actively being developed with planned features: + +- **Enhanced Runtime Support** - More cloud platforms +- **Better Debugging Tools** - Cloud-specific debugging +- **Improved Security** - Advanced encryption and access control +- **Performance Monitoring** - Detailed execution analytics +- **Cost Optimization** - Intelligent resource management + +For the latest updates and documentation, visit the [CloudCat GitHub repository](https://github.com/scriptscat/cloudcat). diff --git a/i18n/en/docusaurus-plugin-content-docs/current/dev/config.md b/i18n/en/docusaurus-plugin-content-docs/current/dev/config.md new file mode 100644 index 0000000..acb8bd2 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/dev/config.md @@ -0,0 +1,442 @@ +--- +id: config +--- + +# User Configuration + +Content in `==UserConfig==` should be placed after `==UserScript==` and represents user configuration options for the script. Configuration descriptions are written in [YAML](https://yaml.org/) format: + +```js +/* ==UserConfig== +group1: + configA: # Key is group.config, e.g., this key is: group1.configA + title: Configuration A # Configuration title + description: This is a text type configuration # Configuration description + type: text # Option type, auto-detected from data if not specified + default: Default value # Default value for the configuration + min: 2 # Minimum 2 characters for text + max: 18 # Maximum 18 characters for text + password: true # Set as password field + configB: + title: Configuration B + description: This is a checkbox configuration + type: checkbox + default: true + configC: + title: Configuration C + description: This is a select list configuration + type: select + default: 1 + values: [1,2,3,4,5] + configD: + title: Configuration D + description: This is a dynamic select list configuration + type: select + bind: $cookies # Dynamically display bound values, value starts with $, must be an array + configE: + title: Configuration E + description: This is a multi-select list configuration + type: mult-select + default: [1] + values: [1,2,3,4,5] + configF: + title: Configuration F + description: This is a dynamic multi-select list configuration + type: mult-select + bind: $cookies + configG: + title: Configuration G + description: This is a number configuration + type: number + default: 10 + min: 1 + max: 100 + configH: + title: Configuration H + description: This is a textarea configuration + type: textarea + default: "Multi-line\ntext content" + rows: 5 +group2: + configI: + title: Configuration I + description: This is a color picker configuration + type: color + default: "#ff0000" + configJ: + title: Configuration J + description: This is a file input configuration + type: file + accept: ".txt,.json" +==/UserConfig== */ +``` + +## Configuration Types + +### text +Text input field with optional validation. + +**Properties:** +- `min`: Minimum character length +- `max`: Maximum character length +- `password`: Set to `true` for password fields +- `placeholder`: Placeholder text + +```yaml +apiKey: + title: API Key + description: Enter your API key + type: text + password: true + min: 10 + max: 50 + placeholder: "Enter API key here" +``` + +### number +Numeric input with optional range validation. + +**Properties:** +- `min`: Minimum value +- `max`: Maximum value +- `step`: Step increment + +```yaml +refreshInterval: + title: Refresh Interval + description: Refresh interval in seconds + type: number + default: 30 + min: 5 + max: 300 + step: 5 +``` + +### checkbox +Boolean checkbox input. + +```yaml +enableFeature: + title: Enable Feature + description: Enable this feature + type: checkbox + default: true +``` + +### select +Single selection dropdown. + +**Properties:** +- `values`: Array of available options +- `bind`: Dynamic binding to a variable (starts with $) + +```yaml +theme: + title: Theme + description: Select theme + type: select + default: "light" + values: ["light", "dark", "auto"] +``` + +### mult-select +Multiple selection list. + +**Properties:** +- `values`: Array of available options +- `bind`: Dynamic binding to a variable (starts with $) + +```yaml +enabledFeatures: + title: Enabled Features + description: Select features to enable + type: mult-select + default: ["feature1"] + values: ["feature1", "feature2", "feature3"] +``` + +### textarea +Multi-line text input. + +**Properties:** +- `rows`: Number of visible rows +- `cols`: Number of visible columns + +```yaml +customScript: + title: Custom Script + description: Enter custom JavaScript code + type: textarea + rows: 10 + default: "// Your code here" +``` + +### color +Color picker input. + +```yaml +accentColor: + title: Accent Color + description: Choose accent color + type: color + default: "#007bff" +``` + +### file +File input for uploading files. + +**Properties:** +- `accept`: Accepted file types +- `multiple`: Allow multiple files + +```yaml +configFile: + title: Configuration File + description: Upload configuration file + type: file + accept: ".json,.yaml,.yml" +``` + +## Dynamic Binding + +You can bind configuration options to dynamic values using the `bind` property. The bound variable must start with `$` and should be an array. + +```javascript +// In your script, set the dynamic values +GM_setValue("$cookies", ["cookie1", "cookie2", "cookie3"]); +``` + +```yaml +selectedCookies: + title: Select Cookies + description: Choose cookies to monitor + type: mult-select + bind: $cookies +``` + +## Accessing Configuration Values + +Use `GM_getValue` to access configuration values in your script: + +```javascript +// Get single configuration value +const apiKey = GM_getValue("group1.configA", "default_value"); + +// Get checkbox value +const isEnabled = GM_getValue("group1.configB", false); + +// Get select value +const selectedOption = GM_getValue("group1.configC", 1); + +// Get multi-select values +const selectedItems = GM_getValue("group1.configE", []); +``` + +## Setting Configuration Values + +Use `GM_setValue` to programmatically set configuration values: + +```javascript +// Set text value +GM_setValue("group1.configA", "new_value"); + +// Set checkbox value +GM_setValue("group1.configB", true); + +// Set select value +GM_setValue("group1.configC", 3); + +// Set multi-select values +GM_setValue("group1.configE", [1, 3, 5]); +``` + +## Configuration Groups + +Organize related configurations into groups for better user experience: + +```yaml +appearance: + theme: + title: Theme + type: select + values: ["light", "dark"] + fontSize: + title: Font Size + type: number + min: 12 + max: 24 + +behavior: + autoRefresh: + title: Auto Refresh + type: checkbox + default: true + refreshInterval: + title: Refresh Interval + type: number + default: 60 +``` + +## Best Practices + +### 1. Meaningful Names +Use descriptive names for configuration keys and groups: + +```yaml +# Good +userInterface: + showNotifications: + title: Show Notifications + +# Avoid +ui: + notif: + title: Notif +``` + +### 2. Provide Descriptions +Always include helpful descriptions: + +```yaml +apiTimeout: + title: API Timeout + description: Maximum time to wait for API responses (in seconds) + type: number + default: 30 +``` + +### 3. Set Reasonable Defaults +Provide sensible default values: + +```yaml +maxRetries: + title: Maximum Retries + description: Number of times to retry failed requests + type: number + default: 3 + min: 0 + max: 10 +``` + +### 4. Use Validation +Set appropriate constraints: + +```yaml +username: + title: Username + description: Your username (3-20 characters) + type: text + min: 3 + max: 20 +``` + +### 5. Group Related Options +Organize configurations logically: + +```yaml +network: + timeout: + title: Timeout + type: number + retries: + title: Retries + type: number + +display: + theme: + title: Theme + type: select + fontSize: + title: Font Size + type: number +``` + +## Example Complete Configuration + +```javascript +// ==UserScript== +// @name Example Script with Configuration +// @namespace http://tampermonkey.net/ +// @version 0.1 +// @description Example script demonstrating user configuration +// @author You +// @match https://example.com/* +// @grant GM_getValue +// @grant GM_setValue +// ==/UserScript== + +/* ==UserConfig== +general: + enabled: + title: Enable Script + description: Enable or disable the script functionality + type: checkbox + default: true + + apiKey: + title: API Key + description: Your API key for external services + type: text + password: true + min: 10 + +appearance: + theme: + title: Theme + description: Choose the visual theme + type: select + default: "auto" + values: ["light", "dark", "auto"] + + accentColor: + title: Accent Color + description: Choose the accent color + type: color + default: "#007bff" + +behavior: + autoRefresh: + title: Auto Refresh + description: Automatically refresh data + type: checkbox + default: false + + refreshInterval: + title: Refresh Interval + description: How often to refresh data (in seconds) + type: number + default: 60 + min: 10 + max: 3600 +==/UserConfig== */ + +(function() { + 'use strict'; + + // Load configuration + const config = { + enabled: GM_getValue("general.enabled", true), + apiKey: GM_getValue("general.apiKey", ""), + theme: GM_getValue("appearance.theme", "auto"), + accentColor: GM_getValue("appearance.accentColor", "#007bff"), + autoRefresh: GM_getValue("behavior.autoRefresh", false), + refreshInterval: GM_getValue("behavior.refreshInterval", 60) + }; + + // Use configuration + if (!config.enabled) { + console.log("Script is disabled"); + return; + } + + console.log("Script running with theme:", config.theme); + + if (config.autoRefresh) { + setInterval(() => { + console.log("Auto refreshing..."); + }, config.refreshInterval * 1000); + } +})(); +``` + +This configuration system provides a user-friendly way to customize script behavior without modifying the code directly. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/dev/meta.md b/i18n/en/docusaurus-plugin-content-docs/current/dev/meta.md new file mode 100644 index 0000000..2b8244d --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/dev/meta.md @@ -0,0 +1,362 @@ +--- +id: meta +--- + +# Metadata Documentation + +Content in `==UserScript==` describes the permissions required by the script and script information, located at the very beginning of the script. + +```js +// ==UserScript== +// @name New Userscript +// @namespace https://bbs.tampermonkey.net.cn/ +// @version 0.1.0 +// @description try to take over the world! +// @author You +// @crontab * * once * * +// ==/UserScript== +``` + +## Main Values + +### name + +Script name + +### namespace + +Script namespace. `name + namespace` determines script uniqueness. + +### version + +Script version. It's recommended to follow [Semantic Versioning](https://semver.org/). When script version changes are detected, users will be prompted to update. + +### description + +Detailed description of the script + +### author + +Script author + +### run-at + +Script execution timing + +| Value | Execution Time | Support | +|-------|----------------|---------| +| document-start | Inject script into page as quickly as possible after frontend matches URL | v0.3.0 | +| document-body | Execute when document body is available | v0.3.0 | +| document-end | Execute when DOM is ready (default) | v0.3.0 | +| document-idle | Execute when page is completely loaded | v0.3.0 | +| context-menu | Execute when context menu is triggered | v0.3.0 | + +### match + +URL patterns where the script should run + +```js +// @match https://example.com/* +// @match https://*.example.com/* +// @match *://example.com/* +``` + +### include + +Alternative URL matching (supports regular expressions) + +```js +// @include https://example.com/* +// @include /^https://example\.com/.*$/ +``` + +### exclude + +URL patterns where the script should NOT run + +```js +// @exclude https://example.com/admin/* +// @exclude https://example.com/private/* +``` + +### grant + +Permissions required by the script + +```js +// @grant GM_setValue +// @grant GM_getValue +// @grant GM_xmlhttpRequest +// @grant GM_notification +// @grant unsafeWindow +``` + +Common grants: +- `GM_setValue` / `GM_getValue` - Data storage +- `GM_xmlhttpRequest` - Cross-origin requests +- `GM_notification` - Desktop notifications +- `GM_addStyle` - Add CSS styles +- `GM_openInTab` - Open new tabs +- `GM_setClipboard` - Clipboard access +- `unsafeWindow` - Access to page's window object + +### connect + +Domains that the script can connect to via GM_xmlhttpRequest + +```js +// @connect example.com +// @connect api.example.com +// @connect * +``` + +### require + +External JavaScript libraries to load + +```js +// @require https://code.jquery.com/jquery-3.6.0.min.js +// @require https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js +``` + +### resource + +External resources (CSS, images, etc.) to load + +```js +// @resource myCSS https://example.com/style.css +// @resource myImage https://example.com/image.png +``` + +Access resources in script: +```js +const cssText = GM_getResourceText("myCSS"); +const imageUrl = GM_getResourceURL("myImage"); +``` + +### updateURL / downloadURL + +URLs for script updates + +```js +// @updateURL https://example.com/script.meta.js +// @downloadURL https://example.com/script.user.js +``` + +### supportURL / homepageURL + +Support and homepage URLs + +```js +// @supportURL https://github.com/user/repo/issues +// @homepageURL https://github.com/user/repo +``` + +## ScriptCat Specific Metadata + +### background + +Declare script as background script + +```js +// @background +``` + +Background scripts run continuously in the background, even when no web pages are open. + +### crontab + +Schedule script execution using cron expressions + +```js +// @crontab * * * * * * // Every second +// @crontab 0 */5 * * * * // Every 5 minutes +// @crontab 0 0 * * * * // Every hour +// @crontab 0 0 0 * * * // Every day at midnight +// @crontab * once * * * * // Once per hour +``` + +Cron format: `second minute hour day month dayOfWeek` + +Special keyword `once` means execute only once within the time period. + +### antifeature + +Declare potentially problematic features + +```js +// @antifeature ads // Script shows ads +// @antifeature tracking // Script tracks users +// @antifeature miner // Script mines cryptocurrency +``` + +### license + +Script license + +```js +// @license MIT +// @license GPL-3.0 +// @license Apache-2.0 +``` + +### icon / iconURL + +Script icon + +```js +// @icon https://example.com/icon.png +// @iconURL https://example.com/icon.png +// @icon64 https://example.com/icon64.png +// @icon64URL https://example.com/icon64.png +``` + +## Advanced Features + +### Conditional Execution + +Use multiple match patterns for complex conditions: + +```js +// @match https://example.com/* +// @match https://test.example.com/* +// @exclude https://example.com/admin/* +// @exclude https://example.com/api/* +``` + +### Multi-language Support + +Provide translations for metadata: + +```js +// @name English Name +// @name:zh-CN 中文名称 +// @name:ja 日本語名 +// @description English description +// @description:zh-CN 中文描述 +// @description:ja 日本語の説明 +``` + +### Version Management + +Use semantic versioning for better update management: + +```js +// @version 1.0.0 // Major.Minor.Patch +// @version 1.2.3-beta.1 // Pre-release +// @version 2.0.0-alpha.1 // Alpha version +``` + +## Complete Example + +```js +// ==UserScript== +// @name Advanced Example Script +// @name:zh-CN 高级示例脚本 +// @namespace https://scriptcat.org/ +// @version 1.2.3 +// @description An advanced example demonstrating various metadata features +// @description:zh-CN 展示各种元数据功能的高级示例 +// @author ScriptCat Team +// @license MIT +// @icon https://scriptcat.org/favicon.ico +// @homepageURL https://github.com/scriptscat/example +// @supportURL https://github.com/scriptscat/example/issues +// @updateURL https://raw.githubusercontent.com/scriptscat/example/main/script.meta.js +// @downloadURL https://raw.githubusercontent.com/scriptscat/example/main/script.user.js +// @match https://example.com/* +// @match https://*.example.com/* +// @exclude https://example.com/admin/* +// @run-at document-end +// @grant GM_setValue +// @grant GM_getValue +// @grant GM_xmlhttpRequest +// @grant GM_notification +// @grant GM_addStyle +// @connect api.example.com +// @connect cdn.example.com +// @require https://code.jquery.com/jquery-3.6.0.min.js +// @resource mainCSS https://example.com/styles/main.css +// @resource logo https://example.com/images/logo.png +// @antifeature ads +// ==/UserScript== + +(function() { + 'use strict'; + + // Your script code here + console.log('Advanced example script loaded'); + + // Use required library + $('body').append('
jQuery is available
'); + + // Use resources + const css = GM_getResourceText('mainCSS'); + GM_addStyle(css); + + const logoUrl = GM_getResourceURL('logo'); + console.log('Logo URL:', logoUrl); +})(); +``` + +## Best Practices + +### 1. Use Descriptive Names +Choose clear, descriptive names for your scripts: + +```js +// Good +// @name GitHub Issue Tracker Enhancement + +// Avoid +// @name GH Tool +``` + +### 2. Follow Semantic Versioning +Use proper version numbering: + +```js +// @version 1.0.0 // Initial release +// @version 1.1.0 // New features +// @version 1.1.1 // Bug fixes +// @version 2.0.0 // Breaking changes +``` + +### 3. Specify Minimal Permissions +Only request permissions you actually need: + +```js +// Only grant what you use +// @grant GM_setValue +// @grant GM_getValue +// Don't grant everything unnecessarily +``` + +### 4. Use Specific Match Patterns +Be as specific as possible with URL matching: + +```js +// Good - specific +// @match https://github.com/*/issues/* + +// Avoid - too broad +// @match https://*/* +``` + +### 5. Provide Support Information +Always include support and homepage URLs: + +```js +// @homepageURL https://github.com/user/repo +// @supportURL https://github.com/user/repo/issues +``` + +### 6. Document Antifeatures +Be transparent about potentially problematic features: + +```js +// @antifeature ads This script displays advertisements +// @antifeature tracking This script tracks user behavior for analytics +``` + +This metadata system provides comprehensive control over script behavior and permissions while maintaining compatibility with other userscript managers. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/dev/subscribe.md b/i18n/en/docusaurus-plugin-content-docs/current/dev/subscribe.md new file mode 100644 index 0000000..0cbcbbd --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/dev/subscribe.md @@ -0,0 +1,246 @@ +--- +id: subscribe +--- + +# Subscription Mode + +The file header must use `UserSubscribe` instead of `UserScript`. Installation links should use the `.user.sub.js` suffix and must use `https` links. + +Subscription scripts only show the installation interface for user confirmation during initial installation, but subsequent updates use silent updates unless `connect` permissions change, in which case an update interface will appear for user confirmation. + +A subscription script can describe installation links for multiple required scripts. Scripts installed through subscription mode use silent installation without showing confirmation pages. Installed scripts will appear in the script list, but `connect` permissions will use those declared in the subscription rather than the script's own `connect` permissions. + +```js +// ==UserSubscribe== +// @name xxx +// @description Subscribe to xxx series scripts +// @version 0.1.0 +// @author You +// @connect www.baidu.com +// @scriptUrl https://script.tampermonkey.net.cn/48.user.js +// @scriptUrl https://script.tampermonkey.net.cn/49.user.js +// ==/UserSubscribe== +``` + +## Subscription Updates and Script Updates + +Based on the user's configured `update interval`, the system periodically checks for updates through the subscription link. The `version` field must be configured for this to work. + +Each subscription update compares script links with installed scripts. Scripts not in the new subscription will be deleted, and new scripts will be silently installed. Script updates use the script's own `version` for updating, consistent with normal script update logic. + +## Silent Installation + +Subscription scripts use silent installation. When subscriptions add/remove scripts, only a notification appears without user confirmation. Script update mechanisms remain unchanged and require user confirmation, unless the user has enabled `Settings -> Silent update scripts for non-critical changes`, in which case updates follow that rule. Due to the silent update mechanism, please choose safe and trustworthy subscription sources. + +## Metadata + +Some metadata meanings change in subscription scripts: + +### name + +Subscription name (can be modified in the subscription list) + +### description + +Subscription description, describing the purpose of this subscription + +### version + +Subscription version, used for update detection. Must follow semantic versioning. + +### author + +Subscription author + +### connect + +Domains that subscribed scripts can connect to. This overrides individual script `connect` permissions. + +```js +// @connect api.example.com +// @connect *.example.com +// @connect * +``` + +### scriptUrl + +URLs of scripts to install through this subscription. Multiple `@scriptUrl` entries are supported. + +```js +// @scriptUrl https://example.com/script1.user.js +// @scriptUrl https://example.com/script2.user.js +// @scriptUrl https://example.com/script3.user.js +``` + +### updateURL + +URL for subscription updates (optional) + +```js +// @updateURL https://example.com/subscription.meta.js +``` + +### homepageURL / supportURL + +Homepage and support URLs for the subscription + +```js +// @homepageURL https://github.com/user/subscription +// @supportURL https://github.com/user/subscription/issues +``` + +## Subscription Lifecycle + +### 1. Installation +- User clicks subscription link (`.user.sub.js`) +- Installation dialog appears showing subscription details +- User confirms installation +- All scripts listed in `@scriptUrl` are silently installed +- Subscription is added to subscription list + +### 2. Updates +- System checks for subscription updates based on update interval +- If subscription version changes, update is downloaded +- Script list is compared: + - New scripts are silently installed + - Removed scripts are deleted + - Existing scripts update based on their own version + +### 3. Management +- Users can view subscriptions in the subscription list +- Users can manually update subscriptions +- Users can unsubscribe (removes subscription and all its scripts) + +## Best Practices + +### 1. Use HTTPS +Always use HTTPS for subscription and script URLs: + +```js +// Good +// @scriptUrl https://example.com/script.user.js + +// Avoid +// @scriptUrl http://example.com/script.user.js +``` + +### 2. Version Management +Use semantic versioning for subscriptions: + +```js +// @version 1.0.0 // Initial release +// @version 1.1.0 // New scripts added +// @version 1.0.1 // Bug fixes +// @version 2.0.0 // Breaking changes +``` + +### 3. Minimal Permissions +Only request necessary `connect` permissions: + +```js +// Good - specific domains +// @connect api.example.com +// @connect cdn.example.com + +// Avoid - overly broad +// @connect * +``` + +### 4. Clear Documentation +Provide clear descriptions of what the subscription does: + +```js +// @name Development Tools Collection +// @description A curated collection of development productivity scripts +``` + +### 5. Reliable Sources +Only include scripts from trusted sources in your subscription: + +```js +// Good - reputable sources +// @scriptUrl https://github.com/user/repo/raw/main/script.user.js +// @scriptUrl https://greasyfork.org/scripts/12345/code/script.user.js +``` + +## Example Complete Subscription + +```js +// ==UserSubscribe== +// @name Web Development Toolkit +// @name:zh-CN Web开发工具包 +// @description Essential scripts for web developers +// @description:zh-CN Web开发者必备脚本集合 +// @version 1.2.0 +// @author DevTools Team +// @homepageURL https://github.com/devtools/web-toolkit +// @supportURL https://github.com/devtools/web-toolkit/issues +// @updateURL https://raw.githubusercontent.com/devtools/web-toolkit/main/subscription.meta.js +// @connect api.github.com +// @connect cdn.jsdelivr.net +// @connect unpkg.com +// @scriptUrl https://raw.githubusercontent.com/devtools/web-toolkit/main/scripts/console-enhancer.user.js +// @scriptUrl https://raw.githubusercontent.com/devtools/web-toolkit/main/scripts/network-monitor.user.js +// @scriptUrl https://raw.githubusercontent.com/devtools/web-toolkit/main/scripts/performance-analyzer.user.js +// @scriptUrl https://raw.githubusercontent.com/devtools/web-toolkit/main/scripts/accessibility-checker.user.js +// ==/UserSubscribe== + +// This subscription provides a collection of web development tools: +// 1. Console Enhancer - Improves browser console functionality +// 2. Network Monitor - Tracks network requests and performance +// 3. Performance Analyzer - Analyzes page performance metrics +// 4. Accessibility Checker - Validates accessibility compliance +// +// All scripts are maintained by the DevTools Team and regularly updated +// for compatibility with modern browsers and web standards. +``` + +## Security Considerations + +### 1. Trust Verification +- Only subscribe to sources you trust +- Verify the author's reputation +- Check the subscription's homepage and support links + +### 2. Permission Review +- Review `connect` permissions carefully +- Understand what domains scripts can access +- Be cautious with wildcard permissions (`*`) + +### 3. Script Auditing +- Periodically review scripts installed by subscriptions +- Check for unexpected or suspicious scripts +- Monitor script behavior and permissions + +### 4. Update Monitoring +- Pay attention to subscription update notifications +- Review changes when subscriptions update +- Unsubscribe if you notice suspicious activity + +## Troubleshooting + +### Common Issues + +1. **Subscription Not Updating** + - Check if `version` is properly set + - Verify update URL is accessible + - Check update interval settings + +2. **Scripts Not Installing** + - Verify script URLs are accessible + - Check for HTTPS requirement + - Review error logs in browser console + +3. **Permission Errors** + - Ensure `connect` permissions cover all script needs + - Check for conflicting permissions + - Verify domain accessibility + +### Debugging + +- Use browser developer tools to monitor network requests +- Check ScriptCat logs for error messages +- Test individual script URLs manually +- Verify subscription file syntax + +The subscription system provides a powerful way to manage collections of related scripts while maintaining security and user control. diff --git a/i18n/es/code.json b/i18n/es/code.json new file mode 100644 index 0000000..fe28028 --- /dev/null +++ b/i18n/es/code.json @@ -0,0 +1,170 @@ +{ + "theme.ErrorPageContent.title": { + "message": "Esta página se ha bloqueado.", + "description": "The title of the fallback page when the page crashed" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "Volver arriba", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "Archivo", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "Archivo", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "Navegación de la lista de entradas del blog", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "Entradas más recientes", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "Entradas más antiguas", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "Navegación de entradas del blog", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "Entrada más reciente", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "Entrada más antigua", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "{count} entradas", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} entradas etiquetadas con \"{tagName}\"", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "Ver todas las etiquetas", + "description": "The label of the link targeting the tag list page" + }, + "homepage.hero.title": { + "message": "ScriptCat", + "description": "The hero title on the homepage" + }, + "homepage.hero.subtitle": { + "message": "Una extensión de navegador que puede ejecutar scripts de usuario, ¡todo puede ser scriptificado, permite que tu navegador haga más!", + "description": "The hero subtitle on the homepage" + }, + "homepage.features.powerful.title": { + "message": "Funciones potentes", + "description": "Title for powerful features section" + }, + "homepage.features.powerful.description": { + "message": "Completamente compatible con Tampermonkey, scripts en segundo plano, scripts programados, API rica", + "description": "Description for powerful features section" + }, + "homepage.features.easy.title": { + "message": "Fácil de usar", + "description": "Title for easy to use section" + }, + "homepage.features.easy.description": { + "message": "Editor integrado, autocompletado inteligente, verificación de sintaxis, desarrollo de scripts más eficiente", + "description": "Description for easy to use section" + }, + "homepage.features.secure.title": { + "message": "Seguro y confiable", + "description": "Title for secure and reliable section" + }, + "homepage.features.secure.description": { + "message": "Mecanismo de sandbox, gestión de permisos, garantiza la ejecución segura de scripts", + "description": "Description for secure and reliable section" + }, + "homepage.comments.lihengdao.username": { + "message": "Li Hengdao", + "description": "Nombre de usuario de Li Hengdao en comentarios de la comunidad" + }, + "homepage.comments.lihengdao.description": { + "message": "Cofundador de Tampermonkey CN", + "description": "Descripción de Li Hengdao en comentarios de la comunidad" + }, + "homepage.comments.lihengdao.content": { + "message": "¡ScriptCat es absolutamente increíble!", + "description": "Contenido del comentario de Li Hengdao" + }, + "homepage.comments.student.username": { + "message": "Preocupado por los exámenes", + "description": "Nombre de usuario del estudiante en comentarios de la comunidad" + }, + "homepage.comments.student.description": { + "message": "Estudiante", + "description": "Descripción del estudiante en comentarios de la comunidad" + }, + "homepage.comments.student.content": { + "message": "Gracias a los ricos recursos de aprendizaje de la comunidad, he aprendido mucho y he podido desarrollar mejor mis habilidades técnicas. ScriptCat es una extensión de navegador muy útil que me proporciona funciones convenientes y eficientes.", + "description": "Contenido del comentario del estudiante" + }, + "homepage.comments.enncy.username": { + "message": "Yan Xiaoxi (enncy)", + "description": "Nombre de usuario de enncy en comentarios de la comunidad" + }, + "homepage.comments.enncy.description": { + "message": "Autor de scripts famoso", + "description": "Descripción de enncy en comentarios de la comunidad" + }, + "homepage.comments.enncy.content": { + "message": "Sincero agradecimiento a la comunidad", + "description": "Contenido del comentario de enncy" + }, + "homepage.comments.qianyu.username": { + "message": "Qian Yu", + "description": "Nombre de usuario de Qian Yu en comentarios de la comunidad" + }, + "homepage.comments.qianyu.description": { + "message": "Usuario de Chrome", + "description": "Descripción de Qian Yu en comentarios de la comunidad" + }, + "homepage.comments.qianyu.content": { + "message": "Al principio, la gente pensaba que esto era un plugin JS de nicho... hasta que...", + "description": "Contenido del comentario de Qian Yu" + }, + "homepage.comments.wwwwwllllk.username": { + "message": "wwwwwllllk", + "description": "Nombre de usuario de wwwwwllllk en comentarios de la comunidad" + }, + "homepage.comments.wwwwwllllk.description": { + "message": "Desarrollador Frontend", + "description": "Descripción de wwwwwllllk en comentarios de la comunidad" + }, + "homepage.comments.wwwwwllllk.content": { + "message": "Usando ScriptCat para mejorar mi experiencia en internet, conociendo personas afines en la comunidad.", + "description": "Contenido del comentario de wwwwwllllk" + }, + "homepage.comments.oraer.username": { + "message": "Oraer", + "description": "Nombre de usuario de Oraer en comentarios de la comunidad" + }, + "homepage.comments.oraer.description": { + "message": "Usuario de Chrome", + "description": "Descripción de Oraer en comentarios de la comunidad" + }, + "homepage.comments.oraer.content": { + "message": "¡Primer encuentro con Tampermonkey! ¡Aprendiendo Tampermonkey! ¡Superando Tampermonkey!", + "description": "Contenido del comentario de Oraer" + }, + "homepage.comments.bigonion.username": { + "message": "bigonion", + "description": "Nombre de usuario de bigonion en comentarios de la comunidad" + }, + "homepage.comments.bigonion.description": { + "message": "Desarrollador de ScriptCat", + "description": "Descripción de bigonion en comentarios de la comunidad" + }, + "homepage.comments.bigonion.content": { + "message": "ScriptCat es el futuro.", + "description": "Contenido del comentario de bigonion" + } +} diff --git a/i18n/fr/code.json b/i18n/fr/code.json new file mode 100644 index 0000000..bb9ece2 --- /dev/null +++ b/i18n/fr/code.json @@ -0,0 +1,170 @@ +{ + "theme.ErrorPageContent.title": { + "message": "Cette page a planté.", + "description": "The title of the fallback page when the page crashed" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "Retour en haut", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "Archive", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "Archive", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "Navigation de la liste des articles de blog", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "Articles plus récents", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "Articles plus anciens", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "Navigation des articles de blog", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "Article plus récent", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "Article plus ancien", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "{count} articles", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} articles étiquetés avec \"{tagName}\"", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "Voir toutes les étiquettes", + "description": "The label of the link targeting the tag list page" + }, + "homepage.hero.title": { + "message": "ScriptCat", + "description": "The hero title on the homepage" + }, + "homepage.hero.subtitle": { + "message": "Une extension de navigateur qui peut exécuter des scripts utilisateur, tout peut être scripté, permettez à votre navigateur de faire plus !", + "description": "The hero subtitle on the homepage" + }, + "homepage.features.powerful.title": { + "message": "Fonctionnalités puissantes", + "description": "Title for powerful features section" + }, + "homepage.features.powerful.description": { + "message": "Entièrement compatible avec Tampermonkey, scripts d'arrière-plan, scripts programmés, API riche", + "description": "Description for powerful features section" + }, + "homepage.features.easy.title": { + "message": "Facile à utiliser", + "description": "Title for easy to use section" + }, + "homepage.features.easy.description": { + "message": "Éditeur intégré, autocomplétion intelligente, vérification de syntaxe, développement de scripts plus efficace", + "description": "Description for easy to use section" + }, + "homepage.features.secure.title": { + "message": "Sécurisé et fiable", + "description": "Title for secure and reliable section" + }, + "homepage.features.secure.description": { + "message": "Mécanisme de bac à sable, gestion des permissions, garantit l'exécution sécurisée des scripts", + "description": "Description for secure and reliable section" + }, + "homepage.comments.lihengdao.username": { + "message": "Li Hengdao", + "description": "Nom d'utilisateur de Li Hengdao dans les commentaires de la communauté" + }, + "homepage.comments.lihengdao.description": { + "message": "Co-fondateur de Tampermonkey CN", + "description": "Description de Li Hengdao dans les commentaires de la communauté" + }, + "homepage.comments.lihengdao.content": { + "message": "ScriptCat est absolument incroyable !", + "description": "Contenu du commentaire de Li Hengdao" + }, + "homepage.comments.student.username": { + "message": "Inquiet des examens", + "description": "Nom d'utilisateur de l'étudiant dans les commentaires de la communauté" + }, + "homepage.comments.student.description": { + "message": "Étudiant", + "description": "Description de l'étudiant dans les commentaires de la communauté" + }, + "homepage.comments.student.content": { + "message": "Merci aux riches ressources d'apprentissage de la communauté, j'ai beaucoup appris et j'ai pu mieux développer mes compétences techniques. ScriptCat est une extension de navigateur très utile qui me fournit des fonctionnalités pratiques et efficaces.", + "description": "Contenu du commentaire de l'étudiant" + }, + "homepage.comments.enncy.username": { + "message": "Yan Xiaoxi (enncy)", + "description": "Nom d'utilisateur d'enncy dans les commentaires de la communauté" + }, + "homepage.comments.enncy.description": { + "message": "Auteur de scripts célèbre", + "description": "Description d'enncy dans les commentaires de la communauté" + }, + "homepage.comments.enncy.content": { + "message": "Remerciements sincères à la communauté", + "description": "Contenu du commentaire d'enncy" + }, + "homepage.comments.qianyu.username": { + "message": "Qian Yu", + "description": "Nom d'utilisateur de Qian Yu dans les commentaires de la communauté" + }, + "homepage.comments.qianyu.description": { + "message": "Utilisateur Chrome", + "description": "Description de Qian Yu dans les commentaires de la communauté" + }, + "homepage.comments.qianyu.content": { + "message": "Au début, les gens pensaient que c'était un plugin JS de niche... jusqu'à ce que...", + "description": "Contenu du commentaire de Qian Yu" + }, + "homepage.comments.wwwwwllllk.username": { + "message": "wwwwwllllk", + "description": "Nom d'utilisateur de wwwwwllllk dans les commentaires de la communauté" + }, + "homepage.comments.wwwwwllllk.description": { + "message": "Développeur Frontend", + "description": "Description de wwwwwllllk dans les commentaires de la communauté" + }, + "homepage.comments.wwwwwllllk.content": { + "message": "Utilisant ScriptCat pour améliorer mon expérience internet, rencontrant des personnes partageant les mêmes idées dans la communauté.", + "description": "Contenu du commentaire de wwwwwllllk" + }, + "homepage.comments.oraer.username": { + "message": "Oraer", + "description": "Nom d'utilisateur d'Oraer dans les commentaires de la communauté" + }, + "homepage.comments.oraer.description": { + "message": "Utilisateur Chrome", + "description": "Description d'Oraer dans les commentaires de la communauté" + }, + "homepage.comments.oraer.content": { + "message": "Première rencontre avec Tampermonkey ! Apprendre Tampermonkey ! Dépasser Tampermonkey !", + "description": "Contenu du commentaire d'Oraer" + }, + "homepage.comments.bigonion.username": { + "message": "bigonion", + "description": "Nom d'utilisateur de bigonion dans les commentaires de la communauté" + }, + "homepage.comments.bigonion.description": { + "message": "Développeur ScriptCat", + "description": "Description de bigonion dans les commentaires de la communauté" + }, + "homepage.comments.bigonion.content": { + "message": "ScriptCat est l'avenir.", + "description": "Contenu du commentaire de bigonion" + } +} diff --git a/i18n/it/code.json b/i18n/it/code.json new file mode 100644 index 0000000..338694b --- /dev/null +++ b/i18n/it/code.json @@ -0,0 +1,170 @@ +{ + "theme.ErrorPageContent.title": { + "message": "Questa pagina è andata in crash.", + "description": "The title of the fallback page when the page crashed" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "Torna in cima", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "Archivio", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "Archivio", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "Navigazione dell'elenco degli articoli del blog", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "Articoli più recenti", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "Articoli più vecchi", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "Navigazione degli articoli del blog", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "Articolo più recente", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "Articolo più vecchio", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "{count} articoli", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} articoli etichettati con \"{tagName}\"", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "Visualizza tutti i tag", + "description": "The label of the link targeting the tag list page" + }, + "homepage.hero.title": { + "message": "ScriptCat", + "description": "The hero title on the homepage" + }, + "homepage.hero.subtitle": { + "message": "Un'estensione del browser che può eseguire userscript, tutto può essere scriptato, permetti al tuo browser di fare di più!", + "description": "The hero subtitle on the homepage" + }, + "homepage.features.powerful.title": { + "message": "Funzionalità potenti", + "description": "Title for powerful features section" + }, + "homepage.features.powerful.description": { + "message": "Completamente compatibile con Tampermonkey, script in background, script programmati, API ricche", + "description": "Description for powerful features section" + }, + "homepage.features.easy.title": { + "message": "Facile da usare", + "description": "Title for easy to use section" + }, + "homepage.features.easy.description": { + "message": "Editor integrato, completamento automatico intelligente, controllo della sintassi, sviluppo di script più efficiente", + "description": "Description for easy to use section" + }, + "homepage.features.secure.title": { + "message": "Sicuro e affidabile", + "description": "Title for secure and reliable section" + }, + "homepage.features.secure.description": { + "message": "Meccanismo sandbox, gestione dei permessi, garantisce l'esecuzione sicura degli script", + "description": "Description for secure and reliable section" + }, + "homepage.comments.lihengdao.username": { + "message": "Li Hengdao", + "description": "Nome utente di Li Hengdao nei commenti della community" + }, + "homepage.comments.lihengdao.description": { + "message": "Co-fondatore di Tampermonkey CN", + "description": "Descrizione di Li Hengdao nei commenti della community" + }, + "homepage.comments.lihengdao.content": { + "message": "ScriptCat è assolutamente fantastico!", + "description": "Contenuto del commento di Li Hengdao" + }, + "homepage.comments.student.username": { + "message": "Preoccupato per gli esami", + "description": "Nome utente dello studente nei commenti della community" + }, + "homepage.comments.student.description": { + "message": "Studente", + "description": "Descrizione dello studente nei commenti della community" + }, + "homepage.comments.student.content": { + "message": "Grazie alle ricche risorse di apprendimento della community, ho imparato molto e sono riuscito a sviluppare meglio le mie competenze tecniche. ScriptCat è un'estensione del browser molto utile che mi fornisce funzionalità comode ed efficienti.", + "description": "Contenuto del commento dello studente" + }, + "homepage.comments.enncy.username": { + "message": "Yan Xiaoxi (enncy)", + "description": "Nome utente di enncy nei commenti della community" + }, + "homepage.comments.enncy.description": { + "message": "Autore di script famoso", + "description": "Descrizione di enncy nei commenti della community" + }, + "homepage.comments.enncy.content": { + "message": "Sinceri ringraziamenti alla community", + "description": "Contenuto del commento di enncy" + }, + "homepage.comments.qianyu.username": { + "message": "Qian Yu", + "description": "Nome utente di Qian Yu nei commenti della community" + }, + "homepage.comments.qianyu.description": { + "message": "Utente Chrome", + "description": "Descrizione di Qian Yu nei commenti della community" + }, + "homepage.comments.qianyu.content": { + "message": "All'inizio, la gente pensava che fosse un plugin JS di nicchia... finché...", + "description": "Contenuto del commento di Qian Yu" + }, + "homepage.comments.wwwwwllllk.username": { + "message": "wwwwwllllk", + "description": "Nome utente di wwwwwllllk nei commenti della community" + }, + "homepage.comments.wwwwwllllk.description": { + "message": "Sviluppatore Frontend", + "description": "Descrizione di wwwwwllllk nei commenti della community" + }, + "homepage.comments.wwwwwllllk.content": { + "message": "Usando ScriptCat per migliorare la mia esperienza internet, incontrando persone con idee simili nella community.", + "description": "Contenuto del commento di wwwwwllllk" + }, + "homepage.comments.oraer.username": { + "message": "Oraer", + "description": "Nome utente di Oraer nei commenti della community" + }, + "homepage.comments.oraer.description": { + "message": "Utente Chrome", + "description": "Descrizione di Oraer nei commenti della community" + }, + "homepage.comments.oraer.content": { + "message": "Primo incontro con Tampermonkey! Imparare Tampermonkey! Superare Tampermonkey!", + "description": "Contenuto del commento di Oraer" + }, + "homepage.comments.bigonion.username": { + "message": "bigonion", + "description": "Nome utente di bigonion nei commenti della community" + }, + "homepage.comments.bigonion.description": { + "message": "Sviluppatore ScriptCat", + "description": "Descrizione di bigonion nei commenti della community" + }, + "homepage.comments.bigonion.content": { + "message": "ScriptCat è il futuro.", + "description": "Contenuto del commento di bigonion" + } +} diff --git a/i18n/ja/code.json b/i18n/ja/code.json new file mode 100644 index 0000000..802bfb2 --- /dev/null +++ b/i18n/ja/code.json @@ -0,0 +1,134 @@ +{ + "theme.ErrorPageContent.title": { + "message": "このページがクラッシュしました。", + "description": "The title of the fallback page when the page crashed" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "トップに戻る", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "アーカイブ", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "アーカイブ", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "ブログ記事一覧のナビゲーション", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "新しい記事", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "古い記事", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "ブログ記事のナビゲーション", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "新しい記事", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "古い記事", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "{count}件の記事", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "\"{tagName}\"タグの記事が{nPosts}件あります", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "すべてのタグを見る", + "description": "The label of the link targeting the tag list page" + }, + "homepage.hero.title": { + "message": "ScriptCat", + "description": "The hero title on the homepage" + }, + "homepage.hero.subtitle": { + "message": "ユーザースクリプトを実行できるブラウザ拡張機能、すべてをスクリプト化可能にし、ブラウザでより多くのことを実現!", + "description": "The hero subtitle on the homepage" + }, + "homepage.features.powerful.title": { + "message": "強力な機能", + "description": "Title for powerful features section" + }, + "homepage.features.powerful.description": { + "message": "Tampermonkeyと完全互換、バックグラウンドスクリプト、定時スクリプト、豊富なAPIを提供", + "description": "Description for powerful features section" + }, + "homepage.features.easy.title": { + "message": "使いやすい", + "description": "Title for easy to use section" + }, + "homepage.features.easy.description": { + "message": "内蔵エディタ、インテリジェント補完、構文チェック、スクリプト開発をより効率的に", + "description": "Description for easy to use section" + }, + "homepage.features.secure.title": { + "message": "安全で信頼性", + "description": "Title for secure and reliable section" + }, + "homepage.features.secure.description": { + "message": "サンドボックス機構、権限管理、スクリプトの安全な実行を保証", + "description": "Description for secure and reliable section" + }, + "homepage.comments.lihengdao.username": { + "message": "李恒道", + "description": "コミュニティコメントでの李恒道のユーザー名" + }, + "homepage.comments.lihengdao.description": { + "message": "Tampermonkey中国語版共同創設者", + "description": "コミュニティコメントでの李恒道の説明" + }, + "homepage.comments.lihengdao.content": { + "message": "ScriptCatは本当に素晴らしいです!", + "description": "李恒道のコメント内容" + }, + "homepage.comments.student.username": { + "message": "試験を心配する人", + "description": "コミュニティコメントでの学生ユーザーのユーザー名" + }, + "homepage.comments.student.description": { + "message": "学生", + "description": "コミュニティコメントでの学生ユーザーの説明" + }, + "homepage.comments.student.content": { + "message": "コミュニティの豊富な学習リソースに感謝します。多くのことを学び、技術力をより良く向上させることができました。ScriptCatは非常に便利なブラウザ拡張機能で、便利で効率的な機能を提供してくれます。", + "description": "学生ユーザーのコメント内容" + }, + "homepage.comments.enncy.username": { + "message": "言小溪enncy", + "description": "コミュニティコメントでのenncyのユーザー名" + }, + "homepage.comments.enncy.description": { + "message": "有名なスクリプト作者", + "description": "コミュニティコメントでのenncyの説明" + }, + "homepage.comments.enncy.content": { + "message": "コミュニティに心から感謝します", + "description": "enncyのコメント内容" + }, + "homepage.comments.qianyu.username": { + "message": "仟羽", + "description": "コミュニティコメントでの仟羽のユーザー名" + }, + "homepage.comments.qianyu.description": { + "message": "Chromeユーザー", + "description": "コミュニティコメントでの仟羽の説明" + }, + "homepage.comments.qianyu.content": { + "message": "最初、人々はこれがニッチなJSプラグインだと思っていました...しかし...", + "description": "仟羽のコメント内容" + } +} diff --git a/i18n/pt/code.json b/i18n/pt/code.json new file mode 100644 index 0000000..99fbb2d --- /dev/null +++ b/i18n/pt/code.json @@ -0,0 +1,170 @@ +{ + "theme.ErrorPageContent.title": { + "message": "Esta página travou.", + "description": "The title of the fallback page when the page crashed" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "Voltar ao topo", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "Arquivo", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "Arquivo", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "Navegação da lista de artigos do blog", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "Artigos mais recentes", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "Artigos mais antigos", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "Navegação de artigos do blog", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "Artigo mais recente", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "Artigo mais antigo", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "{count} artigos", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} artigos marcados com \"{tagName}\"", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "Ver todas as tags", + "description": "The label of the link targeting the tag list page" + }, + "homepage.hero.title": { + "message": "ScriptCat", + "description": "The hero title on the homepage" + }, + "homepage.hero.subtitle": { + "message": "Uma extensão de navegador que pode executar userscripts, tudo pode ser scriptado, permita que seu navegador faça mais!", + "description": "The hero subtitle on the homepage" + }, + "homepage.features.powerful.title": { + "message": "Recursos poderosos", + "description": "Title for powerful features section" + }, + "homepage.features.powerful.description": { + "message": "Totalmente compatível com Tampermonkey, scripts em segundo plano, scripts agendados, API rica", + "description": "Description for powerful features section" + }, + "homepage.features.easy.title": { + "message": "Fácil de usar", + "description": "Title for easy to use section" + }, + "homepage.features.easy.description": { + "message": "Editor integrado, autocompletar inteligente, verificação de sintaxe, desenvolvimento de scripts mais eficiente", + "description": "Description for easy to use section" + }, + "homepage.features.secure.title": { + "message": "Seguro e confiável", + "description": "Title for secure and reliable section" + }, + "homepage.features.secure.description": { + "message": "Mecanismo de sandbox, gerenciamento de permissões, garante execução segura de scripts", + "description": "Description for secure and reliable section" + }, + "homepage.comments.lihengdao.username": { + "message": "Li Hengdao", + "description": "Nome de usuário de Li Hengdao nos comentários da comunidade" + }, + "homepage.comments.lihengdao.description": { + "message": "Co-fundador do Tampermonkey CN", + "description": "Descrição de Li Hengdao nos comentários da comunidade" + }, + "homepage.comments.lihengdao.content": { + "message": "ScriptCat é absolutamente incrível!", + "description": "Conteúdo do comentário de Li Hengdao" + }, + "homepage.comments.student.username": { + "message": "Preocupado com exames", + "description": "Nome de usuário do estudante nos comentários da comunidade" + }, + "homepage.comments.student.description": { + "message": "Estudante", + "description": "Descrição do estudante nos comentários da comunidade" + }, + "homepage.comments.student.content": { + "message": "Obrigado pelos ricos recursos de aprendizado da comunidade, aprendi muito e consegui desenvolver melhor minhas habilidades técnicas. ScriptCat é uma extensão de navegador muito útil que me fornece funcionalidades convenientes e eficientes.", + "description": "Conteúdo do comentário do estudante" + }, + "homepage.comments.enncy.username": { + "message": "Yan Xiaoxi (enncy)", + "description": "Nome de usuário de enncy nos comentários da comunidade" + }, + "homepage.comments.enncy.description": { + "message": "Autor de scripts famoso", + "description": "Descrição de enncy nos comentários da comunidade" + }, + "homepage.comments.enncy.content": { + "message": "Agradecimentos sinceros à comunidade", + "description": "Conteúdo do comentário de enncy" + }, + "homepage.comments.qianyu.username": { + "message": "Qian Yu", + "description": "Nome de usuário de Qian Yu nos comentários da comunidade" + }, + "homepage.comments.qianyu.description": { + "message": "Usuário Chrome", + "description": "Descrição de Qian Yu nos comentários da comunidade" + }, + "homepage.comments.qianyu.content": { + "message": "No início, as pessoas pensavam que era um plugin JS de nicho... até que...", + "description": "Conteúdo do comentário de Qian Yu" + }, + "homepage.comments.wwwwwllllk.username": { + "message": "wwwwwllllk", + "description": "Nome de usuário de wwwwwllllk nos comentários da comunidade" + }, + "homepage.comments.wwwwwllllk.description": { + "message": "Desenvolvedor Frontend", + "description": "Descrição de wwwwwllllk nos comentários da comunidade" + }, + "homepage.comments.wwwwwllllk.content": { + "message": "Usando ScriptCat para melhorar minha experiência na internet, conhecendo pessoas com ideias similares na comunidade.", + "description": "Conteúdo do comentário de wwwwwllllk" + }, + "homepage.comments.oraer.username": { + "message": "Oraer", + "description": "Nome de usuário de Oraer nos comentários da comunidade" + }, + "homepage.comments.oraer.description": { + "message": "Usuário Chrome", + "description": "Descrição de Oraer nos comentários da comunidade" + }, + "homepage.comments.oraer.content": { + "message": "Primeiro encontro com Tampermonkey! Aprendendo Tampermonkey! Superando Tampermonkey!", + "description": "Conteúdo do comentário de Oraer" + }, + "homepage.comments.bigonion.username": { + "message": "bigonion", + "description": "Nome de usuário de bigonion nos comentários da comunidade" + }, + "homepage.comments.bigonion.description": { + "message": "Desenvolvedor ScriptCat", + "description": "Descrição de bigonion nos comentários da comunidade" + }, + "homepage.comments.bigonion.content": { + "message": "ScriptCat é o futuro.", + "description": "Conteúdo do comentário de bigonion" + } +} diff --git a/i18n/ru/code.json b/i18n/ru/code.json new file mode 100644 index 0000000..992c87d --- /dev/null +++ b/i18n/ru/code.json @@ -0,0 +1,134 @@ +{ + "theme.ErrorPageContent.title": { + "message": "Эта страница упала.", + "description": "The title of the fallback page when the page crashed" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "Вернуться к началу", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "Архив", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "Архив", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "Навигация по записям блога", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "Новые записи", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "Старые записи", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "Навигация по записям блога", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "Новая запись", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "Старая запись", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "{count} записей", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} записей с тегом \"{tagName}\"", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "Посмотреть все теги", + "description": "The label of the link targeting the tag list page" + }, + "homepage.hero.title": { + "message": "ScriptCat", + "description": "The hero title on the homepage" + }, + "homepage.hero.subtitle": { + "message": "Расширение браузера для выполнения пользовательских скриптов, всё можно скриптовать, позволяет браузеру делать больше!", + "description": "The hero subtitle on the homepage" + }, + "homepage.features.powerful.title": { + "message": "Мощные возможности", + "description": "Title for powerful features section" + }, + "homepage.features.powerful.description": { + "message": "Полная совместимость с Tampermonkey, фоновые скрипты, запланированные скрипты, богатый API", + "description": "Description for powerful features section" + }, + "homepage.features.easy.title": { + "message": "Простота использования", + "description": "Title for easy to use section" + }, + "homepage.features.easy.description": { + "message": "Встроенный редактор, интеллектуальное автодополнение, проверка синтаксиса, более эффективная разработка скриптов", + "description": "Description for easy to use section" + }, + "homepage.features.secure.title": { + "message": "Безопасность и надёжность", + "description": "Title for secure and reliable section" + }, + "homepage.features.secure.description": { + "message": "Механизм песочницы, управление разрешениями, обеспечение безопасного выполнения скриптов", + "description": "Description for secure and reliable section" + }, + "homepage.comments.lihengdao.username": { + "message": "Ли Хэндао", + "description": "Имя пользователя Ли Хэндао в комментариях сообщества" + }, + "homepage.comments.lihengdao.description": { + "message": "Соучредитель Tampermonkey CN", + "description": "Описание Ли Хэндао в комментариях сообщества" + }, + "homepage.comments.lihengdao.content": { + "message": "ScriptCat просто потрясающий!", + "description": "Содержание комментария Ли Хэндао" + }, + "homepage.comments.student.username": { + "message": "Беспокоится об экзаменах", + "description": "Имя пользователя студента в комментариях сообщества" + }, + "homepage.comments.student.description": { + "message": "Студент", + "description": "Описание студента в комментариях сообщества" + }, + "homepage.comments.student.content": { + "message": "Благодарю за богатые учебные ресурсы сообщества, я многому научился и смог лучше развить свои технические навыки. ScriptCat - очень полезное расширение браузера, которое предоставляет мне удобные и эффективные функции.", + "description": "Содержание комментария студента" + }, + "homepage.comments.enncy.username": { + "message": "Янь Сяоси (enncy)", + "description": "Имя пользователя enncy в комментариях сообщества" + }, + "homepage.comments.enncy.description": { + "message": "Известный автор скриптов", + "description": "Описание enncy в комментариях сообщества" + }, + "homepage.comments.enncy.content": { + "message": "Искренняя благодарность сообществу", + "description": "Содержание комментария enncy" + }, + "homepage.comments.qianyu.username": { + "message": "Цянь Юй", + "description": "Имя пользователя Цянь Юй в комментариях сообщества" + }, + "homepage.comments.qianyu.description": { + "message": "Пользователь Chrome", + "description": "Описание Цянь Юй в комментариях сообщества" + }, + "homepage.comments.qianyu.content": { + "message": "Сначала люди думали, что это нишевый JS плагин... пока...", + "description": "Содержание комментария Цянь Юй" + } +} diff --git a/i18n/vi/code.json b/i18n/vi/code.json new file mode 100644 index 0000000..510dc4b --- /dev/null +++ b/i18n/vi/code.json @@ -0,0 +1,134 @@ +{ + "theme.ErrorPageContent.title": { + "message": "Trang này đã gặp sự cố.", + "description": "The title of the fallback page when the page crashed" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "Cuộn lên đầu trang", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "Lưu trữ", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "Lưu trữ", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "Điều hướng danh sách bài viết blog", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "Bài viết mới hơn", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "Bài viết cũ hơn", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "Điều hướng bài viết blog", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "Bài viết mới hơn", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "Bài viết cũ hơn", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "{count} bài viết", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} bài viết được gắn thẻ \"{tagName}\"", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "Xem tất cả thẻ", + "description": "The label of the link targeting the tag list page" + }, + "homepage.hero.title": { + "message": "ScriptCat", + "description": "The hero title on the homepage" + }, + "homepage.hero.subtitle": { + "message": "Tiện ích mở rộng trình duyệt có thể thực thi các script người dùng, mọi thứ đều có thể được script hóa, cho phép trình duyệt làm được nhiều việc hơn!", + "description": "The hero subtitle on the homepage" + }, + "homepage.features.powerful.title": { + "message": "Tính năng mạnh mẽ", + "description": "Title for powerful features section" + }, + "homepage.features.powerful.description": { + "message": "Hoàn toàn tương thích với Tampermonkey, script nền, script định thời, API phong phú", + "description": "Description for powerful features section" + }, + "homepage.features.easy.title": { + "message": "Dễ sử dụng", + "description": "Title for easy to use section" + }, + "homepage.features.easy.description": { + "message": "Trình soạn thảo tích hợp, tự động hoàn thành thông minh, kiểm tra cú pháp, phát triển script hiệu quả hơn", + "description": "Description for easy to use section" + }, + "homepage.features.secure.title": { + "message": "An toàn và đáng tin cậy", + "description": "Title for secure and reliable section" + }, + "homepage.features.secure.description": { + "message": "Cơ chế sandbox, quản lý quyền, đảm bảo thực thi script an toàn", + "description": "Description for secure and reliable section" + }, + "homepage.comments.lihengdao.username": { + "message": "Li Hengdao", + "description": "Tên người dùng của Li Hengdao trong bình luận cộng đồng" + }, + "homepage.comments.lihengdao.description": { + "message": "Đồng sáng lập Tampermonkey CN", + "description": "Mô tả của Li Hengdao trong bình luận cộng đồng" + }, + "homepage.comments.lihengdao.content": { + "message": "ScriptCat thật tuyệt vời!", + "description": "Nội dung bình luận của Li Hengdao" + }, + "homepage.comments.student.username": { + "message": "Lo lắng về kỳ thi", + "description": "Tên người dùng sinh viên trong bình luận cộng đồng" + }, + "homepage.comments.student.description": { + "message": "Sinh viên", + "description": "Mô tả sinh viên trong bình luận cộng đồng" + }, + "homepage.comments.student.content": { + "message": "Cảm ơn cộng đồng với những tài nguyên học tập phong phú, tôi đã học được rất nhiều và có thể phát triển kỹ năng kỹ thuật của mình tốt hơn. ScriptCat là một tiện ích mở rộng trình duyệt rất hữu ích, cung cấp cho tôi các chức năng tiện lợi và hiệu quả.", + "description": "Nội dung bình luận của sinh viên" + }, + "homepage.comments.enncy.username": { + "message": "Yan Xiaoxi (enncy)", + "description": "Tên người dùng của enncy trong bình luận cộng đồng" + }, + "homepage.comments.enncy.description": { + "message": "Tác giả script nổi tiếng", + "description": "Mô tả của enncy trong bình luận cộng đồng" + }, + "homepage.comments.enncy.content": { + "message": "Chân thành cảm ơn cộng đồng", + "description": "Nội dung bình luận của enncy" + }, + "homepage.comments.qianyu.username": { + "message": "Qian Yu", + "description": "Tên người dùng của Qian Yu trong bình luận cộng đồng" + }, + "homepage.comments.qianyu.description": { + "message": "Người dùng Chrome", + "description": "Mô tả của Qian Yu trong bình luận cộng đồng" + }, + "homepage.comments.qianyu.content": { + "message": "Ban đầu, mọi người nghĩ đây là một plugin JS thích hợp... cho đến khi...", + "description": "Nội dung bình luận của Qian Yu" + } +} diff --git a/i18n/zh-Hans/code.json b/i18n/zh-Hans/code.json index 4e4a657..d5fcfc1 100644 --- a/i18n/zh-Hans/code.json +++ b/i18n/zh-Hans/code.json @@ -790,6 +790,89 @@ "message": "标签", "description": "The title of the tag list page" }, + "homepage.comments.lihengdao.username": { + "message": "李恒道", + "description": "李恒道在社区评论中的用户名" + }, + "homepage.comments.lihengdao.description": { + "message": "油中创始人之一", + "description": "李恒道在社区评论中的描述" + }, + "homepage.comments.lihengdao.content": { + "message": "我们脚本猫真是太棒啦!", + "description": "李恒道的评论内容" + }, + "homepage.comments.student.username": { + "message": "为考试发愁", + "description": "学生用户在社区评论中的用户名" + }, + "homepage.comments.student.description": { + "message": "学生", + "description": "学生用户在社区评论中的描述" + }, + "homepage.comments.student.content": { + "message": "感谢油中如此丰富的学习资源,让我受益匪浅,更好地发展自己的技术能力。脚本猫是一个非常好用的浏览器扩展,为我提供了便捷和高效的功能。", + "description": "学生用户的评论内容" + }, + "homepage.comments.enncy.username": { + "message": "言小溪enncy", + "description": "enncy在社区评论中的用户名" + }, + "homepage.comments.enncy.description": { + "message": "著名脚本作者", + "description": "enncy在社区评论中的描述" + }, + "homepage.comments.enncy.content": { + "message": "由衷感谢油中", + "description": "enncy的评论内容" + }, + "homepage.comments.qianyu.username": { + "message": "仟羽", + "description": "仟羽在社区评论中的用户名" + }, + "homepage.comments.qianyu.description": { + "message": "Chrome 用户", + "description": "仟羽在社区评论中的描述" + }, + "homepage.comments.qianyu.content": { + "message": "一开始,人们都以为这是小众js插件。。。。直到。。。", + "description": "仟羽的评论内容" + }, + "homepage.comments.wwwwwllllk.username": { + "message": "wwwwwllllk", + "description": "wwwwwllllk在社区评论中的用户名" + }, + "homepage.comments.wwwwwllllk.description": { + "message": "前端开发人员", + "description": "wwwwwllllk在社区评论中的描述" + }, + "homepage.comments.wwwwwllllk.content": { + "message": "使用脚本猫来提高自己的互联网体验,来油中认识志同道合的人。", + "description": "wwwwwllllk的评论内容" + }, + "homepage.comments.oraer.username": { + "message": "Oraer", + "description": "Oraer在社区评论中的用户名" + }, + "homepage.comments.oraer.description": { + "message": "Chrome 用户", + "description": "Oraer在社区评论中的描述" + }, + "homepage.comments.oraer.content": { + "message": "初识油猴!学习油猴!超越油猴!", + "description": "Oraer的评论内容" + }, + "homepage.comments.bigonion.username": { + "message": "bigonion", + "description": "bigonion在社区评论中的用户名" + }, + "homepage.comments.bigonion.description": { + "message": "脚本猫开发者", + "description": "bigonion在社区评论中的描述" + }, + "homepage.comments.bigonion.content": { + "message": "Scriptcat is the future.", + "description": "bigonion的评论内容" "uninstall.title": { "message": "卸载调查", "description": "Title of the uninstall survey page" diff --git a/i18n/zh-Hant/code.json b/i18n/zh-Hant/code.json new file mode 100644 index 0000000..26c5ec3 --- /dev/null +++ b/i18n/zh-Hant/code.json @@ -0,0 +1,134 @@ +{ + "theme.ErrorPageContent.title": { + "message": "此頁面已當機。", + "description": "The title of the fallback page when the page crashed" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "回到頂部", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "歸檔", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "歸檔", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "部落格文章列表導航", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "較新的文章", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "較舊的文章", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "部落格文章導航", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "較新的文章", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "較舊的文章", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "{count} 篇文章", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "有 {nPosts} 篇文章標記為「{tagName}」", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "查看所有標籤", + "description": "The label of the link targeting the tag list page" + }, + "homepage.hero.title": { + "message": "ScriptCat", + "description": "The hero title on the homepage" + }, + "homepage.hero.subtitle": { + "message": "一個可以執行使用者腳本的瀏覽器擴充功能,萬物皆可腳本化,讓你的瀏覽器可以做更多的事情!", + "description": "The hero subtitle on the homepage" + }, + "homepage.features.powerful.title": { + "message": "強大功能", + "description": "Title for powerful features section" + }, + "homepage.features.powerful.description": { + "message": "完全相容 Tampermonkey,背景腳本,定時腳本,豐富的 API", + "description": "Description for powerful features section" + }, + "homepage.features.easy.title": { + "message": "易於使用", + "description": "Title for easy to use section" + }, + "homepage.features.easy.description": { + "message": "內建編輯器,智慧補全,語法檢查,讓腳本開發更加高效流暢", + "description": "Description for easy to use section" + }, + "homepage.features.secure.title": { + "message": "安全可靠", + "description": "Title for secure and reliable section" + }, + "homepage.features.secure.description": { + "message": "沙盒機制,權限管理,保障腳本安全執行", + "description": "Description for secure and reliable section" + }, + "homepage.comments.lihengdao.username": { + "message": "李恆道", + "description": "李恆道在社群評論中的使用者名稱" + }, + "homepage.comments.lihengdao.description": { + "message": "油中創始人之一", + "description": "李恆道在社群評論中的描述" + }, + "homepage.comments.lihengdao.content": { + "message": "我們腳本貓真是太棒啦!", + "description": "李恆道的評論內容" + }, + "homepage.comments.student.username": { + "message": "為考試發愁", + "description": "學生使用者在社群評論中的使用者名稱" + }, + "homepage.comments.student.description": { + "message": "學生", + "description": "學生使用者在社群評論中的描述" + }, + "homepage.comments.student.content": { + "message": "感謝油中如此豐富的學習資源,讓我受益匪淺,更好地發展自己的技術能力。腳本貓是一個非常好用的瀏覽器擴充功能,為我提供了便捷和高效的功能。", + "description": "學生使用者的評論內容" + }, + "homepage.comments.enncy.username": { + "message": "言小溪enncy", + "description": "enncy在社群評論中的使用者名稱" + }, + "homepage.comments.enncy.description": { + "message": "著名腳本作者", + "description": "enncy在社群評論中的描述" + }, + "homepage.comments.enncy.content": { + "message": "由衷感謝油中", + "description": "enncy的評論內容" + }, + "homepage.comments.qianyu.username": { + "message": "仟羽", + "description": "仟羽在社群評論中的使用者名稱" + }, + "homepage.comments.qianyu.description": { + "message": "Chrome 使用者", + "description": "仟羽在社群評論中的描述" + }, + "homepage.comments.qianyu.content": { + "message": "一開始,人們都以為這是小眾js外掛。。。。直到。。。", + "description": "仟羽的評論內容" + } +} diff --git a/src/components/HomepageFeatures/index.tsx b/src/components/HomepageFeatures/index.tsx index 0f3684c..a6c988c 100644 --- a/src/components/HomepageFeatures/index.tsx +++ b/src/components/HomepageFeatures/index.tsx @@ -2,8 +2,9 @@ import React, { useState } from "react"; import { Avatar, Card, Image, Space, Typography } from "antd"; import Link from "@docusaurus/Link"; import Meta from "antd/es/card/Meta"; -import { Swiper, SwiperSlide, useSwiper } from "swiper/react"; +import { Swiper, SwiperSlide, useSwiper } from "swiper/modules"; import { Autoplay } from "swiper/modules"; +import Translate from '@docusaurus/Translate'; import "swiper/css"; @@ -117,31 +118,78 @@ const comments = { { avatar: "https://bbs.tampermonkey.net.cn/uc_server/data/avatar/000/00/00/02_avatar_middle.jpg", - username: "李恒道", - description: "油中创始人之一", - content: "我们脚本猫真是太棒啦!", + username: ( + + 李恒道 + + ), + description: ( + + 油中创始人之一 + + ), + content: ( + + 我们脚本猫真是太棒啦! + + ), }, { avatar: "https://bbs.tampermonkey.net.cn/uc_server/data/avatar/noavatar.svg", - username: "为考试发愁", - description: "学生", - content: - "感谢油中如此丰富的学习资源,让我受益匪浅,更好地发展自己的技术能力。脚本猫是一个非常好用的浏览器扩展,为我提供了便捷和高效的功能。", + username: ( + + 为考试发愁 + + ), + description: ( + + 学生 + + ), + content: ( + + 感谢油中如此丰富的学习资源,让我受益匪浅,更好地发展自己的技术能力。脚本猫是一个非常好用的浏览器扩展,为我提供了便捷和高效的功能。 + + ), }, { avatar: "https://bbs.tampermonkey.net.cn/uc_server/data/avatar/000/04/10/07_avatar_big.jpg", - username: "言小溪enncy", - description: "著名脚本作者", - content: "由衷感谢油中", + username: ( + + 言小溪enncy + + ), + description: ( + + 著名脚本作者 + + ), + content: ( + + 由衷感谢油中 + + ), }, { avatar: "https://bbs.tampermonkey.net.cn/uc_server/data/avatar/000/02/37/09_avatar_big.jpg", - username: "仟羽", - description: "Chrome 用户", - content: "一开始,人们都以为这是小众js插件。。。。直到。。。", + username: ( + + 仟羽 + + ), + description: ( + + Chrome 用户 + + ), + content: ( + + 一开始,人们都以为这是小众js插件。。。。直到。。。 + + ), }, ], right: [ diff --git a/src/css/custom.css b/src/css/custom.css index 800a8e2..28b6c2a 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -8,6 +8,9 @@ * work well for content-centric websites. */ +/* Import RTL support for Arabic */ +@import './rtl.css'; + /* You can override the default Infima variables here. */ :root { --ifm-color-primary: #4594d5; diff --git a/src/css/rtl.css b/src/css/rtl.css new file mode 100644 index 0000000..f35872d --- /dev/null +++ b/src/css/rtl.css @@ -0,0 +1,235 @@ +/* RTL (Right-to-Left) Support for Arabic */ + +/* Apply RTL styles only when html has dir="rtl" attribute */ +html[dir="rtl"] { + direction: rtl; +} + +/* RTL Navigation adjustments */ +html[dir="rtl"] .navbar__items { + flex-direction: row-reverse; +} + +html[dir="rtl"] .navbar__item { + margin-left: 0; + margin-right: var(--ifm-navbar-item-padding-horizontal); +} + +html[dir="rtl"] .navbar__brand { + margin-right: 0; + margin-left: var(--ifm-navbar-padding-horizontal); +} + +/* RTL Sidebar adjustments */ +html[dir="rtl"] .theme-doc-sidebar-container { + border-right: none; + border-left: 1px solid var(--ifm-toc-border-color); +} + +html[dir="rtl"] .menu__link { + padding-left: 0; + padding-right: var(--ifm-menu-link-padding-horizontal); +} + +html[dir="rtl"] .menu__list-item--collapsed .menu__list { + margin-left: 0; + margin-right: var(--ifm-menu-link-padding-horizontal); +} + +/* RTL Content adjustments */ +html[dir="rtl"] .markdown > h1, +html[dir="rtl"] .markdown > h2, +html[dir="rtl"] .markdown > h3, +html[dir="rtl"] .markdown > h4, +html[dir="rtl"] .markdown > h5, +html[dir="rtl"] .markdown > h6 { + text-align: right; +} + +html[dir="rtl"] .markdown ul, +html[dir="rtl"] .markdown ol { + padding-left: 0; + padding-right: 2rem; +} + +/* RTL Pagination adjustments */ +html[dir="rtl"] .pagination-nav__link { + text-align: right; +} + +html[dir="rtl"] .pagination-nav__link--prev { + text-align: left; +} + +html[dir="rtl"] .pagination-nav__link--next { + text-align: right; +} + +/* RTL Footer adjustments */ +html[dir="rtl"] .footer__links { + text-align: right; +} + +html[dir="rtl"] .footer__link-item { + text-align: right; +} + +/* RTL Homepage features adjustments */ +html[dir="rtl"] .homepage-features { + direction: rtl; +} + +html[dir="rtl"] .homepage-features .col { + text-align: right; +} + +html[dir="rtl"] .homepage-features h3 { + text-align: right; +} + +html[dir="rtl"] .homepage-features p { + text-align: right; +} + +/* RTL Comments section adjustments */ +html[dir="rtl"] .ant-card { + text-align: right; +} + +html[dir="rtl"] .ant-card-meta-title { + text-align: right; +} + +html[dir="rtl"] .ant-card-meta-description { + text-align: right; +} + +html[dir="rtl"] .ant-card-body { + text-align: right; +} + +/* RTL Swiper adjustments */ +html[dir="rtl"] .swiper { + direction: rtl; +} + +html[dir="rtl"] .swiper-slide { + text-align: right; +} + +/* RTL Button adjustments */ +html[dir="rtl"] .button { + text-align: center; +} + +/* RTL Code block adjustments */ +html[dir="rtl"] .prism-code { + direction: ltr; /* Keep code blocks LTR for readability */ + text-align: left; +} + +html[dir="rtl"] .codeBlockTitle_node_modules-\@docusaurus-theme-classic-lib-theme-CodeBlock-Content-styles-module { + text-align: right; +} + +/* RTL Table adjustments */ +html[dir="rtl"] table { + direction: rtl; +} + +html[dir="rtl"] th, +html[dir="rtl"] td { + text-align: right; +} + +/* RTL Search adjustments */ +html[dir="rtl"] .navbar__search-input { + text-align: right; +} + +/* RTL Breadcrumb adjustments */ +html[dir="rtl"] .breadcrumbs { + direction: rtl; +} + +html[dir="rtl"] .breadcrumbs__item { + margin-left: 0; + margin-right: 0.5rem; +} + +html[dir="rtl"] .breadcrumbs__link { + text-align: right; +} + +/* RTL TOC (Table of Contents) adjustments */ +html[dir="rtl"] .table-of-contents { + text-align: right; +} + +html[dir="rtl"] .table-of-contents__link { + text-align: right; + padding-left: 0; + padding-right: 0.5rem; +} + +/* RTL Alert/Admonition adjustments */ +html[dir="rtl"] .alert { + text-align: right; +} + +html[dir="rtl"] .admonition { + text-align: right; +} + +/* RTL Language selector adjustments */ +html[dir="rtl"] .navbar__item.dropdown { + text-align: right; +} + +html[dir="rtl"] .dropdown__menu { + text-align: right; +} + +/* Ensure proper font rendering for Arabic */ +html[dir="rtl"] { + font-family: 'Segoe UI', 'Tahoma', 'Arial', 'Helvetica Neue', sans-serif; +} + +/* Fix any layout issues with flexbox in RTL */ +html[dir="rtl"] .row { + direction: rtl; +} + +html[dir="rtl"] .col { + direction: rtl; +} + +/* Ensure icons and images maintain proper orientation */ +html[dir="rtl"] .navbar__logo { + transform: none; /* Don't flip logos */ +} + +html[dir="rtl"] img { + transform: none; /* Don't flip images by default */ +} + +/* Fix any margin/padding issues in RTL */ +html[dir="rtl"] .margin-left--md { + margin-left: 0; + margin-right: 1rem; +} + +html[dir="rtl"] .margin-right--md { + margin-right: 0; + margin-left: 1rem; +} + +html[dir="rtl"] .padding-left--md { + padding-left: 0; + padding-right: 1rem; +} + +html[dir="rtl"] .padding-right--md { + padding-right: 0; + padding-left: 1rem; +}