Compare commits

...

885 Commits

Author SHA1 Message Date
syuilo d67d163c78 Merge branch 'develop' 2019-05-21 18:13:24 +09:00
syuilo a973bd56fe 11.18.1 2019-05-21 18:13:10 +09:00
syuilo 08b6fda065 Fix bug 2019-05-21 18:09:05 +09:00
syuilo d0cc145cb3 Clean up 2019-05-21 18:08:58 +09:00
syuilo 19588647d6 Improve usability 2019-05-21 18:06:00 +09:00
syuilo 09da292f1a Fix #4953 2019-05-21 17:43:27 +09:00
syuilo c8107ff936 🎨 2019-05-21 17:40:58 +09:00
syuilo b44afc1876 iOSで投稿フォームに自動フォーカスしない問題を修正 2019-05-21 17:39:23 +09:00
syuilo c26168f22e Merge branch 'develop' 2019-05-21 08:57:10 +09:00
syuilo 391be342ac 11.18.0 2019-05-21 08:55:26 +09:00
syuilo 16549f8f84 Add da-DK 2019-05-21 08:51:32 +09:00
syuilo 2d2b65d9fa New Crowdin translations (#4931)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Norwegian)

* 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 (Korean)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

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

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

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

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Danish)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)
2019-05-21 08:49:57 +09:00
syuilo a12ad37522 Fix 2019-05-21 08:48:15 +09:00
syuilo 84541faf92 Update dependencies 🚀 2019-05-21 08:46:35 +09:00
syuilo c7daaba370 🎨 2019-05-21 08:44:36 +09:00
syuilo f128813a5e Fix 2019-05-21 08:23:37 +09:00
syuilo 699a55ea08 Fix 2019-05-21 08:21:26 +09:00
syuilo 90a674f99b Refactore 2019-05-21 08:19:29 +09:00
syuilo f236d36ed3 Fix 2019-05-21 08:19:23 +09:00
syuilo 1b2200ccf4 Refactyor 2019-05-21 08:10:37 +09:00
syuilo c6353f3502 Improve usability 2019-05-21 06:53:18 +09:00
syuilo f09b8a78a0 Improve usability 2019-05-21 06:34:10 +09:00
syuilo 5f741ac46e Refactoring 2019-05-21 06:31:51 +09:00
syuilo a434cfbe0d Fix 2019-05-21 04:26:14 +09:00
syuilo cd4c7689b7 Reduce initial bundle size 2019-05-21 04:21:43 +09:00
syuilo 3cc2049fb3 Reduce initial bundle size 2019-05-21 03:45:07 +09:00
syuilo 0d3117e472 Fix 2019-05-21 03:40:18 +09:00
syuilo b335975c97 Refactoring 2019-05-21 03:20:16 +09:00
syuilo 5511b6e013 Refactoring 2019-05-21 03:07:11 +09:00
syuilo 262d5ead51 Clean up 2019-05-20 22:59:10 +09:00
syuilo a78b048720 Improve API doc 2019-05-20 22:01:32 +09:00
syuilo e7dd5e155d Fix bugs
Use Not(IsNull())
2019-05-20 21:44:16 +09:00
MeiMei 5a3ea38bbf Fix: Delete is not deliver (#4950)
* Fix: Delete is not deliver

* fix
2019-05-20 13:34:51 +09:00
syuilo 786521eba7 Merge branch 'develop' 2019-05-20 00:12:42 +09:00
syuilo 202cb3048a 11.17.1 2019-05-20 00:12:19 +09:00
syuilo 7e642cf700 Fix bug 2019-05-19 23:42:18 +09:00
syuilo 7732aabc1e Fix bug 2019-05-19 23:29:28 +09:00
syuilo 1cf9f52eca Merge branch 'develop' 2019-05-19 21:02:32 +09:00
syuilo d1d5e10b72 11.17.0 2019-05-19 21:02:17 +09:00
syuilo c3fada264f Fix #4938 2019-05-19 20:57:05 +09:00
syuilo 45eeb74b83 Fix #4948 2019-05-19 20:52:00 +09:00
syuilo b9a6e551cd Add unique index 2019-05-19 20:50:08 +09:00
syuilo c610e5ed9b Update note-favorite.ts 2019-05-19 20:48:10 +09:00
syuilo c2c2824e50 Fix bug 2019-05-19 20:47:41 +09:00
syuilo 01fab09683 Fix #4945 2019-05-19 20:43:33 +09:00
syuilo e103904a04 Resolve #4941 2019-05-19 20:41:23 +09:00
Acid Chicken (硫酸鶏) 56678cbac0 Update README.md [AUTOGEN] (#4940) 2019-05-19 15:08:16 +09:00
syuilo 7fade8939d Merge branch 'develop' 2019-05-19 03:22:41 +09:00
syuilo daa557f6a3 11.16.1 2019-05-19 03:22:26 +09:00
syuilo 23a257ed86 Update Dockerfile 2019-05-19 03:21:39 +09:00
syuilo 05d0620491 Merge branch 'develop' 2019-05-19 02:51:49 +09:00
syuilo 5225139284 11.16.0 2019-05-19 02:51:28 +09:00
syuilo 9b2e996cae 🎨 2019-05-19 02:47:31 +09:00
syuilo 6a561342a4 🎨 2019-05-19 02:39:34 +09:00
syuilo 429bed2f91 Refactor 2019-05-18 23:16:09 +09:00
syuilo 200d593414 Add group menu 2019-05-18 22:57:34 +09:00
syuilo 9dbe12135d Fix bug 2019-05-18 22:54:02 +09:00
syuilo 318d7f2652 🎨 2019-05-18 22:50:57 +09:00
syuilo 5a653531e2 Avoid error 2019-05-18 21:22:37 +09:00
syuilo c7cc3dcdfd ユーザーグループ
Resolve #3218
2019-05-18 20:36:33 +09:00
syuilo 61f54f8f74 Fix bug 2019-05-18 00:38:33 +09:00
syuilo a3b27fe3a1 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-05-17 19:56:56 +09:00
syuilo 380749051d ページにいいねできるように 2019-05-17 19:56:47 +09:00
ql3 81625f9fc5 Update gitignore to ignore config files for Intelij-IDEA (#4933) 2019-05-17 02:31:00 +09:00
syuilo d6ccb1725b Update API docs 2019-05-17 00:19:23 +09:00
syuilo 5ce412aeda Merge branch 'develop' 2019-05-16 16:14:00 +09:00
syuilo fe6d88e410 11.15.0 2019-05-16 16:13:46 +09:00
syuilo a21357248f Dockerを使用している場合、アプデの際にマイグレを自動実行するように 2019-05-16 16:12:30 +09:00
syuilo 70d710c9a9 管理画面でreCAPTCHAのプレビューを表示するように 2019-05-16 16:08:50 +09:00
syuilo 183c82fb8d New Crowdin translations (#4924)
* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Korean)

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

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

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

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

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

* New translations ja-JP.yml (Chinese Simplified)
2019-05-16 13:11:56 +09:00
syuilo 62cbb92154 Fix #4930 2019-05-16 12:59:09 +09:00
syuilo 7d70126072 Merge branch 'develop' 2019-05-16 01:18:06 +09:00
syuilo 54bfffa7b9 11.14.0 2019-05-16 01:16:41 +09:00
syuilo 3f5b96bf62 Resolve #4928 2019-05-16 01:07:32 +09:00
syuilo 3d8bbedf1b GIFのサムネイルが生成されないのを修正
#4728
2019-05-15 21:27:20 +09:00
syuilo 23c9f6a6ca Resolve #4833 2019-05-15 20:41:01 +09:00
syuilo 5ba8d4949d インスタンスの設定画面を整理 2019-05-15 20:29:47 +09:00
syuilo a6befdd541 Fix bug 2019-05-15 17:05:41 +09:00
syuilo e5409db0e8 Resolve #4925 2019-05-14 23:54:39 +09:00
syuilo 678d610cd6 Update CHANGELOG.md 2019-05-14 21:27:20 +09:00
syuilo 466fe9c368 Merge branch 'develop' 2019-05-14 21:25:24 +09:00
syuilo 13feaea7b7 11.13.0 2019-05-14 21:25:00 +09:00
syuilo e52f9301fa New Crowdin translations (#4878)
* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

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

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

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Spanish)

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

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Japanese, Kansai)
2019-05-14 21:18:05 +09:00
syuilo 1b58e18a6d Update dependencies 🚀 2019-05-14 21:17:29 +09:00
syuilo b779ff08e0 特定のインスタンスのファイルをすべて削除できるように 2019-05-14 21:08:35 +09:00
syuilo 811f9c22d7 🎨 2019-05-14 20:57:24 +09:00
syuilo c3529f0691 Improve usability 2019-05-14 20:53:49 +09:00
syuilo f9f574532e インスタンスブロックを設定できるように 2019-05-14 20:49:09 +09:00
syuilo 92dee53dd6 Update note.ts 2019-05-14 12:04:40 +09:00
Satsuki Yanagi 5d42ee2359 Fix tag cloud on Welcome page (#4922)
Resolve #4754
2019-05-14 10:50:20 +09:00
tamaina 7c03d37caa Add ToSUrl, repositoryUrl, feedbackUrl (#4921)
* Add ToSUrl, repositoryUrl, feedbackUrl

* modify nodeinfo
2019-05-14 02:57:04 +09:00
MeiMei b128b593c2 Fix: user menu (#4845) (#4920)
* Fix: Firefoxで自分のメニューが開けないなど

* 自分のユーザーメニューにはミュートなどを表示しないようになど
2019-05-14 02:53:05 +09:00
MeiMei 342e48ed77 Fix meta tags (#4918) 2019-05-14 02:50:23 +09:00
Acid Chicken (硫酸鶏) 052f8b265d Update README.md [AUTOGEN] (#4916) 2019-05-13 18:03:29 +09:00
Acid Chicken (硫酸鶏) 2eedc91d74 Update Docker images on CircleCI 2019-05-12 17:27:27 +09:00
MeiMei 410b9ad6bc Fix: ピン留め投稿の表示順がおかしい (#4906)
* Fix: syuilo#4904

* fix comment
2019-05-12 09:37:00 +09:00
kabo2468 24c6dff3e4 Fix #4875 (#4899) 2019-05-11 21:43:08 +09:00
syuilo 161db7636a Update log.ts 2019-05-11 10:58:34 +09:00
syuilo 796252357e Merge branch 'develop' 2019-05-10 17:33:21 +09:00
syuilo b0344d52e9 11.12.0 2019-05-10 17:32:57 +09:00
syuilo 8e6da3a0d9 インスタンス運営者がピン留めユーザーを設定できるように
Related #4892
2019-05-10 17:30:28 +09:00
syuilo 756e4eaeec テキストのリスト内で変数埋め込みできるように 2019-05-10 16:08:01 +09:00
syuilo 3126d0730a MisskeyPagesで変数を並べ替えられるように 2019-05-10 16:04:32 +09:00
syuilo 748e9f15df Add notes/unrenote API 2019-05-10 15:53:53 +09:00
syuilo 7c714f5788 Improve MisskeyPages 2019-05-10 14:18:18 +09:00
MeiMei d3c3ad839b Update ObjectStorage example (#4890) 2019-05-10 01:46:11 +09:00
syuilo 168de3c316 Resolve #4870 2019-05-09 23:27:34 +09:00
MeiMei 9e20fc5c88 Validate Note on createNote (#4881) 2019-05-09 15:43:31 +09:00
MeiMei 1ff5151786 Fix: みつけるで人気のタグが表示されない (#4883) 2019-05-09 15:42:56 +09:00
Acid Chicken (硫酸鶏) a56738a331 Update README.md [AUTOGEN] (#4877) 2019-05-07 20:55:37 +09:00
syuilo 2d04a3d6d2 Merge branch 'develop' 2019-05-07 18:56:33 +09:00
syuilo e0a55b9100 11.11.2 2019-05-07 18:56:19 +09:00
syuilo 0a57eecb3a New Crowdin translations (#4812)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Norwegian)

* 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 (German)

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

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

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

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

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

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

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

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

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

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

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

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Spanish)

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

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

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

* New translations ja-JP.yml (English)

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

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

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)

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

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Spanish)

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

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

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Czech)

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

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

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

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (English)
2019-05-07 18:49:51 +09:00
syuilo 51f98020f6 Fix #4874 2019-05-07 18:48:38 +09:00
syuilo 70123805e1 Fix #4866 2019-05-07 18:23:12 +09:00
syuilo 1448b11d00 Clean up 2019-05-07 18:20:18 +09:00
syuilo 490b81ed05 Fix #4873 2019-05-07 18:14:37 +09:00
MeiMei 96f675abed Fix: IPv4 onlyホストからDualstackホストにAP deliverできない (#4872) 2019-05-07 17:49:25 +09:00
Satsuki Yanagi 4cd451c613 2段階認証コードの入力フォームタイプの訂正 (#4869)
Fix #4849, Resolve #4848
2019-05-07 08:45:29 +09:00
syuilo 187792dfc4 Fix bug 2019-05-06 20:09:13 +09:00
Satsuki Yanagi 3dde561fe5 Resolve #4864 (#4865) 2019-05-06 17:28:55 +09:00
syuilo a75ec45172 Merge branch 'develop' 2019-05-05 20:36:25 +09:00
syuilo 3732ddf75f 11.11.1 2019-05-05 20:36:11 +09:00
syuilo b8d8097734 Fix bug 2019-05-05 20:36:09 +09:00
syuilo 1092532292 Merge branch 'develop' 2019-05-05 20:33:44 +09:00
syuilo 8a79ba0e2b 11.11.0 2019-05-05 20:33:29 +09:00
syuilo ca2949fbb4 MisskeyPagesにリストから選択関数を追加 2019-05-05 20:31:15 +09:00
syuilo 17b373ac07 ✌️ 2019-05-05 20:16:05 +09:00
syuilo 7aa66f438f Resolve #4853 2019-05-05 20:12:35 +09:00
syuilo 73641fd78d Fix #4852 2019-05-05 15:17:29 +09:00
syuilo 64aac9d6ad Fix #4862 2019-05-05 15:12:25 +09:00
syuilo 2be13736c8 Update user-profile.ts
#4809
2019-05-05 09:42:38 +09:00
MeiMei ff4f5fec1d meidg (#4835) 2019-05-05 09:29:15 +09:00
Satsuki Yanagi 7d64f8abe4 外部サービス連携後のPackedUserがその情報を持つように (#4850) 2019-05-05 09:28:55 +09:00
Satsuki Yanagi 88e6929e9f 外部サービス連携ログインリンクにアイコン追加 (#4858) 2019-05-05 09:28:23 +09:00
Satsuki Yanagi 5fb0a995dd 様々な修正 (#4859)
Typo, Redundant code, Syntax error の修正
2019-05-05 09:27:55 +09:00
Satsuki Yanagi 58a04ce1a5 ログアウトの処理と外部サービス連携Viewがセッションクッキーを作らないように (#4856) 2019-05-05 04:04:30 +09:00
syuilo f74e0d9123 Merge branch 'develop' 2019-05-04 15:21:51 +09:00
syuilo c6249b82d4 11.10.1 2019-05-04 15:21:35 +09:00
syuilo d6131c0b09 MisskeyPagesでページブロックを削除できなくなっていた問題を修正 2019-05-04 15:14:02 +09:00
syuilo e62c810b7c Use node 12 2019-05-04 14:53:46 +09:00
syuilo 2851a1a7ef Update dependencies 🚀 2019-05-04 14:47:28 +09:00
syuilo 12cd2709d6 Merge branch 'develop' 2019-05-03 18:58:54 +09:00
syuilo bf54e58873 11.10.0 2019-05-03 18:58:09 +09:00
syuilo 6b473e3a5c Fix #4840 2019-05-03 18:55:24 +09:00
syuilo 4b68abd963 割った余りを求める関数をMisskeyPagesに追加 2019-05-03 18:48:40 +09:00
Satsuki Yanagi 0e764a2b3e Fix external service authentication (#4846) 2019-05-03 18:38:19 +09:00
MeiMei 9d1ed1eb0d Some import and export fixes (#4842)
* Fix: Mastodon v2.8.0 のフォローリストがインポートできない

* Fix: エクスポートリクエストに失敗してもエラーが出ない (#4821)

* エクスポートファイルでは同一ハッシュチェックをしないように
2019-05-03 18:33:25 +09:00
syuilo a09a3465a2 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-05-03 14:49:40 +09:00
syuilo 001969efaf Improve usability 2019-05-03 14:49:22 +09:00
Acid Chicken (硫酸鶏) e7c515da9a Update README.md [AUTOGEN] (#4839) 2019-05-03 14:34:41 +09:00
Acid Chicken (硫酸鶏) 8367c7dd49 Update README.md [AUTOGEN] (#4837) 2019-05-03 14:32:09 +09:00
syuilo 55e6cae240 Fix #4834 2019-05-03 09:16:31 +09:00
syuilo 5553c3fb17 Improve usability 2019-05-03 08:27:46 +09:00
syuilo 026265cb1e Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-05-03 08:22:51 +09:00
syuilo 289c76a802 Disable ServiceWorker 2019-05-03 08:22:44 +09:00
Acid Chicken (硫酸鶏) 7c1bc1d6bc Update README.md [AUTOGEN] (#4832) 2019-05-02 19:44:59 +09:00
Acid Chicken (硫酸鶏) 90cf0d32b5 Update README.md [AUTOGEN] (#4827) 2019-05-02 18:48:48 +09:00
syuilo 88d934f922 Merge branch 'develop' 2019-05-02 17:57:29 +09:00
syuilo abf11bb03c 11.9.0 2019-05-02 17:57:13 +09:00
syuilo 2d1f50303d Improve MisskeyPages 2019-05-02 17:55:59 +09:00
syuilo 9fb7c4091f Merge branch 'develop' 2019-05-02 17:18:34 +09:00
syuilo 2fdec27ab0 11.8.1 2019-05-02 17:18:11 +09:00
syuilo aff56469ed Fix bug 2019-05-02 17:15:14 +09:00
Satsuki Yanagi 419cb7fbad Remove unwanted ! character in user token regex (#4830) 2019-05-02 06:24:32 +09:00
Satsuki Yanagi 7882851539 Fix TypeScript semantic error (#4828)
ビルドの時こういうエラーが出てます
src/misc/aiscript/evaluator.ts(2,29): error TS7016: Could not find a declaration file for module 'seedrandom'
2019-05-01 22:56:18 +09:00
syuilo 358299cf0e Merge branch 'develop' 2019-05-01 20:59:18 +09:00
syuilo 5a2af24869 11.8.0-2 2019-05-01 20:58:59 +09:00
syuilo 6d35872af5 Merge branch 'develop' 2019-05-01 20:57:23 +09:00
syuilo 559dfdaa80 11.8.0 2019-05-01 20:56:50 +09:00
syuilo 79c49bc926 ページのソースを見れるように 2019-05-01 20:48:56 +09:00
syuilo 76c538ad25 🎨 2019-05-01 19:50:56 +09:00
syuilo e76e358d98 Fix bug 2019-05-01 19:50:52 +09:00
syuilo 76f37671b4 🎨 2019-05-01 19:45:05 +09:00
syuilo a9fc176c3c Fix types 2019-05-01 19:31:34 +09:00
syuilo 8b13e3c327 Refactor 2019-05-01 19:20:47 +09:00
syuilo c3cd6ad2d2 Refactoring 2019-05-01 18:33:11 +09:00
syuilo 3444b9c9c8 Add splitStrByLine function 2019-05-01 16:33:54 +09:00
syuilo ca6fc9cd79 Remove strConcat function 2019-05-01 16:07:05 +09:00
syuilo 4747ae8b61 Improve AiScript 2019-05-01 15:17:24 +09:00
syuilo b6c50d63a0 Update ja-JP.yml 2019-05-01 15:04:26 +09:00
syuilo 52ebf2055e Improve AiScript 2019-05-01 14:54:34 +09:00
syuilo d0af2c2a98 Improve MisskeyPages 2019-05-01 10:37:25 +09:00
syuilo 10216af48a Improve MisskeyPages 2019-05-01 10:05:33 +09:00
syuilo d0c8d537f5 Refactor 2019-05-01 09:15:29 +09:00
syuilo 1903aaf351 Improve API doc
Fix #4825
2019-05-01 04:44:46 +09:00
MeiMei e6cdf1b995 Fix: mention (あなた宛て) streaming にミュートが効かない (#4823) 2019-04-30 15:53:13 +09:00
syuilo 2900d22cdc Update CHANGELOG.md 2019-04-30 12:38:07 +09:00
syuilo dc072d4706 Merge branch 'develop' 2019-04-30 12:21:31 +09:00
syuilo 8ae14f146b 11.7.0 2019-04-30 12:20:59 +09:00
syuilo 57444c6c3f Update page-editor.el.post.vue 2019-04-30 12:17:53 +09:00
syuilo 759719d124 Improve MisskeyPages 2019-04-30 12:15:41 +09:00
syuilo 59782973be 🎨 2019-04-30 10:08:55 +09:00
syuilo 6c647ea91c Improve usability 2019-04-30 07:55:40 +09:00
syuilo c9763dabe1 変換関数を追加 2019-04-30 07:49:46 +09:00
syuilo da82754659 🎨 2019-04-30 07:43:56 +09:00
syuilo a3cc0ad18b 🎨 2019-04-30 07:41:57 +09:00
syuilo 2e8e5c2751 Improve MisskeyPages
* ifブロック を追加
* ボタンやスイッチなどのテキストに変数使えるようにした
2019-04-30 06:40:02 +09:00
syuilo a60d83b101 Fix ogp 2019-04-29 18:15:12 +09:00
syuilo 6d45265763 Use bigint 2019-04-29 17:38:31 +09:00
syuilo 42e84b77e1 Merge branch 'develop' 2019-04-29 15:26:43 +09:00
syuilo 24121cfadb 11.6.0 2019-04-29 15:26:09 +09:00
syuilo 93093dd288 🎨 2019-04-29 15:20:37 +09:00
syuilo 53381c04e6 🎨 2019-04-29 15:17:31 +09:00
syuilo c6b64e57f1 いくつかの文字列関数を追加 2019-04-29 15:13:04 +09:00
syuilo 9158426d0a Improve usability 2019-04-29 14:51:04 +09:00
syuilo cef26853df Improve usability 2019-04-29 14:46:35 +09:00
syuilo c0673884c5 🎨 2019-04-29 14:38:06 +09:00
syuilo c98eb64598 Fix bug 2019-04-29 14:37:58 +09:00
syuilo 8836bd4f3b Merge branch 'develop' 2019-04-29 11:11:17 +09:00
syuilo a58df29208 11.5.1 2019-04-29 11:10:59 +09:00
syuilo 0d64a17d86 Update page.vue 2019-04-29 11:10:50 +09:00
syuilo c886c09cdb MisskeyPagesで値が0の変数が表示されない問題を修正 2019-04-29 11:08:35 +09:00
syuilo e86d0007c6 Fix error 2019-04-29 11:03:05 +09:00
syuilo 624ee76e71 Fix bug 2019-04-29 11:00:41 +09:00
syuilo 9406079cb7 Merge branch 'develop' 2019-04-29 09:29:48 +09:00
syuilo cd2de7f893 11.5.0 2019-04-29 09:29:21 +09:00
syuilo 342061803e Update dependencies 🚀 2019-04-29 09:28:13 +09:00
syuilo 05b8111c19 Pages (#4811)
* wip

* wip

* wip

* Update page-editor.vue

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Update page-editor.variable.core.vue

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Update aiscript.ts

* wip

* Update package.json

* wip

* wip

* wip

* wip

* wip

* Update page.vue

* wip

* wip

* wip

* wip

* more info

* wip fn

* wip

* wip

* wip
2019-04-29 09:11:57 +09:00
syuilo 747a0b1791 Update define.ts 2019-04-28 19:56:41 +09:00
syuilo c05586b53a Improve performance 2019-04-27 11:17:03 +09:00
YuzuRyo61 0cfca4a618 Fix official instance address (#4805)
いくつかのURLが misskey.xyz になってたままだったので misskey.io に訂正
2019-04-26 18:29:56 +09:00
syuilo 2b8187f7ab Fix bug 2019-04-26 00:54:11 +09:00
rinsuki 291e7e7943 おすすめユーザーに自分自身を含まないように (#4803)
Fix #4790
2019-04-26 00:52:58 +09:00
syuilo 535d10f469 Improve API console 2019-04-25 14:40:42 +09:00
syuilo 4cb58c0892 Refactor 2019-04-25 13:27:07 +09:00
syuilo 6721d27e3f Improve hashtag API 2019-04-25 13:25:10 +09:00
syuilo da9dd7c423 Improve API definition 2019-04-25 12:56:52 +09:00
syuilo 867eb41618 Fix #4415 2019-04-25 12:37:13 +09:00
syuilo 6fdff13480 Update example.yml 2019-04-25 12:24:18 +09:00
syuilo e581ead1ed Update CHANGELOG.md 2019-04-25 12:22:03 +09:00
syuilo 7495206db2 Merge branch 'develop' 2019-04-25 07:48:29 +09:00
syuilo fe87d16d46 11.4.0 2019-04-25 07:48:12 +09:00
syuilo 0db54386cd Resolve #3119 2019-04-25 07:46:39 +09:00
syuilo 772258b0b8 Fix #4793 2019-04-25 04:32:01 +09:00
syuilo 3ef002e14d Fix bug 2019-04-25 04:27:34 +09:00
syuilo b90d473ae5 Fix layout 2019-04-25 04:26:58 +09:00
syuilo f5091d524b Refactorgin 2019-04-25 04:17:03 +09:00
MeiMei ee5720df2c Fix #4704 (#4797)
*  Fix #4632

* Fix #4795
2019-04-25 04:07:39 +09:00
syuilo afe2037985 Merge branch 'develop' 2019-04-24 20:51:34 +09:00
syuilo 878cd18144 11.3.1 2019-04-24 20:51:14 +09:00
syuilo e8c8f67a09 Update post-form.vue
Close #4792

Co-Authored-By: tamaina <tamaina@hotmail.co.jp>
2019-04-24 20:47:47 +09:00
syuilo 7b29e7cf7e Fix bug 2019-04-24 20:41:32 +09:00
syuilo 723d3e6871 Merge branch 'develop' 2019-04-24 15:23:48 +09:00
syuilo f063dee12a 11.3.0 2019-04-24 15:23:31 +09:00
syuilo db4b315d3d Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-04-24 15:21:58 +09:00
syuilo 64d00b08a3 Improve announcement
* お知らせにMFMを使えるように
* お知らせに画像を添付できるように
2019-04-24 15:21:39 +09:00
Acid Chicken (硫酸鶏) 74736a941e Update README.md [AUTOGEN] (#4778) 2019-04-24 14:56:23 +09:00
Acid Chicken (硫酸鶏) c40366f20a Update README.md [AUTOGEN] (#4777) 2019-04-24 14:55:49 +09:00
syuilo d73e52ac2a Create find-by-hash.ts 2019-04-24 14:54:19 +09:00
syuilo 9fac8a611f Fix response 2019-04-24 14:54:15 +09:00
syuilo 9c774a50f8 Update attached-notes.ts 2019-04-24 14:54:06 +09:00
syuilo 4f20ee1909 Rename theme 2019-04-24 14:44:28 +09:00
syuilo 1440c5bc65 Fix bug 2019-04-24 14:39:59 +09:00
syuilo 5829b2a7c1 Update CHANGELOG.md 2019-04-24 10:07:27 +09:00
syuilo e3c4bc18d0 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-04-24 10:02:49 +09:00
syuilo 8555ec2f72 Fix #4767 2019-04-24 10:02:31 +09:00
syuilo 8d7cefbbbe New Crowdin translations (#4771)
* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Chinese Simplified)
2019-04-24 09:54:43 +09:00
syuilo 5aa5896b22 Cache meta 2019-04-24 08:11:19 +09:00
syuilo 8a55bdd89d Increase reaction column length 2019-04-24 03:39:11 +09:00
syuilo 6444ef6444 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-04-24 03:26:10 +09:00
syuilo 701ab6cc68 Refactor 2019-04-24 03:26:02 +09:00
Acid Chicken (硫酸鶏) 3c6ce7a943 Update README.md [AUTOGEN] (#4773) 2019-04-24 00:34:48 +09:00
Acid Chicken (硫酸鶏) 1e54afd217 Update README.md [AUTOGEN] (#4772) 2019-04-24 00:33:55 +09:00
syuilo 4e90fd3a06 メンテナ名を必須でなくす
Close #4753
2019-04-23 22:48:53 +09:00
syuilo 0463c6bb0f Refactor API (#4770)
* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Update description.ts

* wip
2019-04-23 22:35:26 +09:00
syuilo f31f986d66 Fix #4768 2019-04-23 02:50:59 +09:00
Acid Chicken (硫酸鶏) c203c8302b Add @rinsuki into collaborators (#4762) 2019-04-22 18:19:20 +09:00
syuilo dea4a7b389 Merge branch 'develop' 2019-04-22 00:50:14 +09:00
syuilo 0caf9b0706 11.2.2 2019-04-22 00:49:36 +09:00
syuilo 5f655c9fd7 Update dependencies 🚀 2019-04-22 00:43:15 +09:00
syuilo 44aed53998 New Crowdin translations (#4736)
* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (French)

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

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

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (English)

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

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)
2019-04-22 00:39:00 +09:00
syuilo f9ff621d4a 2段階認証を有効にするとログインできない問題を修正 2019-04-22 00:38:37 +09:00
かひわし4(バージョン1) 23a5a75778 Docker: Remove quotes in docker_example.env (#4765)
Docker does not parse quotes in env_file.
As follows if enclosed in quotation marks.

docker_example.env:
POSTGRES_PASSWORD="password"

Environment value in Misskey container:
$ echo $POSTGRES_PASSWORD
"password"

Some users may see this behavior as unexpected.

Dockerはenv_fileのクォーテーションマークを解析しません。
もし値がクォーテーションマークで囲まれていた場合は以下のような動作になります。

docker_example.env:
POSTGRES_PASSWORD="password"

Misskeyのコンテナ内の環境変数:
$ echo $POSTGRES_PASSWORD
"password"

この動作を予期しない動作のように思うユーザーがいるかもしれません。
2019-04-21 23:58:15 +09:00
MeiMei a78475844a Fix: リモートユーザーの修復処理が自動的に実行されない など for v11 (#4764)
* Fix #4761

* Fix: updatePersonができない
2019-04-21 23:57:44 +09:00
syuilo 575cf2935e Merge branch 'develop' 2019-04-21 06:52:28 +09:00
syuilo ae43aa1bc0 11.2.1 2019-04-21 06:52:01 +09:00
MeiMei 0ba71c6a47 Fix #4752 (#4759) 2019-04-21 02:30:18 +09:00
syuilo 643f7d1803 Update CHANGELOG.md 2019-04-20 05:19:28 +09:00
syuilo 5d06da4db2 Update CHANGELOG.md 2019-04-20 05:13:38 +09:00
syuilo 2934b09361 Fix bug 2019-04-19 21:37:36 +09:00
Acid Chicken (硫酸鶏) 97341d3fa0 Update README.md [AUTOGEN] (#4748) 2019-04-19 15:37:47 +09:00
syuilo a95546ede0 Fix bug 2019-04-19 01:00:17 +09:00
syuilo 7b44727b23 Merge branch 'develop' 2019-04-18 22:01:45 +09:00
syuilo debe648a98 11.2.0 2019-04-18 22:00:53 +09:00
syuilo fda8cf77ed Improve warp 2019-04-18 22:00:11 +09:00
syuilo 8aaab195c6 Fix bug 2019-04-18 21:40:36 +09:00
syuilo 4096ddcbd0 Use - 2019-04-18 21:36:44 +09:00
syuilo ae6cc11ad2 Fix icon 2019-04-18 21:34:56 +09:00
tamaina dab7e527de Improve user lists index (#4605)
* wip

* Revert "wip"

This reverts commit 6212831ce3.

* improve list index

* Update user-lists.vue
2019-04-18 21:33:24 +09:00
syuilo 8b92feac71 Resolve #4732 2019-04-18 21:29:19 +09:00
tamaina 4beb3e5755 Fix #4734 (#4745) 2019-04-18 20:46:59 +09:00
syuilo 55f63229cd Update timemachine.vue 2019-04-18 19:42:40 +09:00
syuilo 7827aeb695 Resolve #4735 2019-04-18 19:40:23 +09:00
syuilo cce768aaac Fix API definition 2019-04-18 14:58:43 +09:00
syuilo 80b83c0624 間違えた 2019-04-18 14:41:51 +09:00
syuilo 73b683bb4d Add test 2019-04-18 14:39:49 +09:00
syuilo d78a5c0863 Fix #4703 2019-04-18 14:34:47 +09:00
syuilo 683e5b6abe Add type annotations 2019-04-18 14:29:17 +09:00
MeiMei 653b8f6352 スプラッシュがクリックに反応するように (#4561)
* confirm silence

* Resolve #4554

* Revert "confirm silence"

This reverts commit e1dbdc2bfc.
2019-04-18 03:37:49 +09:00
MeiMei 9ec6afa375 confirm on user menu (#4553) 2019-04-18 03:36:06 +09:00
MeiMei adff5382ca confirm silence (#4560) 2019-04-18 03:33:51 +09:00
tamaina 704aabd703 Use menu instead of prompt Fix #4540, Fix #342 (#4575)
* Use menu instead prompt

* fix

* https://bit.ly/2U0JuVt

* fix
2019-04-18 03:32:45 +09:00
MeiMei f7b1ef0690 アンケートウィジットでもMFMを使用するように v11 (#4741)
* MFM in poll

* use mfm
2019-04-18 03:14:04 +09:00
syuilo 929982117f Merge branch 'develop' 2019-04-18 01:12:21 +09:00
syuilo 56a530d769 11.1.6 2019-04-18 01:12:03 +09:00
syuilo 7ef75fb06b New Crowdin translations (#4692)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Norwegian)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Spanish)

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

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

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

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

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)
2019-04-18 01:11:06 +09:00
かひわし4(バージョン1) 112a72abdf Docker: Back to npm from yarn (#4730)
This commit reverts "Fix Dockerfile #4214" which uses yarn instead of npm.
The cause of the build error is that binding.gyp and src/crypto_key.cc
are missing when installing dependencies.
In other words, yarn did not fix build error.

There is no reason to use yarn, so go back to npm.
2019-04-18 01:09:31 +09:00
syuilo 71813e03ee Fix bug 2019-04-18 01:05:40 +09:00
syuilo 9b05b6ef28 Improve readability 2019-04-18 00:57:06 +09:00
syuilo 54a87b25b3 Remove unused imports 2019-04-18 00:56:10 +09:00
MeiMei 55e97864bd Fix: v11で未認知ユーザーからActivityが飛んできた場合に処理できない (#4733)
* Fix: inboxに未知のユーザーが来ると処理できない

* こうかな
2019-04-18 00:53:00 +09:00
syuilo 95733c9490 [MFM] Better hashtag parsing 2019-04-18 00:40:56 +09:00
syuilo e19ae644f1 Fix indent 2019-04-18 00:13:31 +09:00
syuilo ac4ea25267 Better error handling 2019-04-18 00:09:08 +09:00
syuilo 611e4f34dc Merge branch 'develop' 2019-04-17 19:37:32 +09:00
syuilo faf017f333 11.1.5 2019-04-17 19:36:58 +09:00
syuilo 5eec896615 Better avgColor 2019-04-17 17:13:49 +09:00
syuilo 17f35174ea 🎨 2019-04-17 17:01:57 +09:00
syuilo bf71b31123 Update CONTRIBUTING.md 2019-04-17 16:59:39 +09:00
syuilo 9399a44c82 Fix error 2019-04-17 16:50:50 +09:00
syuilo c96418806f Disable sql log 2019-04-17 16:45:31 +09:00
syuilo 7945eddef6 Clean up 2019-04-17 14:39:45 +09:00
syuilo 0ede390fef Refactor 2019-04-17 14:32:59 +09:00
syuilo 85959a3b9b Fix #4721 Fix #4722 2019-04-17 14:30:31 +09:00
syuilo 946c3a25b9 Clean up 2019-04-17 07:25:34 +09:00
syuilo f9d697128a Update schemas.ts 2019-04-17 04:32:04 +09:00
syuilo 532ef744f4 Merge branch 'develop' 2019-04-17 02:58:09 +09:00
syuilo 27a961814b 11.1.4 2019-04-17 02:57:48 +09:00
syuilo 5a5b65e9bf Clean up 2019-04-17 02:57:36 +09:00
syuilo 96673ad610 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-04-17 02:51:19 +09:00
syuilo a9025aea0d Better response 2019-04-17 02:51:12 +09:00
syuilo f38ab0b973 Update delete-file.ts 2019-04-17 02:37:37 +09:00
tamaina 150dac00cf Update stream.ja-JP.md (#4725) 2019-04-17 02:21:22 +09:00
syuilo bcb1a9c5d3 Refactor 2019-04-17 02:19:49 +09:00
かひわし4(バージョン1) 2e55aea584 Doc: Update setup documents (#4680)
* Doc: Update setup documents

Use GitHub api to checkout latest release instead of "git tag" command
which cannot accurately determine prerelease tag.
Also, Changed numbered list format because
the shell command is too long to fit on one line.

* Doc: Use tab instead of spaces

* Doc: Use master branch as latest release tag

master branch and latest release is the same.
master branch merges develop branch with each latest release.
2019-04-17 02:15:27 +09:00
syuilo 4f5a3f0df5 smallint 2019-04-17 02:12:15 +09:00
syuilo e265b538cc Fix #4724 2019-04-17 02:11:22 +09:00
MeiMei b186504718 Metaのアクセスでトランザクションを張るように (#4720)
* admin/instanceでmetaをキャッシュしないように

* Metaのアクセスにトランザクションをかける
2019-04-17 00:45:33 +09:00
syuilo fc27890f13 Refactor 2019-04-17 00:34:49 +09:00
syuilo a583939767 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-04-17 00:33:10 +09:00
syuilo 52e3bcfd29 Meta を二重にデータベースに保存できないように 2019-04-17 00:33:02 +09:00
Satsuki Yanagi 85d29a3f9d Correct syntax error (#4718) 2019-04-17 00:30:34 +09:00
YuzuRyo61 18944d389d Fix space indent in misskey.nginx (#4717)
Tabインデントになっていたものをスペースインデントに変更
2019-04-16 19:41:58 +09:00
syuilo e90ac5d6a4 チャートの数値カラムの型を拡張 2019-04-16 17:52:09 +09:00
Acid Chicken (硫酸鶏) cb9a6ae774 Update README.md [AUTOGEN] (#4697) 2019-04-16 13:07:00 +09:00
かひわし4(バージョン1) 3ef09aa6b2 Docker: Uncomment redis (#4707)
Redis is required since Misskey 11.0.0.
2019-04-16 13:06:36 +09:00
tamaina 4db22e45a2 fix syuilo#4711 (#4715) 2019-04-16 13:05:47 +09:00
tamaina f966d0b32c 色々な修正; Fix #4709 (#4714)
* Fix a la carte 1

* use dialog instead of alert() etc
2019-04-16 13:05:10 +09:00
MeiMei ba3879a95a Fix: admin/driveのアイコンがずれてる (#4710) 2019-04-16 02:46:47 +09:00
syuilo c6cef0162d Merge branch 'develop' 2019-04-16 01:24:00 +09:00
syuilo 6d09aa86e9 11.1.3 2019-04-16 01:23:26 +09:00
syuilo b711f0f9c6 Clean up 2019-04-16 01:22:48 +09:00
syuilo 8fefb3a4c9 Update authenticate.ts 2019-04-16 01:20:28 +09:00
syuilo 400cdf0f26 Fix #4705 2019-04-16 01:11:20 +09:00
syuilo bce8c5a315 Refactor 2019-04-16 01:05:21 +09:00
かひわし4(バージョン1) f44dc2dd05 Doc: Add "Init DB" section (#4695)
Misskey 11.x requires database initialization.
2019-04-15 23:39:09 +09:00
syuilo df950d2fc5 Clean up 2019-04-15 23:37:35 +09:00
syuilo 5e1f804dd1 Merge branch 'develop' 2019-04-15 23:32:45 +09:00
syuilo 15de89f2f9 11.1.2 2019-04-15 23:32:26 +09:00
syuilo df647a415c Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-04-15 23:29:44 +09:00
syuilo fc66231f8e Fix #4701 2019-04-15 23:29:26 +09:00
YuzuRyo61 71df3e1566 APIドキュメントの説明とか一部追記 (#4702)
* Define description in generate.ts

* Add description in create.ts
2019-04-15 23:26:20 +09:00
syuilo 168c22fc98 Fix bug 2019-04-15 23:00:39 +09:00
syuilo 792ec23d7a Use pureimage instead of canvas 2019-04-15 22:58:04 +09:00
syuilo ff625253ce Merge branch 'develop' 2019-04-15 22:09:10 +09:00
syuilo 8c872c6b22 11.1.1 2019-04-15 22:08:53 +09:00
syuilo 541f5bc0a6 Fix bug 2019-04-15 21:59:14 +09:00
syuilo 77ff7b9df0 デフォルトでHTLを表示するように 2019-04-15 21:30:49 +09:00
syuilo 203cc5075e Fix application-name 2019-04-15 21:17:52 +09:00
syuilo 7abfcd06da Merge branch 'develop' 2019-04-15 21:02:04 +09:00
syuilo 724f81c7f3 11.1.0 2019-04-15 21:01:46 +09:00
syuilo 4d2e98af7b 管理者やモデレーターはレートリミット無効に 2019-04-15 20:52:08 +09:00
syuilo 08221fdda7 Fix bug 2019-04-15 20:41:56 +09:00
syuilo c0f72970b9 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-04-15 20:37:29 +09:00
syuilo 18bc4a49e8 ランダムにアバターを生成するように 2019-04-15 20:37:21 +09:00
Acid Chicken (硫酸鶏) f90b6dbed4 Follow lint 2019-04-15 19:05:35 +09:00
syuilo d2d991ff34 Fix error 2019-04-15 18:08:57 +09:00
syuilo 190a5e175b Fix bug 2019-04-15 16:37:54 +09:00
syuilo a05f5a91b8 Merge branch 'develop' 2019-04-15 13:14:58 +09:00
syuilo 4d02ff27be 11.0.3 2019-04-15 13:14:36 +09:00
syuilo df92b41d25 Fix bug 2019-04-15 13:11:17 +09:00
syuilo 075af96338 Fix error 2019-04-15 12:54:42 +09:00
syuilo 64bbc55336 Fix bug 2019-04-15 12:52:02 +09:00
syuilo 06c621acc1 Fix bug 2019-04-15 12:49:38 +09:00
syuilo d040dc19bc Merge branch 'develop' 2019-04-15 12:23:20 +09:00
syuilo a38ae4a402 11.0.2 2019-04-15 12:23:03 +09:00
syuilo 772063aade Refactor 2019-04-15 12:20:48 +09:00
syuilo 31c26354c5 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-04-15 12:11:58 +09:00
syuilo 64b331c5b2 Update read.ts 2019-04-15 12:11:32 +09:00
tamaina 94f8a145ec Better permisson Fix #2341 (#4611)
* Better permisson Fix #2341

* add kinds.ts

* test

* fix

* v11

* fix
2019-04-15 12:10:40 +09:00
syuilo b357afa30a Clean up 2019-04-15 12:04:23 +09:00
syuilo fee0437493 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-04-15 12:03:04 +09:00
syuilo 663b8864c1 Fix bug 2019-04-15 12:03:00 +09:00
syuilo c6eafdde30 Fix bug 2019-04-15 11:59:25 +09:00
syuilo f32ff95256 New Crowdin translations (#4685)
* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Czech)
2019-04-15 11:33:08 +09:00
MeiMei 0452b75c3e Fix #4688 (#4689) 2019-04-15 11:32:53 +09:00
Acid Chicken (硫酸鶏) 97efd23ec8 Update README.md [AUTOGEN] (#4691) 2019-04-15 11:31:32 +09:00
rinsuki ea3e311528 簡易的なパーミッションの後方互換 (#4687) 2019-04-15 03:48:54 +09:00
rinsuki 0565454419 callbackUrlをappのレスポンスに追加 (#4686) 2019-04-15 03:39:31 +09:00
syuilo 35c79c2f29 Fix bug 2019-04-15 03:20:14 +09:00
syuilo e6089aec48 Update README.md 2019-04-15 02:45:16 +09:00
syuilo dd3f7834c3 Merge branch 'develop' 2019-04-15 01:06:57 +09:00
syuilo f8cf18d880 11.0.1 2019-04-15 01:06:36 +09:00
syuilo 2ac7e242b6 Fix test 2019-04-15 01:03:57 +09:00
syuilo d8b604a94f Update CHANGELOG.md 2019-04-14 23:18:01 +09:00
syuilo a1f7b00981 Clean up 2019-04-14 22:54:33 +09:00
syuilo b7ee42198c New translations ja-JP.yml (German) (#4683) 2019-04-14 22:40:35 +09:00
syuilo d66e4b7ff9 Merge branch 'develop' 2019-04-14 20:38:55 +09:00
syuilo 7f9789cf65 11.0.0 2019-04-14 20:36:13 +09:00
syuilo b41c18e033 New translations ja-JP.yml (English) (#4681) 2019-04-14 20:31:15 +09:00
syuilo 3c73a7ec6d inc/dec score 2019-04-14 20:28:57 +09:00
syuilo 182c09d952 Update note.ts 2019-04-14 20:26:47 +09:00
syuilo 9fb86aed04 Clean up 2019-04-14 18:18:20 +09:00
syuilo b8f7b13b05 11.0.0-beta.16 2019-04-14 17:44:16 +09:00
syuilo 1ee1d5b6d1 Update and clean dependencies 🚀 2019-04-14 17:40:30 +09:00
syuilo 154c38c314 Fix URL 2019-04-14 17:23:11 +09:00
syuilo 3c0626752a 11.0.0-beta.15 2019-04-14 17:21:59 +09:00
syuilo 511ef77fb7 Update CHANGELOG.md 2019-04-14 17:21:37 +09:00
syuilo 4df3ede500 New Crowdin translations (#4641)
* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Portuguese)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (English)

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

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (French)

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

* New translations ja-JP.yml (Dutch)

* New translations ja-JP.yml (German)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Japanese, Kansai)
2019-04-14 17:19:52 +09:00
Acid Chicken (硫酸鶏) e83c080af8 Update README.md [AUTOGEN] (#4678) 2019-04-14 17:18:55 +09:00
Acid Chicken (硫酸鶏) 054220db70 リファクタリング (#4587)
* Use I cap

* Avoid _

* Use default value instead of optional boolean

* Bye useless variable

* Bye verbose try-catch
2019-04-14 17:18:17 +09:00
Acid Chicken (硫酸鶏) 97bff010a8 Update README.md [AUTOGEN] (#4665) 2019-04-14 17:12:49 +09:00
tamaina 487a3079cd Improve post form attaches; Fix #4673, Resolve #2327, Resolve #2145 [v11] (#4674)
* improve post form attaches

* Fix

* chain

* 右クリックでも反応するように
2019-04-14 17:12:04 +09:00
syuilo 2d5158c680 Fix bug 2019-04-14 16:06:04 +09:00
syuilo 837be06b72 Update docker-compose.yml 2019-04-14 12:05:12 +09:00
syuilo 7e0d8dd4d7 11.0.0-beta.14 2019-04-14 12:00:49 +09:00
syuilo 146fb23d7d Fix bug 2019-04-14 11:59:23 +09:00
syuilo 61455ffe29 Fix bug 2019-04-14 11:58:10 +09:00
syuilo c267baafdc Fix bug 2019-04-14 11:56:37 +09:00
syuilo 42248a306a Better error handling 2019-04-14 11:53:47 +09:00
syuilo 694ec7ebe1 Fix bug 2019-04-14 11:50:31 +09:00
syuilo e3b3f8fac1 Better error handling 2019-04-14 04:17:24 +09:00
syuilo b390363b25 Update CHANGELOG.md 2019-04-14 02:44:49 +09:00
syuilo f6f8cdbcf2 11.0.0-beta.13 2019-04-14 02:36:21 +09:00
syuilo f46f53b8a3 Refactor 2019-04-14 02:36:00 +09:00
syuilo a2fcae4383 Fix bug 2019-04-14 02:33:50 +09:00
syuilo 483f043768 11.0.0-beta.12 2019-04-14 02:24:27 +09:00
syuilo f8e0f4f21f Fix bug 2019-04-14 02:21:57 +09:00
syuilo 9c3613e96d Improve error handling 2019-04-14 02:19:59 +09:00
syuilo d9cacdc86d Update meid.ts 2019-04-14 01:47:46 +09:00
syuilo aa3d2deeaa Add meid 2019-04-14 01:40:29 +09:00
syuilo e64912545a Update id generation methods 2019-04-14 01:08:26 +09:00
syuilo b247be80cc 11.0.0-beta.11 2019-04-13 20:02:47 +09:00
syuilo 343f2f1f33 Fix bug 2019-04-13 20:02:31 +09:00
syuilo 2d590df900 Clean up 2019-04-13 20:01:32 +09:00
syuilo ba56b2b9fd Update CHANGELOG.md 2019-04-13 19:40:03 +09:00
syuilo bf472b0c5e refactor 2019-04-13 19:36:57 +09:00
syuilo f7961f34c5 Update CHANGELOG.md 2019-04-13 19:23:32 +09:00
syuilo e369031a28 Redis必須に 2019-04-13 19:19:32 +09:00
syuilo 186d7bbfd9 Fix bug 2019-04-13 19:08:41 +09:00
syuilo 60a11f8da5 11.0.0-beta.10 2019-04-13 18:58:48 +09:00
syuilo 1181fcdceb Fix bug 2019-04-13 18:58:29 +09:00
syuilo 8cb9852058 リプライ先をエラー時に無視すると本来は投票なのに投票じゃないと扱われおかしくなるのでエラーにするように 2019-04-13 18:45:07 +09:00
syuilo 53d46d1cbe Fix error 2019-04-13 18:23:32 +09:00
syuilo 275e1c8de9 Refactor 2019-04-13 18:17:27 +09:00
syuilo d46eca4c87 Refactor 2019-04-13 18:14:32 +09:00
syuilo 2927fb1597 11.0.0-beta.9 2019-04-13 17:27:17 +09:00
syuilo 8c72e011d2 Fix bug 2019-04-13 17:26:38 +09:00
syuilo 69662e24c3 Fix bug 2019-04-13 17:24:56 +09:00
syuilo 96099ffe98 11.0.0-beta.8 2019-04-13 16:55:13 +09:00
syuilo ae16b45c11 Fix bug 2019-04-13 16:54:21 +09:00
syuilo cfee87d3ef 11.0.0-beta.7 2019-04-13 15:18:27 +09:00
syuilo 5fcf5bc635 Fix bug 2019-04-13 15:18:12 +09:00
syuilo 14bcb813cc Update migrate.ts 2019-04-13 15:09:16 +09:00
syuilo 6af19794b6 11.0.0-beta.6 2019-04-13 15:03:56 +09:00
syuilo 8316186695 Clean packed responses 2019-04-13 15:02:15 +09:00
syuilo 85d3023cd5 Clean packed responses 2019-04-13 14:55:59 +09:00
syuilo 78414dee29 Add note 2019-04-13 14:45:51 +09:00
syuilo 084135141f typo 2019-04-13 14:37:45 +09:00
syuilo 467a21f028 Update CONTRIBUTING.md 2019-04-13 14:36:35 +09:00
syuilo 6e284c44d6 Update CONTRIBUTING.md 2019-04-13 14:34:34 +09:00
syuilo daf9a449e8 Update CONTRIBUTING.md 2019-04-13 14:31:05 +09:00
syuilo 960268fd33 typo 2019-04-13 14:17:50 +09:00
syuilo 8c331da315 Fix bug 2019-04-13 14:11:15 +09:00
syuilo b0d626d862 Update CONTRIBUTING.md 2019-04-13 14:04:29 +09:00
syuilo a51fbd7316 Suppress errors 2019-04-13 04:00:02 +09:00
syuilo 063f372f3c 11.0.0-beta.5 2019-04-13 01:53:00 +09:00
syuilo 987168b863 strictNullChecks (#4666)
* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip
2019-04-13 01:43:22 +09:00
syuilo 4ee40c3345 Fix bug 2019-04-12 14:24:56 +09:00
syuilo 654daff7ce Better error handling 2019-04-12 13:07:56 +09:00
syuilo 64e10e9619 11.0.0-beta.4 2019-04-12 02:25:56 +09:00
syuilo b89cffe98d Fix bug 2019-04-12 02:22:22 +09:00
syuilo bd76ba702f 🎨 2019-04-12 02:15:22 +09:00
syuilo 5d52e9ce6b 11.0.0-beta.3 2019-04-12 01:56:48 +09:00
syuilo 3c29027ca3 Clean up 2019-04-12 01:54:28 +09:00
syuilo 2ff3069d23 トランザクションを使うようにしたり 2019-04-12 01:52:25 +09:00
syuilo 4198246351 トランザクションを使用してアンケートレコードの挿入に失敗した場合に投稿レコードの挿入もなかったことにするように 2019-04-12 01:30:10 +09:00
syuilo 2b6389b4dc Fix bug 2019-04-12 01:03:40 +09:00
syuilo d7df75ae6c Clean up 2019-04-12 01:01:25 +09:00
syuilo 11c30eccb3 非正規化カラムを削除
非正規化するほどの情報じゃない
2019-04-12 00:42:39 +09:00
syuilo ab8c6515b8 Fix error log 2019-04-12 00:33:26 +09:00
syuilo d4ad36fa41 Update migrate.ts 2019-04-11 22:49:12 +09:00
syuilo 4d688be3df Update migrate.ts 2019-04-11 22:44:04 +09:00
syuilo d2b75f3501 Update migrate.ts 2019-04-11 19:42:35 +09:00
syuilo 46b78cb4ff Increase url column length 2019-04-11 19:03:49 +09:00
syuilo 5d6e0d0f37 Update migrate.ts 2019-04-11 16:15:27 +09:00
syuilo e19d0a37bb Update migrate.ts 2019-04-11 16:09:33 +09:00
syuilo dea3e2132e Update migrate.ts 2019-04-11 15:53:15 +09:00
syuilo 91c1ceefbd Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-04-11 12:59:16 +09:00
syuilo 5c50989970 Fix bug 2019-04-11 12:59:09 +09:00
MeiMei 2a7e3b9c51 Fix: AP actor Service のサポートが不完全 (v11) (#4662) 2019-04-11 03:09:12 +09:00
syuilo ab302df0ae Update CHANGELOG.md 2019-04-11 00:18:37 +09:00
syuilo 21e5809993 Clean up 2019-04-10 23:57:39 +09:00
syuilo c58afc67e8 Update migrate.ts 2019-04-10 20:13:14 +09:00
syuilo 8e344f2deb 11.0.0-beta.2 2019-04-10 20:08:19 +09:00
syuilo c28f4ffb3f Clean up 2019-04-10 20:07:36 +09:00
syuilo 2a40240310 Fix bug 2019-04-10 18:35:51 +09:00
syuilo 0e9fba9287 11.0.0-beta.1 2019-04-10 18:25:16 +09:00
syuilo 2e3dd2a30a Fix bug 2019-04-10 18:13:33 +09:00
syuilo dda5f6559d Fix bug 2019-04-10 18:10:09 +09:00
syuilo 4152e59638 Fix bug 2019-04-10 18:05:39 +09:00
syuilo 9d5a92bce6 11.0.0-alpha.10 2019-04-10 15:08:05 +09:00
syuilo 30172b92e6 WebFingerリクエストで Proxy, Keep-Alive などをサポート #4658
Co-Authored-By: MeiMei <mei23@users.noreply.github.com>
2019-04-10 15:07:21 +09:00
syuilo 8468a9d4c7 11.0.0-alpha.9 2019-04-10 15:04:33 +09:00
syuilo 626cfb61ac テーブル分割 2019-04-10 15:04:27 +09:00
syuilo 9603f3fa4f Delete get-user-summary.ts 2019-04-10 14:58:45 +09:00
syuilo 619a1b9e53 Fix bug 2019-04-10 14:10:00 +09:00
syuilo 62e76ad588 11.0.0-alpha.8 2019-04-10 01:00:00 +09:00
syuilo 236d72685d More puny 2019-04-10 00:59:41 +09:00
syuilo 72a5f7b1e2 Fix bug 2019-04-10 00:40:10 +09:00
syuilo d1c16a90b4 11.0.0-alpha.7 2019-04-10 00:01:10 +09:00
syuilo 33a9783ae5 ドメインは常にPunycodeで保存するように 2019-04-09 23:59:32 +09:00
syuilo 4d64fd665e Update update.ts 2019-04-09 23:40:55 +09:00
syuilo 96443384fe 11.0.0-alpha.6 2019-04-09 23:35:34 +09:00
syuilo 69939f1edb :) 2019-04-09 23:31:41 +09:00
syuilo e3c0058942 Refactor 2019-04-09 23:29:48 +09:00
syuilo 3dc2361654 Update migrate.ts 2019-04-09 23:12:11 +09:00
syuilo ec2f709018 Update migrate.ts 2019-04-09 23:09:57 +09:00
syuilo ea06665c51 isRemote --> isLink 2019-04-09 23:07:08 +09:00
syuilo 83b7010d6a 10.100.0 2019-04-09 21:13:52 +09:00
syuilo 71654cbe47 Fix #4636 2019-04-09 21:11:05 +09:00
syuilo e8f96e848a Merge branch 'v10' of https://github.com/syuilo/misskey into v10 2019-04-09 21:10:36 +09:00
syuilo 251abf21d4 Update .gitignore 2019-04-09 21:10:18 +09:00
MeiMei d103427932 Fix non media thumbnails (#4380) 2019-04-09 21:07:46 +09:00
syuilo 74a4bd704c Update migrate.ts 2019-04-09 21:05:49 +09:00
syuilo c62f3e0e45 11.0.0-alpha.5 2019-04-09 20:51:23 +09:00
syuilo a56a969433 Update dependencies 🚀 2019-04-09 20:49:56 +09:00
syuilo 1016f94bbb Fix bug 2019-04-09 20:47:31 +09:00
syuilo e98cce9aee Update migrate.ts 2019-04-09 19:20:10 +09:00
syuilo d4bdb5d327 Update migrate.ts 2019-04-09 19:14:18 +09:00
syuilo db4378415e Update migrate.ts 2019-04-09 19:02:09 +09:00
syuilo 9b594880c8 Restore crypto_key to migration 2019-04-09 19:02:02 +09:00
syuilo d44fc3db2f Update migrate.ts 2019-04-09 18:45:21 +09:00
syuilo 5133b0a0c0 Update migrate.ts 2019-04-09 18:41:53 +09:00
syuilo 815469304f typo 2019-04-09 18:37:14 +09:00
syuilo c651921c79 Fix bug 2019-04-09 18:36:43 +09:00
syuilo d18c835221 Update migrate.ts 2019-04-09 18:35:07 +09:00
syuilo e38335077e Update user.ts 2019-04-09 12:36:01 +09:00
syuilo 34c150cf73 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-04-09 12:31:48 +09:00
syuilo 24cb3ba091 Update migrate.ts 2019-04-09 12:31:45 +09:00
syuilo c07eaef2d1 Update note.ts 2019-04-09 12:25:19 +09:00
syuilo 5df708ac9f Delete mark-admin.js 2019-04-09 04:09:34 +09:00
syuilo 38ffbe95e9 Update migrate.ts 2019-04-09 01:42:07 +09:00
syuilo 8bec4042fc Update migrate.ts 2019-04-09 01:31:54 +09:00
syuilo ee7ef89dfb Fix bug 2019-04-09 01:31:48 +09:00
syuilo 54a5246061 Update migrate.ts 2019-04-09 01:03:58 +09:00
syuilo fa6eae2937 Update migrate.ts 2019-04-08 23:24:44 +09:00
syuilo 795be20ee1 Clean up 2019-04-08 23:06:05 +09:00
syuilo 87d3a06dcd revert rename 2019-04-08 23:05:41 +09:00
syuilo 8b5c917195 Update CHANGELOG.md 2019-04-08 22:23:33 +09:00
syuilo c7da0e59ff Update CHANGELOG.md 2019-04-08 21:46:11 +09:00
かひわし4(バージョン1) eb14acbe0c Doc: Update installing command (#4655)
Replace the "Checkout to Latest Release" command.
Current setup document will checkout latest alpha version.
Because grep command in the document does not exclude alpha version tags.
2019-04-08 21:40:13 +09:00
syuilo 56860a6bef wip migration 2019-04-08 20:33:42 +09:00
syuilo 735687be21 update token generation 2019-04-08 20:29:52 +09:00
MeiMei 592cdfa910 ユーザーリストでフォローボタンを表示するように (#4654) 2019-04-08 20:18:42 +09:00
MeiMei f2ad1a0406 Fix: 投稿ウィジットでローカルのみの公開範囲で投稿できない (#4653) 2019-04-08 20:16:00 +09:00
syuilo fab0cc51b3 Fix 2019-04-08 19:56:42 +09:00
MeiMei 3a26acbdb2 ユーザーリストでフォローボタンを表示するように (#4603) 2019-04-08 17:20:16 +09:00
syuilo 8d0c31bcda 11.0.0-alpha.4 2019-04-08 17:07:50 +09:00
syuilo 0b99293d4c Fix bug 2019-04-08 17:04:37 +09:00
syuilo 802153ff9b Fix bug 2019-04-08 16:49:05 +09:00
syuilo ec73e2d237 11.0.0-alpha.3 2019-04-08 16:43:51 +09:00
syuilo c32b020535 Update ja-JP.yml 2019-04-08 16:43:27 +09:00
syuilo c4441804e2 Fix bug 2019-04-08 16:41:41 +09:00
syuilo 6c9d80d4e8 Fix bug 2019-04-08 16:39:02 +09:00
syuilo a231f8d26c Fix bug 2019-04-08 16:34:45 +09:00
MeiMei 82af9320c0 Fix: TLを遡った時に抜けがある時がある (v10) (#4629)
* Update the cursor when the timeline is updated

* fix releaseQueue
2019-04-08 15:18:44 +09:00
MeiMei fceebf7388 Fix #4562 (#4563) 2019-04-08 15:17:39 +09:00
syuilo 08da258b63 Update README.md 2019-04-08 15:11:03 +09:00
syuilo 5994926440 11.0.0-alpha.2 2019-04-08 14:51:36 +09:00
syuilo 30f2da4215 Fix bug 2019-04-08 14:41:23 +09:00
syuilo 1a2229f886 Improve instance chart 2019-04-08 14:29:17 +09:00
syuilo 1e166490d9 [Client] Better pagination
Fix #4628
Close #4629
2019-04-08 14:17:44 +09:00
syuilo 1c57e6f80a i18n 2019-04-08 13:55:09 +09:00
MeiMei a6537a8748 Fix: 投稿ウィジットでローカルのみの公開範囲で投稿できない (#4647) 2019-04-08 13:31:42 +09:00
Acid Chicken (硫酸鶏) 842b75977b Update README.md [AUTOGEN] (#4652) 2019-04-08 04:21:37 +09:00
Acid Chicken (硫酸鶏) 9b3dccf60c Update README.md [AUTOGEN] (#4649) 2019-04-08 04:20:53 +09:00
syuilo 2d533e0cd8 Update CHANGELOG.md 2019-04-08 03:52:46 +09:00
syuilo 9e1925c808 11.0.0-alpha.1 2019-04-08 03:48:26 +09:00
syuilo 142d59be85 Fix bug 2019-04-08 03:35:02 +09:00
syuilo d9a5e06b5b Fix bug 2019-04-08 02:27:06 +09:00
syuilo b6889e9ac6 Fix bug 2019-04-08 00:46:01 +09:00
syuilo dc82203e9b Fix bug 2019-04-08 00:24:01 +09:00
syuilo 6a30d32e7d Fix bug 2019-04-07 23:31:58 +09:00
syuilo d9780606b3 Refactor 2019-04-07 23:06:07 +09:00
syuilo fffa32df48 Fix bug 2019-04-07 23:05:57 +09:00
syuilo cad49892d3 Fix avgColor format 2019-04-07 22:57:30 +09:00
syuilo f0a29721c9 Use PostgreSQL instead of MongoDB (#4572)
* wip

* Update note.ts

* Update timeline.ts

* Update core.ts

* wip

* Update generate-visibility-query.ts

* wip

* wip

* wip

* wip

* wip

* Update global-timeline.ts

* wip

* wip

* wip

* Update vote.ts

* wip

* wip

* Update create.ts

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Update files.ts

* wip

* wip

* Update CONTRIBUTING.md

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Update read-notification.ts

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Update cancel.ts

* wip

* wip

* wip

* Update show.ts

* wip

* wip

* Update gen-id.ts

* Update create.ts

* Update id.ts

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* Docker: Update files about Docker (#4599)

* Docker: Use cache if files used by `yarn install` was not updated

This patch reduces the number of times to installing node_modules.
For example, `yarn install` step will be skipped when only ".config/default.yml" is updated.

* Docker: Migrate MongoDB to Postgresql

Misskey uses Postgresql as a database instead of Mongodb since version 11.

* Docker: Uncomment about data persistence

This patch will save a lot of databases.

* wip

* wip

* wip

* Update activitypub.ts

* wip

* wip

* wip

* Update logs.ts

* wip

* Update drive-file.ts

* Update register.ts

* wip

* wip

* Update mentions.ts

* wip

* wip

* wip

* Update recommendation.ts

* wip

* Update index.ts

* wip

* Update recommendation.ts

* Doc: Update docker.ja.md and docker.en.md (#1) (#4608)

Update how to set up misskey.

* wip

* ✌️

* wip

* Update note.ts

* Update postgre.ts

* wip

* wip

* wip

* wip

* Update add-file.ts

* wip

* wip

* wip

* Clean up

* Update logs.ts

* wip

* 🍕

* wip

* Ad notes

* wip

* Update api-visibility.ts

* Update note.ts

* Update add-file.ts

* tests

* tests

* Update postgre.ts

* Update utils.ts

* wip

* wip

* Refactor

* wip

* Refactor

* wip

* wip

* Update show-users.ts

* Update update-instance.ts

* wip

* Update feed.ts

* Update outbox.ts

* Update outbox.ts

* Update user.ts

* wip

* Update list.ts

* Update update-hashtag.ts

* wip

* Update update-hashtag.ts

* Refactor

* Update update.ts

* wip

* wip

* ✌️

* clean up

* docs

* Update push.ts

* wip

* Update api.ts

* wip

* ✌️

* Update make-pagination-query.ts

* ✌️

* Delete hashtags.ts

* Update instances.ts

* Update instances.ts

* Update create.ts

* Update search.ts

* Update reversi-game.ts

* Update signup.ts

* Update user.ts

* id

* Update example.yml

* 🎨

* objectid

* fix

* reversi

* reversi

* Fix bug of chart engine

* Add test of chart engine

* Improve test

* Better testing

* Improve chart engine

* Refactor

* Add test of chart engine

* Refactor

* Add chart test

* Fix bug

* コミットし忘れ

* Refactoring

* ✌️

* Add tests

* Add test

* Extarct note tests

* Refactor

* 存在しないユーザーにメンションできなくなっていた問題を修正

* Fix bug

* Update update-meta.ts

* Fix bug

* Update mention.vue

* Fix bug

* Update meta.ts

* Update CONTRIBUTING.md

* Fix bug

* Fix bug

* Fix bug

* Clean up

* Clean up

* Update notification.ts

* Clean up

* Add mute tests

* Add test

* Refactor

* Add test

* Fix test

* Refactor

* Refactor

* Add tests

* Update utils.ts

* Update utils.ts

* Fix test

* Update package.json

* Update update.ts

* Update manifest.ts

* Fix bug

* Fix bug

* Add test

* 🎨

* Update endpoint permissions

* Updaye permisison

* Update person.ts

#4299

* データベースと同期しないように

* Fix bug

* Fix bug

* Update reversi-game.ts

* Use a feature of Node v11.7.0 to extract a public key (#4644)

* wip

* wip

* ✌️

* Refactoring

#1540

* test

* test

* test

* test

* test

* test

* test

* Fix bug

* Fix test

* 🍣

* wip

* #4471

* Add test for #4335

* Refactor

* Fix test

* Add tests

* 🕓

* Fix bug

* Add test

* Add test

* rename

* Fix bug
2019-04-07 21:50:36 +09:00
Acid Chicken (硫酸鶏) 13caf37991 Update README.md [AUTOGEN] (#4639) 2019-04-06 12:47:02 +09:00
syuilo b71a602107 10.99.0 2019-04-06 00:58:45 +09:00
syuilo e6ce0dd43a New Crowdin translations (#4521)
* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

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

* 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 (Korean)

* New translations ja-JP.yml (Polish)

* 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 (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)
2019-04-06 00:51:54 +09:00
tamaina 094a5214f1 Re: fix drive file preview: Fix #4532, Fix #4577 (#4590)
* 🎨 Re: fix drive file preview

* clean

* fix

* fix
2019-04-06 00:51:31 +09:00
tamaina 0932fcd114 fix #4532 (#4592) 2019-04-06 00:50:35 +09:00
syuilo f26643cea3 Update dependencies 🚀 2019-04-06 00:48:05 +09:00
MeiMei 63b1689155 Fix #4556 (#4558) 2019-04-06 00:41:08 +09:00
MeiMei 59dc929431 フォローインポートで自分をスキップするように (#4614)
* skip myself in import-following

* skip owner in publishToFollowers
2019-04-06 00:07:23 +09:00
Acid Chicken (硫酸鶏) deaadc33db Update README.md [AUTOGEN] (#4634) 2019-04-05 18:45:20 +09:00
syuilo 0ba92a4f29 設定でポートが指定されていない場合、環境変数を参照するように 2019-04-05 18:21:08 +09:00
syuilo 7dc5009ec7 Create Procfile 2019-04-05 18:17:30 +09:00
syuilo 0ee827afd3 Update 01_bug-report.md 2019-04-05 01:14:25 +09:00
syuilo 551d1b7f86 Metaに投稿やユーザーのIDを設定するように 2019-04-04 02:22:50 +09:00
Acid Chicken (硫酸鶏) 7ed1b695f5 Update README.md [AUTOGEN] (#4631) 2019-04-04 00:50:33 +09:00
Acid Chicken (硫酸鶏) 7ad31b9b33 Update README.md [AUTOGEN] (#4627) 2019-04-03 12:48:51 +09:00
Acid Chicken (硫酸鶏) edd8992f7f Update README.md [AUTOGEN] (#4626) 2019-04-02 03:59:54 +09:00
Acid Chicken (硫酸鶏) 96fe42cfcb Update README.md [AUTOGEN] (#4624) 2019-04-02 00:25:14 +09:00
Acid Chicken (硫酸鶏) c3872b4a38 Fix bug
FYI: https://developer.mozilla.org/ja/docs/Web/CSS/@charset
2019-04-01 21:23:16 +09:00
MeiMei 762945113d Fix #4586 (#4621)
* Fix #4586

* Revert "Fix #4586"

This reverts commit e3e600d3c8.

* note-headerにnarrow
2019-04-01 11:04:11 +09:00
syuilo 037e9230fc Update reset.styl 2019-04-01 02:28:32 +09:00
MeiMei 3f59ebf986 manifest.json にインスタンス名を反映させるように (#4619) 2019-04-01 01:05:49 +09:00
MeiMei e51e1d2b09 Fix: ServiceWorkerの設定がUIで有効にならない (#4620) 2019-04-01 01:04:55 +09:00
MeiMei 26cc49eb69 ユーザーリストの user.description を single line 扱いで表示するように (#4604) 2019-03-31 21:32:09 +09:00
syuilo 7987bb491c 🎨 2019-03-29 22:05:51 +09:00
MeiMei 16b7ac5a87 Fix #4593 (#4594) 2019-03-29 18:35:47 +09:00
MeiMei 5932cb8609 Fix: View source on GitHub (#4584) 2019-03-27 03:10:56 +09:00
MeiMei dfe694d39f Fix #4581 (#4583) 2019-03-27 02:58:42 +09:00
syuilo 278624f2c8 10.98.3 2019-03-26 22:26:12 +09:00
Acid Chicken (硫酸鶏) 899f42c070 Update reaction-lib.ts (#4580) 2019-03-26 22:24:46 +09:00
Acid Chicken (硫酸鶏) 8ce1d4d6a3 Fix #4576 (#4579)
* Update update.ts

* Update api.ts
2019-03-26 22:24:14 +09:00
tamaina 52225d703b Fix drive file preview Fix #4532 (#4577)
* fix #4532

* fix
2019-03-26 22:23:17 +09:00
MeiMei 81739af7cb Fix: リアクションのカスタム絵文字の情報がNoteに添付されない (#4574) 2019-03-26 22:22:39 +09:00
Acid Chicken (硫酸鶏) 25473222cc Follow lint 2019-03-26 21:52:58 +09:00
syuilo 0b7be70935 10.98.2 2019-03-25 23:36:30 +09:00
MeiMei 818b71abd6 fix Content-Disposition (#4573) 2019-03-25 03:12:08 +09:00
syuilo 25575e8510 10.98.1 2019-03-24 13:03:22 +09:00
Acid Chicken (硫酸鶏) 6c85adcf23 Fix typo 2019-03-23 13:50:10 +09:00
syuilo 5dc92d7a40 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-22 19:07:29 +09:00
syuilo 4e2b966b80 Fix #4559
Close #4564
2019-03-22 19:07:13 +09:00
Acid Chicken (硫酸鶏) d34f8c3cb9 Update README.md [AUTOGEN] (#4566) 2019-03-22 19:01:29 +09:00
Zero King 9049ecb1cf Add name of series in instance count chart (#4565) 2019-03-22 14:57:09 +09:00
MeiMei 7bebea087c Fix #4546 (#4548)
* Refactor download

* emoji type
2019-03-21 04:50:44 +09:00
MeiMei 1c79e30436 Fix NoteReaction (#4547) 2019-03-20 21:39:02 +09:00
tamaina 1d7933349b Fix #4538 (#4539)
* fix #4538

* clean up

* fix

* fix
2019-03-19 23:35:22 +09:00
syuilo d002f67140 10.98.0 2019-03-19 18:50:09 +09:00
syuilo da3447765b Revert "Remove deepcopy dependency"
This reverts commit cbf5663179.
2019-03-19 18:47:14 +09:00
syuilo cbf5663179 Remove deepcopy dependency 2019-03-19 17:59:44 +09:00
syuilo b217fba235 Fix #4531 2019-03-19 17:47:40 +09:00
tamaina 7f7e6d5aba 「メッセージ」「トーク」「ダイレクト投稿」( Fix #2748 ) (#4515)
* 「メッセージ」「トーク」「ダイレクト投稿」
トーク: 一対一のチャット機能・画面
メッセージ: トークでやり取りする発言
ダイレクト投稿: 自分向けのダイレクト投稿が一覧されるTL

* Fix display of messaging

* ✌️

* Update ja-JP.yml
2019-03-19 17:45:46 +09:00
tamaina 87c5a9d9a6 Fix #97, Fix #2943 (#4533) 2019-03-19 17:35:50 +09:00
tamaina 8ca1fe3f0a Resolve #1465 (#4532)
* [client] show drive file icon

* 🎨

* exchange icon

* fix

* fuck crlf

* 背景差し戻し

* fix selected color

* 🎨

* fix

* pointer-events none

* fix bug

* ✌️

* Clean up

* ✌️

* Clean up

* Fix
2019-03-19 17:26:07 +09:00
MeiMei 763ae8f1a6 Change Twemoji CDN (#4527) 2019-03-18 22:02:45 +09:00
MeiMei c65256d02b Fix custom emoji validation (#4528) 2019-03-18 20:02:25 +09:00
syuilo bd2ac515d1 🎨 2019-03-18 17:37:29 +09:00
MeiMei 681f372889 proxy cropper url (#4525) 2019-03-18 16:41:29 +09:00
MeiMei c2eec272e6 Content-Disposition in ObjectStrage (#4524)
* Content-Disposition in ObjectStrage

* encode filename
2019-03-18 15:23:45 +09:00
syuilo bd720491a9 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-18 13:30:13 +09:00
syuilo a408226509 Refactor 2019-03-18 13:29:58 +09:00
syuilo c015e99e6e Update black.json5 2019-03-18 13:25:56 +09:00
tamaina de47a17be7 Improve drive downloading (#4523)
* Improve drive file downloading

* fix name

* wtf crlf

* semicolon
2019-03-18 13:20:49 +09:00
syuilo d38fc490ad 10.97.2 2019-03-18 02:22:28 +09:00
syuilo 662167e792 Remove unused import 2019-03-18 02:21:29 +09:00
syuilo 36c91f03d9 10.97.1 2019-03-18 01:59:59 +09:00
syuilo 33ccee26b5 Update black.json5 2019-03-18 01:29:58 +09:00
syuilo ed5cb991e3 10.97.0 2019-03-18 01:11:18 +09:00
syuilo bea84ec2bf New Crowdin translations (#4509)
* New translations ja-JP.yml (Polish)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (English)
2019-03-18 01:10:03 +09:00
syuilo 08c176e549 不明なリアクションのフォールバックに star を使うようにするオプション 2019-03-18 01:03:35 +09:00
syuilo 810ed50976 Update black.json5 2019-03-18 00:41:30 +09:00
MeiMei 2684541693 Custom reaction (#4517)
* Custom reaction

* increase limit of reactions/delete

* リアクションの場合は OS標準の絵文字を使用 を迂回する

* カスタムリアクションを無効にする設定

* fix

* disableCustomReaction --> enableEmojiReaction

* Avoid MFM rendering

* 🎨

* 🎨

* Auto accept

* custom emoji reaction

* Improve usability

* Extract emojiRegex

* Fix

* Clean up

* 🎨

* 🎨

* toDbReaction で reaction は必須に

あとフォールバックは like に

* Clean up

* Make required

* https://github.com/syuilo/misskey/pull/4517/commits/3eb08748feeaab9ee5c5b505c870f97d7edbeb0d#r266241728

* Refactor

* Allow null
2019-03-18 00:03:57 +09:00
syuilo a5b12bac54 Change default dark theme 2019-03-17 20:48:55 +09:00
syuilo fea1b06e43 Update black.json5 2019-03-17 20:46:14 +09:00
syuilo 182ca5d434 10.96.0 2019-03-16 21:30:31 +09:00
syuilo facde9a75d Increase chart limit 2019-03-16 21:02:17 +09:00
syuilo 41385640b9 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-16 18:17:15 +09:00
syuilo 7bad9db32e Update interval 2019-03-16 18:16:28 +09:00
MeiMei af66f0a497 Fix #3504 (#4513) 2019-03-16 18:00:23 +09:00
MeiMei 95e1b80f41 updatePersonを試行した時点でもlastFetchedAtを更新する (#4510) 2019-03-16 09:55:19 +09:00
MeiMei 556e2eba95 Resolve #1727 (#4512) 2019-03-16 09:54:40 +09:00
syuilo efe530cb17 Update CONTRIBUTING.md 2019-03-16 02:53:35 +09:00
syuilo 34e7c99283 Increase display instances limit 2019-03-16 01:36:10 +09:00
syuilo 4157ea8bc3 Add icons 🎨 2019-03-16 01:34:21 +09:00
syuilo 550517bbf3 Resolve #4506 2019-03-16 01:20:13 +09:00
syuilo eb910cd8a1 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-16 01:08:34 +09:00
syuilo 75131c4e8a Fix bug 2019-03-16 01:08:26 +09:00
MeiMei ee29ab95be Fix users/search (#4505) 2019-03-15 22:22:59 +09:00
syuilo e97951fc51 10.95.0 2019-03-15 13:54:08 +09:00
syuilo dfabdef60f Resolve #4501 2019-03-15 13:51:23 +09:00
syuilo 5a87763193 New Crowdin translations (#4481)
* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)

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

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (English)
2019-03-15 13:48:46 +09:00
syuilo 6bb90f56fa ジョブを一覧できるように 2019-03-15 13:48:17 +09:00
syuilo c883ae1350 🎨 2019-03-15 13:14:50 +09:00
syuilo 09e25e6a02 Better queue chart 2019-03-15 13:09:19 +09:00
syuilo bf5d43054b Fix bug 2019-03-15 13:09:05 +09:00
MeiMei 63b3c65691 ファビコンが保存されないのを修正 (#4500)
* Fix ファビコン保存されない

* Fix meta
2019-03-15 12:40:10 +09:00
syuilo f193da7f67 🎨 2019-03-15 02:17:10 +09:00
syuilo 40f38c2c0a Improve queue page 2019-03-15 01:56:40 +09:00
syuilo db439ef804 🎨 2019-03-15 01:43:11 +09:00
MeiMei 56eb896a03 Accept Article object (#4499) 2019-03-15 00:23:24 +09:00
Acid Chicken (硫酸鶏) 68d43e43b6 Fix hashtag style 2019-03-15 00:03:24 +09:00
Acid Chicken (硫酸鶏) c60517e49a Follow #3676 2019-03-14 22:18:31 +09:00
Acid Chicken (硫酸鶏) 3f59d261f2 Follow #3676 2019-03-14 22:18:10 +09:00
Acid Chicken (硫酸鶏) 4068d220e5 Follow #3676 2019-03-14 22:17:26 +09:00
syuilo 18968e7208 Fix bug 2019-03-14 21:51:33 +09:00
Acid Chicken (硫酸鶏) 38656103c0 Add angle bracket covered url syntax to mfm (#4483)
* Add angle bracket covered url syntax to mfm

* Fix path

* Fix match

* Fix index
2019-03-14 21:23:15 +09:00
syuilo 0f65b1bcc5 10.94.0 2019-03-14 16:40:06 +09:00
syuilo a628821834 Improve readability 2019-03-14 16:35:07 +09:00
syuilo 6ceff60c1e Faviconを可変にするなど 2019-03-14 16:30:51 +09:00
syuilo d762a6ce58 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-14 15:19:09 +09:00
syuilo 75a8037a46 Fix #4489 2019-03-14 15:19:02 +09:00
MeiMei 1179920790 unFollowAll on suspend (#4490)
* unFollowAll on suspend

* use services

* silent
2019-03-14 15:16:07 +09:00
Acid Chicken (硫酸鶏) b323a160e3 Follow #3676 2019-03-14 01:20:25 +09:00
syuilo b157e9535e Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-13 23:27:21 +09:00
syuilo 7668475bd6 🎨 2019-03-13 23:27:11 +09:00
syuilo 8bda2a1fb7 Refactor 2019-03-13 23:04:17 +09:00
Acid Chicken (硫酸鶏) b092086b5b Add languages (#4452) 2019-03-13 14:22:55 +09:00
MeiMei 69a0d9034f Fix #4486 (#4487) 2019-03-13 11:21:16 +09:00
syuilo f5be8fd313 10.93.1 2019-03-13 09:34:14 +09:00
syuilo 7f835d7f76 🎨 2019-03-13 09:32:10 +09:00
syuilo ddbb7c5993 🎨 2019-03-13 09:26:38 +09:00
syuilo 00a3fe39e8 Update dependencies 🚀 2019-03-13 09:19:48 +09:00
syuilo 7537fb88d4 Refactor 2019-03-13 00:14:44 +09:00
syuilo a81bc71a1e Resolve #4454 2019-03-13 00:13:56 +09:00
MeiMei 0a0aa0e2db Fix #4484 (#4485)
* Fix #4484

* import order
2019-03-12 23:38:11 +09:00
syuilo c56b94ae96 Add type annotation to avoid type error 2019-03-12 23:31:18 +09:00
syuilo e90712706d Add icons 🎨 2019-03-12 23:30:44 +09:00
syuilo eb0623331f 🎨 2019-03-12 23:14:18 +09:00
MeiMei d15bd59109 Fix queue charts (#4482) 2019-03-12 21:53:36 +09:00
syuilo 60e0b19372 10.93.0 2019-03-12 17:24:42 +09:00
syuilo 922eb937ff 🎨 2019-03-12 17:20:40 +09:00
syuilo 87573284f1 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-12 17:11:33 +09:00
syuilo a91c585f55 Add queue chart 2019-03-12 17:11:06 +09:00
syuilo 953ea21d5e New Crowdin translations (#4479)
* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)
2019-03-12 16:43:13 +09:00
syuilo ecb00968bc Fix bug 2019-03-12 16:42:56 +09:00
syuilo 50ad8adb2d Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-12 13:26:33 +09:00
syuilo 16878caf09 Update doc 2019-03-12 13:26:26 +09:00
syuilo 5bc30c5493 Add log 2019-03-12 13:12:49 +09:00
MeiMei 85d89cf4c4 embedプレイヤーを閉じれるように (#4402) 2019-03-12 13:12:34 +09:00
syuilo db693f598b シェアページを統合 2019-03-12 13:02:16 +09:00
syuilo 0494c770a1 Better share template 2019-03-12 12:59:26 +09:00
syuilo c473b62aed Follow latest Web Share Target specification 2019-03-12 12:55:43 +09:00
syuilo f19ac5320e Remove unnecessary checking 2019-03-12 12:46:01 +09:00
syuilo 612e3aafbc activeなジョブ数のカウント方法を分けた
https://github.com/syuilo/misskey/issues/4470#issuecomment-471827030
2019-03-12 12:31:01 +09:00
syuilo 0e97fec451 Fix typo 2019-03-12 10:46:25 +09:00
syuilo e8c8626ee4 New Crowdin translations (#4469)
* 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 (Korean)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Spanish)

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

* New translations ja-JP.yml (Czech)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Korean)
2019-03-12 10:41:05 +09:00
syuilo d89e0f07f8 Update issue templates 2019-03-12 10:38:30 +09:00
syuilo e7f81a42ce Resolve #4470 2019-03-12 10:35:17 +09:00
Acid Chicken (硫酸鶏) ac614148b8 Update README.md [AUTOGEN] (#4477) 2019-03-12 09:50:42 +09:00
MeiMei 5eb02b4901 Resolve #4458 (#4476) 2019-03-12 09:50:20 +09:00
Acid Chicken (硫酸鶏) 65631525f6 Update README.md [AUTOGEN] (#4474) 2019-03-12 09:49:58 +09:00
syuilo 969435cfe9 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-12 00:34:30 +09:00
syuilo c932f7a25b Resolve #1736 2019-03-12 00:34:19 +09:00
MeiMei 42d164dc57 log failed job (#4472) 2019-03-11 22:45:07 +09:00
syuilo a7e60f80bd Refactor: Extract downloadTextFile function 2019-03-11 20:23:29 +09:00
syuilo 3dd5f313b7 Add icons 🎨 2019-03-11 20:12:44 +09:00
syuilo 883962c393 Add icon 🎨 2019-03-11 20:07:27 +09:00
syuilo 8a30ff1c76 🌎 A federated blogging platform 🚀 2019-03-11 20:03:02 +09:00
syuilo e47c354916 Refactor 2019-03-11 19:57:50 +09:00
syuilo 496f42805d リストをインポートしたときにプロキシアカウントがフォローするように修正 2019-03-11 19:51:58 +09:00
syuilo c3d34bda37 Resolve #4259 2019-03-11 19:43:58 +09:00
syuilo bb6ede2b8f 10.92.4 2019-03-11 13:59:27 +09:00
syuilo 822400a1ba New Crowdin translations (#4461)
* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Spanish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (English)

* 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 (Korean)

* New translations ja-JP.yml (Polish)

* 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 (Czech)
2019-03-11 13:57:21 +09:00
syuilo e3e08843f1 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-11 09:59:14 +09:00
syuilo ce0d4f77fa リストのエクスポートをできるように
#4259
2019-03-11 09:59:07 +09:00
Acid Chicken (硫酸鶏) 94fdb4e974 Update README.md [AUTOGEN] (#4467) 2019-03-11 08:13:02 +09:00
MeiMei 4d425fc8a4 Use proxy instead of weserv for url-preview images (#4466) 2019-03-11 01:03:09 +09:00
MeiMei c6cdfa2f5a Ignore 4xx references in AP (#4463)
* Ignore 4xx references

* remove unnecessary comment
2019-03-10 22:27:25 +09:00
syuilo 0fff2e4f16 Remove debug code 2019-03-10 19:20:25 +09:00
syuilo 80a2172715 Resolve #4462 2019-03-10 19:16:33 +09:00
syuilo 5a0a297634 Improve redis config 2019-03-09 23:44:54 +09:00
syuilo 948a133b7b Fix log 2019-03-09 18:15:44 +09:00
syuilo 2ee826c958 10.92.3 2019-03-09 10:21:45 +09:00
syuilo 539409faf8 Better logs 2019-03-09 10:18:59 +09:00
syuilo 606e46e4d7 Make info 2019-03-09 10:10:24 +09:00
syuilo a179cfd69a Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-09 10:09:12 +09:00
syuilo d8379253d4 Rename 2019-03-09 10:09:04 +09:00
MeiMei c3344fbd68 To retry AP deliver queue (#4457) 2019-03-09 08:57:55 +09:00
syuilo 4cebd6e84a Increase job attempts limit a little 2019-03-08 21:43:17 +09:00
syuilo 90fbf9dbb0 Add missing semicolon 2019-03-08 21:38:23 +09:00
syuilo d365b9f634 Fix bug 2019-03-08 21:30:12 +09:00
syuilo a2f06acaa4 10.92.2 2019-03-08 21:00:35 +09:00
syuilo 8c90cbcbfb Disable lifo 2019-03-08 20:58:01 +09:00
syuilo a4a47772dc New Crowdin translations (#4447)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

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

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

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

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

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Polish)
2019-03-08 20:55:36 +09:00
syuilo 5dde1f4602 Update README.md 2019-03-08 20:52:09 +09:00
syuilo 9dc0909eeb Add index 2019-03-08 20:36:42 +09:00
syuilo 0ed2592e41 Resolve #4453 2019-03-08 20:07:29 +09:00
syuilo 76cff98220 Fix bug 2019-03-08 19:45:01 +09:00
syuilo 60604b6f51 🎨 2019-03-08 15:34:34 +09:00
syuilo f410b7aecb 🎨 2019-03-08 15:27:06 +09:00
syuilo 1a61f2cee9 自動更新 2019-03-08 13:10:38 +09:00
syuilo 78a8293520 ジョブの数を一覧できるように 2019-03-08 13:03:38 +09:00
syuilo 03cfb4fc8d 🎨 2019-03-08 13:03:17 +09:00
syuilo 144345a359 Enable lifo job 2019-03-08 05:39:59 +09:00
syuilo fd2c01515e Increase job concurrency 2019-03-08 05:23:13 +09:00
syuilo 219570e08b Update job handlers 2019-03-08 05:22:14 +09:00
syuilo 69df556ff5 Resolve #4448 2019-03-08 04:55:55 +09:00
syuilo 5f4a52574f Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-07 23:43:56 +09:00
syuilo 5a1f6c5839 10.92.1 2019-03-07 23:43:42 +09:00
syuilo 91d0342fe8 New Crowdin translations (#4445)
* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)
2019-03-07 23:41:13 +09:00
syuilo 8cc236daf8 Clean jobs 2019-03-07 23:36:08 +09:00
syuilo d283ec69f7 Refactor 2019-03-07 23:27:38 +09:00
syuilo d1aea7596c Fix import 2019-03-07 23:14:01 +09:00
syuilo c934987b14 Resolve #4444 2019-03-07 23:07:21 +09:00
syuilo 00c9f4a2e5 Update issue templates 2019-03-07 21:41:39 +09:00
syuilo 6605c1d07f New Crowdin translations (#4431)
* New translations ja-JP.yml (Chinese Simplified)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (Korean)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)
2019-03-07 21:19:53 +09:00
MeiMei 7325d66c52 Implement Update Question (#4435)
* Update remote votes count

* save updatedAt

* deliver Update

* use renderNote

* use id

* fix typeof
2019-03-07 21:19:32 +09:00
Acid Chicken (硫酸鶏) a485061e22 Update README.md [AUTOGEN] (#4441) 2019-03-07 20:30:41 +09:00
Acid Chicken (硫酸鶏) 1f63f50343 Create robots.txt (#4439)
* Create robots.txt

* Update index.ts
2019-03-07 20:11:04 +09:00
syuilo cd3170dabd Update PULL_REQUEST_TEMPLATE.md 2019-03-07 20:06:36 +09:00
syuilo 841cedc5f8 Update issue templates 2019-03-07 19:56:02 +09:00
dependabot[bot] 7f4882734d Update @types/speakeasy requirement from 2.0.3 to 2.0.4 (#4369)
Updates the requirements on [@types/speakeasy](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/speakeasy) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/speakeasy)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-07 19:41:08 +09:00
dependabot[bot] e7d647d412 Update eslint requirement from 5.12.0 to 5.15.0 (#4394)
Updates the requirements on [eslint](https://github.com/eslint/eslint) to permit the latest version.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v5.12.0...v5.15.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-07 19:40:55 +09:00
dependabot[bot] 913d14a58a Update @types/node requirement from 10.12.24 to 11.10.4 (#4396)
Updates the requirements on [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-07 19:40:41 +09:00
dependabot[bot] 909272ec3d Update @types/koa-router requirement from 7.0.39 to 7.0.40 (#4418)
Updates the requirements on [@types/koa-router](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/koa-router) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/koa-router)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-07 19:40:22 +09:00
dependabot[bot] 7af40ffbbe Update webpack-cli requirement from 3.2.1 to 3.2.3 (#4422)
Updates the requirements on [webpack-cli](https://github.com/webpack/webpack-cli) to permit the latest version.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/v.3.2.1...V.3.2.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-07 19:40:09 +09:00
dependabot[bot] 9df79a3ec9 Update file-type requirement from 10.7.1 to 10.9.0 (#4423)
Updates the requirements on [file-type](https://github.com/sindresorhus/file-type) to permit the latest version.
- [Release notes](https://github.com/sindresorhus/file-type/releases)
- [Commits](https://github.com/sindresorhus/file-type/compare/v10.7.1...v10.9.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-07 19:39:52 +09:00
dependabot[bot] 4f2eee06aa Update bootstrap-vue requirement from 2.0.0-rc.11 to 2.0.0-rc.13 (#4353)
Updates the requirements on [bootstrap-vue](https://github.com/bootstrap-vue/bootstrap-vue) to permit the latest version.
- [Release notes](https://github.com/bootstrap-vue/bootstrap-vue/releases)
- [Changelog](https://github.com/bootstrap-vue/bootstrap-vue/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/bootstrap-vue/bootstrap-vue/compare/v2.0.0-rc.11...v2.0.0-rc.13)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-03-07 19:39:39 +09:00
syuilo 1b9cf76008 Update issue templates 2019-03-07 18:16:49 +09:00
syuilo d035a43ed6 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-07 16:50:41 +09:00
syuilo 95ee9a6e09 Update issue templates 2019-03-07 16:50:05 +09:00
Acid Chicken (硫酸鶏) 02a63cdcb3 Update index.js 2019-03-07 16:43:16 +09:00
syuilo f02125dd47 Resolve #4437 2019-03-07 13:03:46 +09:00
syuilo c11e813146 Fix 2019-03-07 09:35:23 +09:00
syuilo a365849048 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-07 09:31:07 +09:00
syuilo a493c9f769 🎨 2019-03-07 09:30:44 +09:00
Acid Chicken (硫酸鶏) a13f522b2a Update README.md [AUTOGEN] (#4436) 2019-03-07 09:18:57 +09:00
syuilo 1ed70b2e2c 10.92.0 2019-03-06 23:37:53 +09:00
syuilo 86d5a599b7 New Crowdin translations (#4414)
* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Italian)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* 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 (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 (Czech)
2019-03-06 23:30:39 +09:00
Acid Chicken (硫酸鶏) c226fc8d63 Make building locales better (#4427) 2019-03-06 23:28:50 +09:00
syuilo bbf4e1c413 Add fallback for broken db 2019-03-06 23:23:50 +09:00
syuilo a24a20a83d Clean up 2019-03-06 23:19:15 +09:00
Acid Chicken (硫酸鶏) 725600da8f Enhance poll (#4409)
* Start working

* WIP: Enhance poll

* Fix bug

* Use `name` in voting note
refs: https://github.com/syuilo/misskey/issues/4407#issuecomment-469057296

* Fix style

* Refactor
Co-authored-by: MeiMei <30769358+mei23@users.noreply.github.com>

* WIP: Update poll editor

* Fix bug

* Fix bug
refs: https://github.com/syuilo/misskey/pull/4409#discussion_r

* Fix typo

* Better design

* Beautify poll editor

* Fix UI

* Fix bug
refs: https://github.com/syuilo/misskey/pull/4409#discussion_r262217524

* Add debug logging

* Fix bug

* Log deliver

* fix vote

* Update ap/show
refs: https://github.com/syuilo/misskey/pull/4409#issuecomment-469652386

* Update poll view

* Maybe done

* Add tests

* Fix path

* Fix test

* Fix test

* Fix test

* Fix expired check on AP

* Update note.ts

* Squashed commit of the following:

commit d9a4beabf851893b8992a0f4568265eb9d4f0b8e
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 05:16:14 2019 +0900

    tune

commit 83ff421a6e978243f80ba9ec820189bc897e6e3b
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 05:01:14 2019 +0900

    fallback

commit 0b566af973b115ade9e75ea4b8094ee2b329dabc
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 04:40:12 2019 +0900

    Note

commit cc0296dd6127580ac584c40398db3f762a311f8b
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 04:33:58 2019 +0900

    createで送る

* Squashed commit of the following:

commit ae696b1ed12568b27c27367ac5a77035c97c9a1f
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 06:11:17 2019 +0900

    fix

commit b735e354e7a9e64534c4f17d04ecbc65fb735c21
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 06:08:33 2019 +0900

    messge

commit d9a4beabf851893b8992a0f4568265eb9d4f0b8e
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 05:16:14 2019 +0900

    tune

commit 83ff421a6e978243f80ba9ec820189bc897e6e3b
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 05:01:14 2019 +0900

    fallback

commit 0b566af973b115ade9e75ea4b8094ee2b329dabc
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 04:40:12 2019 +0900

    Note

commit cc0296dd6127580ac584c40398db3f762a311f8b
Author: mei23 <m@m544.net>
Date:   Wed Mar 6 04:33:58 2019 +0900

    createで送る

* Fix typo

* Update vote.ts

* Update vote.ts

* Update poll-editor.vue

* Update tslint.json

* Fix layout

* Add note

* Fix bug

* Rename text key

* 投票するときに投稿として扱わないように (#4425)

* wip

* 形式をMastodonと合わせた

* Bye something

* Use - instead of ~

* Redundancy

* Yes!

* Refactor

* Use moment instead of Date

* Fix indent

* Refactor

if (votes.length)
は必要なさそう

* Clean up

* Bye Date

* Clean

* Fix timer is not displayed

* Fix リモートから無期限pollにvoteできない

* Fix vote actor
2019-03-06 22:55:47 +09:00
syuilo f74a32ed9b [Client] Fix bug 2019-03-06 20:17:59 +09:00
Acid Chicken (硫酸鶏) e08e72dd10 Use meta url instead of constant url 2019-03-06 12:31:58 +09:00
Acid Chicken (硫酸鶏) ce02e1e528 Bye on-build-webpack (#4404)
* Update webpack.config.ts

* Update package.json
2019-03-06 09:26:22 +09:00
syuilo 0b27d8a717 Fix #4421 2019-03-06 09:24:16 +09:00
syuilo 2782e7d26f [MFM] Improve hashtag parsing 2019-03-05 22:18:29 +09:00
syuilo 2c83a05e80 [Client] Better transition 2019-03-05 20:45:19 +09:00
syuilo 467f68502a Refactor 2019-03-05 20:32:39 +09:00
syuilo d95b0dee6b Fix #4416 2019-03-05 08:27:50 +09:00
syuilo a1f3323fa5 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-05 08:24:26 +09:00
syuilo 494796a7f0 Fix #4415 2019-03-05 08:24:19 +09:00
MeiMei 94f2c20d35 Fix #4413 (#4417) 2019-03-05 07:56:23 +09:00
Acid Chicken (硫酸鶏) c1deb9438d Update README.md [AUTOGEN] (#4411) 2019-03-04 19:27:53 +09:00
syuilo ea86527c66 Add indexes 2019-03-04 19:26:05 +09:00
syuilo d1a18fe266 Resolve #3220 2019-03-04 14:32:36 +09:00
syuilo 737064da82 Better log 2019-03-04 14:02:42 +09:00
syuilo 606cc85ff5 10.91.2 2019-03-04 09:25:28 +09:00
syuilo dcfc8f1b30 Merge branch 'develop' of https://github.com/syuilo/misskey into develop 2019-03-04 09:23:49 +09:00
syuilo ebe4b84f14 Fix bug 2019-03-04 09:23:45 +09:00
syuilo 699d4897db New Crowdin translations (#4403)
* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (Czech)

* New translations ja-JP.yml (French)

* New translations ja-JP.yml (German)

* 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 (Czech)

* 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)
2019-03-04 09:17:46 +09:00
syuilo fcdfd8d323 Use vue-json-pretty 2019-03-04 09:16:24 +09:00
MeiMei db8625c31a Revert "Improve log view" (#4406)
This reverts commit e8ef8f0004.
2019-03-04 08:55:35 +09:00
syuilo b65f265c55 Update logs 2019-03-03 10:57:17 +09:00
syuilo c55237d09c 10.91.1 2019-03-03 08:49:53 +09:00
syuilo ed698b7b82 New Crowdin translations (#4398)
* 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 (Korean)

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

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)
2019-03-03 08:48:17 +09:00
MeiMei d4ff19f013 Fix SVG detection (#4401)
* Fix SVG detection

* remove unnecessary import
2019-03-03 08:48:02 +09:00
syuilo 972fb8eb40 Hide some components 2019-03-03 08:46:42 +09:00
syuilo 4de75448b6 テーマの切り替えをなめらかに 2019-03-03 08:43:51 +09:00
syuilo e8ef8f0004 Improve log view 2019-03-03 08:35:30 +09:00
syuilo a319b30382 Increase log limit 2019-03-03 08:28:35 +09:00
syuilo 8278616eeb Fix log order 2019-03-03 08:28:12 +09:00
syuilo 771f011506 Better log 2019-03-03 08:27:30 +09:00
syuilo 826865869a Improve usability 2019-03-03 08:23:06 +09:00
syuilo 3c77ae7b62 Improve log api 2019-03-03 08:13:49 +09:00
syuilo 60c30ece10 Better logs 2019-03-03 08:00:39 +09:00
syuilo 76a0d0fee9 Use dot 2019-03-03 07:48:25 +09:00
syuilo d50624f0a0 Better logs 2019-03-03 07:47:58 +09:00
syuilo 4f9b015d1c 10.91.0 2019-03-02 18:56:38 +09:00
syuilo 4f10bd038d Update ja-JP.yml 2019-03-02 18:53:12 +09:00
syuilo 977af0a24d ログをデータベースに保存して管理画面で見れるように 2019-03-02 18:51:59 +09:00
syuilo f3ceb32a7c Change queue db name 2019-03-02 14:32:32 +09:00
syuilo 15da2de256 Add animaition 2019-03-02 14:27:30 +09:00
syuilo 41ae0ccd6f Update dependencies 🚀 2019-03-02 14:25:44 +09:00
Acid Chicken (硫酸鶏) 344532662e Update README.md [AUTOGEN] (#4393) 2019-03-02 08:59:53 +09:00
Acid Chicken (硫酸鶏) 99b365030e Update README.md [AUTOGEN] (#4391) 2019-03-02 08:58:35 +09:00
syuilo 5cc940c08a Fix bug
Fix #4390
2019-03-02 08:13:09 +09:00
syuilo 1d02d9e0fe モバイルのデッキで返信が表示されない問題を修正 2019-03-02 08:06:03 +09:00
syuilo 139523b763 Refactor 2019-03-02 07:57:18 +09:00
syuilo e7c83db9c7 New Crowdin translations (#4381)
* New translations ja-JP.yml (Korean)

* 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 (Korean)

* 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 (Chinese Simplified)

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* 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)

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

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

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

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

* New translations ja-JP.yml (Korean)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (English)

* New translations ja-JP.yml (Polish)
2019-03-01 18:10:00 +09:00
Acid Chicken (硫酸鶏) da47782b77 Update README.md [AUTOGEN] (#4389) 2019-03-01 14:46:48 +09:00
syuilo 4685de88a7 Better log 2019-03-01 14:40:29 +09:00
syuilo 0c28ac4907 Add animation 2019-03-01 14:24:12 +09:00
Acid Chicken (硫酸鶏) ae2d707c68 Update README.md [AUTOGEN] (#4387) 2019-03-01 11:13:07 +09:00
syuilo 00a28193a0 ダークモードの設定をテーマに移動 2019-03-01 11:03:45 +09:00
syuilo ea1818284b クライアントの設定コンポーネントを整理
* デスクトップとモバイルで統一
* いくつかの設定を廃止
2019-03-01 10:42:28 +09:00
syuilo d83efecc94 文字サイズを設定できるように 2019-03-01 08:08:08 +09:00
syuilo 9a9fb37a78 Update compose-notification.ts 2019-02-28 20:57:38 +09:00
987 changed files with 38834 additions and 34294 deletions
+4 -39
View File
@@ -4,14 +4,9 @@ executors:
default:
working_directory: /tmp/workspace
docker:
- image: misskey/ci:latest
- image: circleci/mongo:latest
with-redis:
working_directory: /tmp/workspace
docker:
- image: misskey/ci:latest
- image: circleci/mongo:latest
- image: misskey/ci:v11-node11
- image: circleci/redis:latest
- image: circleci/postgres:latest
docker:
working_directory: /tmp/workspace
docker:
@@ -62,22 +57,10 @@ jobs:
executor:
type: string
default: "default"
without_redis:
type: boolean
default: false
executor: <<parameters.executor>>
steps:
- attach_workspace:
at: /tmp/workspace
- when:
condition: <<parameters.without_redis>>
steps:
- run:
name: Configure
command: |
mv .config/test.yml .config/test_redis.yml
touch .config/test.yml
cat .config/test_redis.yml | while IFS= read line; do if [[ "$line" = '# __REDIS__' ]]; then break; else echo "$line" >> .config/test.yml; fi; done
- run:
name: Test
command: |
@@ -140,32 +123,14 @@ workflows:
branches:
only: master
- test:
name: manual-test-with-redis
executor: with-redis
name: manual-test
requires:
- manual-build
filters:
branches:
ignore: master
- test:
name: auto-test-without-redis
executor: with-redis
requires:
- auto-build
filters:
branches:
only: master
- test:
name: manual-test-with-redis
without_redis: true
requires:
- manual-build
filters:
branches:
ignore: master
- test:
name: auto-test-without-redis
without_redis: true
name: auto-test
requires:
- auto-build
filters:
-2
View File
@@ -6,8 +6,6 @@ mongodb:
db: misskey
user: syuilo
pass: ''
drive:
storage: 'db'
redis:
host: localhost
port: 6379
-2
View File
@@ -6,8 +6,6 @@ mongodb:
db: test-misskey
user: admin
pass: ''
drive:
storage: 'db'
# __REDIS__
redis:
host: localhost
+4
View File
@@ -0,0 +1,4 @@
# db settings
POSTGRES_PASSWORD=example-misskey-pass
POSTGRES_USER=example-misskey-user
POSTGRES_DB=misskey
+59 -61
View File
@@ -1,8 +1,16 @@
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Misskey configuration
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ┌─────┐
#───┘ URL └─────────────────────────────────────────────────────
# Final accessible URL seen by a user.
url: https://example.tld/
# ┌───────────────────────┐
#───┘ Port and TLS settings └───────────────────────────────────
### Port and TLS settings ######################################
#
# Misskey supports two deployment options for public.
#
@@ -30,86 +38,76 @@ url: https://example.tld/
# You need to set Certificate in 'https' section.
# To use option 1, uncomment below line.
# port: 3000 # A port that your Misskey server should listen.
#port: 3000 # A port that your Misskey server should listen.
# To use option 2, uncomment below lines.
# port: 443
#
# https:
# # path for certification
# key: /etc/letsencrypt/live/example.tld/privkey.pem
# cert: /etc/letsencrypt/live/example.tld/fullchain.pem
#port: 443
################################################################
#https:
# # path for certification
# key: /etc/letsencrypt/live/example.tld/privkey.pem
# cert: /etc/letsencrypt/live/example.tld/fullchain.pem
# ┌──────────────────────────┐
#───┘ PostgreSQL configuration └────────────────────────────────
mongodb:
db:
host: localhost
port: 27017
port: 5432
# Database name
db: misskey
# Auth
user: example-misskey-user
pass: example-misskey-pass
drive:
storage: 'db'
# ┌─────────────────────┐
#───┘ Redis configuration └─────────────────────────────────────
# OR
redis:
host: localhost
port: 6379
#pass: example-pass
# storage: 'minio'
# bucket:
# prefix:
# config:
# endPoint:
# port:
# useSSL:
# accessKey:
# secretKey:
# ┌─────────────────────────────┐
#───┘ Elasticsearch configuration └─────────────────────────────
# S3 example
# storage: 'minio'
# bucket: bucket-name
# prefix: files
# config:
# endPoint: s3-us-west-2.amazonaws.com
# region: us-west-2
# useSSL: true
# accessKey: XXX
# secretKey: YYY
# S3 example (with CDN, custom domain)
# storage: 'minio'
# bucket: drive.example.com
# prefix: files
# baseUrl: https://drive.example.com
# config:
# endPoint: s3-us-west-2.amazonaws.com
# region: us-west-2
# useSSL: true
# accessKey: XXX
# secretKey: YYY
# If enabled:
# The first account created is automatically marked as Admin.
autoAdmin: true
#
# Below settings are optional
#
# Redis
#redis:
# host: localhost
# port: 6379
# pass: example-pass
# Elasticsearch
#elasticsearch:
# host: localhost
# port: 9200
# pass: null
# ┌───────────────┐
#───┘ ID generation └───────────────────────────────────────────
# You can select the ID generation method.
# You don't usually need to change this setting, but you can
# change it according to your preferences.
# Available methods:
# aid ... Short, Millisecond accuracy
# meid ... Similar to ObjectID, Millisecond accuracy
# ulid ... Millisecond accuracy
# objectid ... This is left for backward compatibility
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# ID SETTINGS AFTER THAT!
id: 'aid'
# ┌─────────────────────┐
#───┘ Other configuration └─────────────────────────────────────
# If enabled:
# The first account created is automatically marked as Admin.
autoAdmin: true
# Whether disable HSTS
#disableHsts: true
# Clustering
#clusterLimit: 1
# IP address family used for outgoing request (ipv4, ipv6 or dual)
#outgoingAddressFamily: ipv4
-13
View File
@@ -1,13 +0,0 @@
var user = {
user: 'example-misskey-user',
pwd: 'example-misskey-pass',
roles: [
{
role: 'readWrite',
db: 'misskey'
}
]
};
db.createUser(user);
Executable → Regular
+3 -3
View File
@@ -5,8 +5,8 @@
.vscode
Dockerfile
build/
db/
docker-compose.yml
node_modules/
mongo/
redis/
elasticsearch/
node_modules/
redis/
+2 -2
View File
@@ -1,7 +1,7 @@
# PATH OWNERS
/.autogen/ @acid-chicken
/.circleci/ @syuilo @acid-chicken
/.config/ @syuilo @AyaMorisawa @mei23 @acid-chicken
/.config/ @syuilo @AyaMorisawa @mei23 @acid-chicken @rinsuki
# /.config/mongo_initdb_example.js @khws4v1
/.github/ @syuilo @AyaMorisawa @acid-chicken
/.vscode/ @acid-chicken
@@ -12,7 +12,7 @@
# /docs/*.fr.md @BoFFire
# /docs/docker.*.md @khws4v1
/locales/ @syuilo
/src/ @syuilo @AyaMorisawa @mei23 @acid-chicken
/src/ @syuilo @AyaMorisawa @mei23 @acid-chicken @rinsuki
# /src/crypto_key.cc @akihikodaki
# /src/crypto_key.d.ts @akihikodaki
/.dockerignore @syuilo # @khws4v1
+7 -7
View File
@@ -1,30 +1,30 @@
---
name: Bug Report
name: 🐛 Bug Report
about: Create a report to help us improve
title: ''
labels: bug
labels: ⚠️bug?
assignees: ''
---
# Summary
## 💡 Summary
<!-- Tell us what the bug is -->
# Expected Behavior
## 🙂 Expected Behavior
<!--- Tell us what should happen -->
# Actual Behavior
## ☹️ Actual Behavior
<!--- Tell us what happens instead of the expected behavior -->
# Steps to Reproduce
## 📝 Steps to Reproduce
1.
2.
3.
# Environment
## 📌 Environment
<!-- Tell us where on the platform it happens -->
@@ -1,31 +0,0 @@
---
name: Client-side Bug Report
about: Create a report to help us improve
title: ''
labels: bug, client-side
assignees: ''
---
# Summary
<!-- Tell us what the bug is -->
# Expected Behavior
<!--- Tell us what should happen -->
# Actual Behavior
<!--- Tell us what happens instead of the expected behavior -->
# Steps to Reproduce
1.
2.
3.
# Environment
<!-- Tell us where on the platform it happens -->
<!-- e.g. desktop or mobile version, your browser, your OS -->
@@ -1,12 +1,12 @@
---
name: Feature Request
name: Feature Request
about: Suggest an idea for this project
title: ''
labels: feature
labels: ✨Feature
assignees: ''
---
# Summary
## Summary
<!-- Tell us what the suggestion is -->
@@ -1,31 +0,0 @@
---
name: Server-side Bug Report
about: Create a report to help us improve
title: ''
labels: bug, server-side
assignees: ''
---
# Summary
<!-- Tell us what the bug is -->
# Expected Behavior
<!--- Tell us what should happen -->
# Actual Behavior
<!--- Tell us what happens instead of the expected behavior -->
# Steps to Reproduce
1.
2.
3.
# Environment
<!-- Tell us where on the platform it happens -->
<!-- e.g. your Node.js version, your OS -->
@@ -1,12 +0,0 @@
---
name: Client-side Feature Request
about: Suggest an idea for this project
title: ''
labels: client-side, feature
assignees: ''
---
# Summary
<!-- Tell us what the suggestion is -->
@@ -1,12 +0,0 @@
---
name: Server-side Feature Request
about: Suggest an idea for this project
title: ''
labels: feature, server-side
assignees: ''
---
# Summary
<!-- Tell us what the suggestion is -->
+1 -1
View File
@@ -1,4 +1,4 @@
# Summary
## Summary
<!--
-
+19 -6
View File
@@ -1,21 +1,34 @@
# Visual Studio Code
/.vscode
# Intelij-IDEA
/.idea
# Node.js
/node_modules
# yarn
yarn.lock
# config
/.config/*
!/.config/example.yml
!/.config/mongo_initdb_example.js
/.vscode
/node_modules
# misskey
/build
/built
built
/data
/.cache-loader
/db
/elasticsearch
npm-debug.log
*.pem
run.bat
api-docs.json
*.log
/redis
/mongo
/elasticsearch
*.code-workspace
yarn.lock
.DS_Store
/files
ormconfig.json
+1 -1
View File
@@ -1 +1 @@
v11.7.0
v12.1.0
+639
View File
@@ -1,6 +1,645 @@
ChangeLog
=========
If you encounter any problems with updating, please try the following:
1. `npm run clean` or `npm run cleanall`
2. Retry update (Don't forget `npm i`)
Migration
------------------------------
#### 1
```
npm i -g ts-node
```
#### 2
```
npm run migrate
```
How to migrate to v11 from v10
------------------------------
### 移行の注意点
**以下のデータは引き継がれません**
* 通知
* リモートの投稿
* リバーシの対局
### 手順
1. v11をインストールしたい場所に syuilo/misskey をクローン
2. config を設定する
* PostgreSQL(`db`)の設定とは別に、v10からMongoDBの設定をコピペしてくる(例は下にあります)
* `id`の設定を`meid`または`objectid`にする
``` yml
db:
host: localhost
port: 5432
db: misskey
user: x
pass: x
mongodb:
user: x
pass: x
host: localhost
port: 27017
db: misskey
```
3. migration ブランチに切り替え
4. `npm i`
5. `npm run build`
6. `npm run init`
7. `npm run migrate`
8. master ブランチに戻す
9. enjoy
11.18.1 (2019/05/21)
--------------------
### 🐛Fixes
* 11.18.0からフォロー/フォロワーのもっと読み込む機能が作動していない問題を修正
* iOSで投稿フォームに自動フォーカスしない問題を修正
* ダークモードでグループ名がみにくい問題を修正
* ハッシュタグタイムラインを読み込んだ時にプログレスバーが残り続ける問題を修正
* ユーザビリティの修正
11.18.0 (2019/05/21)
--------------------
### ✨Improvements
* デザインの調整
### 🐛Fixes
* 投稿の削除が連合しない問題を修正
11.17.1 (2019/05/20)
--------------------
### 🐛Fixes
* トークの通知インジケーターが点灯し続ける問題を修正
* ユーザーグループの読み込みでエラーになることがある問題を修正
11.17.0 (2019/05/19)
--------------------
### 注意
このアップデートを適用した後、プロセスを起動(もしくは再起動)する前に[マイグレーション](#migration)の手順を実行してください
### ✨Improvements
* ユーザーグループを招待制に
### 🐛Fixes
* フォロー申請が表示されない問題を修正
* トークの通知インジケーターが点灯し続ける問題を修正
* 自分を自分のグループから削除できる問題を修正
* 新しいタブでグループトークを開くことができない問題を修正
11.16.1 (2019/05/19)
--------------------
### 🐛Fixes
* Dockerで起動できない問題を修正
11.16.0 (2019/05/19)
--------------------
### 注意
このアップデートを適用した後、プロセスを起動(もしくは再起動)する前に[マイグレーション](#migration)の手順を実行してください
### ✨Improvements
* ユーザーグループ機能を追加
* ページに「いいね」できるように
* UIの改善
### 🐛Fixes
* トークを読み込むときに最大数指定できなかった問題を修正
11.15.0 (2019/05/16)
--------------------
### ✨Improvements
* 管理画面でreCAPTCHAのプレビューを表示するように
### 🐛Fixes
* オブジェクトストレージのリージョンの設定が反映されない問題を修正
11.14.0 (2019/05/16)
--------------------
### 注意
このバージョンからオブジェクトストレージの設定は設定ファイルではなく管理画面から行うようになりました。
オブジェクトストレージを使用している場合、アップデートした後管理画面にアクセスしオブジェクトストレージの設定を再度行ってください。
### ✨Improvements
* 特定のユーザーのファイルをすべて削除できるように
* インスタンスの設定画面を整理
### 🐛Fixes
* GIF画像のサムネイルが生成されないのを修正
* 管理画面の「ログ」で複数の除外条件を設定できない問題を修正
11.13.0 (2019/05/14)
--------------------
### 注意
このアップデートを適用した後、プロセスを起動(もしくは再起動)する前に[マイグレーション](#migration)の手順を実行してください
### ✨Improvements
* 利用規約URL、リポジトリURL、フィードバックURLを設定できるように
* 特定のインスタンスのファイルをすべて削除できるように
* _blankで外部リンクされる可能性がある箇所にnoopenerを追加
* ユーザーや外部インスタンスが生成するリンクにnofollowを追加
* リモートのユーザーページやノートページにnoindexを追加
* 自分のユーザーメニューにはミュートなどを表示しないように
* デザインの調整
### 🐛Fixes
* インスタンスブロックを設定できない問題を修正
* ピン留め投稿の表示順がおかしい問題を修正
* 設定の「アップデートを確認」でメッセージが正しく表示されない問題を修正
* Firefoxで自分のメニューが開けない問題を修正
* Welcomeページのタグクラウドが動かない問題を修正
11.12.0 (2019/05/10)
--------------------
### 注意
このアップデートを適用した後、プロセスを起動(もしくは再起動)する前に[マイグレーション](#migration)の手順を実行してください
### ✨ Improvements
* インスタンス運営者がおすすめアカウントを設定できるように
* MisskeyPagesでNAME環境変数がNULLにならないように
* MisskeyPagesにNULL環境変数を追加
* MisskeyPagesで変数を並べ替えられるように
* MisskeyPagesのテキストのリスト内で変数埋め込みできるように
* 自分の指定した投稿のRenoteを全て解除するAPIを追加
### 🐛Fixes
* Noteをpull取得した時にhost名がvalidateされていない問題を修正
* みつけるで人気のタグが表示されない問題を修正
### その他
* アカウントのisVerifiedフラグを廃止
11.11.2 (2019/05/07)
--------------------
### 🐛Fixes
* IPv4 onlyホストからDualstackホストにAP deliverできない問題を修正
* ストリーミングに接続するまでラグがある問題を修正
* 2段階認証のコードが0から始まる時正しく入力できない問題を修正
* ユーザーの更新日時が新しい順で更新日時がnullのユーザーが先頭に来る問題を修正
* 値選択時の問題を修正
* リバーシでマップの変更が反映されない問題を修正
* リバーシで対局終了直後に盤面を巻き戻してもすぐ最終ターンまでリセットされる問題を修正
11.11.1 (2019/05/05)
--------------------
### 🐛Fixes
* MisskeyPagesのリストから選択関数が使えない問題を修正
11.11.0 (2019/05/05)
--------------------
### ✨ Improvements
* MisskeyPagesにリストから選択関数を追加
* MisskeyPagesに確率を指定できるテキストランダム選択関数を追加
* 外部サービス連携ログインリンクにアイコン追加
### 🐛Fixes
* MisskeyPagesでifを入れ子にできなくなっていた問題を修正
* MisskeyPagesで数値入力を作成するとテキスト入力になる問題を修正
* 外部サービス連携に関する問題を修正
11.10.1 (2019/05/04)
--------------------
### 🐛Fixes
* MisskeyPagesでページブロックを削除できなくなっていた問題を修正
### その他
* Node.js v12対応
11.10.0 (2019/05/03)
--------------------
### 注意
このアップデートを適用した後、プロセスを起動(もしくは再起動)する前に[マイグレーション](#migration)の手順を実行してください
### ✨ Improvements
* MisskeyPagesに割った余りを求める関数を追加
* Mastodon v2.8.0 のフォローリストをインポートできるように
* エクスポートリクエストに失敗したらエラーを表示するように
* エクスポートファイルでは同一ハッシュチェックをしないように
### 🐛Fixes
* 2段階認証を設定するとログインできなくなる問題を修正
* ファイルをアップロードできないことがある問題を修正
* リモートファイルをキャッシュしない設定だとサムネイル時にオリジナル画像が表示されない問題を修正
* 外部サービス連携の不具合を修正
11.9.0 (2019/05/02)
-------------------
### ✨ Improvements
* MisskeyPagesで編集時にページブロックをドラッグで並べ替えられるように
* MisskeyPagesにカウンターボタンブロックを追加
11.8.1 (2019/05/02)
-------------------
### 🐛Fixes
* リモートファイルをキャッシュしないオプション有効時にファイルが作成できない問題を修正
11.8.0-2 (2019/05/01)
-------------------
* 11.8.0 のリリース内容が 11.7.0 と同一だったのを修正
11.8.0 (2019/05/01)
-------------------
### ✨ Improvements
* MisskeyPagesで関数を作成できるように
* MisskeyPagesでソースを表示できるように
* MisskeyPagesにシードを与えるランダム関数を追加
* MisskeyPagesに複数行テキストをテキストのリストに変換する関数を追加
### 🐛Fixes
* APIドキュメントが見れなくなっていたのを修正
* mention (あなた宛て) streaming にミュートが効かない問題を修正
* デザインの調整
11.7.0 (2019/04/30)
-------------------
### ✨ Improvements
* MisskeyPagesに ifブロック を追加
* MisskeyPagesに テキストエリア を追加
* MisskeyPagesに 複数行テキスト入力 を追加
* MisskeyPagesに 投稿フォーム を追加
* MisskeyPagesに 変換系関数 を追加
* MisskeyPagesに 環境変数 URL を追加
* MisskeyPagesでボタンやスイッチなどのテキストに変数使えるように
### 🐛Fixes
* OGPのサイト名を修正
* デザインの調整
11.6.0 (2019/04/29)
-------------------
### ✨ Improvements
* AiScriptにいくつかの文字列操作関数を追加
* ページ編集画面にページへのリンクを表示するように
### 🐛Fixes
* MisskeyPagesで数値入力が文字列として扱われる問題を修正
* デザインの調整
11.5.1 (2019/04/29)
-------------------
### 🐛Fixes
* MisskeyPagesで環境変数を別の変数内で使えない問題を修正
* MisskeyPagesで値が0の変数が表示されない問題を修正
11.5.0 (2019/04/29)
-------------------
### 注意
このアップデートを適用した後、プロセスを起動(もしくは再起動)する前に[マイグレーション](migration)の手順を実行してください
### New features
#### MisskeyPages
ページ(記事)を作成できるように。
* 後から何度でも編集できる
* アイキャッチを設定できる
* フォントを設定できる
* 画像を好きな位置に挿入できる
* URLを決められる
* タイトルを設定できる
* 見出しを設定できる
* ページの要約を設定できる(URLプレビュー時などに便利)
* 変数や式(aka AiScript)を使用して動的なページも作れる
* 目次自動生成(coming soon)
ページを気に入ったら「いいね」しよう (coming soon)
### ✨ Improvements
* APIコンソールでパラメータテンプレートを表示するように
### 🐛Fixes
* おすすめユーザーに自分自身が含まれる問題を修正
* ユーザーサジェストで表示名が変わらない問題を修正
11.4.0 (2019/04/25)
-------------------
### ✨ Improvements
* 検索でローカルの投稿のみに絞れるように
* 検索で特定のインスタンスの投稿のみに絞れるように
* 検索で特定のユーザーの投稿のみに絞れるように
### 🐛Fixes
* 投稿が増殖する問題を修正
* ストリームで過去の投稿が流れてくる問題を修正
* モバイル版のユーザーページで遷移してもユーザー名が変わらない問題を修正
* お知らせを切り替えても内容が変わらない問題を修正
11.3.1 (2019/04/24)
-------------------
### 🐛Fixes
* Webからファイルがアップロードできない問題を修正
11.3.0 (2019/04/24)
-------------------
### ✨ Improvements
* お知らせにMFMを使えるように
* お知らせに画像を添付できるように
### 🐛Fixes
* 投稿のタグ検索APIで大文字小文字が区別されていたのを修正
* 公開範囲がホームの投稿がグローバルTLに流れる問題を修正
* モバイルビューの投稿詳細にて acct が長いとアイコンが圧迫面接される問題を修正
11.2.2 (2019/04/22)
-------------------
### 🐛Fixes
* 2段階認証を有効にするとログインできない問題を修正
* リモートユーザーの修復処理が自動的に実行されない問題を修正
* リモートユーザー情報が更新されない問題を修正
11.2.1 (2019/04/21)
-------------------
### 🐛Fixes
* MEIDが25桁になっているのを修正
* リモートユーザー情報が更新されない問題を修正
11.2.0 (2019/04/18)
-------------------
### ✨ Improvements
* 検索で日付(日時)を入力するとタイムラインをその時点まで遡るように
* APIコンソールでエンドポイントをサジェストするように
* モバイル版でドライブのメニューを使いやすく
* サイレンス時に確認を表示するように
* ユーザーメニューでブロックなどの操作を行う時に確認するように
### 🐛Fixes
* アプリケーション連携画面でパーミッションが表示されない問題を修正
* アンケートウィジットでもMFMを使用するように
* フォローしてないユーザーのホーム投稿がSTLに流れてくる問題を修正
* モバイル版でウィジェットを設定できない問題を修正
* スプラッシュがクリックに反応するように
11.1.6 (2019/04/18)
-------------------
### 🐛Fixes
* 未認知ユーザーからActivityが飛んできた場合に処理できない問題を修正
* その投稿を見たのにも関わらずメンションインジケーターが点灯し続ける問題を修正
* ハッシュタグの判定を改善
* サーバーのエラーハンドリングを改善
11.1.5 (2019/04/17)
-------------------
### 🐛Fixes
* ユーザー名に含まれているカスタム絵文字が表示されないことがある問題を修正
* 壁紙の設定ができない問題を修正
* デザインの調整
11.1.4 (2019/04/17)
-------------------
### 🐛Fixes
* タイムライン取得時に削除されたファイルを添付している投稿が含まれているとサーバーでエラーになる問題を修正
* 管理画面のインスタンスメニューで変更前の設定が読み込まれないことがある問題を修正
* 猫ではないのに猫のままで表示される問題を修正
* admin/driveのアイコンがずれてる問題を修正
* チャートで大きな数値を扱えない問題を修正
* UIの修正
11.1.3 (2019/04/16)
-------------------
### 🐛Fixes
* アプリからAPIにリクエストするときにランダムなユーザーがリクエストしたことになる問題を修正
11.1.2 (2019/04/15)
-------------------
### 🐛Fixes
* 画像描画の依存関係を変更
* リモートユーザーのファイルを削除するときに古い方からではなく新しい方から削除されるのを修正
* リアクションしてないのにリアクションしたことになる問題を修正
* APIドキュメントの修正
11.1.1 (2019/04/15)
-------------------
### 🐛Fixes
* Metaタグの application-name を Misskey で固定するように修正
* トークメッセージが既読にならない問題を修正
* デフォルトでHTLを表示するように
11.1.0 (2019/04/15)
-------------------
### ✨ Improvements
* アイコン未設定時にランダムな画像を表示するように
* 管理者やモデレーターはレートリミット無効に
### 🐛Fixes
* メンションの「あなた」インジケーターが表示されない問題を修正
* ブロックAPIでエラーが発生する問題を修正
* プッシュ通知の購読に失敗する問題を修正
11.0.3 (2019/04/15)
-------------------
### 🐛Fixes
* ハッシュタグ検索APIが動作しない問題を修正
* モデレーターなのにアカウントメニューに「管理」が表示されない問題を修正
* プッシュ通知の購読に失敗する問題を修正
* ユーザー取得APIでユーザーを指定しない場合エラーになる問題を修正
11.0.2 (2019/04/15)
-------------------
### 🐛Fixes
* アプリが作成できない問題を修正
* 「ハイライト」が表示されない問題を修正
* リモートの投稿に添付されている画像が小さい問題を修正
* モバイル版でリストの名前が表示されない問題を修正
* APIドキュメントにパーミッション一覧を追加
11.0.1 (2019/04/15)
-------------------
### ✨ Improvements
* 不要な依存関係を削除
11.0.0 daybreak (2019/04/14)
----------------------------
### ✨ Improvements
* **データベースがMongoDBからPostgreSQLに変更されました**
* **Redisが必須に**
* アカウントを完全に削除できるように
* 投稿フォームで添付ファイルの閲覧注意を確認/設定できるように
* ミュート/ブロック時にそのユーザーの投稿のウォッチをすべて解除するように
### 🐛Fixes
* フォロー申請数が実際より1すくなくなる問題を修正
* リストからアカウント削除したユーザーを削除できない問題を修正
* リストTLでフォローしていないユーザーの非公開投稿が流れる問題を修正
* リストTLでダイレクト投稿が流れない問題を修正
* ミュートしているユーザーの投稿がタイムラインに流れてくることがある問題を修正
### APIの破壊的変更
* v10時点で deprecated だったパラメータなどを削除
* ユーザーリストの title が name に
* リバーシの対局の`settings`プロパティがなくなり、その中にあったプロパティがすべて上の階層に
* 例えば`game.settings.map`は`game.map`になる
### 既知の問題
* ユーザー認証無しでのアプリが作成できない
* 依存ライブラリの問題と思わるため、対応が難しい
### Migration
coming soon...
10.100.0
----------
* ユーザーリストでフォローボタンを表示するように
* ドライブのファイルのサムネイルを修正
* 投稿ウィジットでローカルのみの公開範囲で投稿できない問題を修正
* TLを遡った時に抜けがある時がある問題を修正
* ユーザータイムラインが投稿日時順ではなくなっているのを修正
* 10.99.0 でチャートのレンダリングがおかしい問題を修正
10.99.0
----------
* manifest.json にインスタンス名を反映させるように
* Metaに投稿やユーザーのIDを設定するように
* 設定でポートが指定されていない場合、環境変数を参照するように
* フォローインポートで途中にエラーになるユーザーがいると途中で終了してしまう問題を修正
* フォローインポートで自分が含まれていた場合自分をフォローしてしまう問題を修正
* ServiceWorkerの設定がUIで有効にならない問題を修正
* ユーザー一覧でのユーザーの自己紹介が複数行になることがある問題を修正
* フォローインポートでAPI limitに達していても正常にリクエストされたように表示されてしまう問題を修正
* DBに保存されたrepository urlを変更する方法がない問題を修正
* デスクトップDeckだとviaが投稿内に2箇所表示される問題を修正
* デザインの調整
* 依存関係の更新
* ローカリゼーション
10.98.3
----------
* リアクションのカスタム絵文字の情報がNoteに添付されない問題を修正
* フォルダーの移動をするとき親フォルダーに自分自身を指定できてしまう問題を修正
* デザインの調整
10.98.2
----------
* 他のインスタンスから添付画像が見れない問題を修正
10.98.1
----------
* ドライブのファイルのサムネイルが表示されない問題を修正
* APでカスタム絵文字を送る時に常にimage/pngで送っている問題を修正
* いくらいじってもページリロードするとmisskeyのテーマがdark(future)になっちゃう問題を修正
10.98.0
----------
* ドライブのファイルダウンロード時に元のファイル名を尊重するように
* ドライブで画像以外のファイルを分かりやすく表示するように
* TwemojiのCDNを変更
* モバイルで通知の設定がない問題を修正
* デザインの調整
10.97.2
----------
* ビルド時に警告が出ないように修正
10.97.1
----------
* デザインの調整
10.97.0
----------
* リアクションに絵文字やカスタム絵文字を使えるように
* 不明なリアクションのフォールバックに star を使えるように
* デザインの調整
10.96.0
----------
* 連合ユーザーの投稿に対してActivityPubオブジェクトを要求されたら元のインスタンスにリダイレクトするように
* updatePersonを試行した時点でもlastFetchedAtを更新するように
* 管理画面でリモートインスタンスの登録日時を表示
* ユーザーサジェストが機能しなくなっていた問題を修正
* 最近使ったハッシュタグ表示が機能していない問題を修正
* バグ修正
* デザインの調整
10.95.0
----------
* ジョブを一覧できるように
* MFMでURLを明示する構文の追加
* Articleタイプのアクティビティを受け入れるように
* 凍結されたユーザーをサジェストしないように
* ファビコンが保存されないのを修正
* キューのジョブクリアの動作を修正
* デザインの調整
10.94.0
----------
* Faviconを設定できるように
* アカウントを凍結したときすべてのフォローを解除するように
* シェアページが機能していない問題を修正
* インスタンスブロックをしていてもRenote等すると取得されてしまう問題を修正
* デザインの調整
10.93.1
----------
* データのエクスポートとインポートの動作を修正
* デザインの調整
10.93.0
----------
* フォローリストをインポートできるように
* embedプレイヤーを閉じれるように
* リストをインポートしたときにプロキシアカウントがフォローするように修正
* Web Share Targetの動作を修正
* おすすめアンケートのチョイスを修正
* デザインの調整
10.92.4
----------
* リストのエクスポートをできるように
* ジョブキューウィジェットを追加
* URLプレビューのサムネイルが表示されないことがある問題を修正
10.92.3
----------
* 管理画面の各種ジョブ数がおかしい問題を修正
* ジョブキューの動作を調整
10.92.2
----------
* 管理画面で各種ジョブ数を一覧できるように
* ジョブキューの動作を修正
* notes/children が遅い問題を修正
10.92.1
----------
* アンケートの結果をリモートと同期するように
* ジョブキューを有効に
* 投稿の返信一覧に引用Renoteも含めるように
* robots.txt追加
* デザインの調整
10.92.0
----------
* Mastodonのアンケートに対応
* 複数回答できるアンケートを作成できるように
* アンケートに期限を設定できるように
* 絵文字ピッカーを改良
* ハッシュタグの判定を改善
* デッキのタグTLで別のタグをクリックしてもTLが変わらない問題を修正
* ユーザーサジェストで表示名が変わらない問題を修正
* UIのバグ修正
* デザインの調整
* など
10.91.2
----------
* 10.91.1 で追加した依存関係にXSS脆弱性があったので他のパッケージに差し替え
* 初期アクセスでテーマが正しく設定されない問題を修正
10.91.1
----------
* ログビューを強化
* テーマの切り替えをなめらかに
* SVGの判定を修正
10.91.0
----------
* ログを管理画面で見れるように
* 文字サイズを設定できるように
* 返信が表示されない問題を修正
* ユーザーページでユーザーを切り替えても前の人の情報が残る問題を修正
* デザインの調整
10.90.4
----------
* url-previewでembedプレイヤー展開をオプトインにするように
+150 -1
View File
@@ -46,7 +46,40 @@ Convert な(na) to にゃ(nya)
Revert Nyaize
## Code style
### Don't use `export default`
### セミコロンを省略しない
ASI Hazardを避けるためでもある
### 中括弧を省略しない
Bad:
``` ts
if (foo)
bar;
else
baz;
```
Good:
``` ts
if (foo) {
bar;
} else {
baz;
}
```
ただし**`if`が一行**の時だけは省略しても良い
Good:
``` ts
if (foo) bar;
```
### `export default`を使わない
インテリセンスと相性が悪かったりするため
参考:
* https://gfx.hatenablog.com/entry/2017/11/24/135343
* https://basarat.gitbooks.io/typescript/docs/tips/defaultIsBad.html
Bad:
``` ts
export default function(foo: string): string {
@@ -72,3 +105,119 @@ src ... Source code
test ... Test code
```
## Notes
### placeholder
SQLをクエリビルダで組み立てる際、使用するプレースホルダは重複してはならない
例えば
``` ts
query.andWhere(new Brackets(qb => {
for (const type of ps.fileType) {
qb.orWhere(`:type = ANY(note.attachedFileTypes)`, { type: type });
}
}));
```
と書くと、ループ中で`type`というプレースホルダが複数回使われてしまいおかしくなる
だから次のようにする必要がある
```ts
query.andWhere(new Brackets(qb => {
for (const type of ps.fileType) {
const i = ps.fileType.indexOf(type);
qb.orWhere(`:type${i} = ANY(note.attachedFileTypes)`, { [`type${i}`]: type });
}
}));
```
### Not `null` in TypeORM
```ts
const foo = await Foos.findOne({
bar: Not(null)
});
```
のようなクエリ(`bar`が`null`ではない)は期待通りに動作しない。
次のようにします:
```ts
const foo = await Foos.findOne({
bar: Not(IsNull())
});
```
### `null` in SQL
SQLを発行する際、パラメータが`null`になる可能性のある場合はSQL文を出し分けなければならない
例えば
``` ts
query.where('file.folderId = :folderId', { folderId: ps.folderId });
```
という処理で、`ps.folderId`が`null`だと結果的に`file.folderId = null`のようなクエリが発行されてしまい、これは正しいSQLではないので期待した結果が得られない
だから次のようにする必要がある
``` ts
if (ps.folderId) {
query.where('file.folderId = :folderId', { folderId: ps.folderId });
} else {
query.where('file.folderId IS NULL');
}
```
### `[]` in SQL
SQLを発行する際、`IN`のパラメータが`[]`(空の配列)になる可能性のある場合はSQL文を出し分けなければならない
例えば
``` ts
const users = await Users.find({
id: In(userIds)
});
```
という処理で、`userIds`が`[]`だと結果的に`user.id IN ()`のようなクエリが発行されてしまい、これは正しいSQLではないので期待した結果が得られない
だから次のようにする必要がある
``` ts
const users = userIds.length > 0 ? await Users.find({
id: In(userIds)
}) : [];
```
### 配列のインデックス in SQL
SQLでは配列のインデックスは**1始まり**。
`[a, b, c]`の `a`にアクセスしたいなら`[0]`ではなく`[1]`と書く
### `undefined`にご用心
MongoDBの時とは違い、findOneでレコードを取得する時に対象レコードが存在しない場合 **`undefined`** が返ってくるので注意。
MongoDBは`null`で返してきてたので、その感覚で`if (x === null)`とか書くとバグる。代わりに`if (x == null)`と書いてください
### 簡素な`undefined`チェック
データベースからレコードを取得するときに、プログラムの流れ的に(ほぼ)絶対`undefined`にはならない場合でも、`undefined`チェックしないとTypeScriptに怒られます。
でもいちいち複数行を費やして、発生するはずのない`undefined`をチェックするのも面倒なので、`ensure`というユーティリティ関数を用意しています。
例えば、
``` ts
const user = await Users.findOne(userId);
// この時点で user の型は User | undefined
if (user == null) {
throw 'missing user';
}
// この時点で user の型は User
```
という処理を`ensure`を使うと
``` ts
const user = await Users.findOne(userId).then(ensure);
// この時点で user の型は User
```
という風に書けます。
もちろん`ensure`内部でエラーを握りつぶすようなことはしておらず、万が一`undefined`だった場合はPromiseがRejectされ後続の処理は実行されません。
``` ts
const user = await Users.findOne(userId).then(ensure);
// 万が一 Users.findOne の結果が undefined だったら、ensure でエラーが発生するので
// この行に到達することは無い
// なので、.then(ensure) は
// if (user == null) {
// throw 'missing user';
// }
// の糖衣構文のような扱いです
```
### Migration作成方法
コードの変更をした後、`ormconfig.json``npm run ormconfig`で生成)を用意し、
```
npm i -g ts-node
ts-node ./node_modules/typeorm/cli.js migration:generate -n 変更の名前
```
作成されたスクリプトは不必要な変更を含むため除去してください。
+5 -5
View File
@@ -1,4 +1,4 @@
FROM node:11-alpine AS base
FROM node:12.1-alpine AS base
ENV NODE_ENV=production
@@ -21,11 +21,11 @@ RUN apk add --no-cache \
pkgconfig \
python \
zlib-dev
RUN npm i -g yarn
COPY package.json ./
RUN npm i
COPY . ./
RUN yarn install
RUN yarn build
RUN npm run build
FROM base AS runner
@@ -39,4 +39,4 @@ COPY --from=builder /misskey/node_modules ./node_modules
COPY --from=builder /misskey/built ./built
COPY . ./
CMD ["npm", "start"]
CMD ["npm", "run", "migrateandstart"]
+1
View File
@@ -0,0 +1 @@
web: NODE_ENV=production npm start
+56 -29
View File
@@ -1,6 +1,6 @@
<img src="https://github.com/syuilo/misskey/blob/develop/assets/ai-orig.png?raw=true" align="right" height="320px"/>
<a href="https://xn--931a.moe/"><img src="https://github.com/syuilo/misskey/blob/develop/assets/ai-orig.png?raw=true" align="right" height="320px"/></a>
[![Misskey](/assets/title.png)](https://misskey.xyz/)
[![Misskey](/assets/title.png)](https://misskey.io/)
================================================================
[![CircleCI](https://img.shields.io/circleci/project/github/syuilo/misskey.svg?style=for-the-badge&logo=circleci)](https://circleci.com/gh/syuilo/misskey)
@@ -10,7 +10,7 @@
**A forever evolving, sophisticated microblogging platform.**
<p align="justify">
<a href="https://misskey.xyz">Misskey</a> is a decentralized microblogging platform born on Earth.
<a href="https://misskey.io">Misskey</a> is a decentralized microblogging platform born on Earth.
Since it exists within the Fediverse (a universe where various social media platforms are organized),
it is mutually linked with other social media platforms.
Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet? <a href="https://joinmisskey.github.io/">Find an instance!</a>
@@ -59,7 +59,7 @@ Organize and store your files! Want to post a picture you have already uploaded?
---
...and more! Experience Misskey with your own eyes at [misskey.xyz](https://misskey.xyz) or join one of the [other instances](https://joinmisskey.github.io/) that are available.
...and more! Experience Misskey with your own eyes at [misskey.io](https://misskey.io/) or join one of the [other instances](https://joinmisskey.github.io/) that are available.
Screen shots
----------------------------------------------------------------
@@ -88,12 +88,14 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
<td><img src="https://avatars0.githubusercontent.com/u/10798641?s=460&v=4" alt="AyaMorisawa" width="100"></td>
<td><img src="https://avatars1.githubusercontent.com/u/30769358?s=460&v=4" alt="mei23" width="100"></td>
<td><img src="https://avatars2.githubusercontent.com/u/20679825?s=460&v=4" alt="acid-chicken" width="100"></td>
<td><img src="https://avatars2.githubusercontent.com/u/6533808?s=460&v=4" alt="rinsuki" width="100"></td>
</tr>
<tr>
<td align="center"><a href="https://github.com/syuilo">@syuilo</a></td>
<td align="center"><a href="https://github.com/AyaMorisawa">@AyaMorisawa</a></td>
<td align="center"><a href="https://github.com/mei23">@mei23</a></td>
<td align="center"><a href="https://github.com/acid-chicken">@acid-chicken</a></td>
<td align="center"><a href="https://github.com/rinsuki">@rinsuki</a></td>
</tr>
</table>
@@ -101,54 +103,79 @@ Please see the [Contribution Guide](./CONTRIBUTING.md).
----------------------------------------------------------------
<!-- PATREON_START -->
<table><tr>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12190916/fb7fa7983c14425f890369535b1506a4/1?token-time=2145916800&token-hash=WeuDzzz24cRXJogyIkU-mxARqkdyms-rcZKbO-GpGjw%3D" alt="weep" width="100"></td>
<td><img src="https://c8.patreon.com/2/200/12059069" alt="naga_rus" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/3?token-time=2145916800&token-hash=c8HeVqLtmdgH-gSBJg8i10gmOcwllM87MDHeznl3el0%3D" alt="Melilot" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5888816/36da0f7c15954df0ab13f9abdf227f66/1.jpeg?token-time=2145916800&token-hash=at8QpJXJ8C0zINY_NmoMKv-MhXVoUK-YzTgaJPJzJYU%3D" alt="Hiroshi Seki" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12190916/fb7fa7983c14425f890369535b1506a4/3.png?token-time=2145916800&token-hash=oH_i7gJjNT7Ot6j9JiVwy7ZJIBqACVnzLqlz4YrDAZA%3D" alt="weepjp" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/19045173/cb91c0f345c24d4ebfd05f19906d5e26/1.png?token-time=2145916800&token-hash=o_zKBytJs_AxHwSYw_5R8eD0eSJe3RoTR3kR3Q0syN0%3D" alt="kiritan" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13099460/43cecdbaa63a40d79bf50a96b9910b9d/1.jpe?token-time=2145916800&token-hash=bqwLTk0Wo0hUJJ8J5y7ii05bLzz-_CDA7Bo0Mp4RFU0%3D" alt="ne_moni" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/4.jpe?token-time=2145916800&token-hash=zEyJqVM7u9d8Ri-65fJYSJcWF1jBH1nJ5a3taRzrTmw%3D" alt="Melilot" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5670915/ee175f0bfb6347ffa4ea101a8c097bff/1.jpg?token-time=2145916800&token-hash=mPLM9CA-riFHx-myr3bLZJuH2xBRHA9se5VbHhLIOuA%3D" alt="osapon" width="100"></td>
<td><img src="https://c8.patreon.com/2/200/16869916" alt="見当かなみ" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12999811/5f349fafcce44dd1824a8b1ebbec4564/3?token-time=2145916800&token-hash=LtV2lRi3L2jOWMLwccr9qWYfPrFlzIo2jYZHKzHEb6k%3D" alt="Xeltica" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=1FlxS9MEgmNGH_RHUVHbO5hIXB5I1z0lvA33CTvYvjA%3D" alt="gutfuckllc" width="100"></td>
</tr><tr>
<td><a href="https://www.patreon.com/weepjp">weep</a></td>
<td><a href="https://www.patreon.com/user?u=12059069">naga_rus</a></td>
<td><a href="https://www.patreon.com/rane_hs">Hiroshi Seki</a></td>
<td><a href="https://www.patreon.com/weepjp">weepjp</a></td>
<td><a href="https://www.patreon.com/user?u=19045173">kiritan</a></td>
<td><a href="https://www.patreon.com/user?u=13099460">ne_moni</a></td>
<td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
<td><a href="https://www.patreon.com/osapon">osapon</a></td>
<td><a href="https://www.patreon.com/user?u=16869916">見当かなみ</a></td>
<td><a href="https://www.patreon.com/Xeltica">Xeltica</a></td>
<td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
</tr></table>
<table><tr>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/11357794/923ce94cd8c44ba788ee931907881839/1?token-time=2145916800&token-hash=0xgcpqvFDqRcV_YIEhcPNVH7gs9sLg_BBnTJXCkN4ao%3D" alt="mydarkstar" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/18899730/6a22797f68254034a854d69ea2445fc8/1.png?token-time=2145916800&token-hash=b_uj57yxo5VzkSOUS7oXE_762dyOTB_oxzbO6lFNG3k%3D" alt="YuzuRyo61" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1.png?token-time=2145916800&token-hash=FMV7cPKBD1TU2WTbl1jg6AcdKSvTb2BSFcDhgc-EO8w%3D" alt="gutfuckllc" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/11357794/923ce94cd8c44ba788ee931907881839/1.png?token-time=2145916800&token-hash=9nEQje_eMvUjq9a7L3uBqW-MQbS-rRMaMgd7UYVoFNM%3D" alt="mydarkstar" width="100"></td>
<td><img src="https://c8.patreon.com/2/200/12718187" alt="Peter G." width="100"></td>
<td><img src="https://c8.patreon.com/2/200/16542964" alt="Takumi Sugita" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1?token-time=2145916800&token-hash=2PsbFNw0tnubZzgSXD01R6hIgncfiElG7H7HX2Y3dyo%3D" alt="nemu" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/3?token-time=2145916800&token-hash=9JtETp0X8gI280Ne1E8bxn6j4Lw5o2k4mJkICx97V_k%3D" alt="YUKIMOCHI" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1.jpe?token-time=2145916800&token-hash=UQRWf01TwHDV4Cls1K0YAOAjM29ssif7hLVq0ESQ0hs%3D" alt="nemu" width="100"></td>
<td><img src="https://c8.patreon.com/2/200/17866454" alt="sikyosyounin" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/3.png?token-time=2145916800&token-hash=KjfQL8nf3AIf6WqzLshBYAyX44piAqOAZiYXgZS_H6A%3D" alt="YUKIMOCHI" width="100"></td>
<td><img src="https://c8.patreon.com/2/200/17463605" alt="Sampot" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17195955/be45e5e14c3e48b2bee0456c84e19df4/4?token-time=2145916800&token-hash=SbdZeN5SmsuT9stD6v0jN1z0hftg0FmRiCTxysU0Ihw%3D" alt="Damillora" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4389829/9f709180ac714651a70f74a82f3ffdb9/2?token-time=2145916800&token-hash=zcwFxb2zopzWwksKVU1YpfAEjsl4yKT02aQ6yiAFRiQ%3D" alt="natalie" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1?token-time=2145916800&token-hash=5T8XcaAf9Zyzfg3QubR06s_kJZkArVEM2dwObrBVAU4%3D" alt="Hiratake" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/19356899/496b4681d33b4520bd7688e0fd19c04d/2.jpeg?token-time=2145916800&token-hash=_sTj3dUBOhn9qwiJ7F19Qd-yWWfUqJC_0jG1h0agEqQ%3D" alt="sheeta.s" width="100"></td>
</tr><tr>
<td><a href="https://www.patreon.com/Yuzulia">YuzuRyo61</a></td>
<td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
<td><a href="https://www.patreon.com/mydarkstar">mydarkstar</a></td>
<td><a href="https://www.patreon.com/user?u=12718187">Peter G.</a></td>
<td><a href="https://www.patreon.com/user?u=16542964">Takumi Sugita</a></td>
<td><a href="https://www.patreon.com/user?u=13039004">nemu</a></td>
<td><a href="https://www.patreon.com/user?u=17866454">sikyosyounin</a></td>
<td><a href="https://www.patreon.com/yukimochi">YUKIMOCHI</a></td>
<td><a href="https://www.patreon.com/user?u=17463605">Sampot</a></td>
<td><a href="https://www.patreon.com/damillora">Damillora</a></td>
<td><a href="https://www.patreon.com/user?u=4389829">natalie</a></td>
<td><a href="https://www.patreon.com/hiratake">Hiratake</a></td>
<td><a href="https://www.patreon.com/user?u=19356899">sheeta.s</a></td>
</tr></table>
<table><tr>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=Ksk_2l3gjPDbnzMUOCSW1E-hdPJsNs2tSR4_RAakRK8%3D" alt="dansup" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1?token-time=2145916800&token-hash=CXe9AqlZy9AsYfiWd3OBYVOzvODoN47Litz0Tu4BFpU%3D" alt="Gargron" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1?token-time=2145916800&token-hash=xhR1n6NAAyEb-IUXLD6_dshkFa3mefU5ZZuk1L8qKTs%3D" alt="Nokotaro Takeda" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=uR-48MQ0A4j0irQSrCAQZJ-sJUSs_Fkihlg3-l59b7c%3D" alt="Takashi Shibuya" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13737140/1adf7835017d479280d90fe8d30aade2/1.png?token-time=2145916800&token-hash=0pdle8h5pDZrww0BDOjdz6zO-HudeGTh36a3qi1biVU%3D" alt="Satsuki Yanagi" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17880724/311738c8a48f4a6b9443c2445a75adde/1.jpe?token-time=2145916800&token-hash=CPxGQhKIlEaa6WUcgbyHixyKEhakiw9RFdOhsIJBQ_o%3D" alt="takimura" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17195955/be45e5e14c3e48b2bee0456c84e19df4/4.jpe?token-time=2145916800&token-hash=UslrPVM-8TXOe8AapuNiaFYjcIJgPNcU-fKpGbfGJNI%3D" alt="Damillora" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/16900731/83884b38afc74d4cbe83c30a13b10edd/1.png?token-time=2145916800&token-hash=R5Tog8RWg0rguRoCIoir3lThokrdPvs8Utfikhc0nhY%3D" alt="Atsuko Tominaga" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4389829/9f709180ac714651a70f74a82f3ffdb9/3.png?token-time=2145916800&token-hash=FTm3WVom4dJ9NwWMU4OpCL_8Yc13WiwEbKrDPyTZTPs%3D" alt="natalie" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1.jpe?token-time=2145916800&token-hash=EWxXhVbZYH7KB4IDT3joc8TbIg8zPO40x1r5IDn3R7c%3D" alt="Hiratake" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5923936/2a743cbfbff946c2af3f09026047c0da/2.png?token-time=2145916800&token-hash=h6yphW1qnM0n_NOWaf8qtszMRLXEwIxfk5beu4RxdT0%3D" alt="noellabo" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/2384390/5681180e1efb46a8b28e0e8d4c8b9037/1.jpg?token-time=2145916800&token-hash=SJcMy-Q1BcS940-LFUVOMfR7-5SgrzsEQGhYb3yowFk%3D" alt="CG" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/18072312/98e894d960314fa7bc236a72a39488fe/1.jpe?token-time=2145916800&token-hash=qA8j97lIZNc-74AuZ0p4F3ms6sKPeKjtNt2vEuwpsyo%3D" alt="Hekovic" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/10789744/97175095d8f04c0f86225ff47cb98d40/1.jpeg?token-time=2145916800&token-hash=l4AoMR7Nj7K4yAHrkrk2hAoggPkbSPm12m1nmbe9Pb8%3D" alt="Naoki Hirayama" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1.jpeg?token-time=2145916800&token-hash=L55UhJ0rcuNAH3w_ryeeGN4hC6taoOixyAhraEi0bzw%3D" alt="dansup" width="100"></td>
</tr><tr>
<td><a href="https://www.patreon.com/user?u=13737140">Satsuki Yanagi</a></td>
<td><a href="https://www.patreon.com/takimura">takimura</a></td>
<td><a href="https://www.patreon.com/damillora">Damillora</a></td>
<td><a href="https://www.patreon.com/user?u=16900731">Atsuko Tominaga</a></td>
<td><a href="https://www.patreon.com/user?u=4389829">natalie</a></td>
<td><a href="https://www.patreon.com/hiratake">Hiratake</a></td>
<td><a href="https://www.patreon.com/noellabo">noellabo</a></td>
<td><a href="https://www.patreon.com/Corset">CG</a></td>
<td><a href="https://www.patreon.com/hekovic">Hekovic</a></td>
<td><a href="https://www.patreon.com/spinlock">Naoki Hirayama</a></td>
<td><a href="https://www.patreon.com/dansup">dansup</a></td>
</tr></table>
<table><tr>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1.jpeg?token-time=2145916800&token-hash=d8jBQLMOHD87KtXs5C9fk1o58DMF73pQ-dYH3uZJPBE%3D" alt="Gargron" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1.png?token-time=2145916800&token-hash=hBayGfOmQH3kRMdNnDe4oCZD_9fsJWSt29xXR3KRMVk%3D" alt="Nokotaro Takeda" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1.jpeg?token-time=2145916800&token-hash=vGe7wXGqmA8Q7m-kDNb6fyGdwk-Dxk4F-ut8ZZu51RM%3D" alt="Takashi Shibuya" width="100"></td>
</tr><tr>
<td><a href="https://www.patreon.com/mastodon">Gargron</a></td>
<td><a href="https://www.patreon.com/takenoko">Nokotaro Takeda</a></td>
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
</tr></table>
**Last updated:** Sun, 24 Feb 2019 06:44:06 UTC
**Last updated:** Sun, 19 May 2019 02:37:06 UTC
<!-- PATREON_END -->
:four_leaf_clover: Copyright
+4
View File
@@ -0,0 +1,4 @@
user-agent: *
allow: /
# todo: sitemap
-9
View File
@@ -1,9 +0,0 @@
{
'targets': [
{
'target_name': 'crypto_key',
'sources': ['src/crypto_key.cc'],
'include_dirs': ['<!(node -e "require(\'nan\')")']
}
]
}
-23
View File
@@ -1,23 +0,0 @@
const mongo = require('mongodb');
const User = require('../built/models/user').default;
const args = process.argv.slice(2);
const user = args[0];
const q = user.startsWith('@') ? {
username: user.split('@')[1],
host: user.split('@')[2] || null
} : { _id: new mongo.ObjectID(user) };
console.log(`Mark as admin ${user}...`);
User.update(q, {
$set: {
isAdmin: true
}
}).then(() => {
console.log(`Done ${user}`);
}, e => {
console.error(e);
});
-57
View File
@@ -1,57 +0,0 @@
// for Node.js interpret
const chalk = require('chalk');
const sequential = require('promise-sequential');
const { default: User } = require('../../built/models/user');
const { default: DriveFile } = require('../../built/models/drive-file');
async function main() {
const promiseGens = [];
const count = await DriveFile.count({});
let prev;
for (let i = 0; i < count; i++) {
promiseGens.push(() => {
const promise = new Promise(async (res, rej) => {
const file = await DriveFile.findOne(prev ? {
_id: { $gt: prev._id }
} : {}, {
sort: {
_id: 1
}
});
prev = file;
const user = await User.findOne({ _id: file.metadata.userId });
DriveFile.update({
_id: file._id
}, {
$set: {
'metadata._user': {
host: user.host
}
}
}).then(() => {
res([i, file]);
}).catch(rej);
});
promise.then(([i, file]) => {
console.log(chalk`{gray ${i}} {green done: {bold ${file._id}} ${file.filename}}`);
});
return promise;
});
}
return await sequential(promiseGens);
}
main().then(() => {
console.log('ALL DONE');
}).catch(console.error);
-71
View File
@@ -1,71 +0,0 @@
// for Node.js interpret
const chalk = require('chalk');
const sequential = require('promise-sequential');
const { default: User } = require('../../built/models/user');
const { default: DriveFile } = require('../../built/models/drive-file');
async function main() {
const promiseGens = [];
const count = await User.count({});
let prev;
for (let i = 0; i < count; i++) {
promiseGens.push(() => {
const promise = new Promise(async (res, rej) => {
const user = await User.findOne(prev ? {
_id: { $gt: prev._id }
} : {}, {
sort: {
_id: 1
}
});
prev = user;
const set = {};
if (user.avatarId != null) {
const file = await DriveFile.findOne({ _id: user.avatarId });
if (file && file.metadata.properties.avgColor) {
set.avatarColor = file.metadata.properties.avgColor;
}
}
if (user.bannerId != null) {
const file = await DriveFile.findOne({ _id: user.bannerId });
if (file && file.metadata.properties.avgColor) {
set.bannerColor = file.metadata.properties.avgColor;
}
}
if (Object.keys(set).length === 0) return res([i, user]);
User.update({
_id: user._id
}, {
$set: set
}).then(() => {
res([i, user]);
}).catch(rej);
});
promise.then(([i, user]) => {
console.log(chalk`{gray ${i}} {green done: {bold ${user._id}} @${user.username}}`);
});
return promise;
});
}
return await sequential(promiseGens);
}
main().then(() => {
console.log('ALL DONE');
}).catch(console.error);
-9
View File
@@ -1,9 +0,0 @@
const { default: DriveFile } = require('../../built/models/drive-file');
DriveFile.update({}, {
$rename: {
'metadata.isMetaOnly': 'metadata.withoutChunks'
}
}, {
multi: true
});
-134
View File
@@ -1,134 +0,0 @@
const { default: Stats } = require('../../built/models/stats');
const { default: User } = require('../../built/models/user');
const { default: Note } = require('../../built/models/note');
const { default: DriveFile } = require('../../built/models/drive-file');
const now = new Date();
const y = now.getFullYear();
const m = now.getMonth();
const d = now.getDate();
const today = new Date(y, m, d);
async function main() {
const localUsersCount = await User.count({
host: null
});
const remoteUsersCount = await User.count({
host: { $ne: null }
});
const localNotesCount = await Note.count({
'_user.host': null
});
const remoteNotesCount = await Note.count({
'_user.host': { $ne: null }
});
const localDriveFilesCount = await DriveFile.count({
'metadata._user.host': null
});
const remoteDriveFilesCount = await DriveFile.count({
'metadata._user.host': { $ne: null }
});
const localDriveFilesSize = await DriveFile
.aggregate([{
$match: {
'metadata._user.host': null,
'metadata.deletedAt': { $exists: false }
}
}, {
$project: {
length: true
}
}, {
$group: {
_id: null,
usage: { $sum: '$length' }
}
}])
.then(aggregates => {
if (aggregates.length > 0) {
return aggregates[0].usage;
}
return 0;
});
const remoteDriveFilesSize = await DriveFile
.aggregate([{
$match: {
'metadata._user.host': { $ne: null },
'metadata.deletedAt': { $exists: false }
}
}, {
$project: {
length: true
}
}, {
$group: {
_id: null,
usage: { $sum: '$length' }
}
}])
.then(aggregates => {
if (aggregates.length > 0) {
return aggregates[0].usage;
}
return 0;
});
await Stats.insert({
date: today,
users: {
local: {
total: localUsersCount,
diff: 0
},
remote: {
total: remoteUsersCount,
diff: 0
}
},
notes: {
local: {
total: localNotesCount,
diff: 0,
diffs: {
normal: 0,
reply: 0,
renote: 0
}
},
remote: {
total: remoteNotesCount,
diff: 0,
diffs: {
normal: 0,
reply: 0,
renote: 0
}
}
},
drive: {
local: {
totalCount: localDriveFilesCount,
totalSize: localDriveFilesSize,
diffCount: 0,
diffSize: 0
},
remote: {
totalCount: remoteDriveFilesCount,
totalSize: remoteDriveFilesSize,
diffCount: 0,
diffSize: 0
}
}
});
console.log('done');
}
main();
-144
View File
@@ -1,144 +0,0 @@
const { default: Stats } = require('../../built/models/stats');
const { default: User } = require('../../built/models/user');
const { default: Note } = require('../../built/models/note');
const { default: DriveFile } = require('../../built/models/drive-file');
const now = new Date();
const y = now.getFullYear();
const m = now.getMonth();
const d = now.getDate();
const h = now.getHours();
const date = new Date(y, m, d, h);
async function main() {
await Stats.update({}, {
$set: {
span: 'day'
}
}, {
multi: true
});
const localUsersCount = await User.count({
host: null
});
const remoteUsersCount = await User.count({
host: { $ne: null }
});
const localNotesCount = await Note.count({
'_user.host': null
});
const remoteNotesCount = await Note.count({
'_user.host': { $ne: null }
});
const localDriveFilesCount = await DriveFile.count({
'metadata._user.host': null
});
const remoteDriveFilesCount = await DriveFile.count({
'metadata._user.host': { $ne: null }
});
const localDriveFilesSize = await DriveFile
.aggregate([{
$match: {
'metadata._user.host': null,
'metadata.deletedAt': { $exists: false }
}
}, {
$project: {
length: true
}
}, {
$group: {
_id: null,
usage: { $sum: '$length' }
}
}])
.then(aggregates => {
if (aggregates.length > 0) {
return aggregates[0].usage;
}
return 0;
});
const remoteDriveFilesSize = await DriveFile
.aggregate([{
$match: {
'metadata._user.host': { $ne: null },
'metadata.deletedAt': { $exists: false }
}
}, {
$project: {
length: true
}
}, {
$group: {
_id: null,
usage: { $sum: '$length' }
}
}])
.then(aggregates => {
if (aggregates.length > 0) {
return aggregates[0].usage;
}
return 0;
});
await Stats.insert({
date: date,
span: 'hour',
users: {
local: {
total: localUsersCount,
diff: 0
},
remote: {
total: remoteUsersCount,
diff: 0
}
},
notes: {
local: {
total: localNotesCount,
diff: 0,
diffs: {
normal: 0,
reply: 0,
renote: 0
}
},
remote: {
total: remoteNotesCount,
diff: 0,
diffs: {
normal: 0,
reply: 0,
renote: 0
}
}
},
drive: {
local: {
totalCount: localDriveFilesCount,
totalSize: localDriveFilesSize,
diffCount: 0,
diffSize: 0
},
remote: {
totalCount: remoteDriveFilesCount,
totalSize: remoteDriveFilesSize,
diffCount: 0,
diffSize: 0
}
}
});
console.log('done');
}
main();
+17 -21
View File
@@ -5,8 +5,8 @@ services:
build: .
restart: always
links:
- mongo
# - redis
- db
- redis
# - es
ports:
- "127.0.0.1:3000:3000"
@@ -14,26 +14,23 @@ services:
- internal_network
- external_network
# redis:
# restart: always
# image: redis:4.0-alpine
# networks:
# - internal_network
### Uncomment to enable Redis persistance
## volumes:
## - ./redis:/data
mongo:
redis:
restart: always
image: mongo:4.1
image: redis:4.0-alpine
networks:
- internal_network
environment:
MONGO_INITDB_DATABASE: "misskey"
volumes:
- ./.config/mongo_initdb.js:/docker-entrypoint-initdb.d/mongo_initdb.js:ro
### Uncomment to enable MongoDB persistance
# - ./mongo:/data
- ./redis:/data
db:
restart: always
image: postgres:11.2-alpine
networks:
- internal_network
env_file:
- .config/docker.env
volumes:
- ./db:/var/lib/postgresql/data
# es:
# restart: always
@@ -42,9 +39,8 @@ services:
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
# networks:
# - internal_network
#### Uncomment to enable ES persistence
## volumes:
## - ./elasticsearch:/usr/share/elasticsearch/data
# volumes:
# - ./elasticsearch:/usr/share/elasticsearch/data
networks:
internal_network:
-22
View File
@@ -1,22 +0,0 @@
Comment faire une sauvegarde de votre Misskey ?
==========================
Assurez-vous d'avoir installé **mongodb-tools**.
---
Dans votre terminal :
``` shell
$ mongodump --archive=db-backup -u <VotreNomdUtilisateur> -p <VotreMotDePasse>
```
Pour plus de détails, merci de consulter [la documentation de mongodump](https://docs.mongodb.com/manual/reference/program/mongodump/).
Restauration
-------
``` shell
$ mongorestore --archive=db-backup
```
Pour plus de détails, merci de consulter [la documentation de mongorestore](https://docs.mongodb.com/manual/reference/program/mongorestore/).
-22
View File
@@ -1,22 +0,0 @@
How to backup your Misskey
==========================
Make sure **mongodb-tools** installed.
---
In your shell:
``` shell
$ mongodump --archive=db-backup -u <YourUserName> -p <YourPassword>
```
For details, please see [mongodump docs](https://docs.mongodb.com/manual/reference/program/mongodump/).
Restore
-------
``` shell
$ mongorestore --archive=db-backup
```
For details, please see [mongorestore docs](https://docs.mongodb.com/manual/reference/program/mongorestore/).
+52 -10
View File
@@ -9,15 +9,51 @@ This guide describes how to install and setup Misskey with Docker.
*1.* Download Misskey
----------------------------------------------------------------
1. `git clone -b master git://github.com/syuilo/misskey.git` Clone Misskey repository's master branch.
2. `cd misskey` Move to misskey directory.
3. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest) tag.
1. Clone Misskey repository's master branch.
`git clone -b master git://github.com/syuilo/misskey.git`
2. Move to misskey directory.
`cd misskey`
3. Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest) tag.
`git checkout master`
*2.* Configure Misskey
----------------------------------------------------------------
1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`.
2. `cp .config/mongo_initdb_example.js .config/mongo_initdb.js` Copy the `.config/mongo_initdb_example.js` and rename it to `mongo_initdb.js`.
3. Edit `default.yml` and `mongo_initdb.js`.
Create configuration files with following:
```bash
cd .config
cp example.yml default.yml
cp docker_example.env docker.env
```
### `default.yml`
Edit this file the same as non-Docker environment.
However hostname of Postgresql, Redis and Elasticsearch are not `localhost`, they are set in `docker-compose.yml`.
The following is default hostname:
| Service | Hostname |
|---------------|----------|
| Postgresql | `db` |
| Redis | `redis` |
| Elasticsearch | `es` |
### `docker.env`
Configure Postgresql in this file.
The minimum required settings are:
| name | Description |
|---------------------|---------------|
| `POSTGRES_PASSWORD` | Password |
| `POSTGRES_USER` | Username |
| `POSTGRES_DB` | Database name |
*3.* Configure Docker
----------------------------------------------------------------
@@ -29,7 +65,13 @@ Build misskey with the following:
`docker-compose build`
*5.* That is it.
*5.* Init DB
----------------------------------------------------------------
``` shell
docker-compose run --rm web npm run init
```
*6.* That is it.
----------------------------------------------------------------
Well done! Now you have an environment to run Misskey.
@@ -37,9 +79,9 @@ Well done! Now you have an environment to run Misskey.
Just `docker-compose up -d`. GLHF!
### How to update your Misskey server to the latest version
1. `git fetch`
2. `git stash`
3. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
1. `git stash`
2. `git checkout master`
3. `git pull`
4. `git stash pop`
5. `docker-compose build`
6. Check [ChangeLog](../CHANGELOG.md) for migration information
+33 -11
View File
@@ -10,9 +10,17 @@ Ce guide explique comment installer et configurer Misskey avec Docker.
*1.* Télécharger Misskey
----------------------------------------------------------------
1. `git clone -b master git://github.com/syuilo/misskey.git` Clone le dépôt de Misskey sur la branche master.
2. `cd misskey` Naviguez dans le dossier du dépôt.
3. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` Checkout sur le tag de la [dernière version](https://github.com/syuilo/misskey/releases/latest).
1. Clone le dépôt de Misskey sur la branche master.
`git clone -b master git://github.com/syuilo/misskey.git`
2. Naviguez dans le dossier du dépôt.
`cd misskey`
3. Checkout sur le tag de la [dernière version](https://github.com/syuilo/misskey/releases/latest).
`git checkout master`
*2.* Configuration de Misskey
----------------------------------------------------------------
@@ -38,9 +46,9 @@ Parfait, Vous avez un environnement prêt pour démarrer Misskey.
Utilisez la commande `docker-compose up -d`. GLHF!
### How to update your Misskey server to the latest version
1. `git fetch`
2. `git stash`
3. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
1. `git stash`
2. `git checkout master`
3. `git pull`
4. `git stash pop`
5. `docker-compose build`
6. Consultez le [ChangeLog](../CHANGELOG.md) pour avoir les éventuelles informations de migration
@@ -52,14 +60,28 @@ Utilisez la commande `docker-compose up -d`. GLHF!
### Configuration d'ElasticSearch (pour la fonction de recherche)
*1.* Préparation de l'environnement
----------------------------------------------------------------
1. `mkdir elasticsearch && chown 1000:1000 elasticsearch` Permet de créer le dossier d'accueil de la base ElasticSearch aves les bons droits
2. `sysctl -w vm.max_map_count=262144` Augmente la valeur max du paramètre map_count du système (valeur minimum pour pouvoir lancer ES)
1. Permet de créer le dossier d'accueil de la base ElasticSearch aves les bons droits
`mkdir elasticsearch && chown 1000:1000 elasticsearch`
2. Augmente la valeur max du paramètre map_count du système (valeur minimum pour pouvoir lancer ES)
`sysctl -w vm.max_map_count=262144`
*2.* Après lancement du docker-compose, initialisation de la base ElasticSearch
----------------------------------------------------------------
1. `docker-compose -it web /bin/sh` Connexion dans le conteneur web
2. `apk add curl` Ajout du paquet curl
3. `curl -X PUT "es:9200/misskey" -H 'Content-Type: application/json' -d'{ "settings" : { "index" : { } }}'` Création de la base ES
1. Connexion dans le conteneur web
`docker-compose -it web /bin/sh`
2. Ajout du paquet curl
`apk add curl`
3. Création de la base ES
`curl -X PUT "es:9200/misskey" -H 'Content-Type: application/json' -d'{ "settings" : { "index" : { } }}'`
4. `exit`
----------------------------------------------------------------
+53 -11
View File
@@ -9,15 +9,51 @@ Dockerを使ったMisskey構築方法
*1.* Misskeyのダウンロード
----------------------------------------------------------------
1. `git clone -b master git://github.com/syuilo/misskey.git` masterブランチからMisskeyレポジトリをクローン
2. `cd misskey` misskeyディレクトリに移動
3. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
1. masterブランチからMisskeyレポジトリをクローン
*2.* 設定ファイルを作成する
`git clone -b master git://github.com/syuilo/misskey.git`
2. misskeyディレクトリに移動
`cd misskey`
3. [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
`git checkout master`
*2.* 設定ファイルの作成と編集
----------------------------------------------------------------
1. `cp .config/example.yml .config/default.yml` `.config/example.yml`をコピーし名前を`default.yml`にする
2. `cp .config/mongo_initdb_example.js .config/mongo_initdb.js` `.config/mongo_initdb_example.js`をコピーし名前を`mongo_initdb.js`にする
3. `default.yml``mongo_initdb.js`を編集する
下記コマンドで設定ファイルを作成してください。
```bash
cd .config
cp example.yml default.yml
cp docker_example.env docker.env
```
### `default.yml`の編集
非Docker環境と同じ様に編集してください。
ただし、Postgresql、RedisとElasticsearchのホストは`localhost`ではなく、`docker-compose.yml`で設定されたサービス名になっています。
標準設定では次の通りです。
| サービス | ホスト名 |
|---------------|---------|
| Postgresql |`db` |
| Redis |`redis` |
| Elasticsearch |`es` |
### `docker.env`の編集
このファイルはPostgresqlの設定を記述します。
最低限記述する必要がある設定は次の通りです。
| 設定 | 内容 |
|---------------------|--------------|
| `POSTGRES_PASSWORD` | パスワード |
| `POSTGRES_USER` | ユーザー名 |
| `POSTGRES_DB` | データベース名 |
*3.* Dockerの設定
----------------------------------------------------------------
@@ -29,7 +65,13 @@ Dockerを使ったMisskey構築方法
`docker-compose build`
*5.* 以上です!
*5.* データベースを初期化
----------------------------------------------------------------
``` shell
docker-compose run --rm web npm run init
```
*6.* 以上です!
----------------------------------------------------------------
お疲れ様でした。これでMisskeyを動かす準備は整いました。
@@ -37,9 +79,9 @@ Dockerを使ったMisskey構築方法
`docker-compose up -d`するだけです。GLHF!
### Misskeyを最新バージョンにアップデートする方法:
1. `git fetch`
2. `git stash`
3. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
1. `git stash`
2. `git checkout master`
3. `git pull`
4. `git stash pop`
5. `docker-compose build`
6. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する
+1 -1
View File
@@ -29,7 +29,7 @@ server {
listen [::]:443 http2;
server_name example.tld;
ssl on;
ssl_session_cache shared:ssl_session_cache:10m;
ssl_session_cache shared:ssl_session_cache:10m;
# To use Let's Encrypt certificate
ssl_certificate /etc/letsencrypt/live/example.tld/fullchain.pem;
+64 -42
View File
@@ -22,37 +22,45 @@ adduser --disabled-password --disabled-login misskey
Please install and setup these softwares:
#### Dependencies :package:
* **[Node.js](https://nodejs.org/en/)** >= 10.0.0
* **[MongoDB](https://www.mongodb.com/)** >= 3.6
* **[Node.js](https://nodejs.org/en/)** >= 11.7.0
* **[PostgreSQL](https://www.postgresql.org/)** >= 10
* **[Redis](https://redis.io/)**
##### Optional
* [Redis](https://redis.io/)
* Redis is optional, but we strongly recommended to install it
* [Elasticsearch](https://www.elastic.co/) - required to enable the search feature
* [FFmpeg](https://www.ffmpeg.org/)
*3.* Setup MongoDB
*3.* Install Misskey
----------------------------------------------------------------
As root:
1. `mongo` Go to the mongo shell
2. `use misskey` Use the misskey database
3. `db.createUser( { user: "misskey", pwd: "<password>", roles: [ { role: "readWrite", db: "misskey" } ] } )` Create the misskey user.
4. `exit` You're done!
1. Connect to misskey user.
*4.* Install Misskey
----------------------------------------------------------------
1. `su - misskey` Connect to misskey user.
2. `git clone -b master git://github.com/syuilo/misskey.git` Clone the misskey repo from master branch.
3. `cd misskey` Navigate to misskey directory
4. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest)
5. `npm install` Install misskey dependencies.
`su - misskey`
*5.* Configure Misskey
2. Clone the misskey repo from master branch.
`git clone -b master git://github.com/syuilo/misskey.git`
3. Navigate to misskey directory
`cd misskey`
4. Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest)
`git checkout master`
5. Install misskey dependencies.
`npm install`
*4.* Configure Misskey
----------------------------------------------------------------
1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`.
1. Copy the `.config/example.yml` and rename it to `default.yml`.
`cp .config/example.yml .config/default.yml`
2. Edit `default.yml`
*6.* Build Misskey
*5.* Build Misskey
----------------------------------------------------------------
Build misskey with the following:
@@ -68,6 +76,12 @@ If you're still encountering errors about some modules, use node-gyp:
3. `node-gyp build`
4. `NODE_ENV=production npm run build`
*6.* Init DB
----------------------------------------------------------------
``` shell
npm run init
```
*7.* That is it.
----------------------------------------------------------------
Well done! Now, you have an environment that run to Misskey.
@@ -77,37 +91,45 @@ Just `NODE_ENV=production npm start`. GLHF!
### Launch with systemd
1. Create a systemd service here: `/etc/systemd/system/misskey.service`
1. Create a systemd service here
`/etc/systemd/system/misskey.service`
2. Edit it, and paste this and save:
```
[Unit]
Description=Misskey daemon
```
[Unit]
Description=Misskey daemon
[Service]
Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=misskey
Restart=always
[Service]
Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=misskey
Restart=always
[Install]
WantedBy=multi-user.target
```
[Install]
WantedBy=multi-user.target
```
3. `systemctl daemon-reload ; systemctl enable misskey` Reload systemd and enable the misskey service.
4. `systemctl start misskey` Start the misskey service.
3. Reload systemd and enable the misskey service.
`systemctl daemon-reload ; systemctl enable misskey`
4. Start the misskey service.
`systemctl start misskey`
You can check if the service is running with `systemctl status misskey`.
### How to update your Misskey server to the latest version
1. `git fetch`
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
1. `git checkout master`
2. `git pull`
3. `npm install`
4. `NODE_ENV=production npm run build`
5. Check [ChangeLog](../CHANGELOG.md) for migration information
+59 -43
View File
@@ -22,37 +22,45 @@ adduser --disabled-password --disabled-login misskey
Installez les paquets suivants :
#### Dépendences :package:
* **[Node.js](https://nodejs.org/en/)** >= 10.0.0
* **[MongoDB](https://www.mongodb.com/)** >= 3.6
* **[Node.js](https://nodejs.org/en/)** >= 11.7.0
* **[PostgreSQL](https://www.postgresql.org/)** >= 10
* **[Redis](https://redis.io/)**
##### Optionnels
* [Redis](https://redis.io/)
* Redis est optionnel mais nous vous recommandons vivement de l'installer
* [Elasticsearch](https://www.elastic.co/) - requis pour pouvoir activer la fonctionnalité de recherche
* [FFmpeg](https://www.ffmpeg.org/)
*3.* Paramètrage de MongoDB
*3.* Installation de Misskey
----------------------------------------------------------------
En root :
1. `mongo` Ouvrez le shell mongo
2. `use misskey` Utilisez la base de données misskey
3. `db.createUser( { user: "misskey", pwd: "<password>", roles: [ { role: "readWrite", db: "misskey" } ] } )` Créez l'utilisateur misskey.
4. `exit` Vous avez terminé !
1. Basculez vers l'utilisateur misskey.
*4.* Installation de Misskey
----------------------------------------------------------------
1. `su - misskey` Basculez vers l'utilisateur misskey.
2. `git clone -b master git://github.com/syuilo/misskey.git` Clonez la branche master du dépôt misskey.
3. `cd misskey` Accédez au dossier misskey.
4. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` Checkout sur le tag de la [version la plus récente](https://github.com/syuilo/misskey/releases/latest)
5. `npm install` Installez les dépendances de misskey.
`su - misskey`
*5.* Création du fichier de configuration
2. Clonez la branche master du dépôt misskey.
`git clone -b master git://github.com/syuilo/misskey.git`
3. Accédez au dossier misskey.
`cd misskey`
4. Checkout sur le tag de la [version la plus récente](https://github.com/syuilo/misskey/releases/latest)
`git checkout master`
5. Installez les dépendances de misskey.
`npm install`
*4.* Création du fichier de configuration
----------------------------------------------------------------
1. `cp .config/example.yml .config/default.yml` Copiez le fichier `.config/example.yml` et renommez-le`default.yml`.
1. Copiez le fichier `.config/example.yml` et renommez-le`default.yml`.
`cp .config/example.yml .config/default.yml`
2. Editez le fichier `default.yml`
*6.* Construction de Misskey
*5.* Construction de Misskey
----------------------------------------------------------------
Construisez Misskey comme ceci :
@@ -68,7 +76,7 @@ Si vous rencontrez des erreurs concernant certains modules, utilisez node-gyp:
3. `node-gyp build`
4. `NODE_ENV=production npm run build`
*7.* C'est tout.
*6.* C'est tout.
----------------------------------------------------------------
Excellent ! Maintenant, vous avez un environnement prêt pour lancer Misskey
@@ -77,37 +85,45 @@ Lancez tout simplement `NODE_ENV=production npm start`. Bonne chance et amusez-v
### Démarrage avec systemd
1. Créez un service systemd sur : `/etc/systemd/system/misskey.service`
1. Créez un service systemd sur
`/etc/systemd/system/misskey.service`
2. Editez-le puis copiez et coller ceci dans le fichier :
```
[Unit]
Description=Misskey daemon
```
[Unit]
Description=Misskey daemon
[Service]
Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=misskey
Restart=always
[Service]
Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=misskey
Restart=always
[Install]
WantedBy=multi-user.target
```
[Install]
WantedBy=multi-user.target
```
3. `systemctl daemon-reload ; systemctl enable misskey` Redémarre systemd et active le service misskey.
4. `systemctl start misskey` Démarre le service misskey.
3. Redémarre systemd et active le service misskey.
`systemctl daemon-reload ; systemctl enable misskey`
4. Démarre le service misskey.
`systemctl start misskey`
Vous pouvez vérifier si le service a démarré en utilisant la commande `systemctl status misskey`.
### Méthode de mise à jour vers la plus récente version de Misskey
1. `git fetch`
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
1. `git checkout master`
2. `git pull`
3. `npm install`
4. `NODE_ENV=production npm run build`
5. Consultez [ChangeLog](../CHANGELOG.md) pour les information de migration.
+67 -50
View File
@@ -22,44 +22,46 @@ adduser --disabled-password --disabled-login misskey
これらのソフトウェアをインストール・設定してください:
#### 依存関係 :package:
* **[Node.js](https://nodejs.org/en/)** (10.0.0以上)
* **[MongoDB](https://www.mongodb.com/)** (3.6以上)
* **[Node.js](https://nodejs.org/en/)** (11.7.0以上)
* **[PostgreSQL](https://www.postgresql.org/)** (10以上)
* **[Redis](https://redis.io/)**
##### オプション
* [Redis](https://redis.io/)
* Redisはオプションですが、インストールすることを強く推奨します。
* インストールしなくていいのは、あなたのインスタンスが自分専用のときだけとお考えください。
* 具体的には、Redisをインストールしないと、次の事が出来なくなります:
* Misskeyプロセスを複数起動しての負荷分散
* レートリミット
* ジョブキュー
* Twitter連携
* [Elasticsearch](https://www.elastic.co/)
* 検索機能を有効にするためにはインストールが必要です。
* [FFmpeg](https://www.ffmpeg.org/)
*3.* MongoDBの設定
*3.* Misskeyのインストール
----------------------------------------------------------------
ルートで:
1. `mongo` mongoシェルを起動
2. `use misskey` misskeyデータベースを使用
3. `db.createUser( { user: "misskey", pwd: "<password>", roles: [ { role: "readWrite", db: "misskey" } ] } )` misskeyユーザーを作成
4. `exit` mongoシェルを終了
1. misskeyユーザーを使用
*4.* Misskeyのインストール
----------------------------------------------------------------
1. `su - misskey` misskeyユーザーを使用
2. `git clone -b master git://github.com/syuilo/misskey.git` masterブランチからMisskeyレポジトリをクローン
3. `cd misskey` misskeyディレクトリに移動
4. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)` [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
5. `npm install` Misskeyの依存パッケージをインストール
`su - misskey`
*5.* 設定ファイルを作成する
2. masterブランチからMisskeyレポジトリをクローン
`git clone -b master git://github.com/syuilo/misskey.git`
3. misskeyディレクトリに移動
`cd misskey`
4. [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
`git checkout master`
5. Misskeyの依存パッケージをインストール
`npm install`
*4.* 設定ファイルを作成する
----------------------------------------------------------------
1. `cp .config/example.yml .config/default.yml` `.config/example.yml`をコピーし名前を`default.yml`にする。
1. `.config/example.yml`をコピーし名前を`default.yml`にする。
`cp .config/example.yml .config/default.yml`
2. `default.yml` を編集する。
*6.* Misskeyのビルド
*5.* Misskeyのビルド
----------------------------------------------------------------
次のコマンドでMisskeyをビルドしてください:
@@ -74,6 +76,12 @@ Debianをお使いであれば、`build-essential`パッケージをインスト
3. `node-gyp build`
4. `NODE_ENV=production npm run build`
*6.* データベースを初期化
----------------------------------------------------------------
``` shell
npm run init
```
*7.* 以上です!
----------------------------------------------------------------
お疲れ様でした。これでMisskeyを動かす準備は整いました。
@@ -82,43 +90,52 @@ Debianをお使いであれば、`build-essential`パッケージをインスト
`NODE_ENV=production npm start`するだけです。GLHF!
### systemdを用いた起動
1. systemdサービスのファイルを作成: `/etc/systemd/system/misskey.service`
1. systemdサービスのファイルを作成
`/etc/systemd/system/misskey.service`
2. エディタで開き、以下のコードを貼り付けて保存:
```
[Unit]
Description=Misskey daemon
```
[Unit]
Description=Misskey daemon
[Service]
Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=misskey
Restart=always
[Service]
Type=simple
User=misskey
ExecStart=/usr/bin/npm start
WorkingDirectory=/home/misskey/misskey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=misskey
Restart=always
[Install]
WantedBy=multi-user.target
```
CentOSで1024以下のポートを使用してMisskeyを使用する場合は`ExecStart=/usr/bin/sudo /usr/bin/npm start`に変更する必要があります。
[Install]
WantedBy=multi-user.target
```
3. `systemctl daemon-reload ; systemctl enable misskey` systemdを再読み込みしmisskeyサービスを有効化
4. `systemctl start misskey` misskeyサービスの起動
CentOSで1024以下のポートを使用してMisskeyを使用する場合は`ExecStart=/usr/bin/sudo /usr/bin/npm start`に変更する必要があります。
3. systemdを再読み込みしmisskeyサービスを有効化
`systemctl daemon-reload ; systemctl enable misskey`
4. misskeyサービスの起動
`systemctl start misskey`
`systemctl status misskey`と入力すると、サービスの状態を調べることができます。
### Misskeyを最新バージョンにアップデートする方法:
1. `git fetch`
2. `git checkout $(git tag -l | grep -v 'rc[0-9]*$' | sort -V | tail -n 1)`
1. `git checkout master`
2. `git pull`
3. `npm install`
4. `NODE_ENV=production npm run build`
5. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する
なにか問題が発生した場合は、`npm run clean`すると直る場合があります。
なにか問題が発生した場合は、`npm run clean`または`npm run cleanall`すると直る場合があります。
----------------------------------------------------------------
+1 -10
View File
@@ -5,7 +5,6 @@
import * as gulp from 'gulp';
import * as gutil from 'gulp-util';
import * as ts from 'gulp-typescript';
const yaml = require('gulp-yaml');
const sourcemaps = require('gulp-sourcemaps');
import tslint from 'gulp-tslint';
const cssnano = require('gulp-cssnano');
@@ -50,7 +49,6 @@ gulp.task('build:copy:views', () =>
gulp.task('build:copy', gulp.parallel('build:copy:views', () =>
gulp.src([
'./build/Release/crypto_key.node',
'./src/const.json',
'./src/server/web/views/**/*',
'./src/**/assets/**/*',
@@ -121,17 +119,11 @@ gulp.task('copy:client', () =>
])
.pipe(isProduction ? (imagemin as any)() : gutil.noop())
.pipe(rename(path => {
path.dirname = path.dirname.replace('assets', '.');
path.dirname = path.dirname!.replace('assets', '.');
}))
.pipe(gulp.dest('./built/client/assets/'))
);
gulp.task('locales', () =>
gulp.src('./locales/*.yml')
.pipe(yaml({ schema: 'DEFAULT_SAFE_SCHEMA' }))
.pipe(gulp.dest('./built/client/assets/locales/'))
);
gulp.task('doc', () =>
gulp.src('./src/docs/**/*.styl')
.pipe(stylus())
@@ -149,7 +141,6 @@ gulp.task('build', gulp.parallel(
'build:ts',
'build:copy',
'build:client',
'locales',
'doc'
));
+1 -1
View File
@@ -1 +1 @@
require('./built');
require('./built').default();
-1668
View File
File diff suppressed because it is too large Load Diff
+1248
View File
File diff suppressed because it is too large Load Diff
+1896
View File
File diff suppressed because it is too large Load Diff
+235 -1148
View File
File diff suppressed because it is too large Load Diff
+488 -277
View File
File diff suppressed because it is too large Load Diff
+391 -932
View File
File diff suppressed because it is too large Load Diff
+400 -280
View File
File diff suppressed because it is too large Load Diff
+45 -17
View File
@@ -5,22 +5,50 @@
const fs = require('fs');
const yaml = require('js-yaml');
const langs = ['de-DE', 'en-US', 'fr-FR', 'ja-JP', 'ja-KS', 'pl-PL', 'es-ES', 'nl-NL', 'zh-CN', 'ko-KR'];
const merge = (...args) => args.reduce((a, c) => ({
...a,
...c,
...Object.entries(a)
.filter(([k]) => c && typeof c[k] === 'object')
.reduce((a, [k, v]) => (a[k] = merge(v, c[k]), a), {})
}), {});
const loadLocale = lang => yaml.safeLoad(fs.readFileSync(`${__dirname}/${lang}.yml`, 'utf-8'));
const locales = langs
.map(lang => [lang, loadLocale(lang)])
.map(([lang, locale], _, locales) => {
switch (lang) {
case 'ja-JP': return [lang, locale];
case 'en-US': return [lang, { ...locales['ja-JP'], ...locale }];
default: return [lang, {
...(lang.startsWith('ja-') ? {} : locales['en-US']),
...locales['ja-JP'],
...locale
}];
const languages = [
'cs-CZ',
'da-DK',
'de-DE',
'en-US',
'es-ES',
'fr-FR',
'ja-JP',
'ja-KS',
'ko-KR',
'nl-NL',
'pl-PL',
'zh-CN',
'zh-TW',
];
const primaries = {
'en': 'US',
'ja': 'JP',
'zh': 'CN',
};
const locales = languages.reduce((a, c) => (a[c] = yaml.safeLoad(fs.readFileSync(`${__dirname}/${c}.yml`, 'utf-8')) || {}, a), {});
module.exports = Object.entries(locales)
.reduce((a, [k ,v]) => (a[k] = (() => {
const [lang] = k.split('-');
switch (k) {
case 'ja-JP': return v;
case 'ja-KS':
case 'en-US': return merge(locales['ja-JP'], v);
default: return merge(
locales['ja-JP'],
locales['en-US'],
locales[`${lang}-${primaries[lang]}`] || {},
v
);
}
})
.map(([lang, locale]) => ({ [lang]: loadLocale(lang) }));
module.exports = locales.reduce((a, b) => ({ ...a, ...b }));
})(), a), {});
+1 -1664
View File
File diff suppressed because it is too large Load Diff
+541 -269
View File
File diff suppressed because it is too large Load Diff
+82 -474
View File
@@ -1,7 +1,6 @@
---
meta:
lang: "日本語 (関西弁)"
divider: ""
common:
misskey: "A ⭐ of fediverse"
about-title: "A ⭐ of fediverse."
@@ -28,16 +27,6 @@ common:
load-more: "もっとあらへんのか!"
enter-password: "パスワードを入れてや"
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: "カスタマイズのヒント"
@@ -67,14 +56,12 @@ common:
drive: "ドライブ"
messaging: "トーク"
home: "ホーム"
deck: "デッキ"
timeline: "タイムライン"
explore: "みつける"
following: "フォロー中"
following: "フォローしとる"
followers: "フォロワー"
empty-timeline-info:
follow-users-to-make-your-timeline: "ユーザーをフォローすると投稿がタイムラインに表示されます。"
explore: "ユーザーを探索する"
favorites: "お気に入り"
permissions:
"write:votes": "投票する"
weekday-short:
sunday: "日"
monday: "月"
@@ -120,53 +107,25 @@ common:
d: "言うときたいことは?"
e: "ここに書いてや"
f: "あんさんが書くんを待っちょります..."
_settings:
profile: "プロフィール"
notification: "通知"
tags: "ハッシュタグ"
blocking: "ブロック"
password: "パスワード"
other: "その他"
timeline: "タイムライン"
search: "検索"
delete: "削除"
loading: "読み込み中"
ok: "おk"
cancel: "やめる"
update-available-title: "更新があんで"
update-available: "Misskeyの新しいバージョンがあんで({newer}。現在{current}をつこてるわ)。ページを再度読み込みしたると更新が適用されるわ。"
my-token-regenerated: "あんさんのトークンが更新されたらしいわ。すまんがとりあえずサインアウトすんで。"
i-like-sushi: "寿司(のほうがプリンよりむしろ)ウマい、タコ焼きはあらへんけど。"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示や!"
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "アメちゃん付きアカウント"
disable-animated-mfm: "投稿内のちょろちょろ動いてんのを止める"
disable-showing-animated-images: "アニメーション画像を再生しない"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
always-show-nsfw: "閲覧注意?見せたらあかん?そんなん知らんわ、見せろや!"
always-mark-nsfw: "わからんからとりあえずメディアは見せたらあかん"
show-full-acct: "ユーザー名のホストも出したる"
show-via: "viaを見せる"
reduce-motion: "UI、動き過ぎや、静かにしてや"
this-setting-is-this-device-only: "このデバイスのみ"
use-os-default-emojis: "OSにもとから入っとる絵文字使う"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
hide-password: "パスワードを隠す"
show-password: "パスワードを表示する"
enter-username: "ユーザー名を入力してや"
do-not-use-in-production: "開発ビルドや。本番環境で使わんといて!知らんで!"
user-suspended: "このユーザーは凍結されています。"
is-remote-user: "このユーザー情報は不正確な可能性があります。"
is-remote-post: "この投稿情報はコピーです。"
view-on-remote: "ちゃんとした情報見せてや!"
renoted-by: "{user}がRenote"
no-notes: "投稿がありません"
turn-on-darkmode: "闇に飲まれる"
turn-off-darkmode: "光あれ"
deck-column-align: "デッキのカラムの配置"
deck-column-align-center: "中央"
deck-column-align-left: "左"
deck-column-align-flexible: "フレキシブル"
deck-column-width: "デッキのカラムの幅"
deck-column-width-narrow: "狭"
deck-column-width-narrower: "やや狭"
deck-column-width-normal: "普通"
deck-column-width-wider: "やや広"
deck-column-width-wide: "広"
error:
title: "問題が起こったわ"
retry: "もっぺん"
@@ -205,19 +164,10 @@ common:
hashtags: "ハッシュタグ"
dev: "アプリの作成あかんかったわ。もっぺんやってみて。"
ai-chan-kawaii: "藍ちゃめっさべっぴんさんや"
you: "あなた"
you: "あんさん"
auth/views/form.vue:
share-access: "あんたのアカウントに<i>{name}</i>がアクセスしようとしてるで?ええか?"
permission-ask: "このアプリは次の権限を要求してんで:"
account-read: "アカウントの情報を見させてもらうで。"
account-write: "アカウントの情報を操作させてもらうで。"
note-write: "投稿させてもらうで。"
like-write: "いいねしたりいいね解除させてもらうで。"
following-write: "フォローしたりフォロー解除させてもらうで。"
drive-read: "ドライブを見させてもらうで。"
drive-write: "ドライブを操作させてもらうで。"
notification-read: "通知を見させてもらうで。"
notification-write: "通知を操作させてもらうで。"
cancel: "やめとくわ"
accept: "アクセスを許可や!"
auth/views/index.vue:
@@ -231,16 +181,7 @@ auth/views/index.vue:
error: "セッションが存在してへん。"
sign-in: "サインインしてや"
common/views/pages/explore.vue:
verified-users: "公式アカウント"
popular-users: "人気のユーザー"
recently-updated-users: "最近投稿したユーザー"
recently-registered-users: "新規ユーザー"
popular-tags: "人気のタグ"
federated: "連合"
explore: "{host}を探索"
users-info: "現在{users}ユーザーが登録されています"
common/views/components/user-list.vue:
no-users: "ユーザーがいません"
common/views/components/games/reversi/reversi.vue:
matching:
waiting-for: "{}を待っとります"
@@ -312,7 +253,6 @@ common/views/components/media-banner.vue:
sensitive: "見せたらあかん"
click-to-show: "押してみ、見せたるわ"
common/views/components/theme.vue:
theme: "テーマ"
light-theme: "ナイトゲームちゃう時のテーマどないする?"
dark-theme: "ナイトゲームの時のテーマどないする?"
light-themes: "デイゲーム"
@@ -329,7 +269,6 @@ common/views/components/theme.vue:
base-theme: "この色が背景や!"
base-theme-light: "Light"
base-theme-dark: "Dark"
find-more-theme: "その他のテーマを入手"
theme-name: "テーマ名"
preview-created-theme: "試してみる"
invalid-theme: "このテーマあかんわ、なんか間違うとる"
@@ -351,25 +290,20 @@ common/views/components/theme.vue:
common/views/components/cw-button.vue:
hide: "もうええわ"
show: "見たいやろ?"
chars: "{count}文字"
files: "{count}ファイル"
poll: "アンケート"
common/views/components/messaging.vue:
search-user: "ユーザーを探す"
you: "あんさん"
no-history: "履歴はあらへんで"
user: "ユーザー"
common/views/components/messaging-room.vue:
empty: "このユーザーと話したことはあらへんで"
no-history: "これより過去の履歴はあらへんで"
resize-form: "ドラッグしてフォームの広さを調整"
new-message: "新しいメッセージがあるで"
only-one-file-attached: "メッセージに添付できんのはひとつのファイルのみやで"
common/views/components/messaging-room.form.vue:
input-message-here: "ここにメッセージ書いてや"
send: "送信"
attach-from-local: "PCからファイルを添付する"
attach-from-drive: "ドライブからファイルを添付する"
only-one-file-attached: "メッセージに添付できんのはひとつのファイルのみやで"
common/views/components/messaging-room.message.vue:
is-read: "既読"
deleted: "このメッセージは削除されたわ"
@@ -383,38 +317,22 @@ common/views/components/nav.vue:
develop: "開発者"
feedback: "フィードバック"
common/views/components/note-menu.vue:
mention: "メンション"
detail: "もっと"
copy-content: "内容をコピー"
copy-link: "リンクをコピー"
favorite: "お気に入り"
unfavorite: "お気に入りやめる"
watch: "ウォッチ"
unwatch: "ウォッチ解除"
pin: "ピン留め"
unpin: "ピン留めやめる"
delete: "ほかす"
delete-confirm: "この投稿を削除してもええか?"
remote: "投稿元に行ってみよか"
common/views/components/user-menu.vue:
mention: "メンション"
mute: "ミュート"
unmute: "ミュート解除"
block: "ブロック"
unblock: "ブロック解除"
push-to-list: "リストに追加"
select-list: "リストを選択してください"
report-abuse: "スパムを報告"
report-abuse-detail: "どのような迷惑行為を行っていますか?"
report-abuse-reported: "管理者に報告されました。ご協力ありがとうございました。"
silence: "サイレンス"
unsilence: "サイレンス解除"
suspend: "凍結"
unsuspend: "凍結解除"
common/views/components/poll.vue:
vote-to: "「{}」に投票や!"
vote-count: "{}票"
total-users: "{}人が投票"
vote: "投票するで"
show-result: "結果を見よか"
voted: "投票済みや"
@@ -424,6 +342,7 @@ common/views/components/poll-editor.vue:
remove: "この選択肢を消すで"
add: "+選択肢を追加"
destroy: "アンケートをほかそ"
day: "日"
common/views/components/reaction-picker.vue:
choose-reaction: "リアクション、どれにするんや?"
common/views/components/emoji-picker.vue:
@@ -478,11 +397,6 @@ common/views/components/stream-indicator.vue:
connected: "つないだわ"
common/views/components/notification-settings.vue:
title: "通知"
mark-as-read-all-notifications: "すべての通知を既読にする"
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
auto-watch: "投稿の自動ウォッチ"
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
common/views/components/integration-settings.vue:
title: "サービス連携"
connect: "つなげる"
@@ -532,7 +446,6 @@ common/views/components/profile-editor.vue:
account: "アカウント"
location: "場所"
description: "自己紹介"
you-can-include-hashtags: "ハッシュタグを含めることができます。"
language: "言語"
birthday: "誕生日"
avatar: "アイコン"
@@ -541,7 +454,6 @@ common/views/components/profile-editor.vue:
is-bot: "このアカウントはBotやで"
is-locked: "他人のフォローは許可してからや!"
careful-bot: "Botからのフォローだけは許可制や"
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
advanced: "その他"
privacy: "プライバシーってなんや?オカンの年齢か?"
save: "保存"
@@ -553,23 +465,23 @@ common/views/components/profile-editor.vue:
email-verified: "このメールアドレスOKや!"
email-not-verified: "メールアドレスが確認されとらん。メールボックスもっぺん見てくれへん?"
export: "エクスポート"
import: "インポート"
export-targets:
all-notes: "すべての投稿データ"
following-list: "フォロー"
mute-list: "ミュート"
blocking-list: "ブロック"
export-requested: "エクスポートをリクエストしました。これには時間がかかる場合があります。エクスポートが終わると、ドライブにファイルが追加されます。"
enter-password: "パスワードを入力してください"
danger-zone: "危険な設定"
delete-account: "アカウントを削除"
account-deleted: "アカウントが削除されました。データが消えるまで時間がかかる場合があります。"
user-lists: "リスト"
enter-password: "パスワードを入れてや"
common/views/components/user-list-editor.vue:
users: "ユーザー"
rename: "リスト名を変更"
delete: "リストを削除"
remove-user: "このリストから削除"
delete-are-you-sure: "リスト「$1」を削除しますか?"
deleted: "削除しました"
add-user: "ユーザー増やす"
common/views/components/user-group-editor.vue:
invite: "招待"
common/views/components/user-lists.vue:
user-lists: "リスト"
list-name: "リスト名"
common/views/components/user-groups.vue:
invites: "招待"
common/views/widgets/broadcast.vue:
fetching: "見てみるわ…"
no-broadcasts: "お知らせはあらへんで"
@@ -619,11 +531,8 @@ common/views/widgets/tips.vue:
tips-line19: "いくつかのウィンドウはブラウザの外に切り離すことができんで"
tips-line20: "カレンダーウィジェットのパーセンテージは、経過の割合を示してんねん"
tips-line21: "APIをつこてbotの開発なども行えるで"
tips-line23: "藍かわいいよ藍"
tips-line24: "Misskeyは2014年にサービスを開始したんよ"
tips-line25: "対応ブラウザやったらMisskeyを開いとらんでも通知を受け取れんで"
common/views/pages/not-found.vue:
page-not-found: "ページが見つかりませんでした"
common/views/pages/follow.vue:
signed-in-as: "{}としてサインイン中"
following: "フォローしとる"
@@ -631,6 +540,8 @@ common/views/pages/follow.vue:
request-pending: "フォローの許し待っとる"
follow-processing: "今フォロー処理やっとる‥"
follow-request: "フォロー許してくれや!言うてみる"
common/views/pages/follow-requests.vue:
received-follow-requests: "フォロー許してくれや!言うてみる"
desktop:
banner-crop-title: "どこバナーとして出す?"
banner: "バナー"
@@ -740,22 +651,16 @@ desktop/views/components/home.vue:
desktop/views/input-dialog.vue:
cancel: "やめとくわ"
ok: "これや!"
desktop/views/components/messaging-room-window.vue:
title: "メッセージ:"
desktop/views/components/messaging-window.vue:
title: "メッセージ"
desktop/views/components/note-detail.vue:
private: "この投稿は見せられへんわ"
deleted: "この投稿なんか無くなってもうたわ"
location: "ここおるで:"
renote: "Renote"
add-reaction: "リアクション"
undo-reaction: "リアクション解除"
desktop/views/components/note.vue:
reply: "返す"
renote: "Renote"
add-reaction: "リアクション"
undo-reaction: "リアクション解除"
detail: "もっと"
private: "この投稿は見せられへんわ"
deleted: "この投稿なんか無くなってもうたわ"
@@ -782,8 +687,6 @@ desktop/views/components/post-form.vue:
posting: "投稿中"
attach-media-from-local: "PCからメディア持ってくる"
attach-media-from-drive: "ドライブからメディア持ってくる"
attach-cancel: "くっつけるのやめよか"
insert-a-kao: "v('ω')v"
create-poll: "アンケートを作成"
text-remain: "残り{}文字"
recent-tags: "最近のタグ"
@@ -814,82 +717,6 @@ desktop/views/components/renote-form-window.vue:
desktop/views/pages/user-following-or-followers.vue:
following: "{user}のフォロー"
followers: "{user}のフォロワー"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue:
profile: "プロフィール"
notification: "通知"
apps: "アプリ"
tags: "ハッシュタグ"
mute-and-block: "ミュート/ブロック"
blocking: "ブロック"
security: "セキュリティ"
signin: "ログイン履歴"
password: "パスワード"
other: "その他"
license: "ライセンス"
theme: "テーマ"
behaviour: "動き"
fetch-on-scroll: "スクロールしたらもっと見せてや"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動でもっとコンテンツを読み込むで。"
note-visibility: "投稿の公開範囲"
default-note-visibility: "もとからの公開範囲"
remember-note-visibility: "投稿の公開範囲おぼえといて"
web-search-engine: "ウェブ検索エンジン"
web-search-engine-desc: "例: https://www.google.com/?#q?{{query}}"
auto-popout: "ウィンドウの自動ポップアウト"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトすんで。この設定はブラウザに記憶されんで。"
keep-cw: "CW保持"
keep-cw-desc: "投稿にリプライする際、リプライ元の投稿にCWが設定されていたとき、デフォルトで同じCWを設定するようにします。"
display: "見た感じ"
wallpaper: "壁紙"
choose-wallpaper: "壁紙選ぶ"
delete-wallpaper: "壁紙ほかす"
post-form-on-timeline: "タイムラインの上の方で投稿できるようにせえへん?"
show-clock-on-header: "右上をカリヨン広場にする(時計表示)"
show-reply-target: "どこにリプライするんや見せて"
timeline: "タイムライン"
show-my-renotes: "わしのRenoteもタイムライン載せてくれや"
show-renoted-my-notes: "わしのRenoteもタイムライン載せてくれや"
show-local-renotes: "ローカル投稿のRenoteも見たいんや"
show-maps: "地図勝手にバァーって開いてくれ"
remain-deleted-note: "削除された投稿も表示しっぱなしにする"
sound: "サウンド"
enable-sounds: "サウンド鳴らす"
enable-sounds-desc: "投稿やメッセージもろたとき、音鳴らしたるわ。大丈夫や、この設定はブラウザが覚えてくれとる。"
volume: "ボリューム"
test: "テスト"
cache: "キャッシュ"
clean-cache: "お掃除"
cache-warn: "お掃除するとな、ブラウザが覚えてくれとるアカウントのあれこれや書きかけの投稿・返信・メッセージや設定情報なんかのデータが全部飛んでいくんや。これやったらページ再読込しといてな。"
cache-cleared: "キャッシュお掃除したで"
cache-cleared-desc: "もっぺんページ読みこみ直してくれや"
about: "Misskeyってなんや?"
operator: "このサーバー誰のや"
update: "Misskey Update"
version: "バージョン:"
latest-version: "最新のバージョン:"
update-checking: "アップデートはあらへんか……"
do-update: "アップデートあるか見てみる"
update-settings: "もっと設定"
prevent-update: "アップデートしたないわ、また今度や(やめときや)"
prevent-update-desc: "この設定をオンにしとってもアップデートが反映される場合があるかも分からん、知らんけど気ぃつけてや。この設定はこのデバイスのみ有効やで。"
no-updates: "使える更新はあらへん"
no-updates-desc: "つこてるMisskeyは最新や!"
update-available: "新しいバージョンが利用可能や"
update-available-desc: "ページを再度読み込みすると更新が適用されるで。"
advanced-settings: "ワイにはわからん設定"
debug-mode: "デバッグモードにしてみる"
debug-mode-desc: "この設定はブラウザに記憶されんで。"
experimental: "お試し機能使うてみる"
experimental-desc: "実験的機能を有効にするとMisskeyの動作が不安定になるかも分からん、知らんけど気ぃつけてや。この設定はブラウザに記憶されんで。"
tools: "ツール"
task-manager: "タスクマネージャ"
third-parties: "サードパーティ"
navbar-position: "ナビゲーションバーの位置"
navbar-position-top: "上"
navbar-position-left: "左"
navbar-position-right: "右"
desktop/views/components/settings.2fa.vue:
intro: "二段階認証を設定すると、サインイン時にパスワードだけとちゃうくて、予め登録しておいた物理的なデバイス(例えばあんさんのスマートフォンなど)も必要になり、よりセキュリティが向上すんで。"
detail: "詳細..."
@@ -910,8 +737,8 @@ desktop/views/components/settings.2fa.vue:
failed: "なんか設定に失敗したで。トークンを間違えとらんか確認してや。"
info: "次のサインインからは、パスワードに加えてデバイスに出とるトークンを入力してな。"
common/views/components/media-image.vue:
sensitive: "閲覧注意"
click-to-show: "クリックして表示"
sensitive: "ちょっと見せられへんわ"
click-to-show: "クリックして見せるで"
common/views/components/api-settings.vue:
intro: "API使うんやったらこのトークンを「i」っちゅうパラメータにくっつけてリクエストできるで。"
caution: "アカウント勝手にいじられるかも知れんから、このトークンは教えたらあかんし、アプリにも書いたらあかんで(これはフリちゃうで)"
@@ -950,26 +777,23 @@ common/views/components/password-settings.vue:
enter-new-password-again: "もっぺん入れてや"
not-match: "パスワードがおうとらん"
changed: "パスワード変えたわ"
failed: "パスワード変更に失敗しました"
common/views/components/post-form-attaches.vue:
mark-as-sensitive: "見たらあかん感じにしとく"
unmark-as-sensitive: "やっぱ見せたるわ"
desktop/views/components/sub-note-content.vue:
private: "この投稿は見せられへんわ"
deleted: "この投稿なんか無くなってもうたわ"
media-count: "{}つのメディア"
poll: "アンケート"
desktop/views/components/settings.tags.vue:
title: "タグ"
query: "クエリ (省略可)"
add: "追加"
add: "増やす"
save: "保存"
desktop/views/components/taskmanager.vue:
title: "タスクマネージャ"
desktop/views/components/timeline.vue:
home: "ホーム"
local: "ローカル"
hybrid: "ソーシャル"
global: "グローバル"
mentions: "あんた宛て"
messages: "メッセージ"
messages: "ダイレクト投稿"
list: "リスト"
hashtag: "ハッシュタグ"
add-tag-timeline: "ハッシュタグ増やす"
@@ -980,11 +804,9 @@ desktop/views/components/ui.header.vue:
adjective: "はん"
desktop/views/components/ui.header.account.vue:
profile: "プロフィール"
favorites: "お気に入り"
lists: "リスト"
follow-requests: "フォロー許してくれや!言うてみる"
admin: "管理"
settings: "設定"
desktop/views/components/ui.header.nav.vue:
game: "ゲーム"
desktop/views/components/ui.header.notifications.vue:
@@ -993,14 +815,6 @@ desktop/views/components/ui.header.post.vue:
post: "新規投稿"
desktop/views/components/ui.header.search.vue:
placeholder: "検索"
desktop/views/components/received-follow-requests-window.vue:
title: "フォロー許してくれや!言うてみる"
accept: "許す"
reject: "許さん"
desktop/views/components/user-lists-window.vue:
title: "リスト"
create-list: "新しいリストを作成"
list-name: "リスト名"
desktop/views/components/user-preview.vue:
notes: "投稿"
following: "フォロー"
@@ -1022,9 +836,6 @@ admin/views/index.vue:
users: "ユーザー"
federation: "連合"
announcements: "知っといてや"
hashtags: "ハッシュタグ"
abuse: "スパム報告"
queue: "ジョブキュー"
back-to-misskey: "Misskeyに戻る"
admin/views/dashboard.vue:
dashboard: "ダッシュボード"
@@ -1034,14 +845,8 @@ admin/views/dashboard.vue:
instances: "インスタンス"
this-instance: "ワイのインスタンス"
federated: "連合"
admin/views/queue.vue:
operation: "操作"
remove-all-jobs: "すべてのジョブをクリア"
admin/views/abuse.vue:
title: "スパム報告"
target: "対象"
reporter: "報告者"
details: "詳細"
details: "もっと"
remove-report: "削除"
admin/views/instance.vue:
instance: "インスタンス"
@@ -1049,13 +854,13 @@ admin/views/instance.vue:
instance-description: "インスタンスの紹介"
host: "ホスト"
banner-url: "バナー画像URL"
error-image-url: "エラー画像URL"
languages: "インスタンスの対象言語"
languages-desc: "スペースで区切って複数設定できるで。"
maintainer-config: "管理者情報"
maintainer-name: "管理者名"
maintainer-email: "管理者の連絡先"
drive-config: "ドライブの設定"
object-storage-endpoint: "エンドポイント"
cache-remote-files: "リモートのファイルをキャッシュする"
cache-remote-files-desc: "この設定を無効にすると、リモートファイルをこっちで保管せずに直接リンク張るようになるで。サーバーのストレージは軽くやろうけど、プライバシー設定で直リンクを向こうにしとるユーザーはファイルが見れへんし、サムネイルが無いから通信量が増えたりするから、普通はオンにしといてな。"
local-drive-capacity-mb: "ローカルユーザーひとりあたりのドライブ容量"
@@ -1064,8 +869,7 @@ admin/views/instance.vue:
recaptcha-config: "reCAPTCHAの設定"
recaptcha-info: "reCAPTCHAを有効にするにはreCAPTCHAトークンが要るで。https://www.google.com/recaptcha/intro/ にアクセスしてトークンを取得してな。"
enable-recaptcha: "reCAPTCHAを有効にする"
recaptcha-site-key: "reCAPTCHA site key"
recaptcha-secret-key: "reCAPTCHA secret key"
recaptcha-preview: "試してみる"
twitter-integration-config: "Twitter連携の設定"
twitter-integration-info: "コールバックURLは {url} に設定してや。"
enable-twitter-integration: "Twitter連携を有効にする"
@@ -1089,17 +893,9 @@ admin/views/instance.vue:
max-note-text-length: "投稿の最大文字数"
disable-registration: "ユーザー登録の受付を止める"
disable-local-timeline: "ローカルタイムラインを使えんようにする"
disable-global-timeline: "グローバルタイムラインを無効にする"
disabling-timelines-info: "これらのタイムラインを無効にしても、管理者およびモデレーターは引き続き利用できます。"
invite: "来てや"
save: "保存"
saved: "保存したで!"
user-recommendation-config: "このユーザーええで"
enable-external-user-recommendation: "外部ユーザーレコメンデーションを使えるようにする"
external-user-recommendation-engine: "エンジン"
external-user-recommendation-engine-desc: "例: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
external-user-recommendation-timeout: "タイムアウト"
external-user-recommendation-timeout-desc: "ミリ秒単位 (例: 300000)"
email-config: "メールサーバーの設定"
email-config-info: "メールアドレス確認やパスワードリセットの際に使うで。"
enable-email: "メール配信を有効にする"
@@ -1108,15 +904,8 @@ admin/views/instance.vue:
smtp-secure-info: "STARTTLS使用時はオフにします。"
smtp-host: "SMTPホスト"
smtp-port: "SMTPポート"
smtp-auth: "SMTP認証を行う"
smtp-user: "SMTPユーザー"
smtp-pass: "SMTPパスワード"
serviceworker-config: "ServiceWorker"
enable-serviceworker: "ServiceWorkerを有効にする"
serviceworker-info: "プッシュ通知を行うには有効する必要があります。"
vapid-publickey: "VAPID公開鍵"
vapid-privatekey: "VAPID秘密鍵"
vapid-info: "ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります。シェルで次のようにします:"
admin/views/charts.vue:
title: "チャート"
per-day: "1日ごと"
@@ -1135,7 +924,6 @@ admin/views/charts.vue:
notes-total: "投稿の積算"
users: "ユーザーの増減"
users-total: "ユーザーの積算"
active-users: "アクティブユーザー数"
drive: "ドライブ使用量の増減"
drive-total: "ドライブ使用量の積算"
drive-files: "ドライブのファイル数の増減"
@@ -1145,171 +933,64 @@ admin/views/charts.vue:
network-usage: "通信量"
admin/views/drive.vue:
operation: "操作"
fileid-or-url: "ファイルIDまたはファイルURL"
file-not-found: "ファイルが見つかりません"
lookup: "照会"
sort:
title: "ソート"
createdAtAsc: "アップロード日時が古い順"
createdAtDesc: "アップロード日時が新しい順"
sizeAsc: "サイズが小さい順"
sizeDesc: "サイズが大きい順"
origin:
title: "オリジン"
combined: "ローカル+リモート"
local: "ローカル"
remote: "リモート"
delete: "削除"
deleted: "削除しました"
mark-as-sensitive: "閲覧注意に設定"
unmark-as-sensitive: "閲覧注意を解除"
marked-as-sensitive: "閲覧注意に設定しました"
unmarked-as-sensitive: "閲覧注意を解除しました"
mark-as-sensitive: "見たらあかん感じにしとく"
unmark-as-sensitive: "やっぱ見せたるわ"
admin/views/users.vue:
operation: "操作"
username-or-userid: "ユーザー名またはユーザーID"
user-not-found: "ユーザーが見つからへん!"
lookup: "照会"
reset-password: "パスワードをリセット"
reset-password-confirm: "パスワードをリセットしますか?"
password-updated: "パスワードは現在「{password} 」やで"
suspend: "凍結"
suspend-confirm: "凍結しますか?"
suspended: "凍結しました"
unsuspend: "凍結の解除"
unsuspend-confirm: "凍結を解除しますか?"
unsuspended: "凍結を解除しました"
make-silence: "サイレンス"
unmake-silence: "サイレンスの解除"
verify: "公式アカウントにする"
verify-confirm: "公式アカウントにしますか?"
verified: "公式アカウントにしました"
unverify: "公式アカウントを解除する"
unverify-confirm: "公式アカウントを解除しますか?"
unverified: "公式アカウントを解除しました"
update-remote-user: "リモートユーザー情報の更新"
remote-user-updated: "リモートユーザー情報を更新しました"
users:
title: "ユーザー"
sort:
title: "ソート"
createdAtAsc: "登録日時が古い順"
createdAtDesc: "登録日時が新しい順"
updatedAtAsc: "更新日時が古い順"
updatedAtDesc: "更新日時が新しい順"
state:
title: "状態"
all: "すべて"
admin: "管理者"
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
silenced: "サイレンス済み"
suspended: "凍結済み"
origin:
title: "オリジン"
combined: "ローカル+リモート"
local: "ローカル"
remote: "リモート"
createdAt: "登録日時"
updatedAt: "更新日時"
admin/views/moderators.vue:
add-moderator:
title: "モデレーターの登録"
add: "登録"
added: "モデレーターを登録しました"
remove: "解除"
removed: "モデレーター登録を解除しました"
admin/views/emoji.vue:
add-emoji:
title: "絵文字の登録"
name: "絵文字名"
name-desc: "a~z 0~9 _ の文字が使えます。"
aliases: "エイリアス"
aliases-desc: "スペースで区切って複数設定できます。"
url: "絵文字画像URL"
add: "追加"
info: "50KB以下のPNG画像をおすすめします。"
added: "絵文字を登録しました"
add: "増やす"
emojis:
title: "絵文字一覧"
update: "更新"
remove: "削除"
updated: "更新しました"
remove-emoji:
are-you-sure: "「$1」を削除しますか?"
removed: "削除しました"
admin/views/announcements.vue:
announcements: "お知らせ"
announcements: "知っときや"
save: "保存"
remove: "削除"
add: "追加"
title: "タイトル"
text: "内容"
saved: "保存しました"
_remove:
are-you-sure: "「$1」を削除しますか?"
removed: "削除しました"
admin/views/hashtags.vue:
hided-tags: "Hidden Tags"
add: "増やす"
saved: "保存したで!"
admin/views/federation.vue:
federation: "連合"
instance: "インスタンス"
host: "ホスト"
notes: "投稿"
users: "ユーザー"
following: "フォロー"
following: "フォローしとる"
followers: "フォロワー"
status: "ステータス"
latest-request-sent-at: "直近のリクエスト送信"
latest-request-received-at: "直近のリクエスト受信"
remove-all-following: "フォローを全解除"
remove-all-following-info: "{host}からのフォローをすべて解除します。そのインスタンスがもう存在しなくなった場合などに実行してください。"
block: "ブロック"
marked-as-closed: "閉鎖されているとマーク"
lookup: "照会"
instances: "インスタンス"
instance-not-registered: "そのインスタンスは登録されていません"
sort: "ソート"
sorts:
caughtAtAsc: "登録日時が古い順"
caughtAtDesc: "登録日時が新しい順"
lastCommunicatedAtAsc: "最後にやり取りした日時が古い順"
lastCommunicatedAtDesc: "最後にやり取りした日時が新しい順"
notesAsc: "投稿が少ない順"
notesDesc: "投稿が多い順"
usersAsc: "ユーザーが少ない順"
usersDesc: "ユーザーが多い順"
followingAsc: "フォローが少ない順"
followingDesc: "フォローが多い順"
followersAsc: "フォロワーが少ない順"
followersDesc: "フォロワーが多い順"
driveUsageAsc: "ドライブ使用量が少ない順"
driveUsageDesc: "ドライブ使用量が多い順"
driveFilesAsc: "ドライブのファイル数が少ない順"
driveFilesDesc: "ドライブのファイル数が多い順"
state: "状態"
instances: "連合"
states:
all: "すべて"
blocked: "ブロック"
not-responding: "応答なし"
marked-as-closed: "閉鎖とマーク済み"
result-is-truncated: "上位{n}件を表示しています。"
charts: "チャート"
chart-srcs:
requests: "リクエスト"
users: "ユーザーの増減"
users-total: "ユーザーの積算"
notes: "投稿の増減"
notes-total: "投稿の積算"
ff: "フォロー/フォロワーの増減"
ff-total: "フォロー/フォロワーの積算"
drive-usage: "ドライブ使用量の増減"
drive-usage-total: "ドライブ使用量の積算"
drive-files: "ドライブファイル数の増減"
drive-files-total: "ドライブファイル数の積算"
chart-spans:
hour: "1時間ごと"
day: "1日ごと"
blocked-hosts: "ブロック"
desktop/views/pages/welcome.vue:
about: "もうちょい……"
timeline: "タイムライン"
@@ -1329,11 +1010,6 @@ desktop/views/pages/selectdrive.vue:
upload: "PCからドライブにファイル上げる"
desktop/views/pages/search.vue:
not-available: "検索機能は使えへんわ。管理者がそう言うとる。"
not-found: "「{q}」に関する投稿は見つかりませんでした。"
desktop/views/pages/share.vue:
share-with: "{name}で共有"
desktop/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿は見つかりませんでした。"
desktop/views/pages/user-list.users.vue:
users: "ユーザー"
add-user: "ユーザー増やす"
@@ -1355,22 +1031,17 @@ desktop/views/pages/user/user.header.vue:
following: "フォロー"
followers: "フォロワー"
is-bot: "このアカウントはBotや"
no-description: "自己紹介はありません"
years-old: "{age}歳"
year: "年"
month: "月"
day: "日"
follows-you: "フォローされています"
follows-you: "フォローされとるで"
desktop/views/pages/user/user.timeline.vue:
default: "投稿"
with-replies: "投稿と返信"
with-media: "メディア"
my-posts: "私の投稿"
desktop/views/widgets/messaging.vue:
title: "メッセージ"
desktop/views/widgets/notifications.vue:
title: "通知"
settings: "通知の設定"
desktop/views/widgets/polls.vue:
title: "アンケート"
refresh: "他を見る"
@@ -1396,10 +1067,7 @@ mobile/views/components/drive.vue:
file-count: "ファイル"
nothing-in-drive: "ドライブには何もあらへんで。"
folder-is-empty: "このフォルダ何もないわ"
prompt: "何すんの?(数字を入れてや): <1 → ファイルをアップロード | 2 → ファイルをURLでアップロード | 3 → フォルダ作成 | 4 → このフォルダ名を変更 | 5 → このフォルダを移動 | 6 → このフォルダを削除>"
deletion-alert: "フォルダの削除は未実装やねん...。堪忍な!"
folder-name: "フォルダー名"
here-is-root: "現在いる場所はルートで、フォルダではありません。"
url-prompt: "このURLのファイルをアップロードしたいねん"
uploading: "アップロードをリクエストしたで。アップロードが完了するまで時間がかかるかも分からん、知らんけど。"
mobile/views/components/drive-file-chooser.vue:
@@ -1454,7 +1122,7 @@ mobile/views/components/post-form.vue:
quote-placeholder: "この投稿を持ってくる(オプション)"
reply-placeholder: "この投稿への返信..."
cw-placeholder: "内容への注釈 (オプション)"
location-alert: "あんさんのつことる端末は位置情報に対応しとらんみたいやわ、知らんけど。"
geolocation-alert: "あんさんのつことる端末は位置情報に対応しとらんみたいやわ、知らんけど。"
error: "エラー"
username-prompt: "ユーザー名を入力してや"
mobile/views/components/sub-note-content.vue:
@@ -1470,19 +1138,15 @@ mobile/views/components/ui.nav.vue:
notifications: "通知"
follow-requests: "フォロー許してくれや!言うてみる"
search: "検索"
favorites: "お気に入り"
user-lists: "リスト"
widgets: "ウィジェット"
game: "ゲーム"
darkmode: "ナイトゲームや"
settings: "設定"
admin: "管理"
about: "Misskeyってなんや?"
mobile/views/pages/favorites.vue:
title: "お気に入り"
mobile/views/pages/user-lists.vue:
title: "リスト"
enter-list-name: "リスト名を入力してや"
mobile/views/pages/drive.vue:
contextmenu:
upload: "ファイル上げる"
create-folder: "フォルダー作る"
mobile/views/pages/signup.vue:
lets-start: "📦 始めようや"
mobile/views/pages/followers.vue:
@@ -1492,25 +1156,19 @@ mobile/views/pages/following.vue:
mobile/views/pages/home.vue:
home: "ホーム"
local: "ローカル"
hybrid: "ソーシャル"
global: "グローバル"
mentions: "あんた宛て"
messages: "メッセージ"
messages: "ダイレクト投稿"
mobile/views/pages/tag.vue:
no-posts-found: "ハッシュタグ「{q}」が付けられた投稿はあらへんかった。"
mobile/views/pages/widgets.vue:
dashboard: "ダッシュボード"
widgets-hints: "ウィジェットを追加/削除したり並べ替えたりできます。ウィジェットを移動するには「三」をドラッグします。ウィジェットを削除するには「x」をタップします。いくつかのウィジェットはタップすることで表示を変更できます。"
add-widget: "追加"
add-widget: "増やす"
customization-tips: "カスタマイズのヒント"
mobile/views/pages/widgets/activity.vue:
activity: "やっとること"
mobile/views/pages/share.vue:
share-with: "{name}で共有"
mobile/views/pages/received-follow-requests.vue:
title: "フォロー許してくれや!"
accept: "許す"
reject: "許さん"
mobile/views/pages/note.vue:
title: "投稿"
prev: "前のやつ"
@@ -1524,43 +1182,6 @@ mobile/views/pages/selectdrive.vue:
select-file: "ファイル選んでや"
mobile/views/pages/settings.vue:
signed-in-as: "あんたは橋の下で拾った{}や!"
design: "見た感じ"
i-am-under-limited-internet: "電波と阪神がザコいんや"
timeline: "タイムライン"
show-reply-target: "どこにリプライするんや見せて"
show-my-renotes: "あんたのしたRenoteも出すで"
show-renoted-my-notes: "あんたの言うたことのRenoteも出すで"
show-local-renotes: "ローカル投稿のRenoteも出すで"
post-style: "投稿の表示スタイル"
post-style-standard: "標準"
post-style-smart: "べっぴんさん"
notification-position: "通知どこ見せる?"
notification-position-bottom: "ミナミの方"
notification-position-top: "キタの方"
behavior: "動き"
fetch-on-scroll: "スクロールしたらもっと見せてや"
keep-cw: "CW保持"
note-visibility: "投稿の公開範囲"
default-note-visibility: "もとからの公開範囲"
remember-note-visibility: "投稿の公開範囲おぼえといて"
web-search-engine: "ウェブ検索エンジン"
web-search-engine-desc: "例: https://www.google.com/?#q?{{query}}"
disable-via-mobile: "「モバイルからの投稿」フラグなんて要らんわ"
load-raw-images: "添付された画像もべっぴんさんのままにしといてな"
load-remote-media: "東京とか、リモートサーバーのメディアも見せてや"
update: "あんたのMisskeyいつのや?"
version: "バージョン:"
latest-version: "いっちゃん新しいやつ:"
update-checking: "アップデートあるか見とるで"
check-for-updates: "アップデートあるんかな?"
no-updates: "アップデートあらへんわ"
no-updates-desc: "つこてるMisskeyは最新や!"
update-available: "もっとええバージョンがあるで"
update-available-desc: "もっぺんページ読み込んだら新しなるで"
settings: "設定"
sound: "サウンド"
enable-sounds: "サウンド鳴らす"
password: "パスワード"
mobile/views/pages/user.vue:
follows-you: "フォローされとるで"
following: "フォロー"
@@ -1576,7 +1197,7 @@ mobile/views/pages/user/home.vue:
activity: "やっとること"
keywords: "キーワード"
domains: "よく出るドメイン"
frequently-replied-users: "よ話すユーザー"
frequently-replied-users: "よ話すツレ"
followers-you-know: "知っとるフォロワー"
last-used-at: "最後いつ来た?"
mobile/views/pages/user/home.photos.vue:
@@ -1585,14 +1206,12 @@ deck:
widgets: "ウィジェット"
home: "ホーム"
local: "ローカル"
hybrid: "ソーシャル"
hashtag: "ハッシュタグ"
global: "グローバル"
mentions: "あんた宛て"
direct: "ダイレクト投稿"
notifications: "通知"
list: "リスト"
select-list: "リストを選択してください"
swap-left: "左に移動や!"
swap-right: "右に移動や!"
swap-up: "上に移動や!"
@@ -1602,14 +1221,11 @@ deck:
rename: "名前を変えるで"
stack-left: "左に重ねんで!"
pop-right: "右に出すで!"
disabled-timeline:
title: "無効化されたタイムライン"
description: "サーバーの運営者により、このタイムラインは使用できない状態に設定されています。"
deck/deck.tl-column.vue:
is-media-only: "メディア投稿だけや"
edit: "オプション"
deck/deck.user-column.vue:
follows-you: "フォローされています"
follows-you: "フォローされとるで"
posts: "投稿"
following: "フォロー"
followers: "フォロワー"
@@ -1620,25 +1236,6 @@ deck/deck.user-column.vue:
docs:
edit-this-page-on-github: "間違いや改善点を見つけましたか?"
edit-this-page-on-github-link: "このページをGitHubで編集"
api:
entities:
properties: "プロパティ"
endpoints:
params: "パラメータ"
no-params: "パラメータはありません"
res: "レスポンス"
require-credential: "このエンドポイントは認証情報が必須です。"
require-permission: "このエンドポイントは{permission}の権限を必要とします。"
has-limit: "レートリミットがあります。"
duration-limit: "直近{duration}ミリ秒の間のこのエンドポイントへのリクエスト数の合計が{max}を超える場合はリクエストできません。"
min-interval-limit: "前回のリクエストから{interval}ミリ秒経っていない場合はリクエストできません。"
show-src: "このエンドポイントのソースコードも閲覧できます。"
show-src-link: "コードをGitHubで見る"
generated: "このドキュメントはAPI定義に基づき自動生成されています。"
props:
name: "名前"
type: "型"
description: "説明"
dev/views/index.vue:
manage-apps: "アプリの管理"
dev/views/apps.vue:
@@ -1649,21 +1246,32 @@ dev/views/new-app.vue:
create-app: "アプリケーション作る"
app-name: "アプリケーションの名前"
app-name-desc: "あんたのアプリの名前。"
app-name-ex: "ex) 関西ミスキー保安協会"
app-overview: "このアプリどんなん?"
app-desc: "あんたのアプリどんなんか教えて"
app-desc-ex: "ex) 関西人なら誰でも口ずさめるこのCMがついにMisskeyへ。"
callback-url: "コールバックURL (無くてもええで)"
callback-url-desc: "ユーザーが認証フォームで認証した後どこに連れてくかを設定できるで"
authority: "権限"
authority-desc: "ここにチェックした機能しかAPIからアクセスできひんから気ぃつけてな"
authority-warning: "アプリ作った後でも変えれるけど、新しいやつ追加したらそん時関連付いてるユーザーキーは全部ほかされるで。"
account-read: "アカウントの情報見せて"
account-write: "アカウントの情報いじらせて"
note-write: "投稿させて"
reaction-write: "リアクションしたりそれをキャンセルさせて"
following-write: "フォローとかフォロー解除させて"
drive-read: "ドライブ見せて"
drive-write: "ドライブいじらせて"
notification-read: "通知見せて"
notification-write: "通知いじらせて"
pages:
like: "ええやん"
blocks:
image: "画像"
post: "投稿フォーム"
script:
categories:
random: "いんじゃんほい"
list: "リスト"
blocks:
_join:
arg1: "リスト"
random: "いんじゃんほい"
_randomPick:
arg1: "リスト"
_dailyRandomPick:
arg1: "リスト"
_seedRandomPick:
arg2: "リスト"
_pick:
arg1: "リスト"
types:
array: "リスト"
+538 -261
View File
File diff suppressed because it is too large Load Diff
+149 -1181
View File
File diff suppressed because it is too large Load Diff
+114 -1274
View File
File diff suppressed because it is too large Load Diff
+168 -608
View File
File diff suppressed because it is too large Load Diff
+74 -1463
View File
File diff suppressed because it is too large Load Diff
+19 -1533
View File
File diff suppressed because it is too large Load Diff
+562 -290
View File
File diff suppressed because it is too large Load Diff
+90
View File
@@ -0,0 +1,90 @@
---
meta:
lang: "中文(繁体)"
common:
intro:
title: "什麽是 Misskey 呢?"
rich-contents: "發佈"
reaction: "回應"
drive: "雲端硬碟"
adblock:
detected: "請禁用廣告封鎖器"
close: "關閉"
enter-password: "請輸入密碼"
2fa: "雙重身份驗證"
dark-mode: "夜間模式"
signup: "註冊"
signout: "登出"
notification:
reversi-invited: "您已被邀請加入壹場遊戲"
reversi-invited-by: "來自{}的邀請"
notified-by: "來自{}的邀請"
time:
future: "未來"
just_now: "剛剛"
drive: "雲端硬碟"
weekday:
sunday: "週日"
monday: "週一"
tuesday: "週二"
wednesday: "週三"
thursday: "週四"
friday: "週五"
saturday: "週六"
reactions:
like: "贊"
love: "喜歡"
congrats: "恭喜"
_settings:
password: "密碼"
font-size: "字體大小"
font-size-x-small: "小"
font-size-small: "較小"
deck-column-width-wide: "寬"
timeline: "時間軸"
common/views/components/connect-failed.troubleshooter.vue:
flush: "清除快取"
common/views/components/theme.vue:
light-themes: "淺色主題"
dark-themes: "深色主題"
install-a-theme: "安裝主題"
save-created-theme: "保存主題"
common/views/components/signin.vue:
signin-with-twitter: "用 Twitter 帳號登入"
signin-with-github: "用 GitHub 帳號登入"
signin-with-discord: "用 Discord 帳號登入"
login-failed: "登錄失敗。 請檢查用戶名和密碼。"
common/views/components/signup.vue:
invitation-code: "邀請碼"
username: "用戶名"
available: "可用"
too-long: "請不要超過20個字元"
password: "密碼"
password-placeholder: "建議至少8個字元"
common/views/components/stream-indicator.vue:
connecting: "正在連線"
reconnecting: "正在重新連線"
connected: "已建立連線"
common/views/components/integration-settings.vue:
disconnect: "中斷連線"
common/views/components/github-setting.vue:
reconnect: "重新連線"
disconnect: "中斷連線"
common/views/components/discord-setting.vue:
reconnect: "重新連線"
disconnect: "中斷連線"
common/views/components/language-settings.vue:
recommended: "推薦"
auto: "自動"
specify-language: "指定語言"
common/views/components/profile-editor.vue:
title: "個人資料"
name: "名稱"
birthday: "生日:"
privacy: "隱私"
admin/views/dashboard.vue:
drive: "雲端硬碟"
admin/views/charts.vue:
drive: "雲端硬碟"
pages:
like: "贊"
+31
View File
@@ -0,0 +1,31 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class Pages1556348509290 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`CREATE TYPE "page_visibility_enum" AS ENUM('public', 'followers', 'specified')`);
await queryRunner.query(`CREATE TABLE "page" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, "title" character varying(256) NOT NULL, "name" character varying(256) NOT NULL, "summary" character varying(256), "alignCenter" boolean NOT NULL, "font" character varying(32) NOT NULL, "userId" character varying(32) NOT NULL, "eyeCatchingImageId" character varying(32), "content" jsonb NOT NULL DEFAULT '[]', "variables" jsonb NOT NULL DEFAULT '[]', "visibility" "page_visibility_enum" NOT NULL, "visibleUserIds" character varying(32) array NOT NULL DEFAULT '{}'::varchar[], CONSTRAINT "PK_742f4117e065c5b6ad21b37ba1f" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_fbb4297c927a9b85e9cefa2eb1" ON "page" ("createdAt") `);
await queryRunner.query(`CREATE INDEX "IDX_af639b066dfbca78b01a920f8a" ON "page" ("updatedAt") `);
await queryRunner.query(`CREATE INDEX "IDX_b82c19c08afb292de4600d99e4" ON "page" ("name") `);
await queryRunner.query(`CREATE INDEX "IDX_ae1d917992dd0c9d9bbdad06c4" ON "page" ("userId") `);
await queryRunner.query(`CREATE INDEX "IDX_90148bbc2bf0854428786bfc15" ON "page" ("visibleUserIds") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_2133ef8317e4bdb839c0dcbf13" ON "page" ("userId", "name") `);
await queryRunner.query(`ALTER TABLE "page" ADD CONSTRAINT "FK_ae1d917992dd0c9d9bbdad06c4a" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "page" ADD CONSTRAINT "FK_3126dd7c502c9e4d7597ef7ef10" FOREIGN KEY ("eyeCatchingImageId") REFERENCES "drive_file"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
}
public async down(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "page" DROP CONSTRAINT "FK_3126dd7c502c9e4d7597ef7ef10"`);
await queryRunner.query(`ALTER TABLE "page" DROP CONSTRAINT "FK_ae1d917992dd0c9d9bbdad06c4a"`);
await queryRunner.query(`DROP INDEX "IDX_2133ef8317e4bdb839c0dcbf13"`);
await queryRunner.query(`DROP INDEX "IDX_90148bbc2bf0854428786bfc15"`);
await queryRunner.query(`DROP INDEX "IDX_ae1d917992dd0c9d9bbdad06c4"`);
await queryRunner.query(`DROP INDEX "IDX_b82c19c08afb292de4600d99e4"`);
await queryRunner.query(`DROP INDEX "IDX_af639b066dfbca78b01a920f8a"`);
await queryRunner.query(`DROP INDEX "IDX_fbb4297c927a9b85e9cefa2eb1"`);
await queryRunner.query(`DROP TABLE "page"`);
await queryRunner.query(`DROP TYPE "page_visibility_enum"`);
}
}
+23
View File
@@ -0,0 +1,23 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class UserProfile1556746559567 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`UPDATE "user_profile" SET github = FALSE`);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "githubId"`);
await queryRunner.query(`ALTER TABLE "user_profile" ADD COLUMN "githubId" VARCHAR(64)`);
await queryRunner.query(`UPDATE "user_profile" SET discord = FALSE`);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "discordExpiresDate"`);
await queryRunner.query(`ALTER TABLE "user_profile" ADD COLUMN "discordExpiresDate" VARCHAR(64)`);
}
public async down(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`UPDATE "user_profile" SET github = FALSE`);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "githubId"`);
await queryRunner.query(`ALTER TABLE "user_profile" ADD COLUMN "githubId" INTEGER`);
await queryRunner.query(`UPDATE "user_profile" SET discord = FALSE`);
await queryRunner.query(`ALTER TABLE "user_profile" DROP COLUMN "discordExpiresDate"`);
await queryRunner.query(`ALTER TABLE "user_profile" ADD COLUMN "discordExpiresDate" INTEGER`);
}
}
+13
View File
@@ -0,0 +1,13 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class PinnedUsers1557476068003 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "meta" ADD "pinnedUsers" character varying(256) array NOT NULL DEFAULT '{}'::varchar[]`);
}
public async down(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "pinnedUsers"`);
}
}
+16
View File
@@ -0,0 +1,16 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class AddSomeUrls1557761316509 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "meta" ADD "ToSUrl" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "repositoryUrl" character varying(512) NOT NULL DEFAULT 'https://github.com/syuilo/misskey'`);
await queryRunner.query(`ALTER TABLE "meta" ADD "feedbackUrl" character varying(512) DEFAULT 'https://github.com/syuilo/misskey/issues/new'`);
}
public async down(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "feedbackUrl"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "repositoryUrl"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "ToSUrl"`);
}
}
@@ -0,0 +1,31 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class ObjectStorageSetting1557932705754 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "meta" ADD "useObjectStorage" boolean NOT NULL DEFAULT false`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageBucket" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStoragePrefix" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageBaseUrl" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageEndpoint" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageRegion" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageAccessKey" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageSecretKey" character varying(512)`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStoragePort" integer`);
await queryRunner.query(`ALTER TABLE "meta" ADD "objectStorageUseSSL" boolean NOT NULL DEFAULT true`);
}
public async down(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageUseSSL"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStoragePort"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageSecretKey"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageAccessKey"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageRegion"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageEndpoint"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageBaseUrl"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStoragePrefix"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "objectStorageBucket"`);
await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "useObjectStorage"`);
}
}
+23
View File
@@ -0,0 +1,23 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class PageLike1558072954435 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`CREATE TABLE "page_like" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "pageId" character varying(32) NOT NULL, CONSTRAINT "PK_813f034843af992d3ae0f43c64c" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_0e61efab7f88dbb79c9166dbb4" ON "page_like" ("userId") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_4ce6fb9c70529b4c8ac46c9bfa" ON "page_like" ("userId", "pageId") `);
await queryRunner.query(`ALTER TABLE "page" ADD "likedCount" integer NOT NULL DEFAULT 0`);
await queryRunner.query(`ALTER TABLE "page_like" ADD CONSTRAINT "FK_0e61efab7f88dbb79c9166dbb48" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "page_like" ADD CONSTRAINT "FK_cf8782626dced3176038176a847" FOREIGN KEY ("pageId") REFERENCES "page"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
}
public async down(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "page_like" DROP CONSTRAINT "FK_cf8782626dced3176038176a847"`);
await queryRunner.query(`ALTER TABLE "page_like" DROP CONSTRAINT "FK_0e61efab7f88dbb79c9166dbb48"`);
await queryRunner.query(`ALTER TABLE "page" DROP COLUMN "likedCount"`);
await queryRunner.query(`DROP INDEX "IDX_4ce6fb9c70529b4c8ac46c9bfa"`);
await queryRunner.query(`DROP INDEX "IDX_0e61efab7f88dbb79c9166dbb4"`);
await queryRunner.query(`DROP TABLE "page_like"`);
}
}
+41
View File
@@ -0,0 +1,41 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class UserGroup1558103093633 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`CREATE TABLE "user_group" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "name" character varying(256) NOT NULL, "userId" character varying(32) NOT NULL, "isPrivate" boolean NOT NULL DEFAULT false, CONSTRAINT "PK_3c29fba6fe013ec8724378ce7c9" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_20e30aa35180e317e133d75316" ON "user_group" ("createdAt") `);
await queryRunner.query(`CREATE INDEX "IDX_3d6b372788ab01be58853003c9" ON "user_group" ("userId") `);
await queryRunner.query(`CREATE TABLE "user_group_joining" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "userGroupId" character varying(32) NOT NULL, CONSTRAINT "PK_15f2425885253c5507e1599cfe7" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_f3a1b4bd0c7cabba958a0c0b23" ON "user_group_joining" ("userId") `);
await queryRunner.query(`CREATE INDEX "IDX_67dc758bc0566985d1b3d39986" ON "user_group_joining" ("userGroupId") `);
await queryRunner.query(`ALTER TABLE "messaging_message" ADD "groupId" character varying(32)`);
await queryRunner.query(`ALTER TABLE "messaging_message" ADD "reads" character varying(32) array NOT NULL DEFAULT '{}'::varchar[]`);
await queryRunner.query(`ALTER TABLE "messaging_message" ALTER COLUMN "recipientId" DROP NOT NULL`);
await queryRunner.query(`COMMENT ON COLUMN "messaging_message"."recipientId" IS 'The recipient user ID.'`);
await queryRunner.query(`CREATE INDEX "IDX_2c4be03b446884f9e9c502135b" ON "messaging_message" ("groupId") `);
await queryRunner.query(`ALTER TABLE "messaging_message" ADD CONSTRAINT "FK_2c4be03b446884f9e9c502135be" FOREIGN KEY ("groupId") REFERENCES "user_group"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "user_group" ADD CONSTRAINT "FK_3d6b372788ab01be58853003c93" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "user_group_joining" ADD CONSTRAINT "FK_f3a1b4bd0c7cabba958a0c0b231" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "user_group_joining" ADD CONSTRAINT "FK_67dc758bc0566985d1b3d399865" FOREIGN KEY ("userGroupId") REFERENCES "user_group"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
}
public async down(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "user_group_joining" DROP CONSTRAINT "FK_67dc758bc0566985d1b3d399865"`);
await queryRunner.query(`ALTER TABLE "user_group_joining" DROP CONSTRAINT "FK_f3a1b4bd0c7cabba958a0c0b231"`);
await queryRunner.query(`ALTER TABLE "user_group" DROP CONSTRAINT "FK_3d6b372788ab01be58853003c93"`);
await queryRunner.query(`ALTER TABLE "messaging_message" DROP CONSTRAINT "FK_2c4be03b446884f9e9c502135be"`);
await queryRunner.query(`DROP INDEX "IDX_2c4be03b446884f9e9c502135b"`);
await queryRunner.query(`COMMENT ON COLUMN "messaging_message"."recipientId" IS ''`);
await queryRunner.query(`ALTER TABLE "messaging_message" ALTER COLUMN "recipientId" SET NOT NULL`);
await queryRunner.query(`ALTER TABLE "messaging_message" DROP COLUMN "reads"`);
await queryRunner.query(`ALTER TABLE "messaging_message" DROP COLUMN "groupId"`);
await queryRunner.query(`DROP INDEX "IDX_67dc758bc0566985d1b3d39986"`);
await queryRunner.query(`DROP INDEX "IDX_f3a1b4bd0c7cabba958a0c0b23"`);
await queryRunner.query(`DROP TABLE "user_group_joining"`);
await queryRunner.query(`DROP INDEX "IDX_3d6b372788ab01be58853003c9"`);
await queryRunner.query(`DROP INDEX "IDX_20e30aa35180e317e133d75316"`);
await queryRunner.query(`DROP TABLE "user_group"`);
}
}
@@ -0,0 +1,25 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class UserGroupInvite1558257926829 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`CREATE TABLE "user_group_invite" ("id" character varying(32) NOT NULL, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "userId" character varying(32) NOT NULL, "userGroupId" character varying(32) NOT NULL, CONSTRAINT "PK_3893884af0d3a5f4d01e7921a97" PRIMARY KEY ("id"))`);
await queryRunner.query(`CREATE INDEX "IDX_1039988afa3bf991185b277fe0" ON "user_group_invite" ("userId") `);
await queryRunner.query(`CREATE INDEX "IDX_e10924607d058004304611a436" ON "user_group_invite" ("userGroupId") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_78787741f9010886796f2320a4" ON "user_group_invite" ("userId", "userGroupId") `);
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_d9ecaed8c6dc43f3592c229282" ON "user_group_joining" ("userId", "userGroupId") `);
await queryRunner.query(`ALTER TABLE "user_group_invite" ADD CONSTRAINT "FK_1039988afa3bf991185b277fe03" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
await queryRunner.query(`ALTER TABLE "user_group_invite" ADD CONSTRAINT "FK_e10924607d058004304611a436a" FOREIGN KEY ("userGroupId") REFERENCES "user_group"("id") ON DELETE CASCADE ON UPDATE NO ACTION`);
}
public async down(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`ALTER TABLE "user_group_invite" DROP CONSTRAINT "FK_e10924607d058004304611a436a"`);
await queryRunner.query(`ALTER TABLE "user_group_invite" DROP CONSTRAINT "FK_1039988afa3bf991185b277fe03"`);
await queryRunner.query(`DROP INDEX "IDX_d9ecaed8c6dc43f3592c229282"`);
await queryRunner.query(`DROP INDEX "IDX_78787741f9010886796f2320a4"`);
await queryRunner.query(`DROP INDEX "IDX_e10924607d058004304611a436"`);
await queryRunner.query(`DROP INDEX "IDX_1039988afa3bf991185b277fe0"`);
await queryRunner.query(`DROP TABLE "user_group_invite"`);
}
}
@@ -0,0 +1,13 @@
import {MigrationInterface, QueryRunner} from "typeorm";
export class UserListJoining1558266512381 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_90f7da835e4c10aca6853621e1" ON "user_list_joining" ("userId", "userListId") `);
}
public async down(queryRunner: QueryRunner): Promise<any> {
await queryRunner.query(`DROP INDEX "IDX_90f7da835e4c10aca6853621e1"`);
}
}
+102 -97
View File
@@ -1,8 +1,8 @@
{
"name": "misskey",
"author": "syuilo <i@syuilo.com>",
"version": "10.90.4",
"codename": "nighthike",
"version": "11.18.1",
"codename": "daybreak",
"repository": {
"type": "git",
"url": "https://github.com/syuilo/misskey.git"
@@ -11,7 +11,10 @@
"private": true,
"scripts": {
"start": "node ./index.js",
"debug": "DEBUG=misskey:* node ./index.js",
"init": "node ./built/init.js",
"ormconfig": "node ./built/ormconfig.js",
"migrate": "npm run ormconfig && ts-node ./node_modules/typeorm/cli.js migration:run",
"migrateandstart": "npm run migrate && npm run start",
"build": "webpack && gulp build",
"webpack": "webpack",
"watch": "webpack --watch",
@@ -23,131 +26,127 @@
"format": "gulp format"
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "1.2.14",
"@fortawesome/free-brands-svg-icons": "5.7.1",
"@fortawesome/free-regular-svg-icons": "5.7.0",
"@fortawesome/free-solid-svg-icons": "5.7.1",
"@elastic/elasticsearch": "7.0.0-rc.2",
"@fortawesome/fontawesome-svg-core": "1.2.15",
"@fortawesome/free-brands-svg-icons": "5.7.2",
"@fortawesome/free-regular-svg-icons": "5.7.2",
"@fortawesome/free-solid-svg-icons": "5.7.2",
"@fortawesome/vue-fontawesome": "0.1.5",
"@koa/cors": "2.2.3",
"@prezzemolo/rap": "0.1.2",
"@prezzemolo/zip": "0.0.3",
"@types/bcryptjs": "2.4.2",
"@types/chai-http": "3.0.5",
"@types/bull": "3.5.11",
"@types/dateformat": "3.0.0",
"@types/deep-equal": "1.0.1",
"@types/double-ended-queue": "2.1.0",
"@types/elasticsearch": "5.0.30",
"@types/file-type": "10.6.0",
"@types/gulp": "4.0.5",
"@types/file-type": "10.9.1",
"@types/gulp": "4.0.6",
"@types/gulp-mocha": "0.0.32",
"@types/gulp-rename": "0.0.33",
"@types/gulp-replace": "0.0.31",
"@types/gulp-uglify": "3.0.6",
"@types/gulp-util": "3.0.34",
"@types/is-root": "1.0.0",
"@types/is-svg": "3.0.0",
"@types/is-url": "1.2.28",
"@types/js-yaml": "3.12.0",
"@types/jsdom": "12.2.1",
"@types/katex": "0.5.0",
"@types/js-yaml": "3.12.1",
"@types/jsdom": "12.2.3",
"@types/katex": "0.10.1",
"@types/koa": "2.0.48",
"@types/koa-bodyparser": "5.0.2",
"@types/koa-compress": "2.0.8",
"@types/koa-compress": "2.0.9",
"@types/koa-cors": "0.0.0",
"@types/koa-favicon": "2.0.19",
"@types/koa-logger": "3.1.1",
"@types/koa-mount": "3.0.1",
"@types/koa-multer": "1.0.0",
"@types/koa-router": "7.0.39",
"@types/koa-send": "4.1.1",
"@types/koa-router": "7.0.40",
"@types/koa-send": "4.1.2",
"@types/koa-views": "2.0.3",
"@types/koa__cors": "2.2.3",
"@types/lolex": "3.1.1",
"@types/minio": "7.0.1",
"@types/mkdirp": "0.5.2",
"@types/mocha": "5.2.5",
"@types/mongodb": "3.1.19",
"@types/node": "10.12.24",
"@types/nodemailer": "4.6.5",
"@types/mocha": "5.2.6",
"@types/node": "11.13.8",
"@types/nodemailer": "4.6.8",
"@types/nprogress": "0.0.29",
"@types/oauth": "0.9.1",
"@types/parse5": "5.0.0",
"@types/parsimmon": "1.10.0",
"@types/portscanner": "2.1.0",
"@types/pug": "2.0.4",
"@types/qrcode": "1.3.0",
"@types/qrcode": "1.3.2",
"@types/random-seed": "0.3.3",
"@types/ratelimiter": "2.1.28",
"@types/redis": "2.8.10",
"@types/redis": "2.8.12",
"@types/rename": "1.0.1",
"@types/request": "2.48.1",
"@types/request-promise-native": "1.0.15",
"@types/request-promise-native": "1.0.16",
"@types/request-stats": "3.0.0",
"@types/rimraf": "2.0.2",
"@types/seedrandom": "2.4.27",
"@types/sharp": "0.21.2",
"@types/seedrandom": "2.4.28",
"@types/sharp": "0.22.1",
"@types/showdown": "1.9.2",
"@types/speakeasy": "2.0.3",
"@types/speakeasy": "2.0.4",
"@types/systeminformation": "3.23.1",
"@types/tinycolor2": "1.4.1",
"@types/tmp": "0.0.33",
"@types/tmp": "0.1.0",
"@types/uuid": "3.4.4",
"@types/web-push": "3.3.0",
"@types/webpack": "4.4.24",
"@types/webpack": "4.4.29",
"@types/webpack-stream": "3.2.10",
"@types/websocket": "0.0.40",
"@types/ws": "6.0.1",
"animejs": "3.0.1",
"apexcharts": "3.5.0",
"apexcharts": "3.6.12",
"autobind-decorator": "2.4.0",
"autosize": "4.0.2",
"autwh": "0.1.0",
"bcryptjs": "2.4.3",
"bee-queue": "1.2.2",
"bootstrap-vue": "2.0.0-rc.11",
"cafy": "15.1.0",
"bootstrap-vue": "2.0.0-rc.13",
"bull": "3.9.1",
"cafy": "15.1.1",
"chai": "4.2.0",
"chai-http": "4.2.1",
"chalk": "2.4.2",
"commander": "2.19.0",
"cli-highlight": "2.1.1",
"commander": "2.20.0",
"content-disposition": "0.5.3",
"crc-32": "1.2.0",
"css-loader": "2.1.0",
"css-loader": "2.1.1",
"cssnano": "4.1.10",
"dateformat": "3.0.3",
"deep-equal": "1.0.1",
"deepcopy": "0.6.3",
"diskusage": "1.0.0",
"diskusage": "1.1.1",
"double-ended-queue": "2.1.0-0",
"elasticsearch": "15.3.1",
"emojilib": "2.4.0",
"escape-regexp": "0.0.1",
"eslint": "5.12.0",
"eslint-plugin-vue": "5.1.0",
"eventemitter3": "3.1.0",
"feed": "2.0.2",
"file-type": "10.7.1",
"eslint": "5.16.0",
"eslint-plugin-vue": "5.2.2",
"eventemitter3": "3.1.2",
"feed": "2.0.4",
"file-type": "10.11.0",
"fuckadblock": "3.2.1",
"gulp": "4.0.0",
"gulp": "4.0.2",
"gulp-cssnano": "2.1.3",
"gulp-imagemin": "5.0.3",
"gulp-mocha": "6.0.0",
"gulp-rename": "1.4.0",
"gulp-replace": "1.0.0",
"gulp-sourcemaps": "2.6.4",
"gulp-sourcemaps": "2.6.5",
"gulp-stylus": "2.7.0",
"gulp-tslint": "8.1.3",
"gulp-typescript": "5.0.0",
"gulp-uglify": "3.0.1",
"gulp-tslint": "8.1.4",
"gulp-typescript": "5.0.1",
"gulp-uglify": "3.0.2",
"gulp-util": "3.0.8",
"gulp-yaml": "2.0.3",
"hard-source-webpack-plugin": "0.13.1",
"html-minifier": "3.5.21",
"html-minifier": "4.0.0",
"http-signature": "1.2.0",
"insert-text-at-cursor": "0.1.2",
"is-root": "2.0.0",
"is-svg": "3.0.0",
"js-yaml": "3.12.1",
"jsdom": "13.2.0",
"insert-text-at-cursor": "0.2.0",
"is-root": "2.1.0",
"is-svg": "4.1.0",
"js-yaml": "3.13.1",
"jsdom": "15.1.0",
"json5": "2.1.0",
"json5-loader": "1.0.1",
"katex": "0.10.0",
"json5-loader": "2.0.0",
"katex": "0.10.1",
"koa": "2.7.0",
"koa-bodyparser": "4.2.1",
"koa-compress": "3.0.0",
@@ -159,50 +158,53 @@
"koa-router": "7.4.0",
"koa-send": "5.0.0",
"koa-slow": "2.1.0",
"koa-views": "6.1.5",
"koa-views": "6.2.0",
"langmap": "0.0.16",
"loader-utils": "1.2.3",
"lolex": "3.1.0",
"lookup-dns-cache": "2.1.0",
"minio": "7.0.5",
"mkdirp": "0.5.1",
"mocha": "5.2.0",
"minio": "7.0.8",
"mocha": "6.1.4",
"moji": "0.5.1",
"moment": "2.24.0",
"mongodb": "3.1.13",
"monk": "6.0.6",
"ms": "2.1.1",
"nan": "2.12.1",
"nested-property": "0.0.7",
"nodemailer": "5.1.1",
"node-fetch": "2.5.0",
"nodemailer": "6.1.1",
"nprogress": "0.2.0",
"object-assign-deep": "0.4.0",
"on-build-webpack": "0.1.0",
"os-utils": "0.0.14",
"parse5": "5.1.0",
"parsimmon": "1.12.0",
"pg": "7.11.0",
"portscanner": "2.2.0",
"postcss-loader": "3.0.0",
"prismjs": "1.15.0",
"prismjs": "1.16.0",
"progress-bar-webpack-plugin": "1.12.1",
"promise-any": "0.2.0",
"promise-limit": "2.7.0",
"promise-sequential": "1.1.1",
"pug": "2.0.3",
"punycode": "2.1.1",
"pureimage": "0.1.6",
"qrcode": "1.3.3",
"randomcolor": "0.5.3",
"ratelimiter": "3.2.0",
"random-seed": "0.3.0",
"randomcolor": "0.5.4",
"ratelimiter": "3.3.0",
"recaptcha-promise": "0.1.3",
"reconnecting-websocket": "4.1.10",
"redis": "2.8.0",
"reflect-metadata": "0.1.13",
"rename": "1.0.4",
"request": "2.88.0",
"request-promise-native": "1.0.5",
"request-promise-native": "1.0.7",
"request-stats": "3.0.0",
"require-all": "3.0.0",
"rimraf": "2.6.3",
"rndstr": "1.0.0",
"s-age": "1.1.2",
"seedrandom": "2.4.4",
"sharp": "0.21.3",
"seedrandom": "3.0.1",
"sharp": "0.22.1",
"showdown": "1.9.0",
"showdown-highlightjs-extension": "0.1.2",
"speakeasy": "2.0.0",
@@ -211,47 +213,50 @@
"stylus": "0.54.5",
"stylus-loader": "3.0.2",
"summaly": "2.2.0",
"systeminformation": "3.54.0",
"systeminformation": "4.1.6",
"syuilo-password-strength": "0.0.1",
"terser-webpack-plugin": "1.2.2",
"terser-webpack-plugin": "1.2.4",
"textarea-caret": "3.1.0",
"tinycolor2": "1.4.1",
"tmp": "0.0.33",
"tmp": "0.1.0",
"ts-loader": "5.3.3",
"ts-node": "7.0.1",
"tslint": "5.12.1",
"tslint": "5.15.0",
"tslint-sonarts": "1.9.0",
"typeorm": "0.2.16-rc.1",
"typescript": "3.3.3333",
"typescript-eslint-parser": "21.0.2",
"typescript-eslint-parser": "22.0.0",
"uglify-es": "3.3.9",
"ulid": "2.3.0",
"url-loader": "1.1.2",
"uuid": "3.3.2",
"v-animate-css": "0.0.3",
"v-debounce": "0.1.2",
"video-thumbnail-generator": "1.1.3",
"vue": "2.6.7",
"vue": "2.6.10",
"vue-color": "2.7.0",
"vue-content-loading": "1.5.3",
"vue-content-loading": "1.6.0",
"vue-cropperjs": "3.0.0",
"vue-i18n": "8.8.2",
"vue-js-modal": "1.3.28",
"vue-loader": "15.6.4",
"vue-i18n": "8.11.2",
"vue-js-modal": "1.3.31",
"vue-json-pretty": "1.6.0",
"vue-loader": "15.7.0",
"vue-marquee-text-component": "1.1.1",
"vue-prism-component": "1.1.1",
"vue-router": "3.0.2",
"vue-router": "3.0.6",
"vue-sequential-entrance": "1.1.3",
"vue-style-loader": "4.1.2",
"vue-svg-inline-loader": "1.2.10",
"vue-template-compiler": "2.6.7",
"vuedraggable": "2.17.0",
"vue-svg-inline-loader": "1.2.15",
"vue-template-compiler": "2.6.10",
"vuedraggable": "2.21.0",
"vuewordcloud": "18.7.11",
"vuex": "3.1.0",
"vuex": "3.1.1",
"vuex-persistedstate": "2.5.4",
"web-push": "3.3.3",
"webfinger.js": "2.7.0",
"webpack": "4.28.4",
"webpack-cli": "3.2.1",
"web-push": "3.3.5",
"webpack": "4.32.0",
"webpack-cli": "3.3.2",
"websocket": "1.0.28",
"ws": "6.1.4",
"ws": "7.0.0",
"xev": "2.0.1"
}
}
-17
View File
@@ -1,17 +0,0 @@
declare module 'deepcopy';
declare namespace deepcopy {
type DeepcopyCustomizerValueType = 'Object';
type DeepcopyCustomizer<T> = (
value: T,
valueType: DeepcopyCustomizerValueType) => T;
interface DeepcopyOptions<T> {
customizer: DeepcopyCustomizer<T>;
}
export function deepcopy<T>(
value: T,
options?: DeepcopyOptions<T> | DeepcopyCustomizer<T>): T;
}
-7
View File
@@ -1,7 +0,0 @@
declare module 'escape-regexp' {
function escapeRegExp(str: string): string;
namespace escapeRegExp {} // Hack
export = escapeRegExp;
}
+1 -1
View File
@@ -8,7 +8,7 @@ declare module 'koa-slow' {
function slow(options?: ISlowOptions): Middleware;
namespace slow { } // Hack
namespace slow {} // Hack
export = slow;
}
-65
View File
@@ -1,65 +0,0 @@
declare module 'webfinger.js' {
interface IWebFingerConstructorConfig {
tls_only?: boolean;
webfist_fallback?: boolean;
uri_fallback?: boolean;
request_timeout?: number;
}
type JRDProperties = { [type: string]: string };
interface IJRDLink {
rel: string;
type?: string;
href?: string;
template?: string;
titles?: { [lang: string]: string };
properties?: JRDProperties;
}
interface IJRD {
subject?: string;
expires?: Date;
aliases?: string[];
properties?: JRDProperties;
links?: IJRDLink[];
}
interface IIDXLinks {
'avatar': IJRDLink[];
'remotestorage': IJRDLink[];
'blog': IJRDLink[];
'vcard': IJRDLink[];
'updates': IJRDLink[];
'share': IJRDLink[];
'profile': IJRDLink[];
'webfist': IJRDLink[];
'camlistore': IJRDLink[];
[type: string]: IJRDLink[];
}
interface IIDXProperties {
'name': string;
[type: string]: string;
}
interface IIDX {
links: IIDXLinks;
properties: IIDXProperties;
}
interface ILookupCallbackResult {
object: IJRD;
json: string;
idx: IIDX;
}
type LookupCallback = (err: Error | string, result?: ILookupCallbackResult) => void;
export class WebFinger {
constructor(config?: IWebFingerConstructorConfig);
public lookup(address: string, cb: LookupCallback): NodeJS.Timeout;
public lookupLink(address: string, rel: string, cb: IJRDLink): void;
}
}
+4 -3
View File
@@ -5,8 +5,7 @@ program
.version(pkg.version)
.option('--no-daemons', 'Disable daemon processes (for debbuging)')
.option('--disable-clustering', 'Disable clustering')
.option('--disable-queue', 'Disable job queue processing')
.option('--only-server', 'Run server only (without job queue)')
.option('--only-server', 'Run server only (without job queue processing)')
.option('--only-queue', 'Pocessing job queue only (without server)')
.option('--quiet', 'Suppress all logs')
.option('--verbose', 'Enable all logs')
@@ -15,7 +14,9 @@ program
.option('--color', 'This option is a dummy for some external program\'s (e.g. forever) issue.')
.parse(process.argv);
/*if (process.env.MK_DISABLE_QUEUE)*/ program.disableQueue = true;
if (process.env.MK_ONLY_QUEUE) program.onlyQueue = true;
if (process.env.NODE_ENV === 'test') program.disableClustering = true;
if (process.env.NODE_ENV === 'test') program.quiet = true;
if (process.env.NODE_ENV === 'test') program.noDaemons = true;
export { program };
+77
View File
@@ -0,0 +1,77 @@
import * as cluster from 'cluster';
import chalk from 'chalk';
import Xev from 'xev';
import Logger from '../services/logger';
import { program } from '../argv';
// for typeorm
import 'reflect-metadata';
import { masterMain } from './master';
import { workerMain } from './worker';
const logger = new Logger('core', 'cyan');
const clusterLogger = logger.createSubLogger('cluster', 'orange', false);
const ev = new Xev();
/**
* Init process
*/
export default async function() {
process.title = `Misskey (${cluster.isMaster ? 'master' : 'worker'})`;
if (cluster.isMaster || program.disableClustering) {
await masterMain();
if (cluster.isMaster) {
ev.mount();
}
}
if (cluster.isWorker || program.disableClustering) {
await workerMain();
}
// ユニットテスト時にMisskeyが子プロセスで起動された時のため
// それ以外のときは process.send は使えないので弾く
if (process.send) {
process.send('ok');
}
}
//#region Events
// Listen new workers
cluster.on('fork', worker => {
clusterLogger.debug(`Process forked: [${worker.id}]`);
});
// Listen online workers
cluster.on('online', worker => {
clusterLogger.debug(`Process is now online: [${worker.id}]`);
});
// Listen for dying workers
cluster.on('exit', worker => {
// Replace the dead worker,
// we're not sentimental
clusterLogger.error(chalk.red(`[${worker.id}] died :(`));
cluster.fork();
});
// Display detail of unhandled promise rejection
if (!program.quiet) {
process.on('unhandledRejection', console.dir);
}
// Display detail of uncaught exception
process.on('uncaughtException', err => {
logger.error(err);
});
// Dying away...
process.on('exit', code => {
logger.info(`The process is going to exit with code ${code}`);
});
//#endregion
+176
View File
@@ -0,0 +1,176 @@
import * as os from 'os';
import * as cluster from 'cluster';
import chalk from 'chalk';
import * as portscanner from 'portscanner';
import * as isRoot from 'is-root';
import Logger from '../services/logger';
import loadConfig from '../config/load';
import { Config } from '../config/types';
import { lessThan } from '../prelude/array';
import * as pkg from '../../package.json';
import { program } from '../argv';
import { showMachineInfo } from '../misc/show-machine-info';
import { initDb } from '../db/postgre';
const logger = new Logger('core', 'cyan');
const bootLogger = logger.createSubLogger('boot', 'magenta', false);
function greet() {
if (!program.quiet) {
//#region Misskey logo
const v = `v${pkg.version}`;
console.log(' _____ _ _ ');
console.log(' | |_|___ ___| |_ ___ _ _ ');
console.log(' | | | | |_ -|_ -| \'_| -_| | |');
console.log(' |_|_|_|_|___|___|_,_|___|_ |');
console.log(' ' + chalk.gray(v) + (' |___|\n'.substr(v.length)));
//#endregion
console.log(' Misskey is maintained by @syuilo, @AyaMorisawa, @mei23, @acid-chicken, and @rinsuki.');
console.log(chalk.keyword('orange')(' If you like Misskey, please donate to support development. https://www.patreon.com/syuilo'));
console.log('');
console.log(chalk`< ${os.hostname()} {gray (PID: ${process.pid.toString()})} >`);
}
bootLogger.info('Welcome to Misskey!');
bootLogger.info(`Misskey v${pkg.version}`, null, true);
}
/**
* Init master process
*/
export async function masterMain() {
greet();
let config!: Config;
try {
// initialize app
config = await init();
if (config.port == null) {
bootLogger.error('The port is not configured. Please configure port.', null, true);
process.exit(1);
}
if (process.platform === 'linux' && isWellKnownPort(config.port) && !isRoot()) {
bootLogger.error('You need root privileges to listen on well-known port on Linux', null, true);
process.exit(1);
}
if (!await isPortAvailable(config.port)) {
bootLogger.error(`Port ${config.port} is already in use`, null, true);
process.exit(1);
}
} catch (e) {
bootLogger.error('Fatal error occurred during initialization', null, true);
process.exit(1);
}
bootLogger.succ('Misskey initialized');
if (!program.disableClustering) {
await spawnWorkers(config.clusterLimit);
}
if (!program.noDaemons) {
require('../daemons/server-stats').default();
require('../daemons/notes-stats').default();
require('../daemons/queue-stats').default();
}
bootLogger.succ(`Now listening on port ${config.port} on ${config.url}`, null, true);
}
const runningNodejsVersion = process.version.slice(1).split('.').map(x => parseInt(x, 10));
const requiredNodejsVersion = [11, 7, 0];
const satisfyNodejsVersion = !lessThan(runningNodejsVersion, requiredNodejsVersion);
function isWellKnownPort(port: number): boolean {
return port < 1024;
}
async function isPortAvailable(port: number): Promise<boolean> {
return await portscanner.checkPortStatus(port, '127.0.0.1') === 'closed';
}
function showEnvironment(): void {
const env = process.env.NODE_ENV;
const logger = bootLogger.createSubLogger('env');
logger.info(typeof env == 'undefined' ? 'NODE_ENV is not set' : `NODE_ENV: ${env}`);
if (env !== 'production') {
logger.warn('The environment is not in production mode.');
logger.warn('DO NOT USE FOR PRODUCTION PURPOSE!', null, true);
}
logger.info(`You ${isRoot() ? '' : 'do not '}have root privileges`);
}
/**
* Init app
*/
async function init(): Promise<Config> {
showEnvironment();
const nodejsLogger = bootLogger.createSubLogger('nodejs');
nodejsLogger.info(`Version ${runningNodejsVersion.join('.')}`);
if (!satisfyNodejsVersion) {
nodejsLogger.error(`Node.js version is less than ${requiredNodejsVersion.join('.')}. Please upgrade it.`, null, true);
process.exit(1);
}
await showMachineInfo(bootLogger);
const configLogger = bootLogger.createSubLogger('config');
let config;
try {
config = loadConfig();
} catch (exception) {
if (typeof exception === 'string') {
configLogger.error(exception);
process.exit(1);
}
if (exception.code === 'ENOENT') {
configLogger.error('Configuration file not found', null, true);
process.exit(1);
}
throw exception;
}
configLogger.succ('Loaded');
// Try to connect to DB
try {
bootLogger.info('Connecting database...');
await initDb();
} catch (e) {
bootLogger.error('Cannot connect to database', null, true);
bootLogger.error(e);
process.exit(1);
}
return config;
}
async function spawnWorkers(limit: number = Infinity) {
const workers = Math.min(limit, os.cpus().length);
bootLogger.info(`Starting ${workers} worker${workers === 1 ? '' : 's'}...`);
await Promise.all([...Array(workers)].map(spawnWorker));
bootLogger.succ('All workers started');
}
function spawnWorker(): Promise<void> {
return new Promise(res => {
const worker = cluster.fork();
worker.on('message', message => {
if (message !== 'ready') return;
res();
});
});
}
+20
View File
@@ -0,0 +1,20 @@
import * as cluster from 'cluster';
import { initDb } from '../db/postgre';
/**
* Init worker process
*/
export async function workerMain() {
await initDb();
// start server
await require('../server').default();
// start job queue
require('../queue').default();
if (cluster.isWorker) {
// Send a 'ready' message to parent process
process.send!('ready');
}
}
+9 -3
View File
@@ -1,7 +1,7 @@
<template>
<div>
<ui-card>
<template #title><fa icon="broadcast-tower"/> {{ $t('announcements') }}</template>
<template #title><fa :icon="faBroadcastTower"/> {{ $t('announcements') }}</template>
<section v-for="(announcement, i) in announcements" class="fit-top">
<ui-input v-model="announcement.title" @change="save">
<span>{{ $t('title') }}</span>
@@ -9,13 +9,16 @@
<ui-textarea v-model="announcement.text">
<span>{{ $t('text') }}</span>
</ui-textarea>
<ui-input v-model="announcement.image">
<span>{{ $t('image-url') }}</span>
</ui-input>
<ui-horizon-group class="fit-bottom">
<ui-button @click="save()"><fa :icon="['far', 'save']"/> {{ $t('save') }}</ui-button>
<ui-button @click="remove(i)"><fa :icon="['far', 'trash-alt']"/> {{ $t('remove') }}</ui-button>
</ui-horizon-group>
</section>
<section>
<ui-button @click="add"><fa icon="plus"/> {{ $t('add') }}</ui-button>
<ui-button @click="add"><fa :icon="faPlus"/> {{ $t('add') }}</ui-button>
</section>
</ui-card>
</div>
@@ -24,12 +27,14 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../i18n';
import { faBroadcastTower, faPlus } from '@fortawesome/free-solid-svg-icons';
export default Vue.extend({
i18n: i18n('admin/views/announcements.vue'),
data() {
return {
announcements: [],
faBroadcastTower, faPlus
};
},
@@ -43,7 +48,8 @@ export default Vue.extend({
add() {
this.announcements.unshift({
title: '',
text: ''
text: '',
image: null
});
},
@@ -181,7 +181,12 @@ export default Vue.extend({
},
grid: {
clipMarkers: false,
borderColor: 'rgba(0, 0, 0, 0.1)'
borderColor: 'rgba(0, 0, 0, 0.1)',
xaxis: {
lines: {
show: true,
}
},
},
stroke: {
curve: 'straight',
@@ -240,6 +245,7 @@ export default Vue.extend({
federationInstancesChart(total: boolean): any {
return {
series: [{
name: 'Instances',
data: this.format(total
? this.stats.federation.instance.total
: sum(this.stats.federation.instance.inc, negate(this.stats.federation.instance.dec))
@@ -0,0 +1,196 @@
<template>
<div class="mzxlfysy">
<div>
<header>
<span><fa :icon="faInbox"/> In</span>
<span v-if="latestStats">{{ latestStats.inbox.activeSincePrevTick | number }} / {{ latestStats.inbox.delayed | number }}</span>
</header>
<div ref="in"></div>
</div>
<div>
<header>
<span><fa :icon="faPaperPlane"/> Out</span>
<span v-if="latestStats">{{ latestStats.deliver.activeSincePrevTick | number }} / {{ latestStats.deliver.delayed | number }}</span>
</header>
<div ref="out"></div>
</div>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import { faInbox } from '@fortawesome/free-solid-svg-icons';
import { faPaperPlane } from '@fortawesome/free-regular-svg-icons';
import ApexCharts from 'apexcharts';
const limit = 150;
export default Vue.extend({
data() {
return {
stats: [],
inChart: null,
outChart: null,
faInbox, faPaperPlane
};
},
computed: {
latestStats(): any {
return this.stats[this.stats.length - 1];
}
},
watch: {
stats(stats) {
this.inChart.updateSeries([{
data: stats.map((x, i) => ({ x: i, y: x.inbox.activeSincePrevTick }))
}, {
data: stats.map((x, i) => ({ x: i, y: x.inbox.active }))
}, {
data: stats.map((x, i) => ({ x: i, y: x.inbox.waiting }))
}, {
data: stats.map((x, i) => ({ x: i, y: x.inbox.delayed }))
}]);
this.outChart.updateSeries([{
data: stats.map((x, i) => ({ x: i, y: x.deliver.activeSincePrevTick }))
}, {
data: stats.map((x, i) => ({ x: i, y: x.deliver.active }))
}, {
data: stats.map((x, i) => ({ x: i, y: x.deliver.waiting }))
}, {
data: stats.map((x, i) => ({ x: i, y: x.deliver.delayed }))
}]);
}
},
mounted() {
const chartOpts = {
chart: {
type: 'area',
height: 200,
animations: {
dynamicAnimation: {
enabled: false
}
},
toolbar: {
show: false
},
zoom: {
enabled: false
}
},
dataLabels: {
enabled: false
},
grid: {
clipMarkers: false,
borderColor: 'rgba(0, 0, 0, 0.1)'
},
stroke: {
curve: 'straight',
width: 2
},
tooltip: {
enabled: false
},
legend: {
show: false
},
colors: ['#00E396', '#00BCD4', '#FFB300', '#e53935'],
series: [{ data: [] }, { data: [] }, { data: [] }, { data: [] }] as any,
xaxis: {
type: 'numeric',
labels: {
show: false
},
tooltip: {
enabled: false
}
},
yaxis: {
show: false,
min: 0,
}
};
this.inChart = new ApexCharts(this.$refs.in, chartOpts);
this.outChart = new ApexCharts(this.$refs.out, chartOpts);
this.inChart.render();
this.outChart.render();
const connection = this.$root.stream.useSharedConnection('queueStats');
connection.on('stats', this.onStats);
connection.on('statsLog', this.onStatsLog);
connection.send('requestLog', {
id: Math.random().toString().substr(2, 8),
length: limit
});
this.$once('hook:beforeDestroy', () => {
connection.dispose();
this.inChart.destroy();
this.outChart.destroy();
});
},
methods: {
onStats(stats) {
this.stats.push(stats);
if (this.stats.length > limit) this.stats.shift();
},
onStatsLog(statsLog) {
for (const stats of statsLog.reverse()) {
this.onStats(stats);
}
}
}
});
</script>
<style lang="stylus" scoped>
.mzxlfysy
display flex
> div
display block
flex 1
padding 20px 12px 0 12px
box-shadow 0 2px 4px rgba(0, 0, 0, 0.1)
background var(--face)
border-radius 8px
&:first-child
margin-right 16px
> header
display flex
padding 0 8px
margin-bottom -16px
color var(--adminDashboardCardFg)
font-size 14px
> span
&:last-child
margin-left auto
opacity 0.7
> span
opacity 0.7
> div
margin-bottom -10px
@media (max-width 1000px)
display block
margin-bottom 26px
> div
&:first-child
margin-right 0
margin-bottom 26px
</style>
+12 -3
View File
@@ -73,6 +73,10 @@
<x-charts ref="charts"/>
</div>
<div class="queue">
<x-queue/>
</div>
<div class="cpu-memory">
<x-cpu-memory :connection="connection"/>
</div>
@@ -86,9 +90,10 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../i18n';
import XCpuMemory from "./cpu-memory.vue";
import XCharts from "./charts.vue";
import XApLog from "./ap-log.vue";
import XCpuMemory from "./dashboard.cpu-memory.vue";
import XQueue from "./dashboard.queue-charts.vue";
import XCharts from "./dashboard.charts.vue";
import XApLog from "./dashboard.ap-log.vue";
import { faDatabase } from '@fortawesome/free-solid-svg-icons';
import MarqueeText from 'vue-marquee-text-component';
import randomColor from 'randomcolor';
@@ -98,6 +103,7 @@ export default Vue.extend({
components: {
XCpuMemory,
XQueue,
XCharts,
XApLog,
MarqueeText
@@ -274,6 +280,9 @@ export default Vue.extend({
> .charts
margin-bottom 16px
> .queue
margin-bottom 16px
> .cpu-memory
margin-bottom 16px
+10 -12
View File
@@ -38,7 +38,7 @@
<div class="kidvdlkg" v-for="file in files">
<div @click="file._open = !file._open">
<div>
<div class="thumbnail" :style="thumbnail(file)"></div>
<x-file-thumbnail class="thumbnail" :file="file" fit="contain" @click="showFileMenu(file)"/>
</div>
<div>
<header>
@@ -48,7 +48,7 @@
<div>
<div>
<span style="margin-right:16px;">{{ file.type }}</span>
<span>{{ file.datasize | bytes }}</span>
<span>{{ file.size | bytes }}</span>
</div>
<div><mk-time :time="file.createdAt" mode="detail"/></div>
</div>
@@ -75,10 +75,15 @@ import Vue from 'vue';
import i18n from '../../i18n';
import { faCloud, faTerminal, faSearch } from '@fortawesome/free-solid-svg-icons';
import { faTrashAlt, faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons';
import XFileThumbnail from '../../common/views/components/drive-file-thumbnail.vue';
export default Vue.extend({
i18n: i18n('admin/views/drive.vue'),
components: {
XFileThumbnail
},
data() {
return {
file: null,
@@ -151,13 +156,6 @@ export default Vue.extend({
});
},
thumbnail(file: any): any {
return {
'background-color': file.properties.avgColor && file.properties.avgColor.length == 3 ? `rgb(${file.properties.avgColor.join(',')})` : 'transparent',
'background-image': `url(${file.thumbnailUrl})`
};
},
async del(file: any) {
const process = async () => {
await this.$root.api('drive/files/delete', { fileId: file.id });
@@ -179,9 +177,9 @@ export default Vue.extend({
this.$root.api('drive/files/update', {
fileId: file.id,
isSensitive: !file.isSensitive
}).then(() => {
file.isSensitive = !file.isSensitive;
});
file.isSensitive = !file.isSensitive;
},
async show() {
@@ -244,7 +242,7 @@ export default Vue.extend({
> div:nth-child(1)
> .thumbnail
display block
display flex
width 64px
height 64px
background-size cover
+76 -11
View File
@@ -1,45 +1,59 @@
<template>
<div>
<ui-card>
<template #title><fa :icon="faTerminal"/> {{ $t('federation') }}</template>
<template #title><fa :icon="faTerminal"/> {{ $t('instance') }}</template>
<section class="fit-top">
<ui-input class="target" v-model="target" type="text" @enter="showInstance()">
<span>{{ $t('host') }}</span>
<template #prefix><fa :icon="faServer"/></template>
</ui-input>
<ui-button @click="showInstance()"><fa :icon="faSearch"/> {{ $t('lookup') }}</ui-button>
<div class="instance" v-if="instance">
<ui-input :value="instance.host" type="text" readonly>
<span>{{ $t('host') }}</span>
</ui-input>
<ui-horizon-group inputs>
<ui-input :value="instance.host" type="text" readonly>
<span>{{ $t('host') }}</span>
<template #prefix><fa :icon="faServer"/></template>
</ui-input>
<ui-input :value="instance.caughtAt | date" type="text" readonly>
<span>{{ $t('caught-at') }}</span>
<template #prefix><fa :icon="faCrosshairs"/></template>
</ui-input>
</ui-horizon-group>
<ui-horizon-group inputs>
<ui-input :value="instance.notesCount | number" type="text" readonly>
<span>{{ $t('notes') }}</span>
<template #prefix><fa :icon="faEnvelopeOpenText"/></template>
</ui-input>
<ui-input :value="instance.usersCount | number" type="text" readonly>
<span>{{ $t('users') }}</span>
<template #prefix><fa :icon="faUsers"/></template>
</ui-input>
</ui-horizon-group>
<ui-horizon-group inputs>
<ui-input :value="instance.followingCount | number" type="text" readonly>
<span>{{ $t('following') }}</span>
<template #prefix><fa :icon="faCaretDown"/></template>
</ui-input>
<ui-input :value="instance.followersCount | number" type="text" readonly>
<span>{{ $t('followers') }}</span>
<template #prefix><fa :icon="faCaretUp"/></template>
</ui-input>
</ui-horizon-group>
<ui-horizon-group inputs>
<ui-input :value="instance.latestRequestSentAt" type="text" readonly>
<ui-input :value="instance.latestRequestSentAt | date" type="text" readonly>
<span>{{ $t('latest-request-sent-at') }}</span>
<template #prefix><fa :icon="faPaperPlane"/></template>
</ui-input>
<ui-input :value="instance.latestStatus" type="text" readonly>
<span>{{ $t('status') }}</span>
<template #prefix><fa :icon="faTrafficLight"/></template>
</ui-input>
</ui-horizon-group>
<ui-input :value="instance.latestRequestReceivedAt" type="text" readonly>
<ui-input :value="instance.latestRequestReceivedAt | date" type="text" readonly>
<span>{{ $t('latest-request-received-at') }}</span>
<template #prefix><fa :icon="faInbox"/></template>
</ui-input>
<ui-switch v-model="instance.isBlocked" @change="updateInstance()">{{ $t('block') }}</ui-switch>
<ui-switch v-model="instance.isMarkedAsClosed" @change="updateInstance()">{{ $t('marked-as-closed') }}</ui-switch>
<details>
<summary>{{ $t('charts') }}</summary>
@@ -64,6 +78,10 @@
</ui-horizon-group>
<div ref="chart"></div>
</details>
<details>
<summary>{{ $t('delete-all-files') }}</summary>
<ui-button @click="deleteAllFiles()" style="margin-top: 16px;"><fa :icon="faTrashAlt"/> {{ $t('delete-all-files') }}</ui-button>
</details>
<details>
<summary>{{ $t('remove-all-following') }}</summary>
<ui-button @click="removeAllFollowing()" style="margin-top: 16px;"><fa :icon="faMinusCircle"/> {{ $t('remove-all-following') }}</ui-button>
@@ -115,7 +133,7 @@
<span>{{ $t('status') }}</span>
</header>
<div v-for="instance in instances" :style="{ opacity: instance.isNotResponding ? 0.5 : 1 }">
<a @click.prevent="showInstance(instance.host)" target="_blank" :href="`https://${instance.host}`" :style="{ textDecoration: instance.isMarkedAsClosed ? 'line-through' : 'none' }">{{ instance.host }}</a>
<a @click.prevent="showInstance(instance.host)" rel="nofollow noopener" target="_blank" :href="`https://${instance.host}`" :style="{ textDecoration: instance.isMarkedAsClosed ? 'line-through' : 'none' }">{{ instance.host }}</a>
<span>{{ instance.notesCount | number }}</span>
<span>{{ instance.usersCount | number }}</span>
<span>{{ instance.followingCount | number }}</span>
@@ -127,13 +145,24 @@
<ui-info v-if="instances.length == limit">{{ $t('result-is-truncated', { n: limit }) }}</ui-info>
</section>
</ui-card>
<ui-card>
<template #title><fa :icon="faBan"/> {{ $t('blocked-hosts') }}</template>
<section class="fit-top">
<ui-textarea v-model="blockedHosts">
<template #desc>{{ $t('blocked-hosts-info') }}</template>
</ui-textarea>
<ui-button @click="saveBlockedHosts">{{ $t('save') }}</ui-button>
</section>
</ui-card>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import i18n from '../../i18n';
import { faGlobe, faTerminal, faSearch, faMinusCircle, faServer } from '@fortawesome/free-solid-svg-icons';
import { faPaperPlane } from '@fortawesome/free-regular-svg-icons';
import { faTrashAlt, faBan, faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faTrafficLight, faInbox } from '@fortawesome/free-solid-svg-icons';
import ApexCharts from 'apexcharts';
import * as tinycolor from 'tinycolor2';
@@ -144,19 +173,24 @@ const negate = arr => arr.map(x => -x);
export default Vue.extend({
i18n: i18n('admin/views/federation.vue'),
filters: {
date: v => v ? new Date(v).toLocaleString() : 'N/A'
},
data() {
return {
instance: null,
target: null,
sort: '+lastCommunicatedAt',
state: 'all',
limit: 50,
limit: 100,
instances: [],
chart: null,
chartSrc: 'requests',
chartSpan: 'hour',
chartInstance: null,
faGlobe, faTerminal, faSearch, faMinusCircle, faServer
blockedHosts: '',
faTrashAlt, faBan, faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faPaperPlane, faTrafficLight, faInbox
};
},
@@ -226,6 +260,10 @@ export default Vue.extend({
mounted() {
this.fetchInstances();
this.$root.getMeta().then(meta => {
this.blockedHosts = meta.blockedHosts.join('\n');
});
},
beforeDestroy() {
@@ -273,6 +311,17 @@ export default Vue.extend({
});
},
deleteAllFiles() {
this.$root.api('admin/federation/delete-all-files', {
host: this.instance.host
}).then(() => {
this.$root.dialog({
type: 'success',
splash: true
});
});
},
updateInstance() {
this.$root.api('admin/federation/update-instance', {
host: this.instance.host,
@@ -457,6 +506,22 @@ export default Vue.extend({
}]
};
},
saveBlockedHosts() {
this.$root.api('admin/update-meta', {
blockedHosts: this.blockedHosts.split('\n')
}).then(() => {
this.$root.dialog({
type: 'success',
text: this.$t('saved')
});
}).catch(e => {
this.$root.dialog({
type: 'error',
text: e
});
});
}
}
});
</script>
-41
View File
@@ -1,41 +0,0 @@
<template>
<div>
<ui-card>
<template #title>{{ $t('hided-tags') }}</template>
<section>
<textarea class="jdnqwkzlnxcfftthoybjxrebyolvoucw" v-model="hidedTags"></textarea>
<ui-button @click="save">{{ $t('save') }}</ui-button>
</section>
</ui-card>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import i18n from '../../i18n';
export default Vue.extend({
i18n: i18n('admin/views/hashtags.vue'),
data() {
return {
hidedTags: '',
};
},
created() {
this.$root.getMeta().then(meta => {
this.hidedTags = meta.hidedTags.join('\n');
});
},
methods: {
save() {
this.$root.api('admin/update-meta', {
hidedTags: this.hidedTags.split('\n')
}).then(() => {
//this.$root.os.apis.dialog({ text: `Saved` });
}).catch(e => {
//this.$root.os.apis.dialog({ text: `Failed ${e}` });
});
}
}
});
</script>
+7 -6
View File
@@ -21,13 +21,13 @@
<li @click="nav('dashboard')" :class="{ active: page == 'dashboard' }"><fa icon="home" fixed-width/>{{ $t('dashboard') }}</li>
<li @click="nav('instance')" :class="{ active: page == 'instance' }"><fa icon="cog" fixed-width/>{{ $t('instance') }}</li>
<li @click="nav('queue')" :class="{ active: page == 'queue' }"><fa :icon="faTasks" fixed-width/>{{ $t('queue') }}</li>
<li @click="nav('logs')" :class="{ active: page == 'logs' }"><fa :icon="faStream" fixed-width/>{{ $t('logs') }}</li>
<li @click="nav('moderators')" :class="{ active: page == 'moderators' }"><fa :icon="faHeadset" fixed-width/>{{ $t('moderators') }}</li>
<li @click="nav('users')" :class="{ active: page == 'users' }"><fa icon="users" fixed-width/>{{ $t('users') }}</li>
<li @click="nav('drive')" :class="{ active: page == 'drive' }"><fa icon="cloud" fixed-width/>{{ $t('@.drive') }}</li>
<li @click="nav('federation')" :class="{ active: page == 'federation' }"><fa :icon="faGlobe" fixed-width/>{{ $t('federation') }}</li>
<li @click="nav('emoji')" :class="{ active: page == 'emoji' }"><fa :icon="faGrin" fixed-width/>{{ $t('emoji') }}</li>
<li @click="nav('announcements')" :class="{ active: page == 'announcements' }"><fa icon="broadcast-tower" fixed-width/>{{ $t('announcements') }}</li>
<li @click="nav('hashtags')" :class="{ active: page == 'hashtags' }"><fa icon="hashtag" fixed-width/>{{ $t('hashtags') }}</li>
<li @click="nav('abuse')" :class="{ active: page == 'abuse' }"><fa :icon="faExclamationCircle" fixed-width/>{{ $t('abuse') }}</li>
</ul>
<div class="back-to-misskey">
@@ -42,11 +42,11 @@
<div v-if="page == 'dashboard'"><x-dashboard/></div>
<div v-if="page == 'instance'"><x-instance/></div>
<div v-if="page == 'queue'"><x-queue/></div>
<div v-if="page == 'logs'"><x-logs/></div>
<div v-if="page == 'moderators'"><x-moderators/></div>
<div v-if="page == 'users'"><x-users/></div>
<div v-if="page == 'emoji'"><x-emoji/></div>
<div v-if="page == 'announcements'"><x-announcements/></div>
<div v-if="page == 'hashtags'"><x-hashtags/></div>
<div v-if="page == 'drive'"><x-drive/></div>
<div v-if="page == 'federation'"><x-federation/></div>
<div v-if="page == 'abuse'"><x-abuse/></div>
@@ -62,16 +62,16 @@ import { version } from '../../config';
import XDashboard from "./dashboard.vue";
import XInstance from "./instance.vue";
import XQueue from "./queue.vue";
import XLogs from "./logs.vue";
import XModerators from "./moderators.vue";
import XEmoji from "./emoji.vue";
import XAnnouncements from "./announcements.vue";
import XHashtags from "./hashtags.vue";
import XUsers from "./users.vue";
import XDrive from "./drive.vue";
import XAbuse from "./abuse.vue";
import XFederation from "./federation.vue";
import { faHeadset, faArrowLeft, faGlobe, faExclamationCircle, faTasks } from '@fortawesome/free-solid-svg-icons';
import { faHeadset, faArrowLeft, faGlobe, faExclamationCircle, faTasks, faStream } from '@fortawesome/free-solid-svg-icons';
import { faGrin } from '@fortawesome/free-regular-svg-icons';
// Detect the user agent
@@ -84,10 +84,10 @@ export default Vue.extend({
XDashboard,
XInstance,
XQueue,
XLogs,
XModerators,
XEmoji,
XAnnouncements,
XHashtags,
XUsers,
XDrive,
XAbuse,
@@ -107,7 +107,8 @@ export default Vue.extend({
faHeadset,
faGlobe,
faExclamationCircle,
faTasks
faTasks,
faStream
};
},
methods: {
+274 -93
View File
@@ -2,135 +2,241 @@
<div>
<ui-card>
<template #title><fa icon="cog"/> {{ $t('instance') }}</template>
<section class="fit-top fit-bottom">
<section class="fit-top">
<ui-input :value="host" readonly>{{ $t('host') }}</ui-input>
<ui-input v-model="name">{{ $t('instance-name') }}</ui-input>
<ui-textarea v-model="description">{{ $t('instance-description') }}</ui-textarea>
<ui-input v-model="iconUrl"><template #icon><fa icon="link"/></template>{{ $t('icon-url') }}</ui-input>
<ui-input v-model="mascotImageUrl"><template #icon><fa icon="link"/></template>{{ $t('logo-url') }}</ui-input>
<ui-input v-model="bannerUrl"><template #icon><fa icon="link"/></template>{{ $t('banner-url') }}</ui-input>
<ui-input v-model="errorImageUrl"><template #icon><fa icon="link"/></template>{{ $t('error-image-url') }}</ui-input>
<ui-input v-model="ToSUrl"><template #icon><fa icon="link"/></template>{{ $t('tos-url') }}</ui-input>
<ui-input v-model="languages"><template #icon><fa icon="language"/></template>{{ $t('languages') }}<template #desc>{{ $t('languages-desc') }}</template></ui-input>
<details>
<summary>{{ $t('advanced-config') }}</summary>
<ui-input v-model="repositoryUrl"><template #icon><fa icon="link"/></template>{{ $t('repository-url') }}</ui-input>
<ui-input v-model="feedbackUrl"><template #icon><fa icon="link"/></template>{{ $t('feedback-url') }}</ui-input>
</details>
</section>
<section class="fit-bottom">
<header><fa :icon="faHeadset"/> {{ $t('maintainer-config') }}</header>
<ui-input v-model="maintainerName">{{ $t('maintainer-name') }}</ui-input>
<ui-input v-model="maintainerEmail" type="email"><template #icon><fa :icon="farEnvelope"/></template>{{ $t('maintainer-email') }}</ui-input>
</section>
<section>
<ui-switch v-model="disableRegistration">{{ $t('disable-registration') }}</ui-switch>
<ui-button v-if="disableRegistration" @click="invite">{{ $t('invite') }}</ui-button>
</section>
<section>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>
<ui-card>
<template #title><fa :icon="faPencilAlt"/> {{ $t('note-and-tl') }}</template>
<section class="fit-top fit-bottom">
<ui-input v-model="maxNoteTextLength">{{ $t('max-note-text-length') }}</ui-input>
</section>
<section>
<ui-switch v-model="disableRegistration">{{ $t('disable-registration') }}</ui-switch>
<ui-switch v-model="disableLocalTimeline">{{ $t('disable-local-timeline') }}</ui-switch>
<ui-switch v-model="disableGlobalTimeline">{{ $t('disable-global-timeline') }}</ui-switch>
<ui-info>{{ $t('disabling-timelines-info') }}</ui-info>
</section>
<section class="fit-bottom">
<header><fa icon="cloud"/> {{ $t('drive-config') }}</header>
<section>
<ui-switch v-model="enableEmojiReaction">{{ $t('enable-emoji-reaction') }}</ui-switch>
<ui-switch v-model="useStarForReactionFallback">{{ $t('use-star-for-reaction-fallback') }}</ui-switch>
</section>
<section>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>
<ui-card>
<template #title><fa icon="cloud"/> {{ $t('drive-config') }}</template>
<section>
<ui-switch v-model="useObjectStorage">{{ $t('use-object-storage') }}</ui-switch>
<template v-if="useObjectStorage">
<ui-info>
<i18n path="object-storage-s3-info">
<a href="https://docs.aws.amazon.com/general/latest/gr/rande.html" target="_blank">{{ $t('object-storage-s3-info-here') }}</a>
</i18n>
</ui-info>
<ui-info>{{ $t('object-storage-gcs-info') }}</ui-info>
<ui-input v-model="objectStorageBaseUrl" :disabled="!useObjectStorage">{{ $t('object-storage-base-url') }}</ui-input>
<ui-horizon-group inputs>
<ui-input v-model="objectStorageBucket" :disabled="!useObjectStorage">{{ $t('object-storage-bucket') }}</ui-input>
<ui-input v-model="objectStoragePrefix" :disabled="!useObjectStorage">{{ $t('object-storage-prefix') }}</ui-input>
</ui-horizon-group>
<ui-input v-model="objectStorageEndpoint" :disabled="!useObjectStorage">{{ $t('object-storage-endpoint') }}</ui-input>
<ui-horizon-group inputs>
<ui-input v-model="objectStorageRegion" :disabled="!useObjectStorage">{{ $t('object-storage-region') }}</ui-input>
<ui-input v-model="objectStoragePort" type="number" :disabled="!useObjectStorage">{{ $t('object-storage-port') }}</ui-input>
</ui-horizon-group>
<ui-horizon-group inputs>
<ui-input v-model="objectStorageAccessKey" :disabled="!useObjectStorage"><template #icon><fa icon="key"/></template>{{ $t('object-storage-access-key') }}</ui-input>
<ui-input v-model="objectStorageSecretKey" :disabled="!useObjectStorage"><template #icon><fa icon="key"/></template>{{ $t('object-storage-secret-key') }}</ui-input>
</ui-horizon-group>
<ui-switch v-model="objectStorageUseSSL" :disabled="!useObjectStorage">{{ $t('object-storage-use-ssl') }}</ui-switch>
</template>
</section>
<section>
<ui-switch v-model="cacheRemoteFiles">{{ $t('cache-remote-files') }}<template #desc>{{ $t('cache-remote-files-desc') }}</template></ui-switch>
</section>
<section class="fit-top fit-bottom">
<ui-input v-model="localDriveCapacityMb" type="number">{{ $t('local-drive-capacity-mb') }}<template #suffix>MB</template><template #desc>{{ $t('mb') }}</template></ui-input>
<ui-input v-model="remoteDriveCapacityMb" type="number" :disabled="!cacheRemoteFiles">{{ $t('remote-drive-capacity-mb') }}<template #suffix>MB</template><template #desc>{{ $t('mb') }}</template></ui-input>
</section>
<section class="fit-bottom">
<header><fa :icon="faShieldAlt"/> {{ $t('recaptcha-config') }}</header>
<ui-switch v-model="enableRecaptcha">{{ $t('enable-recaptcha') }}</ui-switch>
<ui-info>{{ $t('recaptcha-info') }}</ui-info>
<ui-horizon-group inputs>
<ui-input v-model="recaptchaSiteKey" :disabled="!enableRecaptcha"><template #icon><fa icon="key"/></template>{{ $t('recaptcha-site-key') }}</ui-input>
<ui-input v-model="recaptchaSecretKey" :disabled="!enableRecaptcha"><template #icon><fa icon="key"/></template>{{ $t('recaptcha-secret-key') }}</ui-input>
</ui-horizon-group>
</section>
<section>
<header><fa :icon="faGhost"/> {{ $t('proxy-account-config') }}</header>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>
<ui-card>
<template #title><fa :icon="faThumbtack"/> {{ $t('pinned-users') }}</template>
<section class="fit-top">
<ui-textarea v-model="pinnedUsers">
<template #desc>{{ $t('pinned-users-info') }}</template>
</ui-textarea>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>
<ui-card>
<template #title><fa :icon="faGhost"/> {{ $t('proxy-account-config') }}</template>
<section>
<ui-info>{{ $t('proxy-account-info') }}</ui-info>
<ui-input v-model="proxyAccount"><template #prefix>@</template>{{ $t('proxy-account-username') }}<template #desc>{{ $t('proxy-account-username-desc') }}</template></ui-input>
<ui-info warn>{{ $t('proxy-account-warn') }}</ui-info>
</section>
<section>
<header><fa :icon="farEnvelope"/> {{ $t('email-config') }}</header>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>
<ui-card>
<template #title><fa :icon="farEnvelope"/> {{ $t('email-config') }}</template>
<section>
<ui-switch v-model="enableEmail">{{ $t('enable-email') }}<template #desc>{{ $t('email-config-info') }}</template></ui-switch>
<ui-input v-model="email" type="email" :disabled="!enableEmail">{{ $t('email') }}</ui-input>
<ui-horizon-group inputs>
<ui-input v-model="smtpHost" :disabled="!enableEmail">{{ $t('smtp-host') }}</ui-input>
<ui-input v-model="smtpPort" type="number" :disabled="!enableEmail">{{ $t('smtp-port') }}</ui-input>
</ui-horizon-group>
<ui-switch v-model="smtpAuth">{{ $t('smtp-auth') }}</ui-switch>
<ui-horizon-group inputs>
<ui-input v-model="smtpUser" :disabled="!enableEmail || !smtpAuth">{{ $t('smtp-user') }}</ui-input>
<ui-input v-model="smtpPass" type="password" :withPasswordToggle="true" :disabled="!enableEmail || !smtpAuth">{{ $t('smtp-pass') }}</ui-input>
</ui-horizon-group>
<ui-switch v-model="smtpSecure" :disabled="!enableEmail">{{ $t('smtp-secure') }}<template #desc>{{ $t('smtp-secure-info') }}</template></ui-switch>
<template v-if="enableEmail">
<ui-input v-model="email" type="email" :disabled="!enableEmail">{{ $t('email') }}</ui-input>
<ui-horizon-group inputs>
<ui-input v-model="smtpHost" :disabled="!enableEmail">{{ $t('smtp-host') }}</ui-input>
<ui-input v-model="smtpPort" type="number" :disabled="!enableEmail">{{ $t('smtp-port') }}</ui-input>
</ui-horizon-group>
<ui-switch v-model="smtpAuth">{{ $t('smtp-auth') }}</ui-switch>
<ui-horizon-group inputs>
<ui-input v-model="smtpUser" :disabled="!enableEmail || !smtpAuth">{{ $t('smtp-user') }}</ui-input>
<ui-input v-model="smtpPass" type="password" :with-password-toggle="true" :disabled="!enableEmail || !smtpAuth">{{ $t('smtp-pass') }}</ui-input>
</ui-horizon-group>
<ui-switch v-model="smtpSecure" :disabled="!enableEmail">{{ $t('smtp-secure') }}<template #desc>{{ $t('smtp-secure-info') }}</template></ui-switch>
</template>
</section>
<section>
<header><fa :icon="faBolt"/> {{ $t('serviceworker-config') }}</header>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>
<ui-card>
<template #title><fa :icon="faBolt"/> {{ $t('serviceworker-config') }}</template>
<section>
<ui-switch v-model="enableServiceWorker">{{ $t('enable-serviceworker') }}<template #desc>{{ $t('serviceworker-info') }}</template></ui-switch>
<ui-info>{{ $t('vapid-info') }}<br><code>npm i web-push -g<br>web-push generate-vapid-keys</code></ui-info>
<ui-horizon-group inputs class="fit-bottom">
<ui-input v-model="swPublicKey" :disabled="!enableServiceWorker"><template #icon><fa icon="key"/></template>{{ $t('vapid-publickey') }}</ui-input>
<ui-input v-model="swPrivateKey" :disabled="!enableServiceWorker"><template #icon><fa icon="key"/></template>{{ $t('vapid-privatekey') }}</ui-input>
</ui-horizon-group>
<template v-if="enableServiceWorker">
<ui-info>{{ $t('vapid-info') }}<br><code>npm i web-push -g<br>web-push generate-vapid-keys</code></ui-info>
<ui-horizon-group inputs class="fit-bottom">
<ui-input v-model="swPublicKey" :disabled="!enableServiceWorker"><template #icon><fa icon="key"/></template>{{ $t('vapid-publickey') }}</ui-input>
<ui-input v-model="swPrivateKey" :disabled="!enableServiceWorker"><template #icon><fa icon="key"/></template>{{ $t('vapid-privatekey') }}</ui-input>
</ui-horizon-group>
</template>
</section>
<section>
<header>summaly Proxy</header>
<ui-input v-model="summalyProxy">URL</ui-input>
</section>
<section>
<header><fa :icon="faUserPlus"/> {{ $t('user-recommendation-config') }}</header>
<ui-switch v-model="enableExternalUserRecommendation">{{ $t('enable-external-user-recommendation') }}</ui-switch>
<ui-input v-model="externalUserRecommendationEngine" :disabled="!enableExternalUserRecommendation">{{ $t('external-user-recommendation-engine') }}<template #desc>{{ $t('external-user-recommendation-engine-desc') }}</template></ui-input>
<ui-input v-model="externalUserRecommendationTimeout" type="number" :disabled="!enableExternalUserRecommendation">{{ $t('external-user-recommendation-timeout') }}<template #suffix>ms</template><template #desc>{{ $t('external-user-recommendation-timeout-desc') }}</template></ui-input>
</section>
<section>
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>
<ui-card>
<template #title>{{ $t('invite') }}</template>
<template #title><fa :icon="faShieldAlt"/> {{ $t('recaptcha-config') }}</template>
<section :class="enableRecaptcha ? 'fit-bottom' : ''">
<ui-switch v-model="enableRecaptcha">{{ $t('enable-recaptcha') }}</ui-switch>
<template v-if="enableRecaptcha">
<ui-info>{{ $t('recaptcha-info') }}</ui-info>
<ui-horizon-group inputs>
<ui-input v-model="recaptchaSiteKey" :disabled="!enableRecaptcha"><template #icon><fa icon="key"/></template>{{ $t('recaptcha-site-key') }}</ui-input>
<ui-input v-model="recaptchaSecretKey" :disabled="!enableRecaptcha"><template #icon><fa icon="key"/></template>{{ $t('recaptcha-secret-key') }}</ui-input>
</ui-horizon-group>
</template>
</section>
<section v-if="enableRecaptcha && recaptchaSiteKey">
<header>{{ $t('recaptcha-preview') }}</header>
<div ref="recaptcha" style="margin: 16px 0 0 0;" :key="recaptchaSiteKey"></div>
</section>
<section>
<ui-button @click="invite">{{ $t('invite') }}</ui-button>
<p v-if="inviteCode">Code: <code>{{ inviteCode }}</code></p>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>
<ui-card>
<template #title><fa :icon="['fab', 'twitter']"/> {{ $t('twitter-integration-config') }}</template>
<template #title><fa :icon="faShieldAlt"/> {{ $t('external-service-integration-config') }}</template>
<section>
<header><fa :icon="['fab', 'twitter']"/> {{ $t('twitter-integration-config') }}</header>
<ui-switch v-model="enableTwitterIntegration">{{ $t('enable-twitter-integration') }}</ui-switch>
<ui-horizon-group>
<ui-input v-model="twitterConsumerKey" :disabled="!enableTwitterIntegration"><template #icon><fa icon="key"/></template>{{ $t('twitter-integration-consumer-key') }}</ui-input>
<ui-input v-model="twitterConsumerSecret" :disabled="!enableTwitterIntegration"><template #icon><fa icon="key"/></template>{{ $t('twitter-integration-consumer-secret') }}</ui-input>
</ui-horizon-group>
<ui-info>{{ $t('twitter-integration-info', { url: `${url}/api/tw/cb` }) }}</ui-info>
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
<template v-if="enableTwitterIntegration">
<ui-horizon-group>
<ui-input v-model="twitterConsumerKey" :disabled="!enableTwitterIntegration"><template #icon><fa icon="key"/></template>{{ $t('twitter-integration-consumer-key') }}</ui-input>
<ui-input v-model="twitterConsumerSecret" :disabled="!enableTwitterIntegration"><template #icon><fa icon="key"/></template>{{ $t('twitter-integration-consumer-secret') }}</ui-input>
</ui-horizon-group>
<ui-info>{{ $t('twitter-integration-info', { url: `${url}/api/tw/cb` }) }}</ui-info>
</template>
</section>
</ui-card>
<ui-card>
<template #title><fa :icon="['fab', 'github']"/> {{ $t('github-integration-config') }}</template>
<section>
<header><fa :icon="['fab', 'github']"/> {{ $t('github-integration-config') }}</header>
<ui-switch v-model="enableGithubIntegration">{{ $t('enable-github-integration') }}</ui-switch>
<ui-horizon-group>
<ui-input v-model="githubClientId" :disabled="!enableGithubIntegration"><template #icon><fa icon="key"/></template>{{ $t('github-integration-client-id') }}</ui-input>
<ui-input v-model="githubClientSecret" :disabled="!enableGithubIntegration"><template #icon><fa icon="key"/></template>{{ $t('github-integration-client-secret') }}</ui-input>
</ui-horizon-group>
<ui-info>{{ $t('github-integration-info', { url: `${url}/api/gh/cb` }) }}</ui-info>
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
<template v-if="enableGithubIntegration">
<ui-horizon-group>
<ui-input v-model="githubClientId" :disabled="!enableGithubIntegration"><template #icon><fa icon="key"/></template>{{ $t('github-integration-client-id') }}</ui-input>
<ui-input v-model="githubClientSecret" :disabled="!enableGithubIntegration"><template #icon><fa icon="key"/></template>{{ $t('github-integration-client-secret') }}</ui-input>
</ui-horizon-group>
<ui-info>{{ $t('github-integration-info', { url: `${url}/api/gh/cb` }) }}</ui-info>
</template>
</section>
<section>
<header><fa :icon="['fab', 'discord']"/> {{ $t('discord-integration-config') }}</header>
<ui-switch v-model="enableDiscordIntegration">{{ $t('enable-discord-integration') }}</ui-switch>
<template v-if="enableDiscordIntegration">
<ui-horizon-group>
<ui-input v-model="discordClientId" :disabled="!enableDiscordIntegration"><template #icon><fa icon="key"/></template>{{ $t('discord-integration-client-id') }}</ui-input>
<ui-input v-model="discordClientSecret" :disabled="!enableDiscordIntegration"><template #icon><fa icon="key"/></template>{{ $t('discord-integration-client-secret') }}</ui-input>
</ui-horizon-group>
<ui-info>{{ $t('discord-integration-info', { url: `${url}/api/dc/cb` }) }}</ui-info>
</template>
</section>
<section>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>
<ui-card>
<template #title><fa :icon="['fab', 'discord']"/> {{ $t('discord-integration-config') }}</template>
<section>
<ui-switch v-model="enableDiscordIntegration">{{ $t('enable-discord-integration') }}</ui-switch>
<ui-horizon-group>
<ui-input v-model="discordClientId" :disabled="!enableDiscordIntegration"><template #icon><fa icon="key"/></template>{{ $t('discord-integration-client-id') }}</ui-input>
<ui-input v-model="discordClientSecret" :disabled="!enableDiscordIntegration"><template #icon><fa icon="key"/></template>{{ $t('discord-integration-client-secret') }}</ui-input>
</ui-horizon-group>
<ui-info>{{ $t('discord-integration-info', { url: `${url}/api/dc/cb` }) }}</ui-info>
<ui-button @click="updateMeta">{{ $t('save') }}</ui-button>
</section>
</ui-card>
<details>
<summary style="color:var(--text);">{{ $t('advanced-config') }}</summary>
<ui-card>
<template #title><fa :icon="faHashtag"/> {{ $t('hidden-tags') }}</template>
<section class="fit-top">
<ui-textarea v-model="hiddenTags">
<template #desc>{{ $t('hidden-tags-info') }}</template>
</ui-textarea>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>
<ui-card>
<template #title>summaly Proxy</template>
<section class="fit-top fit-bottom">
<ui-input v-model="summalyProxy">URL</ui-input>
</section>
<section>
<ui-button @click="updateMeta"><fa :icon="faSave"/> {{ $t('save') }}</ui-button>
</section>
</ui-card>
</details>
</div>
</template>
@@ -139,8 +245,8 @@ import Vue from 'vue';
import i18n from '../../i18n';
import { url, host } from '../../config';
import { toUnicode } from 'punycode';
import { faHeadset, faShieldAlt, faGhost, faUserPlus, faBolt } from '@fortawesome/free-solid-svg-icons';
import { faEnvelope as farEnvelope } from '@fortawesome/free-regular-svg-icons';
import { faHeadset, faShieldAlt, faGhost, faUserPlus, faBolt, faThumbtack, faPencilAlt, faHashtag } from '@fortawesome/free-solid-svg-icons';
import { faEnvelope as farEnvelope, faSave } from '@fortawesome/free-regular-svg-icons';
export default Vue.extend({
i18n: i18n('admin/views/instance.vue'),
@@ -151,12 +257,18 @@ export default Vue.extend({
host: toUnicode(host),
maintainerName: null,
maintainerEmail: null,
ToSUrl: null,
repositoryUrl: "https://github.com/syuilo/misskey",
feedbackUrl: null,
disableRegistration: false,
disableLocalTimeline: false,
disableGlobalTimeline: false,
enableEmojiReaction: true,
useStarForReactionFallback: false,
mascotImageUrl: null,
bannerUrl: null,
errorImageUrl: null,
iconUrl: null,
name: null,
description: null,
languages: null,
@@ -177,10 +289,6 @@ export default Vue.extend({
discordClientId: null,
discordClientSecret: null,
proxyAccount: null,
inviteCode: null,
enableExternalUserRecommendation: false,
externalUserRecommendationEngine: null,
externalUserRecommendationTimeout: null,
summalyProxy: null,
enableEmail: false,
email: null,
@@ -193,20 +301,38 @@ export default Vue.extend({
enableServiceWorker: false,
swPublicKey: null,
swPrivateKey: null,
faHeadset, faShieldAlt, faGhost, faUserPlus, farEnvelope, faBolt
pinnedUsers: '',
hiddenTags: '',
useObjectStorage: false,
objectStorageBaseUrl: null,
objectStorageBucket: null,
objectStoragePrefix: null,
objectStorageEndpoint: null,
objectStorageRegion: null,
objectStoragePort: null,
objectStorageAccessKey: null,
objectStorageSecretKey: null,
objectStorageUseSSL: false,
faHeadset, faShieldAlt, faGhost, faUserPlus, farEnvelope, faBolt, faThumbtack, faPencilAlt, faSave, faHashtag
};
},
created() {
this.$root.getMeta().then(meta => {
this.maintainerName = meta.maintainer.name;
this.maintainerEmail = meta.maintainer.email;
this.$root.getMeta(true).then(meta => {
this.maintainerName = meta.maintainerName;
this.maintainerEmail = meta.maintainerEmail;
this.ToSUrl = meta.ToSUrl;
this.repositoryUrl = meta.repositoryUrl;
this.feedbackUrl = meta.feedbackUrl;
this.disableRegistration = meta.disableRegistration;
this.disableLocalTimeline = meta.disableLocalTimeline;
this.disableGlobalTimeline = meta.disableGlobalTimeline;
this.enableEmojiReaction = meta.enableEmojiReaction;
this.useStarForReactionFallback = meta.useStarForReactionFallback;
this.mascotImageUrl = meta.mascotImageUrl;
this.bannerUrl = meta.bannerUrl;
this.errorImageUrl = meta.errorImageUrl;
this.iconUrl = meta.iconUrl;
this.name = meta.name;
this.description = meta.description;
this.languages = meta.langs.join(' ');
@@ -227,9 +353,6 @@ export default Vue.extend({
this.enableDiscordIntegration = meta.enableDiscordIntegration;
this.discordClientId = meta.discordClientId;
this.discordClientSecret = meta.discordClientSecret;
this.enableExternalUserRecommendation = meta.enableExternalUserRecommendation;
this.externalUserRecommendationEngine = meta.externalUserRecommendationEngine;
this.externalUserRecommendationTimeout = meta.externalUserRecommendationTimeout;
this.summalyProxy = meta.summalyProxy;
this.enableEmail = meta.enableEmail;
this.email = meta.email;
@@ -242,13 +365,56 @@ export default Vue.extend({
this.enableServiceWorker = meta.enableServiceWorker;
this.swPublicKey = meta.swPublickey;
this.swPrivateKey = meta.swPrivateKey;
this.pinnedUsers = meta.pinnedUsers.join('\n');
this.hiddenTags = meta.hiddenTags.join('\n');
this.useObjectStorage = meta.useObjectStorage;
this.objectStorageBaseUrl = meta.objectStorageBaseUrl;
this.objectStorageBucket = meta.objectStorageBucket;
this.objectStoragePrefix = meta.objectStoragePrefix;
this.objectStorageEndpoint = meta.objectStorageEndpoint;
this.objectStorageRegion = meta.objectStorageRegion;
this.objectStoragePort = meta.objectStoragePort;
this.objectStorageAccessKey = meta.objectStorageAccessKey;
this.objectStorageSecretKey = meta.objectStorageSecretKey;
this.objectStorageUseSSL = meta.objectStorageUseSSL;
});
},
mounted() {
const renderRecaptchaPreview = () => {
if (!(window as any).grecaptcha) return;
if (!this.$refs.recaptcha) return;
if (!this.recaptchaSiteKey) return;
(window as any).grecaptcha.render(this.$refs.recaptcha, {
sitekey: this.recaptchaSiteKey
});
};
window.onRecaotchaLoad = () => {
renderRecaptchaPreview();
};
const head = document.getElementsByTagName('head')[0];
const script = document.createElement('script');
script.setAttribute('src', 'https://www.google.com/recaptcha/api.js?onload=onRecaotchaLoad');
head.appendChild(script);
this.$watch('enableRecaptcha', () => {
renderRecaptchaPreview();
});
this.$watch('recaptchaSiteKey', () => {
renderRecaptchaPreview();
});
},
methods: {
invite() {
this.$root.api('admin/invite').then(x => {
this.inviteCode = x.code;
this.$root.dialog({
type: 'info',
text: x.code
});
}).catch(e => {
this.$root.dialog({
type: 'error',
@@ -261,12 +427,18 @@ export default Vue.extend({
this.$root.api('admin/update-meta', {
maintainerName: this.maintainerName,
maintainerEmail: this.maintainerEmail,
ToSUrl: this.ToSUrl,
repositoryUrl: this.repositoryUrl,
feedbackUrl: this.feedbackUrl,
disableRegistration: this.disableRegistration,
disableLocalTimeline: this.disableLocalTimeline,
disableGlobalTimeline: this.disableGlobalTimeline,
enableEmojiReaction: this.enableEmojiReaction,
useStarForReactionFallback: this.useStarForReactionFallback,
mascotImageUrl: this.mascotImageUrl,
bannerUrl: this.bannerUrl,
errorImageUrl: this.errorImageUrl,
iconUrl: this.iconUrl,
name: this.name,
description: this.description,
langs: this.languages.split(' '),
@@ -287,9 +459,6 @@ export default Vue.extend({
enableDiscordIntegration: this.enableDiscordIntegration,
discordClientId: this.discordClientId,
discordClientSecret: this.discordClientSecret,
enableExternalUserRecommendation: this.enableExternalUserRecommendation,
externalUserRecommendationEngine: this.externalUserRecommendationEngine,
externalUserRecommendationTimeout: parseInt(this.externalUserRecommendationTimeout, 10),
summalyProxy: this.summalyProxy,
enableEmail: this.enableEmail,
email: this.email,
@@ -300,7 +469,19 @@ export default Vue.extend({
smtpPass: this.smtpAuth ? this.smtpPass : '',
enableServiceWorker: this.enableServiceWorker,
swPublicKey: this.swPublicKey,
swPrivateKey: this.swPrivateKey
swPrivateKey: this.swPrivateKey,
pinnedUsers: this.pinnedUsers.split('\n'),
hiddenTags: this.hiddenTags.split('\n'),
useObjectStorage: this.useObjectStorage,
objectStorageBaseUrl: this.objectStorageBaseUrl ? this.objectStorageBaseUrl : null,
objectStorageBucket: this.objectStorageBucket ? this.objectStorageBucket : null,
objectStoragePrefix: this.objectStoragePrefix ? this.objectStoragePrefix : null,
objectStorageEndpoint: this.objectStorageEndpoint ? this.objectStorageEndpoint : null,
objectStorageRegion: this.objectStorageRegion ? this.objectStorageRegion : null,
objectStoragePort: this.objectStoragePort ? this.objectStoragePort : null,
objectStorageAccessKey: this.objectStorageAccessKey ? this.objectStorageAccessKey : null,
objectStorageSecretKey: this.objectStorageSecretKey ? this.objectStorageSecretKey : null,
objectStorageUseSSL: this.objectStorageUseSSL,
}).then(() => {
this.$root.dialog({
type: 'success',
+108
View File
@@ -0,0 +1,108 @@
<template>
<div>
<ui-card>
<template #title><fa :icon="faStream"/> {{ $t('logs') }}</template>
<section class="fit-top">
<ui-horizon-group inputs>
<ui-input v-model="domain" :debounce="true">
<span>{{ $t('domain') }}</span>
</ui-input>
<ui-select v-model="level">
<template #label>{{ $t('level') }}</template>
<option value="all">{{ $t('levels.all') }}</option>
<option value="info">{{ $t('levels.info') }}</option>
<option value="success">{{ $t('levels.success') }}</option>
<option value="warning">{{ $t('levels.warning') }}</option>
<option value="error">{{ $t('levels.error') }}</option>
<option value="debug">{{ $t('levels.debug') }}</option>
</ui-select>
</ui-horizon-group>
<div class="nqjzuvev">
<code v-for="log in logs" :key="log.id" :class="log.level">
<details>
<summary><mk-time :time="log.createdAt"/> [{{ log.domain.join('.') }}] {{ log.message }}</summary>
<vue-json-pretty v-if="log.data" :data="log.data"></vue-json-pretty>
</details>
</code>
</div>
</section>
</ui-card>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import i18n from '../../i18n';
import { faStream } from '@fortawesome/free-solid-svg-icons';
import VueJsonPretty from 'vue-json-pretty';
export default Vue.extend({
i18n: i18n('admin/views/logs.vue'),
components: {
VueJsonPretty
},
data() {
return {
logs: [],
level: 'all',
domain: '',
faStream
};
},
watch: {
level() {
this.logs = [];
this.fetch();
},
domain() {
this.logs = [];
this.fetch();
}
},
mounted() {
this.fetch();
},
methods: {
fetch() {
this.$root.api('admin/logs', {
level: this.level === 'all' ? null : this.level,
domain: this.domain === '' ? null : this.domain,
limit: 100
}).then(logs => {
this.logs = logs.reverse();
});
}
}
});
</script>
<style lang="stylus" scoped>
.nqjzuvev
padding 8px
background #000
color #fff
font-size 14px
> code
display block
&.error
color #f00
&.warning
color #ff0
&.success
color #0f0
&.debug
opacity 0.7
</style>
+269 -1
View File
@@ -1,26 +1,261 @@
<template>
<div>
<ui-card>
<template #title>{{ $t('operation') }}</template>
<template #title><fa :icon="faChartBar"/> {{ $t('title') }}</template>
<section class="wptihjuy">
<header><fa :icon="faPaperPlane"/> Deliver</header>
<ui-info warn v-if="latestStats && latestStats.deliver.waiting > 0">The queue is jammed.</ui-info>
<ui-horizon-group inputs v-if="latestStats" class="fit-bottom">
<ui-input :value="latestStats.deliver.activeSincePrevTick | number" type="text" readonly>
<span>Process</span>
<template #prefix><fa :icon="fasPlayCircle"/></template>
<template #suffix>jobs/tick</template>
</ui-input>
<ui-input :value="latestStats.deliver.active | number" type="text" readonly>
<span>Active</span>
<template #prefix><fa :icon="farPlayCircle"/></template>
<template #suffix>jobs</template>
</ui-input>
<ui-input :value="latestStats.deliver.waiting | number" type="text" readonly>
<span>Waiting</span>
<template #prefix><fa :icon="faStopCircle"/></template>
<template #suffix>jobs</template>
</ui-input>
<ui-input :value="latestStats.deliver.delayed | number" type="text" readonly>
<span>Delayed</span>
<template #prefix><fa :icon="faStopwatch"/></template>
<template #suffix>jobs</template>
</ui-input>
</ui-horizon-group>
<div ref="deliverChart" class="chart"></div>
</section>
<section class="wptihjuy">
<header><fa :icon="faInbox"/> Inbox</header>
<ui-info warn v-if="latestStats && latestStats.inbox.waiting > 0">The queue is jammed.</ui-info>
<ui-horizon-group inputs v-if="latestStats" class="fit-bottom">
<ui-input :value="latestStats.inbox.activeSincePrevTick | number" type="text" readonly>
<span>Process</span>
<template #prefix><fa :icon="fasPlayCircle"/></template>
<template #suffix>jobs/tick</template>
</ui-input>
<ui-input :value="latestStats.inbox.active | number" type="text" readonly>
<span>Active</span>
<template #prefix><fa :icon="farPlayCircle"/></template>
<template #suffix>jobs</template>
</ui-input>
<ui-input :value="latestStats.inbox.waiting | number" type="text" readonly>
<span>Waiting</span>
<template #prefix><fa :icon="faStopCircle"/></template>
<template #suffix>jobs</template>
</ui-input>
<ui-input :value="latestStats.inbox.delayed | number" type="text" readonly>
<span>Delayed</span>
<template #prefix><fa :icon="faStopwatch"/></template>
<template #suffix>jobs</template>
</ui-input>
</ui-horizon-group>
<div ref="inboxChart" class="chart"></div>
</section>
<section>
<ui-button @click="removeAllJobs">{{ $t('remove-all-jobs') }}</ui-button>
</section>
</ui-card>
<ui-card>
<template #title><fa :icon="faTasks"/> {{ $t('jobs') }}</template>
<section class="fit-top">
<ui-horizon-group inputs>
<ui-select v-model="domain">
<template #label>{{ $t('queue') }}</template>
<option value="deliver">{{ $t('domains.deliver') }}</option>
<option value="inbox">{{ $t('domains.inbox') }}</option>
</ui-select>
<ui-select v-model="state">
<template #label>{{ $t('state') }}</template>
<option value="delayed">{{ $t('states.delayed') }}</option>
</ui-select>
</ui-horizon-group>
<sequential-entrance animation="entranceFromTop" delay="25">
<div class="xvvuvgsv" v-for="job in jobs">
<b>{{ job.id }}</b>
<template v-if="domain === 'deliver'">
<span>{{ job.data.to }}</span>
</template>
<template v-if="domain === 'inbox'">
<span>{{ job.activity.id }}</span>
</template>
</div>
</sequential-entrance>
<ui-info v-if="jobs.length == jobsLimit">{{ $t('result-is-truncated', { n: jobsLimit }) }}</ui-info>
</section>
</ui-card>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import i18n from '../../i18n';
import ApexCharts from 'apexcharts';
import * as tinycolor from 'tinycolor2';
import { faTasks, faInbox, faStopwatch, faPlayCircle as fasPlayCircle } from '@fortawesome/free-solid-svg-icons';
import { faPaperPlane, faStopCircle, faPlayCircle as farPlayCircle, faChartBar } from '@fortawesome/free-regular-svg-icons';
const limit = 200;
export default Vue.extend({
i18n: i18n('admin/views/queue.vue'),
data() {
return {
stats: [],
deliverChart: null,
inboxChart: null,
jobs: [],
jobsLimit: 50,
domain: 'deliver',
state: 'delayed',
faTasks, faPaperPlane, faInbox, faStopwatch, faStopCircle, farPlayCircle, fasPlayCircle, faChartBar
};
},
computed: {
latestStats(): any {
return this.stats[this.stats.length - 1];
}
},
watch: {
stats(stats) {
this.inboxChart.updateSeries([{
name: 'Process',
type: 'area',
data: stats.map((x, i) => ({ x: i, y: x.inbox.activeSincePrevTick }))
}, {
name: 'Active',
type: 'area',
data: stats.map((x, i) => ({ x: i, y: x.inbox.active }))
}, {
name: 'Waiting',
type: 'line',
data: stats.map((x, i) => ({ x: i, y: x.inbox.waiting }))
}, {
name: 'Delayed',
type: 'line',
data: stats.map((x, i) => ({ x: i, y: x.inbox.delayed }))
}]);
this.deliverChart.updateSeries([{
name: 'Process',
type: 'area',
data: stats.map((x, i) => ({ x: i, y: x.deliver.activeSincePrevTick }))
}, {
name: 'Active',
type: 'area',
data: stats.map((x, i) => ({ x: i, y: x.deliver.active }))
}, {
name: 'Waiting',
type: 'line',
data: stats.map((x, i) => ({ x: i, y: x.deliver.waiting }))
}, {
name: 'Delayed',
type: 'line',
data: stats.map((x, i) => ({ x: i, y: x.deliver.delayed }))
}]);
},
domain() {
this.jobs = [];
this.fetchJobs();
},
state() {
this.jobs = [];
this.fetchJobs();
},
},
mounted() {
this.fetchJobs();
const chartOpts = id => ({
chart: {
id,
group: 'queue',
type: 'area',
height: 200,
animations: {
dynamicAnimation: {
enabled: false
}
},
toolbar: {
show: false
},
zoom: {
enabled: false
}
},
dataLabels: {
enabled: false
},
grid: {
clipMarkers: false,
borderColor: 'rgba(0, 0, 0, 0.1)',
xaxis: {
lines: {
show: true,
}
},
},
stroke: {
curve: 'straight',
width: 2
},
tooltip: {
enabled: false
},
legend: {
labels: {
colors: tinycolor(getComputedStyle(document.documentElement).getPropertyValue('--text')).toRgbString()
},
},
series: [] as any,
colors: ['#00E396', '#00BCD4', '#FFB300', '#e53935'],
xaxis: {
type: 'numeric',
labels: {
show: false
},
tooltip: {
enabled: false
}
},
yaxis: {
show: false,
min: 0,
}
});
this.inboxChart = new ApexCharts(this.$refs.inboxChart, chartOpts('a'));
this.deliverChart = new ApexCharts(this.$refs.deliverChart, chartOpts('b'));
this.inboxChart.render();
this.deliverChart.render();
const connection = this.$root.stream.useSharedConnection('queueStats');
connection.on('stats', this.onStats);
connection.on('statsLog', this.onStatsLog);
connection.send('requestLog', {
id: Math.random().toString().substr(2, 8),
length: limit
});
this.$once('hook:beforeDestroy', () => {
connection.dispose();
this.inboxChart.destroy();
this.deliverChart.destroy();
});
},
methods: {
async removeAllJobs() {
const process = async () => {
@@ -38,6 +273,39 @@ export default Vue.extend({
});
});
},
onStats(stats) {
this.stats.push(stats);
if (this.stats.length > limit) this.stats.shift();
},
onStatsLog(statsLog) {
for (const stats of statsLog.reverse()) {
this.onStats(stats);
}
},
fetchJobs() {
this.$root.api('admin/queue/jobs', {
domain: this.domain,
state: this.state,
limit: this.jobsLimit
}).then(jobs => {
this.jobs = jobs;
});
},
}
});
</script>
<style lang="stylus" scoped>
.wptihjuy
> .chart
min-height 200px !important
margin 0 -8px
.xvvuvgsv
> b
margin-right 16px
</style>
@@ -11,7 +11,6 @@
<span class="username">@{{ user | acct }}</span>
<span class="is-admin" v-if="user.isAdmin">admin</span>
<span class="is-moderator" v-if="user.isModerator">moderator</span>
<span class="is-verified" v-if="user.isVerified" :title="$t('@.verified-user')"><fa icon="star"/></span>
<span class="is-silenced" v-if="user.isSilenced" :title="$t('@.silenced-user')"><fa :icon="faMicrophoneSlash"/></span>
<span class="is-suspended" v-if="user.isSuspended" :title="$t('@.suspended-user')"><fa :icon="faSnowflake"/></span>
</header>
@@ -77,7 +76,6 @@ export default Vue.extend({
background var(--noteHeaderAdminBg)
color var(--noteHeaderAdminFg)
> .is-verified
> .is-silenced
> .is-suspended
margin 0 0 0 .5em
+36 -69
View File
@@ -9,13 +9,10 @@
<ui-button @click="showUser"><fa :icon="faSearch"/> {{ $t('lookup') }}</ui-button>
<div class="user" v-if="user">
<x-user :user='user'/>
<x-user :user="user"/>
<div class="actions">
<ui-button v-if="user.host != null" @click="updateRemoteUser"><fa :icon="faSync"/> {{ $t('update-remote-user') }}</ui-button>
<ui-button @click="resetPassword"><fa :icon="faKey"/> {{ $t('reset-password') }}</ui-button>
<ui-horizon-group>
<ui-button @click="verifyUser" :disabled="verifying"><fa :icon="faCertificate"/> {{ $t('verify') }}</ui-button>
<ui-button @click="unverifyUser" :disabled="unverifying">{{ $t('unverify') }}</ui-button>
</ui-horizon-group>
<ui-horizon-group>
<ui-button @click="silenceUser"><fa :icon="faMicrophoneSlash"/> {{ $t('make-silence') }}</ui-button>
<ui-button @click="unsilenceUser">{{ $t('unmake-silence') }}</ui-button>
@@ -24,7 +21,7 @@
<ui-button @click="suspendUser" :disabled="suspending"><fa :icon="faSnowflake"/> {{ $t('suspend') }}</ui-button>
<ui-button @click="unsuspendUser" :disabled="unsuspending">{{ $t('unsuspend') }}</ui-button>
</ui-horizon-group>
<ui-button v-if="user.host != null" @click="updateRemoteUser"><fa :icon="faSync"/> {{ $t('update-remote-user') }}</ui-button>
<ui-button @click="deleteAllFiles"><fa :icon="faTrashAlt"/> {{ $t('delete-all-files') }}</ui-button>
<ui-textarea v-if="user" :value="user | json5" readonly tall style="margin-top:16px;"></ui-textarea>
</div>
</div>
@@ -47,7 +44,6 @@
<option value="all">{{ $t('users.state.all') }}</option>
<option value="admin">{{ $t('users.state.admin') }}</option>
<option value="moderator">{{ $t('users.state.moderator') }}</option>
<option value="verified">{{ $t('users.state.verified') }}</option>
<option value="silenced">{{ $t('users.state.silenced') }}</option>
<option value="suspended">{{ $t('users.state.suspended') }}</option>
</ui-select>
@@ -71,8 +67,8 @@
import Vue from 'vue';
import i18n from '../../i18n';
import parseAcct from "../../../../misc/acct/parse";
import { faCertificate, faUsers, faTerminal, faSearch, faKey, faSync, faMicrophoneSlash } from '@fortawesome/free-solid-svg-icons';
import { faSnowflake } from '@fortawesome/free-regular-svg-icons';
import { faUsers, faTerminal, faSearch, faKey, faSync, faMicrophoneSlash } from '@fortawesome/free-solid-svg-icons';
import { faSnowflake, faTrashAlt } from '@fortawesome/free-regular-svg-icons';
import XUser from './users.user.vue';
export default Vue.extend({
@@ -84,8 +80,6 @@ export default Vue.extend({
return {
user: null,
target: null,
verifying: false,
unverifying: false,
suspending: false,
unsuspending: false,
sort: '+createdAt',
@@ -95,7 +89,7 @@ export default Vue.extend({
offset: 0,
users: [],
existMore: false,
faTerminal, faCertificate, faUsers, faSnowflake, faSearch, faKey, faSync, faMicrophoneSlash
faTerminal, faUsers, faSnowflake, faSearch, faKey, faSync, faMicrophoneSlash, faTrashAlt
};
},
@@ -165,7 +159,7 @@ export default Vue.extend({
/** 処理対象ユーザーの情報を更新する */
async refreshUser() {
this.$root.api('admin/show-user', { userId: this.user._id }).then(info => {
this.$root.api('admin/show-user', { userId: this.user.id }).then(info => {
this.user = info;
});
},
@@ -173,7 +167,7 @@ export default Vue.extend({
async resetPassword() {
if (!await this.getConfirmed(this.$t('reset-password-confirm'))) return;
this.$root.api('admin/reset-password', { userId: this.user._id }).then(res => {
this.$root.api('admin/reset-password', { userId: this.user.id }).then(res => {
this.$root.dialog({
type: 'success',
text: this.$t('password-updated', { password: res.password })
@@ -181,59 +175,11 @@ export default Vue.extend({
});
},
async verifyUser() {
if (!await this.getConfirmed(this.$t('verify-confirm'))) return;
this.verifying = true;
const process = async () => {
await this.$root.api('admin/verify-user', { userId: this.user._id });
this.$root.dialog({
type: 'success',
text: this.$t('verified')
});
};
await process().catch(e => {
this.$root.dialog({
type: 'error',
text: e.toString()
});
});
this.verifying = false;
this.refreshUser();
},
async unverifyUser() {
if (!await this.getConfirmed(this.$t('unverify-confirm'))) return;
this.unverifying = true;
const process = async () => {
await this.$root.api('admin/unverify-user', { userId: this.user._id });
this.$root.dialog({
type: 'success',
text: this.$t('unverified')
});
};
await process().catch(e => {
this.$root.dialog({
type: 'error',
text: e.toString()
});
});
this.unverifying = false;
this.refreshUser();
},
async silenceUser() {
if (!await this.getConfirmed(this.$t('silence-confirm'))) return;
const process = async () => {
await this.$root.api('admin/silence-user', { userId: this.user._id });
await this.$root.api('admin/silence-user', { userId: this.user.id });
this.$root.dialog({
type: 'success',
splash: true
@@ -251,8 +197,10 @@ export default Vue.extend({
},
async unsilenceUser() {
if (!await this.getConfirmed(this.$t('unsilence-confirm'))) return;
const process = async () => {
await this.$root.api('admin/unsilence-user', { userId: this.user._id });
await this.$root.api('admin/unsilence-user', { userId: this.user.id });
this.$root.dialog({
type: 'success',
splash: true
@@ -275,7 +223,7 @@ export default Vue.extend({
this.suspending = true;
const process = async () => {
await this.$root.api('admin/suspend-user', { userId: this.user._id });
await this.$root.api('admin/suspend-user', { userId: this.user.id });
this.$root.dialog({
type: 'success',
text: this.$t('suspended')
@@ -300,7 +248,7 @@ export default Vue.extend({
this.unsuspending = true;
const process = async () => {
await this.$root.api('admin/unsuspend-user', { userId: this.user._id });
await this.$root.api('admin/unsuspend-user', { userId: this.user.id });
this.$root.dialog({
type: 'success',
text: this.$t('unsuspended')
@@ -320,7 +268,7 @@ export default Vue.extend({
},
async updateRemoteUser() {
this.$root.api('admin/update-remote-user', { userId: this.user._id }).then(res => {
this.$root.api('admin/update-remote-user', { userId: this.user.id }).then(res => {
this.$root.dialog({
type: 'success',
text: this.$t('remote-user-updated')
@@ -330,6 +278,25 @@ export default Vue.extend({
this.refreshUser();
},
async deleteAllFiles() {
if (!await this.getConfirmed(this.$t('delete-all-files-confirm'))) return;
const process = async () => {
await this.$root.api('admin/delete-all-files-of-a-user', { userId: this.user.id });
this.$root.dialog({
type: 'success',
splash: true
});
};
await process().catch(e => {
this.$root.dialog({
type: 'error',
text: e.toString()
});
});
},
async getConfirmed(text: string): Promise<Boolean> {
const confirm = await this.$root.dialog({
type: 'warning',
+6
View File
@@ -39,3 +39,9 @@
75% { transform: translateY(-8px); }
100% { transform: translateY(0); }
}
@keyframes blink {
0% { opacity: 1; }
30% { opacity: 1; }
90% { opacity: 0; }
}
+1 -1
View File
@@ -34,7 +34,7 @@ body
.peg
display block
position absolute
right 0px
right 0
width 100px
height 100%
box-shadow 0 0 10px var(--primary), 0 0 5px var(--primary)
+1 -9
View File
@@ -14,15 +14,7 @@
<h2>{{ $t('permission-ask') }}</h2>
<ul>
<template v-for="p in app.permission">
<li v-if="p == 'account-read'">{{ $t('account-read') }}</li>
<li v-if="p == 'account-write'">{{ $t('account-write') }}</li>
<li v-if="p == 'note-write'">{{ $t('note-write') }}</li>
<li v-if="p == 'like-write'">{{ $t('like-write') }}</li>
<li v-if="p == 'following-write'">{{ $t('following-write') }}</li>
<li v-if="p == 'drive-read'">{{ $t('drive-read') }}</li>
<li v-if="p == 'drive-write'">{{ $t('drive-write') }}</li>
<li v-if="p == 'notification-read'">{{ $t('notification-read') }}</li>
<li v-if="p == 'notification-write'">{{ $t('notification-write') }}</li>
<li :key="p">{{ $t(`@.permissions.${p}`) }}</li>
</template>
</ul>
</section>
+1 -1
View File
@@ -98,7 +98,7 @@ export default Vue.extend({
margin 0 auto
text-align center
background #fff
box-shadow 0px 4px 16px rgba(#000, 0.2)
box-shadow 0 4px 16px rgba(#000, 0.2)
> .fetching
margin 0
+1 -14
View File
@@ -45,15 +45,9 @@ export default function <T extends object>(data: {
this.$watch('props', () => {
this.mergeProps();
});
this.bakeProps();
},
methods: {
bakeProps() {
this.bakedOldProps = JSON.stringify(this.props);
},
mergeProps() {
if (data.props) {
const defaultProps = data.props();
@@ -65,17 +59,10 @@ export default function <T extends object>(data: {
},
save() {
if (this.bakedOldProps == JSON.stringify(this.props)) return;
this.bakeProps();
if (this.platform == 'deck') {
this.$store.commit('device/updateDeckColumn', this.column);
} else {
this.$root.api('i/update_widget', {
id: this.id,
data: this.props
});
this.$store.commit('device/updateWidget', this.widget);
}
}
}
+1 -1
View File
@@ -52,7 +52,7 @@ function match(e: KeyboardEvent, patterns: action['patterns']): boolean {
pattern.ctrl == e.ctrlKey &&
pattern.shift == e.shiftKey &&
pattern.alt == e.altKey &&
e.metaKey == false
!e.metaKey
);
}

Some files were not shown because too many files have changed in this diff Show More