Compare commits

...

43 Commits

Author SHA1 Message Date
syuilo
b6dc6c6984 10.90.4 2019-02-28 15:57:02 +09:00
syuilo
517084b1fc Fix error 2019-02-28 14:17:39 +09:00
syuilo
27763e6898 🎨 2019-02-28 14:14:05 +09:00
syuilo
57dde1da38 Fix error 2019-02-28 14:13:18 +09:00
syuilo
0bb961767c Fix i18n 2019-02-28 14:10:56 +09:00
syuilo
88515ce677 Use internal dialog 2019-02-28 14:07:03 +09:00
syuilo
00562e840c Improve usability 2019-02-28 12:53:31 +09:00
syuilo
b7927ba386 Refactor 2019-02-28 12:49:13 +09:00
syuilo
9c363ff045 Improve usability 2019-02-28 12:29:04 +09:00
syuilo
1dbce5e3e2 Improve performance 2019-02-28 12:14:24 +09:00
syuilo
361a9ca1be url-previewでembedプレイヤー展開をオプトインにする (#4382)
* url-previewでembedプレイヤー展開をオプトインにする

* remove tabs
2019-02-28 12:05:47 +09:00
syuilo
cde6514839 Add log 2019-02-28 12:00:57 +09:00
syuilo
507e2f727e 読み込む通知数を増やした 2019-02-28 11:44:16 +09:00
syuilo
8028499d2b 🎨 2019-02-28 11:42:41 +09:00
syuilo
c2c79c4a87 [Client] Use class selector to improve performance 2019-02-28 11:39:34 +09:00
mei23
d56f7f3390 remove tabs 2019-02-28 03:57:35 +09:00
mei23
ef70d17194 url-previewでembedプレイヤー展開をオプトインにする 2019-02-28 03:46:37 +09:00
syuilo
9789b9a083 🎨 2019-02-27 16:47:13 +09:00
syuilo
e6311fdb13 🎨 2019-02-27 09:27:19 +09:00
syuilo
2231c54dee 10.90.3 2019-02-27 05:33:05 +09:00
syuilo
20de9a5e35 Resolve #4374 2019-02-27 05:31:16 +09:00
syuilo
ec3a6d7097 🎨 2019-02-27 05:20:29 +09:00
syuilo
9d99bf5af8 🎨 2019-02-27 05:16:32 +09:00
syuilo
52911cc9fd 🎨 2019-02-27 05:13:11 +09:00
syuilo
6f71ba376d Improve doc 2019-02-27 05:08:42 +09:00
syuilo
9f439aabba Fix schema 2019-02-27 05:02:46 +09:00
syuilo
33ad60b1f3 Improve doc 2019-02-27 05:02:36 +09:00
Big Buddha
010d3f8281 Update translations of CONTRIBUTING.md (#4371)
* Update translationa about Nyaize

* Update translation about description of source code

* Fix translation
2019-02-26 18:00:47 +09:00
syuilo
e27c4bf1b9 10.90.2 2019-02-26 15:27:34 +09:00
syuilo
11cfc58ffc New Crowdin translations (#4370)
* New translations ja-JP.yml (Catalan)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Catalan)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Russian)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Japanese, Kansai)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)
2019-02-26 15:25:34 +09:00
syuilo
91f38a8ddd 🎨 2019-02-26 14:44:26 +09:00
syuilo
b56fed8ed5 Update notes/featured 2019-02-26 14:42:24 +09:00
syuilo
4a93dadc1c 🎨 2019-02-26 14:37:17 +09:00
syuilo
3a5f55c471 Chage default settings 2019-02-26 14:28:38 +09:00
syuilo
2919e37586 Fix 2019-02-26 14:25:09 +09:00
syuilo
077bdbfdef Improve doc 2019-02-26 14:21:28 +09:00
syuilo
61ac024127 i18n整理 2019-02-26 14:13:02 +09:00
syuilo
8db8d3f39e 🎨 2019-02-26 14:02:23 +09:00
syuilo
e7032363d7 🎨 2019-02-26 12:14:24 +09:00
syuilo
8a9dc26419 アカウントが削除できない問題を修正 2019-02-26 11:42:21 +09:00
syuilo
022f5a18c8 10.90.1 2019-02-26 07:01:04 +09:00
syuilo
eae4b2f2e9 Improve usability 2019-02-26 06:56:15 +09:00
syuilo
d285452dec Fix bug 2019-02-26 06:54:49 +09:00
77 changed files with 665 additions and 821 deletions

View File

@@ -1,6 +1,30 @@
ChangeLog
=========
10.90.4
----------
* url-previewでembedプレイヤー展開をオプトインにするように
* デザインの調整
* ユーザビリティの強化
10.90.3
----------
* モバイルのデッキで投稿フォームウィジェットが設置できなかった問題を修正
* ドキュメントの強化
* デザインの調整
* ユーザビリティの強化
10.90.2
----------
* アカウントが削除できない問題を修正
* ドキュメントの強化
* デザインの調整
10.90.1
----------
* アカウントを作成したときに自動でホームに遷移しない問題を修正
* ユーザビリティの強化
10.90.0
----------
* モバイル版でもデッキを使えるように

View File

@@ -40,10 +40,10 @@ Stands for _**M**iss**k**ey_.
Stands for _**S**ervice**W**orker_.
### Nyaize
な を にゃ にすること
Convert な(na) to にゃ(nya)
#### Denyaize
Nyaizeを解除すること
Revert Nyaize
## Code style
### Don't use `export default`
@@ -59,16 +59,16 @@ export function something(foo: string): string {
## Directory structure
```
src ... ソースコード
@types ... 外部ライブラリなどの型定義
prelude ... Misskeyに関係ないかつ副作用なし
misc ... 副作用なしのユーティリティ処理
service ... 副作用ありの共通処理
queue ... ジョブキューとジョブ
server ... Webサーバー
client ... クライアント
src ... Source code
@types ... Type definitions
prelude ... Independence utils for coding JavaScript without side effects
misc ... Independence utils for Misskey without side effects
service ... Common functions with side effects
queue ... Job queues and Jobs
server ... Web Server
client ... Client
mfm ... MFM
test ... テスト
test ... Test code
```

View File

@@ -30,6 +30,14 @@ common:
2fa: "二段階認証"
customize-home: "ホームをカスタマイズ"
featured-notes: "ハイライト"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
signin: "ログイン"
signup: "新規登録"
signout: "ログアウト"
got-it: "わかった"
customization-tips:
title: "カスタマイズのヒント"
@@ -433,7 +441,6 @@ common/views/components/signin.vue:
password: "パスワード"
token: "トークン"
signing-in: "やってます..."
signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
signin-with-github: "GitHubでログイン"
@@ -817,7 +824,7 @@ desktop/views/components/settings.vue:
mute-and-block: "ミュート/ブロック"
blocking: "ブロック"
security: "セキュリティ"
signin: "サインイン履歴"
signin: "ログイン履歴"
password: "パスワード"
other: "その他"
license: "ライセンス"
@@ -838,11 +845,6 @@ desktop/views/components/settings.vue:
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
@@ -983,8 +985,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "フォロー申請"
admin: "管理"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
desktop/views/components/ui.header.nav.vue:
game: "ゲーム"
desktop/views/components/ui.header.notifications.vue:
@@ -1312,11 +1312,6 @@ admin/views/federation.vue:
day: "1日ごと"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
@@ -1503,8 +1498,6 @@ mobile/views/pages/home.vue:
messages: "メッセージ"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
@@ -1532,10 +1525,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "{}としてサインイン中"
design: "デザインと表示"
dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
@@ -1568,7 +1558,6 @@ mobile/views/pages/settings.vue:
update-available: "新しいバージョンが利用可能です"
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enable-sounds: "サウンドを有効にする"
password: "パスワード"

View File

@@ -30,6 +30,14 @@ common:
2fa: "Zwei-Faktor-Authentifizierung"
customize-home: "ホームをカスタマイズ"
featured-notes: "ハイライト"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
signin: "ログイン"
signup: "新規登録"
signout: "ログアウト"
got-it: "Verstanden!"
customization-tips:
title: "Anpassung-Tipps"
@@ -433,7 +441,6 @@ common/views/components/signin.vue:
password: "Passwort"
token: "Token"
signing-in: "Melde an..."
signin: "Anmelden"
or: "Oder"
signin-with-twitter: "Twitterでログイン"
signin-with-github: "GitHubでログイン"
@@ -817,7 +824,7 @@ desktop/views/components/settings.vue:
mute-and-block: "ミュート/ブロック"
blocking: "ブロック"
security: "Sicherheit"
signin: "サインイン履歴"
signin: "ログイン履歴"
password: "Passwort"
other: "Anderes"
license: "Lizenz"
@@ -838,11 +845,6 @@ desktop/views/components/settings.vue:
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除"
dark-mode: "Nacht Modus"
use-shadow: "UIに影を使用"
rounded-corners: "Abgerundete Ecken"
circle-icons: "Kreisförmige Icons"
contrasted-acct: "ユーザー名にコントラストを付ける"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "Zeige Antworten"
@@ -983,8 +985,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "フォロー申請"
admin: "管理"
settings: "Einstellungen"
signout: "Ausloggen"
dark: "Verdunkeln"
desktop/views/components/ui.header.nav.vue:
game: "Spielen"
desktop/views/components/ui.header.notifications.vue:
@@ -1312,11 +1312,6 @@ admin/views/federation.vue:
day: "1日ごと"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
@@ -1503,8 +1498,6 @@ mobile/views/pages/home.vue:
messages: "メッセージ"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
@@ -1532,10 +1525,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "{}としてサインイン中"
design: "デザインと表示"
dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
@@ -1568,7 +1558,6 @@ mobile/views/pages/settings.vue:
update-available: "新しいバージョンが利用可能です"
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enable-sounds: "サウンドを有効にする"
password: "パスワード"

View File

@@ -30,6 +30,14 @@ common:
2fa: "Two-factor authentication"
customize-home: "Customize home layout"
featured-notes: "Featured notes"
dark-mode: "Dark Mode"
use-shadow: "Use shadows in the UI"
rounded-corners: "Round corners of UI"
circle-icons: "Use circle icons"
contrasted-acct: "Add contrast to username"
signin: "Log In"
signup: "Sign up"
signout: "Logout"
got-it: "Got it!"
customization-tips:
title: "Customization tips"
@@ -433,7 +441,6 @@ common/views/components/signin.vue:
password: "Password"
token: "Token"
signing-in: "Signing in..."
signin: "Sign in"
or: "Or"
signin-with-twitter: "Log in with Twitter"
signin-with-github: "Sign in with GitHub"
@@ -817,7 +824,7 @@ desktop/views/components/settings.vue:
mute-and-block: "Mute / Block"
blocking: "Blocking"
security: "Security"
signin: "Sign in history"
signin: "Login History"
password: "Password"
other: "Other"
license: "License"
@@ -838,11 +845,6 @@ desktop/views/components/settings.vue:
wallpaper: "Wallpaper"
choose-wallpaper: "Choose a background"
delete-wallpaper: "Remove background"
dark-mode: "Dark Mode"
use-shadow: "Use shadows in the UI"
rounded-corners: "Round corners of UI"
circle-icons: "Use circle icons"
contrasted-acct: "Add contrast to username"
post-form-on-timeline: "Display post form at the top of the timeline"
show-clock-on-header: "Show clock on upper-right"
show-reply-target: "Display reply target"
@@ -983,8 +985,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "Follow requests"
admin: "Admin"
settings: "Settings"
signout: "Sign out"
dark: "Toggle dark mode"
desktop/views/components/ui.header.nav.vue:
game: "Games"
desktop/views/components/ui.header.notifications.vue:
@@ -1312,11 +1312,6 @@ admin/views/federation.vue:
day: "Daily"
desktop/views/pages/welcome.vue:
about: "More details..."
gotit: "Got it!"
signin: "Log In"
signup: "Sign up"
signin-button: "Logging in..."
signup-button: "Sign up"
timeline: "Timeline"
announcements: "Announcements"
photos: "Recent Images"
@@ -1503,8 +1498,6 @@ mobile/views/pages/home.vue:
messages: "Messages"
mobile/views/pages/tag.vue:
no-posts-found: "No posts contains \"{q}\" found."
mobile/views/pages/welcome.vue:
signup: "Sign up"
mobile/views/pages/widgets.vue:
dashboard: "Dashboard"
widgets-hints: "You can add/delete/rearrange widgets. To move the widget, drag \"三\". Tap \"x\" to delete the widget. Some widgets can change display by tapping."
@@ -1532,10 +1525,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "Signed in as {}"
design: "Design and display"
dark-mode: "Dark Mode"
i-am-under-limited-internet: "I'm in limited bandwidth"
circle-icons: "Use circle icons"
contrasted-acct: "Add contrast to username"
timeline: "Timeline"
show-reply-target: "Show reply target"
show-my-renotes: "Show my reposts"
@@ -1568,7 +1558,6 @@ mobile/views/pages/settings.vue:
update-available: "A new version is available"
update-available-desc: "Updates will be applied after reloading the page"
settings: "Settings"
signout: "Sign out"
sound: "Sounds"
enable-sounds: "Enable sounds"
password: "Password"

View File

@@ -30,6 +30,14 @@ common:
2fa: "Autenticación de dos factores"
customize-home: "ホームをカスタマイズ"
featured-notes: "ハイライト"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
signin: "ログイン"
signup: "新規登録"
signout: "ログアウト"
got-it: "¡Listo!"
customization-tips:
title: "Consejos de personalización"
@@ -433,7 +441,6 @@ common/views/components/signin.vue:
password: "Contraseña"
token: "Identificador"
signing-in: "Entrando..."
signin: "Entra"
or: "O"
signin-with-twitter: "Ingresar con Twitter"
signin-with-github: "Ingresar con Github"
@@ -817,7 +824,7 @@ desktop/views/components/settings.vue:
mute-and-block: "Silenciar/Bloquear"
blocking: "Bloquear"
security: "Seguridad"
signin: "Historial de inicios de sesión"
signin: "ログイン履歴"
password: "Contraseña"
other: "Otros"
license: "Licencia"
@@ -838,11 +845,6 @@ desktop/views/components/settings.vue:
wallpaper: "壁紙"
choose-wallpaper: "Elije un fondo"
delete-wallpaper: "Suprimir fondo"
dark-mode: "Modo Nocturno"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "Usar iconos circulares"
contrasted-acct: "ユーザー名にコントラストを付ける"
post-form-on-timeline: "Mostrar el formulario de las entradas encima de la línea de tiempo"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
@@ -983,8 +985,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "Solicitudes de seguimiento"
admin: "Admin"
settings: "Configuraciones"
signout: "Desconectarse"
dark: "Sumergirse en la oscuridad"
desktop/views/components/ui.header.nav.vue:
game: "Juegos"
desktop/views/components/ui.header.notifications.vue:
@@ -1312,11 +1312,6 @@ admin/views/federation.vue:
day: "1日ごと"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
@@ -1503,8 +1498,6 @@ mobile/views/pages/home.vue:
messages: "メッセージ"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
@@ -1532,10 +1525,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "{}としてサインイン中"
design: "デザインと表示"
dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
@@ -1568,7 +1558,6 @@ mobile/views/pages/settings.vue:
update-available: "新しいバージョンが利用可能です"
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enable-sounds: "サウンドを有効にする"
password: "パスワード"

View File

@@ -30,6 +30,14 @@ common:
2fa: "Authentification à deux facteurs"
customize-home: "Personnaliser la disposition de votre accueil"
featured-notes: "Les notes mises en avant"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
signin: "ログイン"
signup: "新規登録"
signout: "ログアウト"
got-it: "Jai compris !"
customization-tips:
title: "Conseils de personnalisation"
@@ -433,7 +441,6 @@ common/views/components/signin.vue:
password: "Mot de passe"
token: "Jeton"
signing-in: "Connexion…"
signin: "Se connecter"
or: "Ou"
signin-with-twitter: "Se connecter via Twitter"
signin-with-github: "Se connecter avec GitHub"
@@ -817,7 +824,7 @@ desktop/views/components/settings.vue:
mute-and-block: "Silencé·e·s / Bloqué·e·s"
blocking: "En cours de blocage"
security: "Sécurité"
signin: "Historique de connexion"
signin: "ログイン履歴"
password: "Mot de Passe"
other: "Autres"
license: "Licence"
@@ -838,11 +845,6 @@ desktop/views/components/settings.vue:
wallpaper: "Arrière plan"
choose-wallpaper: "Sélectionner un fond d'écran"
delete-wallpaper: "Supprimer le fond d'écran"
dark-mode: "Mode nuit"
use-shadow: "Utiliser les ombres dans l'interface utilisateur"
rounded-corners: "Coins arrondis"
circle-icons: "Utiliser des icônes circulaires"
contrasted-acct: "Nom dutilisateur contrasté"
post-form-on-timeline: "Afficher le formulaire en haut du fil"
show-clock-on-header: "Afficher l'horloge à droite sur le coté supérieur"
show-reply-target: "Afficher les réponses"
@@ -983,8 +985,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "Demandes dabonnement"
admin: "Admin"
settings: "Réglages"
signout: "Déconnexion"
dark: "Fall in dark"
desktop/views/components/ui.header.nav.vue:
game: "Jeux"
desktop/views/components/ui.header.notifications.vue:
@@ -1312,11 +1312,6 @@ admin/views/federation.vue:
day: "Par jour"
desktop/views/pages/welcome.vue:
about: "à propos"
gotit: "J'ai compris !"
signin: "Connexion"
signup: "S'enregistrer"
signin-button: "Se connecter"
signup-button: "S'inscrire"
timeline: "Fil dactualité"
announcements: "Notices"
photos: "Images récentes"
@@ -1503,13 +1498,11 @@ mobile/views/pages/home.vue:
messages: "Messages"
mobile/views/pages/tag.vue:
no-posts-found: "Aucune publication ayant pour hashtag « {q} » na été trouvée."
mobile/views/pages/welcome.vue:
signup: "S'enregistrer"
mobile/views/pages/widgets.vue:
dashboard: "Tableau de bord"
widgets-hints: "Vous pouvez ajouter, supprimer et réarranger les widgets. Faites glisser « 三 » pour déplacer le widget. Appuyez sur « x » pour supprimer le widget. Certains widgets peuvent changer dapparence en cliquant dessus."
add-widget: "Ajouter"
customization-tips: "Conseils de personnalisation"
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "追加"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue:
activity: "Activité"
mobile/views/pages/share.vue:
@@ -1532,10 +1525,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "Connecté·e en tant que {}"
design: "Affichage et design"
dark-mode: "Mode nuit"
i-am-under-limited-internet: "J'ai un accès Internet limité"
circle-icons: "Utiliser des icônes circulaires"
contrasted-acct: "Nom dutilisateur contrasté"
timeline: "Fil dactualité"
show-reply-target: "Afficher les réponses"
show-my-renotes: "Afficher mes partages"
@@ -1568,7 +1558,6 @@ mobile/views/pages/settings.vue:
update-available: "Nouvelle version disponible !"
update-available-desc: "Les mises à jour seront appliquées une fois la page est rechargée."
settings: "Réglages"
signout: "Déconnexion"
sound: "Sons"
enable-sounds: "Activer les sons"
password: "Mot de Passe"

View File

@@ -30,6 +30,14 @@ common:
2fa: "二段階認証"
customize-home: "ホームをカスタマイズ"
featured-notes: "ハイライト"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
signin: "ログイン"
signup: "新規登録"
signout: "ログアウト"
got-it: "わかった"
customization-tips:
title: "カスタマイズのヒント"
@@ -433,7 +441,6 @@ common/views/components/signin.vue:
password: "パスワード"
token: "トークン"
signing-in: "やってます..."
signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
signin-with-github: "GitHubでログイン"
@@ -817,7 +824,7 @@ desktop/views/components/settings.vue:
mute-and-block: "ミュート/ブロック"
blocking: "ブロック"
security: "セキュリティ"
signin: "サインイン履歴"
signin: "ログイン履歴"
password: "パスワード"
other: "その他"
license: "ライセンス"
@@ -838,11 +845,6 @@ desktop/views/components/settings.vue:
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
@@ -983,8 +985,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "フォロー申請"
admin: "管理"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
desktop/views/components/ui.header.nav.vue:
game: "ゲーム"
desktop/views/components/ui.header.notifications.vue:
@@ -1312,11 +1312,6 @@ admin/views/federation.vue:
day: "1日ごと"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
@@ -1503,8 +1498,6 @@ mobile/views/pages/home.vue:
messages: "メッセージ"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
@@ -1532,10 +1525,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "{}としてサインイン中"
design: "デザインと表示"
dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
@@ -1568,7 +1558,6 @@ mobile/views/pages/settings.vue:
update-available: "新しいバージョンが利用可能です"
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enable-sounds: "サウンドを有効にする"
password: "パスワード"

View File

@@ -30,6 +30,15 @@ common:
2fa: "二段階認証"
customize-home: "ホームをカスタマイズ"
featured-notes: "ハイライト"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
signin: "ログイン"
signup: "新規登録"
signout: "ログアウト"
reload-to-apply-the-setting: "この設定を反映するにはページをリロードする必要があります。今すぐリロードしますか?"
got-it: "わかった"
customization-tips:
@@ -249,6 +258,9 @@ common/views/pages/explore.vue:
explore: "{host}を探索"
users-info: "現在{users}ユーザーが登録されています"
common/views/components/url-preview.vue:
enable-player: "プレイヤーを開く"
common/views/components/user-list.vue:
no-users: "ユーザーがいません"
@@ -472,7 +484,6 @@ common/views/components/signin.vue:
password: "パスワード"
token: "トークン"
signing-in: "やってます..."
signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
signin-with-github: "GitHubでログイン"
@@ -913,7 +924,7 @@ desktop/views/components/settings.vue:
mute-and-block: "ミュート/ブロック"
blocking: "ブロック"
security: "セキュリティ"
signin: "サインイン履歴"
signin: "ログイン履歴"
password: "パスワード"
other: "その他"
license: "ライセンス"
@@ -936,11 +947,6 @@ desktop/views/components/settings.vue:
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
@@ -1100,8 +1106,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "フォロー申請"
admin: "管理"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
desktop/views/components/ui.header.nav.vue:
game: "ゲーム"
@@ -1453,11 +1457,6 @@ admin/views/federation.vue:
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
@@ -1687,9 +1686,6 @@ mobile/views/pages/home.vue:
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
@@ -1725,10 +1721,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "{}としてサインイン中"
design: "デザインと表示"
dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
@@ -1761,7 +1754,6 @@ mobile/views/pages/settings.vue:
update-available: "新しいバージョンが利用可能です"
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enable-sounds: "サウンドを有効にする"
password: "パスワード"

View File

@@ -30,6 +30,14 @@ common:
2fa: "二段階認証"
customize-home: "ホームをカスタマイズ"
featured-notes: "ハイライト"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
signin: "ログイン"
signup: "新規登録"
signout: "ログアウト"
got-it: "ほい"
customization-tips:
title: "カスタマイズのヒント"
@@ -433,7 +441,6 @@ common/views/components/signin.vue:
password: "パスワード"
token: "トークン"
signing-in: "サインイン中や..."
signin: "サインイン"
or: "それか"
signin-with-twitter: "Twitterでサインイン"
signin-with-github: "GitHubでログイン"
@@ -817,7 +824,7 @@ desktop/views/components/settings.vue:
mute-and-block: "ミュート/ブロック"
blocking: "ブロック"
security: "セキュリティ"
signin: "こんな感じでサインインしたらしいで"
signin: "ログイン履歴"
password: "パスワード"
other: "その他"
license: "ライセンス"
@@ -838,11 +845,6 @@ desktop/views/components/settings.vue:
wallpaper: "壁紙"
choose-wallpaper: "壁紙選ぶ"
delete-wallpaper: "壁紙ほかす"
dark-mode: "夜にすんで"
use-shadow: "UIに影付けたる"
rounded-corners: "みんなまぁるくUI変更"
circle-icons: "アイコンもタコ焼きも丸いやんな?"
contrasted-acct: "ユーザー名ようわからんし見やすしといて"
post-form-on-timeline: "タイムラインの上の方で投稿できるようにせえへん?"
show-clock-on-header: "右上をカリヨン広場にする(時計表示)"
show-reply-target: "どこにリプライするんや見せて"
@@ -983,8 +985,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "フォロー許してくれや!言うてみる"
admin: "管理"
settings: "設定"
signout: "さいなら"
dark: "ナイトゲームじゃ!"
desktop/views/components/ui.header.nav.vue:
game: "ゲーム"
desktop/views/components/ui.header.notifications.vue:
@@ -1312,11 +1312,6 @@ admin/views/federation.vue:
day: "1日ごと"
desktop/views/pages/welcome.vue:
about: "もうちょい……"
gotit: "ほい"
signin: "サインイン"
signup: "サインアップ"
signin-button: "やっとる"
signup-button: "サインアップ"
timeline: "タイムライン"
announcements: "知っときや"
photos: "最近の画像"
@@ -1503,12 +1498,10 @@ mobile/views/pages/home.vue:
messages: "メッセージ"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿はあらへんかった。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできんで。ウィジェットを移動するんやったら「三」をドラッグしてや。ウィジェットを削除するんやったら「x」をタップしてや。いくつかのウィジェットはタップしたったら表示を変更できるかも分からん、知らんけど。"
add-widget: "増やす"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "追加"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue:
activity: "やっとること"
@@ -1532,10 +1525,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "あんたは橋の下で拾った{}や!"
design: "見た感じ"
dark-mode: "ナイトゲームや!"
i-am-under-limited-internet: "電波と阪神がザコいんや"
circle-icons: "アイコンもタコ焼きも丸いやんな?"
contrasted-acct: "ユーザー名ようわからんし見やすしといて"
timeline: "タイムライン"
show-reply-target: "どこにリプライするんや見せて"
show-my-renotes: "あんたのしたRenoteも出すで"
@@ -1568,7 +1558,6 @@ mobile/views/pages/settings.vue:
update-available: "もっとええバージョンがあるで"
update-available-desc: "もっぺんページ読み込んだら新しなるで"
settings: "設定"
signout: "さいなら"
sound: "サウンド"
enable-sounds: "サウンド鳴らす"
password: "パスワード"

View File

@@ -30,6 +30,14 @@ common:
2fa: "2단계 인증"
customize-home: "홈 커스터마이징"
featured-notes: "하이라이트"
dark-mode: "다크 모드"
use-shadow: "UI에 그림자 효과 적용"
rounded-corners: "UI의 모서리를 둥글게 설정"
circle-icons: "원형 아이콘 사용"
contrasted-acct: "사용자명에 대비 추가"
signin: "로그인"
signup: "신규 등록"
signout: "로그아웃"
got-it: "알겠습니다"
customization-tips:
title: "커스터마이징 도움말"
@@ -433,7 +441,6 @@ common/views/components/signin.vue:
password: "비밀번호"
token: "토큰"
signing-in: "로그인 중입니다..."
signin: "로그인"
or: "또는"
signin-with-twitter: "Twitter로 로그인"
signin-with-github: "GitHub으로 로그인"
@@ -838,11 +845,6 @@ desktop/views/components/settings.vue:
wallpaper: "배경"
choose-wallpaper: "배경 설정"
delete-wallpaper: "배경 제거"
dark-mode: "다크 모드"
use-shadow: "UI에 그림자 효과 적용"
rounded-corners: "UI의 모서리를 둥글게 설정"
circle-icons: "원형 아이콘 사용"
contrasted-acct: "사용자명에 대비 추가"
post-form-on-timeline: "타임라인 상단에 글 작성란을 표시"
show-clock-on-header: "오른쪽 상단에 시계 표시"
show-reply-target: "답글 대상 표시"
@@ -983,8 +985,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "팔로우 요청"
admin: "관리"
settings: "설정"
signout: "로그아웃"
dark: "어둠에 삼켜져라"
desktop/views/components/ui.header.nav.vue:
game: "게임"
desktop/views/components/ui.header.notifications.vue:
@@ -1312,11 +1312,6 @@ admin/views/federation.vue:
day: "1일마다"
desktop/views/pages/welcome.vue:
about: "자세히..."
gotit: "알겠습니다"
signin: "로그인"
signup: "신규 등록"
signin-button: "로그인 중"
signup-button: "등록"
timeline: "타임라인"
announcements: "공지사항"
photos: "최근 이미지"
@@ -1503,8 +1498,6 @@ mobile/views/pages/home.vue:
messages: "메시지"
mobile/views/pages/tag.vue:
no-posts-found: "해시태그 \"{q}\"가 붙은 글을 찾을 수 없습니다."
mobile/views/pages/welcome.vue:
signup: "신규 등록"
mobile/views/pages/widgets.vue:
dashboard: "대시보드"
widgets-hints: "위젯을 추가 / 제거하거나 정렬할 수 있습니다. 위젯을 이동하려면 창틀의 \"☰\" 아이콘을 드래그합니다. 위젯을 삭제하려면 \"X\" 아이콘을 탭 합니다. 몇몇 위젯은 탭하면 표시형식을 바꿀 수 있습니다."
@@ -1532,10 +1525,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "{}(으)로 로그인"
design: "디자인 및 표시"
dark-mode: "다크 모드"
i-am-under-limited-internet: "저는 통신 대역폭이 제한되어 있습니다"
circle-icons: "원형 아이콘 사용"
contrasted-acct: "사용자명에 대비 추가"
timeline: "타임라인"
show-reply-target: "답글 대상 표시"
show-my-renotes: "자신이 한 리노트 표시"
@@ -1568,7 +1558,6 @@ mobile/views/pages/settings.vue:
update-available: "새 버전을 사용할 수 있습니다"
update-available-desc: "페이지를 다시 로드하면 업데이트가 적용됩니다."
settings: "설정"
signout: "로그아웃"
sound: "소리"
enable-sounds: "소리 사용"
password: "비밀번호"

View File

@@ -30,6 +30,14 @@ common:
2fa: "二段階認証"
customize-home: "ホームをカスタマイズ"
featured-notes: "ハイライト"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
signin: "ログイン"
signup: "新規登録"
signout: "ログアウト"
got-it: "わかった"
customization-tips:
title: "カスタマイズのヒント"
@@ -433,7 +441,6 @@ common/views/components/signin.vue:
password: "Wachtwoord"
token: "Sleutel"
signing-in: "Bezig met inloggen..."
signin: "Inloggen"
or: "または"
signin-with-twitter: "Twitterでログイン"
signin-with-github: "GitHubでログイン"
@@ -817,7 +824,7 @@ desktop/views/components/settings.vue:
mute-and-block: "ミュート/ブロック"
blocking: "ブロック"
security: "Beveiliging"
signin: "Inloggeschiedenis"
signin: "ログイン履歴"
password: "Wachtwoord"
other: "Overig"
license: "Licentie"
@@ -838,11 +845,6 @@ desktop/views/components/settings.vue:
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除"
dark-mode: "Donkere modus"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "Ronde pictogrammen gebruiken"
contrasted-acct: "ユーザー名にコントラストを付ける"
post-form-on-timeline: "Berichtformulier boven de tijdlijn tonen"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "Antwoord-knop tonen"
@@ -983,8 +985,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "フォロー申請"
admin: "管理"
settings: "Instellingen"
signout: "Uitloggen"
dark: "Donkere modus"
desktop/views/components/ui.header.nav.vue:
game: "Othello spelen"
desktop/views/components/ui.header.notifications.vue:
@@ -1312,11 +1312,6 @@ admin/views/federation.vue:
day: "1日ごと"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
signin: "Inloggen"
signup: "Registreren"
signin-button: "Inloggen"
signup-button: "Registreren"
timeline: "Tijdlijn"
announcements: "お知らせ"
photos: "最近の画像"
@@ -1503,8 +1498,6 @@ mobile/views/pages/home.vue:
messages: "メッセージ"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
@@ -1532,10 +1525,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "Ingelogd als {}"
design: "Ontwerp en weergave"
dark-mode: "Donkere modus"
i-am-under-limited-internet: "Ik heb beperkt internet"
circle-icons: "Ronde pictogrammen gebruiken"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "Tijdlijn"
show-reply-target: "Antwoordknop tonen"
show-my-renotes: "Mijn renotes tonen"
@@ -1568,7 +1558,6 @@ mobile/views/pages/settings.vue:
update-available: "Nieuwe versie beschikbaar!"
update-available-desc: "Herlaad de pagina om de updates toe te passen."
settings: "Instellingen"
signout: "Uitloggen"
sound: "サウンド"
enable-sounds: "サウンドを有効にする"
password: "パスワード"

View File

@@ -30,6 +30,14 @@ common:
2fa: "二段階認証"
customize-home: "ホームをカスタマイズ"
featured-notes: "ハイライト"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
signin: "ログイン"
signup: "新規登録"
signout: "ログアウト"
got-it: "Skjønner!"
customization-tips:
title: "カスタマイズのヒント"
@@ -433,7 +441,6 @@ common/views/components/signin.vue:
password: "Passord"
token: "Token"
signing-in: "やってます..."
signin: "Logg inn"
or: "Eller"
signin-with-twitter: "Twitterでログイン"
signin-with-github: "GitHubでログイン"
@@ -817,7 +824,7 @@ desktop/views/components/settings.vue:
mute-and-block: "ミュート/ブロック"
blocking: "ブロック"
security: "セキュリティ"
signin: "サインイン履歴"
signin: "ログイン履歴"
password: "Passord"
other: "Annet"
license: "Lisens"
@@ -838,11 +845,6 @@ desktop/views/components/settings.vue:
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
@@ -983,8 +985,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "フォロー申請"
admin: "Admin"
settings: "Innstillinger"
signout: "サインアウト"
dark: "闇に飲まれる"
desktop/views/components/ui.header.nav.vue:
game: "Spill"
desktop/views/components/ui.header.notifications.vue:
@@ -1312,11 +1312,6 @@ admin/views/federation.vue:
day: "1日ごと"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "Skjønner!"
signin: "Logg inn"
signup: "Bli med"
signin-button: "Logger inn..."
signup-button: "Registrer"
timeline: "タイムライン"
announcements: "Kunngjøringer"
photos: "最近の画像"
@@ -1503,12 +1498,10 @@ mobile/views/pages/home.vue:
messages: "メッセージ"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "Bli med"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "Legg til"
add-widget: "追加"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue:
activity: "アクティビティ"
@@ -1532,10 +1525,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "{}としてサインイン中"
design: "デザインと表示"
dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
@@ -1568,7 +1558,6 @@ mobile/views/pages/settings.vue:
update-available: "新しいバージョンが利用可能です"
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "Innstillinger"
signout: "サインアウト"
sound: "Lyder"
enable-sounds: "サウンドを有効にする"
password: "パスワード"

View File

@@ -30,6 +30,14 @@ common:
2fa: "Uwierzytelnienie dwuetapowe"
customize-home: "Dostosuj stronę główną"
featured-notes: "ハイライト"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
signin: "ログイン"
signup: "新規登録"
signout: "ログアウト"
got-it: "Rozumiem!"
customization-tips:
title: "Wskazówki o dostosowywaniu"
@@ -433,7 +441,6 @@ common/views/components/signin.vue:
password: "Hasło"
token: "Token"
signing-in: "Logowanie…"
signin: "Zaloguj"
or: "lub"
signin-with-twitter: "Zaloguj się za pomocą Twittera"
signin-with-github: "Zaloguj się za pomocą GitHuba"
@@ -817,7 +824,7 @@ desktop/views/components/settings.vue:
mute-and-block: "Wycisz / Zablokuj"
blocking: "ブロック"
security: "Bezpieczeństwo"
signin: "Historia logowań"
signin: "ログイン履歴"
password: "Hasło"
other: "Inne"
license: "Licencja"
@@ -838,11 +845,6 @@ desktop/views/components/settings.vue:
wallpaper: "Tapeta"
choose-wallpaper: "Wybierz tło"
delete-wallpaper: "Usuń tło"
dark-mode: "Tryb ciemny"
use-shadow: "Użyj cieni w UI"
rounded-corners: "Zaokrąglaj rogi w UI"
circle-icons: "Używaj okrągłych ikon"
contrasted-acct: "ユーザー名にコントラストを付ける"
post-form-on-timeline: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "Pokazuj cel odpowiedzi"
@@ -983,8 +985,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "Prośby o śledzenie"
admin: "Admin"
settings: "Ustawienia"
signout: "Wyloguj się"
dark: "Sprowadź ciemność"
desktop/views/components/ui.header.nav.vue:
game: "Gra"
desktop/views/components/ui.header.notifications.vue:
@@ -1312,11 +1312,6 @@ admin/views/federation.vue:
day: "1日ごと"
desktop/views/pages/welcome.vue:
about: "O Misskey"
gotit: "Rozumiem!"
signin: "Zaloguj się"
signup: "Zarejestruj się"
signin-button: "Zaloguj się"
signup-button: "Zarejestruj się"
timeline: "Oś czasu"
announcements: "Ogłoszenia"
photos: "Ostatnie obrazy"
@@ -1503,12 +1498,10 @@ mobile/views/pages/home.vue:
messages: "Wiadomości"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "Zarejestruj się"
mobile/views/pages/widgets.vue:
dashboard: "Kokpit"
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "Dodaj"
add-widget: "追加"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue:
activity: "Aktywność"
@@ -1532,10 +1525,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "Zalogowany jako {}"
design: "Wygląd i wyświetlanie"
dark-mode: "Tryb ciemny"
i-am-under-limited-internet: "Ograniczaj zużycie transferu"
circle-icons: "Używaj okrągłych ikon"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "Oś czasu"
show-reply-target: "Pokazuj cel odpowiedzi"
show-my-renotes: "Pokazuj moje udostępnienia"
@@ -1568,7 +1558,6 @@ mobile/views/pages/settings.vue:
update-available: "Dostępna jest nowa wersja"
update-available-desc: "Odśwież stronę, aby zastosować aktualizację."
settings: "Ustawienia"
signout: "Wyloguj"
sound: "Dźwięk"
enable-sounds: "Włącz dźwięk"
password: "Hasło"

View File

@@ -30,6 +30,14 @@ common:
2fa: "二段階認証"
customize-home: "ホームをカスタマイズ"
featured-notes: "ハイライト"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
signin: "ログイン"
signup: "新規登録"
signout: "ログアウト"
got-it: "Entendi!"
customization-tips:
title: "Dicas de personalização"
@@ -433,7 +441,6 @@ common/views/components/signin.vue:
password: "パスワード"
token: "トークン"
signing-in: "やってます..."
signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
signin-with-github: "GitHubでログイン"
@@ -817,7 +824,7 @@ desktop/views/components/settings.vue:
mute-and-block: "ミュート/ブロック"
blocking: "ブロック"
security: "セキュリティ"
signin: "サインイン履歴"
signin: "ログイン履歴"
password: "パスワード"
other: "その他"
license: "ライセンス"
@@ -838,11 +845,6 @@ desktop/views/components/settings.vue:
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
@@ -983,8 +985,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "フォロー申請"
admin: "管理"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
desktop/views/components/ui.header.nav.vue:
game: "ゲーム"
desktop/views/components/ui.header.notifications.vue:
@@ -1312,11 +1312,6 @@ admin/views/federation.vue:
day: "1日ごと"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "Timeline"
announcements: "お知らせ"
photos: "最近の画像"
@@ -1503,8 +1498,6 @@ mobile/views/pages/home.vue:
messages: "メッセージ"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
@@ -1532,10 +1525,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "{}としてサインイン中"
design: "デザインと表示"
dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
@@ -1568,7 +1558,6 @@ mobile/views/pages/settings.vue:
update-available: "Uma nova versão está disponível"
update-available-desc: "Atualizações vão ser aplicadas depois de recarregar a página"
settings: "Configurações"
signout: "Sair"
sound: "Sons"
enable-sounds: "Ativar sons"
password: "パスワード"

View File

@@ -30,6 +30,14 @@ common:
2fa: "二段階認証"
customize-home: "ホームをカスタマイズ"
featured-notes: "ハイライト"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
signin: "ログイン"
signup: "新規登録"
signout: "ログアウト"
got-it: "わかった"
customization-tips:
title: "Советы по настройке"
@@ -433,7 +441,6 @@ common/views/components/signin.vue:
password: "パスワード"
token: "トークン"
signing-in: "やってます..."
signin: "サインイン"
or: "または"
signin-with-twitter: "Twitterでログイン"
signin-with-github: "GitHubでログイン"
@@ -817,7 +824,7 @@ desktop/views/components/settings.vue:
mute-and-block: "ミュート/ブロック"
blocking: "ブロック"
security: "セキュリティ"
signin: "サインイン履歴"
signin: "ログイン履歴"
password: "パスワード"
other: "その他"
license: "ライセンス"
@@ -838,11 +845,6 @@ desktop/views/components/settings.vue:
wallpaper: "壁紙"
choose-wallpaper: "壁紙を選択"
delete-wallpaper: "壁紙を削除"
dark-mode: "ダークモード"
use-shadow: "UIに影を使用"
rounded-corners: "UIの角を丸める"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
show-clock-on-header: "右上に時計を表示する"
show-reply-target: "リプライ先を表示する"
@@ -983,8 +985,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "フォロー申請"
admin: "管理"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
desktop/views/components/ui.header.nav.vue:
game: "ゲーム"
desktop/views/components/ui.header.notifications.vue:
@@ -1312,11 +1312,6 @@ admin/views/federation.vue:
day: "1日ごと"
desktop/views/pages/welcome.vue:
about: "詳しく..."
gotit: "わかった"
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
announcements: "お知らせ"
photos: "最近の画像"
@@ -1503,8 +1498,6 @@ mobile/views/pages/home.vue:
messages: "メッセージ"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
mobile/views/pages/welcome.vue:
signup: "新規登録"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
@@ -1532,10 +1525,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "{}としてサインイン中"
design: "デザインと表示"
dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用"
contrasted-acct: "ユーザー名にコントラストを付ける"
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
@@ -1568,7 +1558,6 @@ mobile/views/pages/settings.vue:
update-available: "新しいバージョンが利用可能です"
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
sound: "サウンド"
enable-sounds: "サウンドを有効にする"
password: "パスワード"

View File

@@ -30,6 +30,14 @@ common:
2fa: "双重身份验证"
customize-home: "自定义主页"
featured-notes: "高亮"
dark-mode: "黑暗模式"
use-shadow: "在UI中使用阴影效果"
rounded-corners: "UI界面圆角效果"
circle-icons: "使用圆形图标"
contrasted-acct: "增加用户名的对比度"
signin: "登录"
signup: "注册"
signout: "退出"
got-it: "没问题"
customization-tips:
title: "自定义提示"
@@ -433,7 +441,6 @@ common/views/components/signin.vue:
password: "密码"
token: "Token (令牌)"
signing-in: "正在登录..."
signin: "登录"
or: "或者"
signin-with-twitter: "用 Twitter 登录"
signin-with-github: "用 GitHub 登录"
@@ -838,11 +845,6 @@ desktop/views/components/settings.vue:
wallpaper: "壁纸"
choose-wallpaper: "选择一个背景壁纸"
delete-wallpaper: "移除背景壁纸"
dark-mode: "黑暗模式"
use-shadow: "在UI中使用阴影效果"
rounded-corners: "UI界面圆角效果"
circle-icons: "使用圆形图标"
contrasted-acct: "增加用户名的对比度"
post-form-on-timeline: "在时间线顶部显示帖子表单"
show-clock-on-header: "在右上角显示时钟"
show-reply-target: "显示回复目标"
@@ -983,8 +985,6 @@ desktop/views/components/ui.header.account.vue:
follow-requests: "关注申请"
admin: "管理"
settings: "设置"
signout: "登出"
dark: "切换到黑暗模式 (夜间使用请打开此选项哦~)"
desktop/views/components/ui.header.nav.vue:
game: "游戏"
desktop/views/components/ui.header.notifications.vue:
@@ -1312,11 +1312,6 @@ admin/views/federation.vue:
day: "每天"
desktop/views/pages/welcome.vue:
about: "更多信息..."
gotit: "没问题! "
signin: "登录"
signup: "注册"
signin-button: "正在登录"
signup-button: "注册"
timeline: "时间线"
announcements: "公告"
photos: "最近图片"
@@ -1503,10 +1498,8 @@ mobile/views/pages/home.vue:
messages: "信息"
mobile/views/pages/tag.vue:
no-posts-found: "没有找到带有主题标签“{q}”的帖子"
mobile/views/pages/welcome.vue:
signup: "注册"
mobile/views/pages/widgets.vue:
dashboard: "Dashboard"
dashboard: "仪表盘"
widgets-hints: "您可以添加/删除/重新排列小部件。 要移动小部件,请拖动“三”。 点击“×”删除小部件。 某些小部件可以通过点击来更改显示。"
add-widget: "添加"
customization-tips: "定制提示"
@@ -1532,10 +1525,7 @@ mobile/views/pages/selectdrive.vue:
mobile/views/pages/settings.vue:
signed-in-as: "以{}登录"
design: "设计与展示"
dark-mode: "夜间模式"
i-am-under-limited-internet: "我的带宽有限"
circle-icons: "使用圆形图标"
contrasted-acct: "增加用户名的对比度"
timeline: "时间线"
show-reply-target: "显示回复目标"
show-my-renotes: "显示我的转发"
@@ -1568,7 +1558,6 @@ mobile/views/pages/settings.vue:
update-available: "有新版本可用!"
update-available-desc: "重新加载页面以应用更新"
settings: "设置"
signout: "注销"
sound: "声音"
enable-sounds: "开启声音"
password: "密码"

View File

@@ -1,7 +1,7 @@
{
"name": "misskey",
"author": "syuilo <i@syuilo.com>",
"version": "10.90.0",
"version": "10.90.4",
"codename": "nighthike",
"repository": {
"type": "git",

View File

@@ -1,5 +1,5 @@
export default function(me, settings, note) {
const isMyNote = note.userId == me.id;
const isMyNote = me && (note.userId == me.id);
const isPureRenote = note.renoteId != null && note.text == null && note.fileIds.length == 0 && note.poll == null;
const includesMutedWords = (text: string) =>

View File

@@ -1,5 +1,5 @@
<template>
<span class="mk-acct">
<span class="mk-acct" v-once>
<span class="name">@{{ user.username }}</span>
<span class="host" :class="{ fade: $store.state.settings.contrastedAcct }" v-if="user.host || detail || $store.state.settings.showFullAcct">@{{ user.host || host }}</span>
<fa v-if="user.isLocked == true" class="locked" icon="lock" fixed-width/>

View File

@@ -1,14 +1,14 @@
<template>
<span class="mk-avatar" :style="style" :class="{ cat }" :title="user | acct" v-if="disableLink && !disablePreview" v-user-preview="user.id" @click="onClick">
<span class="mk-avatar" :style="style" :class="{ cat }" :title="user | acct" v-if="disableLink && !disablePreview" v-user-preview="user.id" @click="onClick" v-once>
<span class="inner" :style="icon"></span>
</span>
<span class="mk-avatar" :style="style" :class="{ cat }" :title="user | acct" v-else-if="disableLink && disablePreview" @click="onClick">
<span class="mk-avatar" :style="style" :class="{ cat }" :title="user | acct" v-else-if="disableLink && disablePreview" @click="onClick" v-once>
<span class="inner" :style="icon"></span>
</span>
<router-link class="mk-avatar" :style="style" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && !disablePreview" v-user-preview="user.id">
<router-link class="mk-avatar" :style="style" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && !disablePreview" v-user-preview="user.id" v-once>
<span class="inner" :style="icon"></span>
</router-link>
<router-link class="mk-avatar" :style="style" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && disablePreview">
<router-link class="mk-avatar" :style="style" :class="{ cat }" :to="user | userPage" :title="user | acct" :target="target" v-else-if="!disableLink && disablePreview" v-once>
<span class="inner" :style="icon"></span>
</router-link>
</template>

View File

@@ -80,7 +80,7 @@ export default Vue.extend({
> div
background-color var(--text)
border-radius var(--round)
border-radius 6px
color var(--secondary)
display inline-block
font-size 14px

View File

@@ -1,5 +1,5 @@
<template>
<mfm-core v-bind="$attrs" class="havbbuyv"/>
<mfm-core v-bind="$attrs" class="havbbuyv" v-once/>
</template>
<script lang="ts">

View File

@@ -14,7 +14,7 @@
<span>{{ $t('@.2fa') }}</span>
<template #prefix><fa icon="gavel"/></template>
</ui-input>
<ui-button type="submit" :disabled="signing">{{ signing ? $t('signing-in') : $t('signin') }}</ui-button>
<ui-button type="submit" :disabled="signing">{{ signing ? $t('signing-in') : $t('@.signin') }}</ui-button>
<p v-if="meta && meta.enableTwitterIntegration" style="margin: 8px 0;"><a :href="`${apiUrl}/signin/twitter`">{{ $t('signin-with-twitter') }}</a></p>
<p v-if="meta && meta.enableGithubIntegration" style="margin: 8px 0;"><a :href="`${apiUrl}/signin/github`">{{ $t('signin-with-github') }}</a></p>
<p v-if="meta && meta.enableDiscordIntegration" style="margin: 8px 0;"><a :href="`${apiUrl}/signin/discord`">{{ $t('signin-with-discord') /* TODO: Make these layouts better */ }}</a></p>

View File

@@ -150,7 +150,7 @@ export default Vue.extend({
password: this.password
}).then(res => {
localStorage.setItem('i', res.i);
location.reload();
location.href = '/';
});
}).catch(() => {
alert(this.$t('some-error'));

View File

@@ -1,5 +1,5 @@
<template>
<div class="ui-card" :class="{ shadow: $store.state.settings.useShadow }">
<div class="ui-card" :class="{ shadow: $store.state.device.useShadow, round: $store.state.device.roundedCorners }">
<header>
<slot name="title"></slot>
</header>
@@ -25,7 +25,9 @@ export default Vue.extend({
max-width 850px
color var(--faceText)
background var(--face)
border-radius var(--round)
&.round
border-radius 6px
&.shadow
box-shadow 0 3px 1px -2px rgba(#000, 0.2), 0 2px 2px 0 rgba(#000, 0.14), 0 1px 5px 0 rgba(#000, 0.12)

View File

@@ -1,6 +1,6 @@
<template>
<div v-if="player.url" class="player" :style="`padding: ${(player.height || 0) / (player.width || 1) * 100}% 0 0`">
<iframe :src="player.url" :width="player.width || '100%'" :heigth="player.height || 250" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen />
<div v-if="playerEnabled" class="player" :style="`padding: ${(player.height || 0) / (player.width || 1) * 100}% 0 0`">
<iframe :src="player.url + (player.url.match(/\?/) ? '&autoplay=1&auto_play=1' : '?autoplay=1&auto_play=1')" :width="player.width || '100%'" :heigth="player.height || 250" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen />
</div>
<div v-else-if="tweetUrl && detail" class="twitter">
<blockquote ref="tweet" class="twitter-tweet" :data-theme="$store.state.device.darkmode ? 'dark' : null">
@@ -9,7 +9,9 @@
</div>
<div v-else class="mk-url-preview">
<a :class="{ mini: narrow, compact }" :href="url" target="_blank" :title="url" v-if="!fetching">
<div class="thumbnail" v-if="thumbnail" :style="`background-image: url('${thumbnail}')`"></div>
<div class="thumbnail" v-if="thumbnail" :style="`background-image: url('${thumbnail}')`">
<button v-if="!playerEnabled && player.url" @click.prevent="playerEnabled = true" :title="$t('enable-player')"><fa :icon="['far', 'play-circle']"/></button>
</div>
<article>
<header>
<h1 :title="title">{{ title }}</h1>
@@ -26,88 +28,11 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import { url as misskeyUrl } from '../../../config';
// THIS IS THE WHITELIST FOR THE EMBED PLAYER
const whiteList = [
'afreecatv.com',
'aparat.com',
'applemusic.com',
'amazon.com',
'awa.fm',
'bandcamp.com',
'bbc.co.uk',
'beatport.com',
'bilibili.com',
'boomstream.com',
'breakers.tv',
'cam4.com',
'cavelis.net',
'chaturbate.com',
'cnn.com',
'cybergame.tv',
'dailymotion.com',
'deezer.com',
'djlive.pl',
'e-onkyo.com',
'eventials.com',
'facebook.com',
'fc2.com',
'gameplank.tv',
'goodgame.ru',
'google.com',
'hardtunes.com',
'instagram.com',
'johnnylooch.com',
'kexp.org',
'lahzenegar.com',
'liveedu.tv',
'livetube.cc',
'livestream.com',
'meridix.com',
'mixcloud.com',
'mixer.com',
'mobcrush.com',
'mylive.in.th',
'myspace.com',
'netflix.com',
'newretrowave.com',
'nhk.or.jp',
'nicovideo.jp',
'nico.ms',
'noisetrade.com',
'nood.tv',
'npr.org',
'openrec.tv',
'pandora.com',
'pandora.tv',
'picarto.tv',
'pscp.tv',
'restream.io',
'reverbnation.com',
'sermonaudio.com',
'smashcast.tv',
'songkick.com',
'soundcloud.com',
'spinninrecords.com',
'spotify.com',
'stitcher.com',
'stream.me',
'switchboard.live',
'tunein.com',
'twitcasting.tv',
'twitch.tv',
'twitter.com',
'vaughnlive.tv',
'veoh.com',
'vimeo.com',
'watchpeoplecode.com',
'web.tv',
'youtube.com',
'youtu.be'
];
export default Vue.extend({
i18n: i18n('common/views/components/url-preview.vue'),
props: {
url: {
type: String,
@@ -147,7 +72,8 @@ export default Vue.extend({
height: null
},
tweetUrl: null,
misskeyUrl
playerEnabled: false,
misskeyUrl,
};
},
@@ -188,9 +114,7 @@ export default Vue.extend({
this.icon = info.icon;
this.sitename = info.sitename;
this.fetching = false;
if (whiteList.some(x => x == url.hostname || url.hostname.endsWith(`.${x}`))) {
this.player = info.player;
}
this.player = info.player;
})
});
}
@@ -230,6 +154,17 @@ export default Vue.extend({
height 100%
background-position center
background-size cover
display flex
justify-content center
align-items center
> button
font-size 3.5em
opacity: 0.7
&:hover
font-size 4em
opacity 0.9
& + article
left 100px

View File

@@ -1,6 +1,5 @@
<template>
<div class="dnpfarvgbnfmyzbdquhhzyxcmstpdqzs" :class="{ naked, narrow, active, isStacked, draghover, dragging, dropready }"
:data-mobile="$root.isMobile"
<div class="dnpfarvgbnfmyzbdquhhzyxcmstpdqzs" :class="{ naked, narrow, active, isStacked, draghover, dragging, dropready, isMobile: $root.isMobile, shadow: $store.state.device.useShadow, round: $store.state.device.roundedCorners }"
@dragover.prevent.stop="onDragover"
@dragleave="onDragleave"
@drop.prevent.stop="onDrop"
@@ -323,16 +322,13 @@ export default Vue.extend({
height 100%
background var(--face)
border-radius var(--round)
box-shadow var(--shadow)
overflow hidden
&[data-mobile]
border-radius 0
box-shadow none
&.round
border-radius 6px
> header
box-shadow none
&.shadow
box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
&.draghover
box-shadow 0 0 0 2px var(--primaryAlpha08)
@@ -374,6 +370,10 @@ export default Vue.extend({
> button
color var(--text)
&.isMobile
> header
box-shadow none
> header
display flex
z-index 2

View File

@@ -29,7 +29,7 @@ export default Vue.extend({
return {
faNewspaper,
makePromise: cursor => this.$root.api('notes/featured', {
limit: 20,
limit: 30,
}).then(notes => {
notes.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
return notes;

View File

@@ -1,6 +1,6 @@
<template>
<mk-ui :class="$style.root">
<div class="qlvquzbjribqcaozciifydkngcwtyzje" :data-mobile="$root.isMobile" ref="body" :style="style" :class="`${$store.state.device.deckColumnAlign} ${$store.state.device.deckColumnWidth}`" v-hotkey.global="keymap">
<div class="qlvquzbjribqcaozciifydkngcwtyzje" ref="body" :style="style" :class="`${$store.state.device.deckColumnAlign} ${$store.state.device.deckColumnWidth}`" v-hotkey.global="keymap">
<template v-for="ids in layout">
<div v-if="ids.length > 1" class="folder">
<template v-for="id, i in ids">
@@ -332,15 +332,8 @@ export default Vue.extend({
overflow-y hidden
-webkit-overflow-scrolling touch
&[data-mobile]
padding 0
> div
margin-right 0
&.folder
> *:not(:last-child)
margin-bottom 0
@media (max-width 500px)
padding 8px 0 8px 8px
> div
margin-right 8px

View File

@@ -14,6 +14,7 @@ import wTips from './tips.vue';
import wNav from './nav.vue';
import wHashtags from './hashtags.vue';
import wInstance from './instance.vue';
import wPostForm from './post-form.vue';
Vue.component('mkw-analog-clock', wAnalogClock);
Vue.component('mkw-nav', wNav);
@@ -29,3 +30,4 @@ Vue.component('mkw-rss', wRss);
Vue.component('mkw-version', wVersion);
Vue.component('mkw-hashtags', wHashtags);
Vue.component('mkw-instance', wInstance);
Vue.component('mkw-post-form', wPostForm);

View File

@@ -17,7 +17,7 @@
ref="text"
v-autocomplete="{ model: 'text' }"
></textarea>
<button class="emoji" @click="emoji" ref="emoji">
<button class="emoji" @click="emoji" ref="emoji" v-if="!$root.isMobile">
<fa :icon="['far', 'laugh']"/>
</button>
</div>
@@ -161,7 +161,7 @@ export default define({
},
async emoji() {
const Picker = await import('../components/emoji-picker-dialog.vue').then(m => m.default);
const Picker = await import('../../../desktop/views/components/emoji-picker-dialog.vue').then(m => m.default);
const button = this.$refs.emoji;
const rect = button.getBoundingClientRect();
const vm = this.$root.new(Picker, {
@@ -186,6 +186,9 @@ export default define({
alert('Something happened');
}).then(() => {
this.posting = false;
this.$nextTick(() => {
this.$refs.text.focus();
});
});
},

View File

@@ -7,7 +7,7 @@
<div class="mkw-rss--body" :data-mobile="platform == 'mobile'">
<p class="fetching" v-if="fetching"><fa icon="spinner" pulse fixed-width/>{{ $t('@.loading') }}<mk-ellipsis/></p>
<div class="feed" v-else>
<a v-for="item in items" :href="item.link" target="_blank">{{ item.title }}</a>
<a v-for="item in items" :href="item.link" target="_blank" :title="item.title">{{ item.title }}</a>
</div>
</div>
</ui-container>
@@ -55,12 +55,18 @@ export default define({
});
},
setting() {
const url = window.prompt('URL', this.props.url);
if (url && url != '') {
this.$root.dialog({
title: 'URL',
input: {
type: 'url',
default: this.props.url
}
}).then(({ canceled, result: url }) => {
if (canceled) return;
this.props.url = url;
this.save();
this.fetch();
}
});
}
}
});

View File

@@ -1,5 +1,5 @@
<template>
<div class="mk-calendar" :data-melt="design == 4 || design == 5">
<div class="mk-calendar" :data-melt="design == 4 || design == 5" :class="{ shadow: $store.state.device.useShadow, round: $store.state.device.roundedCorners }">
<template v-if="design == 0 || design == 1">
<button @click="prev" :title="$t('prev')"><fa icon="chevron-circle-left"/></button>
<p class="title">{{ $t('title', { year, month }) }}</p>
@@ -133,10 +133,14 @@ export default Vue.extend({
.mk-calendar
color var(--calendarDay)
background var(--face)
box-shadow var(--shadow)
border-radius var(--round)
overflow hidden
&.round
border-radius 6px
&.shadow
box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
&[data-melt]
background transparent !important
border none !important

View File

@@ -1,5 +1,5 @@
<template>
<div class="mk-note-detail" :title="title" tabindex="-1">
<div class="mk-note-detail" :title="title" tabindex="-1" :class="{ shadow: $store.state.device.useShadow, round: $store.state.device.roundedCorners }">
<button
class="read-more"
v-if="appearNote.reply && appearNote.reply.replyId && conversation.length == 0"
@@ -159,8 +159,15 @@ export default Vue.extend({
overflow hidden
text-align left
background var(--face)
box-shadow var(--shadow)
border-radius var(--round)
&.round
border-radius 6px
> .read-more
border-radius 6px 6px 0 0
&.shadow
box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
> .read-more
display block
@@ -175,7 +182,6 @@ export default Vue.extend({
outline none
border none
border-bottom solid 1px var(--faceDivider)
border-radius var(--round) var(--round) 0 0
&:hover
box-shadow 0 0 0 100px inset rgba(0, 0, 0, 0.05)

View File

@@ -39,30 +39,30 @@
<mk-url-preview v-for="url in urls" :url="url" :key="url" :compact="compact"/>
</div>
</div>
<footer v-if="appearNote.deletedAt == null">
<footer v-if="appearNote.deletedAt == null" class="footer">
<span class="app" v-if="appearNote.app && narrow && $store.state.settings.showVia">via <b>{{ appearNote.app.name }}</b></span>
<mk-reactions-viewer :note="appearNote" ref="reactionsViewer"/>
<button class="replyButton" @click="reply()" :title="$t('reply')">
<button class="replyButton button" @click="reply()" :title="$t('reply')">
<template v-if="appearNote.reply"><fa icon="reply-all"/></template>
<template v-else><fa icon="reply"/></template>
<p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p>
</button>
<button v-if="['public', 'home'].includes(appearNote.visibility)" class="renoteButton" @click="renote()" :title="$t('renote')">
<button v-if="['public', 'home'].includes(appearNote.visibility)" class="renoteButton button" @click="renote()" :title="$t('renote')">
<fa icon="retweet"/>
<p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p>
</button>
<button v-else class="inhibitedButton">
<button v-else class="inhibitedButton button">
<fa icon="ban"/>
</button>
<button v-if="!isMyNote && appearNote.myReaction == null" class="reactionButton" @click="react()" ref="reactButton" :title="$t('add-reaction')">
<button v-if="!isMyNote && appearNote.myReaction == null" class="reactionButton button" @click="react()" ref="reactButton" :title="$t('add-reaction')">
<fa icon="plus"/>
<p class="count" v-if="Object.values(appearNote.reactionCounts).some(x => x)">{{ Object.values(appearNote.reactionCounts).reduce((a, c) => a + c, 0) }}</p>
</button>
<button v-if="!isMyNote && appearNote.myReaction != null" class="reactionButton reacted" @click="undoReact(appearNote)" ref="reactButton" :title="$t('undo-reaction')">
<button v-if="!isMyNote && appearNote.myReaction != null" class="reactionButton reacted button" @click="undoReact(appearNote)" ref="reactButton" :title="$t('undo-reaction')">
<fa icon="minus"/>
<p class="count" v-if="Object.values(appearNote.reactionCounts).some(x => x)">{{ Object.values(appearNote.reactionCounts).reduce((a, c) => a + c, 0) }}</p>
</button>
<button @click="menu()" ref="menuButton">
<button @click="menu()" ref="menuButton" class="button">
<fa icon="ellipsis-h"/>
</button>
</footer>
@@ -274,7 +274,7 @@ export default Vue.extend({
border dashed var(--lineWidth) var(--quoteBorder)
border-radius 8px
> footer
> .footer
> .app
display block
margin-top 0.5em
@@ -282,7 +282,7 @@ export default Vue.extend({
color var(--noteHeaderInfo)
font-size 0.8em
> button
> .button
margin 0 28px 0 0
padding 0 8px
line-height 32px

View File

@@ -1,5 +1,5 @@
<template>
<div class="mk-notes">
<div class="mk-notes" :class="{ shadow: $store.state.device.useShadow, round: $store.state.device.roundedCorners }">
<slot name="header"></slot>
<div class="newer-indicator" :style="{ top: $store.state.uiHeaderHeight + 'px' }" v-show="queue.length > 0"></div>
@@ -191,10 +191,14 @@ export default Vue.extend({
<style lang="stylus" scoped>
.mk-notes
background var(--face)
box-shadow var(--shadow)
border-radius var(--round)
overflow hidden
&.round
border-radius 6px
&.shadow
box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
.transition
.mk-notes-enter
.mk-notes-leave-to

View File

@@ -87,10 +87,10 @@
<ui-radio v-model="navbar" value="right">{{ $t('navbar-position-right') }}</ui-radio>
</section>
<section>
<ui-switch v-model="darkmode">{{ $t('dark-mode') }}</ui-switch>
<ui-switch v-model="useShadow">{{ $t('use-shadow') }}</ui-switch>
<ui-switch v-model="roundedCorners">{{ $t('rounded-corners') }}</ui-switch>
<ui-switch v-model="circleIcons">{{ $t('circle-icons') }}</ui-switch>
<ui-switch v-model="darkmode">{{ $t('@.dark-mode') }}</ui-switch>
<ui-switch v-model="useShadow">{{ $t('@.use-shadow') }}</ui-switch>
<ui-switch v-model="roundedCorners">{{ $t('@.rounded-corners') }}</ui-switch>
<ui-switch v-model="circleIcons">{{ $t('@.circle-icons') }}</ui-switch>
<section>
<header>{{ $t('@.line-width') }}</header>
<ui-radio v-model="lineWidth" :value="0.5">{{ $t('@.line-width-thin') }}</ui-radio>
@@ -98,7 +98,7 @@
<ui-radio v-model="lineWidth" :value="2">{{ $t('@.line-width-thick') }}</ui-radio>
</section>
<ui-switch v-model="reduceMotion">{{ $t('@.reduce-motion') }}</ui-switch>
<ui-switch v-model="contrastedAcct">{{ $t('contrasted-acct') }}</ui-switch>
<ui-switch v-model="contrastedAcct">{{ $t('@.contrasted-acct') }}</ui-switch>
<ui-switch v-model="showFullAcct">{{ $t('@.show-full-acct') }}</ui-switch>
<ui-switch v-model="showVia">{{ $t('@.show-via') }}</ui-switch>
<ui-switch v-model="useOsDefaultEmojis">{{ $t('@.use-os-default-emojis') }}</ui-switch>
@@ -387,13 +387,13 @@ export default Vue.extend({
},
useShadow: {
get() { return this.$store.state.settings.useShadow; },
set(value) { this.$store.dispatch('settings/set', { key: 'useShadow', value }); }
get() { return this.$store.state.device.useShadow; },
set(value) { this.$store.commit('device/set', { key: 'useShadow', value }); }
},
roundedCorners: {
get() { return this.$store.state.settings.roundedCorners; },
set(value) { this.$store.dispatch('settings/set', { key: 'roundedCorners', value }); }
get() { return this.$store.state.device.roundedCorners; },
set(value) { this.$store.commit('device/set', { key: 'roundedCorners', value }); }
},
lineWidth: {
@@ -463,17 +463,26 @@ export default Vue.extend({
circleIcons: {
get() { return this.$store.state.settings.circleIcons; },
set(value) { this.$store.dispatch('settings/set', { key: 'circleIcons', value }); }
set(value) {
this.$store.dispatch('settings/set', { key: 'circleIcons', value });
this.reload();
}
},
contrastedAcct: {
get() { return this.$store.state.settings.contrastedAcct; },
set(value) { this.$store.dispatch('settings/set', { key: 'contrastedAcct', value }); }
set(value) {
this.$store.dispatch('settings/set', { key: 'contrastedAcct', value });
this.reload();
}
},
showFullAcct: {
get() { return this.$store.state.settings.showFullAcct; },
set(value) { this.$store.dispatch('settings/set', { key: 'showFullAcct', value }); }
set(value) {
this.$store.dispatch('settings/set', { key: 'showFullAcct', value });
this.reload();
}
},
showVia: {
@@ -517,6 +526,17 @@ export default Vue.extend({
});
},
methods: {
reload() {
this.$root.dialog({
type: 'warning',
text: this.$t('@.reload-to-apply-the-setting'),
showCancelButton: true
}).then(({ canceled }) => {
if (!canceled) {
location.reload();
}
});
},
customizeHome() {
location.href = '/?customize';
},
@@ -583,9 +603,6 @@ export default Vue.extend({
z-index 1
font-size 15px
&.inWindow
box-shadow var(--shadowRight)
> p
display block
padding 10px 16px

View File

@@ -1,5 +1,5 @@
<template>
<div class="kedshtep" :class="{ naked, inNakedDeckColumn }">
<div class="kedshtep" :class="{ naked, inNakedDeckColumn, shadow: $store.state.device.useShadow, round: $store.state.device.roundedCorners }">
<header v-if="showHeader">
<div class="title"><slot name="header"></slot></div>
<slot name="func"></slot>
@@ -60,8 +60,12 @@ export default Vue.extend({
&:not(.inNakedDeckColumn)
background var(--face)
box-shadow var(--shadow)
border-radius var(--round)
&.round
border-radius 6px
&.shadow
box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
& + .kedshtep
margin-top 16px

View File

@@ -77,7 +77,7 @@
<li @click="signout">
<p class="signout">
<i><fa icon="power-off"/></i>
<span>{{ $t('signout') }}</span>
<span>{{ $t('@.signout') }}</span>
</p>
</li>
</ul>

View File

@@ -61,7 +61,7 @@ export default Vue.extend({
computed: {
style(): any {
return {
'box-shadow': this.$store.state.settings.useShadow ? '0 0px 8px rgba(0, 0, 0, 0.2)' : 'none'
'box-shadow': this.$store.state.device.useShadow ? '0 0px 8px rgba(0, 0, 0, 0.2)' : 'none'
};
}
},

View File

@@ -1,5 +1,5 @@
<template>
<div class="header" :class="navbar">
<div class="header" :class="navbar" :data-shadow="$store.state.device.useShadow">
<div class="body">
<div class="post">
<button @click="post" :title="$t('title')"><fa icon="pencil-alt"/></button>
@@ -62,7 +62,7 @@
</div>
<transition :name="`slide-${navbar}`">
<div class="notifications" v-if="showNotifications" ref="notifications" :class="navbar">
<div class="notifications" v-if="showNotifications" ref="notifications" :class="navbar" :data-shadow="$store.state.device.useShadow">
<mk-notifications/>
</div>
</transition>
@@ -226,11 +226,15 @@ export default Vue.extend({
&.left
left 0
box-shadow var(--shadowRight)
&[data-shadow]
box-shadow 4px 0 4px rgba(0, 0, 0, 0.1)
&.right
right 0
box-shadow var(--shadowLeft)
&[data-shadow]
box-shadow -4px 0 4px rgba(0, 0, 0, 0.1)
> .body
position fixed
@@ -302,11 +306,15 @@ export default Vue.extend({
&.left
left $width
box-shadow var(--shadowRight)
&[data-shadow]
box-shadow 4px 0 4px rgba(0, 0, 0, 0.1)
&.right
right $width
box-shadow var(--shadowLeft)
&[data-shadow]
box-shadow -4px 0 4px rgba(0, 0, 0, 0.1)
.nav
> *

View File

@@ -28,7 +28,7 @@ export default Vue.extend({
this.fetching = true;
this.$root.api('notes/featured', {
limit: 20
limit: 30
}).then(notes => {
notes.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
this.notes = notes;

View File

@@ -22,7 +22,7 @@
<option value="users">{{ $t('@.widgets.users') }}</option>
<option value="polls">{{ $t('@.widgets.polls') }}</option>
<option value="post-form">{{ $t('@.widgets.post-form') }}</option>
<option value="messaging">{{ $t('@.widgets.messaging') }}</option>
<option value="messaging">{{ $t('@.messaging') }}</option>
<option value="memo">{{ $t('@.widgets.memo') }}</option>
<option value="hashtags">{{ $t('@.widgets.hashtags') }}</option>
<option value="posts-monitor">{{ $t('@.widgets.posts-monitor') }}</option>
@@ -109,6 +109,10 @@ export default Vue.extend({
name: 'broadcast',
place: 'right',
data: {}
}, {
name: 'hashtags',
place: 'right',
data: {}
}];
}
},

View File

@@ -1,6 +1,6 @@
<template>
<div class="pwbzawku">
<mk-post-form class="form" v-if="$store.state.settings.showPostFormOnTopOfTl"/>
<mk-post-form class="form" :class="{ shadow: $store.state.device.useShadow, round: $store.state.device.roundedCorners }" v-if="$store.state.settings.showPostFormOnTopOfTl"/>
<div class="main">
<component :is="src == 'list' ? 'mk-user-list-timeline' : 'x-core'" ref="tl" v-bind="options">
<header class="zahtxcqi">
@@ -193,8 +193,12 @@ export default Vue.extend({
.pwbzawku
> .form
margin-bottom 16px
box-shadow var(--shadow)
border-radius var(--round)
&.round
border-radius 6px
&.shadow
box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
.zahtxcqi
padding 0 8px

View File

@@ -1,7 +1,11 @@
<template>
<div class="omechnps" v-if="!fetching">
<div class="is-suspended" v-if="user.isSuspended"><fa icon="exclamation-triangle"/> {{ $t('@.user-suspended') }}</div>
<div class="is-remote" v-if="user.host != null"><fa icon="exclamation-triangle"/> {{ $t('@.is-remote-user') }}<a :href="user.url || user.uri" target="_blank">{{ $t('@.view-on-remote') }}</a></div>
<div class="is-suspended" v-if="user.isSuspended" :class="{ shadow: $store.state.device.useShadow, round: $store.state.device.roundedCorners }">
<fa icon="exclamation-triangle"/> {{ $t('@.user-suspended') }}
</div>
<div class="is-remote" v-if="user.host != null" :class="{ shadow: $store.state.device.useShadow, round: $store.state.device.roundedCorners }">
<fa icon="exclamation-triangle"/> {{ $t('@.is-remote-user') }}<a :href="user.url || user.uri" target="_blank">{{ $t('@.view-on-remote') }}</a>
</div>
<div class="main">
<x-header class="header" :user="user"/>
<router-view :user="user"></router-view>
@@ -61,8 +65,12 @@ export default Vue.extend({
margin-bottom 16px
padding 14px 16px
font-size 14px
box-shadow var(--shadow)
border-radius var(--round)
&.round
border-radius 6px
&.shadow
box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
&.is-suspended
color var(--suspendedInfoFg)

View File

@@ -1,84 +0,0 @@
<template>
<div class="vahgrswmbzfdlmomxnqftuueyvwaafth">
<p class="title"><fa icon="users"/>{{ $t('title') }}</p>
<p class="initializing" v-if="fetching"><fa icon="spinner" pulse fixed-width/>{{ $t('loading') }}<mk-ellipsis/></p>
<div v-if="!fetching && users.length > 0">
<router-link v-for="user in users" :to="user | userPage" :key="user.id">
<img :src="user.avatarUrl" :alt="user | userName" v-user-preview="user.id"/>
</router-link>
</div>
<p class="empty" v-if="!fetching && users.length == 0">{{ $t('no-users') }}</p>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../../i18n';
export default Vue.extend({
i18n: i18n('desktop/views/pages/user/user.followers-you-know.vue'),
props: ['user'],
data() {
return {
users: [],
fetching: true
};
},
mounted() {
this.$root.api('users/followers', {
userId: this.user.id,
iknow: true,
limit: 16
}).then(x => {
this.users = x.users;
this.fetching = false;
});
}
});
</script>
<style lang="stylus" scoped>
.vahgrswmbzfdlmomxnqftuueyvwaafth
background var(--face)
box-shadow var(--shadow)
border-radius var(--round)
> .title
z-index 1
margin 0
padding 0 16px
line-height 42px
font-size 0.9em
font-weight bold
color var(--faceHeaderText)
box-shadow 0 1px rgba(#000, 0.07)
> i
margin-right 4px
> div
padding 8px
> a
display inline-block
margin 4px
> img
display inline-block
text-align center
width 48px
height 48px
vertical-align bottom
border-radius 100%
> .initializing
> .empty
margin 0
padding 16px
text-align center
color var(--text)
> i
margin-right 4px
</style>

View File

@@ -1,112 +0,0 @@
<template>
<div class="hozptpaliadatkehcmcayizwzwwctpbc">
<p class="title"><fa icon="users"/>{{ $t('title') }}</p>
<p class="initializing" v-if="fetching"><fa icon="spinner" pulse fixed-width/>{{ $t('loading') }}<mk-ellipsis/></p>
<template v-if="!fetching && users.length != 0">
<div class="user" v-for="friend in users">
<mk-avatar class="avatar" :user="friend"/>
<div class="body">
<router-link class="name" :to="friend | userPage" v-user-preview="friend.id"><mk-user-name :user="friend"/></router-link>
<p class="username">@{{ friend | acct }}</p>
</div>
</div>
</template>
<p class="empty" v-if="!fetching && users.length == 0">{{ $t('no-users') }}</p>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../../i18n';
export default Vue.extend({
i18n: i18n('desktop/views/pages/user/user.friends.vue'),
props: ['user'],
data() {
return {
users: [],
fetching: true
};
},
mounted() {
this.$root.api('users/get_frequently_replied_users', {
userId: this.user.id,
limit: 4
}).then(docs => {
this.users = docs.map(doc => doc.user);
this.fetching = false;
});
}
});
</script>
<style lang="stylus" scoped>
.hozptpaliadatkehcmcayizwzwwctpbc
background var(--face)
box-shadow var(--shadow)
border-radius var(--round)
overflow hidden
> .title
z-index 1
margin 0
padding 0 16px
line-height 42px
font-size 0.9em
font-weight bold
background var(--faceHeader)
color var(--faceHeaderText)
box-shadow 0 1px rgba(#000, 0.07)
> i
margin-right 4px
> .initializing
> .empty
margin 0
padding 16px
text-align center
color var(--text)
> i
margin-right 4px
> .user
padding 16px
border-bottom solid 1px var(--faceDivider)
&:last-child
border-bottom none
&:after
content ""
display block
clear both
> .avatar
display block
float left
margin 0 12px 0 0
width 42px
height 42px
border-radius 8px
> .body
float left
width calc(100% - 54px)
> .name
margin 0
font-size 16px
line-height 24px
color var(--text)
> .username
display block
margin 0
font-size 15px
line-height 16px
color var(--text)
opacity 0.7
</style>

View File

@@ -1,5 +1,5 @@
<template>
<div class="header">
<div class="header" :class="{ shadow: $store.state.device.useShadow, round: $store.state.device.roundedCorners }">
<div class="banner-container" :style="style">
<div class="banner" ref="banner" :style="style" @click="onBannerClick"></div>
<div class="fade"></div>
@@ -126,10 +126,14 @@ export default Vue.extend({
<style lang="stylus" scoped>
.header
background var(--face)
box-shadow var(--shadow)
border-radius var(--round)
overflow hidden
&.round
border-radius 6px
&.shadow
box-shadow 0 3px 8px rgba(0, 0, 0, 0.2)
> .banner-container
height 250px
overflow hidden

View File

@@ -30,12 +30,12 @@
</div>
<p class="sign">
<span class="signup" @click="signup">{{ $t('signup') }}</span>
<span class="signup" @click="signup">{{ $t('@.signup') }}</span>
<span class="divider">|</span>
<span class="signin" @click="signin">{{ $t('signin') }}</span>
<span class="signin" @click="signin">{{ $t('@.signin') }}</span>
</p>
<img :src="meta.mascotImageUrl" alt="" title="藍" class="char">
<img v-if="meta" :src="meta.mascotImageUrl" alt="" title="藍" class="char">
</div>
</div>
@@ -135,12 +135,12 @@
</modal>
<modal name="signup" class="modal" width="450px" height="auto" scrollable>
<header class="formHeader">{{ $t('signup') }}</header>
<header class="formHeader">{{ $t('@.signup') }}</header>
<mk-signup class="form"/>
</modal>
<modal name="signin" class="modal" width="450px" height="auto" scrollable>
<header class="formHeader">{{ $t('signin') }}</header>
<header class="formHeader">{{ $t('@.signin') }}</header>
<mk-signin class="form"/>
</modal>
</div>
@@ -344,8 +344,6 @@ export default Vue.extend({
.block
color var(--text)
background var(--face)
box-shadow var(--shadow)
//border-radius 8px
overflow auto
> header

View File

@@ -6,7 +6,6 @@ import wActivity from './activity.vue';
import wTrends from './trends.vue';
import wUsers from './users.vue';
import wPolls from './polls.vue';
import wPostForm from './post-form.vue';
import wMessaging from './messaging.vue';
import wProfile from './profile.vue';
import wCustomize from './customize.vue';
@@ -17,7 +16,6 @@ Vue.component('mkw-activity', wActivity);
Vue.component('mkw-trends', wTrends);
Vue.component('mkw-users', wUsers);
Vue.component('mkw-polls', wPolls);
Vue.component('mkw-post-form', wPostForm);
Vue.component('mkw-messaging', wMessaging);
Vue.component('mkw-profile', wProfile);
Vue.component('mkw-customize', wCustomize);

View File

@@ -401,34 +401,6 @@ export default (callback: (launch: (router: VueRouter) => [Vue, MiOS], os: MiOS)
console.log(`Cannot reapply theme. ${e}`);
}
//#region shadow
const shadow = '0 3px 8px rgba(0, 0, 0, 0.2)';
const shadowRight = '4px 0 4px rgba(0, 0, 0, 0.1)';
const shadowLeft = '-4px 0 4px rgba(0, 0, 0, 0.1)';
if (os.store.state.settings.useShadow) {
document.documentElement.style.setProperty('--shadow', shadow);
document.documentElement.style.setProperty('--shadowRight', shadowRight);
document.documentElement.style.setProperty('--shadowLeft', shadowLeft);
}
os.store.watch(s => {
return s.settings.useShadow;
}, v => {
document.documentElement.style.setProperty('--shadow', v ? shadow : 'none');
document.documentElement.style.setProperty('--shadowRight', v ? shadowRight : 'none');
document.documentElement.style.setProperty('--shadowLeft', v ? shadowLeft : 'none');
});
//#endregion
//#region rounded corners
const round = '6px';
if (os.store.state.settings.roundedCorners) document.documentElement.style.setProperty('--round', round);
os.store.watch(s => {
return s.settings.roundedCorners;
}, v => {
document.documentElement.style.setProperty('--round', v ? round : '0');
});
//#endregion
//#region line width
document.documentElement.style.setProperty('--lineWidth', `${os.store.state.device.lineWidth}px`);
os.store.watch(s => {

View File

@@ -1,5 +1,5 @@
<template>
<div class="mk-note-detail" tabindex="-1">
<div class="mk-note-detail" tabindex="-1" :class="{ shadow: $store.state.device.useShadow, round: $store.state.device.roundedCorners }">
<button
class="more"
v-if="appearNote.reply && appearNote.reply.replyId && conversation.length == 0"
@@ -164,11 +164,15 @@ export default Vue.extend({
width 100%
text-align left
background var(--face)
border-radius 8px
box-shadow 0 4px 16px rgba(#000, 0.1)
@media (min-width 500px)
box-shadow 0 8px 32px rgba(#000, 0.1)
&.round
border-radius 8px
&.shadow
box-shadow 0 4px 16px rgba(#000, 0.1)
@media (min-width 500px)
box-shadow 0 8px 32px rgba(#000, 0.1)
> .fetching
padding 64px 0
@@ -180,7 +184,7 @@ export default Vue.extend({
width 100%
font-size 1em
text-align center
color #999
color var(--text)
cursor pointer
background var(--subNoteBg)
outline none
@@ -289,7 +293,7 @@ export default Vue.extend({
> .location
margin 4px 0
font-size 12px
color #ccc
color var(--text)
> .map
width 100%

View File

@@ -36,26 +36,26 @@
</div>
<span class="app" v-if="appearNote.app && $store.state.settings.showVia">via <b>{{ appearNote.app.name }}</b></span>
</div>
<footer v-if="appearNote.deletedAt == null">
<footer v-if="appearNote.deletedAt == null" class="footer">
<mk-reactions-viewer :note="appearNote" ref="reactionsViewer"/>
<button @click="reply()">
<button @click="reply()" class="button">
<template v-if="appearNote.reply"><fa icon="reply-all"/></template>
<template v-else><fa icon="reply"/></template>
<p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p>
</button>
<button v-if="['public', 'home'].includes(appearNote.visibility)" @click="renote()" title="Renote">
<button v-if="['public', 'home'].includes(appearNote.visibility)" @click="renote()" title="Renote" class="button">
<fa icon="retweet"/><p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p>
</button>
<button v-else>
<button v-else class="button">
<fa icon="ban"/>
</button>
<button v-if="!isMyNote && appearNote.myReaction == null" class="reactionButton" @click="react()" ref="reactButton">
<button v-if="!isMyNote && appearNote.myReaction == null" class="button" @click="react()" ref="reactButton">
<fa icon="plus"/>
</button>
<button v-if="!isMyNote && appearNote.myReaction != null" class="reactionButton reacted" @click="undoReact(appearNote)" ref="reactButton">
<button v-if="!isMyNote && appearNote.myReaction != null" class="button reacted" @click="undoReact(appearNote)" ref="reactButton">
<fa icon="minus"/>
</button>
<button class="menu" @click="menu()" ref="menuButton">
<button class="button" @click="menu()" ref="menuButton">
<fa icon="ellipsis-h"/>
</button>
</footer>
@@ -107,20 +107,6 @@ export default Vue.extend({
font-size 13px
border-bottom solid var(--lineWidth) var(--faceDivider)
&:focus
z-index 1
&:after
content ""
pointer-events none
position absolute
top 2px
right 2px
bottom 2px
left 2px
border 2px solid var(--primaryAlpha03)
border-radius 4px
&:last-of-type
border-bottom none
@@ -251,8 +237,8 @@ export default Vue.extend({
font-size 12px
color #ccc
> footer
> button
> .footer
> .button
margin 0
padding 8px
background transparent

View File

@@ -1,5 +1,5 @@
<template>
<div class="ivaojijs">
<div class="ivaojijs" :class="{ shadow: $store.state.device.useShadow, round: $store.state.device.roundedCorners }">
<div class="empty" v-if="notes.length == 0 && !fetching && inited">{{ $t('@.no-notes') }}</div>
<mk-error v-if="!fetching && !inited" @retry="init()"/>
@@ -191,11 +191,15 @@ export default Vue.extend({
.ivaojijs
overflow hidden
background var(--face)
border-radius 8px
box-shadow 0 4px 16px rgba(#000, 0.1)
@media (min-width 500px)
box-shadow 0 8px 32px rgba(#000, 0.1)
&.round
border-radius 8px
&.shadow
box-shadow 0 4px 16px rgba(#000, 0.1)
@media (min-width 500px)
box-shadow 0 8px 32px rgba(#000, 0.1)
> .empty
padding 16px
@@ -239,13 +243,7 @@ export default Vue.extend({
padding 32px
max-width 400px
text-align center
color #999
> [data-icon]
display block
margin-bottom 16px
font-size 3em
color #ccc
color var(--text)
> footer
text-align center
@@ -258,7 +256,7 @@ export default Vue.extend({
margin 0
padding 16px
width 100%
color #ccc
color var(--text)
@media (min-width 500px)
padding 20px

View File

@@ -61,7 +61,7 @@ export default Vue.extend({
this.connection.on('notification', this.onNotification);
const max = 10;
const max = 15;
this.$root.api('i/notifications', {
limit: max + 1

View File

@@ -1,5 +1,5 @@
<template>
<div class="ukygtjoj" :class="{ naked, inDeck, inNakedDeckColumn, hideHeader: !showHeader }">
<div class="ukygtjoj" :class="{ naked, inNakedDeckColumn, hideHeader: !showHeader, shadow: $store.state.device.useShadow, round: $store.state.device.roundedCorners }">
<header v-if="showHeader">
<div class="title"><slot name="header"></slot></div>
<slot name="func"></slot>
@@ -36,9 +36,6 @@ export default Vue.extend({
},
},
inject: {
inDeck: {
default: false
},
inNakedDeckColumn: {
default: false
}
@@ -60,13 +57,14 @@ export default Vue.extend({
.ukygtjoj
overflow hidden
&.inDeck
box-shadow none !important
&:not(.inNakedDeckColumn)
background var(--face)
border-radius 8px
box-shadow 0 4px 16px rgba(#000, 0.1)
&.round
border-radius 8px
&.shadow
box-shadow 0 4px 16px rgba(#000, 0.1)
& + .ukygtjoj
margin-top 16px
@@ -86,7 +84,6 @@ export default Vue.extend({
font-weight normal
color var(--faceHeaderText)
background var(--faceHeader)
border-radius 8px 8px 0 0
> [data-icon]
margin-right 6px

View File

@@ -1,5 +1,5 @@
<template>
<div class="header" ref="root">
<div class="header" ref="root" :class="{ shadow: $store.state.device.useShadow }">
<p class="warn" v-if="env != 'production'">{{ $t('@.do-not-use-in-production') }} <a href="/assets/flush.html?force">Flush</a></p>
<div class="main" ref="main">
<div class="backdrop"></div>
@@ -47,7 +47,9 @@ export default Vue.extend({
z-index 1024
width calc(100% + 16px)
padding 0 8px
box-shadow 0 0px 8px rgba(0, 0, 0, 0.25)
&.shadow
box-shadow 0 0px 8px rgba(0, 0, 0, 0.25)
&, *
user-select none

View File

@@ -36,7 +36,7 @@
<li v-if="$store.getters.isSignedIn && ($store.state.i.isAdmin || $store.state.i.isModerator)"><a href="/admin"><i><fa icon="terminal" fixed-width/></i><span>{{ $t('admin') }}</span><i><fa icon="angle-right"/></i></a></li>
</ul>
<ul>
<li @click="toggleDeckMode"><p><i><fa :icon="$store.state.device.inDeckMode ? faHome : faColumns"/></i><span>{{ $store.state.device.inDeckMode ? $t('@.home') : $t('@.deck') }}</span></p></li>
<li @click="toggleDeckMode"><p><i><fa :icon="$store.state.device.inDeckMode ? faHome : faColumns" fixed-width/></i><span>{{ $store.state.device.inDeckMode ? $t('@.home') : $t('@.deck') }}</span></p></li>
<li @click="dark"><p><i><fa :icon="$store.state.device.darkmode ? faSun : faMoon" fixed-width/></i><span>{{ $store.state.device.darkmode ? $t('@.turn-off-darkmode') : $t('@.turn-on-darkmode') }}</span></p></li>
</ul>
</div>
@@ -50,7 +50,8 @@
</div>
<div class="notifications" v-if="showNotifications">
<header>
<button @click="$parent.isDrawerOpening = false"><fa icon="times"/></button>
<button @click="showNotifications = false"><fa icon="times"/></button>
<i v-if="hasUnreadNotification" class="circle"><fa icon="circle"/></i>
</header>
<mk-notifications/>
</div>
@@ -207,7 +208,7 @@ export default Vue.extend({
font-size 15px
&.notifications
width 340px
width 330px
> .notifications
padding-top 42px
@@ -217,7 +218,7 @@ export default Vue.extend({
top 0
left 0
z-index 1000
width 340px
width 330px
line-height 42px
background var(--secondary)
@@ -228,6 +229,13 @@ export default Vue.extend({
line-height 42px
color var(--text)
> i
position absolute
top 0
right 16px
font-size 12px
color var(--notificationIndicator)
> .nav
> .me

View File

@@ -124,7 +124,7 @@ export default Vue.extend({
position absolute
top 0
left 0
color var(--primary)
color var(--notificationIndicator)
font-size 16px
&.post

View File

@@ -36,7 +36,7 @@ export default Vue.extend({
this.fetching = true;
this.$root.api('notes/featured', {
limit: 20
limit: 30
}).then(notes => {
notes.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
this.notes = notes;

View File

@@ -14,16 +14,18 @@
<template #title><fa icon="poll-h"/> {{ $t('design') }}</template>
<section>
<ui-switch v-model="darkmode">{{ $t('dark-mode') }}</ui-switch>
<ui-switch v-model="circleIcons">{{ $t('circle-icons') }}</ui-switch>
<ui-switch v-model="darkmode">{{ $t('@.dark-mode') }}</ui-switch>
<ui-switch v-model="useShadow">{{ $t('@.use-shadow') }}</ui-switch>
<ui-switch v-model="roundedCorners">{{ $t('@.rounded-corners') }}</ui-switch>
<ui-switch v-model="circleIcons">{{ $t('@.circle-icons') }}</ui-switch>
<section>
<header>{{ $t('@.line-width') }}</header>
<ui-radio v-model="lineWidth" :value="0.5">{{ $t('@.line-width-thin') }}</ui-radio>
<ui-radio v-model="lineWidth" :value="1">{{ $t('@.line-width-normal') }}</ui-radio>
<ui-radio v-model="lineWidth" :value="2">{{ $t('@.line-width-thick') }}</ui-radio>
</section>
<ui-switch v-model="reduceMotion">{{ $t('@.reduce-motion') }} ({{ $t('@.this-setting-is-this-device-only') }})</ui-switch>
<ui-switch v-model="contrastedAcct">{{ $t('contrasted-acct') }}</ui-switch>
<ui-switch v-model="reduceMotion">{{ $t('@.reduce-motion') }}</ui-switch>
<ui-switch v-model="contrastedAcct">{{ $t('@.contrasted-acct') }}</ui-switch>
<ui-switch v-model="showFullAcct">{{ $t('@.show-full-acct') }}</ui-switch>
<ui-switch v-model="showVia">{{ $t('@.show-via') }}</ui-switch>
<ui-switch v-model="useOsDefaultEmojis">{{ $t('@.use-os-default-emojis') }}</ui-switch>
@@ -155,7 +157,7 @@
</ui-card>
</div>
<div class="signout" @click="signout">{{ $t('signout') }}</div>
<div class="signout" @click="signout">{{ $t('@.signout') }}</div>
<footer>
<small>ver {{ version }} ({{ codename }})</small>
@@ -214,6 +216,16 @@ export default Vue.extend({
set(value) { this.$store.commit('device/set', { key: 'darkmode', value }); }
},
useShadow: {
get() { return this.$store.state.device.useShadow; },
set(value) { this.$store.commit('device/set', { key: 'useShadow', value }); }
},
roundedCorners: {
get() { return this.$store.state.device.roundedCorners; },
set(value) { this.$store.commit('device/set', { key: 'roundedCorners', value }); }
},
useOsDefaultEmojis: {
get() { return this.$store.state.device.useOsDefaultEmojis; },
set(value) { this.$store.commit('device/set', { key: 'useOsDefaultEmojis', value }); }
@@ -296,7 +308,10 @@ export default Vue.extend({
circleIcons: {
get() { return this.$store.state.settings.circleIcons; },
set(value) { this.$store.dispatch('settings/set', { key: 'circleIcons', value }); }
set(value) {
this.$store.dispatch('settings/set', { key: 'circleIcons', value });
this.reload();
}
},
lineWidth: {
@@ -306,12 +321,18 @@ export default Vue.extend({
contrastedAcct: {
get() { return this.$store.state.settings.contrastedAcct; },
set(value) { this.$store.dispatch('settings/set', { key: 'contrastedAcct', value }); }
set(value) {
this.$store.dispatch('settings/set', { key: 'contrastedAcct', value });
this.reload();
}
},
showFullAcct: {
get() { return this.$store.state.settings.showFullAcct; },
set(value) { this.$store.dispatch('settings/set', { key: 'showFullAcct', value }); }
set(value) {
this.$store.dispatch('settings/set', { key: 'showFullAcct', value });
this.reload();
}
},
showVia: {
@@ -384,6 +405,18 @@ export default Vue.extend({
this.$root.signout();
},
reload() {
this.$root.dialog({
type: 'warning',
text: this.$t('@.reload-to-apply-the-setting'),
showCancelButton: true
}).then(({ canceled }) => {
if (!canceled) {
location.reload();
}
});
},
checkForUpdate() {
this.checkingForUpdate = true;
checkForUpdate(this.$root, true, true).then(newer => {

View File

@@ -9,7 +9,8 @@
import Vue from 'vue';
import i18n from '../../../i18n';
export default Vue.extend({
i18n: i18n('mobile/views/pages/signup.vue'),});
i18n: i18n('mobile/views/pages/signup.vue')
});
</script>
<style lang="stylus" scoped>
@@ -23,6 +24,6 @@ export default Vue.extend({
padding 8px 0 0 0
font-size 1.5em
font-weight bold
color #444
color var(--text)
</style>

View File

@@ -59,7 +59,7 @@
</div>
</div>
</header>
<nav v-if="$route.name == 'user'">
<nav v-if="$route.name == 'user'" :class="{ shadow: $store.state.device.useShadow }">
<div class="nav-container">
<a :data-active="page == 'home'" @click="page = 'home'"><fa icon="home"/> {{ $t('overview') }}</a>
<a :data-active="page == 'notes'" @click="page = 'notes'"><fa :icon="['far', 'comment-alt']"/> {{ $t('timeline') }}</a>
@@ -315,10 +315,12 @@ export default Vue.extend({
position -webkit-sticky
position sticky
top 47px
box-shadow 0 4px 4px var(--mobileUserPageHeaderShadow)
background-color $bg
z-index 2
&.shadow
box-shadow 0 4px 4px var(--mobileUserPageHeaderShadow)
> .nav-container
display flex
justify-content center

View File

@@ -8,10 +8,10 @@
<div class="about">
<h2>{{ name }}</h2>
<p v-html="description || this.$t('@.about')"></p>
<router-link class="signup" to="/signup">{{ $t('signup') }}</router-link>
<router-link class="signup" to="/signup">{{ $t('@.signup') }}</router-link>
</div>
<div class="signin">
<a href="/signin" @click.prevent="signin()">{{ $t('signin') }}</a>
<a href="/signin" @click.prevent="signin()">{{ $t('@.signin') }}</a>
</div>
<div class="tl">
<mk-welcome-timeline/>

View File

@@ -17,8 +17,6 @@ const defaultSettings = {
showPostFormOnTopOfTl: false,
suggestRecentHashtags: true,
showClockOnHeader: true,
useShadow: true,
roundedCorners: false,
circleIcons: true,
contrastedAcct: true,
showFullAcct: false,
@@ -48,9 +46,11 @@ const defaultDeviceSettings = {
deckMode: false,
deckColumnAlign: 'center',
deckColumnWidth: 'normal',
useShadow: false,
roundedCorners: true,
reduceMotion: false,
autoPopout: false,
darkmode: false,
darkmode: true,
darkTheme: 'dark',
lightTheme: 'light',
lineWidth: 1,

View File

@@ -36,7 +36,14 @@ export const meta = {
default: null as any,
transform: transform,
}
}
},
res: {
type: 'array',
items: {
type: 'DriveFolder',
},
},
};
export default define(meta, async (ps, user) => {

View File

@@ -23,7 +23,14 @@ export const meta = {
'ja-JP': 'フォルダID'
}
},
}
},
res: {
type: 'array',
items: {
type: 'DriveFolder',
},
},
};
export default define(meta, async (ps, user) => {

View File

@@ -29,6 +29,10 @@ export const meta = {
}
},
res: {
type: 'DriveFolder',
},
errors: {
noSuchFolder: {
message: 'No such folder.',

View File

@@ -44,7 +44,14 @@ export const meta = {
'-attachedRemoteUsers',
]),
},
}
},
res: {
type: 'array',
items: {
type: 'Hashtag'
}
},
};
const sort: any = {

View File

@@ -35,7 +35,14 @@ export const meta = {
'ja-JP': 'オフセット'
}
}
}
},
res: {
type: 'array',
items: {
type: 'string'
}
},
};
export default define(meta, async (ps) => {

View File

@@ -44,7 +44,14 @@ export const meta = {
]),
default: 'local'
}
}
},
res: {
type: 'array',
items: {
type: 'User'
}
},
};
const sort: any = {

View File

@@ -29,7 +29,6 @@ export default define(meta, async (ps, user) => {
await User.update({ _id: user._id }, {
$set: {
isDeleted: true,
token: null,
name: null,
description: null,
pinnedNoteIds: [],

View File

@@ -33,7 +33,7 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
const day = 1000 * 60 * 60 * 24 * 2;
const day = 1000 * 60 * 60 * 24 * 3; // 3日前まで
const hideUserIds = await getHideUserIds(user);

View File

@@ -46,6 +46,13 @@ export const meta = {
},
},
res: {
type: 'array',
items: {
type: 'Reaction'
}
},
errors: {
noSuchNote: {
message: 'No such note.',

View File

@@ -278,6 +278,46 @@ export const schemas = {
required: ['id', 'createdAt', 'name', 'type', 'datasize', 'md5']
},
DriveFolder: {
type: 'object',
properties: {
id: {
type: 'string',
format: 'id',
description: 'The unique identifier for this Drive folder.',
example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
},
createdAt: {
type: 'string',
format: 'date-time',
description: 'The date that the Drive folder was created.'
},
name: {
type: 'string',
description: 'The folder name.',
},
foldersCount: {
type: 'number',
description: 'The count of child folders.',
},
filesCount: {
type: 'number',
description: 'The count of child files.',
},
parentId: {
type: 'string',
format: 'id',
nullable: true,
description: 'The parent folder ID of this folder.',
example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
},
parent: {
$ref: '#/components/schemas/DriveFolder'
},
},
required: ['id', 'createdAt', 'name']
},
Muting: {
type: 'object',
properties: {
@@ -321,4 +361,86 @@ export const schemas = {
},
required: ['id', 'createdAt', 'blockee']
},
Reaction: {
type: 'object',
properties: {
id: {
type: 'string',
format: 'id',
description: 'The unique identifier for this reaction.',
example: 'xxxxxxxxxxxxxxxxxxxxxxxx',
},
createdAt: {
type: 'string',
format: 'date-time',
description: 'The date that the reaction was created.'
},
user: {
$ref: '#/components/schemas/User',
description: 'User who performed this reaction.'
},
type: {
type: 'string',
enum: [
'like',
'love',
'laugh',
'hmm',
'surprise',
'congrats',
'angry',
'confused',
'rip',
'pudding'
],
description: 'The reaction type.'
},
},
required: ['id', 'createdAt', 'user', 'type']
},
Hashtag: {
type: 'object',
properties: {
tag: {
type: 'string',
description: 'The hashtag name. No # prefixed.',
example: 'misskey',
},
mentionedUsersCount: {
type: 'number',
description: 'Number of all users using this hashtag.'
},
mentionedLocalUsersCount: {
type: 'number',
description: 'Number of local users using this hashtag.'
},
mentionedRemoteUsersCount: {
type: 'number',
description: 'Number of remote users using this hashtag.'
},
attachedUsersCount: {
type: 'number',
description: 'Number of all users who attached this hashtag to profile.'
},
attachedLocalUsersCount: {
type: 'number',
description: 'Number of local users who attached this hashtag to profile.'
},
attachedRemoteUsersCount: {
type: 'number',
description: 'Number of remote users who attached this hashtag to profile.'
},
},
required: [
'tag',
'mentionedUsersCount',
'mentionedLocalUsersCount',
'mentionedRemoteUsersCount',
'attachedUsersCount',
'attachedLocalUsersCount',
'attachedRemoteUsersCount',
]
},
};

View File

@@ -2,10 +2,15 @@ import * as Koa from 'koa';
import * as request from 'request-promise-native';
import summaly from 'summaly';
import fetchMeta from '../../misc/fetch-meta';
import Logger from '../../misc/logger';
const logger = new Logger('url-preview');
module.exports = async (ctx: Koa.BaseContext) => {
const meta = await fetchMeta();
logger.info(`Getting preview of ${ctx.query.url} ...`);
try {
const summary = meta.summalyProxy ? await request.get({
url: meta.summalyProxy,
@@ -17,6 +22,8 @@ module.exports = async (ctx: Koa.BaseContext) => {
followRedirects: false
});
logger.succ(`Got preview of ${ctx.query.url}: ${summary.title}`);
summary.icon = wrap(summary.icon);
summary.thumbnail = wrap(summary.thumbnail);
@@ -25,6 +32,7 @@ module.exports = async (ctx: Koa.BaseContext) => {
ctx.body = summary;
} catch (e) {
logger.error(`Failed to get preview of ${ctx.query.url}: ${e}`);
ctx.status = 200;
ctx.set('Cache-Control', 'max-age=86400, immutable');
ctx.body = '{}';