diff --git a/CHANGELOG.md b/CHANGELOG.md index 6705535f0088c033b0f354b0d8be5a199bd3bcd2..1b650e7de95e17c605e6504c13b044ec3aaf9471 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,26 @@ You should also include the user name that made the change. --> + +## 13.6.0 (2023/02/11) + +### Improvements +- MkPageHeaderã‚’ã”ã£ãり変ãˆãŸ + * モãƒã‚¤ãƒ«ã§ã¯ãƒ˜ãƒƒãƒ€ãƒ¼ã¯ä¸Šä¸‹ã«åˆ†å‰²ã•ã‚Œã€ä¸‹æ®µã«ã‚¿ãƒ–ãŒè¡¨ç¤ºã•ã‚Œã‚‹ã‚ˆã†ã« + * iconOnlyã®ã‚¿ãƒ–é …ç›®ãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªå ´åˆã«ã¯ã‚¿ãƒ–ã®ã‚¿ã‚¤ãƒˆãƒ«ã‚’表示ã™ã‚‹ã‚ˆã†ã« + * メインタイムラインã§ã¯ã‚¿ã‚¤ãƒˆãƒ«ã‚’表示ã—ãªã„ + * メインタイムラインã‹ã¤ãƒ¢ãƒã‚¤ãƒ«ã§è¡¨ç¤ºã•ã‚Œã‚‹å·¦ä¸Šã®ã‚¢ãƒã‚¿ãƒ¼ã‚’é¸æŠžã™ã‚‹ã¨ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãƒ¡ãƒ‹ãƒ¥ãƒ¼ãŒé–‹ãよã†ã« +- ユーザーページã®ãƒŽãƒ¼ãƒˆä¸€è¦§ã‚’タブã¨ã—ã¦åˆ†é›¢ +- コンディショナルãƒãƒ¼ãƒ«ã‚‚ãƒãƒƒã‚¸ã¨ã—ã¦è¡¨ç¤ºå¯èƒ½ã« +- enhance(client): ãƒãƒ¼ãƒ«ã‚’より簡å˜ã«ä»˜ä¸Žã§ãるよã†ã« +- enhance(client): 一度見ãŸãƒŽãƒ¼ãƒˆã®Renoteã¯çœç•¥ã—ã¦è¡¨ç¤ºã™ã‚‹ã‚ˆã†ã« +- enhance(client): 迷惑ã«ãªã‚‹å¯èƒ½æ€§ã®ã‚る投稿を行ã†å‰ã«è¦å‘Šã‚’表示 +- リアクションã®æ•°ãŒå¤šã„å ´åˆã®è¡¨ç¤ºã‚’改善 +- 一部ã®MFM構文をopt-outã« + +### Bugfixes +- Client: ユーザーページã§ã‚¿ãƒ–ãŒã»ã¨ã‚“ã©è¦‹ã‚Œãªã„ã“ã¨ãŒãªã„よã†ã« + ## 13.5.6 (2023/02/10) ### Improvements diff --git a/locales/ar-SA.yml b/locales/ar-SA.yml index 5542e09b19f47381862e1060b7a62403d7bd32f6..467aed1294a9458953293dbf52ad0c5aaf10021b 100644 --- a/locales/ar-SA.yml +++ b/locales/ar-SA.yml @@ -886,56 +886,6 @@ _nsfw: respect: "اخ٠الوسائط ذات المØتوى الØساس" ignore: "اعرض الوسائط ذات المØتوى الØساس" force: "اخ٠كل الوسائط" -_mfm: - cheatSheet: "مرجع ملخص عن MFM" - intro: "MFM هي لغة ترميزية مخصصة يمكن استخدامها ÙÙŠ عدّة أماكن ÙÙŠ ميسكي. يمكنك مراجعة كل تعابيرها مع كيÙية استخدامها هنا." - mention: "أشر الى" - mentionDescription: "يمكنك الإشارة لمستخدم معيّن من خلال كتابة @ متبوعة باسم مستخدم." - hashtag: "الوسوم" - hashtagDescription: "يمكنك تعيين وسم من خلال كتابة # متبوعة بالنص المطلوب." - url: "الرابط" - urlDescription: "يمكن عرض الروابط" - link: "رابط" - bold: "عريض" - boldDescription: "جعل الØرو٠أثخن لإبرازها." - small: "صغير" - smallDescription: "يعرض المØتوى صغيرًا ورÙيعًا." - center: "وسط" - centerDescription: "يمركز المØتوى ÙÙŠ الوَسَط." - quote: "اقتبس" - quoteDescription: "يعرض المØتوى كاقتباس" - emoji: "إيموجي مخصص" - emojiDescription: "Ø¥Øاطة اسم الإيموجي بنقطتي تÙسير سيستبدله بصورة الإيموجي." - search: "البØØ«" - searchDescription: "يعرض نصًا ÙÙŠ صندوق البØØ«" - flip: "اقلب" - flipDescription: "يقلب المØتوى عموديًا أو Ø£Ùقيًا" - jelly: "تأثير (هلام)" - jellyDescription: "ÙŠÙ…Ù†Ø Ø§Ù„Ù…Øتوى Øركة هلامية." - tada: "تأثير (تادا)" - tadaDescription: "ÙŠÙ…Ù†Ø Ù„Ù„Ù…Øتوى تأثير تادا" - jump: "تأثير (Ù‚Ùز)" - jumpDescription: "ÙŠÙ…Ù†Ø Ù„Ù„Ù…Øتوى Øركة Ù‚Ùز." - bounce: "تأثير (ارتداد)" - bounceDescription: "ÙŠÙ…Ù†Ø Ù„Ù„Ù…Øتوى Øركة ارتدادية" - shake: "تأثير (اهتزاز)" - shakeDescription: "ÙŠÙ…Ù†Ø Ø§Ù„Ù…Øتوى Øركة اهتزازية." - spin: "تأثير (دوران)" - spinDescription: "ÙŠÙ…Ù†Ø Ø§Ù„Ù…Øتوى Øركة دورانية." - x2: "كبير" - x2Description: "ÙŠÙكبر المØتوى" - x3: "كبير جداً" - x3Description: "ÙŠÙضخم المØتوى" - x4: "هائل" - x4Description: "ÙŠÙضخم المØتوى أكثر مما سبق." - blur: "طمس" - blurDescription: "يطمس المØتوى، لكن بالتمرير Ùوقه سيظهر بوضوØ." - font: "الخط" - fontDescription: "الخط المستخدم لعرض المØتوى." - rainbow: "قوس قزØ" - rainbowDescription: "اجعل المØتوى يظهر بألوان الطيÙ" - rotate: "تدوير" - rotateDescription: "ÙŠÙدير المØتوى بزاوية معيّنة." _instanceTicker: none: "لا تظهره بتاتًا" remote: "أظهر للمستخدمين البÙعاد" diff --git a/locales/bn-BD.yml b/locales/bn-BD.yml index 6f5d67639506224648ac9b0516126313444a21cb..92e3785936ff057f15966c7e6074dec42452e338 100644 --- a/locales/bn-BD.yml +++ b/locales/bn-BD.yml @@ -455,7 +455,6 @@ youHaveNoGroups: "আপনার কোন গà§à¦°à§à¦ª নেই " joinOrCreateGroup: "à¦à¦•à¦Ÿà¦¿ বিদà§à¦¯à¦®à¦¾à¦¨ গà§à¦°à§à¦ªà§‡à¦° আমনà§à¦¤à§à¦°à¦£ পান বা à¦à¦•à¦Ÿà¦¿ নতà§à¦¨ গà§à¦°à§à¦ª তৈরি করà§à¦¨à§·" noHistory: "কোনো ইতিহাস নেই" signinHistory: "পà§à¦°à¦¬à§‡à¦¶ করার ইতিহাস" -disableAnimatedMfm: "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦Ÿà§‡à¦¡ MFM অকà§à¦·à¦® করà§à¦¨" doing: "পà§à¦°à¦•à§à¦°à¦¿à§Ÿà¦¾ করছে..." category: "বিà¦à¦¾à¦—" tags: "টâ€à§à¦¯à¦¾à¦—সমূহ" @@ -923,70 +922,6 @@ _nsfw: respect: "সà§à¦ªà¦°à§à¦¶à¦•à¦¾à¦¤à¦° মিডিয়া লà§à¦•à¦¾à¦¨" ignore: "সà§à¦ªà¦°à§à¦¶à¦•à¦¾à¦¤à¦° মিডিয়া লà§à¦•à¦¾à¦¬à§‡à¦¨ না" force: "সকল মিডিয়া লà§à¦•à¦¾à¦¨" -_mfm: - cheatSheet: "MFM চিটশিট" - intro: "MFM à¦à¦•à¦Ÿà¦¿ মারà§à¦•à¦†à¦ª à¦à¦¾à¦·à¦¾ যা Misskey-à¦à¦° মধà§à¦¯à§‡ বিà¦à¦¿à¦¨à§à¦¨ জায়গায় বà§à¦¯à¦¬à¦¹à¦¾à¦° করা যেতে পারে। à¦à¦–ানে আপনি MFM-à¦à¦° সিনটà§à¦¯à¦¾à¦•à§à¦¸à¦—à§à¦²à¦¿à¦° à¦à¦•à¦Ÿà¦¿ তালিকা দেখতে পারবেন।" - dummy: "মিসকি ফেডিà¦à¦¾à¦°à§à¦¸à§‡à¦° বিশà§à¦¬à¦•à§‡ পà§à¦°à¦¸à¦¾à¦°à¦¿à¦¤ করে" - mention: "উলà§à¦²à§‡à¦–" - mentionDescription: "@ চিহà§à¦¨ + বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° নাম à¦à¦•à¦Ÿà¦¿ নিরà§à¦¦à¦¿à¦·à§à¦Ÿ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦•à§‡ নিরà§à¦¦à§‡à¦¶ করতে বà§à¦¯à¦¬à¦¹à¦¾à¦° করা যায়।" - hashtag: "হà§à¦¯à¦¾à¦¶à¦Ÿà§à¦¯à¦¾à¦—" - hashtagDescription: "আপনি à¦à¦•à¦Ÿà¦¿ # চিহà§à¦¨ + টà§à¦¯à¦¾à¦— সহ à¦à¦•à¦Ÿà¦¿ হà§à¦¯à¦¾à¦¶à¦Ÿà§à¦¯à¦¾à¦— নিরà§à¦¦à§‡à¦¶ করতে পারেন।" - url: "URL" - urlDescription: "URL দেখানো সমà§à¦à¦¬à¥¤" - link: "লিংক" - linkDescription: "আপনি পাঠà§à¦¯à§‡à¦° à¦à¦•à¦Ÿà¦¿ নিরà§à¦¦à¦¿à¦·à§à¦Ÿ অংশকে URL হিসাবে দেখাতে পারেন৷" - bold: "গাà§" - boldDescription: "অকà§à¦·à¦°à¦—à§à¦²à¦¿à¦•à§‡ মোটাকরে পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করা হবে।" - small: "ছোট" - smallDescription: "লেখা ছোট à¦à¦¬à¦‚ পাতলা করে দেখানো হবে।" - center: "সেনà§à¦Ÿà¦¾à¦°" - centerDescription: "লেখা মাঠবরাবর দেখানো হবে" - inlineCode: "কোড (ইনলাইন)" - inlineCodeDescription: " পà§à¦°à§‹à¦—à§à¦°à¦¾à¦®à§‡à¦° কোডের জনà§à¦¯ ইনলাইন সিনটà§à¦¯à¦¾à¦•à§à¦¸ হাইলাইটিং করা হবে" - blockCode: "কোড (বà§à¦²à¦•)" - blockCodeDescription: "মালà§à¦Ÿà¦¿-লাইন পà§à¦°à§‹à¦—à§à¦°à¦¾à¦®à§‡à¦° কোডের জনà§à¦¯ সিনটà§à¦¯à¦¾à¦•à§à¦¸ হাইলাইট করে।" - inlineMath: "গাণিতিক সূতà§à¦° (ইনলাইন)" - inlineMathDescription: "গাণিতিক সূতà§à¦° পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করà§à¦¨ (KaTeX) ইনলাইন।" - blockMath: "গাণিতিক সূতà§à¦° (বà§à¦²à¦•)" - blockMathDescription: "à¦à¦•à¦Ÿà¦¿ বà§à¦²à¦•à§‡ à¦à¦•à¦¾à¦§à¦¿à¦• লাইনের গাণিতিক সূতà§à¦° পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করà§à¦¨ (KaTeX)।" - quote: "উদà§à¦§à§ƒà¦¤à¦¿" - quoteDescription: "বিষয়বসà§à¦¤à§à¦•à§‡ à¦à¦•à¦Ÿà¦¿ উদà§à¦§à§ƒà¦¤à¦¿ হিসাবে দেখানো হবে।" - emoji: "সà§à¦¬à¦¨à¦¿à¦°à§à¦§à¦¾à¦°à¦¿à¦¤ ইমোজিগà§à¦²à¦¿" - emojiDescription: "আপনি à¦à¦•à¦Ÿà¦¿ কাসà§à¦Ÿà¦® ইমোজির নাম কোলনে আবদà§à¦§ করে কাসà§à¦Ÿà¦® ইমোজিটি দেখাতে পারেন৷" - search: "খà§à¦à¦œà§à¦¨" - searchDescription: "পূরà§à¦¬-টাইপ করা পাঠà§à¦¯ সহ à¦à¦•à¦Ÿà¦¿ অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ বাকà§à¦¸ পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করে।" - flip: "উলà§à¦Ÿà¦¾à¦¨" - flipDescription: "বিষয়বসà§à¦¤à§ উপরে/নীচে বা বাম/ডানে উলà§à¦Ÿà¦¾à¦¨à¥¤" - jelly: "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (জেলি)" - jellyDescription: "জেলির মত অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ দেখায়।" - tada: "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (টাডা)" - tadaDescription: "\"টাডা!\" à¦à¦° মত অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ দেখায়।" - jump: "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (লাফ)" - jumpDescription: "বিষয়বসà§à¦¤à§à¦¤à§‡ লাফ মারার মত অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ দেখায়।" - bounce: "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (তিড়িং বিড়িং)" - bounceDescription: "তিড়িং বিড়িং করার মত অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ দেখায়।" - shake: "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (à¦à¦¾à¦à¦•à¦¿)" - shakeDescription: "à¦à¦¾à¦à¦•à¦¿à¦° মত অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ দেখায়।" - twitch: "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (মোচড়ানো)" - twitchDescription: "মোচড়ানোর মত অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ দেখায়।" - spin: "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ (ঘà§à¦°à¦¾)" - spinDescription: "ঘà§à¦°à¦¾à¦° মত অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ দেখায়।" - x2: "বড়" - x2Description: "বিষয়বসà§à¦¤à§ বড় করে দেখায়।" - x3: "অনেক বড়" - x3Description: "বিষয়বসà§à¦¤à§ আরও বড় করে দেখায়।" - x4: "অসà§à¦¬à¦¾à¦à¦¾à¦¬à¦¿à¦• বড়" - x4Description: "বিষয়বসà§à¦¤à§à¦•à§‡ আগের থেকেও আরও বড় করে দেখায়।" - blur: "বà§à¦²à¦¾à¦°" - blurDescription: "বিষয়বসà§à¦¤à§à¦•à§‡ বà§à¦²à¦¾à¦° করতে পারেন। আপনি à¦à¦° উপর মাউস কারà§à¦¸à¦¾à¦° রাখলে, à¦à¦Ÿà¦¿ পরিষà§à¦•à¦¾à¦°à¦à¦¾à¦¬à§‡ দেখতে পাবেন।" - font: "ফনà§à¦Ÿ" - fontDescription: "বিষয়বসà§à¦¤à§à¦•à§‡ কোন ফনà§à¦Ÿà§‡ দেখানো হবে তা নিরà§à¦§à¦¾à¦°à¦£ করে।" - rainbow: "রেইনবো" - rainbowDescription: "বিষয়বসà§à¦¤à§à¦•à§‡ রংধনà§à¦° রং গà§à¦²à¦¿à¦¤à§‡ পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করে।" - sparkle: "চিক চিক" - sparkleDescription: "বিষয়বসà§à¦¤à§à¦•à§‡ à¦à¦•à¦Ÿà¦¿ চিকচিকে কণা পà§à¦°à¦à¦¾à¦¬ দেয়।" - rotate: "ঘà§à¦°à¦¾à¦¨" - rotateDescription: "বিষয়বসà§à¦¤à§à¦•à§‡ à¦à¦•à¦Ÿà¦¿ নিরà§à¦¦à¦¿à¦·à§à¦Ÿ কোনে ঘà§à¦°à¦¾à§Ÿà¥¤" _instanceTicker: none: "দেখাবেন না" remote: "রিমোট বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦¦à§‡à¦° জনà§à¦¯ দেখান" diff --git a/locales/ca-ES.yml b/locales/ca-ES.yml index 8bc5bf03662cb7232dff993fef6ce0ef7b2dd1db..d89e22631c598f43cbc9e46079b0186c6b9105fb 100644 --- a/locales/ca-ES.yml +++ b/locales/ca-ES.yml @@ -375,11 +375,6 @@ file: "Fitxers" _email: _follow: title: "t'ha seguit" -_mfm: - mention: "Menció" - quote: "Citar" - emoji: "Emojis personalitzats" - search: "Cercar" _instanceMute: instanceMuteDescription: "Silencia tots els impulsos dels servidors seleccionats, també els usuaris que responen a altres d'un servidor silenciat." _theme: diff --git a/locales/cs-CZ.yml b/locales/cs-CZ.yml index 926c173f8c9a5d7b13b3ab4a014e7b78b4c34987..eaafd5ee107f479a5034d70c1223ab591d258e2d 100644 --- a/locales/cs-CZ.yml +++ b/locales/cs-CZ.yml @@ -642,19 +642,6 @@ _registry: _aboutMisskey: allContributors: "VÅ¡ichni pÅ™ispÄ›vatelé" source: "Zdrojový kód" -_mfm: - mention: "ZmÃnÄ›nÃ" - hashtag: "Hashtag" - link: "Odkaz" - bold: "TuÄnÄ›" - quote: "Citovat" - emoji: "Vlastnà emoji" - search: "VyhledávánÃ" - flip: "OtoÄit" - tada: "Animace (tadá)" - blur: "RozmazánÃ" - font: "Font" - rainbow: "Duha" _channel: featured: "Trendy" _menuDisplay: diff --git a/locales/de-DE.yml b/locales/de-DE.yml index c1b272b26db577d5565e20e6a4c64a0770adf91b..fb80b92850cd7ac95f4a85745a70f512ab0d5c87 100644 --- a/locales/de-DE.yml +++ b/locales/de-DE.yml @@ -467,7 +467,6 @@ youHaveNoGroups: "Keine Gruppen vorhanden" joinOrCreateGroup: "Lass dich zu einer Gruppe einladen oder erstelle deine eigene." noHistory: "Kein Verlauf gefunden" signinHistory: "Anmeldungsverlauf" -disableAnimatedMfm: "MFM, die Animationen enthalten, deaktivieren" doing: "In Bearbeitung …" category: "Kategorie" tags: "Schlagwörter" @@ -1330,72 +1329,6 @@ _nsfw: respect: "Als NSFW markierte Bilder verbergen" ignore: "Als NSFW markierte Bilder nicht verbergen" force: "Alle Medien verbergen" -_mfm: - cheatSheet: "MFM Spickzettel" - intro: "MFM ist eine Misskey-exklusive Markup-Sprache, die in Misskey an vielen Stellen verwendet werden kann. Hier kannst du eine Liste von verfügbarer MFM-Syntax einsehen." - dummy: "Misskey erweitert die Welt des Fediverse" - mention: "Erwähnung" - mentionDescription: "Mit At-Zeichen und Benutzername kann ein individueller Nutzer angegeben werden." - hashtag: "Hashtag" - hashtagDescription: "Mit einer Raute und Text kann ein Hashtag angegeben werden." - url: "URL" - urlDescription: "Zeigt URLs an." - link: "Link" - linkDescription: "Zeigt spezifische Textabschnitte als URL an." - bold: "Fett" - boldDescription: "Zeichen zur Betonung dicker erscheinen lassen." - small: "Klein" - smallDescription: "Inhalt klein und dünn erscheinen lassen." - center: "Zentrieren" - centerDescription: "Inhalt zentriert anzeigen." - inlineCode: "Code (Eingebettet)" - inlineCodeDescription: "Syntax-Hervorhebung für (Programm-)Code eingebettet anzeigen." - blockCode: "Code (Block)" - blockCodeDescription: "Syntax-Hervorhebung für mehrzeiligen (Programm-)Code als Block anzeigen." - inlineMath: "Mathe (Eingebettet)" - inlineMathDescription: "Mathematische Formeln (KaTeX) eingebettet anzeigen." - blockMath: "Mathe (Block)" - blockMathDescription: "Mehrzeilige mathematische Formeln (KaTeX) als Block einbetten." - quote: "Zitationen" - quoteDescription: "Inhalt als Zitat anzeigen." - emoji: "Benutzerdefinierte Emojis" - emojiDescription: "Durch das Umschließen von Emoji-Namen durch Doppelpunkte können benutzerdefinierte Emojis angezeigt werden." - search: "Suche" - searchDescription: "Eine vorgefertige Suchanfragebox anzeigen." - flip: "Spiegelung" - flipDescription: "Inhalt horizontal oder vertikal gespiegelt anzeigen." - jelly: "Animation (Dehnen)" - jellyDescription: "Verleiht Inhalt eine sich dehnende Animation." - tada: "Animation (Tada)" - tadaDescription: "Verleiht Inhalt eine Animation mit \"Tada!\"-Gefühl" - jump: "Animation (Sprung)" - jumpDescription: "Verleiht Inhalt eine springende Animation." - bounce: "Animation (Federn)" - bounceDescription: "Verleiht Inhalt eine federnde Animation." - shake: "Animation (Zittern)" - shakeDescription: "Verleiht Inhalt eine zitternde Animation." - twitch: "Animation (Zucken)" - twitchDescription: "Verleiht Inhalt eine sehr stark zuckende Animation." - spin: "Animation (Rotieren)" - spinDescription: "Verleiht Inhalt eine rotierende Animation." - x2: "Groß" - x2Description: "Inhalte größer anzeigen." - x3: "Sehr groß" - x3Description: "Inhalte noch größer anzeigen." - x4: "Unglaublich groß" - x4Description: "Lässt Inhalte noch größer als größer als groß angezeigt werden." - blur: "Weichzeichnen" - blurDescription: "Inhalte durch Weihzeichnung verschwimmen lassen. Durch das Bewegen des Mauszeigers über den Inhalt wird er klar angezeigt." - font: "Schriftart" - fontDescription: "Setzt die Schriftart des Inhaltes fest." - rainbow: "Regenbogen" - rainbowDescription: "Lässt den Inhalt in Regenbogenfarben erscheinen." - sparkle: "Glitzer" - sparkleDescription: "Verleiht Inhalt einen glitzernden Partikeleffekt." - rotate: "Drehen" - rotateDescription: "Dreht den Inhalt um einen angegebenen Winkel." - plain: "Schlicht" - plainDescription: "Deaktiviert jegliche MFM-Syntax, die sich innerhalb dieses MFM-Effekts befindet." _instanceTicker: none: "Nie anzeigen" remote: "Für Benutzer fremder Instanzen anzeigen" diff --git a/locales/el-GR.yml b/locales/el-GR.yml index c711683ffca6720c3795c6486b6ae3a7ed63054b..889be0557888d6f26daa20ac6b85290fc28bf874 100644 --- a/locales/el-GR.yml +++ b/locales/el-GR.yml @@ -298,11 +298,6 @@ cannotUploadBecauseNoFreeSpace: "Το ανÎβασμα απÎτυχε λόγω _email: _follow: title: "Έχετε Îνα νÎο ακόλουθο" -_mfm: - mention: "Επισήμανση" - quote: "ΠαÏάθεση" - emoji: "ΕπιπλÎον emoji" - search: "Αναζήτηση" _channel: featured: "Δημοφιλή" _theme: diff --git a/locales/en-US.yml b/locales/en-US.yml index 685e373a4368147d537a7d65d148dd5b6dd35e2e..b18e57af8e115987b41218e62d33484f49afff2f 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -467,7 +467,6 @@ youHaveNoGroups: "You have no groups" joinOrCreateGroup: "Get invited to a group or create your own." noHistory: "No history available" signinHistory: "Login history" -disableAnimatedMfm: "Disable MFM with animation" doing: "Processing..." category: "Category" tags: "Tags" @@ -1330,72 +1329,6 @@ _nsfw: respect: "Hide NSFW media" ignore: "Don't hide NSFW media" force: "Hide all media" -_mfm: - cheatSheet: "MFM Cheatsheet" - intro: "MFM is a Misskey-exclusive markup language that can be used in many places. Here you can view a list of all available MFM syntax." - dummy: "Misskey expands the world of the Fediverse" - mention: "Mention" - mentionDescription: "You can specify a user by using an At-Symbol and a username." - hashtag: "Hashtag" - hashtagDescription: "You can specify a hashtag using a number sign and text." - url: "URL" - urlDescription: "URLs can be displayed." - link: "Link" - linkDescription: "Specific parts of text can be displayed as a URL." - bold: "Bold" - boldDescription: "Highlights letters by making them thicker." - small: "Small" - smallDescription: "Displays content small and thin." - center: "Center" - centerDescription: "Displays content centered." - inlineCode: "Code (Inline)" - inlineCodeDescription: "Displays inline syntax highlighting for (program) code." - blockCode: "Code (Block)" - blockCodeDescription: "Displays syntax highlighting for multi-line (program) code in a block." - inlineMath: "Math (Inline)" - inlineMathDescription: "Display math formulas (KaTeX) in-line" - blockMath: "Math (Block)" - blockMathDescription: "Display multi-line math formulas (KaTeX) in a block" - quote: "Quote" - quoteDescription: "Displays content as a quote." - emoji: "Custom Emoji" - emojiDescription: "By surrounding a custom emoji name with colons, custom emoji can be displayed." - search: "Search" - searchDescription: "Displays a search box with pre-entered text." - flip: "Flip" - flipDescription: "Flips content horizontally or vertically." - jelly: "Animation (Jelly)" - jellyDescription: "Gives content a jelly-like animation." - tada: "Animation (Tada)" - tadaDescription: "Gives content a \"Tada!\"-like animation." - jump: "Animation (Jump)" - jumpDescription: "Gives content a jumping animation." - bounce: "Animation (Bounce)" - bounceDescription: "Gives content a bouncy animation." - shake: "Animation (Shake)" - shakeDescription: "Gives content a shaking animation." - twitch: "Animation (Twitch)" - twitchDescription: "Gives content a strongly twitching animation." - spin: "Animation (Spin)" - spinDescription: "Gives content a spinning animation." - x2: "Big" - x2Description: "Displays content bigger." - x3: "Very big" - x3Description: "Displays content even bigger." - x4: "Unbelievably big" - x4Description: "Displays content even bigger than bigger than big." - blur: "Blur" - blurDescription: "Blurs content. It will be displayed clearly when hovered over." - font: "Font" - fontDescription: "Sets the font to display content in." - rainbow: "Rainbow" - rainbowDescription: "Makes the content appear in rainbow colors." - sparkle: "Sparkle" - sparkleDescription: "Gives content a sparkling particle effect." - rotate: "Rotate" - rotateDescription: "Turns content by a specified angle." - plain: "Plain" - plainDescription: "Deactivates the effects of all MFM contained within this MFM effect." _instanceTicker: none: "Never show" remote: "Show for remote users" diff --git a/locales/es-ES.yml b/locales/es-ES.yml index 5c1d249f6789304dc18be3ff0ff54bd27ee02b52..093818f5a21269abdccb5b74ff04c6fd21c84d6a 100644 --- a/locales/es-ES.yml +++ b/locales/es-ES.yml @@ -467,7 +467,6 @@ youHaveNoGroups: "Sin grupos" joinOrCreateGroup: "Obtenga una invitación para unirse al grupos o puede crear su propio grupo." noHistory: "No hay datos en el historial" signinHistory: "Historial de ingresos" -disableAnimatedMfm: "Deshabilitar MFM que tiene animaciones" doing: "Voy en camino" category: "CategorÃa" tags: "Etiqueta" @@ -1328,72 +1327,6 @@ _nsfw: respect: "Ocultar medios NSFW" ignore: "No esconder medios NSFW " force: "Ocultar todos los medios" -_mfm: - cheatSheet: "Hoja de referencia de MFM" - intro: "MFM es un lenguaje de marcado dedicado que se puede usar en varios lugares dentro de Misskey. Aquà puede ver una lista de sintaxis disponibles en MFM." - dummy: "Misskey expande el mundo de la Fediverso" - mention: "Menciones" - mentionDescription: "El signo @ seguido de un nombre de usuario se puede utilizar para notificar a un usuario en particular." - hashtag: "Hashtag" - hashtagDescription: "Puede especificar un hashtag con un numeral y el texto." - url: "URL" - urlDescription: "Se pueden mostrar las URL" - link: "VÃnculo" - linkDescription: "Se pueden asociar partes de texto a la URL" - bold: "Negrita" - boldDescription: "Muestra el texto con las letras más gruesas" - small: "Pequeño" - smallDescription: "Muestra el texto más pequeño y delgado" - center: "Centrar" - centerDescription: "Muestra el texto centrado" - inlineCode: "Código (insertado)" - inlineCodeDescription: "Muestra el código de un programa resaltando su sintaxis" - blockCode: "Código (bloque)" - blockCodeDescription: "Código de resaltado de sintaxis, como programas de varias lÃneas con bloques." - inlineMath: "Fórmula (insertado)" - inlineMathDescription: "Muestra fórmulas (KaTeX) insertadas" - blockMath: "Fórmula (bloque)" - blockMathDescription: "Muestra fórmulas (KaTeX) de varias lÃneas en un bloque" - quote: "Citar" - quoteDescription: "Muestra el contenido como una cita" - emoji: "Emojis personalizados" - emojiDescription: "Muestra los emojis personalizados encerrados entre dos puntos." - search: "Buscar" - searchDescription: "Muestra una caja de búsqueda con texto pre-escrito" - flip: "Echar de un capirotazo" - flipDescription: "Voltea el contenido hacia arriba / abajo o hacia la izquierda / derecha." - jelly: "Animación (gelatina)" - jellyDescription: "Aplica un efecto de animación tipo gelatina" - tada: "Animación (tadá)" - tadaDescription: "Aplica un efecto de animación al estilo \"Tadá\"" - jump: "Animación (saltar)" - jumpDescription: "Aplica un efecto de animación tipo salto" - bounce: "Animación (rebotar)" - bounceDescription: "Aplica un efecto de animación tipo rebote" - shake: "Animación (temblor)" - shakeDescription: "Aplica un efecto de animación tipo temblor" - twitch: "Animación (sacudida)" - twitchDescription: "Aplica un efecto de animación tipo sacudida" - spin: "Animación (giro)" - spinDescription: "Aplica un efecto de animación tipo rotación" - x2: "Grande" - x2Description: "Muestra el contenido más grande" - x3: "Muy grande" - x3Description: "Muestra el contenido mucho más grande" - x4: "Totalmente grande" - x4Description: "Muestra el contenido totalmente grande" - blur: "Desenfoque" - blurDescription: "Para desenfocar el contenido. Se muestra claramente al colocar el puntero encima." - font: "Fuente" - fontDescription: "Elegir la fuente del contenido" - rainbow: "ArcoÃris" - rainbowDescription: "Muestra el contenido con los colores del arcoÃris" - sparkle: "Parpadeante" - sparkleDescription: "Aplica un efecto de partÃculas parpadeantes" - rotate: "Rotar" - rotateDescription: "Rota el contenido a un ángulo especificado." - plain: "Plano" - plainDescription: "Desactiva los efectos de todo el contenido MFM con este efecto MFM." _instanceTicker: none: "No mostrar" remote: "Mostrar a usuarios remotos" diff --git a/locales/fr-FR.yml b/locales/fr-FR.yml index 8a9476e916a31a9dc2db9c9f75580b7241e01d42..bb976334e94ec0653f75a612d1cdc9c53ff28f2c 100644 --- a/locales/fr-FR.yml +++ b/locales/fr-FR.yml @@ -464,7 +464,6 @@ youHaveNoGroups: "Vous n’avez aucun groupe" joinOrCreateGroup: "Vous pouvez être invité·e à rejoindre des groupes existants ou créer votre propre nouveau groupe." noHistory: "Pas d'historique" signinHistory: "Historique de connexion" -disableAnimatedMfm: "Désactiver MFM ayant des animations" doing: "En cours..." category: "Catégorie" tags: "Étiquettes" @@ -1011,72 +1010,6 @@ _nsfw: respect: "Cacher les médias marqués comme contenu sensible" ignore: "Afficher les médias sensibles" force: "Cacher tous les médias" -_mfm: - cheatSheet: "Antisèche MFM" - intro: "MFM est un langage Markdown spécifique utilisable ici et là dans Misskey. Vous pouvez vérifier ici les structures utilisables avec MFM." - dummy: "La Fédiverse s'agrandit avec Misskey" - mention: "Mentionner" - mentionDescription: "Vous pouvez afficher un utilisateur spécifique en indiquant une arobase suivie d'un nom d'utilisateur" - hashtag: "Hashtags" - hashtagDescription: "Vous pouvez afficher un mot-dièse en utilisant un croisillon et du texte" - url: "URL" - urlDescription: "L'adresse web peut être affichée." - link: "Lien" - linkDescription: "Une partie précise d'une phrase peut être liée à l'adresse web." - bold: "Gras" - boldDescription: "Il est possible de mettre le texte en exergue en le mettant en gras." - small: "Diminuer l'emphase" - smallDescription: "Le contenu peut être affiché en petit et fin." - center: "Centrer" - centerDescription: "Le contenu peut être centré" - inlineCode: "Code (inline)" - inlineCodeDescription: "Coloration syntaxique des lignes de code." - blockCode: "Bloc de code" - blockCodeDescription: "Coloration syntaxique des lignes de code pour les blocs multi-lignes." - inlineMath: "Formule mathématique (inline)" - inlineMathDescription: "Afficher les formules mathématiques (KaTeX)." - blockMath: "Formule mathématique (bloc)" - blockMathDescription: "Afficher les formules mathématiques (KaTeX) multi-lignes dans un bloc." - quote: "Citer" - quoteDescription: "Affiche le contenu sous forme de citation." - emoji: "Émojis personnalisés" - emojiDescription: "Entourez le nom de l'émoji personnalisé de deux points pour l'afficher." - search: "Rechercher" - searchDescription: "Affiche une boîte de recherche avec du texte pré-saisi." - flip: "Inverser" - flipDescription: "Rotation verticale ou horizontale du contenu" - jelly: "Animation (Gelée)" - jellyDescription: "Donne une animation d'étirement." - tada: "Animation (Tada)" - tadaDescription: "Donne une animation qui donne une impression de \"Tada !\"" - jump: "Animation (Saut)" - jumpDescription: "Donne une animation qui saute." - bounce: "Animation (Rebond)" - bounceDescription: "Donne une animation de rebondissement." - shake: "Animation (Secousse)" - shakeDescription: "Donne une animation tremblante." - twitch: "Animation (Tremblement)" - twitchDescription: "Donne une animation de tremblement intense." - spin: "Animation (Rotation)" - spinDescription: "Donne une animation de rotation." - x2: "Grand" - x2Description: "Afficher le contenu en grand." - x3: "Très grand" - x3Description: "Afficher le contenu en très grand." - x4: "Plus grand" - x4Description: "Afficher le contenu en plus grand." - blur: "Flou" - blurDescription: "Le contenu peut être flouté ; il sera visible en le survolant avec le curseur." - font: "Police de caractères" - fontDescription: "Il est possible de choisir la police." - rainbow: "Arc-en-ciel" - rainbowDescription: "Permet d'afficher le contenu en couleurs arc-en-ciel." - sparkle: "Paillettes" - sparkleDescription: "Ajoute un effet scintillant au contenu." - rotate: "Pivoter" - rotateDescription: "Faire pivoter à un angle spécifié." - plain: "Vu texte non formaté" - plainDescription: "Désactive toute la syntaxe interne." _instanceTicker: none: "Cacher " remote: "Montrer pour les utilisateur·ice·s distant·e·s" diff --git a/locales/id-ID.yml b/locales/id-ID.yml index 7332e030c42b20784e1c81bec31f03f9a221c1af..002eead68999bdc0c17bbdf91d775e68253b6fd2 100644 --- a/locales/id-ID.yml +++ b/locales/id-ID.yml @@ -464,7 +464,6 @@ youHaveNoGroups: "Kamu tidak memiliki grup" joinOrCreateGroup: "Bergabunglah dengan grup atau kamu dapat membuat grupmu sendiri." noHistory: "Tidak ada riwayat" signinHistory: "Riwayat masuk" -disableAnimatedMfm: "Nonaktifkan MFM dengan animasi" doing: "Sedang berkerja..." category: "Kategori" tags: "Tandai" @@ -1131,70 +1130,6 @@ _nsfw: respect: "Sembunyikan media NSFW" ignore: "Jangan sembunyikan media NSFW" force: "Sembunyikan semua media" -_mfm: - cheatSheet: "Contekan MFM" - intro: "MFM adalah Misskey-exclusive Markup Language yang dapat digunakan di banyak tempat. Berikut kamu bisa melihat daftar dari syntax MFM yang ada." - dummy: "Misskey membentangkan dunia Fediverse" - mention: "Sebut" - mentionDescription: "Kamu dapat menentukan pengguna tertentu dengan menggunakan simbol-At dan nama engguna mereka." - hashtag: "Tagar" - hashtagDescription: "Kamu dapat menentukan tagar dengan menggunakan angka dan teks." - url: "URL" - urlDescription: "URL dapat ditampilkan." - link: "Tautan" - linkDescription: "Bagian tertentu dari teks dapat ditampilka sebagai URL." - bold: "Tebal" - boldDescription: "Sorot tulisan dengan membuatnya tebal." - small: "Kecil" - smallDescription: "Tampilkan konten kecil dan tipis." - center: "Tengah" - centerDescription: "Tampilkan konten di tengah." - inlineCode: "Kode (Dalam baris)" - inlineCodeDescription: "Menampilkan sorotan sintaks dalam baris untuk kode(program-)." - blockCode: "Kode (Blok)" - blockCodeDescription: "Menampilkan sorotan sintaks untuk kode(program-) multi baris dalam sebuah blok." - inlineMath: "Matematika (Dalam baris)" - inlineMathDescription: "Menampilkan formula matematika (KaTeX) dalam baris." - blockMath: "Matematika (Blok)" - blockMathDescription: "Menampilkan formula matematika (KaTeX) multibaris dalam sebuah blok." - quote: "Kutip" - quoteDescription: "Menampilkan konten sebagai kutipan." - emoji: "Emoji kustom" - emojiDescription: "Emoji kustom dapat ditampilkan dengan mengurung nama emoji kustom menggunakan tanda titik dua." - search: "Penelusuran" - searchDescription: "Menampilkan kotak pencarian dengan teks yang sudah dimasukkan." - flip: "Balik" - flipDescription: "Balikkan konten secara horizontal atau vertikal." - jelly: "Animasi (Jelly)" - jellyDescription: "Menerapkan animasi seperti jelly" - tada: "Animasi (Tada)" - tadaDescription: "Menerapkan animasi seperti \"Kejutan!\"." - jump: "Animasi (Loncat)" - jumpDescription: "Menerapkan animasi melompat." - bounce: "Animasi (Melambung)" - bounceDescription: "Menerapkan animasi melambung." - shake: "Animasi (Goyang)" - shakeDescription: "Menerapkan animasi bergoyang." - twitch: "Animasi (Cubit)" - twitchDescription: "Terapkan animasi cubit yang kuat." - spin: "Animasi (Putar)" - spinDescription: "Terapkan animasi putar." - x2: "Besar" - x2Description: "Tampilkan konten menjadi besar." - x3: "Lebih besar" - x3Description: "Tampilkan konten menjadi lebih besar." - x4: "Sangat besar" - x4Description: "Tampilka konten menjadi sangat besar." - blur: "Buram" - blurDescription: "Konten dapat diburamkan dengan efek ini. Konten dapat ditampilkan dengan jelas dengan melayangkan kursor tetikus di atasnya." - font: "Font" - fontDescription: "Setel font yang ditampilkan untuk konten." - rainbow: "Pelangi" - rainbowDescription: "Membuat konten muncul dalam warna pelangi." - sparkle: "Kelap-kelip" - sparkleDescription: "Memberikan konten efek partikel kelap-kelip." - rotate: "Putar" - rotateDescription: "Putar konten sesuai sudut yang ditentukan." _instanceTicker: none: "Jangan tampilkan" remote: "Tampilkan untuk pengguna luar" diff --git a/locales/it-IT.yml b/locales/it-IT.yml index 12bbc78d6222bb4980438ea46d7302ceb7d04020..fbee5d9719c8e8ce72ae361db447f7180cb701e7 100644 --- a/locales/it-IT.yml +++ b/locales/it-IT.yml @@ -464,7 +464,6 @@ youHaveNoGroups: "Nessun gruppo" joinOrCreateGroup: "Puoi creare il tuo gruppo o essere invitat@ a gruppi che già esistono." noHistory: "Nessuna cronologia" signinHistory: "Storico degli accessi al profilo" -disableAnimatedMfm: "Disabilità i MFM animati" doing: "In corso..." category: "Categoria" tags: "Tag" @@ -1323,72 +1322,6 @@ _nsfw: respect: "Nascondere i media segnati come sensibli" ignore: "Visualizzare i media segnati come sensibili" force: "Nascondere tutti i media" -_mfm: - cheatSheet: "Bigliettino MFM" - intro: "MFM è un linguaggio Markdown particolare che si può usare in diverse parti di Misskey. Qui puoi visualizzare a colpo d'occhio tutta la sintassi MFM utile." - dummy: "Il Fediverso si espande con Misskey" - mention: "Menzioni" - mentionDescription: "Si può menzionare un utente specifico digitando il suo nome utente subito dopo il segno @." - hashtag: "Hashtag" - hashtagDescription: "Per indicare un hashtag si può usare il segno numerico + tag." - url: "URL" - urlDescription: "È possibile indicare gli URL" - link: "Link" - linkDescription: "È possibile associare specifici intervalli di testo agli URL" - bold: "Grassetto" - boldDescription: "Il testo può essere grassettato per enfasi" - small: "vistosamente" - smallDescription: "Il contenuto può essere visualizzato più piccolo e più sottile" - center: "centratura" - centerDescription: "Il contenuto può essere centrato" - inlineCode: "Codice (inline)" - inlineCodeDescription: "Evidenziazione della sintassi in linea di programmi e altro codice" - blockCode: "Codice (blocco)" - blockCodeDescription: "Evidenziazione della sintassi di programmi multilinea e di altro codice in blocchi" - inlineMath: "Espressione matematica(Immersione)" - inlineMathDescription: "Visualizza le formule (KaTeX) in linea." - blockMath: "Formula matematica (blocco)" - blockMathDescription: "Visualizzazione di formule multilinea (KaTeX) in blocchi." - quote: "Cita il nota" - quoteDescription: "Può indicare che il contenuto è una citazione." - emoji: "Emoji personalizzati" - emojiDescription: "Utilizzare i due punti per racchiudere il nome di un'emoji personalizzata e visualizzarla." - search: "Cerca" - searchDescription: "È possibile visualizzare una casella di ricerca precompilata." - flip: "Inverti" - flipDescription: "Capovolgere il contenuto verso l'alto o verso il basso, a sinistra o a destra." - jelly: "Animazione (Biyon Biyon)." - jellyDescription: "Dà un'animazione di salto." - tada: "Animazione (jang)." - tadaDescription: "Ta-da! dà un'animazione che assomiglia a." - jump: "Animazione(salto)" - jumpDescription: "Da un animazione che salta su e giù." - bounce: "Animazione(rimbalzo)" - bounceDescription: "Rende il testo rimbalzante" - shake: "rimbalzante" - shakeDescription: "Rende il testo traballante" - twitch: "testo" - twitchDescription: "Fa tremare il testo" - spin: "Animazione (rotazione)" - spinDescription: "Fornisce un'animazione rotante." - x2: "Più grande" - x2Description: "Mostra il contenuto ingrandito." - x3: "Molto più grande" - x3Description: "Mostra il contenuto molto più ingrandito." - x4: "Estremamente più grande" - x4Description: "Mostra il contenuto estremamente più ingrandito." - blur: "Sfocatura" - blurDescription: "È possibile rendere sfocato il contenuto. Spostando il cursore su di esso tornerà visibile chiaramente." - font: "Tipo di carattere" - fontDescription: "Puoi scegliere il tipo di carattere per il contenuto." - rainbow: "Arcobaleno" - rainbowDescription: "Arcobaleno il contenuto." - sparkle: "brillantini" - sparkleDescription: "Aggiungere effetti particellari scintillanti." - rotate: "Ruota" - rotateDescription: "Ruota con un angolo specificato." - plain: "Testo semplice" - plainDescription: "Disattiva tutta la sintassi interna." _instanceTicker: none: "Nascondi" remote: "Mostra solo per i profili remoti" diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 79b78f3f985d3d01125cec31785ecb16e9aff75e..5c919c303232b06696b8f5aa90c2b5d7c8f42f9a 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -467,7 +467,8 @@ youHaveNoGroups: "グループãŒã‚ã‚Šã¾ã›ã‚“" joinOrCreateGroup: "æ—¢å˜ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã—ã¦ã‚‚らã†ã‹ã€æ–°ã—ãグループを作æˆã—ã¦ãã ã•ã„。" noHistory: "å±¥æ´ã¯ã‚ã‚Šã¾ã›ã‚“" signinHistory: "ãƒã‚°ã‚¤ãƒ³å±¥æ´" -disableAnimatedMfm: "å‹•ãã®ã‚ã‚‹MFMを無効ã«ã™ã‚‹" +enableAdvancedMfm: "高度ãªMFMを有効ã«ã™ã‚‹" +enableAnimatedMfm: "å‹•ãã®ã‚ã‚‹MFMを有効ã«ã™ã‚‹" doing: "ã‚„ã£ã¦ã„ã¾ã™" category: "カテゴリ" tags: "ã‚¿ã‚°" @@ -946,6 +947,10 @@ selectFromPresets: "プリセットã‹ã‚‰é¸æŠž" achievements: "実績" gotInvalidResponseError: "サーãƒãƒ¼ã®å¿œç”ãŒç„¡åŠ¹ã§ã™" gotInvalidResponseErrorDescription: "サーãƒãƒ¼ãŒãƒ€ã‚¦ãƒ³ã¾ãŸã¯ãƒ¡ãƒ³ãƒ†ãƒŠãƒ³ã‚¹ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ã—ã°ã‚‰ãã—ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。" +thisPostMayBeAnnoying: "ã“ã®æŠ•ç¨¿ã¯è¿·æƒ‘ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚" +thisPostMayBeAnnoyingHome: "ホームã«æŠ•ç¨¿" +thisPostMayBeAnnoyingCancel: "ã‚„ã‚ã‚‹" +thisPostMayBeAnnoyingIgnore: "ã“ã®ã¾ã¾æŠ•ç¨¿" _achievements: earnedAt: "ç²å¾—日時" @@ -1347,73 +1352,6 @@ _nsfw: ignore: "閲覧注æ„ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’éš ã•ãªã„" force: "常ã«ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’éš ã™" -_mfm: - cheatSheet: "MFMãƒãƒ¼ãƒˆã‚·ãƒ¼ãƒˆ" - intro: "MFMã¯ã€Misskey内ã®æ§˜ã€…ãªå ´æ‰€ã§ä½¿ç”¨ã§ãる専用ã®ãƒžãƒ¼ã‚¯ã‚¢ãƒƒãƒ—言語ã§ã™ã€‚ã“ã“ã§ã¯ã€MFMã§ä½¿ç”¨å¯èƒ½ãªæ§‹æ–‡ä¸€è¦§ãŒç¢ºèªã§ãã¾ã™ã€‚" - dummy: "Misskeyã§Fediverseã®ä¸–ç•ŒãŒåºƒãŒã‚Šã¾ã™" - mention: "メンション" - mentionDescription: "アットマーク + ユーザーåã§ã€ç‰¹å®šã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’示ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" - hashtag: "ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°" - hashtagDescription: "ナンãƒãƒ¼ã‚µã‚¤ãƒ³ + ã‚¿ã‚°ã§ã€ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°ã‚’示ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" - url: "URL" - urlDescription: "URLを示ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" - link: "リンク" - linkDescription: "æ–‡ç« ã®ç‰¹å®šã®ç¯„囲をã€URLã«ç´ã¥ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" - bold: "太å—" - boldDescription: "æ–‡å—を太ã表示ã—ã¦å¼·èª¿ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" - small: "目立ãŸãªã" - smallDescription: "内容をå°ã•ã・薄ã表示ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" - center: "ä¸å¤®å¯„ã›" - centerDescription: "内容をä¸å¤®å¯„ã›ã§è¡¨ç¤ºã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" - inlineCode: "コード(インライン)" - inlineCodeDescription: "プãƒã‚°ãƒ©ãƒ ãªã©ã®ã‚³ãƒ¼ãƒ‰ã‚’インラインã§ã‚·ãƒ³ã‚¿ãƒƒã‚¯ã‚¹ãƒã‚¤ãƒ©ã‚¤ãƒˆã—ã¾ã™ã€‚" - blockCode: "コード(ブãƒãƒƒã‚¯)" - blockCodeDescription: "複数行ã®ãƒ—ãƒã‚°ãƒ©ãƒ ãªã©ã®ã‚³ãƒ¼ãƒ‰ã‚’ブãƒãƒƒã‚¯ã§ã‚·ãƒ³ã‚¿ãƒƒã‚¯ã‚¹ãƒã‚¤ãƒ©ã‚¤ãƒˆã—ã¾ã™ã€‚" - inlineMath: "æ•°å¼(インライン)" - inlineMathDescription: "æ•°å¼(KaTeX)をインラインã§è¡¨ç¤ºã—ã¾ã™ã€‚" - blockMath: "æ•°å¼(ブãƒãƒƒã‚¯)" - blockMathDescription: "複数行ã®æ•°å¼(KaTeX)をブãƒãƒƒã‚¯ã§è¡¨ç¤ºã—ã¾ã™ã€‚" - quote: "引用" - quoteDescription: "内容ãŒå¼•ç”¨ã§ã‚ã‚‹ã“ã¨ã‚’示ã™ã“ã¨ãŒã§ãã¾ã™ã€‚" - emoji: "カスタム絵文å—" - emojiDescription: "コãƒãƒ³ã§ã‚«ã‚¹ã‚¿ãƒ 絵文å—åを囲むã¨ã€ã‚«ã‚¹ã‚¿ãƒ 絵文å—を表示ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" - search: "検索" - searchDescription: "入力済ã¿æ¤œç´¢ãƒœãƒƒã‚¯ã‚¹ã‚’表示ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" - flip: "å転" - flipDescription: "内容を上下ã¾ãŸã¯å·¦å³ã«å転ã•ã›ã¾ã™ã€‚" - jelly: "アニメーション(ã³ã‚ˆã‚“ã³ã‚ˆã‚“)" - jellyDescription: "ã³ã‚ˆã‚“ã³ã‚ˆã‚“ã™ã‚‹ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’与ãˆã¾ã™ã€‚" - tada: "アニメーション(ã˜ã‚ƒãƒ¼ã‚“)" - tadaDescription: "ジャーンï¼ã¨ã„ã†æ„Ÿã˜ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’与ãˆã¾ã™ã€‚" - jump: "アニメーション(ジャンプ)" - jumpDescription: "飛ã³è·³ãるよã†ãªã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’与ãˆã¾ã™ã€‚" - bounce: "アニメーション(ãƒã‚¦ãƒ³ãƒ‰)" - bounceDescription: "ã½ã‚ˆã‚“ã½ã‚ˆã‚“弾むよã†ãªã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’与ãˆã¾ã™ã€‚" - shake: "アニメーション(ã¶ã‚‹ã¶ã‚‹)" - shakeDescription: "ã¶ã‚‹ã¶ã‚‹éœ‡ãˆã‚‹ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’与ãˆã¾ã™ã€‚" - twitch: "アニメーション(ブレ)" - twitchDescription: "æ¿€ã—ãブレるアニメーションを与ãˆã¾ã™ã€‚" - spin: "アニメーション(回転)" - spinDescription: "回転ã™ã‚‹ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’与ãˆã¾ã™ã€‚" - x2: "大ãã" - x2Description: "内容を大ãã表示ã—ã¾ã™ã€‚" - x3: "ã¨ã¦ã‚‚大ãã" - x3Description: "内容をã¨ã¦ã‚‚大ãã表示ã—ã¾ã™ã€‚" - x4: "究極ã«å¤§ãã" - x4Description: "内容を究極ã«å¤§ãã表示ã—ã¾ã™ã€‚" - blur: "ã¼ã‹ã—" - blurDescription: "内容をã¼ã‹ã™ã“ã¨ãŒã§ãã¾ã™ã€‚ãƒã‚¤ãƒ³ã‚¿ãƒ¼ã‚’上ã«ä¹—ã›ã‚‹ã¨ã¯ã£ãり見ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚" - font: "フォント" - fontDescription: "内容ã®ãƒ•ã‚©ãƒ³ãƒˆã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" - rainbow: "レインボー" - rainbowDescription: "内容をレインボーã«ã—ã¾ã™ã€‚" - sparkle: "ã‚ラã‚ラ" - sparkleDescription: "ã‚ラã‚ラã—ãŸãƒ‘ーティクルã®ã‚¨ãƒ•ã‚§ã‚¯ãƒˆã‚’è¿½åŠ ã—ã¾ã™ã€‚" - rotate: "回転" - rotateDescription: "指定ã—ãŸè§’度ã§å›žè»¢ã•ã›ã¾ã™ã€‚" - plain: "プレーン" - plainDescription: "内å´ã®æ§‹æ–‡ã‚’å…¨ã¦ç„¡åŠ¹ã«ã—ã¾ã™ã€‚" - _instanceTicker: none: "表示ã—ãªã„" remote: "リモートユーザーã«è¡¨ç¤º" diff --git a/locales/ja-KS.yml b/locales/ja-KS.yml index 2987112e24481b57646361c55d0c05d9f434e403..ced47e11755274363a47b3f98f0e846b8d92cb86 100644 --- a/locales/ja-KS.yml +++ b/locales/ja-KS.yml @@ -467,7 +467,8 @@ youHaveNoGroups: "グループãŒã‚らã¸ã‚“ãã‡ã€‚" joinOrCreateGroup: "æ—¢å˜ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã—ã¦ã‚‚らã†ã‹ã€æ–°ã—ãグループ作ã£ã¦ã‹ã‚‰ã‚„ã£ã¦ãª" noHistory: "å±¥æ´ã¯ã‚らã¸ã‚“ãã‡ã€‚" signinHistory: "ãƒã‚°ã‚¤ãƒ³å±¥æ´" -disableAnimatedMfm: "å‹•ããŒã‚„ã‹ã¾ã—ã„MFMã‚’æ¢ã‚ã‚‹" +enableAdvancedMfm: "ã‚„ã‚„ã“ã—ã„MFMã‚‚ã‚ã‚Šã«ã™ã‚‹" +enableAnimatedMfm: "å‹•ããŒã‚„ã‹ã¾ã—ã„MFMも許ã—ãŸã‚‹" doing: "ã‚„ã£ã¨ã‚‹ãŒãª" category: "カテゴリ" tags: "ã‚¿ã‚°" @@ -1119,72 +1120,6 @@ _nsfw: respect: "閲覧注æ„ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã¯éš ã™ã§" ignore: "閲覧注æ„ã®ãƒ¡ãƒ‡ã‚£ã‚¢ã¯éš ã•ã¸ã‚“ã§" force: "常ã«ãƒ¡ãƒ‡ã‚£ã‚¢ã‚’éš ã™ã§" -_mfm: - cheatSheet: "MFMãƒãƒ¼ãƒˆã‚·ãƒ¼ãƒˆ" - intro: "MFMã¯ã€Misskey内ã®è‰²ã‚“ãªæ‰€ã§ä½¿ãˆã‚‹å°‚用ã®ãƒžãƒ¼ã‚¯ã‚¢ãƒƒãƒ—言語やã§ã€‚ã“ã®ãƒšãƒ¼ã‚¸ã§MFMã§ä½¿ãˆã‚‹æ§‹æ–‡ä¸€è¦§ãŒç¢ºèªã§ãã‚‹ã§ã€‚" - dummy: "Misskeyã§Fediverseã®ä¸–ç•ŒãŒåºƒãŒã‚Šã¾ã™" - mention: "メンション" - mentionDescription: "アットマーク + ユーザーåã§ã€ç‰¹å®šã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’示ã™ã“ã¨ãŒã§ãã‚‹ã§ã€‚" - hashtag: "ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°" - hashtagDescription: "ナンãƒãƒ¼ã‚µã‚¤ãƒ³ + ã‚¿ã‚°ã§ã€ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°ã‚’示ã™ã“ã¨ãŒã§ãã‚‹ã§ã€‚" - url: "URL" - urlDescription: "URLを示ã™ã“ã¨ãŒã§ãã‚‹ã§ã€‚" - link: "リンク" - linkDescription: "æ–‡ç« ã®ç‰¹å®šã®ç¯„囲をURLã«ç´ã¥ã‘ã‚‹ã“ã¨ãŒã§ãã‚‹ã§" - bold: "太å—" - boldDescription: "æ–‡å—を太ã表示ã—ã¦å¼·èª¿ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã§" - small: "目立ãŸãªã" - smallDescription: "内容をå°ã•ã・薄ã表示ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã§" - center: "ä¸å¤®å¯„ã›" - centerDescription: "内容をä¸å¤®å¯„ã›ã§è¡¨ç¤ºã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã§" - inlineCode: "コード(インライン)" - inlineCodeDescription: "プãƒã‚°ãƒ©ãƒ ã¨ã‹ã®ã‚³ãƒ¼ãƒ‰ã‚’インラインã§ã‚·ãƒ³ã‚¿ãƒƒã‚¯ã‚¹ãƒã‚¤ãƒ©ã‚¤ãƒˆã™ã‚‹ã§" - blockCode: "コード(ブãƒãƒƒã‚¯)" - blockCodeDescription: "複数行ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã¨ã‹ã®ã‚³ãƒ¼ãƒ‰ã‚’ブãƒãƒƒã‚¯ã§ã‚·ãƒ³ã‚¿ãƒƒã‚¯ã‚¹ãƒã‚¤ãƒ©ã‚¤ãƒˆã™ã‚‹ã§" - inlineMath: "æ•°å¼(インライン)" - inlineMathDescription: "æ•°å¼(KaTeX)をインラインã§è¡¨ç¤ºã™ã‚‹ã§" - blockMath: "æ•°å¼(ブãƒãƒƒã‚¯)" - blockMathDescription: "複数行ã®æ•°å¼(KaTeX)をブãƒãƒƒã‚¯ã§è¡¨ç¤ºã™ã‚‹ã§" - quote: "引用" - quoteDescription: "内容ãŒå¼•ç”¨ã£ã¦ã“ã¨ã‚’示ã™ã“ã¨ãŒã§ãã‚‹ã§" - emoji: "カスタム絵文å—" - emojiDescription: "コãƒãƒ³ã§ã‚«ã‚¹ã‚¿ãƒ 絵文å—åを囲んã ã‚‹ã¨ã€ã‚«ã‚¹ã‚¿ãƒ 絵文å—を表示ã•ã›ã‚‹ã“ã¨ãŒã§ãã‚‹ã§" - search: "探ã™" - searchDescription: "入力済ã¿æ¤œç´¢ãƒœãƒƒã‚¯ã‚¹ã‚’表示ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã§" - flip: "å転" - flipDescription: "内容を上下ã¾ãŸã¯å·¦å³ã«å転ã™ã‚‹ã§" - jelly: "アニメーション(ã³ã‚ˆã‚“ã³ã‚ˆã‚“)" - jellyDescription: "ã³ã‚ˆã‚“ã³ã‚ˆã‚“ã™ã‚‹ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚„ãªã€‚" - tada: "アニメーション(ã˜ã‚ƒãƒ¼ã‚“)" - tadaDescription: "ジャーンï¼ã£ã¦ãªæ„Ÿã˜ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚„ãªã€‚" - jump: "アニメーション(ジャンプ)" - jumpDescription: "飛ã³è·³ãるよã†ãªã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚„ãªã€‚" - bounce: "アニメーション(ãƒã‚¦ãƒ³ãƒ‰)" - bounceDescription: "ã½ã‚ˆã‚“ã½ã‚ˆã‚“弾むよã†ãªã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚„ãªã€‚" - shake: "アニメーション(ã¶ã‚‹ã¶ã‚‹)" - shakeDescription: "ã¶ã‚‹ã¶ã‚‹éœ‡ãˆã‚‹ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚„ãªã€‚" - twitch: "アニメーション(ブレ)" - twitchDescription: "æ¿€ã—ãブレるアニメーションやãªã€‚" - spin: "アニメーション(回転)" - spinDescription: "回転ã™ã‚‹ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚„ãªã€‚" - x2: "大ãã" - x2Description: "内容を大ãã表示ã™ã‚‹ã§" - x3: "ã¨ã¦ã‚‚大ãã" - x3Description: "内容をã¨ã¦ã‚‚大ãã表示ã™ã‚‹ã§" - x4: "究極ã«å¤§ãã" - x4Description: "内容を究極ã«å¤§ãã表示ã™ã‚‹ã§" - blur: "ã¼ã‹ã—" - blurDescription: "内容をã¼ã‹ã™ã“ã¨ãŒã§ãã‚‹ã§ã€‚ãƒã‚¤ãƒ³ã‚¿ãƒ¼ã‚’上ã«ä¹—ã›ã‚‹ã¨ã¯ã£ãり見ãˆã‚‹ã‚ˆã†ã«ãªã‚‹ã§" - font: "フォント" - fontDescription: "内容ã®ãƒ•ã‚©ãƒ³ãƒˆã‚’指定ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã§" - rainbow: "レインボー" - rainbowDescription: "内容をレインボーã«ã™ã‚‹ã§" - sparkle: "ã‚ラã‚ラ" - sparkleDescription: "ã‚ラã‚ラã—ãŸãƒãƒ¼ãƒ†ã‚£æ¥ã‚‹ã®ã‚¨ãƒ•ã‚§ã‚¯ãƒˆã‚’è¿½åŠ ã™ã‚‹ã§" - rotate: "回転" - rotateDescription: "指定ã—ãŸè§’度ã§å›žè»¢ã•ã›ã‚‹ã§" - plain: "プレーン" - plainDescription: "内å´ã®æ§‹æ–‡ã‚’全部無効ã«ã™ã‚‹ã§" _instanceTicker: none: "表示ã›ã‚“" remote: "リモートユーザーã«è¡¨ç¤º" diff --git a/locales/kab-KAB.yml b/locales/kab-KAB.yml index 7c2e3a065e9dca6ac415ed902eee72cd6baaec4d..fcd490db12146970713103a176b727d7f70c9107 100644 --- a/locales/kab-KAB.yml +++ b/locales/kab-KAB.yml @@ -61,10 +61,6 @@ account: "Imiá¸an" _email: _follow: title: "Yeá¹á¹afaá¹›-ik·em-id" -_mfm: - mention: "Bder" - search: "Nadi" - font: "Tasefsit" _theme: keys: mention: "Bder" diff --git a/locales/kn-IN.yml b/locales/kn-IN.yml index 55b72d3a6e2ac4d9297025424ad8fb9ad9f3ed6b..ef66f3fbd234b5c028500b7a71a678b71dbb7d31 100644 --- a/locales/kn-IN.yml +++ b/locales/kn-IN.yml @@ -64,8 +64,6 @@ file: "ಕಡತಗಳà³" _email: _follow: title: "ಹಿಂಬಾಲಿಸಿದರà³" -_mfm: - search: "ಹà³à²¡à³à²•à³" _sfx: notification: "ಅಧಿಸೂಚನೆಗಳà³" _widgets: diff --git a/locales/ko-KR.yml b/locales/ko-KR.yml index 23814208a3ec05b3c641e2588ea011f46fc7044c..2def444095b503472b3d4a13937395d4c0bae25b 100644 --- a/locales/ko-KR.yml +++ b/locales/ko-KR.yml @@ -464,7 +464,6 @@ youHaveNoGroups: "ê·¸ë£¹ì´ ì—†ìŠµë‹ˆë‹¤" joinOrCreateGroup: "다른 ê·¸ë£¹ì˜ ì´ˆëŒ€ë¥¼ 받거나, ì§ì ‘ 새 ê·¸ë£¹ì„ ë§Œë“¤ì–´ 보세요." noHistory: "기ë¡ì´ 없습니다" signinHistory: "ë¡œê·¸ì¸ ê¸°ë¡" -disableAnimatedMfm: "움ì§ìž„ì´ ìžˆëŠ” MFMì„ ë¹„í™œì„±í™”" doing: "ìž ì‹œë§Œìš”" category: "ì¹´í…Œê³ ë¦¬" tags: "태그" @@ -1320,72 +1319,6 @@ _nsfw: respect: "열람주ì˜ë¡œ ì„¤ì •ëœ ë¯¸ë””ì–´ 숨기기" ignore: "열람 ì£¼ì˜ ë¯¸ë””ì–´ í•ìƒ 표시" force: "미디어 í•ìƒ 숨기기" -_mfm: - cheatSheet: "MFM ë„움ë§" - intro: "MFM는 Misskeyì˜ ë‹¤ì–‘í•œ ê³³ì—ì„œ ì‚¬ìš©í• ìˆ˜ 있는 ì „ìš© 마í¬ì—… 언어입니다. 여기ì—서는 MFMì—ì„œ ì‚¬ìš©í• ìˆ˜ 있는 êµ¬ë¬¸ì„ í™•ì¸í• 수 있습니다." - dummy: "Misskeyë¡œ ì—°í•©ìš°ì£¼ì˜ ì„¸ê³„ê°€ 펼ì³ì§‘니다" - mention: "멘션" - mentionDescription: "골뱅ì´í‘œ(@) ë’¤ì— ì‚¬ìš©ìžëª…ì„ ë„£ì–´ íŠ¹ì • ìœ ì €ë¥¼ 나타낼 수 있습니다." - hashtag: "해시태그" - hashtagDescription: "샵 ë˜ëŠ” ìš°ë¬¼ì •ìž(#)를 ì•žì— ë¶™ì—¬ì„œ 해시태그를 나타낼 수 있습니다." - url: "URL" - urlDescription: "URLì„ ë‚˜íƒ€ë‚¼ 수 있습니다." - link: "ë§í¬" - linkDescription: "ë¬¸ìž¥ì˜ íŠ¹ì • 범위를 URLë¡œ 표시합니다." - bold: "êµµìŒ/볼드체" - boldDescription: "문ìžë¥¼ 굵게 강조합니다." - small: "ëˆˆì— ë„지 ì•ŠìŒ" - smallDescription: "ë‚´ìš©ì„ ìž‘ê³ ì—°í•˜ê²Œ ë³´ì´ê²Œ 합니다." - center: "ê°€ìš´ë° ì •ë ¬" - centerDescription: "ë‚´ìš©ì„ ê°€ìš´ë° ì •ë ¬ë¡œ ë³´ì´ê²Œ 합니다." - inlineCode: "코드(ì¸ë¼ì¸)" - inlineCodeDescription: "여러 í–‰ì˜ ì½”ë“œë¥¼ 문법 강조를 ì 용하여 ì¸ë¼ì¸ìœ¼ë¡œ 표시합니다." - blockCode: "코드(블ë¡)" - blockCodeDescription: "여러 í–‰ì˜ ì½”ë“œë¥¼ 문법 강조를 ì 용하여 블ë¡ìœ¼ë¡œ 표시합니다." - inlineMath: "수ì‹(ì¸ë¼ì¸)" - inlineMathDescription: "수ì‹(KaTeX)를 ì¸ë¼ì¸ìœ¼ë¡œ ë³´ì´ê²Œ 합니다." - blockMath: "수ì‹(블ë¡)" - blockMathDescription: "여러 ì¤„ì˜ ìˆ˜ì‹(KaTeX)를 블ë¡ìœ¼ë¡œ ë³´ì´ê²Œ 합니다." - quote: "ì¸ìš©" - quoteDescription: "ë‚´ìš©ì„ ì¸ìš©ë¬¸ìœ¼ë¡œ 표시합니다." - emoji: "커스텀 ì´ëª¨ì§€" - emojiDescription: "커스텀 ì´ëª¨ì§€ì˜ ì´ë¦„ì„ ìŒì (:)으로 ê°ì‹¸ì„œ 커스텀 ì´ëª¨ì§€ë¥¼ 사용합니다." - search: "검색" - searchDescription: "주어진 키워드가 ìž…ë ¥ëœ ê²€ìƒ‰ì°½ì„ ë³´ì´ê²Œ 합니다." - flip: "플립" - flipDescription: "ë‚´ìš©ì„ ìƒí•˜ ë˜ëŠ” 좌우로 ë°˜ì „ì‹œí‚µë‹ˆë‹¤." - jelly: "ì• ë‹ˆë©”ì´ì…˜ (ì ¤ë¦¬)" - jellyDescription: "ì ¤ë¦¬ì²˜ëŸ¼ 탱글탱글한 ëŠë‚Œì˜ 효과를 ì¤ë‹ˆë‹¤." - tada: "ì• ë‹ˆë©”ì´ì…˜ (ì§ !)" - tadaDescription: "ì§ ! 하는 ëŠë‚Œì˜ 효과를 ì¤ë‹ˆë‹¤." - jump: "ì• ë‹ˆë©”ì´ì…˜(ì 프)" - jumpDescription: "íŽ„ì© ë›¸ 듯한 ëŠë‚Œì˜ 효과를 ì¤ë‹ˆë‹¤." - bounce: "ì• ë‹ˆë©”ì´ì…˜ (바운스)" - bounceDescription: "통통 튀는 ëŠë‚Œì˜ 효과를 ì¤ë‹ˆë‹¤." - shake: "ì• ë‹ˆë©”ì´ì…˜ (부들부들)" - shakeDescription: "부들부들 ë– ëŠ” ëŠë‚Œì˜ 효과를 ì¤ë‹ˆë‹¤." - twitch: "ì• ë‹ˆë©”ì´ì…˜ (ê²½ë ¨)" - twitchDescription: "격하게 í”들리는 ëŠë‚Œì˜ 효과를 ì¤ë‹ˆë‹¤." - spin: "ì• ë‹ˆë©”ì´ì…˜ (íšŒì „)" - spinDescription: "íšŒì „ 효과를 ì¤ë‹ˆë‹¤." - x2: "í¬ê²Œ" - x2Description: "ë‚´ìš©ì„ í¬ê²Œ 표시합니다." - x3: "ë” í¬ê²Œ" - x3Description: "ë‚´ìš©ì„ ë” í¬ê²Œ 표시합니다." - x4: "매우 í¬ê²Œ" - x4Description: "ë‚´ìš©ì„ ë§¤ìš° í¬ê²Œ 표시합니다." - blur: "í림" - blurDescription: "ë‚´ìš©ì´ í리게 보입니다. 마우스를 ìœ„ì— ì˜¬ë ¤ë‘ë©´ ë‚´ìš©ì´ ë³´ìž…ë‹ˆë‹¤." - font: "í°íŠ¸" - fontDescription: "ë‚´ìš©ì˜ ê¸€ê¼´ì„ ì§€ì •í• ìˆ˜ 있습니다." - rainbow: "무지개" - rainbowDescription: "ë‚´ìš©ì„ ë¬´ì§€ê°œë¡œ 표시합니다." - sparkle: "ë°˜ì§ë°˜ì§" - sparkleDescription: "ë°˜ì§ì´ëŠ” íŒŒí‹°í´ íš¨ê³¼ë¥¼ 추가합니다." - rotate: "íšŒì „" - rotateDescription: "ì§€ì •í•œ ê°ë„ë¡œ íšŒì „ì‹œí‚µë‹ˆë‹¤." - plain: "í‰ë¬¸" - plainDescription: "ì•ˆì— ìžˆëŠ” MFM êµ¬ë¬¸ì„ ëª¨ë‘ ë¬´ì‹œí•˜ê³ í‰ë¬¸ìœ¼ë¡œ 표시합니다." _instanceTicker: none: "ë³´ì´ì§€ ì•ŠìŒ" remote: "리모트 ìœ ì €ì—게만 ë³´ì´ê¸°" diff --git a/locales/lo-LA.yml b/locales/lo-LA.yml index cfda4e0e9e51e6222b6a42b1faa6e151120e78f9..263a7eb18c725fe76515a0c8f5eb1ceb61e64f08 100644 --- a/locales/lo-LA.yml +++ b/locales/lo-LA.yml @@ -187,11 +187,6 @@ file: "ໄຟລ໌" _email: _follow: title: "ໄດ້ຕິດຕາມທ່ານ" -_mfm: - mention: "ໄດ້àºà»ˆàº²àº§àº¡àº²" - quote: "ລວມຂà»à»‰àº„ວາມàºà»‰àº²àº‡àºàºµàº‡" - emoji: "àºàºµà»‚ມຈິà»àºšàºšàºàº³àº™àº»àº”ເàºàº‡" - search: "ຄົ້ນຫາ" _theme: keys: mention: "ໄດ້àºà»ˆàº²àº§àº¡àº²" diff --git a/locales/nl-NL.yml b/locales/nl-NL.yml index e99d49710dc3be5f702fa6294e034d4f18fc1f34..a05d106652d53a945e21c5b2274556f6e22ab29f 100644 --- a/locales/nl-NL.yml +++ b/locales/nl-NL.yml @@ -427,11 +427,6 @@ loggedInAsBot: "Momenteel als bot ingelogd" _email: _follow: title: "volgde jou" -_mfm: - mention: "Vermelding" - quote: "Quote" - emoji: "Maatwerk emoji" - search: "Zoeken" _theme: keys: mention: "Vermelding" diff --git a/locales/pl-PL.yml b/locales/pl-PL.yml index d8c7739f6ce4c94cadec41ed9cc522761224ecbf..0874dded9ca3bb93b4b3d0726b81684cab329316 100644 --- a/locales/pl-PL.yml +++ b/locales/pl-PL.yml @@ -461,7 +461,6 @@ youHaveNoGroups: "Nie masz żadnych grup" joinOrCreateGroup: "Uzyskaj zaproszenie do doÅ‚Ä…czenia do grupy lub utwórz wÅ‚asnÄ… grupÄ™." noHistory: "Brak historii" signinHistory: "Historia logowania" -disableAnimatedMfm: "WyÅ‚Ä…cz MFM z animacjÄ…" doing: "Przetwarzanie..." category: "Kategoria" tags: "Tagi" @@ -958,68 +957,6 @@ _nsfw: respect: "Ukrywaj media NSFW" ignore: "Nie ukrywaj mediów NSFW" force: "Ukrywaj wszystkie media" -_mfm: - cheatSheet: "ÅšciÄ…ga MFM" - intro: "MFM to jÄ™zyk skÅ‚adniowy wyjÄ…tkowy dla Misskey, który może być użyty w wielu miejscach. Tu znajdziesz listÄ™ wszystkich możliwych elementów skÅ‚adni MFM." - dummy: "Misskey rozszerza Å›wiat Fediwersum" - mention: "Wspomnij" - mentionDescription: "UżywajÄ…c znaku @ i nazwy użytkownika, możesz okreÅ›lić danego użytkownika." - hashtag: "Hashtag" - hashtagDescription: "UżywajÄ…c kratki i tekstu, możesz okreÅ›lić hashtag." - url: "Adres URL" - urlDescription: "Adresy URL mogÄ… być wyÅ›wietlane" - link: "OdnoÅ›nik" - linkDescription: "OkreÅ›lone części tekstu mogÄ… być wyÅ›wietlane jako adres URL." - bold: "Pogrubienie" - boldDescription: "Wyróżnia litery pogrubiajÄ…c je." - small: "MaÅ‚e" - smallDescription: "WyÅ›wietla treść jako maÅ‚Ä… i cienkÄ…." - center: "WyÅ›rodkowanie" - centerDescription: "WyÅ›rodkowuje zawartość." - inlineCode: "Kod (w wierszu)" - blockCode: "Kod (blok)" - blockCodeDescription: "WyÅ›wietla kod z podÅ›wietlanÄ… skÅ‚adniÄ… skÅ‚adajÄ…cy siÄ™ z wielu linii." - blockMath: "Matematyka (Blok)" - quote: "Cytuj" - quoteDescription: "WyÅ›wietla treść jako cytat." - emoji: "Niestandardowe emoji" - emojiDescription: "OtaczajÄ…c nazwÄ™ niestandardowego emoji dwukropkami, możesz użyć niestandardowego emoji." - search: "Szukaj" - searchDescription: "WyÅ›wietla pole wyszukiwania z wczeÅ›niej wpisanym tekstem." - flip: "Odwróć" - flipDescription: "Przerzuca treść poziomo lub pionowo." - jelly: "Animacja (Galaretka)" - jellyDescription: "Nadaje treÅ›ci galaretowatÄ… animacjÄ™." - tada: "Animation (Tada)" - tadaDescription: "Nadaje treÅ›ci animacjÄ™ podobnÄ… do \"Tada!\"." - jump: "Animacja (Skok)" - jumpDescription: "Nadaje treÅ›ci animacjÄ™ skakania." - bounce: "Animacja (Odbijanie)" - bounceDescription: "Nadaje treÅ›ci animacjÄ™ odbijania siÄ™." - shake: "Animacja (WstrzÄ…sanie)" - shakeDescription: "Nadaje treÅ›ci animacjÄ™ wstrzÄ…sania." - twitch: "Animacja (Drganie)" - twitchDescription: "Nadaje treÅ›ci mocno drgajÄ…cÄ… animacjÄ™." - spin: "Animacja (Obrót)" - spinDescription: "Nadaje treÅ›ci animacjÄ™ obracania." - x2: "Duże" - x2Description: "Czyni treść wiÄ™kszÄ…." - x3: "Bardzo duże" - x3Description: "Czyni treść jeszcze wiÄ™kszÄ…." - x4: "Ogromne" - x4Description: "Czyni treść jeszcze wiÄ™kszÄ… niż jeszcze wiÄ™ksza." - blur: "Rozmycie" - blurDescription: "Rozmywa treść. Zostanie wyraźnie wyÅ›wietlona po najechaniu." - font: "Czcionka" - fontDescription: "Wybiera czcionkÄ™ do wyÅ›wietlania treÅ›ci." - rainbow: "TÄ™cza" - rainbowDescription: "Sprawia, że zawartość pojawia siÄ™ w kolorach tÄ™czy." - sparkle: "Blask" - sparkleDescription: "Nadaje zawartoÅ›ci efekt lÅ›niÄ…cego brokatu." - rotate: "Obróć" - rotateDescription: "Obraca zawartość o okreÅ›lony kÄ…t." - plain: "Zwyczajny" - plainDescription: "WyÅ‚Ä…cza efekty wszystkich MFM zawartych w tym efekcie MFM." _instanceTicker: none: "Nigdy nie pokazuj" remote: "Pokaż dla zdalnych użytkowników" diff --git a/locales/pt-PT.yml b/locales/pt-PT.yml index 8eac5fee642518b5027289e25fb9d1b7e9f3183a..6ca41a395f6013909ff19d44bf88b5d6d2871fd4 100644 --- a/locales/pt-PT.yml +++ b/locales/pt-PT.yml @@ -475,11 +475,6 @@ file: "Ficheiros" _email: _follow: title: "Você tem um novo seguidor" -_mfm: - mention: "Menção" - quote: "Citar" - emoji: "Emoji personalizado" - search: "Buscar" _theme: keys: mention: "Menção" diff --git a/locales/ro-RO.yml b/locales/ro-RO.yml index f354801d5ced39f12bb71ed6787248e6ae745a9b..551652ef466f247261ace5ee702fa8766b8b95c0 100644 --- a/locales/ro-RO.yml +++ b/locales/ro-RO.yml @@ -455,7 +455,6 @@ youHaveNoGroups: "Nu ai niciun grup" joinOrCreateGroup: "PrimeÈ™te o invitaÈ›ie într-un grup sau creează unul nou." noHistory: "Nu există istoric" signinHistory: "Istoric autentificări" -disableAnimatedMfm: "Dezactivează MFM cu animaÈ›ii" doing: "Se procesează..." category: "Categorie" tags: "Etichete" @@ -655,11 +654,6 @@ _role: _email: _follow: title: "te-a urmărit" -_mfm: - mention: "MenÈ›iune" - quote: "Citează" - emoji: "Emoji personalizat" - search: "Caută" _theme: description: "Descriere" keys: diff --git a/locales/ru-RU.yml b/locales/ru-RU.yml index 26e9ad0e94996daad3fe14d9226f88211e85b1ec..1abd79c983589c7cb67f9e5c46ce779fad2b3b8d 100644 --- a/locales/ru-RU.yml +++ b/locales/ru-RU.yml @@ -462,7 +462,6 @@ youHaveNoGroups: "У Ð²Ð°Ñ Ð½ÐµÑ‚ ни одной группы" joinOrCreateGroup: "Получайте Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ Ð² группы или Ñоздавайте Ñвои ÑобÑтвенные" noHistory: "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð¿Ð¾ÐºÐ° пуÑта" signinHistory: "Журнал поÑещений" -disableAnimatedMfm: "Отключение анимированной разметки MFM" doing: "Ð’ процеÑÑе" category: "КатегориÑ" tags: "Метки" @@ -1309,72 +1308,6 @@ _nsfw: respect: "Скрывать Ñодержимое не Ð´Ð»Ñ Ð²Ñех" ignore: "Показывать Ñодержимое не Ð´Ð»Ñ Ð²Ñех" force: "Скрывать вообще вÑе файлы" -_mfm: - cheatSheet: "ПодÑказка по разметке MFM" - intro: "MFM — Ñзык Ð¾Ñ„Ð¾Ñ€Ð¼Ð»ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑта, который придуман Ñпециально Ð´Ð»Ñ Misskey и готов Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð¾ многих меÑтах. Ðа Ñтой Ñтранице Ñобраны и кратко изложены ÑпоÑобы его иÑпользовать." - dummy: "Misskey раÑширÑет границы ФедиверÑа." - mention: "Упоминание" - mentionDescription: "При помощи знака «Ñобака» перед именем можно упомÑнуть какого-нибудь пользователÑ." - hashtag: "Ð¥Ñштег" - hashtagDescription: "При помощи знака «решётка» перед Ñловом задаётÑÑ Ñ…Ñштег." - url: "ПроÑÑ‚Ð°Ñ ÑÑылка (URL)" - urlDescription: "СÑылки могут отображатьÑÑ Ð½ÐµÐ¿Ð¾ÑредÑтвенно." - link: "СÑылка Ñ Ð¿Ð¾ÑÑнением" - linkDescription: "Можно ÑÑылку оформить в виде произвольного текÑта." - bold: "Жирный шрифт" - boldDescription: "ВыделÑет текÑÑ‚, Ð´ÐµÐ»Ð°Ñ Ð±ÑƒÐºÐ²Ñ‹ жирнее." - small: "Мелкий шрифт" - smallDescription: "Делает текÑÑ‚ маленьким и незаметным." - center: "ВыровнÑÑ‚ÑŒ Ñлементы по центру" - centerDescription: "Так можно выровнÑÑ‚ÑŒ что-то по центру." - inlineCode: "Программа (в текÑте)" - inlineCodeDescription: "ПодÑвечивает фрагмент программы внутри Ñплошного текÑта." - blockCode: "Программа (блок)" - blockCodeDescription: "ОформлÑет текÑÑ‚ программы в виде отдельного блокоа. Он может ÑоÑтоÑÑ‚ÑŒ из множеÑтва Ñтрок." - inlineMath: "МатематичеÑкое выражение (в текÑте)" - inlineMathDescription: "ПозволÑет вÑтавлÑÑ‚ÑŒ математичеÑкие Ð²Ñ‹Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð²Ð½ÑƒÑ‚Ñ€ÑŒ текÑта при помощи Ñзыка KaTeX." - blockMath: "МатематичеÑкое выражение (блок)" - blockMathDescription: "ОформлÑет математичеÑкое выражение (KaTeX) на отдельной Ñтроке." - quote: "Цитата" - quoteDescription: "Так можно процитировать чей-то текÑÑ‚." - emoji: "СобÑтвенные Ñмодзи" - emojiDescription: "Можно вÑтавить Ñмодзи в текÑÑ‚, окружив название двоеточиÑми." - search: "ПоиÑк" - searchDescription: "Можно добавить форму Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка, Ñразу задав, что иÑкать." - flip: "Переворот" - flipDescription: "ПозволÑет отразить текÑÑ‚ зеркально по вертикали или горизонтали." - jelly: "ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¶ÐµÐ»Ðµ (шлёп-плёп)" - jellyDescription: "Ðапоминает горку джема, дёргающуюÑÑ Ð¾Ñ‚ шлепков." - tada: "ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ (та-дам!)" - tadaDescription: "ПолучаетÑÑ Ð½ÐµÑ‡Ñ‚Ð¾ выпрыгивающее, как бы крича: «а вот и Ñ!»" - jump: "ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ñ‹Ð¶ÐºÐ¾Ð² (прыг-Ñкок)" - jumpDescription: "Побуждает радоÑтно подпрыгивать." - bounce: "ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ñкоков (бум-бум)" - bounceDescription: "Ðто будет Ñкакать как мÑч." - shake: "ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ð´Ñ€Ð¾Ð¶Ð¸ (б-Ñ€-Ñ€-Ñ€)" - shakeDescription: "Такое дрожит, Ñловно от холода. Или от Ñтраха." - twitch: "ÐÐ½Ð¸Ð¼Ð°Ñ†Ð¸Ñ Ñ‚Ñ€ÑÑки" - twitchDescription: "ЗаÑтавлÑет Ñ‚Ñ€ÑÑтиÑÑŒ как одержимого" - spin: "Вращение" - spinDescription: "Так можно крутить Ñодержимое в разных направлениÑÑ…." - x2: "Крупный шрифт" - x2Description: "Увеличивает Ñодержимое." - x3: "Ещё крупнее" - x3Description: "Сильнее увеличивает Ñодержимое." - x4: "СовÑем крупно" - x4Description: "Увеличивает Ñодержимое ÑовÑем Ñильно." - blur: "Размытие" - blurDescription: "Размывает текÑÑ‚ до нечитаемоÑти, будто его помеÑтили за матовое Ñтекло. Ðаведение ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ Ð¼Ñ‹ÑˆÐ¸ на размытый текÑÑ‚ возвращает чёткоÑÑ‚ÑŒ." - font: "Шрифт" - fontDescription: "Так можно пиÑать произвольным шрифтом." - rainbow: "Радуга" - rainbowDescription: "ЗаÑтавлÑÑ‚ÑŒ Ñодержимое отображатьÑÑ Ð² цветах радуги." - sparkle: "ИÑкры" - sparkleDescription: "ДобавлÑет Ñффект иÑкрÑщихÑÑ Ñ‡Ð°Ñтиц." - rotate: "Повернуть" - rotateDescription: "Поворачивает на заданный угол." - plain: "Буквально" - plainDescription: "MFM внутри отключаетÑÑ, и текÑÑ‚ отображаетÑÑ ÐºÐ°Ðº еÑÑ‚ÑŒ" _instanceTicker: none: "Ðе показывать" remote: "Только Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… Ñайтов" diff --git a/locales/sk-SK.yml b/locales/sk-SK.yml index 369f1af36d63dfbbb6fcda3fb7d84daee1e64cf9..844243ffec07111ea34aeff6f74b322ddf02bc09 100644 --- a/locales/sk-SK.yml +++ b/locales/sk-SK.yml @@ -464,7 +464,6 @@ youHaveNoGroups: "Nemáte žiadne skupiny" joinOrCreateGroup: "Požiadajte o pozvanie do existujúcej skupiny alebo vytvorte novú." noHistory: "Žiadna história" signinHistory: "História prihlásenÃ" -disableAnimatedMfm: "Vypnúť MFM s animáciou" doing: "Pracujem..." category: "Kategórie" tags: "ZnaÄky" @@ -1013,72 +1012,6 @@ _nsfw: respect: "SkryÅ¥ NSFW médiá" ignore: "NeskrývaÅ¥ NSFW médiá" force: "SkryÅ¥ vÅ¡etky médiá" -_mfm: - cheatSheet: "MFM Cheatsheet" - intro: "MFM je Misskey exkluzÃvny znaÄkovacà jazyk, ktorý sa dá použÃvaÅ¥ na viacerých miestach. Tu môžete vidieÅ¥ zoznam vÅ¡etkej dostupnej MFM syntaxe." - dummy: "Misskey rozÅ¡iruje svet Fediverza" - mention: "Zmienka" - mentionDescription: "PoužÃvateľa spomeniete použÃtÃm zavináÄa a mena použÃvateľa" - hashtag: "Hashtag" - hashtagDescription: "Môžete zadaÅ¥ hashtag použitÃm mriežky a textu" - url: "URL" - urlDescription: "URL sa dajú zobraziÅ¥." - link: "Odkaz" - linkDescription: "Jednotlivé Äasti texty sa dajú zobraziÅ¥ ako URL." - bold: "TuÄné" - boldDescription: "Zvýraznà pÃsmená tým, že budú tuÄnejÅ¡ie." - small: "Malé" - smallDescription: "Zobrazà obsah malý a tenký." - center: "VystrediÅ¥ prvky" - centerDescription: "Zobrazà obsah v strede" - inlineCode: "Kód (inline)" - inlineCodeDescription: "Zobrazà kód so zvýraznenÃm syntaxe." - blockCode: "Kód (blok)" - blockCodeDescription: "Zobrazà viacriadkový kód so zvýraznenÃm syntaxe v bloku." - inlineMath: "Vzorec (inline)" - inlineMathDescription: "Zobrazà matematický vzorec (KaTeX) v riadku." - blockMath: "Vzorec (blok)" - blockMathDescription: "Zobrazà viacriadkový matematický vzorec (KaTeX) v bloku" - quote: "CitovaÅ¥" - quoteDescription: "Zobrazà obsah ako citát." - emoji: "Vlastné emoji" - emojiDescription: "PridanÃm dvojbodiek pred a za názov vlastnej emoji, sa dá zobraziÅ¥ vlastná emoji." - search: "HľadaÅ¥" - searchDescription: "Zobrazà vyhľadávacie pole so zadaným textom." - flip: "PreklopiÅ¥" - flipDescription: "Preklopà obsah horizontálne alebo vertikálne" - jelly: "Animácia (želé)" - jellyDescription: "Obsah sa bude hýbaÅ¥ ako želé." - tada: "Animácia (tadá)" - tadaDescription: "Obsah sa bude hýbaÅ¥ ako Tada!" - jump: "Animácia (skok)" - jumpDescription: "Obsah skoÄÃ." - bounce: "Animácia (odraz)" - bounceDescription: "Obsah sa bude odrážaÅ¥." - shake: "Animácia (trasenie)" - shakeDescription: "Obsah sa bude triasÅ¥." - twitch: "Animácia (myknutie)" - twitchDescription: "Obsahu dá animáciu silného trasenia." - spin: "Animácia (rotácia)" - spinDescription: "Obsahu pridá otáÄajúcu animáciu." - x2: "Veľký" - x2Description: "Zobrazà obsah väÄÅ¡Ã." - x3: "Veľmi veľký" - x3Description: "Zobrazà obsah eÅ¡te väÄÅ¡Ã." - x4: "Neuveriteľne veľký" - x4Description: "Zobrazà obsah eÅ¡te viac veľký než veľmi veľký." - blur: "Rozmazanie" - blurDescription: "Týmto efektom môže byÅ¥ obsah rozmazaný. Zaostrà sa keÄ ned neho prÃde kurzor." - font: "PÃsmo" - fontDescription: "Nastavà pÃsmo, ktorým sa zobrazà text." - rainbow: "Dúha" - rainbowDescription: "Zobrazà obsah vo farbách dúhy." - sparkle: "Trblietky" - sparkleDescription: "Obsahu dodá trblietajúci efekt." - rotate: "OtáÄaÅ¥" - rotateDescription: "OtoÄà obsah o urÄitý uhol." - plain: "ObyÄajné" - plainDescription: "Bez akejkoľvej syntaxe" _instanceTicker: none: "Nikdy nezobrazovaÅ¥" remote: "ZobraziÅ¥ pre vzdialených použÃvateľov" diff --git a/locales/sv-SE.yml b/locales/sv-SE.yml index 1abd0d194dfbeea435dfcf52586a470da6489237..184db2e907aaa8689fa8b0af7e295e260ec9e8ff 100644 --- a/locales/sv-SE.yml +++ b/locales/sv-SE.yml @@ -371,11 +371,6 @@ pushNotificationNotSupported: "Din webbläsare eller instans har inte stöd för _email: _follow: title: "följde dig" -_mfm: - mention: "Nämn" - quote: "Citat" - emoji: "Anpassa emoji" - search: "Sök" _channel: setBanner: "Välj banner" removeBanner: "Ta bort banner" diff --git a/locales/th-TH.yml b/locales/th-TH.yml index 010e32426c809f84af3ee296f6815f947fecb400..bea19c37069adf0ad793d0dc0c76c7fc26f3e307 100644 --- a/locales/th-TH.yml +++ b/locales/th-TH.yml @@ -465,7 +465,6 @@ youHaveNoGroups: "คุณยังไม่มีà¸à¸¥à¸¸à¹ˆà¸¡" joinOrCreateGroup: "รับเชิà¸à¹€à¸‚้าร่วมà¸à¸¥à¸¸à¹ˆà¸¡à¸«à¸£à¸·à¸à¸ªà¸£à¹‰à¸²à¸‡à¸à¸¥à¸¸à¹ˆà¸¡à¸‚à¸à¸‡à¸„ุณเà¸à¸‡à¹€à¸¥à¸¢à¸™à¸°" noHistory: "ไม่มีรายà¸à¸²à¸£" signinHistory: "ประวัติà¸à¸²à¸£à¹€à¸‚้าสู่ระบบ" -disableAnimatedMfm: "ปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™ MFM ด้วยà¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¹ˆà¸™" doing: "à¸à¸³à¸¥à¸±à¸‡à¸›à¸£à¸°à¸¡à¸§à¸¥à¸œà¸¥......" category: "หมวดหมู่" tags: "à¹à¸—็à¸" @@ -1326,72 +1325,6 @@ _nsfw: respect: "ซ่à¸à¸™à¸ªà¸·à¹ˆà¸ NSFW" ignore: "à¸à¸¢à¹ˆà¸²à¸‹à¹ˆà¸à¸™à¸ªà¸·à¹ˆà¸ NSFW" force: "ซ่à¸à¸™à¸ªà¸·à¹ˆà¸à¸—ั้งหมด" -_mfm: - cheatSheet: "โค้ด MFM Cheat Sheet" - intro: "MFM เป็นภาษามาร์à¸à¸à¸±à¸›à¸žà¸´à¹€à¸¨à¸©à¹€à¸‰à¸žà¸²à¸°à¸‚à¸à¸‡ Misskey ที่สามารถใช้ได้ในหลายที่ คุณยังสามารถดูรายà¸à¸²à¸£à¹„วยาà¸à¸£à¸“์ MFM ที่มีà¸à¸¢à¸¹à¹ˆà¸—ั้งหมดได้ที่นี่นะ" - dummy: "Misskey ขยายโลà¸à¸‚à¸à¸‡ Fediverse" - mention: "à¸à¸¥à¹ˆà¸²à¸§à¸–ึง" - mentionDescription: "คุณสามารถระบุผู้ใช้โดยใช้ At-Symbol à¹à¸¥à¸°à¸Šà¸·à¹ˆà¸à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¹„ด้นะ" - hashtag: "à¹à¸®à¸Šà¹à¸—็à¸" - hashtagDescription: "คุณสามารถระบุชื่à¸à¹à¸®à¸Šà¹à¸—็à¸à¹„ด้โดยใช้เครื่à¸à¸‡à¸«à¸¡à¸²à¸¢à¸•à¸±à¸§à¹€à¸¥à¸‚à¹à¸¥à¸°à¸‚้à¸à¸„วามได้นะ" - url: "URL" - urlDescription: "สามารถà¹à¸ªà¸”ง URL ได้นะ" - link: "ลิงà¸à¹Œ" - linkDescription: "เจาะจงเฉพาะ ส่วนขà¸à¸‡à¸‚้à¸à¸„วามที่สามารถà¹à¸ªà¸”งเป็น URL ได้" - bold: "ตัวหนา" - boldDescription: "ไฮไลท์ตัวà¸à¸±à¸à¸©à¸£à¹‚ดยทำให้หนาขึ้น" - small: "ขนาดเล็à¸" - smallDescription: "à¹à¸ªà¸”งผลเนื้à¸à¸«à¸²à¸‚นาดเล็à¸à¹à¸¥à¸°à¸šà¸²à¸‡" - center: "เซ็นเตà¸à¸£à¹Œ" - centerDescription: "à¹à¸ªà¸”งผลเนื้à¸à¸«à¸²à¹€à¸›à¹‡à¸™à¸¨à¸¹à¸™à¸¢à¹Œà¸à¸¥à¸²à¸‡" - inlineCode: "โค้ด (à¸à¸´à¸™à¹„ลน์)" - inlineCodeDescription: "à¹à¸ªà¸”งผลà¸à¸²à¸£à¹€à¸™à¹‰à¸™à¹„วยาà¸à¸£à¸“์à¹à¸šà¸šà¸à¸´à¸™à¹„ลน์สำหรับโค้ด (โปรà¹à¸à¸£à¸¡)" - blockCode: "โค้ด (บล็à¸à¸)" - blockCodeDescription: "à¹à¸ªà¸”งผลà¸à¸²à¸£à¹€à¸™à¹‰à¸™à¹„วยาà¸à¸£à¸“์สำหรับโค้ดหลายบรรทัด (โปรà¹à¸à¸£à¸¡) ในบล็à¸à¸" - inlineMath: "คณิต (à¸à¸´à¸™à¹„ลน์)" - inlineMathDescription: "à¹à¸ªà¸”งผลสูตรคณิต (KaTeX) ในบรรทัด" - blockMath: "คณิต (บล็à¸à¸)" - blockMathDescription: "à¹à¸ªà¸”งผลสูตรคณิตหลายบรรทัด (KaTeX) ในบล็à¸à¸" - quote: "à¸à¹‰à¸²à¸‡à¸„ำพูด" - quoteDescription: "à¹à¸ªà¸”งผลเนื้à¸à¸«à¸²à¹€à¸›à¹‡à¸™à¹ƒà¸šà¹€à¸ªà¸™à¸à¸£à¸²à¸„า" - emoji: "à¸à¸³à¸«à¸™à¸”à¸à¸µà¹‚มจิเà¸à¸‡" - emojiDescription: "โดยล้à¸à¸¡à¸£à¸à¸šà¸Šà¸·à¹ˆà¸à¸à¸µà¹‚มจิที่à¸à¸³à¸«à¸™à¸”เà¸à¸‡à¸”้วยเครื่à¸à¸‡à¸«à¸¡à¸²à¸¢à¸—วิภาค จะสามารถà¹à¸ªà¸”งผลà¸à¸µà¹‚มจิที่à¸à¸³à¸«à¸™à¸”เà¸à¸‡à¹„ด้" - search: "ค้นหา" - searchDescription: "à¹à¸ªà¸”งผลà¸à¸¥à¹ˆà¸à¸‡à¸„้นหาพร้à¸à¸¡à¸à¸±à¸šà¸‚้à¸à¸„วามที่ป้à¸à¸™à¹„ว้ล่วงหน้า" - flip: "พลิà¸" - flipDescription: "พลิà¸à¹€à¸™à¸·à¹‰à¸à¸«à¸²à¹ƒà¸™à¹à¸™à¸§à¸™à¸à¸™à¸«à¸£à¸·à¸à¹à¸™à¸§à¸•à¸±à¹‰à¸‡" - jelly: "à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¹ˆà¸™ (เยลลี่)" - jellyDescription: "ให้เนื้à¸à¸«à¸²à¹€à¸›à¹‡à¸™à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¹ˆà¸™à¹€à¸«à¸¡à¸·à¸à¸™à¹€à¸¢à¸¥à¸¥à¸µà¹ˆ" - tada: "à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¹ˆà¸™ (ธาดา)" - tadaDescription: "ให้เนื้à¸à¸«à¸²à¹€à¸›à¹‡à¸™à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¹ˆà¸™à¹€à¸«à¸¡à¸·à¸à¸™ \"ทาด้า!\"" - jump: "à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¹ˆà¸™ (à¸à¸£à¸°à¹‚ดด)" - jumpDescription: "ให้เนื้à¸à¸«à¸²à¸¡à¸µà¸ าพเคลื่à¸à¸™à¹„หวà¹à¸šà¸šà¸à¸£à¸°à¹‚ดด" - bounce: "à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¹ˆà¸™ (เด้ง)" - bounceDescription: "ให้เนื้à¸à¸«à¸²à¸¡à¸µà¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¹ˆà¸™à¹€à¸”้ง" - shake: "à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¹ˆà¸™ (เขย่า)" - shakeDescription: "ให้เนื้à¸à¸«à¸²à¸¡à¸µà¸ าพเคลื่à¸à¸™à¹„หวสั่น" - twitch: "à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¹ˆà¸™ (Twitch)" - twitchDescription: "ให้เนื้à¸à¸«à¸²à¸¡à¸µà¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¹ˆà¸™à¸à¸£à¸°à¸•à¸¸à¸à¸à¸¢à¹ˆà¸²à¸‡à¹à¸£à¸‡" - spin: "à¹à¸à¸™à¸´à¹€à¸¡à¸Šà¸±à¹ˆà¸™ (สปิน)" - spinDescription: "ให้เนื้à¸à¸«à¸²à¹€à¸›à¹‡à¸™à¸ าพเคลื่à¸à¸™à¹„หวà¹à¸šà¸šà¸«à¸¡à¸¸à¸™" - x2: "ขนาดใหà¸à¹ˆ" - x2Description: "à¹à¸ªà¸”งเนื้à¸à¸«à¸²à¸—ี่ใหà¸à¹ˆà¸‚ึ้น" - x3: "ใหà¸à¹ˆà¸¡à¸²à¸" - x3Description: "à¹à¸ªà¸”งเนื้à¸à¸«à¸²à¸à¸µà¹€à¸§à¹‰à¸™à¸—์ที่ใหà¸à¹ˆà¸‚ึ้น" - x4: "ใหà¸à¹ˆà¸à¸¢à¹ˆà¸²à¸‡à¹„ม่น่าเชื่à¸" - x4Description: "à¹à¸ªà¸”งผลเนื้à¸à¸«à¸²à¸—ี่ใหà¸à¹ˆà¸à¸§à¹ˆà¸²à¹ƒà¸«à¸à¹ˆà¸à¸§à¹ˆà¸²à¸‚นาดใหà¸à¹ˆ" - blur: "เบลà¸" - blurDescription: "เบลà¸à¹€à¸™à¸·à¹‰à¸à¸«à¸² จะà¹à¸ªà¸”งผลà¸à¸¢à¹ˆà¸²à¸‡à¸Šà¸±à¸”เจนต่à¸à¹€à¸¡à¸·à¹ˆà¸à¸§à¸²à¸‡à¹€à¸¡à¸²à¸ªà¹Œà¹€à¸«à¸™à¸·à¸" - font: "ตัวà¸à¸±à¸à¸©à¸£" - fontDescription: "ตั้งค่าตัวà¸à¸±à¸à¸©à¸£à¹€à¸žà¸·à¹ˆà¸à¹à¸ªà¸”งเนื้à¸à¸«à¸²à¹ƒà¸™" - rainbow: "สายรุ้ง" - rainbowDescription: "ทำให้เนื้à¸à¸«à¸²à¸™à¸±à¹‰à¸™à¸›à¸£à¸²à¸à¸à¹€à¸›à¹‡à¸™à¸ªà¸µà¸£à¸¸à¹‰à¸‡" - sparkle: "à¸à¸¥à¸´à¸•à¹€à¸•à¸à¸£à¹Œ" - sparkleDescription: "ให้เนื้à¸à¸«à¸²à¸™à¸±à¹‰à¸™à¸¡à¸µà¹€à¸à¸Ÿà¹€à¸Ÿà¸à¸•à¹Œà¹à¸šà¸šà¸à¸™à¸¸à¸ าคประà¸à¸²à¸¢" - rotate: "หมุนหน้าจà¸" - rotateDescription: "เปลี่ยนเนื้à¸à¸«à¸²à¸•à¸²à¸¡à¸”้วยมุมที่ระบุไว้" - plain: "เรียบง่าย" - plainDescription: "ปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹€à¸à¸Ÿà¹€à¸Ÿà¸à¸•à¹Œà¸‚à¸à¸‡ MFM ทั้งหมดที่มีà¸à¸¢à¸¹à¹ˆà¹ƒà¸™à¹€à¸à¸Ÿà¹€à¸Ÿà¸à¸•à¹Œ MFM นี้" _instanceTicker: none: "ไม่ต้à¸à¸‡à¹à¸ªà¸”ง" remote: "à¹à¸ªà¸”งสำหรับผู้ใช้ระยะไà¸à¸¥" diff --git a/locales/tr-TR.yml b/locales/tr-TR.yml index ebcdfa5bfbf0b61714e40e407fb5a28603f09b05..7bd8188a48f5be6cd209a619c07481d1fe35fca3 100644 --- a/locales/tr-TR.yml +++ b/locales/tr-TR.yml @@ -48,8 +48,6 @@ smtpUser: "Kullanıcı Adı" smtpPass: "Åžifre" user: "Kullanıcı" searchByGoogle: "Arama" -_mfm: - search: "Arama" _sfx: notification: "Bildirim" _widgets: diff --git a/locales/ug-CN.yml b/locales/ug-CN.yml index a7504542d073d948d8a367db430e7d09dc44ff4b..65ef84125907178fa6b7d801d4f33b981c97e0a7 100644 --- a/locales/ug-CN.yml +++ b/locales/ug-CN.yml @@ -2,5 +2,3 @@ _lang_: "ياپونچە" search: "ئىزدەش" searchByGoogle: "ئىزدەش" -_mfm: - search: "ئىزدەش" diff --git a/locales/uk-UA.yml b/locales/uk-UA.yml index 68e949f92031011eb5f6a43271ca07cc78b0bd02..2305fcab1b4e0275ba4258145e7b78e11bd05f12 100644 --- a/locales/uk-UA.yml +++ b/locales/uk-UA.yml @@ -461,7 +461,6 @@ youHaveNoGroups: "Ðемає груп" joinOrCreateGroup: "Отримуйте Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ Ð´Ð¾ груп або Ñтворюйте Ñвої влаÑні групи." noHistory: "ІÑÑ‚Ð¾Ñ€Ñ–Ñ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ" signinHistory: "ІÑÑ‚Ð¾Ñ€Ñ–Ñ Ð²Ñ…Ð¾Ð´Ñ–Ð²" -disableAnimatedMfm: "Відключити анімації MFM" doing: "ВиконуєтьÑÑ" category: "КатегоріÑ" tags: "Теги" @@ -1191,65 +1190,6 @@ _nsfw: respect: "Приховувати NSFW медіа" ignore: "Ðе приховувати NSFW медіа" force: "Приховувати вÑÑ– медіа файли" -_mfm: - cheatSheet: " Довідка MFM" - intro: "MFM це екÑклюзивна мова розмітки текÑту в Misskey, Ñку можна викориÑтовувати в багатьох міÑцÑÑ…. Тут ви можете переглÑнути приклади Ñ—Ñ— ÑинтакÑиÑу." - dummy: "Misskey розширює Ñвіт ФедіверÑу" - mention: "Згадка" - mentionDescription: "За допомогою знака \"@\" перед ім'Ñм можна згадати конкретного кориÑтувача." - hashtag: "Хештеґ" - hashtagDescription: "За допомогою знака \"решітка\" перед Ñловом задаєтьÑÑ Ñ…ÐµÑˆÑ‚ÐµÐ³." - url: "URL" - urlDescription: "ВідображаютьÑÑ URL-адреÑи." - link: "ПоÑиланнÑ" - linkDescription: "Окремі чаÑтини текÑту можуть міÑтити поÑиланнÑ" - bold: "Жирний шрифт" - boldDescription: "ВиділÑÑ” літери, роблÑчи Ñ—Ñ… товще" - small: "Дрібний шрифт" - smallDescription: "Робить текÑÑ‚ маленьким Ñ– тонким" - center: "По центру" - centerDescription: "Показує вміÑÑ‚ у центрі" - inlineCode: "Код (у Ñ€Ñдку)" - inlineCodeDescription: "Показує фрагмент текÑту у Ñ€Ñдку Ñк програмний код" - blockCode: "Код (блок)" - blockCodeDescription: "Показує кілька Ñ€Ñдків текÑту Ñк блок програмного кода" - inlineMath: "Формула (у Ñ€Ñдку)" - inlineMathDescription: "Ð’Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð¼Ð°Ñ‚ÐµÐ¼Ð°Ñ‚Ð¸Ñ‡Ð½Ð¸Ñ… формул (KaTeX) у Ñ€Ñдку" - blockMath: "Формули (блок)" - blockMathDescription: "Відображати багаторÑдкові формули (KaTeX) блоками" - quote: "Цитата" - quoteDescription: "Відображає зміÑÑ‚ Ñк цитату." - emoji: "КаÑтомні емоджі" - emojiDescription: "Щоб показати нетиповий емоджі, потрібно ввеÑти його назву в двокрапках." - search: "Пошук" - searchDescription: "Відображає вікно пошуку з попередньо введеним текÑтом" - flip: "Перевернути" - flipDescription: "Віддзеркалює вміÑÑ‚ по горизонталі або вертикалі" - jelly: "ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ (желе)" - jellyDescription: "Створює желеподібну анімацію" - tada: "ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ (Тада!)" - tadaDescription: "Створює анімацію з відчуттÑм \"Тада!\"" - jump: "ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ (Ñтрибки)" - jumpDescription: "Показує Ñтрибаючу анімацію" - bounce: "ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ (пружина)" - bounceDescription: "Ðадає вміÑту Ñтрибаючу анімацію." - shake: "ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ (Shake)" - shakeDescription: "Ðадає вміÑту тремтливу анімацію." - twitch: "ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ (Twitch)" - spin: "ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ (Spin)" - x2: "Великий" - x2Description: "Показує контент збільшеним." - x3: "Дуже великий" - x3Description: "Показує контент ще більшим." - x4: "Ðадзвичайно великий" - x4Description: "Показує контент надзвичайно великим." - blur: "РозмиттÑ" - blurDescription: "Цей ефект зробить контент розмитим. Контент можна зробити чітким, Ñкщо навеÑти на нього вказівник миші." - font: "Шрифт" - fontDescription: "Ð’Ñтановлює шрифт Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚ÐµÐ½Ñ‚Ñƒ." - rotate: "Обертати" - plain: "Звичайний" - plainDescription: "Деактивує вÑÑ– ефекти MFM, що міÑÑ‚ÑÑ‚ÑŒÑÑ Ð² цьому ефекті MFM." _instanceTicker: none: "Ðе відображати" remote: "Відображати Ð´Ð»Ñ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¸Ñ… кориÑтувачів" diff --git a/locales/vi-VN.yml b/locales/vi-VN.yml index 26527c74c3a54f20c1452a3c4e6094330d051c04..594052dfce6988af62e831ed4a8f7fada3ffc729 100644 --- a/locales/vi-VN.yml +++ b/locales/vi-VN.yml @@ -457,7 +457,6 @@ youHaveNoGroups: "Không có nhóm nà o" joinOrCreateGroup: "Tham gia hoặc tạo má»™t nhóm má»›i." noHistory: "Không có dữ liệu" signinHistory: "Lịch sỠđăng nháºp" -disableAnimatedMfm: "Tắt MFM vá»›i chuyển Ä‘á»™ng" doing: "Äang xá» lý..." category: "Phân loại" tags: "Thẻ" @@ -992,72 +991,6 @@ _nsfw: respect: "Ẩn ná»™i dung NSFW" ignore: "Hiện ná»™i dung NSFW" force: "Ẩn má»i media" -_mfm: - cheatSheet: "MFM Cheatsheet" - intro: "MFM là ngôn ngữ phát triển Ä‘á»™c quyá»n của Misskey có thể được sá» dụng ở nhiá»u nÆ¡i. Tại đây bạn có thể xem danh sách tất cả các cú pháp MFM có sẵn." - dummy: "Misskey mở rá»™ng thế giá»›i Fediverse" - mention: "Nhắc đến" - mentionDescription: "Bạn có thể nhắc đến ai đó bằng cách sá» dụng @tên ngÆ°á»i dùng." - hashtag: "Hashtag" - hashtagDescription: "Bạn có thể tạo má»™t hashtag bằng #chữ hoặc #số." - url: "URL" - urlDescription: "Những URL có thể hiển thị." - link: "ÄÆ°á»ng dẫn" - linkDescription: "Các phần cụ thể của văn bản có thể được hiển thị dÆ°á»›i dạng URL." - bold: "In Ä‘áºm" - boldDescription: "Nổi báºt các chữ cái bằng cách là m chúng dà y hÆ¡n." - small: "Nhá»" - smallDescription: "Hiển thị ná»™i dung nhá» và má»ng." - center: "Giữa" - centerDescription: "Hiển thị ná»™i dung căn giữa." - inlineCode: "Mã (Trong dòng)" - inlineCodeDescription: "Hiển thị tô sáng cú pháp trong dòng cho mã (chÆ°Æ¡ng trình)." - blockCode: "Mã (Khối)" - blockCodeDescription: "Hiển thị tô sáng cú pháp cho mã nhiá»u dòng (chÆ°Æ¡ng trình) trong má»™t khối." - inlineMath: "Toán há»c (Trong dòng)" - inlineMathDescription: "Hiển thị công thức toán (KaTeX) trong dòng" - blockMath: "Toán há»c (Khối)" - blockMathDescription: "Hiển thị công thức toán há»c nhiá»u dòng (KaTeX) trong má»™t khối" - quote: "TrÃch dẫn" - quoteDescription: "Hiển thị ná»™i dung dạng lá»i trÃch dạng." - emoji: "Tùy chỉnh emoji" - emojiDescription: "Hiển thị emoji vá»›i cú pháp :tên emoji:" - search: "Tìm kiếm" - searchDescription: "Hiển thị há»™p tìm kiếm vá»›i văn bản được nháºp trÆ°á»›c." - flip: "Láºt" - flipDescription: "Láºt ná»™i dung theo chiá»u ngang hoặc chiá»u dá»c." - jelly: "Chuyển Ä‘á»™ng (Thạch rau câu)" - jellyDescription: "Cho phép ná»™i dung chuyển Ä‘á»™ng giống nhÆ° thạch rau câu." - tada: "Chuyển Ä‘á»™ng (Tada)" - tadaDescription: "Cho phép ná»™i dung chuyển Ä‘á»™ng kiểu \"Tada!\"." - jump: "Chuyển Ä‘á»™ng (Nhảy múa)" - jumpDescription: "Cho phép ná»™i dung chuyển Ä‘á»™ng nhảy nhót." - bounce: "Chuyển Ä‘á»™ng (Cà tÆ°ng)" - bounceDescription: "Cho phép ná»™i dung chuyển Ä‘á»™ng cà tÆ°ng." - shake: "Chuyển Ä‘á»™ng (Rung)" - shakeDescription: "Cho phép ná»™i dung chuyển Ä‘á»™ng rung lắc." - twitch: "Chuyển Ä‘á»™ng (Co rút)" - twitchDescription: "Cho phép ná»™i dung chuyển Ä‘á»™ng co rút." - spin: "Chuyển Ä‘á»™ng (Xoay tÃt)" - spinDescription: "Cho phép ná»™i dung chuyển Ä‘á»™ng xoay tÃt." - x2: "LÆ¡Ìn" - x2Description: "Hiển thị ná»™i dung cỡ lá»›n hÆ¡n." - x3: "Rất lá»›n" - x3Description: "Hiển thị ná»™i dung cỡ lá»›n hÆ¡n nữa." - x4: "Khổng lồ" - x4Description: "Hiển thị ná»™i dung cỡ khổng lồ." - blur: "Là m má»" - blurDescription: "Là m má» ná»™i dung. Nó sẽ được hiển thị rõ rà ng khi di chuá»™t qua." - font: "Phông chữ" - fontDescription: "Chá»n phông chữ để hiển thị ná»™i dung." - rainbow: "Cầu vồng" - rainbowDescription: "Là m cho ná»™i dung hiển thị vá»›i mà u sắc cầu vồng." - sparkle: "Lấp lánh" - sparkleDescription: "Là m cho ná»™i dung hiệu ứng hạt lấp lánh." - rotate: "Xoay" - rotateDescription: "Xoay ná»™i dung theo má»™t góc cụ thể." - plain: "ÄÆ¡n giản" - plainDescription: "Vô hiệu hóa má»i hiệu ứng MFM chứa trong hiệu ứng MFM nà y." _instanceTicker: none: "Không hiển thị" remote: "Hiện cho ngÆ°á»i dùng từ máy chủ khác" diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index a1081588823d6978456712360389784eb22586b7..16b824b97517518cff7aff89b7124ccb19da2482 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -467,7 +467,6 @@ youHaveNoGroups: "没有群组" joinOrCreateGroup: "è¯·åŠ å…¥ä¸€ä¸ªçŽ°æœ‰çš„ç¾¤ç»„ï¼Œæˆ–è€…åˆ›å»ºæ–°ç¾¤ç»„ã€‚" noHistory: "没有历å²è®°å½•" signinHistory: "登录历å²" -disableAnimatedMfm: "ç¦ç”¨MFM动画" doing: "æ£åœ¨è¿›è¡Œ" category: "类别" tags: "æ ‡ç¾" @@ -1330,72 +1329,6 @@ _nsfw: respect: "éšè—æ•æ„Ÿå†…容" ignore: "ä¸éšè—æ•æ„Ÿå†…容" force: "总是éšè—内容" -_mfm: - cheatSheet: "MFM代ç 速查表" - intro: "MFM是一ç§åœ¨Misskeyä¸çš„å„个ä½ç½®ä½¿ç”¨çš„ä¸“ç”¨æ ‡è®°è¯è¨€ã€‚在这里您å¯ä»¥çœ‹åˆ°MFMä¸å¯ç”¨çš„è¯æ³•åˆ—表。" - dummy: "通过Misskey扩展è”邦宇宙的世界" - mention: "æåŠ" - mentionDescription: "å¯ä»¥ä½¿ç”¨ @+用户å æ¥æŒ‡ç¤ºç‰¹å®šç”¨æˆ·" - hashtag: "è¯é¢˜æ ‡ç¾" - hashtagDescription: "å¯ä»¥ä½¿ç”¨äº•å·+æ–‡å—æ¥è¡¨ç¤ºè¯é¢˜æ ‡ç¾ã€‚" - url: "URL" - urlDescription: "å¯ä»¥è¡¨ç¤ºURL地å€ã€‚" - link: "链接" - linkDescription: "å¯ä»¥å°†éƒ¨åˆ†æ–‡å—å’ŒURLå…³è”èµ·æ¥ã€‚" - bold: "粗体" - boldDescription: "å¯ä»¥å°†æ–‡å—显示为粗体æ¥è¡¨ç¤ºå¼ºè°ƒã€‚" - small: "缩å°" - smallDescription: "å¯ä»¥ä½¿å†…容文å—å˜å°ã€å˜æ·¡ã€‚" - center: "å±…ä¸" - centerDescription: "å¯ä»¥å°†å†…容居ä¸æ˜¾ç¤ºã€‚" - inlineCode: "代ç (内嵌)" - inlineCodeDescription: "将文å—ä¸çš„程åºä»£ç è¯æ³•é«˜äº®æ˜¾ç¤ºã€‚" - blockCode: "代ç (å—)" - blockCodeDescription: "è¯æ³•é«˜äº®æ˜¾ç¤ºæ•´å—程åºä»£ç 。" - inlineMath: "æ•°å¦å…¬å¼(内嵌)" - inlineMathDescription: "显示内嵌的KaTexå…¬å¼ã€‚" - blockMath: "æ•°å¦å…¬å¼(å—)" - blockMathDescription: "显示整å—的多行KaTexæ•°å¦å…¬å¼ã€‚" - quote: "引用" - quoteDescription: "å¯ä»¥ç”¨æ¥è¡¨ç¤ºå¼•ç”¨çš„内容。" - emoji: "自定义表情符å·" - emojiDescription: "å¯ä»¥å°†è‡ªå®šä¹‰è¡¨æƒ…符å·ä½¿ç”¨å†’å·æ‹¬èµ·æ¥ï¼Œå°±å¯ä»¥æ˜¾ç¤ºè‡ªå®šä¹‰è¡¨æƒ…符å·äº†ã€‚" - search: "æœç´¢" - searchDescription: "显示å«æœ‰æœç´¢å†…容示例的æœç´¢æ¡†ã€‚" - flip: "翻转" - flipDescription: "将内容上下或左å³ç¿»è½¬ã€‚" - jelly: "动画(果冻)" - jellyDescription: "æ˜¾ç¤ºæžœå†»ä¸€æ ·çš„åŠ¨ç”»æ•ˆæžœã€‚" - tada: "动画(锵锵)" - tadaDescription: "显示\"锵锵ï¼\"的动画效果。" - jump: "动画(跳动)" - jumpDescription: "显示跳动的动画效果。" - bounce: "动画(弹性)" - bounceDescription: "æ˜¾ç¤ºå¼¹æ€§ä¸€æ ·çš„åŠ¨ç”»æ•ˆæžœã€‚" - shake: "动画(摇晃)" - shakeDescription: "显示摇晃的动画效果。" - twitch: "动画(颤抖)" - twitchDescription: "显示强烈颤抖的动画效果。" - spin: "动画(旋转)" - spinDescription: "显示旋转的动画效果。" - x2: "大" - x2Description: "以大尺寸显示内容。" - x3: "éžå¸¸å¤§" - x3Description: "以更大尺寸显示内容。" - x4: "最大" - x4Description: "以最大尺寸显示内容。" - blur: "模糊" - blurDescription: "äº§ç”Ÿæ¨¡ç³Šæ•ˆæžœã€‚å°†é¼ æ ‡æŒ‡é’ˆæ”¾åœ¨ä¸Šé¢å³å¯å°†å†…容显示出æ¥ã€‚" - font: "å—体" - fontDescription: "å¯ä»¥è®¾ç½®å†…容所使用的å—体。" - rainbow: "彩虹" - rainbowDescription: "用彩虹色æ¥æ˜¾ç¤ºå†…容。" - sparkle: "闪光" - sparkleDescription: "æ·»åŠ å‘光粒å效果。" - rotate: "旋转" - rotateDescription: "旋转指定的角度。" - plain: "简æ´" - plainDescription: "ç¦ç”¨æ‰€æœ‰å†…部è¯æ³•ã€‚" _instanceTicker: none: "ä¸æ˜¾ç¤º" remote: "仅远程用户" diff --git a/locales/zh-TW.yml b/locales/zh-TW.yml index 2e1787e7ae702f74813d98646c93f9f79921c647..ac0e38cf0c3faee746997d9e79dbbce66922c4f4 100644 --- a/locales/zh-TW.yml +++ b/locales/zh-TW.yml @@ -467,7 +467,6 @@ youHaveNoGroups: "找ä¸åˆ°ç¾¤çµ„" joinOrCreateGroup: "è«‹åŠ å…¥ç¾æœ‰ç¾¤çµ„,或創建新群組。" noHistory: "沒有æ·å²ç´€éŒ„" signinHistory: "登入æ·å²" -disableAnimatedMfm: "ç¦ç”¨MFMå‹•ç•«" doing: "æ£åœ¨é€²è¡Œ" category: "類別" tags: "標籤" @@ -1330,72 +1329,6 @@ _nsfw: respect: "éš±è—æ•æ„Ÿå…§å®¹" ignore: "ä¸éš±è—æ•æ„Ÿå…§å®¹" force: "éš±è—所有內容" -_mfm: - cheatSheet: "MFM代碼å°æŠ„" - intro: "MFM是Misskey專用的標記語言,å¯ä»¥åœ¨Misskeyä¸çš„å„個ä½ç½®ä½¿ç”¨ã€‚ 您å¯ä»¥é€™è£çœ‹åˆ°MFMå¯ç”¨èªžæ³•åˆ—表。" - dummy: "Misskey拓展了Fediverse的世界" - mention: "æåŠ" - mentionDescription: "é€éŽ @+用戶å 來標示特定使用者。" - hashtag: "#tag" - hashtagDescription: "å¯ä»¥ä½¿ç”¨\"#\"ç¬¦è™Ÿå¾ŒåŠ æ–‡å—表示話題標籤。" - url: "URL" - urlDescription: "å¯ä»¥å±•ç¤ºURLä½å€ã€‚" - link: "éˆæŽ¥" - linkDescription: "您å¯ä»¥å°‡ç‰¹å®šç¯„åœçš„æ–‡ç« èˆ‡ URL 相關è¯ã€‚ " - bold: "ç²—é«”" - boldDescription: "å¯ä»¥å°‡æ–‡å—顯示为粗體æ¥å¼·èª¿ã€‚" - small: "縮å°" - smallDescription: "å¯ä»¥ä½¿å…§å®¹æ–‡å—變å°ã€è®Šæ·¡ã€‚" - center: "ç½®ä¸" - centerDescription: "å¯ä»¥å°‡å…§å®¹ç½®ä¸é¡¯ç¤ºã€‚" - inlineCode: "程å¼ç¢¼(内嵌)" - inlineCodeDescription: "在行內用高亮度顯示,例如程å¼ç¢¼èªžæ³•ã€‚" - blockCode: "程å¼ç¢¼(å€å¡Š)" - blockCodeDescription: "在å€å¡Šä¸ç”¨é«˜äº®åº¦é¡¯ç¤ºï¼Œä¾‹å¦‚複數行的程å¼ç¢¼èªžæ³•ã€‚" - inlineMath: "數å¸å…¬å¼(內嵌)" - inlineMathDescription: "顯示內嵌的KaTex數å¸å…¬å¼ã€‚" - blockMath: "數å¸å…¬å¼(方塊)" - blockMathDescription: "以å€å¡Šé¡¯ç¤ºè¤‡æ•¸è¡Œçš„KaTex數å¸å¼ã€‚" - quote: "引用" - quoteDescription: "å¯ä»¥ç”¨ä¾†è¡¨ç¤ºå¼•ç”¨çš„内容。" - emoji: "自訂表情符號" - emojiDescription: "您å¯ä»¥é€šéŽå°‡è‡ªå®šç¾©è¡¨æƒ…符號å稱括在冒號ä¸ä¾†é¡¯ç¤ºè‡ªå®šç¾©è¡¨æƒ…符號。 " - search: "æœå°‹" - searchDescription: "您å¯ä»¥é¡¯ç¤ºæ‰€è¼¸å…¥çš„æœç´¢æ¡†ã€‚" - flip: "翻轉" - flipDescription: "將內容上下或左å³ç¿»è½‰ã€‚" - jelly: "å‹•ç•«(æžœå‡)" - jellyDescription: "顯示果å‡ä¸€æ¨£çš„動畫效果。" - tada: "動畫(é˜ï½žï¼‰" - tadaDescription: "顯示「é˜ï½žï¼ã€é€™ç¨®æ„Ÿè¦ºçš„動畫效果。" - jump: "å‹•ç•«(跳動)" - jumpDescription: "顯示跳動的動畫效果。" - bounce: "å‹•ç•«(å彈)" - bounceDescription: "顯示有彈性的動畫效果。" - shake: "å‹•ç•«(æ–晃)" - shakeDescription: "顯示顫抖的動畫效果。" - twitch: "å‹•ç•«(顫抖)" - twitchDescription: "顯示強烈顫抖的動畫效果。" - spin: "å‹•ç•«(旋轉)" - spinDescription: "顯示旋轉的動畫效果。" - x2: "大" - x2Description: "放大顯示內容。" - x3: "較大" - x3Description: "放大顯示內容。" - x4: "最大" - x4Description: "將顯示內容放至最大。" - blur: "模糊" - blurDescription: "產生模糊效果。将游標放在上é¢å³å¯å°‡å†…容顯示出來。" - font: "å—åž‹" - fontDescription: "您å¯ä»¥è¨å®šé¡¯ç¤ºå…§å®¹çš„å—åž‹" - rainbow: "彩虹" - rainbowDescription: "用彩虹色來顯示內容。" - sparkle: "閃閃發光" - sparkleDescription: "æ·»åŠ é–ƒé–ƒç™¼å…‰çš„ç²’å效果。" - rotate: "旋轉" - rotateDescription: "以指定的角度旋轉。" - plain: "ç°¡æ½”" - plainDescription: "åœç”¨å…¨éƒ¨çš„內部語法。" _instanceTicker: none: "éš±è—" remote: "å‘é 端使用者顯示" diff --git a/package.json b/package.json index 97c9dea7d234c26152ace2bf81cbf198392f175f..7cc3f6cf5c2757b63a39690a5269d8849d72a997 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "misskey", - "version": "13.5.6", + "version": "13.6.0", "codename": "nasubi", "repository": { "type": "git", diff --git a/packages/backend/package.json b/packages/backend/package.json index 6ec2ef4b764344553b6fbbe5229107f7e55d6cd1..0351e02e0ffede4a62cf703440f7d8a008b83e86 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -116,7 +116,7 @@ "tsc-alias": "1.8.2", "tsconfig-paths": "4.1.2", "twemoji-parser": "14.0.0", - "typeorm": "0.3.12", + "typeorm": "0.3.11", "typescript": "4.9.5", "ulid": "2.3.0", "unzipper": "0.10.11", diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts index d15d8c0aeead0660bd9e0f2288a51532efc128a9..9a782780d1ab0053b7feff54b0b8bd35b76002ca 100644 --- a/packages/backend/src/core/RoleService.ts +++ b/packages/backend/src/core/RoleService.ts @@ -211,8 +211,14 @@ export class RoleService implements OnApplicationShutdown { const assignedRoleIds = assigns.map(x => x.roleId); const roles = await this.rolesCache.fetch(null, () => this.rolesRepository.findBy({})); const assignedBadgeRoles = roles.filter(r => r.asBadge && assignedRoleIds.includes(r.id)); - // コンディショナルãƒãƒ¼ãƒ«ã‚‚å«ã‚ã‚‹ã®ã¯è² è·é«˜ãã†ã ã‹ã‚‰ä¸€æ—¦ç„¡ã— - return assignedBadgeRoles; + const badgeCondRoles = roles.filter(r => r.asBadge && (r.target === 'conditional')); + if (badgeCondRoles.length > 0) { + const user = roles.some(r => r.target === 'conditional') ? await this.userCacheService.findById(userId) : null; + const matchedBadgeCondRoles = badgeCondRoles.filter(r => this.evalCond(user!, r.condFormula)); + return [...assignedBadgeRoles, ...matchedBadgeCondRoles]; + } else { + return assignedBadgeRoles; + } } @bindThis diff --git a/packages/frontend/src/components/MkDialog.vue b/packages/frontend/src/components/MkDialog.vue index da4db634064ed9b8efb90f5b7903d6737ce21386..9690353432b6429a59ec925a7c59fd2ac9e0b146 100644 --- a/packages/frontend/src/components/MkDialog.vue +++ b/packages/frontend/src/components/MkDialog.vue @@ -32,7 +32,7 @@ <MkButton v-if="showCancelButton || input || select" inline @click="cancel">{{ cancelText ?? i18n.ts.cancel }}</MkButton> </div> <div v-if="actions" :class="$style.buttons"> - <MkButton v-for="action in actions" :key="action.text" inline :primary="action.primary" @click="() => { action.callback(); close(); }">{{ action.text }}</MkButton> + <MkButton v-for="action in actions" :key="action.text" inline :primary="action.primary" @click="() => { action.callback(); modal?.close(); }">{{ action.text }}</MkButton> </div> </div> </MkModal> diff --git a/packages/frontend/src/components/MkMediaImage.vue b/packages/frontend/src/components/MkMediaImage.vue index 6ac56f3ce0a08a1205335692961080fdf4f7abce..b777a1329b20158ae7f2c0e57d8ee101f9f6f50e 100644 --- a/packages/frontend/src/components/MkMediaImage.vue +++ b/packages/frontend/src/components/MkMediaImage.vue @@ -8,7 +8,7 @@ </div> </div> </div> -<div v-else :class="$style.visible"> +<div v-else :class="$style.visible" :style="defaultStore.state.darkMode ? '--c: rgb(255 255 255 / 2%);' : '--c: rgb(0 0 0 / 2%);'"> <a :class="$style.imageContainer" :href="image.url" @@ -78,7 +78,6 @@ watch(() => props.image, () => { position: relative; //box-shadow: 0 0 0 1px var(--divider) inset; background: var(--bg); - --c: rgb(0 0 0 / 2%); background-image: linear-gradient(45deg, var(--c) 16.67%, var(--bg) 16.67%, var(--bg) 50%, var(--c) 50%, var(--c) 66.67%, var(--bg) 66.67%, var(--bg) 100%); background-size: 16px 16px; } diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue index 7edcaf13247dbf50eb7252223dd65a37e988923b..e910fbab01cf442bc4b2a709a4c6b99b1a76626e 100644 --- a/packages/frontend/src/components/MkNote.vue +++ b/packages/frontend/src/components/MkNote.vue @@ -5,14 +5,14 @@ ref="el" v-hotkey="keymap" :class="$style.root" - :tabindex="!isDeleted ? '-1' : null" + :tabindex="!isDeleted ? '-1' : undefined" > - <MkNoteSub v-if="appearNote.reply" :note="appearNote.reply" :class="$style.replyTo"/> + <MkNoteSub v-if="appearNote.reply && !renoteCollapsed" :note="appearNote.reply" :class="$style.replyTo"/> <div v-if="pinned" :class="$style.tip"><i class="ti ti-pin"></i> {{ i18n.ts.pinnedNote }}</div> <!--<div v-if="appearNote._prId_" class="tip"><i class="fas fa-bullhorn"></i> {{ i18n.ts.promotion }}<button class="_textButton hide" @click="readPromo()">{{ i18n.ts.hideThisNote }} <i class="ti ti-x"></i></button></div>--> <!--<div v-if="appearNote._featuredId_" class="tip"><i class="ti ti-bolt"></i> {{ i18n.ts.featured }}</div>--> <div v-if="isRenote" :class="$style.renote"> - <MkAvatar v-once :class="$style.renoteAvatar" :user="note.user" link preview/> + <MkAvatar :class="$style.renoteAvatar" :user="note.user" link preview/> <i class="ti ti-repeat" style="margin-right: 4px;"></i> <I18n :src="i18n.ts.renotedBy" tag="span" :class="$style.renoteText"> <template #user> @@ -34,8 +34,12 @@ <span v-if="note.localOnly" style="margin-left: 0.5em;" :title="i18n.ts._visibility['localOnly']"><i class="ti ti-world-off"></i></span> </div> </div> - <article :class="$style.article" @contextmenu.stop="onContextmenu"> - <MkAvatar v-once :class="$style.avatar" :user="appearNote.user" link preview/> + <div v-if="renoteCollapsed" :class="$style.collapsedRenoteTarget"> + <MkAvatar :class="$style.collapsedRenoteTargetAvatar" :user="appearNote.user" link preview/> + <Mfm :text="getNoteSummary(appearNote)" :plain="true" :nowrap="true" :author="appearNote.user" :class="$style.collapsedRenoteTargetText" @click="renoteCollapsed = false"/> + </div> + <article v-else :class="$style.article" @contextmenu.stop="onContextmenu"> + <MkAvatar :class="$style.avatar" :user="appearNote.user" link preview/> <div :class="$style.main"> <MkNoteHeader :class="$style.header" :note="appearNote" :mini="true"/> <MkInstanceTicker v-if="showTicker" :class="$style.ticker" :instance="appearNote.user.instance"/> @@ -60,7 +64,7 @@ <div v-if="appearNote.files.length > 0" :class="$style.files"> <MkMediaList :media-list="appearNote.files"/> </div> - <MkPoll v-if="appearNote.poll" ref="pollViewer" :note="appearNote" :class="$style.poll"/> + <MkPoll v-if="appearNote.poll" :note="appearNote" :class="$style.poll"/> <MkUrlPreview v-for="url in urls" :key="url" :url="url" :compact="true" :detail="false" :class="$style.urlPreview"/> <div v-if="appearNote.renote" :class="$style.quote"><MkNoteSimple :note="appearNote.renote" :class="$style.quoteNote"/></div> <button v-if="isLong && collapsed" :class="$style.collapsed" class="_button" @click="collapsed = false"> @@ -73,7 +77,13 @@ <MkA v-if="appearNote.channel && !inChannel" :class="$style.channel" :to="`/channels/${appearNote.channel.id}`"><i class="ti ti-device-tv"></i> {{ appearNote.channel.name }}</MkA> </div> <footer :class="$style.footer"> - <MkReactionsViewer ref="reactionsViewer" :note="appearNote"/> + <MkReactionsViewer :note="appearNote" :max-number="16"> + <template v-slot:more> + <button class="_button" :class="$style.reactionDetailsButton" @click="showReactions"> + {{ i18n.ts.more }} + </button> + </template> + </MkReactionsViewer> <button :class="$style.footerButton" class="_button" @click="reply()"> <i class="ti ti-arrow-back-up"></i> <p v-if="appearNote.repliesCount > 0" :class="$style.footerButtonCount">{{ appearNote.repliesCount }}</p> @@ -116,7 +126,7 @@ </template> <script lang="ts" setup> -import { computed, inject, onMounted, onUnmounted, reactive, ref, shallowRef, Ref } from 'vue'; +import { computed, inject, onMounted, onUnmounted, reactive, ref, shallowRef, Ref, defineAsyncComponent } from 'vue'; import * as mfm from 'mfm-js'; import * as misskey from 'misskey-js'; import MkNoteSub from '@/components/MkNoteSub.vue'; @@ -144,6 +154,8 @@ import { useNoteCapture } from '@/scripts/use-note-capture'; import { deepClone } from '@/scripts/clone'; import { useTooltip } from '@/scripts/use-tooltip'; import { claimAchievement } from '@/scripts/achievements'; +import { getNoteSummary } from '@/scripts/get-note-summary'; +import { shownNoteIds } from '@/os'; const props = defineProps<{ note: misskey.entities.Note; @@ -180,18 +192,23 @@ const reactButton = shallowRef<HTMLElement>(); let appearNote = $computed(() => isRenote ? note.renote as misskey.entities.Note : note); const isMyRenote = $i && ($i.id === note.userId); const showContent = ref(false); +const urls = appearNote.text ? extractUrlFromMfm(mfm.parse(appearNote.text)) : null; const isLong = (appearNote.cw == null && appearNote.text != null && ( (appearNote.text.split('\n').length > 9) || - (appearNote.text.length > 500) + (appearNote.text.length > 500) || + (appearNote.files.length >= 5) || + (urls && urls.length >= 4) )); const collapsed = ref(appearNote.cw == null && isLong); const isDeleted = ref(false); const muted = ref(checkWordMute(appearNote, $i, defaultStore.state.mutedWords)); -const translation = ref(null); +const translation = ref<any>(null); const translating = ref(false); -const urls = appearNote.text ? extractUrlFromMfm(mfm.parse(appearNote.text)) : null; const showTicker = (defaultStore.state.instanceTicker === 'always') || (defaultStore.state.instanceTicker === 'remote' && appearNote.user.instance); const canRenote = computed(() => ['public', 'home'].includes(appearNote.visibility) || appearNote.userId === $i.id); +let renoteCollapsed = $ref(isRenote && (($i && ($i.id === note.userId)) || shownNoteIds.has(appearNote.id))); + +shownNoteIds.add(appearNote.id); const keymap = { 'r': () => reply(true), @@ -350,6 +367,12 @@ function readPromo() { }); isDeleted.value = true; } + +function showReactions(): void { + os.popup(defineAsyncComponent(() => import('@/components/MkReactedUsersDialog.vue')), { + noteId: appearNote.id, + }, {}, 'closed'); +} </script> <style lang="scss" module> @@ -433,7 +456,6 @@ function readPromo() { width: 28px; height: 28px; margin: 0 8px 0 0; - border-radius: 6px; } .renoteText { @@ -461,6 +483,36 @@ function readPromo() { margin-right: 4px; } +.collapsedRenoteTarget { + display: flex; + align-items: center; + line-height: 28px; + white-space: pre; + padding: 0 32px 18px; +} + +.collapsedRenoteTargetAvatar { + flex-shrink: 0; + display: inline-block; + width: 28px; + height: 28px; + margin: 0 8px 0 0; +} + +.collapsedRenoteTargetText { + overflow: hidden; + flex-shrink: 1; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 90%; + opacity: 0.7; + cursor: pointer; + + &:hover { + text-decoration: underline; + } +} + .article { display: flex; padding: 28px 32px 18px; @@ -614,6 +666,11 @@ function readPromo() { padding: 8px 16px 0 16px; } + .collapsedRenoteTarget { + padding: 0 16px 9px; + margin-top: 4px; + } + .article { padding: 14px 16px 9px; } @@ -652,4 +709,19 @@ function readPromo() { text-align: center; opacity: 0.7; } + +.reactionDetailsButton { + display: inline-block; + height: 32px; + margin: 2px; + padding: 0 6px; + border: dashed 1px var(--divider); + border-radius: 4px; + background: transparent; + opacity: .8; + + &:hover { + background: var(--X5); + } +} </style> diff --git a/packages/frontend/src/components/MkNoteHeader.vue b/packages/frontend/src/components/MkNoteHeader.vue index 6b43f146650b2fc0d7d5c57a804a66e87712eacd..32998e1a704dd788b1f40443a918242ce893e907 100644 --- a/packages/frontend/src/components/MkNoteHeader.vue +++ b/packages/frontend/src/components/MkNoteHeader.vue @@ -1,6 +1,6 @@ <template> <header :class="$style.root"> - <MkA v-once v-user-preview="note.user.id" :class="$style.name" :to="userPage(note.user)"> + <MkA v-user-preview="note.user.id" :class="$style.name" :to="userPage(note.user)"> <MkUserName :user="note.user"/> </MkA> <div v-if="note.user.isBot" :class="$style.isBot">bot</div> @@ -90,7 +90,7 @@ defineProps<{ vertical-align: -20%; & + .badgeRole { - margin-left: .125em; + margin-left: 0.2em; } } </style> diff --git a/packages/frontend/src/components/MkNotification.vue b/packages/frontend/src/components/MkNotification.vue index 8c7114eac138b81aa3221a5d9fe0606196ae3c72..0d42e8ffbfde2b5afc8b4e89319cfc2c33cc306e 100644 --- a/packages/frontend/src/components/MkNotification.vue +++ b/packages/frontend/src/components/MkNotification.vue @@ -1,6 +1,6 @@ <template> <div ref="elRef" :class="$style.root"> - <div v-once :class="$style.head"> + <div :class="$style.head"> <MkAvatar v-if="notification.type === 'pollEnded'" :class="$style.icon" :user="notification.note.user" link preview/> <MkAvatar v-else-if="notification.type === 'achievementEarned'" :class="$style.icon" :user="$i" link preview/> <MkAvatar v-else-if="notification.user" :class="$style.icon" :user="notification.user" link preview/> @@ -35,7 +35,7 @@ <span v-else>{{ notification.header }}</span> <MkTime v-if="withTime" :time="notification.createdAt" :class="$style.headerTime"/> </header> - <div v-once :class="$style.content"> + <div :class="$style.content"> <MkA v-if="notification.type === 'reaction'" :class="$style.text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> <i class="ti ti-quote" :class="$style.quote"></i> <Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="true" :author="notification.note.user"/> diff --git a/packages/frontend/src/components/MkPostForm.vue b/packages/frontend/src/components/MkPostForm.vue index c7e7e85b2e838c1f00a6574421b37effcbce3fbc..f15906c1c12ae5bf8e978520019800eb92e8fc45 100644 --- a/packages/frontend/src/components/MkPostForm.vue +++ b/packages/frontend/src/components/MkPostForm.vue @@ -109,7 +109,7 @@ const props = withDefaults(defineProps<{ mention?: misskey.entities.User; specified?: misskey.entities.User; initialText?: string; - initialVisibility?: typeof misskey.noteVisibilities; + initialVisibility?: (typeof misskey.noteVisibilities)[number]; initialFiles?: misskey.entities.DriveFile[]; initialLocalOnly?: boolean; initialVisibleUsers?: misskey.entities.User[]; @@ -579,6 +579,36 @@ async function post(ev?: MouseEvent) { os.popup(MkRippleEffect, { x, y }, {}, 'end'); } + const annoying = + text.includes('$[x2') || + text.includes('$[x3') || + text.includes('$[x4') || + text.includes('$[scale') || + text.includes('$[position'); + if (annoying) { + const { canceled, result } = await os.actions({ + type: 'warning', + text: i18n.ts.thisPostMayBeAnnoying, + actions: [{ + value: 'home', + text: i18n.ts.thisPostMayBeAnnoyingHome, + primary: true, + }, { + value: 'cancel', + text: i18n.ts.thisPostMayBeAnnoyingCancel, + }, { + value: 'ignore', + text: i18n.ts.thisPostMayBeAnnoyingIgnore, + }], + }); + + if (canceled) return; + if (result === 'cancel') return; + if (result === 'home') { + visibility = 'home'; + } + } + let postData = { text: text === '' ? undefined : text, fileIds: files.length > 0 ? files.map(f => f.id) : undefined, diff --git a/packages/frontend/src/components/MkReactionsViewer.reaction.vue b/packages/frontend/src/components/MkReactionsViewer.reaction.vue index 83fdf0f9882c2676ab04b13a14bb6f0f8a9b5bd0..4abd2562dfa223bdc00572838b48b5a115aeed47 100644 --- a/packages/frontend/src/components/MkReactionsViewer.reaction.vue +++ b/packages/frontend/src/components/MkReactionsViewer.reaction.vue @@ -107,7 +107,7 @@ useTooltip(buttonEl, async (showing) => { border-radius: 4px; &.canToggle { - background: rgba(0, 0, 0, 0.05); + background: var(--buttonBg); &:hover { background: rgba(0, 0, 0, 0.1); diff --git a/packages/frontend/src/components/MkReactionsViewer.vue b/packages/frontend/src/components/MkReactionsViewer.vue index 5981471c6887ff14e4cc1cc09edf45a4662d4fa4..cdd6f528e76c5fd1e1334e86de0ee74c887fc1b0 100644 --- a/packages/frontend/src/components/MkReactionsViewer.vue +++ b/packages/frontend/src/components/MkReactionsViewer.vue @@ -7,23 +7,60 @@ :move-class="$store.state.animation ? $style.transition_x_move : ''" tag="div" :class="$style.root" > - <XReaction v-for="(count, reaction) in note.reactions" :key="reaction" :reaction="reaction" :count="count" :is-initial="initialReactions.has(reaction)" :note="note"/> + <XReaction v-for="[reaction, count] in reactions" :key="reaction" :reaction="reaction" :count="count" :is-initial="initialReactions.has(reaction)" :note="note"/> + <slot v-if="hasMoreReactions" name="more" /> </TransitionGroup> </template> <script lang="ts" setup> -import { computed } from 'vue'; import * as misskey from 'misskey-js'; -import { $i } from '@/account'; import XReaction from '@/components/MkReactionsViewer.reaction.vue'; +import { watch } from 'vue'; -const props = defineProps<{ - note: misskey.entities.Note; -}>(); +const props = withDefaults(defineProps<{ + note: misskey.entities.Note; + maxNumber?: number; +}>(), { + maxNumber: Infinity, +}); const initialReactions = new Set(Object.keys(props.note.reactions)); -const isMe = computed(() => $i && $i.id === props.note.userId); +let reactions = $ref<[string, number][]>([]); +let hasMoreReactions = $ref(false); + +if (props.note.myReaction && !Object.keys(reactions).includes(props.note.myReaction)) { + reactions[props.note.myReaction] = props.note.reactions[props.note.myReaction]; +} + +watch([() => props.note.reactions, () => props.maxNumber], ([newSource, maxNumber]) => { + let newReactions: [string, number][] = []; + hasMoreReactions = Object.keys(newSource).length > maxNumber; + + for (let i = 0; i < reactions.length; i++) { + const reaction = reactions[i][0]; + if (reaction in newSource && newSource[reaction] !== 0) { + reactions[i][1] = newSource[reaction]; + newReactions.push(reactions[i]); + } + } + + const newReactionsNames = newReactions.map(([x]) => x); + newReactions = [ + ...newReactions, + ...Object.entries(newSource) + .sort(([, a], [, b]) => b - a) + .filter(([y], i) => i < maxNumber && !newReactionsNames.includes(y)), + ] + + newReactions = newReactions.slice(0, props.maxNumber); + + if (props.note.myReaction && !newReactions.map(([x]) => x).includes(props.note.myReaction)) { + newReactions.push([props.note.myReaction, newSource[props.note.myReaction]]); + } + + reactions = newReactions; +}, { immediate: true, deep: true }); </script> <style lang="scss" module> diff --git a/packages/frontend/src/components/MkUserPreview.vue b/packages/frontend/src/components/MkUserPreview.vue index f68fdd64d9bc2880d516074d030978a87c896a56..eacc66de4f84ff683d283ac32c55d54d8ae81334 100644 --- a/packages/frontend/src/components/MkUserPreview.vue +++ b/packages/frontend/src/components/MkUserPreview.vue @@ -24,6 +24,7 @@ <p>{{ $ts.followers }}</p><span>{{ user.followersCount }}</span> </div> </div> + <button class="menu _button" @click="showMenu"><i class="ti ti-dots"></i></button> <MkFollowButton v-if="$i && user.id != $i.id" class="koudoku-button" :user="user" mini/> </div> <div v-else> @@ -40,6 +41,7 @@ import * as misskey from 'misskey-js'; import MkFollowButton from '@/components/MkFollowButton.vue'; import { userPage } from '@/filters/user'; import * as os from '@/os'; +import { getUserMenu } from '@/scripts/get-user-menu'; const props = defineProps<{ showing: boolean; @@ -58,6 +60,10 @@ let user = $ref<misskey.entities.UserDetailed | null>(null); let top = $ref(0); let left = $ref(0); +function showMenu(ev: MouseEvent) { + os.popupMenu(getUserMenu(user), ev.currentTarget ?? ev.target); +} + onMounted(() => { if (typeof props.q === 'object') { user = props.q; @@ -174,6 +180,13 @@ onMounted(() => { } } + > .menu { + position: absolute; + top: 8px; + right: 42px; + padding: 8px; + } + > .koudoku-button { position: absolute; top: 8px; diff --git a/packages/frontend/src/components/global/MkPageHeader.vue b/packages/frontend/src/components/global/MkPageHeader.vue index ab66502e065644b06e54d82b6ce152e3980d18e9..23a39b9ac9cab892018978f59ebd76d058907076 100644 --- a/packages/frontend/src/components/global/MkPageHeader.vue +++ b/packages/frontend/src/components/global/MkPageHeader.vue @@ -1,37 +1,62 @@ <template> -<div v-if="show" ref="el" :class="[$style.root, { [$style.slim]: narrow, [$style.thin]: thin_ }]" :style="{ background: bg }" @click="onClick"> - <div v-if="narrow" :class="$style.buttonsLeft"> - <MkAvatar v-if="props.displayMyAvatar && $i" :class="$style.avatar" :user="$i"/> - </div> - <template v-if="metadata"> - <div v-if="!hideTitle" :class="$style.titleContainer" @click="showTabsPopup"> - <MkAvatar v-if="metadata.avatar" :class="$style.titleAvatar" :user="metadata.avatar" indicator/> - <i v-else-if="metadata.icon" :class="[$style.titleIcon, metadata.icon]"></i> - - <div :class="$style.title"> - <MkUserName v-if="metadata.userName" :user="metadata.userName" :nowrap="true"/> - <div v-else-if="metadata.title">{{ metadata.title }}</div> - <div v-if="!narrow && metadata.subtitle" :class="$style.subtitle"> - {{ metadata.subtitle }} +<div v-if="show" ref="el" :class="[$style.root]" :style="{ background: bg }"> + <div :class="[$style.upper, { [$style.slim]: narrow, [$style.thin]: thin_ }]"> + <div v-if="narrow && props.displayMyAvatar && $i" class="_button" :class="$style.buttonsLeft" @click="openAccountMenu"> + <MkAvatar :class="$style.avatar" :user="$i" /> + </div> + <div v-else-if="narrow && !hideTitle" :class="$style.buttonsLeft" /> + + <template v-if="metadata"> + <div v-if="!hideTitle" :class="$style.titleContainer" @click="top"> + <MkAvatar v-if="metadata.avatar" :class="$style.titleAvatar" :user="metadata.avatar" indicator/> + <i v-else-if="metadata.icon" :class="[$style.titleIcon, metadata.icon]"></i> + + <div :class="$style.title"> + <MkUserName v-if="metadata.userName" :user="metadata.userName" :nowrap="true"/> + <div v-else-if="metadata.title">{{ metadata.title }}</div> + <div v-if="metadata.subtitle" :class="$style.subtitle"> + {{ metadata.subtitle }} + </div> </div> - <div v-if="narrow && hasTabs" :class="[$style.subtitle, $style.activeTab]"> - {{ tabs.find(tab => tab.key === props.tab)?.title }} - <i class="ti ti-chevron-down" :class="$style.chevron"></i> + </div> + <div v-if="!narrow || hideTitle" :class="$style.tabs" @wheel="onTabWheel"> + <div :class="$style.tabsInner"> + <button v-for="t in tabs" :ref="(el) => tabRefs[t.key] = (el as HTMLElement)" v-tooltip.noDelay="t.title" class="_button" :class="[$style.tab, { [$style.active]: t.key != null && t.key === props.tab }]" @mousedown="(ev) => onTabMousedown(t, ev)" @click="(ev) => onTabClick(t, ev)"> + <div :class="$style.tabInner"> + <i v-if="t.icon" :class="[$style.tabIcon, t.icon]"></i> + <div v-if="!t.iconOnly" :class="$style.tabTitle">{{ t.title }}</div> + <Transition + v-else + @enter="enter" + @after-enter="afterEnter" + @leave="leave" + @after-leave="afterLeave" + mode="in-out" + > + <div v-if="t.key === tab" :class="$style.tabTitle">{{ t.title }}</div> + </Transition> + </div> + </button> </div> + <div ref="tabHighlightEl" :class="$style.tabHighlight"></div> </div> + </template> + <div v-if="(narrow && !hideTitle) || (actions && actions.length > 0)" :class="$style.buttonsRight"> + <template v-for="action in actions"> + <button v-tooltip.noDelay="action.text" class="_button" :class="[$style.button, { [$style.highlighted]: action.highlighted }]" @click.stop="action.handler" @touchstart="preventDrag"><i :class="action.icon"></i></button> + </template> </div> - <div v-if="!narrow || hideTitle" :class="$style.tabs"> - <button v-for="tab in tabs" :ref="(el) => tabRefs[tab.key] = (el as HTMLElement)" v-tooltip.noDelay="tab.title" class="_button" :class="[$style.tab, { [$style.active]: tab.key != null && tab.key === props.tab }]" @mousedown="(ev) => onTabMousedown(tab, ev)" @click="(ev) => onTabClick(tab, ev)"> - <i v-if="tab.icon" :class="[$style.tabIcon, tab.icon]"></i> - <span v-if="!tab.iconOnly" :class="$style.tabTitle">{{ tab.title }}</span> - </button> + </div> + <div v-if="(narrow && !hideTitle) && hasTabs" :class="[$style.lower, { [$style.slim]: narrow, [$style.thin]: thin_ }]"> + <div :class="$style.tabs" @wheel="onTabWheel"> + <div :class="$style.tabsInner"> + <button v-for="tab in tabs" :ref="(el) => tabRefs[tab.key] = (el as HTMLElement)" v-tooltip.noDelay="tab.title" class="_button" :class="[$style.tab, { [$style.active]: tab.key != null && tab.key === props.tab }]" @mousedown="(ev) => onTabMousedown(tab, ev)" @click="(ev) => onTabClick(tab, ev)"> + <i v-if="tab.icon" :class="[$style.tabIcon, tab.icon]"></i> + <span v-if="!tab.iconOnly" :class="$style.tabTitle">{{ tab.title }}</span> + </button> + </div> <div ref="tabHighlightEl" :class="$style.tabHighlight"></div> </div> - </template> - <div :class="$style.buttonsRight"> - <template v-for="action in actions"> - <button v-tooltip.noDelay="action.text" class="_button" :class="[$style.button, { [$style.highlighted]: action.highlighted }]" @click.stop="action.handler" @touchstart="preventDrag"><i :class="action.icon"></i></button> - </template> </div> </div> </template> @@ -39,11 +64,10 @@ <script lang="ts" setup> import { onMounted, onUnmounted, ref, inject, watch, nextTick } from 'vue'; import tinycolor from 'tinycolor2'; -import { popupMenu } from '@/os'; import { scrollToTop } from '@/scripts/scroll'; import { globalEvents } from '@/events'; import { injectPageMetadata } from '@/scripts/page-metadata'; -import { $i } from '@/account'; +import { $i, openAccountMenu as openAccountMenu_ } from '@/account'; type Tab = { key: string; @@ -77,9 +101,9 @@ const metadata = injectPageMetadata(); const hideTitle = inject('shouldOmitHeaderTitle', false); const thin_ = props.thin || inject('shouldHeaderThin', false); -const el = $shallowRef<HTMLElement | undefined>(undefined); +let el = $shallowRef<HTMLElement | undefined>(undefined); const tabRefs: Record<string, HTMLElement | null> = {}; -const tabHighlightEl = $shallowRef<HTMLElement | null>(null); +let tabHighlightEl = $shallowRef<HTMLElement | null>(null); const bg = ref<string | undefined>(undefined); let narrow = $ref(false); const hasTabs = $computed(() => props.tabs.length > 0); @@ -88,32 +112,22 @@ const show = $computed(() => { return !hideTitle || hasTabs || hasActions; }); -const showTabsPopup = (ev: MouseEvent) => { - if (!hasTabs) return; - if (!narrow) return; - ev.preventDefault(); - ev.stopPropagation(); - const menu = props.tabs.map(tab => ({ - text: tab.title, - icon: tab.icon, - active: tab.key != null && tab.key === props.tab, - action: (ev) => { - onTabClick(tab, ev); - }, - })); - popupMenu(menu, (ev.currentTarget ?? ev.target) as HTMLElement); -}; - const preventDrag = (ev: TouchEvent) => { ev.stopPropagation(); }; -const onClick = () => { +const top = () => { if (el) { scrollToTop(el as HTMLElement, { behavior: 'smooth' }); } }; +function openAccountMenu(ev: MouseEvent) { + openAccountMenu_({ + withExtraOperation: true, + }, ev); +} + function onTabMousedown(tab: Tab, ev: MouseEvent): void { // ユーザビリティã®è¦³ç‚¹ã‹ã‚‰mousedown時ã«ã¯onClickã¯å‘¼ã°ãªã„ if (tab.key) { @@ -121,14 +135,17 @@ function onTabMousedown(tab: Tab, ev: MouseEvent): void { } } -function onTabClick(tab: Tab, ev: MouseEvent): void { - if (tab.onClick) { +function onTabClick(t: Tab, ev: MouseEvent): void { + if (t.key === props.tab) { + top(); + } else if (t.onClick) { ev.preventDefault(); ev.stopPropagation(); - tab.onClick(ev); + t.onClick(ev); } - if (tab.key) { - emit('update:tab', tab.key); + + if (t.key) { + emit('update:tab', t.key); } } @@ -139,56 +156,124 @@ const calcBg = () => { bg.value = tinyBg.toRgbString(); }; -let ro: ResizeObserver | null; +let ro1: ResizeObserver | null; +let ro2: ResizeObserver | null; + +function renderTab() { + const tabEl = props.tab ? tabRefs[props.tab] : undefined; + if (tabEl && tabHighlightEl && tabHighlightEl.parentElement) { + // offsetWidth ã‚„ offsetLeft ã¯å°‘数を丸ã‚ã¦ã—ã¾ã†ãŸã‚ getBoundingClientRect を使ã†å¿…è¦ãŒã‚ã‚‹ + // https://developer.mozilla.org/ja/docs/Web/API/HTMLElement/offsetWidth#%E5%80%A4 + const parentRect = tabHighlightEl.parentElement.getBoundingClientRect(); + const rect = tabEl.getBoundingClientRect(); + tabHighlightEl.style.width = rect.width + 'px'; + tabHighlightEl.style.left = (rect.left - parentRect.left + tabHighlightEl.parentElement.scrollLeft) + 'px'; + } +} + +function onTabWheel(ev: WheelEvent) { + if (ev.deltaY !== 0 && ev.deltaX === 0) { + ev.preventDefault(); + ev.stopPropagation(); + (ev.currentTarget as HTMLElement).scrollBy({ + left: ev.deltaY, + behavior: 'smooth', + }); + } + return false; +} + +function enter(el: HTMLElement) { + const elementWidth = el.getBoundingClientRect().width; + el.style.width = '0'; + el.offsetWidth; // reflow + el.style.width = elementWidth + 'px'; + setTimeout(renderTab, 70); +} +function afterEnter(el: HTMLElement) { + el.style.width = ''; + nextTick(renderTab); +} +function leave(el: HTMLElement) { + const elementWidth = el.getBoundingClientRect().width; + el.style.width = elementWidth + 'px'; + el.offsetWidth; // reflow + el.style.width = '0'; +} +function afterLeave(el: HTMLElement) { + el.style.width = ''; +} onMounted(() => { calcBg(); globalEvents.on('themeChanged', calcBg); - watch(() => [props.tab, props.tabs], () => { - nextTick(() => { - const tabEl = props.tab ? tabRefs[props.tab] : undefined; - if (tabEl && tabHighlightEl && tabEl.parentElement) { - // offsetWidth ã‚„ offsetLeft ã¯å°‘数を丸ã‚ã¦ã—ã¾ã†ãŸã‚ getBoundingClientRect を使ã†å¿…è¦ãŒã‚ã‚‹ - // https://developer.mozilla.org/ja/docs/Web/API/HTMLElement/offsetWidth#%E5%80%A4 - const parentRect = tabEl.parentElement.getBoundingClientRect(); - const rect = tabEl.getBoundingClientRect(); - tabHighlightEl.style.width = rect.width + 'px'; - tabHighlightEl.style.left = (rect.left - parentRect.left) + 'px'; - } - }); + watch([() => props.tab, () => props.tabs], () => { + nextTick(() => renderTab()); }, { immediate: true, }); if (el && el.parentElement) { narrow = el.parentElement.offsetWidth < 500; - ro = new ResizeObserver((entries, observer) => { - if (el.parentElement && document.body.contains(el as HTMLElement)) { + ro1 = new ResizeObserver((entries, observer) => { + if (el && el.parentElement && document.body.contains(el as HTMLElement)) { narrow = el.parentElement.offsetWidth < 500; } }); - ro.observe(el.parentElement as HTMLElement); + ro1.observe(el.parentElement as HTMLElement); + } + + if (el) { + ro2 = new ResizeObserver((entries, observer) => { + if (document.body.contains(el as HTMLElement)) { + nextTick(() => renderTab()); + } + }); + ro2.observe(el); } }); onUnmounted(() => { globalEvents.off('themeChanged', calcBg); - if (ro) ro.disconnect(); + if (ro1) ro1.disconnect(); + if (ro2) ro2.disconnect(); }); </script> <style lang="scss" module> .root { - --height: 50px; - display: flex; - width: 100%; -webkit-backdrop-filter: var(--blur, blur(15px)); backdrop-filter: var(--blur, blur(15px)); border-bottom: solid 0.5px var(--divider); - contain: strict; + width: 100%; +} + +.upper, +.lower { + width: 100%; + background: transparent; +} + +.upper { + --height: 50px; + display: flex; height: var(--height); + .tabs:first-child { + margin-left: auto; + } + .tabs:not(:first-child) { + padding-left: 16px; + mask-image: linear-gradient(90deg, rgba(0,0,0,0), rgb(0,0,0) 16px, rgb(0,0,0) 100%); + } + .tabs:last-child { + margin-right: auto; + } + .tabs:not(:last-child) { + margin-right: 0; + } + &.thin { --height: 42px; @@ -205,6 +290,7 @@ onUnmounted(() => { > .titleContainer { flex: 1; margin: 0 auto; + max-width: 100%; > *:first-child { margin-left: auto; @@ -217,6 +303,11 @@ onUnmounted(() => { } } +.lower { + --height: 40px; + height: var(--height); +} + .buttons { --margin: 8px; display: flex; @@ -247,15 +338,14 @@ onUnmounted(() => { height: $size; vertical-align: bottom; margin: 0 8px; - pointer-events: none; } .button { display: flex; align-items: center; justify-content: center; - height: calc(var(--height) - (var(--margin) * 2)); - width: calc(var(--height) - (var(--margin) * 2)); + height: var(--height); + width: calc(var(--height) - (var(--margin))); box-sizing: border-box; position: relative; border-radius: 5px; @@ -278,7 +368,7 @@ onUnmounted(() => { .titleContainer { display: flex; align-items: center; - max-width: 400px; + max-width: min(30vw, 400px); overflow: auto; white-space: nowrap; text-align: left; @@ -330,10 +420,24 @@ onUnmounted(() => { } .tabs { + display: block; position: relative; - margin-left: 16px; + margin: 0; + height: var(--height); font-size: 0.8em; - overflow: auto; + text-align: center; + overflow-x: auto; + overflow-y: hidden; + scrollbar-width: none; + + &::-webkit-scrollbar { + display: none; + } +} + +.tabsInner { + display: inline-block; + height: var(--height); white-space: nowrap; } @@ -344,6 +448,7 @@ onUnmounted(() => { height: 100%; font-weight: normal; opacity: 0.7; + transition: opacity 0.2s ease; &:hover { opacity: 1; @@ -354,8 +459,18 @@ onUnmounted(() => { } } +.tabInner { + display: flex; + align-items: center; +} + .tabIcon + .tabTitle { margin-left: 8px; +} + +.tabTitle { + overflow: hidden; + transition: width 0.15s ease-in-out; } .tabHighlight { @@ -364,7 +479,7 @@ onUnmounted(() => { height: 3px; background: var(--accent); border-radius: 999px; - transition: all 0.2s ease; + transition: width 0.15s ease, left 0.15s ease; pointer-events: none; } </style> diff --git a/packages/frontend/src/components/mfm.ts b/packages/frontend/src/components/mfm.ts index 683c9014a17a6a60e5b3020ecac292a2f0eabd4e..816a42a5fb7d12b0483bfb6fc3ad060d2e1fb828 100644 --- a/packages/frontend/src/components/mfm.ts +++ b/packages/frontend/src/components/mfm.ts @@ -12,6 +12,7 @@ import MkSparkle from '@/components/MkSparkle.vue'; import MkA from '@/components/global/MkA.vue'; import { host } from '@/config'; import { MFM_TAGS } from '@/scripts/mfm-tags'; +import { defaultStore } from '@/store'; const QUOTE_STYLE = ` display: block; @@ -64,6 +65,8 @@ export default defineComponent({ return t.match(/^[0-9.]+s$/) ? t : null; }; + const useAnim = defaultStore.state.advancedMfm && defaultStore.state.animatedMfm; + const genEl = (ast: mfm.MfmNode[]) => ast.map((token): VNode | string | (VNode | string)[] => { switch (token.type) { case 'text': { @@ -102,22 +105,22 @@ export default defineComponent({ switch (token.props.name) { case 'tada': { const speed = validTime(token.props.args.speed) ?? '1s'; - style = 'font-size: 150%;' + (this.$store.state.animatedMfm ? `animation: tada ${speed} linear infinite both;` : ''); + style = 'font-size: 150%;' + (useAnim ? `animation: tada ${speed} linear infinite both;` : ''); break; } case 'jelly': { const speed = validTime(token.props.args.speed) ?? '1s'; - style = (this.$store.state.animatedMfm ? `animation: mfm-rubberBand ${speed} linear infinite both;` : ''); + style = (useAnim ? `animation: mfm-rubberBand ${speed} linear infinite both;` : ''); break; } case 'twitch': { const speed = validTime(token.props.args.speed) ?? '0.5s'; - style = this.$store.state.animatedMfm ? `animation: mfm-twitch ${speed} ease infinite;` : ''; + style = useAnim ? `animation: mfm-twitch ${speed} ease infinite;` : ''; break; } case 'shake': { const speed = validTime(token.props.args.speed) ?? '0.5s'; - style = this.$store.state.animatedMfm ? `animation: mfm-shake ${speed} ease infinite;` : ''; + style = useAnim ? `animation: mfm-shake ${speed} ease infinite;` : ''; break; } case 'spin': { @@ -130,17 +133,17 @@ export default defineComponent({ token.props.args.y ? 'mfm-spinY' : 'mfm-spin'; const speed = validTime(token.props.args.speed) ?? '1.5s'; - style = this.$store.state.animatedMfm ? `animation: ${anime} ${speed} linear infinite; animation-direction: ${direction};` : ''; + style = useAnim ? `animation: ${anime} ${speed} linear infinite; animation-direction: ${direction};` : ''; break; } case 'jump': { const speed = validTime(token.props.args.speed) ?? '0.75s'; - style = this.$store.state.animatedMfm ? `animation: mfm-jump ${speed} linear infinite;` : ''; + style = useAnim ? `animation: mfm-jump ${speed} linear infinite;` : ''; break; } case 'bounce': { const speed = validTime(token.props.args.speed) ?? '0.75s'; - style = this.$store.state.animatedMfm ? `animation: mfm-bounce ${speed} linear infinite; transform-origin: center bottom;` : ''; + style = useAnim ? `animation: mfm-bounce ${speed} linear infinite; transform-origin: center bottom;` : ''; break; } case 'flip': { @@ -153,17 +156,17 @@ export default defineComponent({ } case 'x2': { return h('span', { - class: 'mfm-x2', + class: defaultStore.state.advancedMfm ? 'mfm-x2' : '', }, genEl(token.children)); } case 'x3': { return h('span', { - class: 'mfm-x3', + class: defaultStore.state.advancedMfm ? 'mfm-x3' : '', }, genEl(token.children)); } case 'x4': { return h('span', { - class: 'mfm-x4', + class: defaultStore.state.advancedMfm ? 'mfm-x4' : '', }, genEl(token.children)); } case 'font': { @@ -185,11 +188,11 @@ export default defineComponent({ } case 'rainbow': { const speed = validTime(token.props.args.speed) ?? '1s'; - style = this.$store.state.animatedMfm ? `animation: mfm-rainbow ${speed} linear infinite;` : ''; + style = useAnim ? `animation: mfm-rainbow ${speed} linear infinite;` : ''; break; } case 'sparkle': { - if (!this.$store.state.animatedMfm) { + if (!useAnim) { return genEl(token.children); } return h(MkSparkle, {}, genEl(token.children)); @@ -200,12 +203,17 @@ export default defineComponent({ break; } case 'position': { + if (!defaultStore.state.advancedMfm) break; const x = parseFloat(token.props.args.x ?? '0'); const y = parseFloat(token.props.args.y ?? '0'); style = `transform: translateX(${x}em) translateY(${y}em);`; break; } case 'scale': { + if (!defaultStore.state.advancedMfm) { + style = ''; + break; + } const x = Math.min(parseFloat(token.props.args.x ?? '1'), 5); const y = Math.min(parseFloat(token.props.args.y ?? '1'), 5); style = `transform: scale(${x}, ${y});`; diff --git a/packages/frontend/src/os.ts b/packages/frontend/src/os.ts index e21a21ef76cc2d436f6d2de543fdb4e50ec59b3c..639f4eaf17ab811c8566add7ae608f9e30cb1e49 100644 --- a/packages/frontend/src/os.ts +++ b/packages/frontend/src/os.ts @@ -186,6 +186,38 @@ export function confirm(props: { }); } +// TODO: const T extends ... ã«ã—ãŸã„ +// https://zenn.dev/general_link/articles/813e47b7a0eef7#const-type-parameters +export function actions<T extends { + value: string; + text: string; + primary?: boolean, +}[]>(props: { + type: 'error' | 'info' | 'success' | 'warning' | 'waiting' | 'question'; + title?: string | null; + text?: string | null; + actions: T; +}): Promise<{ canceled: true; result: undefined; } | { + canceled: false; result: T[number]['value']; +}> { + return new Promise((resolve, reject) => { + popup(MkDialog, { + ...props, + actions: props.actions.map(a => ({ + text: a.text, + primary: a.primary, + callback: () => { + resolve({ canceled: false, result: a.value }); + }, + })), + }, { + done: result => { + resolve(result ? result : { canceled: true }); + }, + }, 'closed'); + }); +} + export function inputText(props: { type?: 'text' | 'email' | 'password' | 'url'; title?: string | null; @@ -540,3 +572,9 @@ export function checkExistence(fileData: ArrayBuffer): Promise<any> { }); }); }*/ + +export const shownNoteIds = new Set(); + +window.setInterval(() => { + shownNoteIds.clear(); +}, 1000 * 60 * 5); diff --git a/packages/frontend/src/pages/about-misskey.vue b/packages/frontend/src/pages/about-misskey.vue index f8e97807149eae6847059556630e14534715dfe1..bc3d2481933acfd912da68869cf59d9affd3d4cf 100644 --- a/packages/frontend/src/pages/about-misskey.vue +++ b/packages/frontend/src/pages/about-misskey.vue @@ -192,6 +192,7 @@ const patrons = [ 'è‰æš®ã›ã›ã›', 'ThatOneCalculator', 'pixeldesu', + 'ã‚ã‚玉', ]; let thereIsTreasure = $ref($i && !claimedAchievements.includes('foundTreasure')); diff --git a/packages/frontend/src/pages/antenna-timeline.vue b/packages/frontend/src/pages/antenna-timeline.vue index bf3004f28093fec6f49ed8cae1c648b352284c67..ff31c3ab2cd8ccd4e611f43e6e6246d97d641349 100644 --- a/packages/frontend/src/pages/antenna-timeline.vue +++ b/packages/frontend/src/pages/antenna-timeline.vue @@ -98,6 +98,7 @@ definePageMetadata(computed(() => antenna ? { top: calc(var(--stickyTop, 0px) + 16px); z-index: 1000; width: 100%; + margin: calc(-0.675em - 8px - var(--margin)) 0 calc(-0.675em - 8px); > button { display: block; diff --git a/packages/frontend/src/pages/mfm-cheat-sheet.vue b/packages/frontend/src/pages/mfm-cheat-sheet.vue deleted file mode 100644 index 73a571623624442de61e88fab17d31db766099df..0000000000000000000000000000000000000000 --- a/packages/frontend/src/pages/mfm-cheat-sheet.vue +++ /dev/null @@ -1,377 +0,0 @@ -<template> -<MkStickyContainer> - <template #header><MkPageHeader/></template> - <MkSpacer :content-max="800"> - <div class="mwysmxbg"> - <div>{{ i18n.ts._mfm.intro }}</div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.mention }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.mentionDescription }}</p> - <div class="preview"> - <Mfm :text="preview_mention"/> - <MkTextarea v-model="preview_mention"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.hashtag }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.hashtagDescription }}</p> - <div class="preview"> - <Mfm :text="preview_hashtag"/> - <MkTextarea v-model="preview_hashtag"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.url }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.urlDescription }}</p> - <div class="preview"> - <Mfm :text="preview_url"/> - <MkTextarea v-model="preview_url"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.link }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.linkDescription }}</p> - <div class="preview"> - <Mfm :text="preview_link"/> - <MkTextarea v-model="preview_link"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.emoji }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.emojiDescription }}</p> - <div class="preview"> - <Mfm :text="preview_emoji"/> - <MkTextarea v-model="preview_emoji"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.bold }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.boldDescription }}</p> - <div class="preview"> - <Mfm :text="preview_bold"/> - <MkTextarea v-model="preview_bold"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.small }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.smallDescription }}</p> - <div class="preview"> - <Mfm :text="preview_small"/> - <MkTextarea v-model="preview_small"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.quote }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.quoteDescription }}</p> - <div class="preview"> - <Mfm :text="preview_quote"/> - <MkTextarea v-model="preview_quote"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.center }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.centerDescription }}</p> - <div class="preview"> - <Mfm :text="preview_center"/> - <MkTextarea v-model="preview_center"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.inlineCode }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.inlineCodeDescription }}</p> - <div class="preview"> - <Mfm :text="preview_inlineCode"/> - <MkTextarea v-model="preview_inlineCode"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.blockCode }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.blockCodeDescription }}</p> - <div class="preview"> - <Mfm :text="preview_blockCode"/> - <MkTextarea v-model="preview_blockCode"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <!-- deprecated - <div class="section"> - <div class="title">{{ i18n.ts._mfm.search }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.searchDescription }}</p> - <div class="preview"> - <Mfm :text="preview_search"/> - <MkTextarea v-model="preview_search"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - --> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.flip }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.flipDescription }}</p> - <div class="preview"> - <Mfm :text="preview_flip"/> - <MkTextarea v-model="preview_flip"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.font }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.fontDescription }}</p> - <div class="preview"> - <Mfm :text="preview_font"/> - <MkTextarea v-model="preview_font"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.x2 }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.x2Description }}</p> - <div class="preview"> - <Mfm :text="preview_x2"/> - <MkTextarea v-model="preview_x2"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.x3 }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.x3Description }}</p> - <div class="preview"> - <Mfm :text="preview_x3"/> - <MkTextarea v-model="preview_x3"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.x4 }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.x4Description }}</p> - <div class="preview"> - <Mfm :text="preview_x4"/> - <MkTextarea v-model="preview_x4"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.blur }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.blurDescription }}</p> - <div class="preview"> - <Mfm :text="preview_blur"/> - <MkTextarea v-model="preview_blur"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.jelly }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.jellyDescription }}</p> - <div class="preview"> - <Mfm :text="preview_jelly"/> - <MkTextarea v-model="preview_jelly"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.tada }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.tadaDescription }}</p> - <div class="preview"> - <Mfm :text="preview_tada"/> - <MkTextarea v-model="preview_tada"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.jump }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.jumpDescription }}</p> - <div class="preview"> - <Mfm :text="preview_jump"/> - <MkTextarea v-model="preview_jump"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.bounce }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.bounceDescription }}</p> - <div class="preview"> - <Mfm :text="preview_bounce"/> - <MkTextarea v-model="preview_bounce"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.spin }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.spinDescription }}</p> - <div class="preview"> - <Mfm :text="preview_spin"/> - <MkTextarea v-model="preview_spin"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.shake }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.shakeDescription }}</p> - <div class="preview"> - <Mfm :text="preview_shake"/> - <MkTextarea v-model="preview_shake"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.twitch }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.twitchDescription }}</p> - <div class="preview"> - <Mfm :text="preview_twitch"/> - <MkTextarea v-model="preview_twitch"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.rainbow }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.rainbowDescription }}</p> - <div class="preview"> - <Mfm :text="preview_rainbow"/> - <MkTextarea v-model="preview_rainbow"><template #label>MFM</template></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.sparkle }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.sparkleDescription }}</p> - <div class="preview"> - <Mfm :text="preview_sparkle"/> - <MkTextarea v-model="preview_sparkle"><span>MFM</span></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.rotate }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.rotateDescription }}</p> - <div class="preview"> - <Mfm :text="preview_rotate"/> - <MkTextarea v-model="preview_rotate"><span>MFM</span></MkTextarea> - </div> - </div> - </div> - <div class="section"> - <div class="title">{{ i18n.ts._mfm.plain }}</div> - <div class="content"> - <p>{{ i18n.ts._mfm.plainDescription }}</p> - <div class="preview"> - <Mfm :text="preview_plain"/> - <MkTextarea v-model="preview_plain"><span>MFM</span></MkTextarea> - </div> - </div> - </div> - </div> - </MkSpacer> -</MkStickyContainer> -</template> - -<script lang="ts" setup> -import { defineComponent } from 'vue'; -import MkTextarea from '@/components/MkTextarea.vue'; -import { definePageMetadata } from '@/scripts/page-metadata'; -import { i18n } from '@/i18n'; -import { instance } from '@/instance'; -import { customEmojis } from '@/custom-emojis'; - -let preview_mention = $ref('@example'); -let preview_hashtag = $ref('#test'); -let preview_url = $ref('https://example.com'); -let preview_link = $ref(`[${i18n.ts._mfm.dummy}](https://example.com)`); -let preview_emoji = $ref(customEmojis.value.length ? `:${customEmojis.value[0].name}:` : ':emojiname:'); -let preview_bold = $ref(`**${i18n.ts._mfm.dummy}**`); -let preview_small = $ref(`<small>${i18n.ts._mfm.dummy}</small>`); -let preview_center = $ref(`<center>${i18n.ts._mfm.dummy}</center>`); -let preview_inlineCode = $ref('`<: "Hello, world!"`'); -let preview_blockCode = $ref('```\n~ (#i, 100) {\n\t<: ? ((i % 15) = 0) "FizzBuzz"\n\t\t.? ((i % 3) = 0) "Fizz"\n\t\t.? ((i % 5) = 0) "Buzz"\n\t\t. i\n}\n```'); -let preview_quote = $ref(`> ${i18n.ts._mfm.dummy}`); -let preview_search = $ref(`${i18n.ts._mfm.dummy} 検索`); -let preview_jelly = $ref('$[jelly ðŸ®] $[jelly.speed=5s ðŸ®]'); -let preview_tada = $ref('$[tada ðŸ®] $[tada.speed=5s ðŸ®]'); -let preview_jump = $ref('$[jump ðŸ®] $[jump.speed=5s ðŸ®]'); -let preview_bounce = $ref('$[bounce ðŸ®] $[bounce.speed=5s ðŸ®]'); -let preview_shake = $ref('$[shake ðŸ®] $[shake.speed=5s ðŸ®]'); -let preview_twitch = $ref('$[twitch ðŸ®] $[twitch.speed=5s ðŸ®]'); -let preview_spin = $ref('$[spin ðŸ®] $[spin.left ðŸ®] $[spin.alternate ðŸ®]\n$[spin.x ðŸ®] $[spin.x,left ðŸ®] $[spin.x,alternate ðŸ®]\n$[spin.y ðŸ®] $[spin.y,left ðŸ®] $[spin.y,alternate ðŸ®]\n\n$[spin.speed=5s ðŸ®]'); -let preview_flip = $ref(`$[flip ${i18n.ts._mfm.dummy}]\n$[flip.v ${i18n.ts._mfm.dummy}]\n$[flip.h,v ${i18n.ts._mfm.dummy}]`); -let preview_font = $ref(`$[font.serif ${i18n.ts._mfm.dummy}]\n$[font.monospace ${i18n.ts._mfm.dummy}]\n$[font.cursive ${i18n.ts._mfm.dummy}]\n$[font.fantasy ${i18n.ts._mfm.dummy}]`); -let preview_x2 = $ref('$[x2 ðŸ®]'); -let preview_x3 = $ref('$[x3 ðŸ®]'); -let preview_x4 = $ref('$[x4 ðŸ®]'); -let preview_blur = $ref(`$[blur ${i18n.ts._mfm.dummy}]`); -let preview_rainbow = $ref('$[rainbow ðŸ®] $[rainbow.speed=5s ðŸ®]'); -let preview_sparkle = $ref('$[sparkle ðŸ®]'); -let preview_rotate = $ref('$[rotate ðŸ®]'); -let preview_plain = $ref('<plain>**bold** @mention #hashtag `code` $[x2 ðŸ®]</plain>'); - -definePageMetadata({ - title: i18n.ts._mfm.cheatSheet, - icon: 'ti ti-question-circle', -}); -</script> - -<style lang="scss" scoped> -.mwysmxbg { - background: var(--bg); - - > .section { - > .title { - position: sticky; - z-index: 1; - top: var(--stickyTop, 0px); - padding: 16px; - font-weight: bold; - -webkit-backdrop-filter: var(--blur, blur(10px)); - backdrop-filter: var(--blur, blur(10px)); - background-color: var(--X16); - } - - > .content { - > p { - margin: 0; - padding: 16px; - } - - > .preview { - border-top: solid 0.5px var(--divider); - padding: 16px; - } - } - } -} -</style> diff --git a/packages/frontend/src/pages/settings/general.vue b/packages/frontend/src/pages/settings/general.vue index 0ce66b065fe0026093b2f6f83d9249d4ea8f6b54..b4851df1767336c10e5e55eeaf541bf85e444540 100644 --- a/packages/frontend/src/pages/settings/general.vue +++ b/packages/frontend/src/pages/settings/general.vue @@ -45,7 +45,8 @@ <div class="_gaps_m"> <div class="_gaps_s"> - <MkSwitch v-model="disableAnimatedMfm">{{ i18n.ts.disableAnimatedMfm }}</MkSwitch> + <MkSwitch v-model="advancedMfm">{{ i18n.ts.enableAdvancedMfm }}</MkSwitch> + <MkSwitch v-if="advancedMfm" v-model="animatedMfm">{{ i18n.ts.enableAnimatedMfm }}</MkSwitch> <MkSwitch v-model="reduceAnimation">{{ i18n.ts.reduceUiAnimation }}</MkSwitch> <MkSwitch v-model="useBlurEffect">{{ i18n.ts.useBlurEffect }}</MkSwitch> <MkSwitch v-model="useBlurEffectForModal">{{ i18n.ts.useBlurEffectForModal }}</MkSwitch> @@ -142,7 +143,8 @@ const reduceAnimation = computed(defaultStore.makeGetterSetter('animation', v => const useBlurEffectForModal = computed(defaultStore.makeGetterSetter('useBlurEffectForModal')); const useBlurEffect = computed(defaultStore.makeGetterSetter('useBlurEffect')); const showGapBetweenNotesInTimeline = computed(defaultStore.makeGetterSetter('showGapBetweenNotesInTimeline')); -const disableAnimatedMfm = computed(defaultStore.makeGetterSetter('animatedMfm', v => !v, v => !v)); +const animatedMfm = computed(defaultStore.makeGetterSetter('animatedMfm')); +const advancedMfm = computed(defaultStore.makeGetterSetter('advancedMfm')); const emojiStyle = computed(defaultStore.makeGetterSetter('emojiStyle')); const disableDrawer = computed(defaultStore.makeGetterSetter('disableDrawer')); const disableShowingAnimatedImages = computed(defaultStore.makeGetterSetter('disableShowingAnimatedImages')); diff --git a/packages/frontend/src/pages/settings/preferences-backups.vue b/packages/frontend/src/pages/settings/preferences-backups.vue index 87a08612fc89aed2b84b3aa98721076bf8838c41..0512a8d0c90cf704691dbf056ee46f6db2f84234 100644 --- a/packages/frontend/src/pages/settings/preferences-backups.vue +++ b/packages/frontend/src/pages/settings/preferences-backups.vue @@ -62,6 +62,7 @@ const defaultStoreSaveKeys: (keyof typeof defaultStore['state'])[] = [ 'nsfw', 'animation', 'animatedMfm', + 'advancedMfm', 'loadRawImages', 'imageNewTab', 'disableShowingAnimatedImages', diff --git a/packages/frontend/src/pages/share.vue b/packages/frontend/src/pages/share.vue index d8b956b6d17bc3bb9ee4a79e735b2a6ac0b8197c..78e0710162aff4edd01393002ea79b4cba1ea9d8 100644 --- a/packages/frontend/src/pages/share.vue +++ b/packages/frontend/src/pages/share.vue @@ -2,7 +2,7 @@ <MkStickyContainer> <template #header><MkPageHeader :actions="headerActions" :tabs="headerTabs"/></template> <MkSpacer :content-max="800"> - <XPostForm + <MkPostForm v-if="state === 'writing'" fixed :instant="true" @@ -37,17 +37,17 @@ import { i18n } from '@/i18n'; const urlParams = new URLSearchParams(window.location.search); const localOnlyQuery = urlParams.get('localOnly'); -const visibilityQuery = urlParams.get('visibility'); +const visibilityQuery = urlParams.get('visibility') as typeof noteVisibilities[number]; let state = $ref('fetching' as 'fetching' | 'writing' | 'posted'); let title = $ref(urlParams.get('title')); const text = urlParams.get('text'); const url = urlParams.get('url'); -let initialText = $ref(null as string | null); -let reply = $ref(null as Misskey.entities.Note | null); -let renote = $ref(null as Misskey.entities.Note | null); -let visibility = $ref(noteVisibilities.includes(visibilityQuery) ? visibilityQuery : null); -let localOnly = $ref(localOnlyQuery === '0' ? false : localOnlyQuery === '1' ? true : null); +let initialText = $ref<string | undefined>(); +let reply = $ref<Misskey.entities.Note | undefined>(); +let renote = $ref<Misskey.entities.Note | undefined>(); +let visibility = $ref(noteVisibilities.includes(visibilityQuery) ? visibilityQuery : undefined); +let localOnly = $ref(localOnlyQuery === '0' ? false : localOnlyQuery === '1' ? true : undefined); let files = $ref([] as Misskey.entities.DriveFile[]); let visibleUsers = $ref([] as Misskey.entities.User[]); @@ -130,7 +130,7 @@ async function init() { ); } //#endregion - } catch (err) { + } catch (err: any) { os.alert({ type: 'error', title: err.message, diff --git a/packages/frontend/src/pages/timeline.vue b/packages/frontend/src/pages/timeline.vue index 057409484c1869c3bf5f6cc640c981e91baf74d5..31f4793dc43937c61693d00f23d12bb5a7e19b75 100644 --- a/packages/frontend/src/pages/timeline.vue +++ b/packages/frontend/src/pages/timeline.vue @@ -22,7 +22,7 @@ </template> <script lang="ts" setup> -import { defineAsyncComponent, computed, watch } from 'vue'; +import { defineAsyncComponent, computed, watch, provide } from 'vue'; import XTimeline from '@/components/MkTimeline.vue'; import MkPostForm from '@/components/MkPostForm.vue'; import { scroll } from '@/scripts/scroll'; @@ -33,6 +33,8 @@ import { instance } from '@/instance'; import { $i } from '@/account'; import { definePageMetadata } from '@/scripts/page-metadata'; +provide('shouldOmitHeaderTitle', true); + const XTutorial = defineAsyncComponent(() => import('./timeline.tutorial.vue')); const isLocalTimelineAvailable = ($i == null && instance.policies.ltlAvailable) || ($i != null && $i.policies.ltlAvailable); @@ -177,6 +179,11 @@ definePageMetadata(computed(() => ({ top: calc(var(--stickyTop, 0px) + 16px); z-index: 1000; width: 100%; + margin: calc(-0.675em - 8px) 0; + + &:first-child { + margin-top: calc(-0.675em - 8px - var(--margin)); + } > button { display: block; diff --git a/packages/frontend/src/pages/user-list-timeline.vue b/packages/frontend/src/pages/user-list-timeline.vue index 6817d44d8c02738bc305e2a1639960c66d3094ee..3f47edfd44147a81286bb2c0a09c343f0b2bd771 100644 --- a/packages/frontend/src/pages/user-list-timeline.vue +++ b/packages/frontend/src/pages/user-list-timeline.vue @@ -91,6 +91,7 @@ definePageMetadata(computed(() => list ? { top: calc(var(--stickyTop, 0px) + 16px); z-index: 1000; width: 100%; + margin: calc(-0.675em - 8px - var(--margin)) 0 calc(-0.675em - 8px); > button { display: block; diff --git a/packages/frontend/src/pages/user/home.vue b/packages/frontend/src/pages/user/home.vue index 56858a9377c11e7ed12cd925ba398c0896340550..fab47d09e234a27f395ef71874d74b5b2d6e3696 100644 --- a/packages/frontend/src/pages/user/home.vue +++ b/packages/frontend/src/pages/user/home.vue @@ -101,9 +101,6 @@ <XActivity :key="user.id" :user="user"/> </template> </div> - <div> - <XUserTimeline :user="user"/> - </div> </div> <div v-if="!narrow" class="sub _gaps" style="container-type: inline-size;"> <XPhotos :key="user.id" :user="user"/> @@ -117,7 +114,6 @@ import { defineAsyncComponent, computed, inject, onMounted, onUnmounted, watch } from 'vue'; import calcAge from 's-age'; import * as misskey from 'misskey-js'; -import XUserTimeline from './index.timeline.vue'; import XNote from '@/components/MkNote.vue'; import MkFollowButton from '@/components/MkFollowButton.vue'; import MkContainer from '@/components/MkContainer.vue'; diff --git a/packages/frontend/src/pages/user/index.timeline.vue b/packages/frontend/src/pages/user/index.timeline.vue index 41983a5ae87345a1b01ca84e99590f626446b358..34e16c707d20cc9ac66306b607d3f67db9ab801c 100644 --- a/packages/frontend/src/pages/user/index.timeline.vue +++ b/packages/frontend/src/pages/user/index.timeline.vue @@ -1,14 +1,16 @@ <template> -<MkStickyContainer> - <template #header> - <MkTab v-model="include" :class="$style.tab"> - <option :value="null">{{ i18n.ts.notes }}</option> - <option value="replies">{{ i18n.ts.notesAndReplies }}</option> - <option value="files">{{ i18n.ts.withFiles }}</option> - </MkTab> - </template> - <XNotes :no-gap="true" :pagination="pagination"/> -</MkStickyContainer> +<MkSpacer :content-max="800" style="padding-top: 0"> + <MkStickyContainer> + <template #header> + <MkTab v-model="include" :class="$style.tab"> + <option :value="null">{{ i18n.ts.notes }}</option> + <option value="replies">{{ i18n.ts.notesAndReplies }}</option> + <option value="files">{{ i18n.ts.withFiles }}</option> + </MkTab> + </template> + <XNotes :no-gap="true" :pagination="pagination" :class="$style.tl"/> + </MkStickyContainer> +</MkSpacer> </template> <script lang="ts" setup> @@ -42,4 +44,10 @@ const pagination = { padding: calc(var(--margin) / 2) 0; background: var(--bg); } + +.tl { + background: var(--bg); + border-radius: var(--radius); + overflow: clip; +} </style> diff --git a/packages/frontend/src/pages/user/index.vue b/packages/frontend/src/pages/user/index.vue index 120f67d8a5a866d29dabd989abb4cce5c2efef5a..84909f72c2bc60d399ba25026b01cf297c17eab6 100644 --- a/packages/frontend/src/pages/user/index.vue +++ b/packages/frontend/src/pages/user/index.vue @@ -5,7 +5,7 @@ <Transition name="fade" mode="out-in"> <div v-if="user"> <XHome v-if="tab === 'home'" :user="user"/> - <XActivity v-else-if="tab === 'activity'" :user="user"/> + <XTimeline v-else-if="tab === 'notes'" :user="user" /> <XAchievements v-else-if="tab === 'achievements'" :user="user"/> <XReactions v-else-if="tab === 'reactions'" :user="user"/> <XClips v-else-if="tab === 'clips'" :user="user"/> @@ -34,6 +34,7 @@ import { i18n } from '@/i18n'; import { $i } from '@/account'; const XHome = defineAsyncComponent(() => import('./home.vue')); +const XTimeline = defineAsyncComponent(() => import('./index.timeline.vue')); const XActivity = defineAsyncComponent(() => import('./activity.vue')); const XAchievements = defineAsyncComponent(() => import('./achievements.vue')); const XReactions = defineAsyncComponent(() => import('./reactions.vue')); @@ -74,6 +75,10 @@ const headerTabs = $computed(() => user ? [{ key: 'home', title: i18n.ts.overview, icon: 'ti ti-home', +}, { + key: 'notes', + title: i18n.ts.notes, + icon: 'ti ti-pencil', }, { key: 'activity', title: i18n.ts.activity, diff --git a/packages/frontend/src/router.ts b/packages/frontend/src/router.ts index 87d42c5c87ce5d382a55e9fc232d7632ab9a4ded..900426268967c91b09e924133982d869962d19e5 100644 --- a/packages/frontend/src/router.ts +++ b/packages/frontend/src/router.ts @@ -224,9 +224,6 @@ export const routes = [{ path: '/api-console', component: page(() => import('./pages/api-console.vue')), loginRequired: true, -}, { - path: '/mfm-cheat-sheet', - component: page(() => import('./pages/mfm-cheat-sheet.vue')), }, { path: '/scratchpad', component: page(() => import('./pages/scratchpad.vue')), diff --git a/packages/frontend/src/scripts/get-user-menu.ts b/packages/frontend/src/scripts/get-user-menu.ts index 74bd61fd783b4a451cd8da95981088cfdc3d67ec..941d9a0db9b1867c76875c4a7a779deef5bc8697 100644 --- a/packages/frontend/src/scripts/get-user-menu.ts +++ b/packages/frontend/src/scripts/get-user-menu.ts @@ -203,6 +203,20 @@ export function getUserMenu(user, router: Router = mainRouter) { action: () => { router.push('/user-info/' + user.id + '#moderation'); }, + }, { + icon: 'ti ti-badges', + text: i18n.ts.roles, + action: async () => { + const roles = await os.api('admin/roles/list'); + + const { canceled, result: roleId } = await os.select({ + title: i18n.ts._role.chooseRoleToAssign, + items: roles.map(r => ({ text: r.name, value: r.id })), + }); + if (canceled) return; + + await os.apiWithDialog('admin/roles/assign', { roleId, userId: user.id }); + }, }]); } } diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts index 94892ff5267013e2eb2c833c72ed6dfa1bf5577b..80bd22a8139fc3110768c0be8541f9eb9ceb2a63 100644 --- a/packages/frontend/src/store.ts +++ b/packages/frontend/src/store.ts @@ -158,6 +158,10 @@ export const defaultStore = markRaw(new Storage('base', { where: 'device', default: false, }, + advancedMfm: { + where: 'device', + default: true, + }, loadRawImages: { where: 'device', default: false, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7480d74ed16a42bb858bb8eb5795aead0ed572bd..7d255b7a42cadf0cb00392ec6ad78c680e662678 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -197,7 +197,7 @@ importers: tsc-alias: 1.8.2 tsconfig-paths: 4.1.2 twemoji-parser: 14.0.0 - typeorm: 0.3.12 + typeorm: 0.3.11 typescript: 4.9.5 ulid: 2.3.0 unzipper: 0.10.11 @@ -301,7 +301,7 @@ importers: tsc-alias: 1.8.2 tsconfig-paths: 4.1.2 twemoji-parser: 14.0.0 - typeorm: 0.3.12_ioredis@4.28.5+pg@8.9.0 + typeorm: 0.3.11_ioredis@4.28.5+pg@8.9.0 typescript: 4.9.5 ulid: 2.3.0 unzipper: 0.10.11 @@ -9493,12 +9493,6 @@ packages: hasBin: true dev: false - /mkdirp/2.1.3: - resolution: {integrity: sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==} - engines: {node: '>=10'} - hasBin: true - dev: false - /mnemonist/0.39.5: resolution: {integrity: sha512-FPUtkhtJ0efmEFGpU14x7jGbTB+s18LrzRL2KgoWz9YvcY3cPomz8tih01GbHwnGk/OmkOKfqd/RAQoc8Lm7DQ==} dependencies: @@ -12762,8 +12756,8 @@ packages: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: false - /typeorm/0.3.12_ioredis@4.28.5+pg@8.9.0: - resolution: {integrity: sha512-sYSxBmCf1nJLLTcYtwqZ+lQIRtLPyUoO93rHTOKk9vJCyT4UfRtU7oRsJvfvKP3nnZTD1hzz2SEy2zwPEN6OyA==} + /typeorm/0.3.11_ioredis@4.28.5+pg@8.9.0: + resolution: {integrity: sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg==} engines: {node: '>= 12.9.0'} hasBin: true peerDependencies: @@ -12774,7 +12768,7 @@ packages: ioredis: ^5.0.4 mongodb: ^3.6.0 mssql: ^7.3.0 - mysql2: ^2.2.5 || ^3.0.1 + mysql2: ^2.2.5 oracledb: ^5.1.0 pg: ^8.5.1 pg-native: ^3.0.0 @@ -12828,15 +12822,15 @@ packages: date-fns: 2.29.3 debug: 4.3.4 dotenv: 16.0.3 - glob: 8.1.0 + glob: 7.2.3 ioredis: 4.28.5 js-yaml: 4.1.0 - mkdirp: 2.1.3 + mkdirp: 1.0.4 pg: 8.9.0 reflect-metadata: 0.1.13 sha.js: 2.4.11 tslib: 2.5.0 - uuid: 9.0.0 + uuid: 8.3.2 xml2js: 0.4.23 yargs: 17.6.2 transitivePeerDependencies: