diff --git a/kumascript/macros/AddonSidebar.ejs b/kumascript/macros/AddonSidebar.ejs index ed7a5f319fc3..934f40161cde 100644 --- a/kumascript/macros/AddonSidebar.ejs +++ b/kumascript/macros/AddonSidebar.ejs @@ -28,12 +28,12 @@ var text = mdn.localStringMap({ 'WebExtensions/Match_patterns': 'Match patterns', 'WebExtensions/Working_with_files': 'Working with files', 'WebExtensions/Internationalization': 'Internationalization', - 'WebExtensions/Security_best_practices': 'Security best practices', 'WebExtensions/Content_Security_Policy': 'Content Security Policy', + 'WebExtensions/Differences_between_API_implementations': 'Differences between API implementations', + 'WebExtensions/Chrome_incompatibilities': 'Chrome incompatibilities', 'WebExtensions/Native_messaging': 'Native messaging', 'WebExtensions#User_Interface': 'User interface', 'WebExtensions/user_interface': 'User Interface', - 'WebExtensions/user_interface/Accessibility_guidelines': 'Accessibility guidelines', 'WebExtensions/user_interface/Browser_action': 'Toolbar button', 'WebExtensions/user_interface/Page_actions': 'Address bar button', 'WebExtensions/user_interface/Sidebars': 'Sidebars', @@ -47,6 +47,7 @@ var text = mdn.localStringMap({ 'WebExtensions/Intercept_HTTP_requests': 'Intercept HTTP requests', 'WebExtensions/Modify_a_web_page': 'Modify a web page', 'WebExtensions/Safely_inserting_external_content_into_a_page': 'Insert external content', + 'WebExtensions/Sharing_objects_with_page_scripts': 'Share objects with page scripts', 'WebExtensions/Add_a_button_to_the_toolbar': 'Add a button to the toolbar', 'WebExtensions/Implement_a_settings_page': 'Implement a settings page', 'WebExtensions/Working_with_the_Tabs_API': 'Work with the Tabs API', @@ -54,16 +55,7 @@ var text = mdn.localStringMap({ 'WebExtensions/Work_with_the_Cookies_API': 'Work with the Cookies API', 'WebExtensions/Work_with_contextual_identities': 'Work with contextual identities', 'WebExtensions/Build_a_cross_browser_extension': 'Build a cross-browser extension', - 'WebExtensions/onboarding_upboarding_offboarding_best_practices': 'Onboard, upboard, and offboard users', - 'WebExtensions#Porting': 'Porting', 'WebExtensions/Firefox_differentiators': 'Firefox differentiators', - 'WebExtensions/Porting_a_Google_Chrome_extension': 'Porting a Google Chrome extension', - 'WebExtensions/Porting_a_legacy_Firefox_add-on': 'Porting a legacy Firefox extension', - 'WebExtensions/Comparison_with_the_Add-on_SDK': 'Comparison with the Add-on SDK', - 'WebExtensions/Comparison_with_XUL_XPCOM_extensions': 'Comparison with XUL/XPCOM extensions', - 'WebExtensions/Differences_between_API_implementations': 'Differences between API implementations', - 'WebExtensions/Chrome_incompatibilities': 'Chrome incompatibilities', - 'WebExtensions/Differences_between_desktop_and_Android': 'Differences between desktop and Android', 'WebExtensions#Firefox_workflow': 'Firefox workflow', 'WebExtensions/Development_Tools': 'Developer tools', 'WebExtensions/Choose_a_Firefox_version_for_web_extension_develop': 'Choose a Firefox version', @@ -81,35 +73,16 @@ var text = mdn.localStringMap({ 'WebExtensions/Best_practices_for_updating_your_extension': 'Best practices for updating your extension', 'WebExtensions/API': 'JavaScript APIs', 'WebExtensions/manifest.json': 'Manifest keys', - 'WebExtensions/Distribution_options': 'Distribution Options', - 'Themes': 'Themes', - 'Themes/Theme_concepts': 'Browser themes', - 'Themes/Theme_concepts_': 'Browser theme concepts', - 'Themes/Using_the_AMO_theme_generator': 'Using the AMO theme generator', - 'Distribution': 'Publishing and Distribution', - 'Distribution/Publishing': 'Publishing add-ons', - 'WebExtensions/Developer_accounts': 'Developer accounts', - 'Distribution/Signing': 'Signing and distribution overview', - 'WebExtensions/Package_your_extension_': 'Package your extension', - 'Distribution/Submitting_an_add-on': 'Submit an add-on', - 'Source_Code_Submission': 'Source code submission', - 'Distribution/Resources_for_publishers': 'Resources for publishers', - 'Listing': 'Creating an appealing listing', - 'Distribution/Make_money_from_browser_extensions': 'Make money from browser extensions', - 'Distribution/Promoting_your_extension_or_theme': 'Promoting your extension or theme', - 'AMO/Policy/Reviews': 'Add-on policies', - 'AMO/Policy/Agreement': 'Developer agreement', - 'AMO/Policy/Featured': 'Featured add-ons', - 'Distribution/Retiring_your_extension': 'Retiring your extension', - 'WebExtensions/Alternative_distribution_options': 'Distributing add-ons', - 'WebExtensions/Alternative_distribution_options/Sideloading_add-ons': 'For sideloading', - 'WebExtensions/Alternative_distribution_options/Add-ons_for_desktop_apps': 'For desktop apps', - 'WebExtensions/Alternative_distribution_options/Add-ons_in_the_enterprise': 'For an enterprise', - 'Community_and_Support': 'Community and Support', + 'extension_workshop': 'Extension Workshop', + 'extension_workshop_develop': 'Develop', + 'extension_workshop_publish': 'Publish', + 'extension_workshop_manage': 'Manage', + 'extension_workshop_enterprise': 'Enterprise', 'Channels': 'Channels', 'Blog': 'Add-ons blog', - 'Forums': 'Add-on forums', - '#Contact_us': 'Contact us' + 'Forums': 'Add-ons forum', + 'Chat': 'Add-ons chat', + 'Contact_us': 'Contact us' }, 'fr': { 'WebExtensions': 'WebExtensions', @@ -126,12 +99,12 @@ var text = mdn.localStringMap({ 'WebExtensions/Match_patterns': 'Motifs de correspondance (Match patterns)', 'WebExtensions/Working_with_files': 'Travailler avec les fichiers', 'WebExtensions/Internationalization': 'Internationalisation', - 'WebExtensions/Security_best_practices': 'Sécurité : bonnes pratiques', 'WebExtensions/Content_Security_Policy': 'Politique de sécurité du contenu', 'WebExtensions/Native_messaging': 'Message natifs', + 'WebExtensions/Chrome_incompatibilities': 'Incompatibilités avec Chrome', + 'WebExtensions/Differences_between_desktop_and_Android': 'Différence entre le bureau et Android', 'WebExtensions#User_Interface': 'Interface Utilisateur', 'WebExtensions/user_interface': 'Introduction', - 'WebExtensions/user_interface/Accessibility_guidelines': 'Accessibility guidelines', 'WebExtensions/user_interface/Browser_action': 'Bouton de la barre d\'outils', 'WebExtensions/user_interface/Page_actions': 'Bouton de la barre d\'adresse', 'WebExtensions/user_interface/Sidebars': 'Barres latérales', @@ -145,21 +118,15 @@ var text = mdn.localStringMap({ 'WebExtensions/Intercept_HTTP_requests': 'Intercepter les requêtes HTTP', 'WebExtensions/Modify_a_web_page': 'Modifier une page web', 'WebExtensions/Safely_inserting_external_content_into_a_page': 'Insérer un contenu externe', + 'WebExtensions/Sharing_objects_with_page_scripts': 'Share objects with page scripts', 'WebExtensions/Add_a_button_to_the_toolbar': 'Ajouter un bouton à la barre d\'outils', 'WebExtensions/Implement_a_settings_page': 'Mettre en place une page de paramètres', 'WebExtensions/Working_with_the_Tabs_API': 'Travailler avec l\'API Tabs', 'WebExtensions/Work_with_the_Bookmarks_API': 'Travailler avec l\'API Bookmarks', 'WebExtensions/Work_with_the_Cookies_API': 'Travailler avec l\'API Cookies', 'WebExtensions/Work_with_contextual_identities': 'Travailler avec des identités contextuelles', - 'WebExtensions/onboarding_upboarding_offboarding_best_practices': 'Onboard, upboard, and offboard users', 'WebExtensions/Build_a_cross_browser_extension': 'Build a cross-browser extension', - 'WebExtensions#Porting': 'Portage', - 'WebExtensions/Porting_a_Google_Chrome_extension': 'Porter une extension Google Chrome', - 'WebExtensions/Porting_a_legacy_Firefox_add-on': 'Porter une ancienne extension Firefox', - 'WebExtensions/Comparison_with_the_Add-on_SDK': 'Comparaison avec le SDK Add-on', - 'WebExtensions/Comparison_with_XUL_XPCOM_extensions': 'Comparaison avec les extensions XUL/XPCOM', - 'WebExtensions/Chrome_incompatibilities': 'Incompatibilités avec Chrome', - 'WebExtensions/Differences_between_desktop_and_Android': 'Différence entre le bureau et Android', + 'WebExtensions/Firefox_differentiators': 'Firefox differentiators', 'WebExtensions#Firefox_workflow': 'Déroulement avec Firefox', 'WebExtensions/Choose_a_Firefox_version_for_web_extension_develop': 'Choose a Firefox version', 'WebExtensions/User_experience_best_practices': 'Expérience utilisateur : bonnes pratiques', @@ -176,33 +143,16 @@ var text = mdn.localStringMap({ 'WebExtensions/Best_practices_for_updating_your_extension': 'Bonnes pratiques pour la mise à jour de votre extension', 'WebExtensions/API': 'Les API JavaScript', 'WebExtensions/manifest.json': 'Clés de manifeste', - 'WebExtensions/Distribution_options': 'Distribution Options', - 'Themes': 'Thèmes', - 'Themes/Theme_concepts': 'Thème de navigateur', - 'Themes/Theme_concepts_': 'Concepts des thèmes', - 'Themes/Using_the_AMO_theme_generator': 'Using the AMO theme generator', - 'Distribution': 'Publication et distribution', - 'Distribution/Publishing': 'Publication de votre extension', - 'WebExtensions/Developer_accounts': 'Developer accounts', - 'Distribution/Signing': 'Signature et distribution de votre extension', - 'WebExtensions/Package_your_extension_': 'Zipper votre extension', - 'Distribution/Submitting_an_add-on': 'Soumettre une extension', - 'Source_Code_Submission': 'Soumission du code source', - 'Distribution/Resources_for_publishers': 'Ressources pour les développeurs', - 'Listing': 'Créer une page attrayante pour votre extension', - 'AMO/Policy/Reviews': 'Processus de revue', - 'AMO/Policy/Agreement': 'Accord développeur', - 'AMO/Policy/Featured': 'Extensions mises en avant', - 'Distribution/Retiring_your_extension': 'Retrait de votre extension', - 'WebExtensions/Alternative_distribution_options': 'Distribuer votre module', - 'WebExtensions/Alternative_distribution_options/Sideloading_add-ons': 'Pour une installation manuelle', - 'WebExtensions/Alternative_distribution_options/Add-ons_for_desktop_apps': 'En tant qu\'application de bureau', - 'WebExtensions/Alternative_distribution_options/Add-ons_in_the_enterprise': 'Dans un contexte d\'entreprise', - 'Community_and_Support': 'Communauté et Support', + 'extension_workshop': 'Extension Workshop', + 'extension_workshop_develop': 'Develop', + 'extension_workshop_publish': 'Publish', + 'extension_workshop_manage': 'Manage', + 'extension_workshop_enterprise': 'Enterprise', 'Channels': 'Canaux de discussions', 'Blog': 'Blog extensions', 'Forums': 'Forum extensions', - '#Contact_us': 'Nous contacter' + 'Chat': 'Add-ons chat', + 'Contact_us': 'Nous contacter' }, 'ja': { 'WebExtensions': 'ブラウザー拡張機能', @@ -219,12 +169,12 @@ var text = mdn.localStringMap({ 'WebExtensions/Match_patterns': 'マッチパターン', 'WebExtensions/Working_with_files': 'ファイルの操作', 'WebExtensions/Internationalization': '多言語対応', - 'WebExtensions/Security_best_practices': 'セキュリティのベストプラクティス', 'WebExtensions/Content_Security_Policy': 'Content Security Policy', 'WebExtensions/Native_messaging': 'Native messaging', + 'WebExtensions/Chrome_incompatibilities': 'Chrome との非互換性', + 'WebExtensions/Differences_between_desktop_and_Android': 'デスクトップと Android の差', 'WebExtensions#User_Interface': 'ユーザーインターフェイス', 'WebExtensions/user_interface': 'ユーザーインターフェイス', - 'WebExtensions/user_interface/Accessibility_guidelines': 'Accessibility guidelines', 'WebExtensions/user_interface/Browser_action': 'ブラウザーツールバーボタン', 'WebExtensions/user_interface/Page_actions': 'アドレスバーボタン', 'WebExtensions/user_interface/Sidebars': 'サイドバー', @@ -238,6 +188,7 @@ var text = mdn.localStringMap({ 'WebExtensions/Intercept_HTTP_requests': 'HTTP リクエストへの介入', 'WebExtensions/Modify_a_web_page': 'web ページの変更', 'WebExtensions/Safely_inserting_external_content_into_a_page': '外部コンテンツの挿入', + 'WebExtensions/Sharing_objects_with_page_scripts': 'Share objects with page scripts', 'WebExtensions/Add_a_button_to_the_toolbar': 'ツールバーボタンの追加', 'WebExtensions/Implement_a_settings_page': '設定画面の実装', 'WebExtensions/Working_with_the_Tabs_API': 'Tabs API 群の使い方', @@ -245,14 +196,7 @@ var text = mdn.localStringMap({ 'WebExtensions/Work_with_the_Cookies_API': 'Cookie API 群の使い方', 'WebExtensions/Work_with_contextual_identities': 'contextual identities の使い方', 'WebExtensions/Build_a_cross_browser_extension': 'Build a cross-browser extension', - 'WebExtensions/onboarding_upboarding_offboarding_best_practices': 'Onboard, upboard, and offboard users', - 'WebExtensions#Porting': '移行', - 'WebExtensions/Porting_a_Google_Chrome_extension': 'Google Chrome extension からの移行', - 'WebExtensions/Porting_a_legacy_Firefox_add-on': '古い Firefox アドオンの移行', - 'WebExtensions/Comparison_with_the_Add-on_SDK': 'Add-on SDK との比較', - 'WebExtensions/Comparison_with_XUL_XPCOM_extensions': 'XUL/XPCOM 拡張との比較', - 'WebExtensions/Chrome_incompatibilities': 'Chrome との非互換性', - 'WebExtensions/Differences_between_desktop_and_Android': 'デスクトップと Android の差', + 'WebExtensions/Firefox_differentiators': 'Firefox differentiators', 'WebExtensions#Firefox_workflow': 'Firefox でのワークフロー', 'WebExtensions/Choose_a_Firefox_version_for_web_extension_develop': 'Choose a Firefox version', 'WebExtensions/User_experience_best_practices': 'ユーザー体験の成功事例', @@ -269,33 +213,16 @@ var text = mdn.localStringMap({ 'WebExtensions/Best_practices_for_updating_your_extension': 'Best practices for updating your extension', 'WebExtensions/API': 'JavaScript API 群', 'WebExtensions/manifest.json': 'Manifest keys', - 'WebExtensions/Distribution_options': 'Distribution Options', - 'Themes': 'テーマ', - 'Themes/Theme_concepts': 'ブラウザのテーマ', - 'Themes/Theme_concepts_': 'ブラウザのテーマのコンセプト', - 'Themes/Using_the_AMO_theme_generator': 'Using the AMO theme generator', - 'Distribution': '公開して配布する', - 'Distribution/Publishing': 'アドオンを公開する', - 'WebExtensions/Developer_accounts': 'Developer accounts', - 'Distribution/Signing': '署名して配布する', - 'WebExtensions/Package_your_extension_': '拡張機能をパッケージ化する', - 'Distribution/Submitting_an_add-on': 'アドオンを投稿する', - 'Source_Code_Submission': 'ソースコードの提出', - 'Distribution/Resources_for_publishers': '公開した人のためのドキュメント', - 'Listing': '魅力的に作るためのリスト', - 'AMO/Policy/Reviews': 'レビューポリシー', - 'AMO/Policy/Agreement': '開発者同意事項', - 'AMO/Policy/Featured': 'AMO でおすすめされるアドオン', - 'Distribution/Retiring_your_extension': '拡張機能のクロージング', - 'WebExtensions/Alternative_distribution_options': 'アドオンの配布', - 'WebExtensions/Alternative_distribution_options/Sideloading_add-ons': 'サイドローディング', - 'WebExtensions/Alternative_distribution_options/Add-ons_for_desktop_apps': 'デスクトップアプリ', - 'WebExtensions/Alternative_distribution_options/Add-ons_in_the_enterprise': 'エンタープライズ', - 'Community_and_Support': 'コミュニティとサポート', + 'extension_workshop': 'Extension Workshop', + 'extension_workshop_develop': 'Develop', + 'extension_workshop_publish': 'Publish', + 'extension_workshop_manage': 'Manage', + 'extension_workshop_enterprise': 'Enterprise', 'Channels': 'チャンネル', 'Blog': 'ブログ', 'Forums': 'フォーラム', - '#Contact_us': 'コンタクト' + 'Chat': 'Add-ons chat', + 'Contact_us': 'コンタクト' }, 'ko': { 'WebExtensions': '브라우저 확장 기능', @@ -312,12 +239,12 @@ var text = mdn.localStringMap({ 'WebExtensions/Match_patterns': '일치 패턴', 'WebExtensions/Working_with_files': '파일 작업', 'WebExtensions/Internationalization': '국제화', - 'WebExtensions/Security_best_practices': '보안 모범 사례', 'WebExtensions/Content_Security_Policy': '컨텐츠 보안 정책', 'WebExtensions/Native_messaging': '네이티브 메시징', + 'WebExtensions/Differences_between_API_implementations': 'API 구현간의 차이점', + 'WebExtensions/Chrome_incompatibilities': 'Chrome 비호환성', 'WebExtensions#User_Interface': '사용자 인터페이스', 'WebExtensions/user_interface': '사용자 인터페이스', - 'WebExtensions/user_interface/Accessibility_guidelines': 'Accessibility guidelines', 'WebExtensions/user_interface/Browser_action': '도구 모음 버튼', 'WebExtensions/user_interface/Page_actions': '주소 표시줄 버튼', 'WebExtensions/user_interface/Sidebars': '사이드바', @@ -331,6 +258,7 @@ var text = mdn.localStringMap({ 'WebExtensions/Intercept_HTTP_requests': 'HTTP 요청 가로채기', 'WebExtensions/Modify_a_web_page': '웹 페이지 수정하기', 'WebExtensions/Safely_inserting_external_content_into_a_page': '외부 컨텐츠 삽입하기', + 'WebExtensions/Sharing_objects_with_page_scripts': 'Share objects with page scripts', 'WebExtensions/Add_a_button_to_the_toolbar': '도구 모음에 버튼 추가하기', 'WebExtensions/Implement_a_settings_page': '설정 페이지 구현하기', 'WebExtensions/Working_with_the_Tabs_API': 'Tabs API 사용하기', @@ -338,61 +266,19 @@ var text = mdn.localStringMap({ 'WebExtensions/Work_with_the_Cookies_API': 'Cookies API 사용하기', 'WebExtensions/Work_with_contextual_identities': 'contextual identities 사용하기', 'WebExtensions/Build_a_cross_browser_extension': 'Build a cross-browser extension', - 'WebExtensions/onboarding_upboarding_offboarding_best_practices': '사용자의 온보드, 업보드 및 오프보드', - 'WebExtensions#Porting': '포팅', 'WebExtensions/Firefox_differentiators': 'Firefox의 차별화', - 'WebExtensions/Porting_a_Google_Chrome_extension': 'Google Chrome 확장 기능 포팅', - 'WebExtensions/Porting_a_legacy_Firefox_add-on': '레거시 Firefox 확장 기능 포팅', - 'WebExtensions/Comparison_with_the_Add-on_SDK': 'Add-on SDK와 비교', - 'WebExtensions/Comparison_with_XUL_XPCOM_extensions': 'XUL/XPCOM 확장 기능과 비교', - 'WebExtensions/Differences_between_API_implementations': 'API 구현간의 차이점', - 'WebExtensions/Chrome_incompatibilities': 'Chrome 비호환성', - 'WebExtensions/Differences_between_desktop_and_Android': '데스크톱과 Android간의 차이점', - 'WebExtensions#Firefox_workflow': 'Firefox 작업 흐름', - 'WebExtensions/Choose_a_Firefox_version_for_web_extension_develop': 'Choose a Firefox version', - 'WebExtensions/Development_Tools': '개발자 도구', - 'WebExtensions/User_experience_best_practices': '사용자 경험', - 'WebExtensions/Prompt_users_for_data_and_privacy_consents': 'Prompt users for data and privacy consents', - 'WebExtensions/Temporary_Installation_in_Firefox': 'Firefox에서의 일시적인 설치', - 'WebExtensions/Debugging': '디버깅', - 'WebExtensions/Testing_persistent_and_restart_features': '지속성과 기능 재시작 테스팅하기', - 'WebExtensions/Test_permission_requests': 'Test permission requests', - 'WebExtensions/Developing_WebExtensions_for_Firefox_for_Android': 'Android용 Firefox 개발하기', - 'WebExtensions/Getting_started_with_web-ext': 'web-ext 시작하기', - 'WebExtensions/web-ext_command_reference': 'web-ext 명령어 레퍼런스', - 'WebExtensions/WebExtensions_and_the_Add-on_ID': '확장 기능과 부가 기능 ID', - 'WebExtensions/Request_the_right_permissions': '올바른 권한 요청하기', - 'WebExtensions/Best_practices_for_updating_your_extension': 'Best practices for updating your extension', 'WebExtensions/API': 'JavaScript APIs', 'WebExtensions/manifest.json': 'Manifest 키', - 'Themes': '테마', - 'Themes/Theme_concepts': '브라우저 테마', - 'Themes/Theme_concepts_': '브라우저 테마 개념', - 'Themes/Using_the_AMO_theme_generator': 'AMD 테마 생성기 사용하기', - 'Distribution': '출판 및 배포하기', - 'Distribution/Publishing': '부가 기능 출판하기', - 'WebExtensions/Developer_accounts': 'Developer accounts', - 'Distribution/Signing': '서명 및 출판 개요', - 'WebExtensions/Package_your_extension_': '확장 기능 패키징', - 'Distribution/Submitting_an_add-on': '부가 기능 제출', - 'Source_Code_Submission': '소스 코드 제출', - 'Distribution/Resources_for_publishers': '출판자를 위한 리소스', - 'Listing': '매력적인 목록 생성하기', - 'Distribution/Make_money_from_browser_extensions': '브라우저 확장 기능으로 수익 내기', - 'Distribution/Promoting_your_extension_or_theme': '확장 기능 또는 테마 홍보하기', - 'AMO/Policy/Reviews': '정책 리뷰', - 'AMO/Policy/Agreement': '개발자 협약', - 'AMO/Policy/Featured': '주요 부가 기능', - 'Distribution/Retiring_your_extension': '확장 기능 종료하기', - 'WebExtensions/Alternative_distribution_options': '부가 기능 배포하기', - 'WebExtensions/Alternative_distribution_options/Sideloading_add-ons': '개별 전송용', - 'WebExtensions/Alternative_distribution_options/Add-ons_for_desktop_apps': '데스크탑 앱', - 'WebExtensions/Alternative_distribution_options/Add-ons_in_the_enterprise': '기업용', - 'Community_and_Support': '커뮤니티와 지원', + 'extension_workshop': 'Extension Workshop', + 'extension_workshop_develop': 'Develop', + 'extension_workshop_publish': 'Publish', + 'extension_workshop_manage': 'Manage', + 'extension_workshop_enterprise': 'Enterprise', 'Channels': '채널', 'Blog': '부가 기능 블로그', 'Forums': '부가 기능 포럼', - '#Contact_us': '연락하기' + 'Chat': 'Add-ons chat', + 'Contact_us': '연락하기' }, 'zh-CN': { 'WebExtensions': '浏览器扩展程序', @@ -409,12 +295,12 @@ var text = mdn.localStringMap({ 'WebExtensions/Match_patterns': '匹配样式', 'WebExtensions/Working_with_files': '处理文件', 'WebExtensions/Internationalization': '国际化', - 'WebExtensions/Security_best_practices': '安全最佳实践', 'WebExtensions/Content_Security_Policy': '内容安全举措', 'WebExtensions/Native_messaging': '本地消息', + 'WebExtensions/Differences_between_API_implementations': 'API实现之间的差异', + 'WebExtensions/Chrome_incompatibilities': 'Chrome不兼容', 'WebExtensions#User_Interface': '用户界面', 'WebExtensions/user_interface': '用户界面', - 'WebExtensions/user_interface/Accessibility_guidelines': '无障碍指南', 'WebExtensions/user_interface/Browser_action': '工具栏按钮', 'WebExtensions/user_interface/Page_actions': '地址栏按钮', 'WebExtensions/user_interface/Sidebars': '侧边栏', @@ -428,6 +314,7 @@ var text = mdn.localStringMap({ 'WebExtensions/Intercept_HTTP_requests': '拦截HTTP 请求', 'WebExtensions/Modify_a_web_page': '修改网页', 'WebExtensions/Safely_inserting_external_content_into_a_page': '插入外部内容', + 'WebExtensions/Sharing_objects_with_page_scripts': 'Share objects with page scripts', 'WebExtensions/Add_a_button_to_the_toolbar': '向工具栏添加按钮', 'WebExtensions/Implement_a_settings_page': '应用设置页面', 'WebExtensions/Working_with_the_Tabs_API': '使用Tabs API', @@ -435,62 +322,20 @@ var text = mdn.localStringMap({ 'WebExtensions/Work_with_the_Cookies_API': '使用Cookies API', 'WebExtensions/Work_with_contextual_identities': '使用上下文身份', 'WebExtensions/Build_a_cross_browser_extension': '构建跨浏览器扩展', - 'WebExtensions/onboarding_upboarding_offboarding_best_practices': 'Onboard, upboard, and offboard users', 'WebExtensions#Porting': '移植', 'WebExtensions/Firefox_differentiators': 'Firefox的优势', - 'WebExtensions/Porting_a_Google_Chrome_extension': '移植Google Chrome扩展程序', - 'WebExtensions/Porting_a_legacy_Firefox_add-on': '移植旧版Firefox扩展', - 'WebExtensions/Comparison_with_the_Add-on_SDK': '与附加SDK的比较', - 'WebExtensions/Comparison_with_XUL_XPCOM_extensions': '与XUL / XPCOM扩展的比较', - 'WebExtensions/Differences_between_API_implementations': 'API实现之间的差异', - 'WebExtensions/Chrome_incompatibilities': 'Chrome不兼容', - 'WebExtensions/Differences_between_desktop_and_Android': '桌面版和Android之间的区别', - 'WebExtensions#Firefox_workflow': 'Firefox工作流程', - 'WebExtensions/Development_Tools': '开发者工具', - 'WebExtensions/Choose_a_Firefox_version_for_web_extension_develop': '选择Firefox版本', - 'WebExtensions/User_experience_best_practices': '用户体验', - 'WebExtensions/Prompt_users_for_data_and_privacy_consents': '提示用户输入数据和隐私权', - 'WebExtensions/Temporary_Installation_in_Firefox': 'Firefox中临时安装', - 'WebExtensions/Debugging': '调试', - 'WebExtensions/Testing_persistent_and_restart_features': '测试持久性和重新启动功能', - 'WebExtensions/Test_permission_requests': '测试许可请求', - 'WebExtensions/Developing_WebExtensions_for_Firefox_for_Android': '为Android的Firefox开发', - 'WebExtensions/Getting_started_with_web-ext': 'Web-ext入门', - 'WebExtensions/web-ext_command_reference': 'web-ext命令参考', - 'WebExtensions/WebExtensions_and_the_Add-on_ID': '扩展和附加ID', - 'WebExtensions/Request_the_right_permissions': '请求正确的权限', - 'WebExtensions/Best_practices_for_updating_your_extension': '更新扩展程序的最佳做法', 'WebExtensions/API': 'JavaScript APIs', 'WebExtensions/manifest.json': 'Manifest keys', - 'WebExtensions/Distribution_options': '发行选项', - 'Themes': '主题', - 'Themes/Theme_concepts': '浏览器主题', - 'Themes/Theme_concepts_': '浏览器主题的概念', - 'Themes/Using_the_AMO_theme_generator': '使用AMO主题生成器', - 'Distribution': '发布和分发', - 'Distribution/Publishing': '发布附加组件', - 'WebExtensions/Developer_accounts': '开发者帐户', - 'Distribution/Signing': '签名和分发概述', - 'WebExtensions/Package_your_extension_': '打包您的扩展', - 'Distribution/Submitting_an_add-on': '提交附加组件', - 'Source_Code_Submission': '提交源代码', - 'Distribution/Resources_for_publishers': '为发布者准备的资源', - 'Listing': '创建一个有吸引力的清单', - 'Distribution/Make_money_from_browser_extensions': '通过浏览器扩展盈利', - 'Distribution/Promoting_your_extension_or_theme': '宣传您的扩展程序或主题', - 'AMO/Policy/Reviews': '附加政策', - 'AMO/Policy/Agreement': '开发者协议', - 'AMO/Policy/Featured': '精选插件', - 'Distribution/Retiring_your_extension': '下架您的扩展程序', - 'WebExtensions/Alternative_distribution_options': '分发附加组件', - 'WebExtensions/Alternative_distribution_options/Sideloading_add-ons': '用于旁加载', - 'WebExtensions/Alternative_distribution_options/Add-ons_for_desktop_apps': '用于桌面应用', - 'WebExtensions/Alternative_distribution_options/Add-ons_in_the_enterprise': '用于企业', - 'Community_and_Support': '社区与支持', + 'extension_workshop': 'Extension Workshop', + 'extension_workshop_develop': 'Develop', + 'extension_workshop_publish': 'Publish', + 'extension_workshop_manage': 'Manage', + 'extension_workshop_enterprise': 'Enterprise', 'Channels': '渠道', 'Blog': 'Add-ons博客', - 'Forums': 'Add-on论坛', - '#Contact_us': '联系我们' + 'Forums': 'Add-ons论坛', + 'Chat': 'Add-ons chat', + 'Contact_us': '联系我们' } }); @@ -521,9 +366,10 @@ var text = mdn.localStringMap({
  • <%=text['WebExtensions/Match_patterns']%>
  • <%=text['WebExtensions/Working_with_files']%>
  • <%=text['WebExtensions/Internationalization']%>
  • -
  • <%=text['WebExtensions/Security_best_practices']%>
  • <%=text['WebExtensions/Content_Security_Policy']%>
  • <%=text['WebExtensions/Native_messaging']%>
  • +
  • <%=text['WebExtensions/Differences_between_API_implementations']%>
  • +
  • <%=text['WebExtensions/Chrome_incompatibilities']%>
  • @@ -532,7 +378,6 @@ var text = mdn.localStringMap({ <%=text['WebExtensions#User_Interface']%>
    1. <%=text['WebExtensions/user_interface']%>
    2. -
    3. <%=text['WebExtensions/user_interface/Accessibility_guidelines']%>
    4. <%=text['WebExtensions/user_interface/Browser_action']%>
    5. <%=text['WebExtensions/user_interface/Page_actions']%>
    6. <%=text['WebExtensions/user_interface/Sidebars']%>
    7. @@ -552,6 +397,7 @@ var text = mdn.localStringMap({
    8. <%=text['WebExtensions/Intercept_HTTP_requests']%>
    9. <%=text['WebExtensions/Modify_a_web_page']%>
    10. <%=text['WebExtensions/Safely_inserting_external_content_into_a_page']%>
    11. +
    12. <%=text['WebExtensions/Sharing_objects_with_page_scripts']%>
    13. <%=text['WebExtensions/Add_a_button_to_the_toolbar']%>
    14. <%=text['WebExtensions/Implement_a_settings_page']%>
    15. <%=text['WebExtensions/Working_with_the_Tabs_API']%>
    16. @@ -559,44 +405,12 @@ var text = mdn.localStringMap({
    17. <%=text['WebExtensions/Work_with_the_Cookies_API']%>
    18. <%=text['WebExtensions/Work_with_contextual_identities']%>
    19. <%=text['WebExtensions/Build_a_cross_browser_extension']%>
    20. -
    21. <%=text['WebExtensions/onboarding_upboarding_offboarding_best_practices']%>
  • - <%=text['WebExtensions#Porting']%> -
      -
    1. <%=text['WebExtensions/Firefox_differentiators']%>
    2. -
    3. <%=text['WebExtensions/Porting_a_Google_Chrome_extension']%>
    4. -
    5. <%=text['WebExtensions/Porting_a_legacy_Firefox_add-on']%>
    6. -
    7. <%=text['WebExtensions/Comparison_with_the_Add-on_SDK']%>
    8. -
    9. <%=text['WebExtensions/Comparison_with_XUL_XPCOM_extensions']%>
    10. -
    11. <%=text['WebExtensions/Differences_between_API_implementations']%>
    12. -
    13. <%=text['WebExtensions/Chrome_incompatibilities']%>
    14. -
    15. <%=text['WebExtensions/Differences_between_desktop_and_Android']%>
    16. -
    -
    -
  • -
  • -
    - <%=text['WebExtensions#Firefox_workflow']%> -
      -
    1. <%=text['WebExtensions/Development_Tools']%>
    2. -
    3. <%=text['WebExtensions/Choose_a_Firefox_version_for_web_extension_develop']%>
    4. -
    5. <%=text['WebExtensions/User_experience_best_practices']%>
    6. -
    7. <%=text['WebExtensions/Prompt_users_for_data_and_privacy_consents']%>
    8. -
    9. <%=text['WebExtensions/Temporary_Installation_in_Firefox']%>
    10. -
    11. <%=text['WebExtensions/Debugging']%>
    12. -
    13. <%=text['WebExtensions/Testing_persistent_and_restart_features']%>
    14. -
    15. <%=text['WebExtensions/Test_permission_requests']%>
    16. -
    17. <%=text['WebExtensions/Developing_WebExtensions_for_Firefox_for_Android']%>
    18. -
    19. <%=text['WebExtensions/Getting_started_with_web-ext']%>
    20. -
    21. <%=text['WebExtensions/web-ext_command_reference']%>
    22. -
    23. <%=text['WebExtensions/WebExtensions_and_the_Add-on_ID']%>
    24. -
    25. <%=text['WebExtensions/Request_the_right_permissions']%>
    26. -
    27. <%=text['WebExtensions/Best_practices_for_updating_your_extension']%>
    28. -
    + <%=text['WebExtensions/Firefox_differentiators']%>
  • @@ -605,7 +419,6 @@ var text = mdn.localStringMap({ <%-await template("WebExtAPISidebar", [])%>
  • -
  • <%=text['WebExtensions/manifest.json']%> @@ -614,57 +427,25 @@ var text = mdn.localStringMap({ %>
  • -
  • <%=text['WebExtensions/Distribution_options']%>
  • -
  • <%=text['Themes']%>
  • -
  • -
    - <%=text['Themes/Theme_concepts']%> -
      -
    1. <%=text['Themes/Theme_concepts_']%>
    2. -
    3. <%=text['Themes/Using_the_AMO_theme_generator']%>
    4. -
    -
    -
  • -
  • <%=text['Distribution']%>
  • -
  • -
    - <%=text['Distribution/Publishing']%> -
      -
    1. <%=text['WebExtensions/Developer_accounts']%>
    2. -
    3. <%=text['Distribution/Signing']%>
    4. -
    5. <%=text['WebExtensions/Package_your_extension_']%>
    6. -
    7. <%=text['Distribution/Submitting_an_add-on']%>
    8. -
    9. <%=text['Source_Code_Submission']%>
    10. -
    11. <%=text['Distribution/Resources_for_publishers']%>
    12. -
    13. <%=text['Listing']%>
    14. -
    15. <%=text['Distribution/Make_money_from_browser_extensions']%>
    16. -
    17. <%=text['Distribution/Promoting_your_extension_or_theme']%>
    18. -
    19. <%=text['AMO/Policy/Reviews']%>
    20. -
    21. <%=text['AMO/Policy/Agreement']%>
    22. -
    23. <%=text['AMO/Policy/Featured']%>
    24. -
    25. <%=text['Distribution/Retiring_your_extension']%>
    26. -
    -
    -
  • -
  • +
  • - <%=text['WebExtensions/Alternative_distribution_options']%> + <%=text['extension_workshop']%>
      -
    1. <%=text['WebExtensions/Alternative_distribution_options/Sideloading_add-ons']%>
    2. -
    3. <%=text['WebExtensions/Alternative_distribution_options/Add-ons_for_desktop_apps']%>
    4. -
    5. <%=text['WebExtensions/Alternative_distribution_options/Add-ons_in_the_enterprise']%>
    6. +
    7. <%=text['extension_workshop_develop']%>
    8. +
    9. <%=text['extension_workshop_publish']%>
    10. +
    11. <%=text['extension_workshop_manage']%>
    12. +
    13. <%=text['extension_workshop_enterprise']%>
  • -
  • <%=text['Community_and_Support']%>
  • +
  • <%=text['Contact_us']%>
  • <%=text['Channels']%>
    1. <%=text['Blog']%>
    2. <%=text['Forums']%>
    3. -
    4. Stack Overflow
    5. -
    6. <%=text['#Contact_us']%>
    7. +
    8. <%=text['Chat']%>
  • diff --git a/kumascript/macros/AddonSidebarMain.ejs b/kumascript/macros/AddonSidebarMain.ejs new file mode 100644 index 000000000000..59db2783c77b --- /dev/null +++ b/kumascript/macros/AddonSidebarMain.ejs @@ -0,0 +1,82 @@ +<% +var currentSection = $0; +var locale = env.locale; +var slug = env.slug; +var baseURL = '/' + locale + '/docs/Mozilla/Add-ons/'; + +function currentPageIsUnder(root) { + rootSlug = 'Mozilla/Add-ons/' + root; + if (slug && slug.indexOf(rootSlug) != -1) { + return 'open'; + } + return ''; +} + +var text = mdn.localStringMap({ + 'en-US': { + 'WebExtensions': 'Browser extensions', + 'Themes': 'Themes', + 'Community_and_Support': 'Community and Support', + 'Channels': 'Channels', + 'Blog': 'Add-ons blog', + 'Forums': 'Add-on forums', + '#Contact_us': 'Contact us' + }, + 'fr': { + 'WebExtensions': 'WebExtensions', + 'Themes': 'Thèmes', + 'Community_and_Support': 'Communauté et Support', + 'Channels': 'Canaux de discussions', + 'Blog': 'Blog extensions', + 'Forums': 'Forum extensions', + '#Contact_us': 'Nous contacter' + }, + 'ja': { + 'WebExtensions': 'ブラウザー拡張機能', + 'Themes': 'テーマ', + 'Community_and_Support': 'コミュニティとサポート', + 'Channels': 'チャンネル', + 'Blog': 'ブログ', + 'Forums': 'フォーラム', + '#Contact_us': 'コンタクト' + }, + 'ko': { + 'WebExtensions': '브라우저 확장 기능', + 'Themes': '테마', + 'Community_and_Support': '커뮤니티와 지원', + 'Channels': '채널', + 'Blog': '부가 기능 블로그', + 'Forums': '부가 기능 포럼', + '#Contact_us': '연락하기' + }, + 'zh-CN': { + 'WebExtensions': '浏览器扩展程序', + 'Themes': '主题', + 'Channels': '渠道', + 'Blog': 'Add-ons博客', + 'Forums': 'Add-ons论坛', + 'Chat': 'Add-ons chat', + 'Contact_us': '联系我们' + } +}); + +%> + + diff --git a/kumascript/macros/CSSAnimatedProperties.ejs b/kumascript/macros/CSSAnimatedProperties.ejs index 2e827d376ca8..7b37e7cdfd25 100644 --- a/kumascript/macros/CSSAnimatedProperties.ejs +++ b/kumascript/macros/CSSAnimatedProperties.ejs @@ -13,7 +13,7 @@ var animatedProps = []; // the animatedProps array. for (var property in data.properties) { if (data.properties.hasOwnProperty(property)) { - if (data.properties[property].animationType !== "discrete") { + if (!["discrete", "notAnimatable"].includes(data.properties[property].animationType)) { animatedProps.push(property); } } diff --git a/kumascript/macros/CSSInfo.ejs b/kumascript/macros/CSSInfo.ejs index aed8e21c9ca7..22037b1e00b8 100644 --- a/kumascript/macros/CSSInfo.ejs +++ b/kumascript/macros/CSSInfo.ejs @@ -286,10 +286,6 @@ if (name === "preview-wiki-content") { } properties = properties.concat({ - name: "media", - label: localize(localStrings, "media") - }, - { name: "computed", label: await template("Xref_csscomputed") }); @@ -301,11 +297,6 @@ if (name === "preview-wiki-content") { }); } - properties = properties.concat({ - name: "order", - label: localize(localStrings, "canonicalOrder") - }); - if (cssInfo.stacking) { properties = properties.concat({ name: "stacking", diff --git a/kumascript/macros/GroupData.json b/kumascript/macros/GroupData.json index 76efa935f60b..bf628398c809 100644 --- a/kumascript/macros/GroupData.json +++ b/kumascript/macros/GroupData.json @@ -27,6 +27,17 @@ "properties": ["Navigator.battery"], "events": [] }, + "Barcode Detector API": { + "overview": ["Barcode Detector API"], + "guides": [], + "interfaces": ["BarcodeDetector"], + "methods": [ + "BarcodeDetector.detect()", + "BarcodeDetector.getSupportedFormats()" + ], + "properties": [], + "events": [] + }, "Beacon": { "overview": ["Beacon API"], "guides": ["/docs/Web/API/Beacon_API/Using_the_Beacon_API"], @@ -92,7 +103,8 @@ "events": [] }, "Clipboard API": { - "interfaces": ["Clipboard", "ClipboardEvent"], + "overview": ["Clipboard API"], + "interfaces": ["Clipboard", "ClipboardEvent", "ClipboardItem"], "dictionaries": ["ClipboardPermissionDescriptor"], "methods": [], "properties": ["Navigator.clipboard"], @@ -103,6 +115,16 @@ "Element: paste" ] }, + "Content Index API": { + "overview": ["Content Index API"], + "interfaces": ["ContentIndex", "ContentIndexEvent"], + "methods": [], + "properties": [ + "ServiceWorkerRegistration.index", + "ServiceWorkerGlobalScope.oncontentdelete" + ], + "events": ["ServiceWorkerGlobalScope: contentdelete"] + }, "Console API": { "overview": ["Console API"], "interfaces": ["Console"], @@ -830,8 +852,16 @@ "overview": ["Media Session API"], "interfaces": ["MediaMetadata", "MediaSession"], "methods": [], - "properties": [], - "events": [] + "properties": ["navigator.mediaSession"], + "events": [], + "dictionaries": [ + "MediaImage", + "MediaMetadataInit", + "MediaPositionState", + "MediaSessionActionDetails" + ], + "types": ["MediaSessionAction", "MediaSessionPlaybackState"], + "callbacks": ["MediaSessionActionHandler"] }, "Media Source Extensions": { "overview": ["Media Source Extensions API"], @@ -966,6 +996,16 @@ "properties": ["Window.performance"], "events": [] }, + "Periodic Background Sync": { + "overview": ["Web Periodic Background Synchronization API"], + "interfaces": ["PeriodicSyncEvent", "PeriodicSyncManager"], + "methods": [], + "properties": [ + "ServiceWorkerRegistration.periodicSync", + "ServiceWorkerGlobalScope.onperiodicsync" + ], + "events": ["ServiceWorkerGlobalScope: periodicsync"] + }, "Permissions API": { "overview": ["Permissions API"], "guides": ["/docs/Web/API/Permissions_API/Using_the_Permissions_API"], @@ -974,6 +1014,29 @@ "properties": ["Navigator.permissions", "WorkerNavigator.permissions"], "events": [] }, + "Picture-in-Picture API": { + "overview": ["Picture-in-Picture API"], + "guides": ["/docs/Web/API/Picture-in-Picture_API/Guide"], + "interfaces": ["PictureInPictureWindow"], + "methods": [ + "HTMLVideoElement.requestPictureInPicture()", + "Document.exitPictureInPicture()" + ], + "properties": [ + "HTMLVideoElement.autoPictureInPicture", + "HTMLVideoElement.disablePictureInPicture", + "HTMLVideoElement.onenterpictureinpicture", + "HTMLVideoElement.onleavepictureinpicture", + "Document.pictureInPictureEnabled", + "DocumentOrShadowRoot.pictureInPictureElement", + "PictureInPictureWindow.onresize" + ], + "events": [ + "HTMLVideoElement: enterpictureinpicture", + "HTMLVideoElement: leavepictureinpicture", + "PictureInPictureWindow: resize" + ] + }, "Pointer Events": { "overview": ["Pointer events"], "guides": [ @@ -1088,6 +1151,7 @@ "events": [] }, "Screen Capture API": { + "overview": ["Screen Capture API"], "guides": ["/docs/Web/API/Screen_Capture_API/Using_Screen_Capture"], "interfaces": [], "dictionaries": [], @@ -1113,6 +1177,13 @@ "properties": ["Screen.orientation"], "events": [] }, + "Screen Wake Lock API": { + "overview": ["Screen Wake Lock API"], + "interfaces": ["WakeLock", "WakeLockSentinel"], + "methods": [], + "properties": ["Navigator.wakelock"], + "events": [] + }, "Selection API": { "interfaces": ["Selection"], "properties": [ @@ -1407,6 +1478,13 @@ "properties": [], "events": [] }, + "Visual Viewport": { + "overview": ["Visual Viewport API"], + "interfaces": ["VisualViewport"], + "methods": [], + "properties": ["Window.visualViewport"], + "events": ["VisualViewport: resize", "VisualViewport: scroll"] + }, "Web Animations": { "overview": ["Web Animations API"], "guides": [ @@ -1692,7 +1770,6 @@ "RTCDTMFSender", "RTCDTMFToneChangeEvent", "RTCStatsReport", - "RTCStatsEvent", "RTCErrorEvent" ], "dictionaries": [ @@ -1792,7 +1869,31 @@ ], "methods": ["MediaDevices.getUserMedia()"], "properties": ["Navigator.mediaDevices"], - "events": [], + "events": [ + "RTCDataChannel: bufferedamountlow", + "RTCDataChannel: close", + "RTCDataChannel: closing", + "RTCPeerConnection: connectionstatechange", + "RTCPeerConnection: datachannel", + "RTCDataChannel: error", + "RTCIceTransport: error", + "RTCDtlsTransport: error", + "RTCSctpTransport: error", + "RTCIceTransport: gatheringstatechange", + "RTCPeerConnection: icecandidate", + "RTCPeerConnection: icecandidateerror", + "RTCPeerConnection: iceconnectionstatechange", + "RTCPeerConnection: icegatheringstatechange", + "RTCDataChannel: message", + "RTCPeerConnection: negotiationneeded", + "RTCDataChannel: open", + "RTCIceTransport: selectedcandidatepairchange", + "RTCPeerConnection: signalingstatechange", + "RTCIceTransport: statechange", + "RTCDtlsTransport: statechange", + "RTCDTMFSender: tonechange", + "RTCPeerConnection: track" + ], "callbacks": [ "RTCPeerConnectionErrorCallback", "RTCSessionDescriptionCallback" @@ -1833,10 +1934,7 @@ }, "Web Storage API": { "overview": ["Web Storage API"], - "guides": [ - "/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API", - "/docs/Web/API/Web_Storage_API/Local_storage" - ], + "guides": ["/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API"], "interfaces": ["Storage", "StorageEvent"], "methods": [], "properties": ["Window.sessionStorage", "Window.localStorage"], diff --git a/kumascript/macros/JSRef.ejs b/kumascript/macros/JSRef.ejs index d99110f1655c..1ecc126eeb03 100644 --- a/kumascript/macros/JSRef.ejs +++ b/kumascript/macros/JSRef.ejs @@ -43,7 +43,7 @@ var inheritance = ["Object", "Function"]; var inheritanceData = { "Math": ["Object"], "Function": ["Object"], - "Object": ["Function"], + "Object": [], "JSON": ["Object"], "Intl": ["Object"], "arguments": [], diff --git a/kumascript/macros/JsSidebar.ejs b/kumascript/macros/JsSidebar.ejs index e84b99e422fd..d3a8e7c6be93 100644 --- a/kumascript/macros/JsSidebar.ejs +++ b/kumascript/macros/JsSidebar.ejs @@ -38,6 +38,7 @@ var text = mdn.localStringMap({ 'Intermediate': 'Intermediate', 'Introducing_objects': 'Introducing JavaScript objects', 'Client-side_APIs': 'Client-side web APIs', + 'Frameworks': 'Client-side JavaScript frameworks', 'Re-introduction': 'A re-introduction to JavaScript', 'Data_structures': 'JavaScript data structures', 'Equality': 'Equality comparisons and sameness', @@ -92,6 +93,7 @@ var text = mdn.localStringMap({ 'Intermediate': 'Средние', 'Introducing_objects': 'Introducing JavaScript objects', 'Client-side_APIs': 'Client-side web APIs', + 'Frameworks': 'Client-side JavaScript frameworks', 'Re-introduction': 'Повторное введение в JavaScript', 'Data_structures': 'Структуры данных JavaScript', 'Equality': 'Проверки на равенство и когда их использовать', @@ -146,6 +148,7 @@ var text = mdn.localStringMap({ 'Intermediate': 'Intermédiaire', 'Introducing_objects': 'Introducing JavaScript objects', 'Client-side_APIs': 'Client-side web APIs', + 'Frameworks': 'Client-side JavaScript frameworks', 'Re-introduction': 'Réintroduction à JavaScript', 'Data_structures': 'Structures de données en JavaScript', 'Equality': 'Différents tests d\'égalité', @@ -200,6 +203,7 @@ var text = mdn.localStringMap({ 'Intermediate': '中级教程', 'Introducing_objects': 'Introducing JavaScript objects', 'Client-side_APIs': 'Client-side web APIs', + 'Frameworks': 'Client-side JavaScript frameworks', 'Re-introduction': '深入 JavaScript', 'Data_structures': 'JavaScript 数据结构', 'Equality': '如何正确判断相等性', @@ -254,6 +258,7 @@ var text = mdn.localStringMap({ 'Intermediate': 'Fortgeschritten', 'Introducing_objects': 'Introducing JavaScript objects', 'Client-side_APIs': 'Client-side web APIs', + 'Frameworks': 'Client-side JavaScript frameworks', 'Re-introduction': 'Eine Wiedereinführung in JavaScript', 'Data_structures': 'JavaScript Datenstrukturen', 'Equality': 'Vergleiche auf Gleichheit', @@ -308,6 +313,7 @@ var text = mdn.localStringMap({ 'Intermediate': '中級編', 'Introducing_objects': 'Introducing JavaScript objects', 'Client-side_APIs': 'Client-side web APIs', + 'Frameworks': 'Client-side JavaScript frameworks', 'Re-introduction': 'JavaScript 「再」入門', 'Data_structures': 'JavaScript のデータ構造', 'Equality': '等値比較と同一性', @@ -362,6 +368,7 @@ var text = mdn.localStringMap({ 'Intermediate': 'Intermediário', 'Introducing_objects': 'Introdução a objetos JavaScript', 'Client-side_APIs': 'APIs Web para aplicações Cliente', + 'Frameworks': 'Client-side JavaScript frameworks', 'Re-introduction': 'Uma reintrodução a JavaScript', 'Data_structures': 'Estruturas de dados de JavaScript', 'Equality': 'Comparadores de igualdade e semelhança', @@ -433,7 +440,7 @@ var text = mdn.localStringMap({
    > <%=text['Intermediate']%>
      -
    1. <%=text['Introducing_objects']%>
    2. +
    3. <%=text['Frameworks']%>
    4. <%=text['Client-side_APIs']%>
    5. <%=text['Re-introduction']%>
    6. <%=text['Data_structures']%>
    7. diff --git a/kumascript/macros/LearnSidebar.ejs b/kumascript/macros/LearnSidebar.ejs index 78526bb8e65c..68609591e35c 100644 --- a/kumascript/macros/LearnSidebar.ejs +++ b/kumascript/macros/LearnSidebar.ejs @@ -180,13 +180,50 @@ var text = mdn.localStringMap({ 'Setting_up_your_own_test_automation_environment' : 'Setting up your own test automation environment', 'Git_and_GitHub' : 'Git and GitHub', 'Git_and_GitHub_overview' : 'Git and GitHub overview', - 'Understanding_client-side_web_development_tools' : 'Understanding client-side web development tools', + 'Client-side_web_development_tools' : 'Client-side web development tools', 'Client-side_web_development_tools_index' : 'Client-side web development tools index', 'Client-side_tooling_overview' : 'Client-side tooling overview', 'Command_line_crash_course' : 'Command line crash course', 'Package_management_basics' : 'Package management basics', 'Introducing_a_complete_toolchain' : 'Introducing a complete toolchain', 'Deploying_our_app' : 'Deploying our app', + 'Introduction_to_client-side_frameworks': 'Introduction to client-side frameworks', + 'Client-side_frameworks_overview': 'Client-side frameworks overview', + 'Framework_main_features': 'Framework main features', + 'React': 'React', + 'Getting_started_with_React': 'Getting started with React', + 'Beginning_our_React_todo_list': 'Beginning our React todo list', + 'Componentizing_our_React_app': 'Componentizing our React app', + 'React_interactivity:_Events_and_state': 'React interactivity: Events and state', + 'React_interactivity:_Editing_filtering_conditional_rendering': 'React interactivity: Editing, filtering, conditional rendering', + 'Accessibility_in_React': 'Accessibility in React', + 'React_resources': 'React resources', + 'Ember': 'Ember', + 'Getting_started_with_Ember': 'Getting started with Ember', + 'Ember_app_structure_and_componentization': 'Ember app structure and componentization', + 'Ember_interactivity:_Events_classes_and_state': 'Ember interactivity: Events, classes and state', + 'Ember_Interactivity:_Footer_functionality_conditional_rendering': 'Ember Interactivity: Footer functionality, conditional rendering', + 'Routing_in_Ember': 'Routing in Ember', + 'Ember_resources_and_troubleshooting': 'Ember resources and troubleshooting', + 'Vue': 'Vue', + 'Getting_started_with_Vue': 'Getting started with Vue', + 'Creating_our_first_Vue_component': 'Creating our first Vue component', + 'Rendering_a_list_of_Vue_components': 'Rendering a list of Vue components', + 'Adding_a_new_todo_form:_Vue_events_methods_and_models': 'Adding a new todo form: Vue events, methods, and models', + 'Styling_Vue_components_with_CSS': 'Styling Vue components with CSS', + 'Using_Vue_computed_properties': 'Using Vue computed properties', + 'Vue_conditional_rendering:_editing_existing_todos': 'Vue conditional rendering: editing existing todos', + 'Focus_management_with_Vue_refs': 'Focus management with Vue refs', + 'Vue_resources': 'Vue resources', + 'Svelte': 'Svelte', + 'Getting_started_with_Svelte': 'Getting started with Svelte', + 'Starting_our_Svelte_Todo_list_app': 'Starting our Svelte Todo list app', + 'Dynamic_behavior_in_Svelte:_working_with_variables_and_props': 'Dynamic behavior in Svelte: working with variables and props', + 'Componentizing_our_Svelte_app': 'Componentizing our Svelte app', + 'Advanced_Svelte:_Reactivity_lifecycle_accessibility': 'Advanced Svelte: Reactivity, lifecycle, accessibility', + 'Working_with_Svelte_stores': 'Working with Svelte stores', + 'TypeScript_support_in_Svelte': 'TypeScript support in Svelte', + 'Deployment_and_next_steps': 'Deployment and next steps', 'Server-side_website_programming' : 'Server-side website programming', 'First_steps' : 'First steps', 'First_steps_overview' : 'First steps overview', @@ -398,13 +435,50 @@ var text = mdn.localStringMap({ 'Setting_up_your_own_test_automation_environment' : 'Setze deine eigene Testumgebung auf', 'Git_and_GitHub' : 'Git and GitHub', 'Git_and_GitHub_overview' : 'Git and GitHub overview', - 'Understanding_client-side_web_development_tools' : 'Understanding client-side web development tools', + 'Client-side_web_development_tools' : 'Client-side web development tools', 'Client-side_web_development_tools_index' : 'Client-side web development tools index', 'Client-side_tooling_overview' : 'Client-side tooling overview', 'Command_line_crash_course' : 'Command line crash course', 'Package_management_basics' : 'Package management basics', 'Introducing_a_complete_toolchain' : 'Introducing a complete toolchain', 'Deploying_our_app' : 'Deploying our app', + 'Introduction_to_client-side_frameworks': 'Introduction to client-side frameworks', + 'Client-side_frameworks_overview': 'Client-side frameworks overview', + 'Framework_main_features': 'Framework main features', + 'React': 'React', + 'Getting_started_with_React': 'Getting started with React', + 'Beginning_our_React_todo_list': 'Beginning our React todo list', + 'Componentizing_our_React_app': 'Componentizing our React app', + 'React_interactivity:_Events_and_state': 'React interactivity: Events and state', + 'React_interactivity:_Editing_filtering_conditional_rendering': 'React interactivity: Editing, filtering, conditional rendering', + 'Accessibility_in_React': 'Accessibility in React', + 'React_resources': 'React resources', + 'Ember': 'Ember', + 'Getting_started_with_Ember': 'Getting started with Ember', + 'Ember_app_structure_and_componentization': 'Ember app structure and componentization', + 'Ember_interactivity:_Events_classes_and_state': 'Ember interactivity: Events, classes and state', + 'Ember_Interactivity:_Footer_functionality_conditional_rendering': 'Ember Interactivity: Footer functionality, conditional rendering', + 'Routing_in_Ember': 'Routing in Ember', + 'Ember_resources_and_troubleshooting': 'Ember resources and troubleshooting', + 'Vue': 'Vue', + 'Getting_started_with_Vue': 'Getting started with Vue', + 'Creating_our_first_Vue_component': 'Creating our first Vue component', + 'Rendering_a_list_of_Vue_components': 'Rendering a list of Vue components', + 'Adding_a_new_todo_form:_Vue_events_methods_and_models': 'Adding a new todo form: Vue events, methods, and models', + 'Styling_Vue_components_with_CSS': 'Styling Vue components with CSS', + 'Using_Vue_computed_properties': 'Using Vue computed properties', + 'Vue_conditional_rendering:_editing_existing_todos': 'Vue conditional rendering: editing existing todos', + 'Focus_management_with_Vue_refs': 'Focus management with Vue refs', + 'Vue_resources': 'Vue resources', + 'Svelte': 'Svelte', + 'Getting_started_with_Svelte': 'Getting started with Svelte', + 'Starting_our_Svelte_Todo_list_app': 'Starting our Svelte Todo list app', + 'Dynamic_behavior_in_Svelte:_working_with_variables_and_props': 'Dynamic behavior in Svelte: working with variables and props', + 'Componentizing_our_Svelte_app': 'Componentizing our Svelte app', + 'Advanced_Svelte:_Reactivity_lifecycle_accessibility': 'Advanced Svelte: Reactivity, lifecycle, accessibility', + 'Working_with_Svelte_stores': 'Working with Svelte stores', + 'TypeScript_support_in_Svelte': 'TypeScript support in Svelte', + 'Deployment_and_next_steps': 'Deployment and next steps', 'Server-side_website_programming' : 'Serverseitige Webseitenprogrammierung', 'First_steps' : 'Erste Schritte', 'First_steps_overview' : 'Erste Schritte — Übersicht', @@ -616,13 +690,50 @@ var text = mdn.localStringMap({ 'Setting_up_your_own_test_automation_environment' : 'Configurando seu próprio ambiente de testes automatizados', 'Git_and_GitHub' : 'Git and GitHub', 'Git_and_GitHub_overview' : 'Git and GitHub overview', - 'Understanding_client-side_web_development_tools' : 'Understanding client-side web development tools', + 'Client-side_web_development_tools' : 'Client-side web development tools', 'Client-side_web_development_tools_index' : 'Client-side web development tools index', 'Client-side_tooling_overview' : 'Client-side tooling overview', 'Command_line_crash_course' : 'Command line crash course', 'Package_management_basics' : 'Package management basics', 'Introducing_a_complete_toolchain' : 'Introducing a complete toolchain', 'Deploying_our_app' : 'Deploying our app', + 'Introduction_to_client-side_frameworks': 'Introduction to client-side frameworks', + 'Client-side_frameworks_overview': 'Client-side frameworks overview', + 'Framework_main_features': 'Framework main features', + 'React': 'React', + 'Getting_started_with_React': 'Getting started with React', + 'Beginning_our_React_todo_list': 'Beginning our React todo list', + 'Componentizing_our_React_app': 'Componentizing our React app', + 'React_interactivity:_Events_and_state': 'React interactivity: Events and state', + 'React_interactivity:_Editing_filtering_conditional_rendering': 'React interactivity: Editing, filtering, conditional rendering', + 'Accessibility_in_React': 'Accessibility in React', + 'React_resources': 'React resources', + 'Ember': 'Ember', + 'Getting_started_with_Ember': 'Getting started with Ember', + 'Ember_app_structure_and_componentization': 'Ember app structure and componentization', + 'Ember_interactivity:_Events_classes_and_state': 'Ember interactivity: Events, classes and state', + 'Ember_Interactivity:_Footer_functionality_conditional_rendering': 'Ember Interactivity: Footer functionality, conditional rendering', + 'Routing_in_Ember': 'Routing in Ember', + 'Ember_resources_and_troubleshooting': 'Ember resources and troubleshooting', + 'Vue': 'Vue', + 'Getting_started_with_Vue': 'Getting started with Vue', + 'Creating_our_first_Vue_component': 'Creating our first Vue component', + 'Rendering_a_list_of_Vue_components': 'Rendering a list of Vue components', + 'Adding_a_new_todo_form:_Vue_events_methods_and_models': 'Adding a new todo form: Vue events, methods, and models', + 'Styling_Vue_components_with_CSS': 'Styling Vue components with CSS', + 'Using_Vue_computed_properties': 'Using Vue computed properties', + 'Vue_conditional_rendering:_editing_existing_todos': 'Vue conditional rendering: editing existing todos', + 'Focus_management_with_Vue_refs': 'Focus management with Vue refs', + 'Vue_resources': 'Vue resources', + 'Svelte': 'Svelte', + 'Getting_started_with_Svelte': 'Getting started with Svelte', + 'Starting_our_Svelte_Todo_list_app': 'Starting our Svelte Todo list app', + 'Dynamic_behavior_in_Svelte:_working_with_variables_and_props': 'Dynamic behavior in Svelte: working with variables and props', + 'Componentizing_our_Svelte_app': 'Componentizing our Svelte app', + 'Advanced_Svelte:_Reactivity_lifecycle_accessibility': 'Advanced Svelte: Reactivity, lifecycle, accessibility', + 'Working_with_Svelte_stores': 'Working with Svelte stores', + 'TypeScript_support_in_Svelte': 'TypeScript support in Svelte', + 'Deployment_and_next_steps': 'Deployment and next steps', 'Server-side_website_programming' : 'Programação de servidores de Aplicação', 'First_steps' : 'Primeiros passos', 'First_steps_overview' : 'Visão geral para os primeiros passos', @@ -818,13 +929,50 @@ var text = mdn.localStringMap({ 'Setting_up_your_own_test_automation_environment' : 'Установка вашей автоматической среды тестирования', 'Git_and_GitHub' : 'Git and GitHub', 'Git_and_GitHub_overview' : 'Git and GitHub overview', - 'Understanding_client-side_web_development_tools' : 'Understanding client-side web development tools', + 'Client-side_web_development_tools' : 'Client-side web development tools', 'Client-side_web_development_tools_index' : 'Client-side web development tools index', 'Client-side_tooling_overview' : 'Client-side tooling overview', 'Command_line_crash_course' : 'Command line crash course', 'Package_management_basics' : 'Package management basics', 'Introducing_a_complete_toolchain' : 'Introducing a complete toolchain', 'Deploying_our_app' : 'Deploying our app', + 'Introduction_to_client-side_frameworks': 'Introduction to client-side frameworks', + 'Client-side_frameworks_overview': 'Client-side frameworks overview', + 'Framework_main_features': 'Framework main features', + 'React': 'React', + 'Getting_started_with_React': 'Getting started with React', + 'Beginning_our_React_todo_list': 'Beginning our React todo list', + 'Componentizing_our_React_app': 'Componentizing our React app', + 'React_interactivity:_Events_and_state': 'React interactivity: Events and state', + 'React_interactivity:_Editing_filtering_conditional_rendering': 'React interactivity: Editing, filtering, conditional rendering', + 'Accessibility_in_React': 'Accessibility in React', + 'React_resources': 'React resources', + 'Ember': 'Ember', + 'Getting_started_with_Ember': 'Getting started with Ember', + 'Ember_app_structure_and_componentization': 'Ember app structure and componentization', + 'Ember_interactivity:_Events_classes_and_state': 'Ember interactivity: Events, classes and state', + 'Ember_Interactivity:_Footer_functionality_conditional_rendering': 'Ember Interactivity: Footer functionality, conditional rendering', + 'Routing_in_Ember': 'Routing in Ember', + 'Ember_resources_and_troubleshooting': 'Ember resources and troubleshooting', + 'Vue': 'Vue', + 'Getting_started_with_Vue': 'Getting started with Vue', + 'Creating_our_first_Vue_component': 'Creating our first Vue component', + 'Rendering_a_list_of_Vue_components': 'Rendering a list of Vue components', + 'Adding_a_new_todo_form:_Vue_events_methods_and_models': 'Adding a new todo form: Vue events, methods, and models', + 'Styling_Vue_components_with_CSS': 'Styling Vue components with CSS', + 'Using_Vue_computed_properties': 'Using Vue computed properties', + 'Vue_conditional_rendering:_editing_existing_todos': 'Vue conditional rendering: editing existing todos', + 'Focus_management_with_Vue_refs': 'Focus management with Vue refs', + 'Vue_resources': 'Vue resources', + 'Svelte': 'Svelte', + 'Getting_started_with_Svelte': 'Getting started with Svelte', + 'Starting_our_Svelte_Todo_list_app': 'Starting our Svelte Todo list app', + 'Dynamic_behavior_in_Svelte:_working_with_variables_and_props': 'Dynamic behavior in Svelte: working with variables and props', + 'Componentizing_our_Svelte_app': 'Componentizing our Svelte app', + 'Advanced_Svelte:_Reactivity_lifecycle_accessibility': 'Advanced Svelte: Reactivity, lifecycle, accessibility', + 'Working_with_Svelte_stores': 'Working with Svelte stores', + 'TypeScript_support_in_Svelte': 'TypeScript support in Svelte', + 'Deployment_and_next_steps': 'Deployment and next steps', 'Server-side_website_programming' : 'Программирование серверной части сайта', 'First_steps' : 'Первые шаги', 'First_steps_overview' : 'Первые шаги', @@ -1024,13 +1172,50 @@ var text = mdn.localStringMap({ 'Setting_up_your_own_test_automation_environment' : '设置您的自动测试环境', 'Git_and_GitHub' : 'Git and GitHub', 'Git_and_GitHub_overview' : 'Git and GitHub overview', - 'Understanding_client-side_web_development_tools' : 'Understanding client-side web development tools', + 'Client-side_web_development_tools' : 'Client-side web development tools', 'Client-side_web_development_tools_index' : 'Client-side web development tools index', 'Client-side_tooling_overview' : 'Client-side tooling overview', 'Command_line_crash_course' : 'Command line crash course', 'Package_management_basics' : 'Package management basics', 'Introducing_a_complete_toolchain' : 'Introducing a complete toolchain', 'Deploying_our_app' : 'Deploying our app', + 'Introduction_to_client-side_frameworks': 'Introduction to client-side frameworks', + 'Client-side_frameworks_overview': 'Client-side frameworks overview', + 'Framework_main_features': 'Framework main features', + 'React': 'React', + 'Getting_started_with_React': 'Getting started with React', + 'Beginning_our_React_todo_list': 'Beginning our React todo list', + 'Componentizing_our_React_app': 'Componentizing our React app', + 'React_interactivity:_Events_and_state': 'React interactivity: Events and state', + 'React_interactivity:_Editing_filtering_conditional_rendering': 'React interactivity: Editing, filtering, conditional rendering', + 'Accessibility_in_React': 'Accessibility in React', + 'React_resources': 'React resources', + 'Ember': 'Ember', + 'Getting_started_with_Ember': 'Getting started with Ember', + 'Ember_app_structure_and_componentization': 'Ember app structure and componentization', + 'Ember_interactivity:_Events_classes_and_state': 'Ember interactivity: Events, classes and state', + 'Ember_Interactivity:_Footer_functionality_conditional_rendering': 'Ember Interactivity: Footer functionality, conditional rendering', + 'Routing_in_Ember': 'Routing in Ember', + 'Ember_resources_and_troubleshooting': 'Ember resources and troubleshooting', + 'Vue': 'Vue', + 'Getting_started_with_Vue': 'Getting started with Vue', + 'Creating_our_first_Vue_component': 'Creating our first Vue component', + 'Rendering_a_list_of_Vue_components': 'Rendering a list of Vue components', + 'Adding_a_new_todo_form:_Vue_events_methods_and_models': 'Adding a new todo form: Vue events, methods, and models', + 'Styling_Vue_components_with_CSS': 'Styling Vue components with CSS', + 'Using_Vue_computed_properties': 'Using Vue computed properties', + 'Vue_conditional_rendering:_editing_existing_todos': 'Vue conditional rendering: editing existing todos', + 'Focus_management_with_Vue_refs': 'Focus management with Vue refs', + 'Vue_resources': 'Vue resources', + 'Svelte': 'Svelte', + 'Getting_started_with_Svelte': 'Getting started with Svelte', + 'Starting_our_Svelte_Todo_list_app': 'Starting our Svelte Todo list app', + 'Dynamic_behavior_in_Svelte:_working_with_variables_and_props': 'Dynamic behavior in Svelte: working with variables and props', + 'Componentizing_our_Svelte_app': 'Componentizing our Svelte app', + 'Advanced_Svelte:_Reactivity_lifecycle_accessibility': 'Advanced Svelte: Reactivity, lifecycle, accessibility', + 'Working_with_Svelte_stores': 'Working with Svelte stores', + 'TypeScript_support_in_Svelte': 'TypeScript support in Svelte', + 'Deployment_and_next_steps': 'Deployment and next steps', 'Server-side_website_programming' : '服务端网页编程', 'First_steps' : '第一步', 'First_steps_overview' : '第一步概述', @@ -1225,13 +1410,50 @@ var text = mdn.localStringMap({ 'Setting_up_your_own_test_automation_environment' : '設定自己的自動化測試環境', 'Git_and_GitHub' : 'Git and GitHub', 'Git_and_GitHub_overview' : 'Git and GitHub overview', - 'Understanding_client-side_web_development_tools' : 'Understanding client-side web development tools', + 'Client-side_web_development_tools' : 'Client-side web development tools', 'Client-side_web_development_tools_index' : 'Client-side web development tools index', 'Client-side_tooling_overview' : 'Client-side tooling overview', 'Command_line_crash_course' : 'Command line crash course', 'Package_management_basics' : 'Package management basics', 'Introducing_a_complete_toolchain' : 'Introducing a complete toolchain', 'Deploying_our_app' : 'Deploying our app', + 'Introduction_to_client-side_frameworks': 'Introduction to client-side frameworks', + 'Client-side_frameworks_overview': 'Client-side frameworks overview', + 'Framework_main_features': 'Framework main features', + 'React': 'React', + 'Getting_started_with_React': 'Getting started with React', + 'Beginning_our_React_todo_list': 'Beginning our React todo list', + 'Componentizing_our_React_app': 'Componentizing our React app', + 'React_interactivity:_Events_and_state': 'React interactivity: Events and state', + 'React_interactivity:_Editing_filtering_conditional_rendering': 'React interactivity: Editing, filtering, conditional rendering', + 'Accessibility_in_React': 'Accessibility in React', + 'React_resources': 'React resources', + 'Ember': 'Ember', + 'Getting_started_with_Ember': 'Getting started with Ember', + 'Ember_app_structure_and_componentization': 'Ember app structure and componentization', + 'Ember_interactivity:_Events_classes_and_state': 'Ember interactivity: Events, classes and state', + 'Ember_Interactivity:_Footer_functionality_conditional_rendering': 'Ember Interactivity: Footer functionality, conditional rendering', + 'Routing_in_Ember': 'Routing in Ember', + 'Ember_resources_and_troubleshooting': 'Ember resources and troubleshooting', + 'Vue': 'Vue', + 'Getting_started_with_Vue': 'Getting started with Vue', + 'Creating_our_first_Vue_component': 'Creating our first Vue component', + 'Rendering_a_list_of_Vue_components': 'Rendering a list of Vue components', + 'Adding_a_new_todo_form:_Vue_events_methods_and_models': 'Adding a new todo form: Vue events, methods, and models', + 'Styling_Vue_components_with_CSS': 'Styling Vue components with CSS', + 'Using_Vue_computed_properties': 'Using Vue computed properties', + 'Vue_conditional_rendering:_editing_existing_todos': 'Vue conditional rendering: editing existing todos', + 'Focus_management_with_Vue_refs': 'Focus management with Vue refs', + 'Vue_resources': 'Vue resources', + 'Svelte': 'Svelte', + 'Getting_started_with_Svelte': 'Getting started with Svelte', + 'Starting_our_Svelte_Todo_list_app': 'Starting our Svelte Todo list app', + 'Dynamic_behavior_in_Svelte:_working_with_variables_and_props': 'Dynamic behavior in Svelte: working with variables and props', + 'Componentizing_our_Svelte_app': 'Componentizing our Svelte app', + 'Advanced_Svelte:_Reactivity_lifecycle_accessibility': 'Advanced Svelte: Reactivity, lifecycle, accessibility', + 'Working_with_Svelte_stores': 'Working with Svelte stores', + 'TypeScript_support_in_Svelte': 'TypeScript support in Svelte', + 'Deployment_and_next_steps': 'Deployment and next steps', 'Server-side_website_programming' : '伺服端網站程式設計', 'First_steps' : '第一步', 'First_steps_overview' : '第一步概述', @@ -1457,13 +1679,50 @@ var text = mdn.localStringMap({ 'Setting_up_your_own_test_automation_environment' : 'Setting up your own test automation environment', 'Git_and_GitHub' : 'Git and GitHub', 'Git_and_GitHub_overview' : 'Git and GitHub overview', - 'Understanding_client-side_web_development_tools' : 'Understanding client-side web development tools', + 'Client-side_web_development_tools' : 'Client-side web development tools', 'Client-side_web_development_tools_index' : 'Client-side web development tools index', 'Client-side_tooling_overview' : 'Client-side tooling overview', 'Command_line_crash_course' : 'Command line crash course', 'Package_management_basics' : 'Package management basics', 'Introducing_a_complete_toolchain' : 'Introducing a complete toolchain', 'Deploying_our_app' : 'Deploying our app', + 'Introduction_to_client-side_frameworks': 'Introduction to client-side frameworks', + 'Client-side_frameworks_overview': 'Client-side frameworks overview', + 'Framework_main_features': 'Framework main features', + 'React': 'React', + 'Getting_started_with_React': 'Getting started with React', + 'Beginning_our_React_todo_list': 'Beginning our React todo list', + 'Componentizing_our_React_app': 'Componentizing our React app', + 'React_interactivity:_Events_and_state': 'React interactivity: Events and state', + 'React_interactivity:_Editing_filtering_conditional_rendering': 'React interactivity: Editing, filtering, conditional rendering', + 'Accessibility_in_React': 'Accessibility in React', + 'React_resources': 'React resources', + 'Ember': 'Ember', + 'Getting_started_with_Ember': 'Getting started with Ember', + 'Ember_app_structure_and_componentization': 'Ember app structure and componentization', + 'Ember_interactivity:_Events_classes_and_state': 'Ember interactivity: Events, classes and state', + 'Ember_Interactivity:_Footer_functionality_conditional_rendering': 'Ember Interactivity: Footer functionality, conditional rendering', + 'Routing_in_Ember': 'Routing in Ember', + 'Ember_resources_and_troubleshooting': 'Ember resources and troubleshooting', + 'Vue': 'Vue', + 'Getting_started_with_Vue': 'Getting started with Vue', + 'Creating_our_first_Vue_component': 'Creating our first Vue component', + 'Rendering_a_list_of_Vue_components': 'Rendering a list of Vue components', + 'Adding_a_new_todo_form:_Vue_events_methods_and_models': 'Adding a new todo form: Vue events, methods, and models', + 'Styling_Vue_components_with_CSS': 'Styling Vue components with CSS', + 'Using_Vue_computed_properties': 'Using Vue computed properties', + 'Vue_conditional_rendering:_editing_existing_todos': 'Vue conditional rendering: editing existing todos', + 'Focus_management_with_Vue_refs': 'Focus management with Vue refs', + 'Vue_resources': 'Vue resources', + 'Svelte': 'Svelte', + 'Getting_started_with_Svelte': 'Getting started with Svelte', + 'Starting_our_Svelte_Todo_list_app': 'Starting our Svelte Todo list app', + 'Dynamic_behavior_in_Svelte:_working_with_variables_and_props': 'Dynamic behavior in Svelte: working with variables and props', + 'Componentizing_our_Svelte_app': 'Componentizing our Svelte app', + 'Advanced_Svelte:_Reactivity_lifecycle_accessibility': 'Advanced Svelte: Reactivity, lifecycle, accessibility', + 'Working_with_Svelte_stores': 'Working with Svelte stores', + 'TypeScript_support_in_Svelte': 'TypeScript support in Svelte', + 'Deployment_and_next_steps': 'Deployment and next steps', 'Server-side_website_programming' : 'Server-side website programming', 'First_steps' : 'First steps', 'First_steps_overview' : 'First steps overview', @@ -1772,18 +2031,82 @@ var text = mdn.localStringMap({
    8. <%=text['Tools_and_testing']%>
    9. -
      > - <%=text['Cross_browser_testing']%> +
      > + <%=text['Client-side_web_development_tools']%>
        -
      1. <%=text['Cross_browser_testing_overview']%>
      2. -
      3. <%=text['Introduction_to_cross_browser_testing']%>
      4. -
      5. <%=text['Strategies_for_carrying_out_testing']%>
      6. -
      7. <%=text['Handling_common_HTML_and_CSS_problems']%>
      8. -
      9. <%=text['Handling_common_JavaScript_problems']%>
      10. -
      11. <%=text['Handling_common_accessibility_problems']%>
      12. -
      13. <%=text['Implementing_feature_detection']%>
      14. -
      15. <%=text['Introduction_to_automated_testing']%>
      16. -
      17. <%=text['Setting_up_your_own_test_automation_environment']%>
      18. +
      19. <%=text['Client-side_web_development_tools_index']%>
      20. +
      21. <%=text['Client-side_tooling_overview']%>
      22. +
      23. <%=text['Command_line_crash_course']%>
      24. +
      25. <%=text['Package_management_basics']%>
      26. +
      27. <%=text['Introducing_a_complete_toolchain']%>
      28. +
      29. <%=text['Deploying_our_app']%>
      30. +
      +
      +
    10. +
    11. +
      > + <%=text['Introduction_to_client-side_frameworks']%> +
        +
      1. <%=text['Client-side_frameworks_overview']%>
      2. +
      3. <%=text['Framework_main_features']%>
      4. +
      +
      +
    12. +
    13. +
      > + <%=text['React']%> +
        +
      1. <%=text['Getting_started_with_React']%>
      2. +
      3. <%=text['Beginning_our_React_todo_list']%>
      4. +
      5. <%=text['Componentizing_our_React_app']%>
      6. +
      7. <%=text['React_interactivity:_Events_and_state']%>
      8. +
      9. <%=text['React_interactivity:_Editing_filtering_conditional_rendering']%>
      10. +
      11. <%=text['Accessibility_in_React']%>
      12. +
      13. <%=text['React_resources']%>
      14. +
      +
      +
    14. +
    15. +
      > + <%=text['Ember']%> +
        +
      1. <%=text['Getting_started_with_Ember']%>
      2. +
      3. <%=text['Ember_app_structure_and_componentization']%>
      4. +
      5. <%=text['Ember_interactivity:_Events_classes_and_state']%>
      6. +
      7. <%=text['Ember_Interactivity:_Footer_functionality_conditional_rendering']%>
      8. +
      9. <%=text['Routing_in_Ember']%>
      10. +
      11. <%=text['Ember_resources_and_troubleshooting']%>
      12. +
      +
      +
    16. +
    17. +
      > + <%=text['Vue']%> +
        +
      1. <%=text['Getting_started_with_Vue']%>
      2. +
      3. <%=text['Creating_our_first_Vue_component']%>
      4. +
      5. <%=text['Rendering_a_list_of_Vue_components']%>
      6. +
      7. <%=text['Adding_a_new_todo_form:_Vue_events_methods_and_models']%>
      8. +
      9. <%=text['Styling_Vue_components_with_CSS']%>
      10. +
      11. <%=text['Using_Vue_computed_properties']%>
      12. +
      13. <%=text['Vue_conditional_rendering:_editing_existing_todos']%>
      14. +
      15. <%=text['Focus_management_with_Vue_refs']%>
      16. +
      17. <%=text['Vue_resources']%>
      18. +
      +
      +
    18. +
    19. +
      > + <%=text['Svelte']%> +
        +
      1. <%=text['Getting_started_with_Svelte']%>
      2. +
      3. <%=text['Starting_our_Svelte_Todo_list_app']%>
      4. +
      5. <%=text['Dynamic_behavior_in_Svelte:_working_with_variables_and_props']%>
      6. +
      7. <%=text['Componentizing_our_Svelte_app']%>
      8. +
      9. <%=text['Advanced_Svelte:_Reactivity_lifecycle_accessibility']%>
      10. +
      11. <%=text['Working_with_Svelte_stores']%>
      12. +
      13. <%=text['TypeScript_support_in_Svelte']%>
      14. +
      15. <%=text['Deployment_and_next_steps']%>
    20. @@ -1801,15 +2124,18 @@ var text = mdn.localStringMap({
  • -
    > - <%=text['Understanding_client-side_web_development_tools']%> +
    > + <%=text['Cross_browser_testing']%>
      -
    1. <%=text['Client-side_web_development_tools_index']%>
    2. -
    3. <%=text['Client-side_tooling_overview']%>
    4. -
    5. <%=text['Command_line_crash_course']%>
    6. -
    7. <%=text['Package_management_basics']%>
    8. -
    9. <%=text['Introducing_a_complete_toolchain']%>
    10. -
    11. <%=text['Deploying_our_app']%>
    12. +
    13. <%=text['Cross_browser_testing_overview']%>
    14. +
    15. <%=text['Introduction_to_cross_browser_testing']%>
    16. +
    17. <%=text['Strategies_for_carrying_out_testing']%>
    18. +
    19. <%=text['Handling_common_HTML_and_CSS_problems']%>
    20. +
    21. <%=text['Handling_common_JavaScript_problems']%>
    22. +
    23. <%=text['Handling_common_accessibility_problems']%>
    24. +
    25. <%=text['Implementing_feature_detection']%>
    26. +
    27. <%=text['Introduction_to_automated_testing']%>
    28. +
    29. <%=text['Setting_up_your_own_test_automation_environment']%>
  • diff --git a/kumascript/macros/ToolsSidebar.ejs b/kumascript/macros/ToolsSidebar.ejs index 272e9983609d..af922915769a 100644 --- a/kumascript/macros/ToolsSidebar.ejs +++ b/kumascript/macros/ToolsSidebar.ejs @@ -12,6 +12,7 @@ const text = mdn.localStringMap({ "JavaScript_Debugger": "JavaScript Debugger", "Network_Monitor": "Network Monitor", "Performance": "Performance", + "Application": "Application", "Responsive_Design_Mode": "Responsive Design Mode", "Accessibility_Inspector": "Accessibility Inspector", "More_Tools": "More Tools", @@ -43,6 +44,7 @@ const text = mdn.localStringMap({ "JavaScript_Debugger": "ডিবাগার", "Network_Monitor": "নেটওয়ার্ক মনিটর", "Performance": "Performance", + "Application": "Application", "Responsive_Design_Mode": "রেসপন্সিভ ডিজাইন ভিউ", "Accessibility_Inspector": "Accessibility Inspector", "More_Tools": "More Tools", @@ -76,6 +78,7 @@ const text = mdn.localStringMap({ "JavaScript_Debugger": "Depurador", "Network_Monitor": "Monitor de Xarxa", "Performance": "Rendiment", + "Application": "Application", "Responsive_Design_Mode": "Visualització Sensible al Disseny", "Accessibility_Inspector": "Accessibility Inspector", "More_Tools": "More Tools", @@ -107,6 +110,7 @@ const text = mdn.localStringMap({ "JavaScript_Debugger": "Debugger", "Network_Monitor": "Netzwerkanalyse", "Performance": "Performance", + "Application": "Application", "Responsive_Design_Mode": "Reaktives Design", "Accessibility_Inspector": "Accessibility Inspector", "More_Tools": "More Tools", @@ -138,6 +142,7 @@ const text = mdn.localStringMap({ "JavaScript_Debugger": "Débogueur JavaScript", "Network_Monitor": "Moniteur réseau", "Performance": "Performances", + "Application": "Application", "Responsive_Design_Mode": "Vue adaptative", "Accessibility_Inspector": "Panneau accessibilité", "More_Tools": "Plus d'outils", @@ -169,6 +174,7 @@ const text = mdn.localStringMap({ "JavaScript_Debugger": "Pen-debug JavaScript", "Network_Monitor": "Monitor Jaringan", "Performance": "Performa", + "Application": "Application", "Responsive_Design_Mode": "Mode Desain Responsif", "Accessibility_Inspector": "Accessibility Inspector", "More_Tools": "Alat Lainnya", @@ -200,6 +206,7 @@ const text = mdn.localStringMap({ "JavaScript_Debugger": "JavaScript デバッガー", "Network_Monitor": "ネットワークモニター", "Performance": "パフォーマンス", + "Application": "Application", "Responsive_Design_Mode": "レスポンシブデザインモード", "Accessibility_Inspector": "Accessibility Inspector", "More_Tools": "その他のツール", @@ -231,6 +238,7 @@ const text = mdn.localStringMap({ "JavaScript_Debugger": "디버거", "Network_Monitor": "네트워크 모니터", "Performance": "성능", + "Application": "Application", "Responsive_Design_Mode": "반응형 디자인 화면", "Accessibility_Inspector": "Accessibility Inspector", "More_Tools": "More Tools", @@ -262,6 +270,7 @@ const text = mdn.localStringMap({ "JavaScript_Debugger": "JavaScript Debugger", "Network_Monitor": "Network Monitor", "Performance": "Performance", + "Application": "Application", "Responsive_Design_Mode": "Responsive Design Mode", "Accessibility_Inspector": "Accessibility Inspector", "More_Tools": "More Tools", @@ -293,6 +302,7 @@ const text = mdn.localStringMap({ "JavaScript_Debugger": "JavaScript Debugger", "Network_Monitor": "Network Monitor", "Performance": "Performance", + "Application": "Application", "Responsive_Design_Mode": "Responsive Design Mode", "Accessibility_Inspector": "Accessibility Inspector", "More_Tools": "More Tools", @@ -325,6 +335,7 @@ const text = mdn.localStringMap({ "JavaScript_Debugger": "Depanator JavaScript", "Network_Monitor": "Monitorizare rețea", "Performance": "Performanță", + "Application": "Application", "Responsive_Design_Mode": "Vedere design receptiv", "Accessibility_Inspector": "Accessibility Inspector", "More_Tools": "More Tools", @@ -356,6 +367,7 @@ const text = mdn.localStringMap({ "JavaScript_Debugger": "Отладчик JavaScript", "Network_Monitor": "Монитор сетевой активности", "Performance": "Performance", + "Application": "Application", "Responsive_Design_Mode": "Режим адаптивного дизайна", "Accessibility_Inspector": "Accessibility Inspector", "More_Tools": "Больше инструментов", @@ -387,6 +399,7 @@ const text = mdn.localStringMap({ "JavaScript_Debugger": "Avlusare", "Network_Monitor": "Nätverksövervakare", "Performance": "Performance", + "Application": "Application", "Responsive_Design_Mode": "Responsive Design Mode", "Accessibility_Inspector": "Accessibility Inspector", "More_Tools": "More Tools", @@ -418,6 +431,7 @@ const text = mdn.localStringMap({ "JavaScript_Debugger": "JavaScript 调试器", "Network_Monitor": "网络监视器", "Performance": "性能", + "Application": "Application", "Responsive_Design_Mode": "响应式设计模式", "Accessibility_Inspector": "无障碍环境", "More_Tools": "更多工具", @@ -454,6 +468,7 @@ const text = mdn.localStringMap({
  • <%=text['JavaScript_Debugger']%>
  • <%=text['Network_Monitor']%>
  • <%=text['Performance']%>
  • +
  • <%=text['Application']%>
  • <%=text['Responsive_Design_Mode']%>
  • <%=text['Accessibility_Inspector']%>
  • @@ -497,4 +512,4 @@ const text = mdn.localStringMap({
  • <%=text['Tips']%>
  • <%=text['Release_notes']%>
  • - \ No newline at end of file + diff --git a/kumascript/tests/macros/addonsidebar.test.js b/kumascript/tests/macros/addonsidebar.test.js index afb50ad9417f..a2c08208c392 100644 --- a/kumascript/tests/macros/addonsidebar.test.js +++ b/kumascript/tests/macros/addonsidebar.test.js @@ -18,13 +18,10 @@ const SUMMARIES = { "Concepts", "User interface", "How to", - "Porting", - "Firefox workflow", + "Firefox differentiators", "JavaScript APIs", "Manifest keys", - "Browser themes", - "Publishing add-ons", - "Distributing add-ons", + "Extension Workshop", "Channels", ], fr: [ @@ -32,13 +29,10 @@ const SUMMARIES = { "Concepts", "Interface Utilisateur", "Mode d'emploi", - "Portage", - "Déroulement avec Firefox", + "Firefox differentiators", "Les API JavaScript", "Clés de manifeste", - "Thème de navigateur", - "Publication de votre extension", - "Distribuer votre module", + "Extension Workshop", "Canaux de discussions", ], ja: [ @@ -46,13 +40,10 @@ const SUMMARIES = { "概念", "ユーザーインターフェイス", "逆引きリファレンス", - "移行", - "Firefox でのワークフロー", + "Firefox differentiators", "JavaScript API 群", "Manifest keys", - "ブラウザのテーマ", - "アドオンを公開する", - "アドオンの配布", + "Extension Workshop", "チャンネル", ], "zh-CN": [ @@ -60,13 +51,10 @@ const SUMMARIES = { "概念", "用户界面", "怎么做", - "移植", - "Firefox工作流程", + "Firefox differentiators", "JavaScript APIs", "Manifest keys", - "浏览器主题", - "发布附加程序", - "分发附加程序", + "Extension Workshop", "渠道", ], };