Compare commits

...

192 Commits

Author SHA1 Message Date
3d62bd8007 10.75.0 2019-01-12 13:27:14 +09:00
7ad9560f53 Implement instance info page 2019-01-12 11:27:23 +09:00
c135d02895 Update CHANGELOG.md 2019-01-12 09:42:49 +09:00
0757f67bde [Client] specifiedのアイコンを戻した 2019-01-12 09:40:53 +09:00
c5dc25cb9e Revert "[Client] Renote数の表示を廃止"
This reverts commit d7af18efbd.
2019-01-12 09:38:44 +09:00
0fcf422dec [Client] Improve UI 2019-01-12 09:34:02 +09:00
21e801a325 🎨 2019-01-12 09:17:23 +09:00
183faf3b2a [Client] Resolve #3881 2019-01-12 09:13:35 +09:00
9fc66a2d1e Update terser-webpack-plugin requirement from 1.1.0 to 1.2.1 (#3867)
Updates the requirements on [terser-webpack-plugin](https://github.com/webpack-contrib/terser-webpack-plugin) to permit the latest version.
- [Release notes](https://github.com/webpack-contrib/terser-webpack-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/terser-webpack-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/terser-webpack-plugin/commits/v1.2.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-11 19:58:16 +09:00
12cf598e6b Fix bug (for return) (#3878) 2019-01-11 17:53:53 +09:00
dd6cd6332c Update CHANGELOG.md 2019-01-11 16:00:09 +09:00
20ee2118ee モデレーターを凍結できないようにする (#3877) 2019-01-11 08:12:10 +09:00
1546160f6a モデレーター登録を解除できるように (#3876) 2019-01-11 08:11:24 +09:00
dd77a6194e Hide NSFW in Photos (#3875) 2019-01-11 08:10:39 +09:00
203fba0216 管理画面でユーザーを状態でフィルタできるように (#3873) 2019-01-11 08:09:44 +09:00
826a2466b7 管理者がサインイン履歴を参照できるツール (#3870)
* 管理者がサインイン履歴を参照できるツール

* remove debug code
2019-01-11 08:07:09 +09:00
273bc6507a ダイレクトを非公開のように使えるようにする (#3869) 2019-01-11 08:06:05 +09:00
2b13969b26 Supports toggle password in SMTP settings (#3868) 2019-01-11 08:05:36 +09:00
2f10ff1a2e Fix style 2019-01-10 19:23:22 +09:00
1f52aea193 Update CHANGELOG.md 2019-01-10 17:53:56 +09:00
0a0e76679e Add manage and docker docs in french and correct mistake in english (#3863) 2019-01-10 10:24:04 +09:00
845f3436cc Change SMTP password field to have password type (#3861) 2019-01-10 10:23:13 +09:00
f6a8c8cf76 Toggle show/hide password (#3865)
* Toggle show/hide password

* hoverでアンダーラインが中途半端に出てダサいので出さないように

* Update signin.vue
2019-01-10 10:22:45 +09:00
af61a7a17f 10.74.0 2019-01-09 15:32:36 +09:00
667ad8fe96 Update CHANGELOG.md 2019-01-09 15:19:00 +09:00
e1cc2394fa Use cached and asynchronous DNS resolver for AP delivery (#3859) 2019-01-09 15:17:54 +09:00
04e1e48f17 Hide invisible notes from timeline (#3852) 2019-01-08 21:02:00 +09:00
c417e2f4a1 🎨 2019-01-08 18:00:05 +09:00
02a27a8b12 ドライブの管理画面でファイルのオリジナルURLを表示するように 2019-01-08 17:45:16 +09:00
d775e19059 Update CHANGELOG.md 2019-01-08 13:33:50 +09:00
35e7dca2bb Resolve #3847 (#3849)
* Update notifications.ts

* Update notifications.ts

* Update notifications.ts

* Update notifications.ts

* Add missing semicolon

* Improve readability

* Fix typo
2019-01-08 13:32:28 +09:00
6c4ea5e087 Merge pull request #3842 from syuilo/l10n_develop
New Crowdin translations
2019-01-07 18:23:24 +09:00
54a1e500e2 New translations ja-JP.yml (French) 2019-01-07 14:12:02 +09:00
450ed2c471 New translations ja-JP.yml (English) 2019-01-07 07:02:09 +09:00
bf97fcb2fd Update README.md [AUTOGEN] (#3845) 2019-01-07 06:53:25 +09:00
4edeae07a0 Update README.md [AUTOGEN] (#3843) 2019-01-07 06:52:56 +09:00
8e19e4d33b New translations ja-JP.yml (Korean) 2019-01-06 22:22:34 +09:00
2a774c9414 Update update_readme_patreon.sh
Patreon API updates
2019-01-06 18:20:47 +09:00
6f50ed327d New translations ja-JP.yml (Norwegian) 2019-01-06 17:52:52 +09:00
a51d384f19 New translations ja-JP.yml (Dutch) 2019-01-06 17:52:48 +09:00
e2b2e4633a New translations ja-JP.yml (Japanese, Kansai) 2019-01-06 17:52:43 +09:00
46ec773128 New translations ja-JP.yml (Spanish) 2019-01-06 17:52:37 +09:00
1827a65874 New translations ja-JP.yml (Russian) 2019-01-06 17:52:32 +09:00
1b4dd64cbe New translations ja-JP.yml (Portuguese) 2019-01-06 17:52:28 +09:00
95b7d84025 New translations ja-JP.yml (Polish) 2019-01-06 17:52:22 +09:00
137b081b8a New translations ja-JP.yml (Korean) 2019-01-06 17:52:18 +09:00
76af9bbda7 New translations ja-JP.yml (Italian) 2019-01-06 17:52:14 +09:00
17ab07ae9c New translations ja-JP.yml (German) 2019-01-06 17:52:09 +09:00
4c4d06e49b New translations ja-JP.yml (French) 2019-01-06 17:52:05 +09:00
5d9ef68f14 New translations ja-JP.yml (English) 2019-01-06 17:51:59 +09:00
4689cf5591 New translations ja-JP.yml (Chinese Simplified) 2019-01-06 17:51:54 +09:00
58e7edf08a New translations ja-JP.yml (Catalan) 2019-01-06 17:51:50 +09:00
9c6c281ac3 Update CHANGELOG.md 2019-01-06 17:47:05 +09:00
2326d6208b Merge pull request #3811 from syuilo/l10n_develop
New Crowdin translations
2019-01-06 17:46:09 +09:00
cd4be4116b Fix sharedInbox recovery code (#3840) 2019-01-06 17:45:53 +09:00
6697ca243c Update README.md [AUTOGEN] (#3841) 2019-01-06 17:45:34 +09:00
15ce89a88d Resolve #3078 (#3838) 2019-01-06 17:45:14 +09:00
4b13278a41 Update README.md [AUTOGEN] (#3834) 2019-01-06 17:44:36 +09:00
e01167fcab Merge pull request #3816 from syuilo/dependabot/npm_and_yarn/nodemailer-5.0.0
Update nodemailer requirement from 4.7.0 to 5.0.0
2019-01-06 13:29:05 +09:00
719ff26e79 Merge pull request #3830 from syuilo/dependabot/npm_and_yarn/moment-2.23.0
Update moment requirement from 2.22.2 to 2.23.0
2019-01-06 13:28:57 +09:00
2657328ac1 Merge pull request #3831 from syuilo/dependabot/npm_and_yarn/vue-marquee-text-component-1.1.1
Update vue-marquee-text-component requirement from 1.1.0 to 1.1.1
2019-01-06 13:28:49 +09:00
4b7cef239e Merge pull request #3817 from syuilo/dependabot/npm_and_yarn/@fortawesome/fontawesome-svg-core-1.2.12
Update @fortawesome/fontawesome-svg-core requirement from 1.2.8 to 1.2.12
2019-01-06 13:28:39 +09:00
49d9e51f72 Merge branch 'develop' into dependabot/npm_and_yarn/@fortawesome/fontawesome-svg-core-1.2.12 2019-01-06 13:28:33 +09:00
40a5f79d76 Merge pull request #3819 from syuilo/dependabot/npm_and_yarn/@fortawesome/free-brands-svg-icons-5.6.3
Update @fortawesome/free-brands-svg-icons requirement from 5.6.0 to 5.6.3
2019-01-06 13:27:56 +09:00
9cfd0b7351 Merge pull request #3818 from syuilo/dependabot/npm_and_yarn/@types/elasticsearch-5.0.30
Update @types/elasticsearch requirement from 5.0.29 to 5.0.30
2019-01-06 13:27:44 +09:00
2223ecf890 Merge pull request #3832 from syuilo/dependabot/npm_and_yarn/@types/koa-2.0.48
Update @types/koa requirement from 2.0.47 to 2.0.48
2019-01-06 13:27:36 +09:00
06bad9c501 Merge pull request #3833 from syuilo/dependabot/npm_and_yarn/@types/redis-2.8.10
Update @types/redis requirement from 2.8.8 to 2.8.10
2019-01-06 13:27:25 +09:00
a479e65f3e Compact URL preview (#3835)
* Compact url-preview

* fix header

* increase limit

* better limit

* Revert "better limit"

This reverts commit ef396f773394068b0b7e37fccff31c70661b3978.

ハードリミットかけるならサーバー上でかけたほうが良さそう

* Revert "increase limit"

This reverts commit 72c10a456ba37151a4d88d11544b0ff9daabd284.
2019-01-06 12:56:13 +09:00
a2e99e46b9 New translations ja-JP.yml (Polish) 2019-01-06 08:22:03 +09:00
07a27cfb9a New translations ja-JP.yml (Polish) 2019-01-06 08:11:40 +09:00
77f3a0d3a9 New translations ja-JP.yml (Polish) 2019-01-06 08:01:48 +09:00
f9065943c5 Fix #3827 (#3837) 2019-01-06 04:00:30 +09:00
d0aff4409d Locked mark (#3836) 2019-01-05 19:59:10 +09:00
84ea1fbd4d Fix typo: not -> note
1344ffa67d (commitcomment-31817792)
2019-01-05 10:29:46 +09:00
d1d92be09a New translations ja-JP.yml (English) 2019-01-05 02:11:58 +09:00
52b23af97e Update @types/redis requirement from 2.8.8 to 2.8.10
Updates the requirements on [@types/redis](https://github.com/DefinitelyTyped/DefinitelyTyped) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-03 20:22:40 +00:00
b76cd18dea Update @types/koa requirement from 2.0.47 to 2.0.48
Updates the requirements on [@types/koa](https://github.com/DefinitelyTyped/DefinitelyTyped) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-03 20:20:43 +00:00
cd3b30bf5c Update vue-marquee-text-component requirement from 1.1.0 to 1.1.1
Updates the requirements on [vue-marquee-text-component](https://github.com/EvodiaAut/vue-marquee-text-component) to permit the latest version.
- [Release notes](https://github.com/EvodiaAut/vue-marquee-text-component/releases)
- [Commits](https://github.com/EvodiaAut/vue-marquee-text-component/commits/v1.1.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-03 20:18:49 +00:00
b87ebc6f9d Update moment requirement from 2.22.2 to 2.23.0
Updates the requirements on [moment](https://github.com/moment/moment) to permit the latest version.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/commits/2.23.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-03 20:17:22 +00:00
4d7d119524 Update CHANGELOG.md 2019-01-04 04:54:28 +09:00
b4b6e9548d Rename 2019-01-04 03:52:50 +09:00
ebf9cd18c8 Make instance logo customisable (#3829) 2019-01-04 03:02:40 +09:00
b1ccbb2deb New translations ja-JP.yml (English) 2019-01-04 00:43:55 +09:00
562cd6ad0b Improve readability 2019-01-03 12:34:08 +09:00
a832672b59 Update file-type requirement from 10.6.0 to 10.7.0 (#3815)
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/commits/v10.7.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-03 11:47:32 +09:00
309058f209 Update webpack requirement from 4.26.1 to 4.28.3 (#3822)
Updates the requirements on [webpack](https://github.com/webpack/webpack) to permit the latest version.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/commits/v4.28.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-03 08:39:17 +09:00
2a344dfbd8 adds ko-KR な to にゃ (#3820)
* adds ko-KR な to にゃ
- this only take considers pre-composed "Hangul Syllables",
not composable area "Hangul Jamo" which are not used commonly
- 56 is '냐' - '나'

* replace magic number as suggested
2019-01-03 08:38:26 +09:00
866d4cd59a Update vue-i18n requirement from 8.3.2 to 8.6.0 (#3821)
Updates the requirements on [vue-i18n](https://github.com/kazupon/vue-i18n) to permit the latest version.
- [Release notes](https://github.com/kazupon/vue-i18n/releases)
- [Changelog](https://github.com/kazupon/vue-i18n/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/kazupon/vue-i18n/commits/v8.6.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-03 08:37:44 +09:00
165350cca6 Update apexcharts requirement from 2.4.2 to 2.5.1 (#3826)
Updates the requirements on [apexcharts](https://github.com/apexcharts/apexcharts.js) to permit the latest version.
- [Release notes](https://github.com/apexcharts/apexcharts.js/releases)
- [Changelog](https://github.com/apexcharts/apexcharts.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/apexcharts/apexcharts.js/commits/v2.5.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2019-01-03 08:36:00 +09:00
8c21b8a9a6 Update CHANGELOG.md 2019-01-02 18:10:23 +09:00
41e3a9a004 Tune AP URL negotiating with Accept (#3824) 2019-01-02 18:07:32 +09:00
4dc6ec5387 New translations ja-JP.yml (French) 2019-01-02 14:41:41 +09:00
96515c4544 Resolve #3813 (#3814) 2019-01-02 03:35:42 +09:00
b3637b5e8a New translations ja-JP.yml (Korean) 2019-01-02 00:22:17 +09:00
43bcdf397e Update @fortawesome/free-brands-svg-icons requirement
Updates the requirements on [@fortawesome/free-brands-svg-icons](https://github.com/FortAwesome/Font-Awesome) to permit the latest version.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/commits/5.6.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-31 20:27:42 +00:00
22c5db7121 Update @types/elasticsearch requirement from 5.0.29 to 5.0.30
Updates the requirements on [@types/elasticsearch](https://github.com/DefinitelyTyped/DefinitelyTyped) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-31 20:25:44 +00:00
1c6a8f8691 Update @fortawesome/fontawesome-svg-core requirement
Updates the requirements on [@fortawesome/fontawesome-svg-core](https://github.com/FortAwesome/Font-Awesome) to permit the latest version.
- [Release notes](https://github.com/FortAwesome/Font-Awesome/releases)
- [Changelog](https://github.com/FortAwesome/Font-Awesome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/FortAwesome/Font-Awesome/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-31 20:21:31 +00:00
31b5175bb0 Update nodemailer requirement from 4.7.0 to 5.0.0
Updates the requirements on [nodemailer](https://github.com/nodemailer/nodemailer) to permit the latest version.
- [Release notes](https://github.com/nodemailer/nodemailer/releases)
- [Changelog](https://github.com/nodemailer/nodemailer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodemailer/nodemailer/commits/v5.0.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-31 20:17:17 +00:00
9add59aca9 2019 🎉 2019-01-01 00:11:07 +09:00
16c65173c1 New translations ja-JP.yml (French) 2018-12-31 06:12:15 +09:00
4f6ae4633f New translations ja-JP.yml (French) 2018-12-31 06:01:44 +09:00
8aa1577713 New translations ja-JP.yml (French) 2018-12-31 05:52:42 +09:00
5bd41704ae 10.73.0 2018-12-31 02:38:13 +09:00
4d0b335748 [Client] Improve theme 🎨 2018-12-31 02:33:03 +09:00
5692ae59a1 [Client] Improve theming 🎨 2018-12-31 01:15:32 +09:00
84f1ce866b [Client] line thiknessの設定はデバイスに保存するように 2018-12-31 00:59:13 +09:00
e68c6175ce Fix bug 2018-12-31 00:50:56 +09:00
0de11c3636 🎨 2018-12-31 00:50:14 +09:00
1f70657d4a Merge pull request #3798 from syuilo/l10n_develop
New Crowdin translations
2018-12-31 00:45:51 +09:00
73646aac9b New translations ja-JP.yml (English) 2018-12-30 19:11:39 +09:00
e72c590c6b 10.72.0 2018-12-30 14:52:41 +09:00
06e026b346 New translations ja-JP.yml (English) 2018-12-30 14:51:40 +09:00
5621d5725c [Client] Fix bug 2018-12-30 14:43:03 +09:00
14d0a07b29 New translations ja-JP.yml (English) 2018-12-30 14:21:40 +09:00
105fefd114 Clean up 2018-12-30 14:19:22 +09:00
f81c10fe62 New translations ja-JP.yml (Norwegian) 2018-12-30 14:13:06 +09:00
86a2aa42a4 New translations ja-JP.yml (Dutch) 2018-12-30 14:13:00 +09:00
42f5c3fe22 New translations ja-JP.yml (Japanese, Kansai) 2018-12-30 14:12:54 +09:00
975740464c New translations ja-JP.yml (Spanish) 2018-12-30 14:12:49 +09:00
c57bffb142 モバイル版にも設定を追加 2018-12-30 14:12:46 +09:00
d92a2cdb55 New translations ja-JP.yml (Russian) 2018-12-30 14:12:43 +09:00
5b91463233 New translations ja-JP.yml (Portuguese) 2018-12-30 14:12:38 +09:00
39eed3378f New translations ja-JP.yml (Polish) 2018-12-30 14:12:33 +09:00
cf98d40a44 New translations ja-JP.yml (Korean) 2018-12-30 14:12:28 +09:00
7d6436c90e New translations ja-JP.yml (Italian) 2018-12-30 14:12:24 +09:00
0acf3a8f6d New translations ja-JP.yml (German) 2018-12-30 14:12:19 +09:00
8b7324c8d3 New translations ja-JP.yml (French) 2018-12-30 14:12:13 +09:00
a0b0d5dff7 New translations ja-JP.yml (English) 2018-12-30 14:12:07 +09:00
bef0e36665 New translations ja-JP.yml (Chinese Simplified) 2018-12-30 14:12:02 +09:00
766e721ff3 New translations ja-JP.yml (Catalan) 2018-12-30 14:11:57 +09:00
93ad4b359e 🎨 2018-12-30 14:08:40 +09:00
b3032ad84d Better setting 2018-12-30 14:05:13 +09:00
4f76acd249 🎨 2018-12-30 14:00:57 +09:00
fcc4b2c704 New translations ja-JP.yml (English) 2018-12-30 13:21:45 +09:00
12286f4915 🎨 2018-12-30 13:19:06 +09:00
193abfdbac New translations ja-JP.yml (Norwegian) 2018-12-30 13:13:01 +09:00
0e13481eb4 New translations ja-JP.yml (Dutch) 2018-12-30 13:12:56 +09:00
b713cac4f1 New translations ja-JP.yml (Japanese, Kansai) 2018-12-30 13:12:51 +09:00
2137c894ef New translations ja-JP.yml (Spanish) 2018-12-30 13:12:47 +09:00
f0d2ce4f19 New translations ja-JP.yml (Russian) 2018-12-30 13:12:42 +09:00
e3a89d302f New translations ja-JP.yml (Portuguese) 2018-12-30 13:12:38 +09:00
d01d2ef65e New translations ja-JP.yml (Polish) 2018-12-30 13:12:32 +09:00
23c550acba New translations ja-JP.yml (Korean) 2018-12-30 13:12:26 +09:00
b9db88f616 New translations ja-JP.yml (Italian) 2018-12-30 13:12:21 +09:00
dee4a18d48 New translations ja-JP.yml (German) 2018-12-30 13:12:16 +09:00
fa5073b042 New translations ja-JP.yml (French) 2018-12-30 13:12:11 +09:00
9dda698dc8 New translations ja-JP.yml (English) 2018-12-30 13:12:06 +09:00
99d0930fba New translations ja-JP.yml (Chinese Simplified) 2018-12-30 13:12:01 +09:00
a599524b5f New translations ja-JP.yml (Catalan) 2018-12-30 13:11:57 +09:00
5f34758e87 [Client] Fix i18n 2018-12-30 13:02:17 +09:00
cdb8e41176 [Client] Update theme setting 2018-12-30 13:02:06 +09:00
d8f3e9d4a3 🎨 2018-12-30 12:45:31 +09:00
da900439a3 Update gruvbox-dark.json5 2018-12-30 11:58:26 +09:00
ad0273ab99 10.71.0 2018-12-30 09:24:03 +09:00
8bbff90aca [Client] Add Monokai theme 🎨 2018-12-30 09:21:23 +09:00
fcb3ba9947 [Client] Separate theme property 2018-12-30 09:21:07 +09:00
23b3e33df6 [Client] Fix bug 2018-12-30 09:15:56 +09:00
9edac2cd74 oops 2018-12-30 09:04:19 +09:00
fbe0d70661 New translations ja-JP.yml (English) 2018-12-30 08:41:38 +09:00
8782a64b18 [Client] Add some themes 🎨 2018-12-30 06:40:48 +09:00
d3b81c3e00 10.70.1 2018-12-30 01:52:28 +09:00
fd816afcd0 Add id to return of users/relation (#3795) 2018-12-30 01:44:26 +09:00
ac423f1ef4 [API] notes/mentions にミュートを適用するように 2018-12-30 01:40:24 +09:00
f11ebafe47 🎨 2018-12-30 01:32:58 +09:00
7947036af9 Make one import per line 2018-12-29 22:26:15 +09:00
b722431720 New translations ja-JP.yml (Norwegian) 2018-12-29 22:13:17 +09:00
295563caad New translations ja-JP.yml (Dutch) 2018-12-29 22:13:13 +09:00
26735815f1 New translations ja-JP.yml (Japanese, Kansai) 2018-12-29 22:13:08 +09:00
c06a52c237 New translations ja-JP.yml (Spanish) 2018-12-29 22:13:04 +09:00
5678adf3b5 New translations ja-JP.yml (Russian) 2018-12-29 22:12:58 +09:00
ac772dd389 New translations ja-JP.yml (Portuguese) 2018-12-29 22:12:53 +09:00
2c4de8475f New translations ja-JP.yml (Polish) 2018-12-29 22:12:49 +09:00
46facaf176 New translations ja-JP.yml (Korean) 2018-12-29 22:12:45 +09:00
eea1b7fc63 New translations ja-JP.yml (Italian) 2018-12-29 22:12:39 +09:00
f0e9386cd0 New translations ja-JP.yml (German) 2018-12-29 22:12:34 +09:00
e4a4238b57 New translations ja-JP.yml (French) 2018-12-29 22:12:28 +09:00
55e126998a New translations ja-JP.yml (English) 2018-12-29 22:12:24 +09:00
608a30d37b New translations ja-JP.yml (Chinese Simplified) 2018-12-29 22:12:19 +09:00
7d22d6255d New translations ja-JP.yml (Catalan) 2018-12-29 22:12:14 +09:00
4e55436339 [Client] Improve 2fa settings 2018-12-29 22:10:54 +09:00
3adadc8a52 Merge pull request #3776 from syuilo/dependabot/npm_and_yarn/@koa/cors-2.2.3
Update @koa/cors requirement from 2.2.2 to 2.2.3
2018-12-29 19:11:09 +09:00
b525af822c Merge pull request #3777 from syuilo/dependabot/npm_and_yarn/@types/dateformat-3.0.0
Update @types/dateformat requirement from 1.0.1 to 3.0.0
2018-12-29 19:11:01 +09:00
bee8a5b065 Merge pull request #3775 from syuilo/dependabot/npm_and_yarn/@types/showdown-1.9.0
Update @types/showdown requirement from 1.7.5 to 1.9.0
2018-12-29 19:10:53 +09:00
f4d80122b3 Merge pull request #3794 from syuilo/dependabot/npm_and_yarn/eslint-5.11.1
Update eslint requirement from 5.8.0 to 5.11.1
2018-12-29 19:09:52 +09:00
2e8ea34413 Merge branch 'develop' into dependabot/npm_and_yarn/eslint-5.11.1 2018-12-29 19:09:42 +09:00
7341d97a00 Update loader-utils requirement from 1.1.0 to 1.2.3 (#3793)
Updates the requirements on [loader-utils](https://github.com/webpack/loader-utils) to permit the latest version.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/commits/v1.2.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-29 19:07:25 +09:00
964b34bd3b Update eslint-plugin-vue requirement from 4.7.1 to 5.0.0 (#3792)
Updates the requirements on [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue) to permit the latest version.
- [Release notes](https://github.com/vuejs/eslint-plugin-vue/releases)
- [Commits](https://github.com/vuejs/eslint-plugin-vue/commits/v5.0.0)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-29 19:07:20 +09:00
64bb6daa43 Update eslint requirement from 5.8.0 to 5.11.1
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/commits/v5.11.1)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-28 20:24:50 +00:00
0a1951f24c Update loader-utils requirement from 1.1.0 to 1.2.3
Updates the requirements on [loader-utils](https://github.com/webpack/loader-utils) to permit the latest version.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/commits/v1.2.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-28 20:21:50 +00:00
3985fe6b09 Update @types/dateformat requirement from 1.0.1 to 3.0.0
Updates the requirements on [@types/dateformat](https://github.com/DefinitelyTyped/DefinitelyTyped) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-27 20:28:49 +00:00
db71a5da62 Update @koa/cors requirement from 2.2.2 to 2.2.3
Updates the requirements on [@koa/cors](https://github.com/koajs/cors) to permit the latest version.
- [Release notes](https://github.com/koajs/cors/releases)
- [Changelog](https://github.com/koajs/cors/blob/master/History.md)
- [Commits](https://github.com/koajs/cors/commits/2.2.3)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-27 20:27:27 +00:00
d76e3e4853 Update @types/showdown requirement from 1.7.5 to 1.9.0
Updates the requirements on [@types/showdown](https://github.com/DefinitelyTyped/DefinitelyTyped) to permit the latest version.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits)

Signed-off-by: dependabot[bot] <support@dependabot.com>
2018-12-27 20:25:12 +00:00
127 changed files with 1695 additions and 495 deletions

View File

@ -35,7 +35,7 @@ while :
cat patreon.cache | \ cat patreon.cache | \
awk -F'\t' '{print $2,$1}' | \ awk -F'\t' '{print $2,$1}' | \
sed -e 's/ /\\" alt=\\"/' | \ sed -e 's/ /\\" alt=\\"/' | \
xargs -I% echo '<td><img src="%"></td>' >> patreon.md.cache && \ xargs -I% echo '<td><img src="%" width="100"></td>' >> patreon.md.cache && \
echo '</tr><tr>' >> patreon.md.cache && \ echo '</tr><tr>' >> patreon.md.cache && \
cat patreon.cache | \ cat patreon.cache | \
awk -F'\t' '{print $3,$1}' | \ awk -F'\t' '{print $3,$1}' | \

View File

@ -1,6 +1,52 @@
ChangeLog ChangeLog
========= =========
10.75.0
----------
* ダイレクトを非公開のように使えるように
* モデレーターを凍結できないように
* モデレーター登録を解除できるように
* NSFWなメディアをユーザーページなどで表示しないように
* 管理画面でユーザーを状態でフィルタできるように
* 管理者がサインイン履歴を参照できるツール
* Renote数を再度表示するように
* インスタンス情報ページの追加
* テーマの調整
* UIの改善
10.74.0
----------
* Pleromaとのフェデレーションを修正
* インスタンスのキャラクター画像を設定できるように
* Catモードの朝鮮語対応
* CWが付いた投稿に返信する際、そのCWを引き継ぐように
* 投稿のソースをクリップボードにコピーできるように
* i/notifications API で取得する通知の種別を配列で指定できるように
* パフォーマンスの改善
* バグ修正
10.73.0
-------
* テーマの強化
* line thiknessの設定はデバイスに保存するように
10.72.0
-------
* いくつかのテーマの追加
* デザインの調整
* バグ修正
* など
10.71.0
-------
* いくつかのテーマの追加
10.70.1
-------
* notes/mentions にミュートを適用するように
* Add id to return of users/relation
* デザインの調整
10.70.0 10.70.0
------- -------
* フォローしているユーザーからのフォローを自動承認するオプション * フォローしているユーザーからのフォローを自動承認するオプション

View File

@ -73,16 +73,14 @@ Please see [Contribution guide](./CONTRIBUTING.md).
---------------------------------------------------------------- ----------------------------------------------------------------
<!-- PATREON_START --> <!-- PATREON_START -->
<table><tr> <table><tr>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12190916/fb7fa7983c14425f890369535b1506a4/1?token-time=2145916800&token-hash=Zeh1u6l_Vmgoy8A1eT1Sltea-_SZSq8t8uOWDRZRh94%3D" alt="weep"></td> <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://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13376668/71f3cf87ec6c4393a44b1b9df5ee3d12/1?token-time=2145916800&token-hash=7pSmWqgMfMSJHVIEcNsuuQoKeU3TRluew5p0EGTzWA4%3D" alt="Arctic"></td> <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12731202/0995c46cdcb54153ab5f073f5869b70a/1?token-time=2145916800&token-hash=prtYqPOiSHBulhM7NU0VzMaWx39-9ntdq25b6kafDNA%3D" alt="negao" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12731202/0995c46cdcb54153ab5f073f5869b70a/1?token-time=2145916800&token-hash=Yd60FK_SWfQO56SeiJpy1tDHOnCV4xdEywQe8gn5_Wo%3D" alt="negao"></td> <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/2?token-time=2145916800&token-hash=djaJ9cwy9uwTiF9UFtxYQdS8Nw7BhyfaREzZUbErN-0%3D" alt="Melilot" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12913507/f7181eacafe8469a93033d85f5969c29/2?token-time=2145916800&token-hash=mgPdX9TqZxEg4TTPuc477dxhIgYk9246qafjWZEqZ7g%3D" alt="Melilot"></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/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12999811/5f349fafcce44dd1824a8b1ebbec4564/3?token-time=2145916800&token-hash=ybYtxfpte1b-rGg6Zecpys2ZdZDtwR_UNJHQjt-3eoU%3D" alt="Xeltica"></td> <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/3384329/8b713330cb27404ea6e9fac50ff96efe/1?token-time=2145916800&token-hash=Ch3iF81ZGP0LMo894Y9ajpLisgtE91SnxtZE7fxsgrM%3D" alt="べすれい" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/3384329/8b713330cb27404ea6e9fac50ff96efe/1?token-time=2145916800&token-hash=0eu4-m1gTWA9PhptVZt6rdKcusqcD7RB87rJT23VVFI%3D" alt="べすれい"></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>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=GgJ_NmUB6_nnRNLVGUWjV-WX91On7BOu59LKncYV9fE%3D" alt="gutfuckllc"></td>
</tr><tr> </tr><tr>
<td><a href="https://www.patreon.com/weepjp">weep</a></td> <td><a href="https://www.patreon.com/weepjp">weep</a></td>
<td><a href="https://www.patreon.com/user?u=13376668">Arctic</a></td>
<td><a href="https://www.patreon.com/negao">negao</a></td> <td><a href="https://www.patreon.com/negao">negao</a></td>
<td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td> <td><a href="https://www.patreon.com/user?u=12913507">Melilot</a></td>
<td><a href="https://www.patreon.com/Xeltica">Xeltica</a></td> <td><a href="https://www.patreon.com/Xeltica">Xeltica</a></td>
@ -90,13 +88,13 @@ Please see [Contribution guide](./CONTRIBUTING.md).
<td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td> <td><a href="https://www.patreon.com/gutfuckllc">gutfuckllc</a></td>
</tr></table> </tr></table>
<table><tr> <table><tr>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/11357794/923ce94cd8c44ba788ee931907881839/1?token-time=2145916800&token-hash=I8lJVM8LeW6TSo5W6uIIRZ42cw83zp1wK_FsbzY0mcQ%3D" alt="mydarkstar"></td> <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://c8.patreon.com/2/100/12718187" alt="Peter G."></td> <td><img src="https://c8.patreon.com/2/200/12718187" alt="Peter G." width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1?token-time=2145916800&token-hash=zwSu01tOtn5xTUucDZHuPsCxF2HBEMVs9ROJKTlEV_o%3D" alt="nemu"></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/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/3?token-time=2145916800&token-hash=qsdn0-e6yLaLI6hUX9JAkyTR6a5UdnSp7T1foniBvGQ%3D" alt="YUKIMOCHI"></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/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/8241184/39e18850e87a449e9c9a71acb3310ebd/2?token-time=2145916800&token-hash=iUXOQzRyJDv3PJxwS7Mjwg1459dzh2trOq6NFtXu_OM%3D" alt="Acid Chicken"></td> <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/8241184/39e18850e87a449e9c9a71acb3310ebd/2?token-time=2145916800&token-hash=zrInDotuEIFslKphuSiCqr3M-r-rveTXjVKWr-VK6M0%3D" alt="Acid Chicken" width="100"></td>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1?token-time=2145916800&token-hash=UERBN4OyP7Nh5XwwdDg0N0IE5cD6_qUQMO81Z5Wizso%3D" alt="Hiratake"></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/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/10789744/97175095d8f04c0f86225ff47cb98d40/1?token-time=2145916800&token-hash=P4BIzCX2I1CkEP66ottfhsC8Wr6BUSamjA-vq3pLqFI%3D" alt="Naoki Hirayama"></td> <td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/10789744/97175095d8f04c0f86225ff47cb98d40/1?token-time=2145916800&token-hash=ubVARikVOg3v7NW6LDhtG-ClE1LTU3I2TJ3js2-5xDs%3D" alt="Naoki Hirayama" width="100"></td>
</tr><tr> </tr><tr>
<td><a href="https://www.patreon.com/mydarkstar">mydarkstar</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=12718187">Peter G.</a></td>
@ -107,10 +105,10 @@ Please see [Contribution guide](./CONTRIBUTING.md).
<td><a href="https://www.patreon.com/spinlock">Naoki Hirayama</a></td> <td><a href="https://www.patreon.com/spinlock">Naoki Hirayama</a></td>
</tr></table> </tr></table>
<table><tr> <table><tr>
<td><img src="https://c10.patreonusercontent.com/3/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=S1zP0QyLU52Dqq6dtc9qNYyWfW86XrYHiR4NMbeOrnA%3D" alt="dansup"></td> <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/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1?token-time=2145916800&token-hash=tB1e_r8RlZ5sFL0KV_e8dugapxatNBRK1Z3h67TO1g8%3D" alt="Gargron"></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/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1?token-time=2145916800&token-hash=VZUtwrjQa8Jml4twCjHYQQZ64wHEY4oIlGl7Kc-VYUQ%3D" alt="Nokotaro Takeda"></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/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=tMosUojzUYJCH_3t--tvYA-SMCyrS__hzSndyaRSnbo%3D" alt="Takashi Shibuya"></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>
</tr><tr> </tr><tr>
<td><a href="https://www.patreon.com/dansup">dansup</a></td> <td><a href="https://www.patreon.com/dansup">dansup</a></td>
<td><a href="https://www.patreon.com/mastodon">Gargron</a></td> <td><a href="https://www.patreon.com/mastodon">Gargron</a></td>
@ -118,12 +116,12 @@ Please see [Contribution guide](./CONTRIBUTING.md).
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td> <td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
</tr></table> </tr></table>
**Last updated:** Tue, 25 Dec 2018 04:58:06 UTC **Last updated:** Sun, 06 Jan 2019 21:53:06 UTC
<!-- PATREON_END --> <!-- PATREON_END -->
:four_leaf_clover: Copyright :four_leaf_clover: Copyright
---------------------------------------------------------------- ----------------------------------------------------------------
> Copyright (c) 2014-2018 syuilo > Copyright (c) 2014-2019 syuilo
Misskey is an open-source software licensed under the [GNU AGPLv3](LICENSE). Misskey is an open-source software licensed under the [GNU AGPLv3](LICENSE).

View File

@ -17,7 +17,7 @@ This guide describes how to install and setup Misskey with Docker.
---------------------------------------------------------------- ----------------------------------------------------------------
1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`. 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`. 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`.
2. Edit `default.yml` and `mongo_initdb.js`. 3. Edit `default.yml` and `mongo_initdb.js`.
*3.* Configure Docker *3.* Configure Docker
---------------------------------------------------------------- ----------------------------------------------------------------

67
docs/docker.fr.md Normal file
View File

@ -0,0 +1,67 @@
Guide Docker
================================================================
Ce guide explique comment installer et configurer Misskey avec Docker.
[Version japonaise également disponible - Japanese version also available - 日本語版もあります](./docker.ja.md)
[Version anglaise également disponible - English version also available - 英語版もあります](./docker.en.md)
----------------------------------------------------------------
*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` Permet de se déplacer 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).
*2.* Configuration de Misskey
----------------------------------------------------------------
1. `cp .config/example.yml .config/default.yml` Copie le fichier `.config/example.yml` et le renommer en `default.yml`.
2. `cp .config/mongo_initdb_example.js .config/mongo_initdb.js` Copie le fichier `.config/mongo_initdb_example.js` et le renomme en `mongo_initdb.js`.
3. Editer `default.yml` et `mongo_initdb.js`.
*3.* Configurer Docker
----------------------------------------------------------------
Editez `docker-compose.yml`.
*4.* Contruire Misskey
----------------------------------------------------------------
Contruire l'image Docker avec:
`docker-compose build`
*5.* C'est tout !
----------------------------------------------------------------
Parfait, Vous avez un environnement prêt pour démarrer Misskey.
### Lancer normalement
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)`
4. `git stash pop`
5. `docker-compose build`
6. Consultez le [ChangeLog](../CHANGELOG.md) pour avoir les éventuelles informations de migration
7. `docker-compose stop && docker-compose up -d`
### Comment exécuter des [commandes](manage.fr.md)
`docker-compose run --rm web node cli/mark-admin @example`
### 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)
*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
4. `exit`
----------------------------------------------------------------
Si vous avez des questions ou des problèmes, n'hésitez pas à nous contacter !

18
docs/manage.fr.md Normal file
View File

@ -0,0 +1,18 @@
# Guide d'administration
## Vérifier le status de la file d'attente des taches
coming soon
## Marquer un utilisateur en tant que 'admin'
``` shell
node cli/mark-admin (ID utilisateur ou nom d'utilisateur)
```
Exemple :
``` shell
# Par id
node cli/mark-admin 57d01a501fdf2d07be417afe
# Par nom d'utilisateur
node cli/suspend @syuilo
```

View File

@ -109,7 +109,7 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き" i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
use-white-black-reversi-stones: "リバーシに白黒の石を使う" use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "公式アカウント" verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする" disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -120,6 +120,10 @@ common:
reduce-motion: "UIの動きを減らす" reduce-motion: "UIの動きを減らす"
this-setting-is-this-device-only: "このデバイスのみ" this-setting-is-this-device-only: "このデバイスのみ"
use-os-default-emojis: "OS標準の絵文字を使用" use-os-default-emojis: "OS標準の絵文字を使用"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。" do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
user-suspended: "このユーザーは凍結されています。" user-suspended: "このユーザーは凍結されています。"
is-remote-user: "このユーザー情報はコピーです。" is-remote-user: "このユーザー情報はコピーです。"
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
sensitive: "閲覧注意" sensitive: "閲覧注意"
click-to-show: "クリックして表示" click-to-show: "クリックして表示"
common/views/components/theme.vue: common/views/components/theme.vue:
theme: "テーマ"
light-theme: "非ダークモード時に使用するテーマ" light-theme: "非ダークモード時に使用するテーマ"
dark-theme: "ダークモード時に使用するテーマ" dark-theme: "ダークモード時に使用するテーマ"
light-themes: "明るいテーマ" light-themes: "明るいテーマ"
@ -276,6 +281,7 @@ common/views/components/theme.vue:
base-theme: "ベーステーマ" base-theme: "ベーステーマ"
base-theme-light: "Light" base-theme-light: "Light"
base-theme-dark: "Dark" base-theme-dark: "Dark"
find-more-theme: "その他のテーマを入手"
theme-name: "テーマ名" theme-name: "テーマ名"
preview-created-theme: "プレビュー" preview-created-theme: "プレビュー"
invalid-theme: "テーマが正しくありません。" invalid-theme: "テーマが正しくありません。"
@ -331,6 +337,7 @@ common/views/components/nav.vue:
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "メンション" mention: "メンション"
detail: "詳細" detail: "詳細"
copy-content: "内容をコピー"
copy-link: "リンクをコピー" copy-link: "リンクをコピー"
favorite: "お気に入り" favorite: "お気に入り"
unfavorite: "お気に入り解除" unfavorite: "お気に入り解除"
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "パスワードを入力してください" enter-password: "パスワードを入力してください"
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:" authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
howtoinstall: "インストール方法はこちら" howtoinstall: "インストール方法はこちら"
token: "トークン"
scan: "次に、表示されているQRコードをスキャンします:" scan: "次に、表示されているQRコードをスキャンします:"
done: "お使いのデバイスに表示されているトークンを入力して完了します:" done: "お使いのデバイスに表示されているトークンを入力して完了します:"
submit: "完了" submit: "完了"
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
notification-position: "通知の表示" notification-position: "通知の表示"
notification-position-bottom: "下" notification-position-bottom: "下"
notification-position-top: "上" notification-position-top: "上"
theme: "テーマ"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲" note-visibility: "投稿の公開範囲"

View File

@ -109,7 +109,7 @@ common:
my-token-regenerated: "Dein Token wurde generiert. Du wirst jetzt abgemeldet." my-token-regenerated: "Dein Token wurde generiert. Du wirst jetzt abgemeldet."
i-like-sushi: "Ich bevorzuge Sushi anstelle von Pudding" i-like-sushi: "Ich bevorzuge Sushi anstelle von Pudding"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
use-white-black-reversi-stones: "リバーシに白黒の石を使う" use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "Verifizierter Benutzer" verified-user: "Verifizierter Benutzer"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする" disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -120,6 +120,10 @@ common:
reduce-motion: "Animationen der Benutzeroberfläche reduzieren" reduce-motion: "Animationen der Benutzeroberfläche reduzieren"
this-setting-is-this-device-only: "Nur auf diesem Gerät" this-setting-is-this-device-only: "Nur auf diesem Gerät"
use-os-default-emojis: "OS標準の絵文字を使用" use-os-default-emojis: "OS標準の絵文字を使用"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
do-not-use-in-production: "Dies ist eine Entwicklungsversion. Nicht in einer Produktionsumgebung verwenden." do-not-use-in-production: "Dies ist eine Entwicklungsversion. Nicht in einer Produktionsumgebung verwenden."
user-suspended: "このユーザーは凍結されています。" user-suspended: "このユーザーは凍結されています。"
is-remote-user: "このユーザー情報はコピーです。" is-remote-user: "このユーザー情報はコピーです。"
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
sensitive: "Dieser Inhalt ist NSFW" sensitive: "Dieser Inhalt ist NSFW"
click-to-show: "Klicke zum den Inhalt anzusehen" click-to-show: "Klicke zum den Inhalt anzusehen"
common/views/components/theme.vue: common/views/components/theme.vue:
theme: "テーマ"
light-theme: "Thema" light-theme: "Thema"
dark-theme: "Thema während des Nachtmodus" dark-theme: "Thema während des Nachtmodus"
light-themes: "Helles Thema" light-themes: "Helles Thema"
@ -276,6 +281,7 @@ common/views/components/theme.vue:
base-theme: "Basisthema" base-theme: "Basisthema"
base-theme-light: "Hell" base-theme-light: "Hell"
base-theme-dark: "Dunkel" base-theme-dark: "Dunkel"
find-more-theme: "その他のテーマを入手"
theme-name: "Name des Themas" theme-name: "Name des Themas"
preview-created-theme: "Vorschau" preview-created-theme: "Vorschau"
invalid-theme: "Thema ist ungültig" invalid-theme: "Thema ist ungültig"
@ -331,6 +337,7 @@ common/views/components/nav.vue:
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "メンション" mention: "メンション"
detail: "詳細" detail: "詳細"
copy-content: "内容をコピー"
copy-link: "リンクをコピー" copy-link: "リンクをコピー"
favorite: "Diese Notiz favorisieren" favorite: "Diese Notiz favorisieren"
unfavorite: "Aus Favoriten entfernen" unfavorite: "Aus Favoriten entfernen"
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "Bitte Passwort eingeben" enter-password: "Bitte Passwort eingeben"
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:" authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
howtoinstall: "インストール方法はこちら" howtoinstall: "インストール方法はこちら"
token: "トークン"
scan: "次に、表示されているQRコードをスキャンします:" scan: "次に、表示されているQRコードをスキャンします:"
done: "お使いのデバイスに表示されているトークンを入力して完了します:" done: "お使いのデバイスに表示されているトークンを入力して完了します:"
submit: "完了" submit: "完了"
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
notification-position: "通知の表示" notification-position: "通知の表示"
notification-position-bottom: "下" notification-position-bottom: "下"
notification-position-top: "上" notification-position-top: "上"
theme: "テーマ"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲" note-visibility: "投稿の公開範囲"

View File

@ -18,7 +18,7 @@ common:
ui-desc: "No UI fits for everyone. Therefore, Misskey has a highly customizable UI for your taste. Make your original home by editing, adjusting layouts of timeline and placing selectable widgets you can easily customize." ui-desc: "No UI fits for everyone. Therefore, Misskey has a highly customizable UI for your taste. Make your original home by editing, adjusting layouts of timeline and placing selectable widgets you can easily customize."
drive: "Drive" drive: "Drive"
drive-desc: "Wanna post a picture you have already uploaded? Wish to organize, name and create a folder for your uploaded files? Misskey Drive is the best solution for you. Very easy to share your files online." drive-desc: "Wanna post a picture you have already uploaded? Wish to organize, name and create a folder for your uploaded files? Misskey Drive is the best solution for you. Very easy to share your files online."
outro: "Check further Misskey-unique features on your eyes! Feeling like this is not for you, try other instances as Misskey is a decentralized SNS so that you can easily find your mates. Then, GLHF!" outro: "Check Misskey-unique features by seeing them with your own eyes! If you feel like this instance is not for you, try other instances, as Misskey is a decentralized SNS, so that you can easily find your mates. Then, GLHF!"
adblock: adblock:
detected: "Please disable ad blocker." detected: "Please disable ad blocker."
warning: "Some features may be unavailable or cause malfunctions if ad blocking features are enabled. <strong>Misskey is not running ads</strong>." warning: "Some features may be unavailable or cause malfunctions if ad blocking features are enabled. <strong>Misskey is not running ads</strong>."
@ -109,7 +109,7 @@ common:
my-token-regenerated: "Your token has been regenerated, so you will be signed out." my-token-regenerated: "Your token has been regenerated, so you will be signed out."
i-like-sushi: "I prefer sushi rather than pudding" i-like-sushi: "I prefer sushi rather than pudding"
show-reversi-board-labels: "Show row and column labels in Reversi" show-reversi-board-labels: "Show row and column labels in Reversi"
use-white-black-reversi-stones: "Use white-black stone in reversi" use-avatar-reversi-stones: "Use avatar as a stone in reversi"
verified-user: "Verified account" verified-user: "Verified account"
disable-animated-mfm: "Disable animated texts in a post" disable-animated-mfm: "Disable animated texts in a post"
suggest-recent-hashtags: "Suggest recently used hashtags within the post composition area" suggest-recent-hashtags: "Suggest recently used hashtags within the post composition area"
@ -120,11 +120,15 @@ common:
reduce-motion: "Reduce motion in UI" reduce-motion: "Reduce motion in UI"
this-setting-is-this-device-only: "Only for this device" this-setting-is-this-device-only: "Only for this device"
use-os-default-emojis: "Use the OS default Emojis" use-os-default-emojis: "Use the OS default Emojis"
line-width: "Line thickness"
line-width-thin: "Thin"
line-width-normal: "Regular"
line-width-thick: "Thick"
do-not-use-in-production: "This is a development build. Do not use in production." do-not-use-in-production: "This is a development build. Do not use in production."
user-suspended: "This user has been suspended." user-suspended: "This user has been suspended."
is-remote-user: "This user information is copied." is-remote-user: "This user's information is mirrored."
is-remote-post: "This post information is a copy." is-remote-post: "These post contents are mirrored."
view-on-remote: "View it on remote" view-on-remote: "For completion, view it remotely."
renoted-by: "Renoted by {user}" renoted-by: "Renoted by {user}"
error: error:
title: "Something happened :(" title: "Something happened :("
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
sensitive: "NSFW" sensitive: "NSFW"
click-to-show: "Click to show" click-to-show: "Click to show"
common/views/components/theme.vue: common/views/components/theme.vue:
theme: "Theme"
light-theme: "Theme" light-theme: "Theme"
dark-theme: "Theme during dark mode" dark-theme: "Theme during dark mode"
light-themes: "Light theme" light-themes: "Light theme"
@ -276,6 +281,7 @@ common/views/components/theme.vue:
base-theme: "Base theme" base-theme: "Base theme"
base-theme-light: "Light" base-theme-light: "Light"
base-theme-dark: "Dark" base-theme-dark: "Dark"
find-more-theme: "Find more themes"
theme-name: "Theme name" theme-name: "Theme name"
preview-created-theme: "Preview" preview-created-theme: "Preview"
invalid-theme: "Not valid theme" invalid-theme: "Not valid theme"
@ -329,8 +335,9 @@ common/views/components/nav.vue:
develop: "Developers" develop: "Developers"
feedback: "Feedback" feedback: "Feedback"
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "Mentions" mention: "Mention"
detail: "Details" detail: "Details"
copy-content: "Copy the contents"
copy-link: "Copy link" copy-link: "Copy link"
favorite: "Favorite this note" favorite: "Favorite this note"
unfavorite: "Unfavorite" unfavorite: "Unfavorite"
@ -497,8 +504,8 @@ common/views/widgets/calendar.vue:
month: "{}," month: "{},"
day: "{}" day: "{}"
today: "Today: " today: "Today: "
this-month: "This month: " this-month: "Month:"
this-year: "This year: " this-year: "Year:"
common/views/widgets/photo-stream.vue: common/views/widgets/photo-stream.vue:
title: "Photo stream" title: "Photo stream"
no-photos: "No photos" no-photos: "No photos"
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "Enter the password" enter-password: "Enter the password"
authenticator: "First, you need to install Google Authenticator on your device:" authenticator: "First, you need to install Google Authenticator on your device:"
howtoinstall: "How to install" howtoinstall: "How to install"
token: "Token"
scan: "And then, scan the QR code:" scan: "And then, scan the QR code:"
done: "Please enter the token displayed on your device:" done: "Please enter the token displayed on your device:"
submit: "Submit" submit: "Submit"
@ -985,6 +993,7 @@ admin/views/instance.vue:
instance-name: "Instance name" instance-name: "Instance name"
instance-description: "Instance description" instance-description: "Instance description"
host: "Host" host: "Host"
logo-url: "Logo image URL"
banner-url: "Banner image URL" banner-url: "Banner image URL"
error-image-url: "Error image URL" error-image-url: "Error image URL"
languages: "Language of this instance" languages: "Language of this instance"
@ -1058,7 +1067,7 @@ admin/views/charts.vue:
federation: "Federation" federation: "Federation"
notes: "Posts" notes: "Posts"
users: "Users" users: "Users"
drive: "Drive" drive: "Media storage"
network: "Network" network: "Network"
charts: charts:
federation-instances: "The number of instances: increase/decrease" federation-instances: "The number of instances: increase/decrease"
@ -1432,7 +1441,6 @@ mobile/views/pages/settings.vue:
notification-position: "Notification style" notification-position: "Notification style"
notification-position-bottom: "Bottom" notification-position-bottom: "Bottom"
notification-position-top: "Top" notification-position-top: "Top"
theme: "Theme"
behavior: "Behavior" behavior: "Behavior"
fetch-on-scroll: "Endless loading on scroll" fetch-on-scroll: "Endless loading on scroll"
note-visibility: "Post visibility" note-visibility: "Post visibility"
@ -1525,7 +1533,7 @@ deck/deck.user-column.vue:
pinned-notes: "Pinned posts" pinned-notes: "Pinned posts"
push-to-a-list: "Add to list" push-to-a-list: "Add to list"
docs: docs:
edit-this-page-on-github: "Found a mistake or want to contribute for the documentation?" edit-this-page-on-github: "Found an error, or do you want to contribute to the documentation?"
edit-this-page-on-github-link: "Edit this page at GitHub!" edit-this-page-on-github-link: "Edit this page at GitHub!"
api: api:
entities: entities:

View File

@ -109,7 +109,7 @@ common:
my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado." my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado."
i-like-sushi: "Prefiero sushi a pudín" i-like-sushi: "Prefiero sushi a pudín"
show-reversi-board-labels: "Mostrar etiquetas de filas y columnas en Reversi" show-reversi-board-labels: "Mostrar etiquetas de filas y columnas en Reversi"
use-white-black-reversi-stones: "リバーシに白黒の石を使う" use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "Cuenta verificada" verified-user: "Cuenta verificada"
disable-animated-mfm: "Desactivar texto animado en una publicación" disable-animated-mfm: "Desactivar texto animado en una publicación"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -120,6 +120,10 @@ common:
reduce-motion: "UIの動きを減らす" reduce-motion: "UIの動きを減らす"
this-setting-is-this-device-only: "このデバイスのみ" this-setting-is-this-device-only: "このデバイスのみ"
use-os-default-emojis: "OS標準の絵文字を使用" use-os-default-emojis: "OS標準の絵文字を使用"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
do-not-use-in-production: "Esto está en desarrollo, no usarlo para producción." do-not-use-in-production: "Esto está en desarrollo, no usarlo para producción."
user-suspended: "このユーザーは凍結されています。" user-suspended: "このユーザーは凍結されています。"
is-remote-user: "このユーザー情報はコピーです。" is-remote-user: "このユーザー情報はコピーです。"
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
sensitive: "閲覧注意" sensitive: "閲覧注意"
click-to-show: "クリックして表示" click-to-show: "クリックして表示"
common/views/components/theme.vue: common/views/components/theme.vue:
theme: "テーマ"
light-theme: "非ダークモード時に使用するテーマ" light-theme: "非ダークモード時に使用するテーマ"
dark-theme: "ダークモード時に使用するテーマ" dark-theme: "ダークモード時に使用するテーマ"
light-themes: "明るいテーマ" light-themes: "明るいテーマ"
@ -276,6 +281,7 @@ common/views/components/theme.vue:
base-theme: "ベーステーマ" base-theme: "ベーステーマ"
base-theme-light: "Light" base-theme-light: "Light"
base-theme-dark: "Dark" base-theme-dark: "Dark"
find-more-theme: "その他のテーマを入手"
theme-name: "テーマ名" theme-name: "テーマ名"
preview-created-theme: "プレビュー" preview-created-theme: "プレビュー"
invalid-theme: "テーマが正しくありません。" invalid-theme: "テーマが正しくありません。"
@ -331,6 +337,7 @@ common/views/components/nav.vue:
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "メンション" mention: "メンション"
detail: "Detalles" detail: "Detalles"
copy-content: "内容をコピー"
copy-link: "Copiar enlace" copy-link: "Copiar enlace"
favorite: "Me gusta esta nota" favorite: "Me gusta esta nota"
unfavorite: "お気に入り解除" unfavorite: "お気に入り解除"
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "Escribe una contraseña" enter-password: "Escribe una contraseña"
authenticator: "Primero, necesitas instalar Google Authenticator en tu dispositivo:" authenticator: "Primero, necesitas instalar Google Authenticator en tu dispositivo:"
howtoinstall: "Cómo instalar" howtoinstall: "Cómo instalar"
token: "トークン"
scan: "Luego, escanea el código QR:" scan: "Luego, escanea el código QR:"
done: "Por favor ingresa el token mostrado en tu dispositivo:" done: "Por favor ingresa el token mostrado en tu dispositivo:"
submit: "Enviar" submit: "Enviar"
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
notification-position: "通知の表示" notification-position: "通知の表示"
notification-position-bottom: "下" notification-position-bottom: "下"
notification-position-top: "上" notification-position-top: "上"
theme: "テーマ"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲" note-visibility: "投稿の公開範囲"

View File

@ -109,10 +109,10 @@ common:
my-token-regenerated: "Votre jeton vient dêtre généré, vous allez maintenant être déconnecté." my-token-regenerated: "Votre jeton vient dêtre généré, vous allez maintenant être déconnecté."
i-like-sushi: "Je préfère les sushis plutôt que le pudding" i-like-sushi: "Je préfère les sushis plutôt que le pudding"
show-reversi-board-labels: "Afficher les étiquettes des lignes et colonnes dans Reversi" show-reversi-board-labels: "Afficher les étiquettes des lignes et colonnes dans Reversi"
use-white-black-reversi-stones: "Jouer avec des pions noirs et blancs sur Reversi" use-avatar-reversi-stones: "Utiliser lavatar comme pion dans Reversi"
verified-user: "Compte vérifié" verified-user: "Compte vérifié"
disable-animated-mfm: "Désactiver les textes animés dans les publications" disable-animated-mfm: "Désactiver les textes animés dans les publications"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "Suggérer les hashtags récemment utilisés dans le champs de saisie"
always-show-nsfw: "Toujours afficher les contenus sensibles" always-show-nsfw: "Toujours afficher les contenus sensibles"
always-mark-nsfw: "Toujours marquer les notes ayant des attachements comme sensibles" always-mark-nsfw: "Toujours marquer les notes ayant des attachements comme sensibles"
show-full-acct: "Afficher ladresse complète de lutilisateur" show-full-acct: "Afficher ladresse complète de lutilisateur"
@ -120,8 +120,12 @@ common:
reduce-motion: "Réduire les animations dans linterface utilisateur" reduce-motion: "Réduire les animations dans linterface utilisateur"
this-setting-is-this-device-only: "Uniquement sur cet appareil" this-setting-is-this-device-only: "Uniquement sur cet appareil"
use-os-default-emojis: "Utiliser les émojis standards du système" use-os-default-emojis: "Utiliser les émojis standards du système"
line-width: "Epaisseur du trait"
line-width-thin: "Fine"
line-width-normal: "Normale"
line-width-thick: "Épaisse"
do-not-use-in-production: "Il sagit dune version de développement. Ne pas utiliser dans un environnement de production." do-not-use-in-production: "Il sagit dune version de développement. Ne pas utiliser dans un environnement de production."
user-suspended: "このユーザーは凍結されています。" user-suspended: "Cet·te utilisateur·trice a été suspendu·e"
is-remote-user: "Ces informations appartiennent à un utilisateur distant." is-remote-user: "Ces informations appartiennent à un utilisateur distant."
is-remote-post: "Ceci est une publication distante." is-remote-post: "Ceci est une publication distante."
view-on-remote: " Consulter le profil complet" view-on-remote: " Consulter le profil complet"
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
sensitive: "Contenu sensible" sensitive: "Contenu sensible"
click-to-show: "Cliquer pour afficher" click-to-show: "Cliquer pour afficher"
common/views/components/theme.vue: common/views/components/theme.vue:
theme: "Thème"
light-theme: "Thème en mode jour" light-theme: "Thème en mode jour"
dark-theme: "Thème en mode nuit" dark-theme: "Thème en mode nuit"
light-themes: "Thème clair" light-themes: "Thème clair"
@ -276,6 +281,7 @@ common/views/components/theme.vue:
base-theme: "Thème de base" base-theme: "Thème de base"
base-theme-light: "Clair" base-theme-light: "Clair"
base-theme-dark: "Sombre" base-theme-dark: "Sombre"
find-more-theme: "Obtenir dautres thèmes"
theme-name: "Nom du Thème" theme-name: "Nom du Thème"
preview-created-theme: "Prévisualisation" preview-created-theme: "Prévisualisation"
invalid-theme: "Thème nest pas valide." invalid-theme: "Thème nest pas valide."
@ -299,7 +305,7 @@ common/views/components/cw-button.vue:
show: "Voir plus" show: "Voir plus"
chars: "{count} caractères" chars: "{count} caractères"
files: "{count} fichiers" files: "{count} fichiers"
poll: "アンケート" poll: "Sondage"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "Trouver un utilisateur" search-user: "Trouver un utilisateur"
you: "Vous" you: "Vous"
@ -329,8 +335,9 @@ common/views/components/nav.vue:
develop: "Développeurs" develop: "Développeurs"
feedback: "Suggestions" feedback: "Suggestions"
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "メンション" mention: "Mention"
detail: "Détails" detail: "Détails"
copy-content: "Copier le contenu"
copy-link: "Copier le lien" copy-link: "Copier le lien"
favorite: "Mettre cette note en favoris" favorite: "Mettre cette note en favoris"
unfavorite: "Retirer des favoris" unfavorite: "Retirer des favoris"
@ -406,10 +413,10 @@ common/views/components/stream-indicator.vue:
reconnecting: "Reconnexion en cours" reconnecting: "Reconnexion en cours"
connected: "Connecté" connected: "Connecté"
common/views/components/notification-settings.vue: common/views/components/notification-settings.vue:
title: "通知" title: "Notifications"
mark-as-read-all-notifications: "すべての通知を既読にする" mark-as-read-all-notifications: "Marquer toutes les notifications comme lues"
mark-as-read-all-unread-notes: "すべての投稿を既読にする" mark-as-read-all-unread-notes: "Marquer toutes les notes comme lues"
mark-as-read-all-talk-messages: "すべてのトークを既読にする" mark-as-read-all-talk-messages: "Marquer toutes les conversations comme lues"
auto-watch: "投稿の自動ウォッチ" auto-watch: "投稿の自動ウォッチ"
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。" auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
common/views/components/integration-settings.vue: common/views/components/integration-settings.vue:
@ -436,7 +443,7 @@ common/views/components/uploader.vue:
common/views/components/visibility-chooser.vue: common/views/components/visibility-chooser.vue:
public: "Public" public: "Public"
home: "Accueil" home: "Accueil"
home-desc: "Publier sur le fil d'Accueil uniquement" home-desc: "Publier sur le fil dAccueil uniquement"
followers: "Abonnés" followers: "Abonnés"
followers-desc: "Publier à vos abonnés uniquement" followers-desc: "Publier à vos abonnés uniquement"
specified: "Direct" specified: "Direct"
@ -474,7 +481,7 @@ common/views/components/profile-editor.vue:
privacy: "Vie privée" privacy: "Vie privée"
save: "Mettre à jour le profil" save: "Mettre à jour le profil"
saved: "Profil mis à jour avec succès" saved: "Profil mis à jour avec succès"
uploading: "En cours d'envoi…" uploading: "En cours denvoi …"
upload-failed: "Échec de l'envoi" upload-failed: "Échec de l'envoi"
email: "Paramètres de messagerie" email: "Paramètres de messagerie"
email-address: "Adresse de courrier électronique" email-address: "Adresse de courrier électronique"
@ -540,7 +547,7 @@ common/views/widgets/tips.vue:
tips-line24: "Misskey est fonctionnel depuis 2014" tips-line24: "Misskey est fonctionnel depuis 2014"
tips-line25: "Vous pouvez recevoir les notifications de Misskey dans un navigateur web compatible" tips-line25: "Vous pouvez recevoir les notifications de Misskey dans un navigateur web compatible"
common/views/pages/not-found.vue: common/views/pages/not-found.vue:
page-not-found: "ページが見つかりませんでした" page-not-found: "La page demandée est introuvable !"
common/views/pages/follow.vue: common/views/pages/follow.vue:
signed-in-as: "Connecté en tant que {}" signed-in-as: "Connecté en tant que {}"
following: "Suit" following: "Suit"
@ -676,12 +683,12 @@ desktop/views/components/note-detail.vue:
location: "Géolocalisation" location: "Géolocalisation"
renote: "Republier" renote: "Republier"
add-reaction: "Ajouter votre reaction" add-reaction: "Ajouter votre reaction"
undo-reaction: "リアクション解除" undo-reaction: "Inverser la réaction"
desktop/views/components/note.vue: desktop/views/components/note.vue:
reply: "Répondre" reply: "Répondre"
renote: "Partager" renote: "Partager"
add-reaction: "Ajouter votre réaction" add-reaction: "Ajouter votre réaction"
undo-reaction: "リアクション解除" undo-reaction: "Inverser la réaction"
detail: "Détails" detail: "Détails"
private: "Cette publication est privée" private: "Cette publication est privée"
deleted: "Cette publication a été supprimée" deleted: "Cette publication a été supprimée"
@ -731,7 +738,7 @@ desktop/views/components/renote-form.vue:
quote: "Citer..." quote: "Citer..."
cancel: "Annuler" cancel: "Annuler"
renote: "Republier" renote: "Republier"
renote-home: "Renote (Home)" renote-home: "Renote (accueil)"
reposting: "Republication en cours…" reposting: "Republication en cours…"
success: "Republié !" success: "Republié !"
failure: "La renote a échoué" failure: "La renote a échoué"
@ -769,8 +776,8 @@ desktop/views/components/settings.vue:
advanced: "Paramètres avancés" advanced: "Paramètres avancés"
api-via-stream: "Requête API via le flux" api-via-stream: "Requête API via le flux"
api-via-stream-desc: "Lorsque ce paramètre est activé, une demande d'API est effectuée via une connexion WebSocket (pour une meilleure performance). Lorsqu'il est désactivé, l'API de récupération native est utilisée. Ce paramètre n'est valide que sur cet appareil." api-via-stream-desc: "Lorsque ce paramètre est activé, une demande d'API est effectuée via une connexion WebSocket (pour une meilleure performance). Lorsqu'il est désactivé, l'API de récupération native est utilisée. Ce paramètre n'est valide que sur cet appareil."
deck-nav: "デッキ内ナビゲーション" deck-nav: "Deck sans tansitions"
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。" deck-nav-desc: "Vous obtenez une colonne temporaire sans transitions dans la page pendant la navigation, lors de lutilisation du Deck."
deck-default: "Utiliser le Deck comme IU par défaut" deck-default: "Utiliser le Deck comme IU par défaut"
display: "Affichage et design" display: "Affichage et design"
customize: "Personnaliser l'Accueil" customize: "Personnaliser l'Accueil"
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "Entrez un mot de passe" enter-password: "Entrez un mot de passe"
authenticator: "Vous devez au préalable installer Google Authenticator sur votre appareil:" authenticator: "Vous devez au préalable installer Google Authenticator sur votre appareil:"
howtoinstall: "Comment installer" howtoinstall: "Comment installer"
token: "Jeton"
scan: "Ensuite, scannez le code QR affiché sur votre écran :" scan: "Ensuite, scannez le code QR affiché sur votre écran :"
done: "Veuillez entrer le token qui s'affiche sur votre appareil :" done: "Veuillez entrer le token qui s'affiche sur votre appareil :"
submit: "Envoyer" submit: "Envoyer"
@ -1050,7 +1058,7 @@ admin/views/instance.vue:
serviceworker-info: "Devrait être activé pour les notifications push." serviceworker-info: "Devrait être activé pour les notifications push."
vapid-publickey: "Clé Publique VAPID" vapid-publickey: "Clé Publique VAPID"
vapid-privatekey: "Clé privée VAPID" vapid-privatekey: "Clé privée VAPID"
vapid-info: "ServiceWorkerを有効にする場合、VAPIDキーペアを生成する必要があります。シェルで次のようにします:" vapid-info: "Vous devez activer ServiceWorker pour pouvoir générer les clés VAPID. Vous devez lancer ceci en mode root :"
admin/views/charts.vue: admin/views/charts.vue:
title: "Graphe" title: "Graphe"
per-day: "par jour" per-day: "par jour"
@ -1066,7 +1074,7 @@ admin/views/charts.vue:
notes: "Nombre de publications : augmentation/diminution (combinés)" notes: "Nombre de publications : augmentation/diminution (combinés)"
local-notes: "Nombre des publications : augmentation/diminution (Local)" local-notes: "Nombre des publications : augmentation/diminution (Local)"
remote-notes: "Nombre de publications : augmentation/diminution (distants)" remote-notes: "Nombre de publications : augmentation/diminution (distants)"
notes-total: "Total des publications" notes-total: "Total des notes"
users: "Nombre dutilisateurs : augmentation/diminution" users: "Nombre dutilisateurs : augmentation/diminution"
users-total: "Nombre total des utilisateurs" users-total: "Nombre total des utilisateurs"
drive: "Capacité utilisée comme stockage : augmentation/diminution" drive: "Capacité utilisée comme stockage : augmentation/diminution"
@ -1166,7 +1174,7 @@ desktop/views/pages/welcome.vue:
signup: "S'enregistrer" signup: "S'enregistrer"
signin-button: "Se connecter" signin-button: "Se connecter"
signup-button: "S'inscrire" signup-button: "S'inscrire"
timeline: "Fil d'actualité" timeline: "Fil dactualité"
announcements: "Notices" announcements: "Notices"
photos: "Images récentes" photos: "Images récentes"
powered-by-misskey: "Propulsé par <b>Misskey</b>." powered-by-misskey: "Propulsé par <b>Misskey</b>."
@ -1223,7 +1231,7 @@ desktop/views/pages/user/user.header.vue:
posts: "Notes" posts: "Notes"
following: "Suit" following: "Suit"
followers: "Abonnés" followers: "Abonnés"
mention: "メンション" mention: "Mentions"
is-bot: "Ce compte est un Bot" is-bot: "Ce compte est un Bot"
years-old: "{age} ans" years-old: "{age} ans"
year: "/" year: "/"
@ -1347,7 +1355,7 @@ mobile/views/components/ui.header.vue:
welcome-back: "Content de vous revoir ! " welcome-back: "Content de vous revoir ! "
adjective: "M." adjective: "M."
mobile/views/components/ui.nav.vue: mobile/views/components/ui.nav.vue:
timeline: "Fil d'actualité" timeline: "Fil dactualité"
notifications: "Notifications" notifications: "Notifications"
follow-requests: "Demandes dabonnement" follow-requests: "Demandes dabonnement"
search: "Rechercher" search: "Rechercher"
@ -1361,7 +1369,7 @@ mobile/views/components/ui.nav.vue:
about: "À propos de Misskey" about: "À propos de Misskey"
mobile/views/components/user-timeline.vue: mobile/views/components/user-timeline.vue:
no-notes: "Il semble que cet utilisateur na rien publié pour le moment." no-notes: "Il semble que cet utilisateur na rien publié pour le moment."
no-notes-with-media: "Aucune notes avec des médias" no-notes-with-media: "Aucune note comprenant des médias"
mobile/views/components/users-list.vue: mobile/views/components/users-list.vue:
all: "Tout" all: "Tout"
known: "Vous connaissez" known: "Vous connaissez"
@ -1421,18 +1429,17 @@ mobile/views/pages/settings.vue:
i-am-under-limited-internet: "J'ai un accès Internet limité" i-am-under-limited-internet: "J'ai un accès Internet limité"
circle-icons: "Utiliser des icônes circulaires" circle-icons: "Utiliser des icônes circulaires"
contrasted-acct: "Nom dutilisateur contrasté" contrasted-acct: "Nom dutilisateur contrasté"
timeline: "Fil d'actualité" timeline: "Fil dactualité"
show-reply-target: "Afficher les réponses" show-reply-target: "Afficher les réponses"
show-my-renotes: "Afficher mes partages" show-my-renotes: "Afficher mes partages"
show-renoted-my-notes: "Afficher mes publications partagées" show-renoted-my-notes: "Afficher mes notes partagées"
show-local-renotes: "Afficher les publications partagées localement" show-local-renotes: "Afficher les notes partagées localement"
post-style: "Style de la publication" post-style: "Style de la publication"
post-style-standard: "Standard" post-style-standard: "Standard"
post-style-smart: "Intelligent" post-style-smart: "Intelligent"
notification-position: "Style de notification" notification-position: "Style de notification"
notification-position-bottom: "en bas" notification-position-bottom: "en bas"
notification-position-top: "en haut" notification-position-top: "en haut"
theme: "Thème"
behavior: "Comportement" behavior: "Comportement"
fetch-on-scroll: "Chargement lors du défilement" fetch-on-scroll: "Chargement lors du défilement"
note-visibility: "Visibilité de la publication" note-visibility: "Visibilité de la publication"
@ -1463,7 +1470,7 @@ mobile/views/pages/user.vue:
followers: "Abonnés" followers: "Abonnés"
notes: "Notes" notes: "Notes"
overview: "Aperçu" overview: "Aperçu"
timeline: "Fil d'actualité" timeline: "Fil dactualité"
media: "Média" media: "Média"
mute: "Mettre en sourdine" mute: "Mettre en sourdine"
unmute: "Enlever la sourdine" unmute: "Enlever la sourdine"
@ -1518,7 +1525,7 @@ deck/deck.user-column.vue:
posts: "Notes" posts: "Notes"
following: "Suit" following: "Suit"
followers: "Abonnés" followers: "Abonnés"
mention: "メンション" mention: "Mentions"
images: "Images" images: "Images"
activity: "Activité" activity: "Activité"
timeline: "Fil dactualité" timeline: "Fil dactualité"

View File

@ -109,7 +109,7 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き" i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
use-white-black-reversi-stones: "リバーシに白黒の石を使う" use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "公式アカウント" verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする" disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -120,6 +120,10 @@ common:
reduce-motion: "UIの動きを減らす" reduce-motion: "UIの動きを減らす"
this-setting-is-this-device-only: "このデバイスのみ" this-setting-is-this-device-only: "このデバイスのみ"
use-os-default-emojis: "OS標準の絵文字を使用" use-os-default-emojis: "OS標準の絵文字を使用"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。" do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
user-suspended: "このユーザーは凍結されています。" user-suspended: "このユーザーは凍結されています。"
is-remote-user: "このユーザー情報はコピーです。" is-remote-user: "このユーザー情報はコピーです。"
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
sensitive: "閲覧注意" sensitive: "閲覧注意"
click-to-show: "クリックして表示" click-to-show: "クリックして表示"
common/views/components/theme.vue: common/views/components/theme.vue:
theme: "テーマ"
light-theme: "非ダークモード時に使用するテーマ" light-theme: "非ダークモード時に使用するテーマ"
dark-theme: "ダークモード時に使用するテーマ" dark-theme: "ダークモード時に使用するテーマ"
light-themes: "明るいテーマ" light-themes: "明るいテーマ"
@ -276,6 +281,7 @@ common/views/components/theme.vue:
base-theme: "ベーステーマ" base-theme: "ベーステーマ"
base-theme-light: "Light" base-theme-light: "Light"
base-theme-dark: "Dark" base-theme-dark: "Dark"
find-more-theme: "その他のテーマを入手"
theme-name: "テーマ名" theme-name: "テーマ名"
preview-created-theme: "プレビュー" preview-created-theme: "プレビュー"
invalid-theme: "テーマが正しくありません。" invalid-theme: "テーマが正しくありません。"
@ -331,6 +337,7 @@ common/views/components/nav.vue:
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "メンション" mention: "メンション"
detail: "詳細" detail: "詳細"
copy-content: "内容をコピー"
copy-link: "リンクをコピー" copy-link: "リンクをコピー"
favorite: "お気に入り" favorite: "お気に入り"
unfavorite: "お気に入り解除" unfavorite: "お気に入り解除"
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "パスワードを入力してください" enter-password: "パスワードを入力してください"
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:" authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
howtoinstall: "インストール方法はこちら" howtoinstall: "インストール方法はこちら"
token: "トークン"
scan: "次に、表示されているQRコードをスキャンします:" scan: "次に、表示されているQRコードをスキャンします:"
done: "お使いのデバイスに表示されているトークンを入力して完了します:" done: "お使いのデバイスに表示されているトークンを入力して完了します:"
submit: "完了" submit: "完了"
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
notification-position: "通知の表示" notification-position: "通知の表示"
notification-position-bottom: "下" notification-position-bottom: "下"
notification-position-top: "上" notification-position-top: "上"
theme: "テーマ"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲" note-visibility: "投稿の公開範囲"

View File

@ -117,7 +117,7 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き" i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
use-white-black-reversi-stones: "リバーシに白黒の石を使う" use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "公式アカウント" verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする" disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -128,6 +128,12 @@ common:
reduce-motion: "UIの動きを減らす" reduce-motion: "UIの動きを減らす"
this-setting-is-this-device-only: "このデバイスのみ" this-setting-is-this-device-only: "このデバイスのみ"
use-os-default-emojis: "OS標準の絵文字を使用" use-os-default-emojis: "OS標準の絵文字を使用"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
hide-password: "パスワードを隠す"
show-password: "パスワードを表示する"
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。" do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
user-suspended: "このユーザーは凍結されています。" user-suspended: "このユーザーは凍結されています。"
@ -283,6 +289,7 @@ common/views/components/media-banner.vue:
click-to-show: "クリックして表示" click-to-show: "クリックして表示"
common/views/components/theme.vue: common/views/components/theme.vue:
theme: "テーマ"
light-theme: "非ダークモード時に使用するテーマ" light-theme: "非ダークモード時に使用するテーマ"
dark-theme: "ダークモード時に使用するテーマ" dark-theme: "ダークモード時に使用するテーマ"
light-themes: "明るいテーマ" light-themes: "明るいテーマ"
@ -299,6 +306,7 @@ common/views/components/theme.vue:
base-theme: "ベーステーマ" base-theme: "ベーステーマ"
base-theme-light: "Light" base-theme-light: "Light"
base-theme-dark: "Dark" base-theme-dark: "Dark"
find-more-theme: "その他のテーマを入手"
theme-name: "テーマ名" theme-name: "テーマ名"
preview-created-theme: "プレビュー" preview-created-theme: "プレビュー"
invalid-theme: "テーマが正しくありません。" invalid-theme: "テーマが正しくありません。"
@ -361,6 +369,7 @@ common/views/components/nav.vue:
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "メンション" mention: "メンション"
detail: "詳細" detail: "詳細"
copy-content: "内容をコピー"
copy-link: "リンクをコピー" copy-link: "リンクをコピー"
favorite: "お気に入り" favorite: "お気に入り"
unfavorite: "お気に入り解除" unfavorite: "お気に入り解除"
@ -952,6 +961,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "パスワードを入力してください" enter-password: "パスワードを入力してください"
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:" authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
howtoinstall: "インストール方法はこちら" howtoinstall: "インストール方法はこちら"
token: "トークン"
scan: "次に、表示されているQRコードをスキャンします:" scan: "次に、表示されているQRコードをスキャンします:"
done: "お使いのデバイスに表示されているトークンを入力して完了します:" done: "お使いのデバイスに表示されているトークンを入力して完了します:"
submit: "完了" submit: "完了"
@ -1245,6 +1255,14 @@ admin/views/users.vue:
createdAtDesc: "登録日時が新しい順" createdAtDesc: "登録日時が新しい順"
updatedAtAsc: "更新日時が古い順" updatedAtAsc: "更新日時が古い順"
updatedAtDesc: "更新日時が新しい順" updatedAtDesc: "更新日時が新しい順"
state:
title: "状態"
all: "すべて"
admin: "管理者"
moderator: "モデレーター"
adminOrModerator: "管理者+モデレーター"
verified: "公式アカウント"
suspended: "凍結済み"
origin: origin:
title: "オリジン" title: "オリジン"
combined: "ローカル+リモート" combined: "ローカル+リモート"
@ -1258,6 +1276,8 @@ admin/views/moderators.vue:
title: "モデレーターの登録" title: "モデレーターの登録"
add: "登録" add: "登録"
added: "モデレーターを登録しました" added: "モデレーターを登録しました"
remove: "解除"
removed: "モデレーター登録を解除しました"
admin/views/emoji.vue: admin/views/emoji.vue:
add-emoji: add-emoji:
@ -1627,7 +1647,6 @@ mobile/views/pages/settings.vue:
notification-position: "通知の表示" notification-position: "通知の表示"
notification-position-bottom: "下" notification-position-bottom: "下"
notification-position-top: "上" notification-position-top: "上"
theme: "テーマ"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲" note-visibility: "投稿の公開範囲"

View File

@ -109,7 +109,7 @@ common:
my-token-regenerated: "あんさんのトークンが更新されたらしいわ。すまんがとりあえずサインアウトすんで。" my-token-regenerated: "あんさんのトークンが更新されたらしいわ。すまんがとりあえずサインアウトすんで。"
i-like-sushi: "寿司(のほうがプリンよりむしろ)ウマい、タコ焼きはあらへんけど。" i-like-sushi: "寿司(のほうがプリンよりむしろ)ウマい、タコ焼きはあらへんけど。"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示や!" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示や!"
use-white-black-reversi-stones: "リバーシに白黒の石を使う" use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "アメちゃん付きアカウント" verified-user: "アメちゃん付きアカウント"
disable-animated-mfm: "投稿内のちょろちょろ動いてんのを止める" disable-animated-mfm: "投稿内のちょろちょろ動いてんのを止める"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -120,6 +120,10 @@ common:
reduce-motion: "UI、動き過ぎや、静かにしてや" reduce-motion: "UI、動き過ぎや、静かにしてや"
this-setting-is-this-device-only: "このデバイスのみ" this-setting-is-this-device-only: "このデバイスのみ"
use-os-default-emojis: "OSにもとから入っとる絵文字使う" use-os-default-emojis: "OSにもとから入っとる絵文字使う"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
do-not-use-in-production: "開発ビルドや。本番環境で使わんといて!知らんで!" do-not-use-in-production: "開発ビルドや。本番環境で使わんといて!知らんで!"
user-suspended: "このユーザーは凍結されています。" user-suspended: "このユーザーは凍結されています。"
is-remote-user: "このユーザー情報はコピーです。" is-remote-user: "このユーザー情報はコピーです。"
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
sensitive: "見せたらあかん" sensitive: "見せたらあかん"
click-to-show: "押してみ、見せたるわ" click-to-show: "押してみ、見せたるわ"
common/views/components/theme.vue: common/views/components/theme.vue:
theme: "テーマ"
light-theme: "ナイトゲームちゃう時のテーマどないする?" light-theme: "ナイトゲームちゃう時のテーマどないする?"
dark-theme: "ナイトゲームの時のテーマどないする?" dark-theme: "ナイトゲームの時のテーマどないする?"
light-themes: "デイゲーム" light-themes: "デイゲーム"
@ -276,6 +281,7 @@ common/views/components/theme.vue:
base-theme: "この色が背景や!" base-theme: "この色が背景や!"
base-theme-light: "Light" base-theme-light: "Light"
base-theme-dark: "Dark" base-theme-dark: "Dark"
find-more-theme: "その他のテーマを入手"
theme-name: "テーマ名" theme-name: "テーマ名"
preview-created-theme: "試してみる" preview-created-theme: "試してみる"
invalid-theme: "このテーマあかんわ、なんか間違うとる" invalid-theme: "このテーマあかんわ、なんか間違うとる"
@ -331,6 +337,7 @@ common/views/components/nav.vue:
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "メンション" mention: "メンション"
detail: "もっと" detail: "もっと"
copy-content: "内容をコピー"
copy-link: "リンクをコピー" copy-link: "リンクをコピー"
favorite: "お気に入り" favorite: "お気に入り"
unfavorite: "お気に入りやめる" unfavorite: "お気に入りやめる"
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "パスワードを入れてや" enter-password: "パスワードを入れてや"
authenticator: "まず、Google Authenticatorとかのをつこてるデバイスにインストールしてや:" authenticator: "まず、Google Authenticatorとかのをつこてるデバイスにインストールしてや:"
howtoinstall: "インストール方法はここやで" howtoinstall: "インストール方法はここやで"
token: "トークン"
scan: "んで、ここに出とるQRコードをスキャンしてな:" scan: "んで、ここに出とるQRコードをスキャンしてな:"
done: "最後にデバイスに表示されとるトークンを入力してな:" done: "最後にデバイスに表示されとるトークンを入力してな:"
submit: "送信" submit: "送信"
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
notification-position: "通知どこ見せる?" notification-position: "通知どこ見せる?"
notification-position-bottom: "ミナミの方" notification-position-bottom: "ミナミの方"
notification-position-top: "キタの方" notification-position-top: "キタの方"
theme: "テーマ"
behavior: "動き" behavior: "動き"
fetch-on-scroll: "スクロールしたらもっと見せてや" fetch-on-scroll: "スクロールしたらもっと見せてや"
note-visibility: "投稿の公開範囲" note-visibility: "投稿の公開範囲"

View File

@ -109,7 +109,7 @@ common:
my-token-regenerated: "당신의 토큰이 업데이트되었으므로 로그아웃합니다." my-token-regenerated: "당신의 토큰이 업데이트되었으므로 로그아웃합니다."
i-like-sushi: "저는 (푸딩보다 차라리) 초밥이 좋아요" i-like-sushi: "저는 (푸딩보다 차라리) 초밥이 좋아요"
show-reversi-board-labels: "리버시 보드의 행과 열 레이블을 표시" show-reversi-board-labels: "리버시 보드의 행과 열 레이블을 표시"
use-white-black-reversi-stones: "리버시에 흑백 돌을 사용" use-avatar-reversi-stones: "리버시의 돌로 아바타를 사용"
verified-user: "공식 계정" verified-user: "공식 계정"
disable-animated-mfm: "글의 문자 애니메이션을 비활성화" disable-animated-mfm: "글의 문자 애니메이션을 비활성화"
suggest-recent-hashtags: "최근 해시태그를 글 작성란에 표시" suggest-recent-hashtags: "최근 해시태그를 글 작성란에 표시"
@ -120,6 +120,10 @@ common:
reduce-motion: "UI의 애니메이션 줄이기" reduce-motion: "UI의 애니메이션 줄이기"
this-setting-is-this-device-only: "이 장치만" this-setting-is-this-device-only: "이 장치만"
use-os-default-emojis: "운영체제의 기본 이모지 사용" use-os-default-emojis: "운영체제의 기본 이모지 사용"
line-width: "선 두께"
line-width-thin: "얇음"
line-width-normal: "보통"
line-width-thick: "두꺼움"
do-not-use-in-production: "이것은 개발 빌드입니다. 프로덕션 환경에서 사용하지 마십시오." do-not-use-in-production: "이것은 개발 빌드입니다. 프로덕션 환경에서 사용하지 마십시오."
user-suspended: "이 사용자는 정지된 상태입니다." user-suspended: "이 사용자는 정지된 상태입니다."
is-remote-user: "이 유저 정보는 복사본입니다." is-remote-user: "이 유저 정보는 복사본입니다."
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
sensitive: "열람주의" sensitive: "열람주의"
click-to-show: "클릭하여 표시" click-to-show: "클릭하여 표시"
common/views/components/theme.vue: common/views/components/theme.vue:
theme: "테마"
light-theme: "다크 모드가 아닐 때 사용하는 테마" light-theme: "다크 모드가 아닐 때 사용하는 테마"
dark-theme: "다크 모드일 때 사용하는 테마" dark-theme: "다크 모드일 때 사용하는 테마"
light-themes: "밝은 테마" light-themes: "밝은 테마"
@ -276,6 +281,7 @@ common/views/components/theme.vue:
base-theme: "기본 테마" base-theme: "기본 테마"
base-theme-light: "밝음" base-theme-light: "밝음"
base-theme-dark: "어두움" base-theme-dark: "어두움"
find-more-theme: "그 외 테마 찾아보기"
theme-name: "테마명" theme-name: "테마명"
preview-created-theme: "미리보기" preview-created-theme: "미리보기"
invalid-theme: "테마가 올바르지 않습니다." invalid-theme: "테마가 올바르지 않습니다."
@ -331,6 +337,7 @@ common/views/components/nav.vue:
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "멘션" mention: "멘션"
detail: "상세" detail: "상세"
copy-content: "내용 복사"
copy-link: "링크 복사" copy-link: "링크 복사"
favorite: "이 노트 즐겨찾기" favorite: "이 노트 즐겨찾기"
unfavorite: "즐겨찾기에서 제거" unfavorite: "즐겨찾기에서 제거"
@ -469,7 +476,7 @@ common/views/components/profile-editor.vue:
is-bot: "이 계정은 Bot입니다" is-bot: "이 계정은 Bot입니다"
is-locked: "팔로우를 수동으로 승인" is-locked: "팔로우를 수동으로 승인"
careful-bot: "Bot의 팔로우만 수동으로 승인" careful-bot: "Bot의 팔로우만 수동으로 승인"
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する" auto-accept-followed: "팔로우중인 사용자로부터의 팔로우를 자동으로 승인"
advanced: "기타" advanced: "기타"
privacy: "프라이버시" privacy: "프라이버시"
save: "저장" save: "저장"
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "비밀번호를 입력하여 주십시오" enter-password: "비밀번호를 입력하여 주십시오"
authenticator: "먼저, 가지고 계신 장치에 Google Authenticator를 설치해야 합니다:" authenticator: "먼저, 가지고 계신 장치에 Google Authenticator를 설치해야 합니다:"
howtoinstall: "설치 방법은 여기에 있습니다" howtoinstall: "설치 방법은 여기에 있습니다"
token: "토큰"
scan: "다음으로 표시되어 있는 QR 코드를 스캔합니다:" scan: "다음으로 표시되어 있는 QR 코드를 스캔합니다:"
done: "사용중이신 장치에 표시된 토큰을 입력해주시면 마무리됩니다:" done: "사용중이신 장치에 표시된 토큰을 입력해주시면 마무리됩니다:"
submit: "완료" submit: "완료"
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
notification-position: "알림 표시" notification-position: "알림 표시"
notification-position-bottom: "아래" notification-position-bottom: "아래"
notification-position-top: "위" notification-position-top: "위"
theme: "테마"
behavior: "동작" behavior: "동작"
fetch-on-scroll: "스크롤하여 자동으로 불러오기" fetch-on-scroll: "스크롤하여 자동으로 불러오기"
note-visibility: "게시물의 공개 범위" note-visibility: "게시물의 공개 범위"

View File

@ -109,7 +109,7 @@ common:
my-token-regenerated: "Je sleutel is gegenereerd; je wordt nu uitgelogd." my-token-regenerated: "Je sleutel is gegenereerd; je wordt nu uitgelogd."
i-like-sushi: "私は(プリンよりむしろ)寿司が好き" i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
use-white-black-reversi-stones: "リバーシに白黒の石を使う" use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "公式アカウント" verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする" disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -120,6 +120,10 @@ common:
reduce-motion: "UIの動きを減らす" reduce-motion: "UIの動きを減らす"
this-setting-is-this-device-only: "このデバイスのみ" this-setting-is-this-device-only: "このデバイスのみ"
use-os-default-emojis: "OS標準の絵文字を使用" use-os-default-emojis: "OS標準の絵文字を使用"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。" do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
user-suspended: "このユーザーは凍結されています。" user-suspended: "このユーザーは凍結されています。"
is-remote-user: "このユーザー情報はコピーです。" is-remote-user: "このユーザー情報はコピーです。"
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
sensitive: "閲覧注意" sensitive: "閲覧注意"
click-to-show: "クリックして表示" click-to-show: "クリックして表示"
common/views/components/theme.vue: common/views/components/theme.vue:
theme: "テーマ"
light-theme: "非ダークモード時に使用するテーマ" light-theme: "非ダークモード時に使用するテーマ"
dark-theme: "ダークモード時に使用するテーマ" dark-theme: "ダークモード時に使用するテーマ"
light-themes: "明るいテーマ" light-themes: "明るいテーマ"
@ -276,6 +281,7 @@ common/views/components/theme.vue:
base-theme: "ベーステーマ" base-theme: "ベーステーマ"
base-theme-light: "Light" base-theme-light: "Light"
base-theme-dark: "Dark" base-theme-dark: "Dark"
find-more-theme: "その他のテーマを入手"
theme-name: "テーマ名" theme-name: "テーマ名"
preview-created-theme: "プレビュー" preview-created-theme: "プレビュー"
invalid-theme: "テーマが正しくありません。" invalid-theme: "テーマが正しくありません。"
@ -331,6 +337,7 @@ common/views/components/nav.vue:
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "メンション" mention: "メンション"
detail: "詳細" detail: "詳細"
copy-content: "内容をコピー"
copy-link: "リンクをコピー" copy-link: "リンクをコピー"
favorite: "Deze notitie toevoegen aan favorieten" favorite: "Deze notitie toevoegen aan favorieten"
unfavorite: "お気に入り解除" unfavorite: "お気に入り解除"
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "Voer het wachtwoord in" enter-password: "Voer het wachtwoord in"
authenticator: "Installeer eerst Google Authenticator op je apparaat:" authenticator: "Installeer eerst Google Authenticator op je apparaat:"
howtoinstall: "Hoe installeer ik dit?" howtoinstall: "Hoe installeer ik dit?"
token: "トークン"
scan: "Scan daarna de QR-code:" scan: "Scan daarna de QR-code:"
done: "Voer de op je apparaat getoonde sleutel in:" done: "Voer de op je apparaat getoonde sleutel in:"
submit: "Versturen" submit: "Versturen"
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
notification-position: "通知の表示" notification-position: "通知の表示"
notification-position-bottom: "下" notification-position-bottom: "下"
notification-position-top: "上" notification-position-top: "上"
theme: "テーマ"
behavior: "Gedrag" behavior: "Gedrag"
fetch-on-scroll: "Ophalen bij scrollen" fetch-on-scroll: "Ophalen bij scrollen"
note-visibility: "投稿の公開範囲" note-visibility: "投稿の公開範囲"

View File

@ -109,7 +109,7 @@ common:
my-token-regenerated: "Ditt synbol har blitt generert. Du vil nå bli utlogget." my-token-regenerated: "Ditt synbol har blitt generert. Du vil nå bli utlogget."
i-like-sushi: "私は(プリンよりむしろ)寿司が好き" i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
use-white-black-reversi-stones: "リバーシに白黒の石を使う" use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "公式アカウント" verified-user: "公式アカウント"
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする" disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -120,6 +120,10 @@ common:
reduce-motion: "UIの動きを減らす" reduce-motion: "UIの動きを減らす"
this-setting-is-this-device-only: "このデバイスのみ" this-setting-is-this-device-only: "このデバイスのみ"
use-os-default-emojis: "OS標準の絵文字を使用" use-os-default-emojis: "OS標準の絵文字を使用"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。" do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
user-suspended: "このユーザーは凍結されています。" user-suspended: "このユーザーは凍結されています。"
is-remote-user: "このユーザー情報はコピーです。" is-remote-user: "このユーザー情報はコピーです。"
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
sensitive: "Sensitivt innhold" sensitive: "Sensitivt innhold"
click-to-show: "クリックして表示" click-to-show: "クリックして表示"
common/views/components/theme.vue: common/views/components/theme.vue:
theme: "テーマ"
light-theme: "非ダークモード時に使用するテーマ" light-theme: "非ダークモード時に使用するテーマ"
dark-theme: "ダークモード時に使用するテーマ" dark-theme: "ダークモード時に使用するテーマ"
light-themes: "明るいテーマ" light-themes: "明るいテーマ"
@ -276,6 +281,7 @@ common/views/components/theme.vue:
base-theme: "ベーステーマ" base-theme: "ベーステーマ"
base-theme-light: "Light" base-theme-light: "Light"
base-theme-dark: "Mørk" base-theme-dark: "Mørk"
find-more-theme: "その他のテーマを入手"
theme-name: "Tema navn" theme-name: "Tema navn"
preview-created-theme: "プレビュー" preview-created-theme: "プレビュー"
invalid-theme: "テーマが正しくありません。" invalid-theme: "テーマが正しくありません。"
@ -331,6 +337,7 @@ common/views/components/nav.vue:
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "メンション" mention: "メンション"
detail: "Detaljer" detail: "Detaljer"
copy-content: "内容をコピー"
copy-link: "リンクをコピー" copy-link: "リンクをコピー"
favorite: "Merket som favoritt" favorite: "Merket som favoritt"
unfavorite: "お気に入り解除" unfavorite: "お気に入り解除"
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "パスワードを入力してください" enter-password: "パスワードを入力してください"
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:" authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
howtoinstall: "インストール方法はこちら" howtoinstall: "インストール方法はこちら"
token: "トークン"
scan: "次に、表示されているQRコードをスキャンします:" scan: "次に、表示されているQRコードをスキャンします:"
done: "お使いのデバイスに表示されているトークンを入力して完了します:" done: "お使いのデバイスに表示されているトークンを入力して完了します:"
submit: "Send" submit: "Send"
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
notification-position: "通知の表示" notification-position: "通知の表示"
notification-position-bottom: "Bunn" notification-position-bottom: "Bunn"
notification-position-top: "Topp" notification-position-top: "Topp"
theme: "Utseende"
behavior: "Oppførsel" behavior: "Oppførsel"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲" note-visibility: "投稿の公開範囲"

View File

@ -109,7 +109,7 @@ common:
my-token-regenerated: "Twój token został wygenerowany. Zostaniesz wylogowany." my-token-regenerated: "Twój token został wygenerowany. Zostaniesz wylogowany."
i-like-sushi: "Wolę sushi od puddingu" i-like-sushi: "Wolę sushi od puddingu"
show-reversi-board-labels: "Pokazuj podpisy wierszy i kolumn w Reversi" show-reversi-board-labels: "Pokazuj podpisy wierszy i kolumn w Reversi"
use-white-black-reversi-stones: "リバーシに白黒の石を使う" use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "Zweryfikowane konto" verified-user: "Zweryfikowane konto"
disable-animated-mfm: "Wyłącz animowany tekst we wpisach" disable-animated-mfm: "Wyłącz animowany tekst we wpisach"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -120,11 +120,15 @@ common:
reduce-motion: "Zredukuj ruch w UI" reduce-motion: "Zredukuj ruch w UI"
this-setting-is-this-device-only: "このデバイスのみ" this-setting-is-this-device-only: "このデバイスのみ"
use-os-default-emojis: "Użyj domyślnych Emoji systemowych" use-os-default-emojis: "Użyj domyślnych Emoji systemowych"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。" do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
user-suspended: "このユーザーは凍結されています。" user-suspended: "このユーザーは凍結されています。"
is-remote-user: "Informacje o użytkowniku są kopiowane." is-remote-user: "Informacje o użytkowniku są kopiowane."
is-remote-post: "この投稿情報はコピーです。" is-remote-post: "この投稿情報はコピーです。"
view-on-remote: "正確な情報を見る" view-on-remote: "Dla dopełnienia, zobacz to zdalnie."
renoted-by: "{user} udostępnił(a)" renoted-by: "{user} udostępnił(a)"
error: error:
title: "Coś poszło nie tak" title: "Coś poszło nie tak"
@ -257,10 +261,11 @@ common/views/components/connect-failed.troubleshooter.vue:
flush: "Wyczyść pamięć podręczną" flush: "Wyczyść pamięć podręczną"
set-version: "Określ wersję" set-version: "Określ wersję"
common/views/components/media-banner.vue: common/views/components/media-banner.vue:
sensitive: "閲覧注意" sensitive: "NSFW"
click-to-show: "クリックして表示" click-to-show: "Naciśnij aby wyświetlić"
common/views/components/theme.vue: common/views/components/theme.vue:
light-theme: "非ダークモード時に使用するテーマ" theme: "Motyw"
light-theme: "Motyw"
dark-theme: "ダークモード時に使用するテーマ" dark-theme: "ダークモード時に使用するテーマ"
light-themes: "Jasny Motyw" light-themes: "Jasny Motyw"
dark-themes: "Ciemny motyw" dark-themes: "Ciemny motyw"
@ -276,21 +281,22 @@ common/views/components/theme.vue:
base-theme: "Podstawowy motyw" base-theme: "Podstawowy motyw"
base-theme-light: "Jasny" base-theme-light: "Jasny"
base-theme-dark: "Ciemny" base-theme-dark: "Ciemny"
find-more-theme: "Odkryj więcej motywów"
theme-name: "Nazwa motywu" theme-name: "Nazwa motywu"
preview-created-theme: "Pokaż podgląd" preview-created-theme: "Pokaż podgląd"
invalid-theme: "テーマが正しくありません。" invalid-theme: "Nieprawidłowy motyw"
already-installed: "Ten motyw jest już zainstalowany" already-installed: "Ten motyw jest już zainstalowany"
saved: "Zapisano" saved: "Zapisano"
manage-themes: "Zarządzanie motywami" manage-themes: "Zarządzanie motywami"
builtin-themes: "Standardowe motywy" builtin-themes: "Standardowe motywy"
my-themes: "Moje motywy" my-themes: "Moje motywy"
installed-themes: "Zainstalowane motywy" installed-themes: "Zainstalowane motywy"
select-theme: "テーマを選択してください" select-theme: "Wybierz motyw"
uninstall: "Odinstaluj" uninstall: "Odinstaluj"
uninstalled: "\"{}\" został odinstalowany" uninstalled: "\"{}\" został odinstalowany"
author: "Author" author: "Author"
desc: "Opis" desc: "Opis"
export: "エクスポート" export: "Eksportuj"
import: "Importuj" import: "Importuj"
import-by-code: "lub wklej kod" import-by-code: "lub wklej kod"
theme-name-required: "Nazwa motywu jest obowiązkowa." theme-name-required: "Nazwa motywu jest obowiązkowa."
@ -299,7 +305,7 @@ common/views/components/cw-button.vue:
show: "Pokaż więcej" show: "Pokaż więcej"
chars: "{count} znaków" chars: "{count} znaków"
files: "{count} plików" files: "{count} plików"
poll: "アンケート" poll: "Ankieta"
common/views/components/messaging.vue: common/views/components/messaging.vue:
search-user: "Znajdź użytkownika" search-user: "Znajdź użytkownika"
you: "Ty" you: "Ty"
@ -329,8 +335,9 @@ common/views/components/nav.vue:
develop: "Autorzy" develop: "Autorzy"
feedback: "Podziel się opinią" feedback: "Podziel się opinią"
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "メンション" mention: "Wspomnij"
detail: "Szczegóły" detail: "Szczegóły"
copy-content: "内容をコピー"
copy-link: "Skopiuj adres" copy-link: "Skopiuj adres"
favorite: "Dodaj do ulubionych" favorite: "Dodaj do ulubionych"
unfavorite: "Usuń z ulubionych" unfavorite: "Usuń z ulubionych"
@ -406,7 +413,7 @@ common/views/components/stream-indicator.vue:
reconnecting: "Ponowne łączenie" reconnecting: "Ponowne łączenie"
connected: "Połączono" connected: "Połączono"
common/views/components/notification-settings.vue: common/views/components/notification-settings.vue:
title: "通知" title: "Powiadomienia"
mark-as-read-all-notifications: "すべての通知を既読にする" mark-as-read-all-notifications: "すべての通知を既読にする"
mark-as-read-all-unread-notes: "すべての投稿を既読にする" mark-as-read-all-unread-notes: "すべての投稿を既読にする"
mark-as-read-all-talk-messages: "すべてのトークを既読にする" mark-as-read-all-talk-messages: "すべてのトークを既読にする"
@ -415,7 +422,7 @@ common/views/components/notification-settings.vue:
common/views/components/integration-settings.vue: common/views/components/integration-settings.vue:
title: "サービス連携" title: "サービス連携"
connect: "Połącz" connect: "Połącz"
disconnect: "切断する" disconnect: "Rozłącz"
connected-to: "次のアカウントに接続されています" connected-to: "次のアカウントに接続されています"
common/views/components/github-setting.vue: common/views/components/github-setting.vue:
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。" description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
@ -546,7 +553,7 @@ common/views/pages/follow.vue:
following: "Śledzisz" following: "Śledzisz"
follow: "Śledź" follow: "Śledź"
request-pending: "Oczekiwanie na pozwolenie" request-pending: "Oczekiwanie na pozwolenie"
follow-processing: "フォロー処理中" follow-processing: "Przetwarzanie śledzenia"
follow-request: "Poproś o śledzenie" follow-request: "Poproś o śledzenie"
desktop: desktop:
banner-crop-title: "バナーとして表示する部分を選択" banner-crop-title: "バナーとして表示する部分を選択"
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "Wprowadź hasło" enter-password: "Wprowadź hasło"
authenticator: "Na początek musisz zainstalować Google Authenticator na swoim urządzeniu:" authenticator: "Na początek musisz zainstalować Google Authenticator na swoim urządzeniu:"
howtoinstall: "Jak zainstalować" howtoinstall: "Jak zainstalować"
token: "トークン"
scan: "Później, zeskanuje ten kod QR:" scan: "Później, zeskanuje ten kod QR:"
done: "Wprowadź token wyświetlony na Twoim urządzeniu:" done: "Wprowadź token wyświetlony na Twoim urządzeniu:"
submit: "Wyślij" submit: "Wyślij"
@ -901,7 +909,7 @@ desktop/views/components/sub-note-content.vue:
poll: "Ankieta" poll: "Ankieta"
desktop/views/components/settings.tags.vue: desktop/views/components/settings.tags.vue:
title: "Tagi" title: "Tagi"
query: "クエリ (省略可)" query: "Zapytanie (opcjonalne)"
add: "Dodaj" add: "Dodaj"
save: "Zapisz" save: "Zapisz"
desktop/views/components/taskmanager.vue: desktop/views/components/taskmanager.vue:
@ -1223,7 +1231,7 @@ desktop/views/pages/user/user.header.vue:
posts: "Wpisy" posts: "Wpisy"
following: "Śledzeni" following: "Śledzeni"
followers: "Śledzący" followers: "Śledzący"
mention: "メンション" mention: "Wspomnij"
is-bot: "To konto jest botem" is-bot: "To konto jest botem"
years-old: "{age} lat" years-old: "{age} lat"
year: "/" year: "/"
@ -1233,7 +1241,7 @@ desktop/views/pages/user/user.timeline.vue:
default: "Wpisy" default: "Wpisy"
with-replies: "Wpisy i odpowiedzi" with-replies: "Wpisy i odpowiedzi"
with-media: "Multimedia" with-media: "Multimedia"
my-posts: "私の投稿" my-posts: "Moje wpisy"
empty: "Ten użytkownik nie umieścił jeszcze niczego." empty: "Ten użytkownik nie umieścił jeszcze niczego."
desktop/views/widgets/messaging.vue: desktop/views/widgets/messaging.vue:
title: "Wiadomości" title: "Wiadomości"
@ -1297,7 +1305,7 @@ common/views/components/follow-button.vue:
following: "フォロー中" following: "フォロー中"
follow: "Śledź" follow: "Śledź"
request-pending: "フォロー許可待ち" request-pending: "フォロー許可待ち"
follow-processing: "フォロー処理中" follow-processing: "Przetwarzanie"
follow-request: "Poproś o śledzenie" follow-request: "Poproś o śledzenie"
mobile/views/components/friends-maker.vue: mobile/views/components/friends-maker.vue:
title: "Zacznij śledzić ludzi takich jak Ty" title: "Zacznij śledzić ludzi takich jak Ty"
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
notification-position: "通知の表示" notification-position: "通知の表示"
notification-position-bottom: "Dół" notification-position-bottom: "Dół"
notification-position-top: "Góra" notification-position-top: "Góra"
theme: "Motyw"
behavior: "Zachowanie" behavior: "Zachowanie"
fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół" fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół"
note-visibility: "Widoczność wpisów" note-visibility: "Widoczność wpisów"
@ -1518,7 +1525,7 @@ deck/deck.user-column.vue:
posts: "Wpisy" posts: "Wpisy"
following: "Śledzeni" following: "Śledzeni"
followers: "Śledzący" followers: "Śledzący"
mention: "メンション" mention: "Wspomnij"
images: "Zdjęcia" images: "Zdjęcia"
activity: "Aktywność" activity: "Aktywność"
timeline: "Oś czasu" timeline: "Oś czasu"

View File

@ -109,7 +109,7 @@ common:
my-token-regenerated: "Seu token foi recriado, portanto você foi deslogado." my-token-regenerated: "Seu token foi recriado, portanto você foi deslogado."
i-like-sushi: "Eu prefiro sushi a pudim" i-like-sushi: "Eu prefiro sushi a pudim"
show-reversi-board-labels: "Mostrar etiquetas de colunas e linhas no Reversi" show-reversi-board-labels: "Mostrar etiquetas de colunas e linhas no Reversi"
use-white-black-reversi-stones: "リバーシに白黒の石を使う" use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "Conta verificada" verified-user: "Conta verificada"
disable-animated-mfm: "Desativar texto animado nas publicações" disable-animated-mfm: "Desativar texto animado nas publicações"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -120,6 +120,10 @@ common:
reduce-motion: "UIの動きを減らす" reduce-motion: "UIの動きを減らす"
this-setting-is-this-device-only: "このデバイスのみ" this-setting-is-this-device-only: "このデバイスのみ"
use-os-default-emojis: "OS標準の絵文字を使用" use-os-default-emojis: "OS標準の絵文字を使用"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。" do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
user-suspended: "このユーザーは凍結されています。" user-suspended: "このユーザーは凍結されています。"
is-remote-user: "このユーザー情報はコピーです。" is-remote-user: "このユーザー情報はコピーです。"
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
sensitive: "閲覧注意" sensitive: "閲覧注意"
click-to-show: "クリックして表示" click-to-show: "クリックして表示"
common/views/components/theme.vue: common/views/components/theme.vue:
theme: "テーマ"
light-theme: "非ダークモード時に使用するテーマ" light-theme: "非ダークモード時に使用するテーマ"
dark-theme: "ダークモード時に使用するテーマ" dark-theme: "ダークモード時に使用するテーマ"
light-themes: "明るいテーマ" light-themes: "明るいテーマ"
@ -276,6 +281,7 @@ common/views/components/theme.vue:
base-theme: "ベーステーマ" base-theme: "ベーステーマ"
base-theme-light: "Light" base-theme-light: "Light"
base-theme-dark: "Dark" base-theme-dark: "Dark"
find-more-theme: "その他のテーマを入手"
theme-name: "テーマ名" theme-name: "テーマ名"
preview-created-theme: "プレビュー" preview-created-theme: "プレビュー"
invalid-theme: "テーマが正しくありません。" invalid-theme: "テーマが正しくありません。"
@ -331,6 +337,7 @@ common/views/components/nav.vue:
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "メンション" mention: "メンション"
detail: "詳細" detail: "詳細"
copy-content: "内容をコピー"
copy-link: "リンクをコピー" copy-link: "リンクをコピー"
favorite: "お気に入り" favorite: "お気に入り"
unfavorite: "お気に入り解除" unfavorite: "お気に入り解除"
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "パスワードを入力してください" enter-password: "パスワードを入力してください"
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:" authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
howtoinstall: "インストール方法はこちら" howtoinstall: "インストール方法はこちら"
token: "トークン"
scan: "次に、表示されているQRコードをスキャンします:" scan: "次に、表示されているQRコードをスキャンします:"
done: "お使いのデバイスに表示されているトークンを入力して完了します:" done: "お使いのデバイスに表示されているトークンを入力して完了します:"
submit: "完了" submit: "完了"
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
notification-position: "通知の表示" notification-position: "通知の表示"
notification-position-bottom: "下" notification-position-bottom: "下"
notification-position-top: "上" notification-position-top: "上"
theme: "テーマ"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲" note-visibility: "投稿の公開範囲"

View File

@ -109,7 +109,7 @@ common:
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。" my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
i-like-sushi: "私は(プリンよりむしろ)寿司が好き" i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示" show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
use-white-black-reversi-stones: "リバーシに白黒の石を使う" use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "公式アカウント" verified-user: "公式アカウント"
disable-animated-mfm: "Отключить анимированный текст в постах" disable-animated-mfm: "Отключить анимированный текст в постах"
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する" suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
@ -120,6 +120,10 @@ common:
reduce-motion: "Уменьшить движение в интерфейсе" reduce-motion: "Уменьшить движение в интерфейсе"
this-setting-is-this-device-only: "Только для этого устройства" this-setting-is-this-device-only: "Только для этого устройства"
use-os-default-emojis: "Использовать стандартные Emoji из ОС" use-os-default-emojis: "Использовать стандартные Emoji из ОС"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
do-not-use-in-production: "Эта сборка для разработчиков. Не используйте в продакшне." do-not-use-in-production: "Эта сборка для разработчиков. Не используйте в продакшне."
user-suspended: "このユーザーは凍結されています。" user-suspended: "このユーザーは凍結されています。"
is-remote-user: "このユーザー情報はコピーです。" is-remote-user: "このユーザー情報はコピーです。"
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
sensitive: "閲覧注意" sensitive: "閲覧注意"
click-to-show: "クリックして表示" click-to-show: "クリックして表示"
common/views/components/theme.vue: common/views/components/theme.vue:
theme: "テーマ"
light-theme: "非ダークモード時に使用するテーマ" light-theme: "非ダークモード時に使用するテーマ"
dark-theme: "ダークモード時に使用するテーマ" dark-theme: "ダークモード時に使用するテーマ"
light-themes: "明るいテーマ" light-themes: "明るいテーマ"
@ -276,6 +281,7 @@ common/views/components/theme.vue:
base-theme: "ベーステーマ" base-theme: "ベーステーマ"
base-theme-light: "Light" base-theme-light: "Light"
base-theme-dark: "Dark" base-theme-dark: "Dark"
find-more-theme: "その他のテーマを入手"
theme-name: "テーマ名" theme-name: "テーマ名"
preview-created-theme: "プレビュー" preview-created-theme: "プレビュー"
invalid-theme: "テーマが正しくありません。" invalid-theme: "テーマが正しくありません。"
@ -331,6 +337,7 @@ common/views/components/nav.vue:
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "メンション" mention: "メンション"
detail: "詳細" detail: "詳細"
copy-content: "内容をコピー"
copy-link: "リンクをコピー" copy-link: "リンクをコピー"
favorite: "お気に入り" favorite: "お気に入り"
unfavorite: "お気に入り解除" unfavorite: "お気に入り解除"
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "パスワードを入力してください" enter-password: "パスワードを入力してください"
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:" authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
howtoinstall: "インストール方法はこちら" howtoinstall: "インストール方法はこちら"
token: "トークン"
scan: "次に、表示されているQRコードをスキャンします:" scan: "次に、表示されているQRコードをスキャンします:"
done: "お使いのデバイスに表示されているトークンを入力して完了します:" done: "お使いのデバイスに表示されているトークンを入力して完了します:"
submit: "完了" submit: "完了"
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
notification-position: "通知の表示" notification-position: "通知の表示"
notification-position-bottom: "下" notification-position-bottom: "下"
notification-position-top: "上" notification-position-top: "上"
theme: "テーマ"
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
note-visibility: "投稿の公開範囲" note-visibility: "投稿の公開範囲"

View File

@ -109,7 +109,7 @@ common:
my-token-regenerated: "您的 Token 已被重置, 您将自动登出。" my-token-regenerated: "您的 Token 已被重置, 您将自动登出。"
i-like-sushi: "相比于布丁来说, 我更喜欢寿司。" i-like-sushi: "相比于布丁来说, 我更喜欢寿司。"
show-reversi-board-labels: "在 Reversi 中显示行和列表签" show-reversi-board-labels: "在 Reversi 中显示行和列表签"
use-white-black-reversi-stones: "リバーシに白黒の石を使う" use-avatar-reversi-stones: "リバーシの石にアバターを使う"
verified-user: "认证用户" verified-user: "认证用户"
disable-animated-mfm: "在帖子中禁用动画文本" disable-animated-mfm: "在帖子中禁用动画文本"
suggest-recent-hashtags: "在帖子表单上显示最近流行的主题标签" suggest-recent-hashtags: "在帖子表单上显示最近流行的主题标签"
@ -120,6 +120,10 @@ common:
reduce-motion: "减弱UI中的动画效果" reduce-motion: "减弱UI中的动画效果"
this-setting-is-this-device-only: "设置仅在本设备中生效" this-setting-is-this-device-only: "设置仅在本设备中生效"
use-os-default-emojis: "使用设备系统默认的 emojis" use-os-default-emojis: "使用设备系统默认的 emojis"
line-width: "線の太さ"
line-width-thin: "細い"
line-width-normal: "普通"
line-width-thick: "太い"
do-not-use-in-production: "这是一个开发者测试版. 请勿在生产环境中使用." do-not-use-in-production: "这是一个开发者测试版. 请勿在生产环境中使用."
user-suspended: "このユーザーは凍結されています。" user-suspended: "このユーザーは凍結されています。"
is-remote-user: "该用户的信息已被复制." is-remote-user: "该用户的信息已被复制."
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
sensitive: "阅读注意" sensitive: "阅读注意"
click-to-show: "点击以显示" click-to-show: "点击以显示"
common/views/components/theme.vue: common/views/components/theme.vue:
theme: "テーマ"
light-theme: "主题" light-theme: "主题"
dark-theme: "黑暗模式主题" dark-theme: "黑暗模式主题"
light-themes: "明亮主题" light-themes: "明亮主题"
@ -276,6 +281,7 @@ common/views/components/theme.vue:
base-theme: "基础主题" base-theme: "基础主题"
base-theme-light: "亮" base-theme-light: "亮"
base-theme-dark: "暗" base-theme-dark: "暗"
find-more-theme: "その他のテーマを入手"
theme-name: "主题名称" theme-name: "主题名称"
preview-created-theme: "预览" preview-created-theme: "预览"
invalid-theme: "无效主题" invalid-theme: "无效主题"
@ -331,6 +337,7 @@ common/views/components/nav.vue:
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
mention: "メンション" mention: "メンション"
detail: "详细信息" detail: "详细信息"
copy-content: "内容をコピー"
copy-link: "复制链接" copy-link: "复制链接"
favorite: "收藏这个投稿" favorite: "收藏这个投稿"
unfavorite: "取消收藏" unfavorite: "取消收藏"
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
enter-password: "请输入您的密码" enter-password: "请输入您的密码"
authenticator: "首先,您需要在设备上安装 Google Authenticator" authenticator: "首先,您需要在设备上安装 Google Authenticator"
howtoinstall: "怎样安装" howtoinstall: "怎样安装"
token: "トークン"
scan: "然后,扫描二维码:" scan: "然后,扫描二维码:"
done: "请输入显示在您设备上的密钥:" done: "请输入显示在您设备上的密钥:"
submit: "提交" submit: "提交"
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
notification-position: "通知形式" notification-position: "通知形式"
notification-position-bottom: "底部" notification-position-bottom: "底部"
notification-position-top: "顶部" notification-position-top: "顶部"
theme: "主题"
behavior: "动作" behavior: "动作"
fetch-on-scroll: "滚动无限加载" fetch-on-scroll: "滚动无限加载"
note-visibility: "帖子可见性" note-visibility: "帖子可见性"

View File

@ -1,8 +1,8 @@
{ {
"name": "misskey", "name": "misskey",
"author": "syuilo <i@syuilo.com>", "author": "syuilo <i@syuilo.com>",
"version": "10.70.0", "version": "10.75.0",
"clientVersion": "2.0.13176", "clientVersion": "2.0.13368",
"codename": "nighthike", "codename": "nighthike",
"main": "./built/index.js", "main": "./built/index.js",
"private": true, "private": true,
@ -20,21 +20,21 @@
"format": "gulp format" "format": "gulp format"
}, },
"dependencies": { "dependencies": {
"@fortawesome/fontawesome-svg-core": "1.2.8", "@fortawesome/fontawesome-svg-core": "1.2.12",
"@fortawesome/free-brands-svg-icons": "5.6.0", "@fortawesome/free-brands-svg-icons": "5.6.3",
"@fortawesome/free-regular-svg-icons": "5.5.0", "@fortawesome/free-regular-svg-icons": "5.5.0",
"@fortawesome/free-solid-svg-icons": "5.6.3", "@fortawesome/free-solid-svg-icons": "5.6.3",
"@fortawesome/vue-fontawesome": "0.1.2", "@fortawesome/vue-fontawesome": "0.1.2",
"@koa/cors": "2.2.2", "@koa/cors": "2.2.3",
"@prezzemolo/rap": "0.1.2", "@prezzemolo/rap": "0.1.2",
"@prezzemolo/zip": "0.0.3", "@prezzemolo/zip": "0.0.3",
"@types/bcryptjs": "2.4.2", "@types/bcryptjs": "2.4.2",
"@types/chai-http": "3.0.5", "@types/chai-http": "3.0.5",
"@types/dateformat": "1.0.1", "@types/dateformat": "3.0.0",
"@types/debug": "0.0.31", "@types/debug": "0.0.31",
"@types/deep-equal": "1.0.1", "@types/deep-equal": "1.0.1",
"@types/double-ended-queue": "2.1.0", "@types/double-ended-queue": "2.1.0",
"@types/elasticsearch": "5.0.29", "@types/elasticsearch": "5.0.30",
"@types/file-type": "10.6.0", "@types/file-type": "10.6.0",
"@types/gulp": "3.8.36", "@types/gulp": "3.8.36",
"@types/gulp-mocha": "0.0.32", "@types/gulp-mocha": "0.0.32",
@ -46,7 +46,7 @@
"@types/is-url": "1.2.28", "@types/is-url": "1.2.28",
"@types/js-yaml": "3.11.4", "@types/js-yaml": "3.11.4",
"@types/katex": "0.5.0", "@types/katex": "0.5.0",
"@types/koa": "2.0.47", "@types/koa": "2.0.48",
"@types/koa-bodyparser": "5.0.2", "@types/koa-bodyparser": "5.0.2",
"@types/koa-compress": "2.0.8", "@types/koa-compress": "2.0.8",
"@types/koa-favicon": "2.0.19", "@types/koa-favicon": "2.0.19",
@ -62,7 +62,7 @@
"@types/mocha": "5.2.5", "@types/mocha": "5.2.5",
"@types/mongodb": "3.1.14", "@types/mongodb": "3.1.14",
"@types/ms": "0.7.30", "@types/ms": "0.7.30",
"@types/node": "10.12.10", "@types/node": "10.12.18",
"@types/nodemailer": "4.6.5", "@types/nodemailer": "4.6.5",
"@types/oauth": "0.9.1", "@types/oauth": "0.9.1",
"@types/parsimmon": "1.10.0", "@types/parsimmon": "1.10.0",
@ -70,13 +70,13 @@
"@types/pug": "2.0.4", "@types/pug": "2.0.4",
"@types/qrcode": "1.3.0", "@types/qrcode": "1.3.0",
"@types/ratelimiter": "2.1.28", "@types/ratelimiter": "2.1.28",
"@types/redis": "2.8.8", "@types/redis": "2.8.10",
"@types/request": "2.48.1", "@types/request": "2.48.1",
"@types/request-promise-native": "1.0.15", "@types/request-promise-native": "1.0.15",
"@types/rimraf": "2.0.2", "@types/rimraf": "2.0.2",
"@types/seedrandom": "2.4.27", "@types/seedrandom": "2.4.27",
"@types/sharp": "0.21.0", "@types/sharp": "0.21.0",
"@types/showdown": "1.7.5", "@types/showdown": "1.9.0",
"@types/speakeasy": "2.0.3", "@types/speakeasy": "2.0.3",
"@types/systeminformation": "3.23.1", "@types/systeminformation": "3.23.1",
"@types/tinycolor2": "1.4.1", "@types/tinycolor2": "1.4.1",
@ -87,7 +87,7 @@
"@types/websocket": "0.0.40", "@types/websocket": "0.0.40",
"@types/ws": "6.0.1", "@types/ws": "6.0.1",
"animejs": "2.2.0", "animejs": "2.2.0",
"apexcharts": "2.4.2", "apexcharts": "2.5.1",
"autobind-decorator": "2.4.0", "autobind-decorator": "2.4.0",
"autosize": "4.0.2", "autosize": "4.0.2",
"autwh": "0.1.0", "autwh": "0.1.0",
@ -111,12 +111,12 @@
"elasticsearch": "15.2.0", "elasticsearch": "15.2.0",
"emojilib": "2.4.0", "emojilib": "2.4.0",
"escape-regexp": "0.0.1", "escape-regexp": "0.0.1",
"eslint": "5.8.0", "eslint": "5.11.1",
"eslint-plugin-vue": "4.7.1", "eslint-plugin-vue": "5.0.0",
"eventemitter3": "3.1.0", "eventemitter3": "3.1.0",
"feed": "2.0.2", "feed": "2.0.2",
"file-loader": "2.0.0", "file-loader": "2.0.0",
"file-type": "10.6.0", "file-type": "10.7.0",
"fuckadblock": "3.2.1", "fuckadblock": "3.2.1",
"gulp": "3.9.1", "gulp": "3.9.1",
"gulp-cssnano": "2.1.3", "gulp-cssnano": "2.1.3",
@ -155,18 +155,19 @@
"koa-slow": "2.1.0", "koa-slow": "2.1.0",
"koa-views": "6.1.4", "koa-views": "6.1.4",
"langmap": "0.0.16", "langmap": "0.0.16",
"loader-utils": "1.1.0", "loader-utils": "1.2.3",
"lookup-dns-cache": "2.1.0",
"minio": "7.0.2", "minio": "7.0.2",
"mkdirp": "0.5.1", "mkdirp": "0.5.1",
"mocha": "5.2.0", "mocha": "5.2.0",
"moji": "0.5.1", "moji": "0.5.1",
"moment": "2.22.2", "moment": "2.23.0",
"mongodb": "3.1.10", "mongodb": "3.1.10",
"monk": "6.0.6", "monk": "6.0.6",
"ms": "2.1.1", "ms": "2.1.1",
"nan": "2.12.1", "nan": "2.12.1",
"nested-property": "0.0.7", "nested-property": "0.0.7",
"nodemailer": "4.7.0", "nodemailer": "5.0.0",
"nprogress": "0.2.0", "nprogress": "0.2.0",
"object-assign-deep": "0.4.0", "object-assign-deep": "0.4.0",
"on-build-webpack": "0.1.0", "on-build-webpack": "0.1.0",
@ -176,6 +177,7 @@
"portscanner": "2.2.0", "portscanner": "2.2.0",
"postcss-loader": "3.0.0", "postcss-loader": "3.0.0",
"progress-bar-webpack-plugin": "1.11.0", "progress-bar-webpack-plugin": "1.11.0",
"promise-any": "0.2.0",
"promise-limit": "2.7.0", "promise-limit": "2.7.0",
"promise-sequential": "1.1.1", "promise-sequential": "1.1.1",
"pug": "2.0.3", "pug": "2.0.3",
@ -204,7 +206,7 @@
"summaly": "2.2.0", "summaly": "2.2.0",
"systeminformation": "3.52.2", "systeminformation": "3.52.2",
"syuilo-password-strength": "0.0.1", "syuilo-password-strength": "0.0.1",
"terser-webpack-plugin": "1.1.0", "terser-webpack-plugin": "1.2.1",
"textarea-caret": "3.1.0", "textarea-caret": "3.1.0",
"tinycolor2": "1.4.1", "tinycolor2": "1.4.1",
"tmp": "0.0.33", "tmp": "0.0.33",
@ -222,10 +224,10 @@
"vue-color": "2.7.0", "vue-color": "2.7.0",
"vue-content-loading": "1.5.3", "vue-content-loading": "1.5.3",
"vue-cropperjs": "3.0.0", "vue-cropperjs": "3.0.0",
"vue-i18n": "8.3.2", "vue-i18n": "8.6.0",
"vue-js-modal": "1.3.28", "vue-js-modal": "1.3.28",
"vue-loader": "15.4.2", "vue-loader": "15.4.2",
"vue-marquee-text-component": "1.1.0", "vue-marquee-text-component": "1.1.1",
"vue-router": "3.0.2", "vue-router": "3.0.2",
"vue-sequential-entrance": "1.1.3", "vue-sequential-entrance": "1.1.3",
"vue-style-loader": "4.1.2", "vue-style-loader": "4.1.2",
@ -237,7 +239,7 @@
"vuex-persistedstate": "2.5.4", "vuex-persistedstate": "2.5.4",
"web-push": "3.3.3", "web-push": "3.3.3",
"webfinger.js": "2.7.0", "webfinger.js": "2.7.0",
"webpack": "4.26.1", "webpack": "4.28.3",
"webpack-cli": "3.1.2", "webpack-cli": "3.1.2",
"websocket": "1.0.28", "websocket": "1.0.28",
"ws": "6.1.2", "ws": "6.1.2",

View File

@ -39,6 +39,7 @@
</div> </div>
</div> </div>
<div v-show="file._open"> <div v-show="file._open">
<ui-input readonly :value="file.url"></ui-input>
<ui-horizon-group> <ui-horizon-group>
<ui-button @click="toggleSensitive(file)" v-if="file.isSensitive"><fa :icon="faEye"/> {{ $t('unmark-as-sensitive') }}</ui-button> <ui-button @click="toggleSensitive(file)" v-if="file.isSensitive"><fa :icon="faEye"/> {{ $t('unmark-as-sensitive') }}</ui-button>
<ui-button @click="toggleSensitive(file)" v-else><fa :icon="faEyeSlash"/> {{ $t('mark-as-sensitive') }}</ui-button> <ui-button @click="toggleSensitive(file)" v-else><fa :icon="faEyeSlash"/> {{ $t('mark-as-sensitive') }}</ui-button>

View File

@ -6,6 +6,7 @@
<ui-input :value="host" readonly>{{ $t('host') }}</ui-input> <ui-input :value="host" readonly>{{ $t('host') }}</ui-input>
<ui-input v-model="name">{{ $t('instance-name') }}</ui-input> <ui-input v-model="name">{{ $t('instance-name') }}</ui-input>
<ui-textarea v-model="description">{{ $t('instance-description') }}</ui-textarea> <ui-textarea v-model="description">{{ $t('instance-description') }}</ui-textarea>
<ui-input v-model="mascotImageUrl"><i slot="icon"><fa icon="link"/></i>{{ $t('logo-url') }}</ui-input>
<ui-input v-model="bannerUrl"><i slot="icon"><fa icon="link"/></i>{{ $t('banner-url') }}</ui-input> <ui-input v-model="bannerUrl"><i slot="icon"><fa icon="link"/></i>{{ $t('banner-url') }}</ui-input>
<ui-input v-model="errorImageUrl"><i slot="icon"><fa icon="link"/></i>{{ $t('error-image-url') }}</ui-input> <ui-input v-model="errorImageUrl"><i slot="icon"><fa icon="link"/></i>{{ $t('error-image-url') }}</ui-input>
<ui-input v-model="languages"><i slot="icon"><fa icon="language"/></i>{{ $t('languages') }}<span slot="desc">{{ $t('languages-desc') }}</span></ui-input> <ui-input v-model="languages"><i slot="icon"><fa icon="language"/></i>{{ $t('languages') }}<span slot="desc">{{ $t('languages-desc') }}</span></ui-input>
@ -53,7 +54,7 @@
</ui-horizon-group> </ui-horizon-group>
<ui-horizon-group inputs> <ui-horizon-group inputs>
<ui-input v-model="smtpUser" :disabled="!enableEmail">{{ $t('smtp-user') }}</ui-input> <ui-input v-model="smtpUser" :disabled="!enableEmail">{{ $t('smtp-user') }}</ui-input>
<ui-input v-model="smtpPass" :disabled="!enableEmail">{{ $t('smtp-pass') }}</ui-input> <ui-input v-model="smtpPass" type="password" :withPasswordToggle="true" :disabled="!enableEmail">{{ $t('smtp-pass') }}</ui-input>
</ui-horizon-group> </ui-horizon-group>
<ui-switch v-model="smtpSecure" :disabled="!enableEmail">{{ $t('smtp-secure') }}<span slot="desc">{{ $t('smtp-secure-info') }}</span></ui-switch> <ui-switch v-model="smtpSecure" :disabled="!enableEmail">{{ $t('smtp-secure') }}<span slot="desc">{{ $t('smtp-secure-info') }}</span></ui-switch>
</section> </section>
@ -149,6 +150,7 @@ export default Vue.extend({
maintainerEmail: null, maintainerEmail: null,
disableRegistration: false, disableRegistration: false,
disableLocalTimeline: false, disableLocalTimeline: false,
mascotImageUrl: null,
bannerUrl: null, bannerUrl: null,
errorImageUrl: null, errorImageUrl: null,
name: null, name: null,
@ -196,6 +198,7 @@ export default Vue.extend({
this.maintainerEmail = meta.maintainer.email; this.maintainerEmail = meta.maintainer.email;
this.disableRegistration = meta.disableRegistration; this.disableRegistration = meta.disableRegistration;
this.disableLocalTimeline = meta.disableLocalTimeline; this.disableLocalTimeline = meta.disableLocalTimeline;
this.mascotImageUrl = meta.mascotImageUrl;
this.bannerUrl = meta.bannerUrl; this.bannerUrl = meta.bannerUrl;
this.errorImageUrl = meta.errorImageUrl; this.errorImageUrl = meta.errorImageUrl;
this.name = meta.name; this.name = meta.name;
@ -253,6 +256,7 @@ export default Vue.extend({
maintainerEmail: this.maintainerEmail, maintainerEmail: this.maintainerEmail,
disableRegistration: this.disableRegistration, disableRegistration: this.disableRegistration,
disableLocalTimeline: this.disableLocalTimeline, disableLocalTimeline: this.disableLocalTimeline,
mascotImageUrl: this.mascotImageUrl,
bannerUrl: this.bannerUrl, bannerUrl: this.bannerUrl,
errorImageUrl: this.errorImageUrl, errorImageUrl: this.errorImageUrl,
name: this.name, name: this.name,

View File

@ -6,7 +6,8 @@
<ui-input v-model="username" type="text"> <ui-input v-model="username" type="text">
<span slot="prefix">@</span> <span slot="prefix">@</span>
</ui-input> </ui-input>
<ui-button @click="add" :disabled="adding">{{ $t('add-moderator.add') }}</ui-button> <ui-button @click="add" :disabled="changing">{{ $t('add-moderator.add') }}</ui-button>
<ui-button @click="remove" :disabled="changing">{{ $t('add-moderator.remove') }}</ui-button>
</section> </section>
</ui-card> </ui-card>
</div> </div>
@ -23,13 +24,13 @@ export default Vue.extend({
data() { data() {
return { return {
username: '', username: '',
adding: false changing: false
}; };
}, },
methods: { methods: {
async add() { async add() {
this.adding = true; this.changing = true;
const process = async () => { const process = async () => {
const user = await this.$root.api('users/show', parseAcct(this.username)); const user = await this.$root.api('users/show', parseAcct(this.username));
@ -47,7 +48,29 @@ export default Vue.extend({
}); });
}); });
this.adding = false; this.changing = false;
},
async remove() {
this.changing = true;
const process = async () => {
const user = await this.$root.api('users/show', parseAcct(this.username));
await this.$root.api('admin/moderators/remove', { userId: user.id });
this.$root.dialog({
type: 'success',
text: this.$t('add-moderator.removed')
});
};
await process().catch(e => {
this.$root.dialog({
type: 'error',
text: e.toString()
});
});
this.changing = false;
}, },
} }
}); });

View File

@ -31,6 +31,14 @@
<option value="-updatedAt">{{ $t('users.sort.updatedAtAsc') }}</option> <option value="-updatedAt">{{ $t('users.sort.updatedAtAsc') }}</option>
<option value="+updatedAt">{{ $t('users.sort.updatedAtDesc') }}</option> <option value="+updatedAt">{{ $t('users.sort.updatedAtDesc') }}</option>
</ui-select> </ui-select>
<ui-select v-model="state">
<span slot="label">{{ $t('users.state.title') }}</span>
<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="suspended">{{ $t('users.state.suspended') }}</option>
</ui-select>
<ui-select v-model="origin"> <ui-select v-model="origin">
<span slot="label">{{ $t('users.origin.title') }}</span> <span slot="label">{{ $t('users.origin.title') }}</span>
<option value="combined">{{ $t('users.origin.combined') }}</option> <option value="combined">{{ $t('users.origin.combined') }}</option>
@ -39,7 +47,7 @@
</ui-select> </ui-select>
</ui-horizon-group> </ui-horizon-group>
<sequential-entrance animation="entranceFromTop" delay="25"> <sequential-entrance animation="entranceFromTop" delay="25">
<div class="kofvwchc" v-for="user in users"> <div class="kofvwchc" v-for="user in users" :key="user.id">
<div> <div>
<a :href="user | userPage(null, true)"> <a :href="user | userPage(null, true)">
<mk-avatar class="avatar" :user="user" :disable-link="true"/> <mk-avatar class="avatar" :user="user" :disable-link="true"/>
@ -49,6 +57,10 @@
<header> <header>
<b><mk-user-name :user="user"/></b> <b><mk-user-name :user="user"/></b>
<span class="username">@{{ user | acct }}</span> <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-suspended" v-if="user.isSuspended" :title="$t('@.suspended-user')"><fa :icon="faSnowflake"/></span>
</header> </header>
<div> <div>
<span>{{ $t('users.updatedAt') }}: <mk-time :time="user.updatedAt" mode="detail"/></span> <span>{{ $t('users.updatedAt') }}: <mk-time :time="user.updatedAt" mode="detail"/></span>
@ -84,6 +96,7 @@ export default Vue.extend({
suspending: false, suspending: false,
unsuspending: false, unsuspending: false,
sort: '+createdAt', sort: '+createdAt',
state: 'all',
origin: 'combined', origin: 'combined',
limit: 10, limit: 10,
offset: 0, offset: 0,
@ -100,6 +113,12 @@ export default Vue.extend({
this.fetchUsers(); this.fetchUsers();
}, },
state() {
this.users = [];
this.offset = 0;
this.fetchUsers();
},
origin() { origin() {
this.users = []; this.users = [];
this.offset = 0; this.offset = 0;
@ -236,7 +255,8 @@ export default Vue.extend({
}, },
fetchUsers() { fetchUsers() {
this.$root.api('users', { this.$root.api('admin/show-users', {
state: this.state,
origin: this.origin, origin: this.origin,
sort: this.sort, sort: this.sort,
offset: this.offset, offset: this.offset,
@ -284,4 +304,19 @@ export default Vue.extend({
margin-left 8px margin-left 8px
opacity 0.7 opacity 0.7
> .is-admin
> .is-moderator
flex-shrink 0
align-self center
margin 0 0 0 .5em
padding 1px 6px
font-size 80%
border-radius 3px
background var(--noteHeaderAdminBg)
color var(--noteHeaderAdminFg)
> .is-verified
> .is-suspended
margin 0 0 0 .5em
color #4dabf7
</style> </style>

View File

@ -129,9 +129,7 @@ export default (opts: Opts = {}) => ({
source: this.$refs.reactButton, source: this.$refs.reactButton,
note: this.appearNote, note: this.appearNote,
showFocus: viaKeyboard, showFocus: viaKeyboard,
animation: !viaKeyboard, animation: !viaKeyboard
compact: opts.mobile,
big: opts.mobile
}).$once('closed', this.focus); }).$once('closed', this.focus);
}, },
@ -171,8 +169,7 @@ export default (opts: Opts = {}) => ({
this.$root.new(MkNoteMenu, { this.$root.new(MkNoteMenu, {
source: this.$refs.menuButton, source: this.$refs.menuButton,
note: this.appearNote, note: this.appearNote,
animation: !viaKeyboard, animation: !viaKeyboard
compact: opts.mobile,
}).$once('closed', this.focus); }).$once('closed', this.focus);
}, },

View File

@ -2,6 +2,7 @@
<span class="mk-acct"> <span class="mk-acct">
<span class="name">@{{ user.username }}</span> <span class="name">@{{ user.username }}</span>
<span class="host" :class="{ fade: $store.state.settings.contrastedAcct }" v-if="user.host || detail || $store.state.settings.showFullAcct">@{{ user.host || host }}</span> <span class="host" :class="{ fade: $store.state.settings.contrastedAcct }" v-if="user.host || detail || $store.state.settings.showFullAcct">@{{ user.host || host }}</span>
<fa v-if="user.isLocked == true" class="locked" icon="lock" fixed-width/>
</span> </span>
</template> </template>
@ -23,4 +24,8 @@ export default Vue.extend({
.mk-acct .mk-acct
> .host.fade > .host.fade
opacity 0.5 opacity 0.5
> .locked
opacity 0.8
margin-left 0.5em
</style> </style>

View File

@ -30,11 +30,11 @@
:class="{ empty: stone == null, none: o.map[i] == 'null', isEnded: game.isEnded, myTurn: !game.isEnded && isMyTurn, can: turnUser ? o.canPut(turnUser.id == blackUser.id, i) : null, prev: o.prevPos == i }" :class="{ empty: stone == null, none: o.map[i] == 'null', isEnded: game.isEnded, myTurn: !game.isEnded && isMyTurn, can: turnUser ? o.canPut(turnUser.id == blackUser.id, i) : null, prev: o.prevPos == i }"
@click="set(i)" @click="set(i)"
:title="`${String.fromCharCode(65 + o.transformPosToXy(i)[0])}${o.transformPosToXy(i)[1] + 1}`"> :title="`${String.fromCharCode(65 + o.transformPosToXy(i)[0])}${o.transformPosToXy(i)[1] + 1}`">
<template v-if="!$store.state.settings.games.reversi.useWhiteBlackStones"> <template v-if="$store.state.settings.games.reversi.useAvatarStones">
<img v-if="stone === true" :src="blackUser.avatarUrl" alt="black"> <img v-if="stone === true" :src="blackUser.avatarUrl" alt="black">
<img v-if="stone === false" :src="whiteUser.avatarUrl" alt="white"> <img v-if="stone === false" :src="whiteUser.avatarUrl" alt="white">
</template> </template>
<template v-if="$store.state.settings.games.reversi.useWhiteBlackStones"> <template v-else>
<fa v-if="stone === true" :icon="fasCircle"/> <fa v-if="stone === true" :icon="fasCircle"/>
<fa v-if="stone === false" :icon="farCircle"/> <fa v-if="stone === false" :icon="farCircle"/>
</template> </template>

View File

@ -53,14 +53,14 @@ export default Vue.extend({
pointer-events none pointer-events none
user-select none user-select none
padding 0 4px padding 0 4px
background var(--primary) background var(--mfmMention)
border solid 1px var(--primary) border solid var(--lineWidth) var(--mfmMention)
border-radius 4px 0 0 4px border-radius 4px 0 0 4px
color var(--primaryForeground) color var(--mfmMentionForeground)
& + .main & + .main
padding 0 4px padding 0 4px
border solid 1px var(--primary) border solid var(--lineWidth) var(--mfmMention)
border-radius 0 4px 4px 0 border-radius 0 4px 4px 0
> .main > .main

View File

@ -24,16 +24,11 @@ export default Vue.extend({
items: { items: {
type: Array, type: Array,
required: true required: true
},
compact: {
type: Boolean,
required: false,
default: false
} }
}, },
data() { data() {
return { return {
hukidasi: !this.compact hukidasi: !this.$root.isMobile
}; };
}, },
mounted() { mounted() {
@ -47,7 +42,7 @@ export default Vue.extend({
let left; let left;
let top; let top;
if (this.compact) { if (this.$root.isMobile) {
const x = rect.left + window.pageXOffset + (this.source.offsetWidth / 2); const x = rect.left + window.pageXOffset + (this.source.offsetWidth / 2);
const y = rect.top + window.pageYOffset + (this.source.offsetHeight / 2); const y = rect.top + window.pageYOffset + (this.source.offsetHeight / 2);
left = (x - (width / 2)); left = (x - (width / 2));
@ -121,14 +116,11 @@ export default Vue.extend({
<style lang="stylus" scoped> <style lang="stylus" scoped>
.onchrpzrvnoruiaenfcqvccjfuupzzwv .onchrpzrvnoruiaenfcqvccjfuupzzwv
$bg-color = var(--popupBg) $bg-color = var(--popupBg)
$border-color = rgba(27, 31, 35, 0.15)
position initial position initial
&.isMobile &.isMobile
> .popover > .popover
border none
> button > button
font-size 15px font-size 15px
@ -147,7 +139,6 @@ export default Vue.extend({
z-index 10001 z-index 10001
padding 8px 0 padding 8px 0
background $bg-color background $bg-color
border 1px solid $border-color
border-radius 4px border-radius 4px
box-shadow 0 3px 12px rgba(27, 31, 35, 0.15) box-shadow 0 3px 12px rgba(27, 31, 35, 0.15)
transform scale(0.5) transform scale(0.5)
@ -172,14 +163,6 @@ export default Vue.extend({
border-top solid $balloon-size transparent border-top solid $balloon-size transparent
border-left solid $balloon-size transparent border-left solid $balloon-size transparent
border-right solid $balloon-size transparent border-right solid $balloon-size transparent
border-bottom solid $balloon-size $border-color
&:after
top -($balloon-size * 2) + 1.5px
left s('calc(50% - %s)', $balloon-size)
border-top solid $balloon-size transparent
border-left solid $balloon-size transparent
border-right solid $balloon-size transparent
border-bottom solid $balloon-size $bg-color border-bottom solid $balloon-size $bg-color
> button > button
@ -203,7 +186,7 @@ export default Vue.extend({
> div > div
margin 8px 0 margin 8px 0
height 1px height var(--lineWidth)
background var(--faceDivider) background var(--faceDivider)
</style> </style>

View File

@ -129,8 +129,10 @@ export default Vue.component('misskey-flavored-markdown', {
key: Math.random(), key: Math.random(),
props: { props: {
url: token.node.props.url, url: token.node.props.url,
target: '_blank', target: '_blank'
style: 'color:var(--mfmLink);' },
attrs: {
style: 'color:var(--mfmUrl);'
} }
})]; })];
} }

View File

@ -18,7 +18,7 @@
<span class="visibility" v-if="note.visibility != 'public'"> <span class="visibility" v-if="note.visibility != 'public'">
<fa v-if="note.visibility == 'home'" icon="home"/> <fa v-if="note.visibility == 'home'" icon="home"/>
<fa v-if="note.visibility == 'followers'" icon="unlock"/> <fa v-if="note.visibility == 'followers'" icon="unlock"/>
<fa v-if="note.visibility == 'specified'" icon="lock"/> <fa v-if="note.visibility == 'specified'" icon="envelope"/>
</span> </span>
<span class="localOnly" v-if="note.localOnly == true"><fa icon="heart"/></span> <span class="localOnly" v-if="note.localOnly == true"><fa icon="heart"/></span>
</div> </div>

View File

@ -1,6 +1,6 @@
<template> <template>
<div style="position:initial"> <div style="position:initial">
<mk-menu :source="source" :compact="compact" :items="items" @closed="closed"/> <mk-menu :source="source" :items="items" @closed="closed"/>
</div> </div>
</template> </template>
@ -13,7 +13,7 @@ import { concat, intersperse } from '../../../../../prelude/array';
export default Vue.extend({ export default Vue.extend({
i18n: i18n('common/views/components/note-menu.vue'), i18n: i18n('common/views/components/note-menu.vue'),
props: ['note', 'source', 'compact'], props: ['note', 'source'],
computed: { computed: {
items(): any[] { items(): any[] {
return concat(intersperse([null], [ return concat(intersperse([null], [
@ -29,6 +29,10 @@ export default Vue.extend({
icon: 'info-circle', icon: 'info-circle',
text: this.$t('detail'), text: this.$t('detail'),
action: this.detail action: this.detail
}], [{
icon: 'align-left',
text: this.$t('copy-content'),
action: this.copyContent
}], [{ }], [{
icon: 'link', icon: 'link',
text: this.$t('copy-link'), text: this.$t('copy-link'),
@ -81,6 +85,10 @@ export default Vue.extend({
this.$router.push(`/notes/${this.note.id}`); this.$router.push(`/notes/${this.note.id}`);
}, },
copyContent() {
copyToClipboard(this.note.text);
},
copyLink() { copyLink() {
copyToClipboard(`${url}/notes/${this.note.id}`); copyToClipboard(`${url}/notes/${this.note.id}`);
}, },

View File

@ -1,6 +1,6 @@
<template> <template>
<ui-card> <ui-card>
<div slot="title"><fa :icon="['far', 'bell']"/> {{ $t('notification') }}</div> <div slot="title"><fa :icon="['far', 'bell']"/> {{ $t('title') }}</div>
<section> <section>
<ui-switch v-model="$store.state.i.settings.autoWatch" @change="onChangeAutoWatch"> <ui-switch v-model="$store.state.i.settings.autoWatch" @change="onChangeAutoWatch">
{{ $t('auto-watch') }}<span slot="desc">{{ $t('auto-watch-desc') }}</span> {{ $t('auto-watch') }}<span slot="desc">{{ $t('auto-watch-desc') }}</span>

View File

@ -1,8 +1,8 @@
<template> <template>
<div class="mk-reaction-picker" v-hotkey.global="keymap"> <div class="rdfaahpb" v-hotkey.global="keymap">
<div class="backdrop" ref="backdrop" @click="close"></div> <div class="backdrop" ref="backdrop" @click="close"></div>
<div class="popover" :class="{ compact, big }" ref="popover"> <div class="popover" :class="{ isMobile: $root.isMobile }" ref="popover">
<p v-if="!compact">{{ title }}</p> <p v-if="!$root.isMobile">{{ title }}</p>
<div ref="buttons" :class="{ showFocus }"> <div ref="buttons" :class="{ showFocus }">
<button @click="react('like')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="1" :title="$t('@.reactions.like')" v-particle><mk-reaction-icon reaction="like"/></button> <button @click="react('like')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="1" :title="$t('@.reactions.like')" v-particle><mk-reaction-icon reaction="like"/></button>
<button @click="react('love')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="2" :title="$t('@.reactions.love')" v-particle><mk-reaction-icon reaction="love"/></button> <button @click="react('love')" @mouseover="onMouseover" @mouseout="onMouseout" tabindex="2" :title="$t('@.reactions.love')" v-particle><mk-reaction-icon reaction="love"/></button>
@ -36,22 +36,10 @@ export default Vue.extend({
required: true required: true
}, },
compact: {
type: Boolean,
required: false,
default: false
},
cb: { cb: {
required: false required: false
}, },
big: {
type: Boolean,
required: false,
default: false
},
showFocus: { showFocus: {
type: Boolean, type: Boolean,
required: false, required: false,
@ -115,7 +103,7 @@ export default Vue.extend({
const width = popover.offsetWidth; const width = popover.offsetWidth;
const height = popover.offsetHeight; const height = popover.offsetHeight;
if (this.compact) { if (this.$root.isMobile) {
const x = rect.left + window.pageXOffset + (this.source.offsetWidth / 2); const x = rect.left + window.pageXOffset + (this.source.offsetWidth / 2);
const y = rect.top + window.pageYOffset + (this.source.offsetHeight / 2); const y = rect.top + window.pageYOffset + (this.source.offsetHeight / 2);
popover.style.left = (x - (width / 2)) + 'px'; popover.style.left = (x - (width / 2)) + 'px';
@ -210,9 +198,7 @@ export default Vue.extend({
</script> </script>
<style lang="stylus" scoped> <style lang="stylus" scoped>
$border-color = rgba(27, 31, 35, 0.15) .rdfaahpb
.mk-reaction-picker
position initial position initial
> .backdrop > .backdrop
@ -230,41 +216,12 @@ $border-color = rgba(27, 31, 35, 0.15)
position absolute position absolute
z-index 10001 z-index 10001
background $bgcolor background $bgcolor
border 1px solid $border-color
border-radius 4px border-radius 4px
box-shadow 0 3px 12px rgba(27, 31, 35, 0.15) box-shadow 0 3px 12px rgba(27, 31, 35, 0.15)
transform scale(0.5) transform scale(0.5)
opacity 0 opacity 0
$balloon-size = 16px &.isMobile
&:not(.compact)
margin-top $balloon-size
transform-origin center -($balloon-size)
&:before
content ""
display block
position absolute
top -($balloon-size * 2)
left s('calc(50% - %s)', $balloon-size)
border-top solid $balloon-size transparent
border-left solid $balloon-size transparent
border-right solid $balloon-size transparent
border-bottom solid $balloon-size $border-color
&:after
content ""
display block
position absolute
top -($balloon-size * 2) + 1.5px
left s('calc(50% - %s)', $balloon-size)
border-top solid $balloon-size transparent
border-left solid $balloon-size transparent
border-right solid $balloon-size transparent
border-bottom solid $balloon-size $bgcolor
&.big
> div > div
width 280px width 280px
@ -274,13 +231,30 @@ $border-color = rgba(27, 31, 35, 0.15)
font-size 28px font-size 28px
border-radius 4px border-radius 4px
&:not(.isMobile)
$arrow-size = 16px
margin-top $arrow-size
transform-origin center -($arrow-size)
&:before
content ""
display block
position absolute
top -($arrow-size * 2)
left s('calc(50% - %s)', $arrow-size)
border-top solid $arrow-size transparent
border-left solid $arrow-size transparent
border-right solid $arrow-size transparent
border-bottom solid $arrow-size $bgcolor
> p > p
display block display block
margin 0 margin 0
padding 8px 10px padding 8px 10px
font-size 14px font-size 14px
color var(--popupFg) color var(--popupFg)
border-bottom solid 1px var(--faceDivider) border-bottom solid var(--lineWidth) var(--faceDivider)
> div > div
padding 4px padding 4px

View File

@ -13,7 +13,7 @@
<span class="visibility" v-if="note.visibility != 'public'"> <span class="visibility" v-if="note.visibility != 'public'">
<fa v-if="note.visibility == 'home'" icon="home"/> <fa v-if="note.visibility == 'home'" icon="home"/>
<fa v-if="note.visibility == 'followers'" icon="unlock"/> <fa v-if="note.visibility == 'followers'" icon="unlock"/>
<fa v-if="note.visibility == 'specified'" icon="lock"/> <fa v-if="note.visibility == 'specified'" icon="envelope"/>
</span> </span>
<span class="localOnly" v-if="note.localOnly == true"><fa icon="heart"/></span> <span class="localOnly" v-if="note.localOnly == true"><fa icon="heart"/></span>
</div> </div>

View File

@ -6,7 +6,7 @@
<span slot="prefix">@</span> <span slot="prefix">@</span>
<span slot="suffix">@{{ host }}</span> <span slot="suffix">@{{ host }}</span>
</ui-input> </ui-input>
<ui-input v-model="password" type="password" required styl="fill"> <ui-input v-model="password" type="password" :with-password-toggle="true" required styl="fill">
<span>{{ $t('password') }}</span> <span>{{ $t('password') }}</span>
<span slot="prefix"><fa icon="lock"/></span> <span slot="prefix"><fa icon="lock"/></span>
</ui-input> </ui-input>

View File

@ -1,99 +1,104 @@
<template> <template>
<div class="nicnklzforebnpfgasiypmpdaaglujqm"> <ui-card>
<label> <div slot="title"><fa icon="palette"/> {{ $t('theme') }}</div>
<span><fa :icon="faSun"/> {{ $t('light-theme') }}</span> <section class="nicnklzforebnpfgasiypmpdaaglujqm fit-top">
<ui-select v-model="light" :placeholder="$t('light-theme')"> <label>
<optgroup :label="$t('light-themes')"> <ui-select v-model="light" :placeholder="$t('light-theme')">
<option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option> <span slot="label"><fa :icon="faSun"/> {{ $t('light-theme') }}</span>
</optgroup> <optgroup :label="$t('light-themes')">
<optgroup :label="$t('dark-themes')"> <option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
<option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option> </optgroup>
</optgroup> <optgroup :label="$t('dark-themes')">
</ui-select> <option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
</label> </optgroup>
</ui-select>
</label>
<label> <label>
<span><fa :icon="faMoon"/> {{ $t('dark-theme') }}</span> <ui-select v-model="dark" :placeholder="$t('dark-theme')">
<ui-select v-model="dark" :placeholder="$t('dark-theme')"> <span slot="label"><fa :icon="faMoon"/> {{ $t('dark-theme') }}</span>
<optgroup :label="$t('dark-themes')"> <optgroup :label="$t('dark-themes')">
<option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option> <option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
</optgroup> </optgroup>
<optgroup :label="$t('light-themes')"> <optgroup :label="$t('light-themes')">
<option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option> <option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
</optgroup> </optgroup>
</ui-select> </ui-select>
</label> </label>
<details class="creator"> <a href="https://assets.msky.cafe/theme/list" target="_blank">{{ $t('find-more-theme') }}</a>
<summary><fa icon="palette"/> {{ $t('create-a-theme') }}</summary>
<div>
<span>{{ $t('base-theme') }}:</span>
<ui-radio v-model="myThemeBase" value="light">{{ $t('base-theme-light') }}</ui-radio>
<ui-radio v-model="myThemeBase" value="dark">{{ $t('base-theme-dark') }}</ui-radio>
</div>
<div>
<ui-input v-model="myThemeName">
<span>{{ $t('theme-name') }}</span>
</ui-input>
<ui-textarea v-model="myThemeDesc">
<span>{{ $t('desc') }}</span>
</ui-textarea>
</div>
<div>
<div style="padding-bottom:8px;">{{ $t('primary-color') }}:</div>
<color-picker v-model="myThemePrimary"/>
</div>
<div>
<div style="padding-bottom:8px;">{{ $t('secondary-color') }}:</div>
<color-picker v-model="myThemeSecondary"/>
</div>
<div>
<div style="padding-bottom:8px;">{{ $t('text-color') }}:</div>
<color-picker v-model="myThemeText"/>
</div>
<ui-button @click="preview()"><fa icon="eye"/> {{ $t('preview-created-theme') }}</ui-button>
<ui-button primary @click="gen()"><fa :icon="['far', 'save']"/> {{ $t('save-created-theme') }}</ui-button>
</details>
<details> <details class="creator">
<summary><fa icon="download"/> {{ $t('install-a-theme') }}</summary> <summary><fa icon="palette"/> {{ $t('create-a-theme') }}</summary>
<ui-button @click="import_()"><fa icon="file-import"/> {{ $t('import') }}</ui-button> <div>
<input ref="file" type="file" accept=".misskeytheme" style="display:none;" @change="onUpdateImportFile"/> <span>{{ $t('base-theme') }}:</span>
<p>{{ $t('import-by-code') }}:</p> <ui-radio v-model="myThemeBase" value="light">{{ $t('base-theme-light') }}</ui-radio>
<ui-textarea v-model="installThemeCode"> <ui-radio v-model="myThemeBase" value="dark">{{ $t('base-theme-dark') }}</ui-radio>
<span>{{ $t('theme-code') }}</span> </div>
</ui-textarea> <div>
<ui-button @click="() => install(this.installThemeCode)"><fa icon="check"/> {{ $t('install') }}</ui-button> <ui-input v-model="myThemeName">
</details> <span>{{ $t('theme-name') }}</span>
</ui-input>
<ui-textarea v-model="myThemeDesc">
<span>{{ $t('desc') }}</span>
</ui-textarea>
</div>
<div>
<div style="padding-bottom:8px;">{{ $t('primary-color') }}:</div>
<color-picker v-model="myThemePrimary"/>
</div>
<div>
<div style="padding-bottom:8px;">{{ $t('secondary-color') }}:</div>
<color-picker v-model="myThemeSecondary"/>
</div>
<div>
<div style="padding-bottom:8px;">{{ $t('text-color') }}:</div>
<color-picker v-model="myThemeText"/>
</div>
<ui-button @click="preview()"><fa icon="eye"/> {{ $t('preview-created-theme') }}</ui-button>
<ui-button primary @click="gen()"><fa :icon="['far', 'save']"/> {{ $t('save-created-theme') }}</ui-button>
</details>
<details> <details>
<summary><fa icon="folder-open"/> {{ $t('manage-themes') }}</summary> <summary><fa icon="download"/> {{ $t('install-a-theme') }}</summary>
<ui-select v-model="selectedThemeId" :placeholder="$t('select-theme')"> <ui-button @click="import_()"><fa icon="file-import"/> {{ $t('import') }}</ui-button>
<optgroup :label="$t('builtin-themes')"> <input ref="file" type="file" accept=".misskeytheme" style="display:none;" @change="onUpdateImportFile"/>
<option v-for="x in builtinThemes" :value="x.id" :key="x.id">{{ x.name }}</option> <p>{{ $t('import-by-code') }}:</p>
</optgroup> <ui-textarea v-model="installThemeCode">
<optgroup :label="$t('my-themes')">
<option v-for="x in installedThemes.filter(t => t.author == this.$store.state.i.username)" :value="x.id" :key="x.id">{{ x.name }}</option>
</optgroup>
<optgroup :label="$t('installed-themes')">
<option v-for="x in installedThemes.filter(t => t.author != this.$store.state.i.username)" :value="x.id" :key="x.id">{{ x.name }}</option>
</optgroup>
</ui-select>
<template v-if="selectedTheme">
<ui-input readonly :value="selectedTheme.author">
<span>{{ $t('author') }}</span>
</ui-input>
<ui-textarea v-if="selectedTheme.desc" readonly :value="selectedTheme.desc">
<span>{{ $t('desc') }}</span>
</ui-textarea>
<ui-textarea readonly :value="selectedThemeCode">
<span>{{ $t('theme-code') }}</span> <span>{{ $t('theme-code') }}</span>
</ui-textarea> </ui-textarea>
<ui-button @click="export_()" link :download="`${selectedTheme.name}.misskeytheme`" ref="export"><fa icon="box"/> {{ $t('export') }}</ui-button> <ui-button @click="() => install(this.installThemeCode)"><fa icon="check"/> {{ $t('install') }}</ui-button>
<ui-button @click="uninstall()" v-if="!builtinThemes.some(t => t.id == selectedTheme.id)"><fa :icon="['far', 'trash-alt']"/> {{ $t('uninstall') }}</ui-button> </details>
</template>
</details> <details>
</div> <summary><fa icon="folder-open"/> {{ $t('manage-themes') }}</summary>
<ui-select v-model="selectedThemeId" :placeholder="$t('select-theme')">
<optgroup :label="$t('builtin-themes')">
<option v-for="x in builtinThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
</optgroup>
<optgroup :label="$t('my-themes')">
<option v-for="x in installedThemes.filter(t => t.author == this.$store.state.i.username)" :value="x.id" :key="x.id">{{ x.name }}</option>
</optgroup>
<optgroup :label="$t('installed-themes')">
<option v-for="x in installedThemes.filter(t => t.author != this.$store.state.i.username)" :value="x.id" :key="x.id">{{ x.name }}</option>
</optgroup>
</ui-select>
<template v-if="selectedTheme">
<ui-input readonly :value="selectedTheme.author">
<span>{{ $t('author') }}</span>
</ui-input>
<ui-textarea v-if="selectedTheme.desc" readonly :value="selectedTheme.desc">
<span>{{ $t('desc') }}</span>
</ui-textarea>
<ui-textarea readonly tall :value="selectedThemeCode">
<span>{{ $t('theme-code') }}</span>
</ui-textarea>
<ui-button @click="export_()" link :download="`${selectedTheme.name}.misskeytheme`" ref="export"><fa icon="box"/> {{ $t('export') }}</ui-button>
<ui-button @click="uninstall()" v-if="!builtinThemes.some(t => t.id == selectedTheme.id)"><fa :icon="['far', 'trash-alt']"/> {{ $t('uninstall') }}</ui-button>
</template>
</details>
</section>
</ui-card>
</template> </template>
<script lang="ts"> <script lang="ts">
@ -331,8 +336,13 @@ export default Vue.extend({
<style lang="stylus" scoped> <style lang="stylus" scoped>
.nicnklzforebnpfgasiypmpdaaglujqm .nicnklzforebnpfgasiypmpdaaglujqm
> a
display block
margin-top -16px
margin-bottom 16px
> details > details
border-top solid 1px var(--faceDivider) border-top solid var(--lineWidth) var(--faceDivider)
> summary > summary
padding 16px 0 padding 16px 0
@ -343,5 +353,5 @@ export default Vue.extend({
> .creator > .creator
> div > div
padding 16px 0 padding 16px 0
border-bottom solid 1px var(--faceDivider) border-bottom solid var(--lineWidth) var(--faceDivider)
</style> </style>

View File

@ -41,7 +41,7 @@ export default Vue.extend({
> section > section
padding 20px 16px padding 20px 16px
border-top solid 1px var(--faceDivider) border-top solid var(--lineWidth) var(--faceDivider)
@media (min-width 500px) @media (min-width 500px)
padding 32px padding 32px

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="vnxwkwuf" :class="{ inputs, noGrow }"> <div class="vnxwkwuf" :class="{ inputs, noGrow }" :data-children-count="children">
<slot></slot> <slot></slot>
</div> </div>
</template> </template>
@ -21,6 +21,16 @@ export default Vue.extend({
required: false, required: false,
default: false default: false
} }
},
data() {
return {
children: 0
};
},
mounted() {
this.$nextTick(() => {
this.children = this.$slots.default.length;
});
} }
}); });
</script> </script>
@ -48,4 +58,19 @@ export default Vue.extend({
> *:not(:last-child) > *:not(:last-child)
margin-right 16px !important margin-right 16px !important
&[data-children-count="3"]
@media (max-width 600px)
display block
> *
display block
width 100% !important
margin 16px 0 !important
&:first-child
margin-top 0 !important
&:last-child
margin-bottom 0 !important
</style> </style>

View File

@ -39,6 +39,12 @@
</template> </template>
<div class="suffix" ref="suffix"><slot name="suffix"></slot></div> <div class="suffix" ref="suffix"><slot name="suffix"></slot></div>
</div> </div>
<div class="toggle" v-if="withPasswordToggle">
<a @click='togglePassword'>
<span v-if="type == 'password'"><fa :icon="['fa', 'eye']"/> {{ $t('@.show-password') }}</span>
<span v-if="type != 'password'"><fa :icon="['far', 'eye-slash']"/> {{ $t('@.hide-password') }}</span>
</a>
</div>
<div class="desc"><slot name="desc"></slot></div> <div class="desc"><slot name="desc"></slot></div>
</div> </div>
</template> </template>
@ -97,6 +103,11 @@ export default Vue.extend({
required: false, required: false,
default: false default: false
}, },
withPasswordToggle: {
type: Boolean,
required: false,
default: false
},
inline: { inline: {
type: Boolean, type: Boolean,
required: false, required: false,
@ -178,6 +189,13 @@ export default Vue.extend({
focus() { focus() {
this.$refs.input.focus(); this.$refs.input.focus();
}, },
togglePassword() {
if (this.type == 'password') {
this.type = 'text'
} else {
this.type = 'password'
}
},
chooseFile() { chooseFile() {
this.$refs.file.click(); this.$refs.file.click();
}, },
@ -356,6 +374,17 @@ root(fill)
if fill if fill
padding-right 12px padding-right 12px
> .toggle
cursor pointer
padding-left 0.5em
font-size 0.7em
opacity 0.7
text-align left
> a
color var(--inputLabel)
text-decoration none
> .desc > .desc
margin 6px 0 margin 6px 0
font-size 13px font-size 13px

View File

@ -25,11 +25,9 @@ export default Vue.extend({
}, },
props: { props: {
model: { model: {
type: String,
required: false required: false
}, },
value: { value: {
type: String,
required: false required: false
}, },
disabled: { disabled: {
@ -66,10 +64,10 @@ export default Vue.extend({
&.checked &.checked
> .button > .button
border-color var(--primary) border-color var(--radioActive)
&:after &:after
background-color var(--primary) background-color var(--radioActive)
transform scale(1) transform scale(1)
opacity 1 opacity 1

View File

@ -77,11 +77,11 @@ export default Vue.extend({
&.checked &.checked
> .button > .button
background-color var(--primaryAlpha04) background-color var(--switchActiveTrack)
border-color var(--primaryAlpha04) border-color var(--switchActiveTrack)
> * > *
background-color var(--primary) background-color var(--switchActive)
transform translateX(14px) transform translateX(14px)
> input > input

View File

@ -8,16 +8,16 @@
</blockquote> </blockquote>
</div> </div>
<div v-else class="mk-url-preview"> <div v-else class="mk-url-preview">
<a :class="{ mini }" :href="url" target="_blank" :title="url" v-if="!fetching"> <a :class="{ mini, compact }" :href="url" target="_blank" :title="url" v-if="!fetching">
<div class="thumbnail" v-if="thumbnail" :style="`background-image: url(${thumbnail})`"></div> <div class="thumbnail" v-if="thumbnail" :style="`background-image: url(${thumbnail})`"></div>
<article> <article>
<header> <header>
<h1>{{ title }}</h1> <h1 :title="title">{{ title }}</h1>
</header> </header>
<p v-if="description">{{ description.length > 85 ? description.slice(0, 85) + '…' : description }}</p> <p v-if="description" :title="description">{{ description.length > 85 ? description.slice(0, 85) + '…' : description }}</p>
<footer> <footer>
<img class="icon" v-if="icon" :src="icon"/> <img class="icon" v-if="icon" :src="icon"/>
<p>{{ sitename }}</p> <p :title="sitename">{{ sitename }}</p>
</footer> </footer>
</article> </article>
</a> </a>
@ -120,6 +120,12 @@ export default Vue.extend({
default: false default: false
}, },
compact: {
type: Boolean,
required: false,
default: false
},
mini: { mini: {
type: Boolean, type: Boolean,
required: false, required: false,
@ -207,7 +213,7 @@ export default Vue.extend({
> a > a
display block display block
font-size 14px font-size 14px
border solid 1px var(--urlPreviewBorder) border solid var(--lineWidth) var(--urlPreviewBorder)
border-radius 4px border-radius 4px
overflow hidden overflow hidden
@ -302,6 +308,23 @@ export default Vue.extend({
width 12px width 12px
height 12px height 12px
&.compact
> .thumbnail
position: absolute
width 56px
height 100%
> article
left 56px
width calc(100% - 56px)
padding 4px
> header
margin-bottom 2px
> footer
margin-top 2px
&.mini &.mini
font-size 10px font-size 10px
@ -325,4 +348,27 @@ export default Vue.extend({
width 12px width 12px
height 12px height 12px
&.compact
> .thumbnail
position: absolute
width 56px
height 100%
> article
left 56px
width calc(100% - 56px)
padding 4px
> header
margin-bottom 2px
> footer
margin-top 2px
&.compact
> article
> header h1, p, footer
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
</style> </style>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="mk-visibility-chooser"> <div class="gqyayizv">
<div class="backdrop" ref="backdrop" @click="close"></div> <div class="backdrop" ref="backdrop" @click="close"></div>
<div class="popover" :class="{ compact }" ref="popover"> <div class="popover" :class="{ isMobile: $root.isMobile }" ref="popover">
<div @click="choose('public')" :class="{ active: v == 'public' }"> <div @click="choose('public')" :class="{ active: v == 'public' }">
<div><fa icon="globe"/></div> <div><fa icon="globe"/></div>
<div> <div>
@ -23,7 +23,7 @@
</div> </div>
</div> </div>
<div @click="choose('specified')" :class="{ active: v == 'specified' }"> <div @click="choose('specified')" :class="{ active: v == 'specified' }">
<div><fa icon="lock"/></div> <div><fa icon="envelope"/></div>
<div> <div>
<span>{{ $t('specified') }}</span> <span>{{ $t('specified') }}</span>
<span>{{ $t('specified-desc') }}</span> <span>{{ $t('specified-desc') }}</span>
@ -59,10 +59,18 @@ import * as anime from 'animejs';
export default Vue.extend({ export default Vue.extend({
i18n: i18n('common/views/components/visibility-chooser.vue'), i18n: i18n('common/views/components/visibility-chooser.vue'),
props: ['source', 'compact'], props: {
source: {
required: true
},
currentVisibility: {
type: String,
required: false
}
},
data() { data() {
return { return {
v: this.$store.state.settings.rememberNoteVisibility ? (this.$store.state.device.visibility || this.$store.state.settings.defaultNoteVisibility) : this.$store.state.settings.defaultNoteVisibility v: this.$store.state.settings.rememberNoteVisibility ? (this.$store.state.device.visibility || this.$store.state.settings.defaultNoteVisibility) : (this.currentVisibility || this.$store.state.settings.defaultNoteVisibility)
} }
}, },
mounted() { mounted() {
@ -76,7 +84,7 @@ export default Vue.extend({
let left; let left;
let top; let top;
if (this.compact) { if (this.$root.isMobile) {
const x = rect.left + window.pageXOffset + (this.source.offsetWidth / 2); const x = rect.left + window.pageXOffset + (this.source.offsetWidth / 2);
const y = rect.top + window.pageYOffset + (this.source.offsetHeight / 2); const y = rect.top + window.pageYOffset + (this.source.offsetHeight / 2);
left = (x - (width / 2)); left = (x - (width / 2));
@ -142,9 +150,7 @@ export default Vue.extend({
</script> </script>
<style lang="stylus" scoped> <style lang="stylus" scoped>
$border-color = rgba(27, 31, 35, 0.15) .gqyayizv
.mk-visibility-chooser
position initial position initial
> .backdrop > .backdrop
@ -164,39 +170,27 @@ $border-color = rgba(27, 31, 35, 0.15)
width 240px width 240px
padding 8px 0 padding 8px 0
background $bgcolor background $bgcolor
border 1px solid $border-color
border-radius 4px border-radius 4px
box-shadow 0 3px 12px rgba(27, 31, 35, 0.15) box-shadow 0 3px 12px rgba(27, 31, 35, 0.15)
transform scale(0.5) transform scale(0.5)
opacity 0 opacity 0
$balloon-size = 10px &:not(.isMobile)
$arrow-size = 10px
&:not(.compact) margin-top $arrow-size
margin-top $balloon-size transform-origin center -($arrow-size)
transform-origin center -($balloon-size)
&:before &:before
content "" content ""
display block display block
position absolute position absolute
top -($balloon-size * 2) top -($arrow-size * 2)
left s('calc(50% - %s)', $balloon-size) left s('calc(50% - %s)', $arrow-size)
border-top solid $balloon-size transparent border-top solid $arrow-size transparent
border-left solid $balloon-size transparent border-left solid $arrow-size transparent
border-right solid $balloon-size transparent border-right solid $arrow-size transparent
border-bottom solid $balloon-size $border-color border-bottom solid $arrow-size $bgcolor
&:after
content ""
display block
position absolute
top -($balloon-size * 2) + 1.5px
left s('calc(50% - %s)', $balloon-size)
border-top solid $balloon-size transparent
border-left solid $balloon-size transparent
border-right solid $balloon-size transparent
border-bottom solid $balloon-size $bgcolor
> div > div
display flex display flex
@ -235,4 +229,5 @@ $border-color = rgba(27, 31, 35, 0.15)
> span:last-child:not(:first-child) > span:last-child:not(:first-child)
opacity 0.6 opacity 0.6
</style> </style>

View File

@ -72,7 +72,7 @@ export default define({
color var(--inputText) color var(--inputText)
background var(--face) background var(--face)
border none border none
border-bottom solid 1px var(--faceDivider) border-bottom solid var(--lineWidth) var(--faceDivider)
border-radius 0 border-radius 0
> button > button

View File

@ -77,7 +77,7 @@ export default define({
display block display block
padding 4px 0 padding 4px 0
color var(--text) color var(--text)
border-bottom dashed 1px var(--faceDivider) border-bottom dashed var(--lineWidth) var(--faceDivider)
&:last-child &:last-child
border-bottom none border-bottom none

View File

@ -84,6 +84,7 @@ export default define({
<style lang="stylus" scoped> <style lang="stylus" scoped>
.mkw-tips .mkw-tips
overflow visible !important overflow visible !important
opacity 0.8
> p > p
display block display block
@ -91,7 +92,7 @@ export default define({
padding 0 12px padding 0 12px
text-align center text-align center
font-size 0.7em font-size 0.7em
color #999 color var(--text)
> [data-icon] > [data-icon]
margin-right 4px margin-right 4px
@ -102,7 +103,7 @@ export default define({
margin 0 2px margin 0 2px
font-size 1em font-size 1em
font-family inherit font-family inherit
border solid 1px #999 border solid 1px var(--text)
border-radius 2px border-radius 2px
</style> </style>

View File

@ -24,6 +24,7 @@ p
padding 0 12px padding 0 12px
text-align center text-align center
font-size 0.7em font-size 0.7em
color #aaa color var(--text)
opacity 0.8
</style> </style>

View File

@ -151,7 +151,7 @@ export default Vue.extend({
font-weight bold font-weight bold
color var(--faceHeaderText) color var(--faceHeaderText)
background var(--faceHeader) background var(--faceHeader)
box-shadow 0 1px rgba(#000, 0.07) box-shadow 0 var(--lineWidth) rgba(#000, 0.07)
> [data-icon] > [data-icon]
margin-right 4px margin-right 4px
@ -199,11 +199,11 @@ export default Vue.extend({
color var(--calendarSaturdayOrSunday) color var(--calendarSaturdayOrSunday)
&[data-today] &[data-today]
box-shadow 0 0 0 1px var(--calendarWeek) inset box-shadow 0 0 0 var(--lineWidth) var(--calendarWeek) inset
border-radius 6px border-radius 6px
&[data-is-donichi] &[data-is-donichi]
box-shadow 0 0 0 1px var(--calendarSaturdayOrSunday) inset box-shadow 0 0 0 var(--lineWidth) var(--calendarSaturdayOrSunday) inset
&.day &.day
cursor pointer cursor pointer

View File

@ -46,7 +46,7 @@ export default Vue.extend({
&.divider &.divider
margin-top $padding margin-top $padding
padding-top $padding padding-top $padding
border-top solid 1px var(--faceDivider) border-top solid var(--lineWidth) var(--faceDivider)
&.nest &.nest
> p > p

View File

@ -32,7 +32,7 @@
<span class="visibility" v-if="appearNote.visibility != 'public'"> <span class="visibility" v-if="appearNote.visibility != 'public'">
<fa v-if="appearNote.visibility == 'home'" icon="home"/> <fa v-if="appearNote.visibility == 'home'" icon="home"/>
<fa v-if="appearNote.visibility == 'followers'" icon="unlock"/> <fa v-if="appearNote.visibility == 'followers'" icon="unlock"/>
<fa v-if="appearNote.visibility == 'specified'" icon="lock"/> <fa v-if="appearNote.visibility == 'specified'" icon="envelope"/>
</span> </span>
<span class="localOnly" v-if="appearNote.localOnly == true"><fa icon="heart"/></span> <span class="localOnly" v-if="appearNote.localOnly == true"><fa icon="heart"/></span>
</div> </div>
@ -70,7 +70,7 @@
<p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p> <p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p>
</button> </button>
<button v-if="['public', 'home'].includes(appearNote.visibility)" class="renoteButton" @click="renote()" :title="$t('renote')"> <button v-if="['public', 'home'].includes(appearNote.visibility)" class="renoteButton" @click="renote()" :title="$t('renote')">
<fa icon="retweet"/> <fa icon="retweet"/><p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p>
</button> </button>
<button v-else class="inhibitedButton"> <button v-else class="inhibitedButton">
<fa icon="ban"/> <fa icon="ban"/>

View File

@ -36,7 +36,7 @@
<mk-poll v-if="appearNote.poll" :note="appearNote" ref="pollViewer"/> <mk-poll v-if="appearNote.poll" :note="appearNote" ref="pollViewer"/>
<a class="location" v-if="appearNote.geo" :href="`https://maps.google.com/maps?q=${appearNote.geo.coordinates[1]},${appearNote.geo.coordinates[0]}`" target="_blank"><fa icon="map-marker-alt"/> 位置情報</a> <a class="location" v-if="appearNote.geo" :href="`https://maps.google.com/maps?q=${appearNote.geo.coordinates[1]},${appearNote.geo.coordinates[0]}`" target="_blank"><fa icon="map-marker-alt"/> 位置情報</a>
<div class="renote" v-if="appearNote.renote"><mk-note-preview :note="appearNote.renote" :mini="mini"/></div> <div class="renote" v-if="appearNote.renote"><mk-note-preview :note="appearNote.renote" :mini="mini"/></div>
<mk-url-preview v-for="url in urls" :url="url" :key="url" :mini="mini"/> <mk-url-preview v-for="url in urls" :url="url" :key="url" :mini="mini" :compact="compact"/>
</div> </div>
</div> </div>
<footer v-if="appearNote.deletedAt == null"> <footer v-if="appearNote.deletedAt == null">
@ -48,7 +48,7 @@
<p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p> <p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p>
</button> </button>
<button v-if="['public', 'home'].includes(appearNote.visibility)" class="renoteButton" @click="renote()" :title="$t('renote')"> <button v-if="['public', 'home'].includes(appearNote.visibility)" class="renoteButton" @click="renote()" :title="$t('renote')">
<fa icon="retweet"/> <fa icon="retweet"/><p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p>
</button> </button>
<button v-else class="inhibitedButton"> <button v-else class="inhibitedButton">
<fa icon="ban"/> <fa icon="ban"/>
@ -102,6 +102,11 @@ export default Vue.extend({
required: false, required: false,
default: false default: false
}, },
compact: {
type: Boolean,
required: false,
default: false
},
mini: { mini: {
type: Boolean, type: Boolean,
required: false, required: false,
@ -140,7 +145,7 @@ export default Vue.extend({
margin 0 margin 0
padding 0 padding 0
background var(--face) background var(--face)
border-bottom solid 1px var(--faceDivider) border-bottom solid var(--lineWidth) var(--faceDivider)
&.mini &.mini
font-size 13px font-size 13px
@ -261,7 +266,7 @@ export default Vue.extend({
> * > *
padding 16px padding 16px
border dashed 1px var(--quoteBorder) border dashed var(--lineWidth) var(--quoteBorder)
border-radius 8px border-radius 8px
> footer > footer

View File

@ -15,7 +15,7 @@
<!-- トランジションを有効にするとなぜかメモリリークする --> <!-- トランジションを有効にするとなぜかメモリリークする -->
<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notes" class="notes transition" tag="div" ref="notes"> <component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notes" class="notes transition" tag="div" ref="notes">
<template v-for="(note, i) in _notes"> <template v-for="(note, i) in _notes">
<x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)" ref="note"/> <x-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)" :compact="true" ref="note"/>
<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date"> <p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
<span><fa icon="angle-up"/>{{ note._datetext }}</span> <span><fa icon="angle-up"/>{{ note._datetext }}</span>
<span><fa icon="angle-down"/>{{ _notes[i + 1]._datetext }}</span> <span><fa icon="angle-down"/>{{ _notes[i + 1]._datetext }}</span>
@ -209,7 +209,7 @@ export default Vue.extend({
text-align center text-align center
color var(--dateDividerFg) color var(--dateDividerFg)
background var(--dateDividerBg) background var(--dateDividerBg)
border-bottom solid 1px var(--faceDivider) border-bottom solid var(--lineWidth) var(--faceDivider)
span span
margin 0 16px margin 0 16px
@ -233,7 +233,7 @@ export default Vue.extend({
text-align center text-align center
color #ccc color #ccc
background var(--face) background var(--face)
border-top solid 1px var(--faceDivider) border-top solid var(--lineWidth) var(--faceDivider)
border-bottom-left-radius 6px border-bottom-left-radius 6px
border-bottom-right-radius 6px border-bottom-right-radius 6px

View File

@ -248,7 +248,7 @@ export default Vue.extend({
padding 16px padding 16px
overflow-wrap break-word overflow-wrap break-word
font-size 12px font-size 12px
border-bottom solid 1px var(--faceDivider) border-bottom solid var(--lineWidth) var(--faceDivider)
&:last-child &:last-child
border-bottom none border-bottom none
@ -332,7 +332,7 @@ export default Vue.extend({
font-size 0.8em font-size 0.8em
color var(--dateDividerFg) color var(--dateDividerFg)
background var(--dateDividerBg) background var(--dateDividerBg)
border-bottom solid 1px var(--faceDivider) border-bottom solid var(--lineWidth) var(--faceDivider)
span span
margin 0 16px margin 0 16px
@ -345,7 +345,7 @@ export default Vue.extend({
width 100% width 100%
padding 16px padding 16px
color var(--text) color var(--text)
border-top solid 1px rgba(#000, 0.05) border-top solid var(--lineWidth) rgba(#000, 0.05)
&:hover &:hover
background rgba(#000, 0.025) background rgba(#000, 0.025)

View File

@ -50,7 +50,7 @@
<span v-if="visibility === 'public'"><fa icon="globe"/></span> <span v-if="visibility === 'public'"><fa icon="globe"/></span>
<span v-if="visibility === 'home'"><fa icon="home"/></span> <span v-if="visibility === 'home'"><fa icon="home"/></span>
<span v-if="visibility === 'followers'"><fa icon="unlock"/></span> <span v-if="visibility === 'followers'"><fa icon="unlock"/></span>
<span v-if="visibility === 'specified'"><fa icon="lock"/></span> <span v-if="visibility === 'specified'"><fa icon="envelope"/></span>
</button> </button>
<p class="text-count" :class="{ over: trimmedLength(text) > maxNoteTextLength }">{{ maxNoteTextLength - trimmedLength(text) }}</p> <p class="text-count" :class="{ over: trimmedLength(text) > maxNoteTextLength }">{{ maxNoteTextLength - trimmedLength(text) }}</p>
<ui-button primary :wait="posting" class="submit" :disabled="!canPost" @click="post"> <ui-button primary :wait="posting" class="submit" :disabled="!canPost" @click="post">
@ -77,6 +77,7 @@ import extractMentions from '../../../../../misc/extract-mentions';
export default Vue.extend({ export default Vue.extend({
i18n: i18n('desktop/views/components/post-form.vue'), i18n: i18n('desktop/views/components/post-form.vue'),
components: { components: {
XDraggable, XDraggable,
MkVisibilityChooser MkVisibilityChooser
@ -197,11 +198,11 @@ export default Vue.extend({
const mention = x.host ? `@${x.username}@${toASCII(x.host)}` : `@${x.username}`; const mention = x.host ? `@${x.username}@${toASCII(x.host)}` : `@${x.username}`;
// 自分は除外 // 自分は除外
if (this.$store.state.i.username == x.username && x.host == null) return; if (this.$store.state.i.username == x.username && x.host == null) continue;
if (this.$store.state.i.username == x.username && x.host == host) return; if (this.$store.state.i.username == x.username && x.host == host) continue;
// 重複は除外 // 重複は除外
if (this.text.indexOf(`${mention} `) != -1) return; if (this.text.indexOf(`${mention} `) != -1) continue;
this.text += `${mention} `; this.text += `${mention} `;
} }
@ -221,6 +222,12 @@ export default Vue.extend({
}); });
} }
// keep cw when reply
if (this.reply && this.reply.cw != null) {
this.useCw = true;
this.cw = this.reply.cw;
}
this.$nextTick(() => { this.$nextTick(() => {
// 書きかけの投稿を復元 // 書きかけの投稿を復元
if (!this.instant && !this.mention) { if (!this.instant && !this.mention) {
@ -381,7 +388,8 @@ export default Vue.extend({
setVisibility() { setVisibility() {
const w = this.$root.new(MkVisibilityChooser, { const w = this.$root.new(MkVisibilityChooser, {
source: this.$refs.visibilityButton source: this.$refs.visibilityButton,
currentVisibility: this.visibility
}); });
w.$once('chosen', v => { w.$once('chosen', v => {
this.applyVisibility(v); this.applyVisibility(v);

View File

@ -21,7 +21,14 @@ import i18n from '../../../i18n';
export default Vue.extend({ export default Vue.extend({
i18n: i18n('desktop/views/components/renote-form.vue'), i18n: i18n('desktop/views/components/renote-form.vue'),
props: ['note'],
props: {
note: {
type: Object,
required: true
}
},
data() { data() {
return { return {
wait: false, wait: false,
@ -29,6 +36,7 @@ export default Vue.extend({
visibility: this.$store.state.settings.defaultNoteVisibility visibility: this.$store.state.settings.defaultNoteVisibility
}; };
}, },
methods: { methods: {
ok(v: string) { ok(v: string) {
this.wait = true; this.wait = true;
@ -44,9 +52,11 @@ export default Vue.extend({
this.wait = false; this.wait = false;
}); });
}, },
cancel() { cancel() {
this.$emit('canceled'); this.$emit('canceled');
}, },
onQuote() { onQuote() {
this.quote = true; this.quote = true;
@ -54,6 +64,7 @@ export default Vue.extend({
(this.$refs.form as any).focus(); (this.$refs.form as any).focus();
}); });
}, },
onChildFormPosted() { onChildFormPosted() {
this.$emit('posted'); this.$emit('posted');
} }

View File

@ -7,16 +7,16 @@
<p>{{ $t('already-registered') }}</p> <p>{{ $t('already-registered') }}</p>
<ui-button @click="unregister">{{ $t('unregister') }}</ui-button> <ui-button @click="unregister">{{ $t('unregister') }}</ui-button>
</template> </template>
<div v-if="data"> <div v-if="data && !$store.state.i.twoFactorEnabled">
<ol> <ol>
<li>{{ $t('authenticator') }}<a href="https://support.google.com/accounts/answer/1066447" target="_blank">{{ $t('howtoinstall') }}</a></li> <li>{{ $t('authenticator') }}<a href="https://support.google.com/accounts/answer/1066447" target="_blank">{{ $t('howtoinstall') }}</a></li>
<li>{{ $t('scan') }}<br><img :src="data.qr"></li> <li>{{ $t('scan') }}<br><img :src="data.qr"></li>
<li>{{ $t('done') }}<br> <li>{{ $t('done') }}<br>
<input type="number" v-model="token" class="ui"> <ui-input v-model="token">{{ $t('token') }}</ui-input>
<ui-button primary @click="submit">{{ $t('submit') }}</ui-button> <ui-button primary @click="submit">{{ $t('submit') }}</ui-button>
</li> </li>
</ol> </ol>
<div class="ui info"><p><fa icon="info-circle"/>{{ $t('info') }}</p></div> <ui-info>{{ $t('info') }}</ui-info>
</div> </div>
</div> </div>
</template> </template>

View File

@ -19,13 +19,7 @@
<x-integration-settings/> <x-integration-settings/>
</div> </div>
<ui-card class="theme" v-show="page == 'theme'"> <x-theme class="theme" v-show="page == 'theme'"/>
<div slot="title"><fa icon="palette"/> {{ $t('theme') }}</div>
<section>
<x-theme/>
</section>
</ui-card>
<ui-card class="web" v-show="page == 'web'"> <ui-card class="web" v-show="page == 'web'">
<div slot="title"><fa icon="sliders-h"/> {{ $t('behaviour') }}</div> <div slot="title"><fa icon="sliders-h"/> {{ $t('behaviour') }}</div>
@ -86,8 +80,10 @@
</section> </section>
<section> <section>
<header>{{ $t('wallpaper') }}</header> <header>{{ $t('wallpaper') }}</header>
<ui-button @click="updateWallpaper">{{ $t('choose-wallpaper') }}</ui-button> <ui-horizon-group class="fit-bottom">
<ui-button @click="deleteWallpaper">{{ $t('delete-wallpaper') }}</ui-button> <ui-button @click="updateWallpaper">{{ $t('choose-wallpaper') }}</ui-button>
<ui-button @click="deleteWallpaper">{{ $t('delete-wallpaper') }}</ui-button>
</ui-horizon-group>
</section> </section>
<section> <section>
<header>{{ $t('navbar-position') }}</header> <header>{{ $t('navbar-position') }}</header>
@ -103,6 +99,12 @@
<ui-switch v-model="useShadow">{{ $t('use-shadow') }}</ui-switch> <ui-switch v-model="useShadow">{{ $t('use-shadow') }}</ui-switch>
<ui-switch v-model="roundedCorners">{{ $t('rounded-corners') }}</ui-switch> <ui-switch v-model="roundedCorners">{{ $t('rounded-corners') }}</ui-switch>
<ui-switch v-model="circleIcons">{{ $t('circle-icons') }}</ui-switch> <ui-switch v-model="circleIcons">{{ $t('circle-icons') }}</ui-switch>
<section>
<header>{{ $t('@.line-width') }}</header>
<ui-radio v-model="lineWidth" :value="0.5">{{ $t('@.line-width-thin') }}</ui-radio>
<ui-radio v-model="lineWidth" :value="1">{{ $t('@.line-width-normal') }}</ui-radio>
<ui-radio v-model="lineWidth" :value="2">{{ $t('@.line-width-thick') }}</ui-radio>
</section>
<ui-switch v-model="reduceMotion">{{ $t('@.reduce-motion') }}</ui-switch> <ui-switch v-model="reduceMotion">{{ $t('@.reduce-motion') }}</ui-switch>
<ui-switch v-model="contrastedAcct">{{ $t('contrasted-acct') }}</ui-switch> <ui-switch v-model="contrastedAcct">{{ $t('contrasted-acct') }}</ui-switch>
<ui-switch v-model="showFullAcct">{{ $t('@.show-full-acct') }}</ui-switch> <ui-switch v-model="showFullAcct">{{ $t('@.show-full-acct') }}</ui-switch>
@ -135,7 +137,7 @@
</section> </section>
<section> <section>
<ui-switch v-model="games_reversi_showBoardLabels">{{ $t('@.show-reversi-board-labels') }}</ui-switch> <ui-switch v-model="games_reversi_showBoardLabels">{{ $t('@.show-reversi-board-labels') }}</ui-switch>
<ui-switch v-model="games_reversi_useWhiteBlackStones">{{ $t('@.use-white-black-reversi-stones') }}</ui-switch> <ui-switch v-model="games_reversi_useAvatarStones">{{ $t('@.use-avatar-reversi-stones') }}</ui-switch>
</section> </section>
</ui-card> </ui-card>
@ -411,6 +413,11 @@ export default Vue.extend({
set(value) { this.$store.dispatch('settings/set', { key: 'roundedCorners', value }); } set(value) { this.$store.dispatch('settings/set', { key: 'roundedCorners', value }); }
}, },
lineWidth: {
get() { return this.$store.state.device.lineWidth; },
set(value) { this.$store.commit('device/set', { key: 'lineWidth', value }); }
},
fetchOnScroll: { fetchOnScroll: {
get() { return this.$store.state.settings.fetchOnScroll; }, get() { return this.$store.state.settings.fetchOnScroll; },
set(value) { this.$store.dispatch('settings/set', { key: 'fetchOnScroll', value }); } set(value) { this.$store.dispatch('settings/set', { key: 'fetchOnScroll', value }); }
@ -501,9 +508,9 @@ export default Vue.extend({
set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.showBoardLabels', value }); } set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.showBoardLabels', value }); }
}, },
games_reversi_useWhiteBlackStones: { games_reversi_useAvatarStones: {
get() { return this.$store.state.settings.games.reversi.useWhiteBlackStones; }, get() { return this.$store.state.settings.games.reversi.useAvatarStones; },
set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useWhiteBlackStones', value }); } set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useAvatarStones', value }); }
}, },
disableAnimatedMfm: { disableAnimatedMfm: {

View File

@ -173,7 +173,7 @@ export default Vue.extend({
<style lang="stylus" scoped> <style lang="stylus" scoped>
.mk-timeline-core .mk-timeline-core
> .mk-friends-maker > .mk-friends-maker
border-bottom solid 1px #eee border-bottom solid var(--lineWidth) #eee
</style> </style>

View File

@ -139,7 +139,6 @@ export default Vue.extend({
this.$root.new(Menu, { this.$root.new(Menu, {
source: this.$refs.listButton, source: this.$refs.listButton,
compact: false,
items: menu items: menu
}); });
}, },
@ -170,7 +169,6 @@ export default Vue.extend({
this.$root.new(Menu, { this.$root.new(Menu, {
source: this.$refs.tagButton, source: this.$refs.tagButton,
compact: false,
items: menu items: menu
}); });
} }
@ -189,7 +187,7 @@ export default Vue.extend({
padding 0 8px padding 0 8px
z-index 10 z-index 10
background var(--faceHeader) background var(--faceHeader)
box-shadow 0 1px var(--desktopTimelineHeaderShadow) box-shadow 0 var(--lineWidth) var(--desktopTimelineHeaderShadow)
> .buttons > .buttons
position absolute position absolute
@ -209,7 +207,7 @@ export default Vue.extend({
top -4px top -4px
right 4px right 4px
font-size 10px font-size 10px
color var(--primary) color var(--notificationIndicator)
&:hover &:hover
color var(--faceTextButtonHover) color var(--faceTextButtonHover)

View File

@ -227,7 +227,7 @@ export default Vue.extend({
font-size 0.8em font-size 0.8em
background $bgcolor background $bgcolor
border-radius 4px border-radius 4px
box-shadow 0 1px 4px rgba(#000, 0.25) box-shadow 0 var(--lineWidth) 4px rgba(#000, 0.25)
&:before &:before
content "" content ""
@ -261,7 +261,7 @@ export default Vue.extend({
& + ul & + ul
padding-top 10px padding-top 10px
border-top solid 1px var(--faceDivider) border-top solid var(--lineWidth) var(--faceDivider)
> li > li
display block display block

View File

@ -147,7 +147,7 @@ export default Vue.extend({
> [data-icon]:last-child > [data-icon]:last-child
margin-left 5px margin-left 5px
font-size 10px font-size 10px
color var(--primary) color var(--notificationIndicator)
@media (max-width 1100px) @media (max-width 1100px)
margin-left -5px margin-left -5px

View File

@ -90,7 +90,7 @@ export default Vue.extend({
margin-left -5px margin-left -5px
vertical-align super vertical-align super
font-size 10px font-size 10px
color var(--primary) color var(--notificationIndicator)
> .pop > .pop
$bgcolor = var(--face) $bgcolor = var(--face)

View File

@ -7,7 +7,8 @@
<router-link :to="user | userPage" class="name"> <router-link :to="user | userPage" class="name">
<mk-user-name :user="user"/> <mk-user-name :user="user"/>
</router-link> </router-link>
<span class="username">@{{ user | acct }}</span> <span class="username">@{{ user | acct }} <fa v-if="user.isLocked == true" class="locked" icon="lock" fixed-width/></span>
<div class="description"> <div class="description">
<misskey-flavored-markdown v-if="user.description" :text="user.description" :author="user" :i="$store.state.i" :custom-emojis="user.emojis"/> <misskey-flavored-markdown v-if="user.description" :text="user.description" :author="user" :i="$store.state.i" :custom-emojis="user.emojis"/>
</div> </div>
@ -75,6 +76,9 @@ export default Vue.extend({
display block display block
opacity 0.7 opacity 0.7
> .locked
opacity 0.8
> .description > .description
margin 8px 0 16px 0 margin 8px 0 16px 0

View File

@ -46,7 +46,7 @@ export default Vue.extend({
font-size 0.9em font-size 0.9em
font-weight bold font-weight bold
color var(--faceHeaderText) color var(--faceHeaderText)
box-shadow 0 1px rgba(#000, 0.07) box-shadow 0 var(--lineWidth) rgba(#000, 0.07)
> [data-icon] > [data-icon]
margin-right 6px margin-right 6px

View File

@ -240,7 +240,6 @@ export default Vue.extend({
showMenu() { showMenu() {
this.$root.new(Menu, { this.$root.new(Menu, {
source: this.$refs.menu, source: this.$refs.menu,
compact: false,
items: this.getMenu() items: this.getMenu()
}); });
}, },
@ -374,7 +373,7 @@ export default Vue.extend({
font-size 14px font-size 14px
color var(--faceHeaderText) color var(--faceHeaderText)
background var(--faceHeader) background var(--faceHeader)
box-shadow 0 1px rgba(#000, 0.15) box-shadow 0 var(--lineWidth) rgba(#000, 0.15)
cursor pointer cursor pointer
&, * &, *

View File

@ -18,6 +18,7 @@
:key="note.id" :key="note.id"
@update:note="onNoteUpdated(i, $event)" @update:note="onNoteUpdated(i, $event)"
:media-view="mediaView" :media-view="mediaView"
:compact="true"
:mini="true"/> :mini="true"/>
<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date"> <p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
<span><fa icon="angle-up"/>{{ note._datetext }}</span> <span><fa icon="angle-up"/>{{ note._datetext }}</span>
@ -214,7 +215,7 @@ export default Vue.extend({
text-align center text-align center
color var(--dateDividerFg) color var(--dateDividerFg)
background var(--dateDividerBg) background var(--dateDividerBg)
border-bottom solid 1px var(--faceDivider) border-bottom solid var(--lineWidth) var(--faceDivider)
span span
margin 0 16px margin 0 16px
@ -231,7 +232,7 @@ export default Vue.extend({
text-align center text-align center
color #ccc color #ccc
background var(--face) background var(--face)
border-top solid 1px var(--faceDivider) border-top solid var(--lineWidth) var(--faceDivider)
border-bottom-left-radius 6px border-bottom-left-radius 6px
border-bottom-right-radius 6px border-bottom-right-radius 6px

View File

@ -177,7 +177,7 @@ export default Vue.extend({
> .notifications > .notifications
> .notification:not(:last-child) > .notification:not(:last-child)
border-bottom solid 1px var(--faceDivider) border-bottom solid var(--lineWidth) var(--faceDivider)
> .date > .date
display block display block
@ -187,7 +187,7 @@ export default Vue.extend({
font-size 12px font-size 12px
color var(--dateDividerFg) color var(--dateDividerFg)
background var(--dateDividerBg) background var(--dateDividerBg)
border-bottom solid 1px var(--faceDivider) border-bottom solid var(--lineWidth) var(--faceDivider)
span span
margin 0 16px margin 0 16px
@ -200,7 +200,7 @@ export default Vue.extend({
width 100% width 100%
padding 16px padding 16px
color #555 color #555
border-top solid 1px rgba(#000, 0.05) border-top solid var(--lineWidth) rgba(#000, 0.05)
&:hover &:hover
background rgba(#000, 0.025) background rgba(#000, 0.025)

View File

@ -19,7 +19,7 @@
<span class="name"> <span class="name">
<mk-user-name :user="user"/> <mk-user-name :user="user"/>
</span> </span>
<span class="acct">@{{ user | acct }}</span> <span class="acct">@{{ user | acct }} <fa v-if="user.isLocked == true" class="locked" icon="lock" fixed-width/></span>
</div> </div>
</header> </header>
<div class="info"> <div class="info">
@ -169,6 +169,7 @@ export default Vue.extend({
this.$root.api('users/notes', { this.$root.api('users/notes', {
userId: this.user.id, userId: this.user.id,
fileType: image, fileType: image,
excludeNsfw: !this.$store.state.device.alwaysShowNsfw,
limit: 9, limit: 9,
untilDate: new Date().getTime() + 1000 * 86400 * 365 untilDate: new Date().getTime() + 1000 * 86400 * 365
}).then(notes => { }).then(notes => {
@ -336,7 +337,6 @@ export default Vue.extend({
this.$root.new(Menu, { this.$root.new(Menu, {
source: this.$refs.menu, source: this.$refs.menu,
compact: false,
items: menu items: menu
}); });
}, },
@ -412,6 +412,9 @@ export default Vue.extend({
opacity 0.7 opacity 0.7
text-shadow 0 0 8px #000 text-shadow 0 0 8px #000
> .locked
opacity 0.8
> .info > .info
padding 16px padding 16px
font-size 12px font-size 12px
@ -463,7 +466,7 @@ export default Vue.extend({
display grid display grid
grid-template-columns 2fr 2fr 2fr 1fr grid-template-columns 2fr 2fr 2fr 1fr
margin-top 8px margin-top 8px
border-top solid 1px var(--faceDivider) border-top solid var(--lineWidth) var(--faceDivider)
> div > div
padding 8px 8px 0 8px padding 8px 8px 0 8px

View File

@ -179,7 +179,6 @@ export default Vue.extend({
add() { add() {
this.$root.new(Menu, { this.$root.new(Menu, {
source: this.$refs.add, source: this.$refs.add,
compact: true,
items: [{ items: [{
icon: 'home', icon: 'home',
text: this.$t('@deck.home'), text: this.$t('@deck.home'),

View File

@ -29,9 +29,11 @@ export default Vue.extend({
'image/png', 'image/png',
'image/gif' 'image/gif'
]; ];
this.$root.api('users/notes', { this.$root.api('users/notes', {
userId: this.user.id, userId: this.user.id,
fileType: image, fileType: image,
excludeNsfw: !this.$store.state.device.alwaysShowNsfw,
limit: 9, limit: 9,
untilDate: new Date().getTime() + 1000 * 86400 * 365 untilDate: new Date().getTime() + 1000 * 86400 * 365
}).then(notes => { }).then(notes => {

View File

@ -35,7 +35,7 @@
<span class="signin" @click="signin">{{ $t('signin') }}</span> <span class="signin" @click="signin">{{ $t('signin') }}</span>
</p> </p>
<img src="/assets/ai.png" alt="" title="藍" class="char"> <img :src="meta.mascotImageUrl" alt="" title="藍" class="char">
</div> </div>
</div> </div>

View File

@ -124,6 +124,7 @@ import {
faMapMarker, faMapMarker,
faRobot, faRobot,
faHourglassHalf, faHourglassHalf,
faAlignLeft
} from '@fortawesome/free-solid-svg-icons'; } from '@fortawesome/free-solid-svg-icons';
import { import {
@ -255,6 +256,7 @@ library.add(
faMapMarker, faMapMarker,
faRobot, faRobot,
faHourglassHalf, faHourglassHalf,
faAlignLeft,
farBell, farBell,
farEnvelope, farEnvelope,
@ -413,6 +415,15 @@ export default (callback: (launch: (router: VueRouter) => [Vue, MiOS]) => void,
}); });
//#endregion //#endregion
//#region line width
document.documentElement.style.setProperty('--lineWidth', `${os.store.state.device.lineWidth}px`);
os.store.watch(s => {
return s.device.lineWidth;
}, v => {
document.documentElement.style.setProperty('--lineWidth', `${os.store.state.device.lineWidth}px`);
});
//#endregion
// Navigation hook // Navigation hook
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
next(os.store.state.navHook && os.store.state.navHook(to) ? false : undefined); next(os.store.state.navHook && os.store.state.navHook(to) ? false : undefined);

View File

@ -37,6 +37,7 @@
</div> </div>
<div class="menu"> <div class="menu">
<div> <div>
<ui-input readonly :value="file.url">URL</ui-input>
<ui-button link :href="`${file.url}?download`" :download="file.name"><fa icon="download"/> {{ $t('download') }}</ui-button> <ui-button link :href="`${file.url}?download`" :download="file.name"><fa icon="download"/> {{ $t('download') }}</ui-button>
<ui-button @click="rename"><fa icon="pencil-alt"/> {{ $t('rename') }}</ui-button> <ui-button @click="rename"><fa icon="pencil-alt"/> {{ $t('rename') }}</ui-button>
<ui-button @click="move"><fa :icon="['far', 'folder-open']"/> {{ $t('move') }}</ui-button> <ui-button @click="move"><fa :icon="['far', 'folder-open']"/> {{ $t('move') }}</ui-button>
@ -200,7 +201,7 @@ export default Vue.extend({
color #bf4633 color #bf4633
> .menu > .menu
padding 14px padding 0 14px 14px 14px
border-top solid 1px var(--faceDivider) border-top solid 1px var(--faceDivider)
> div > div

View File

@ -54,7 +54,7 @@
<span class="visibility" v-if="appearNote.visibility != 'public'"> <span class="visibility" v-if="appearNote.visibility != 'public'">
<fa v-if="appearNote.visibility == 'home'" icon="home"/> <fa v-if="appearNote.visibility == 'home'" icon="home"/>
<fa v-if="appearNote.visibility == 'followers'" icon="unlock"/> <fa v-if="appearNote.visibility == 'followers'" icon="unlock"/>
<fa v-if="appearNote.visibility == 'specified'" icon="lock"/> <fa v-if="appearNote.visibility == 'specified'" icon="envelope"/>
</span> </span>
<span class="localOnly" v-if="appearNote.localOnly == true"><fa icon="heart"/></span> <span class="localOnly" v-if="appearNote.localOnly == true"><fa icon="heart"/></span>
</div> </div>
@ -66,7 +66,7 @@
<p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p> <p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p>
</button> </button>
<button v-if="['public', 'home'].includes(appearNote.visibility)" @click="renote()" title="Renote"> <button v-if="['public', 'home'].includes(appearNote.visibility)" @click="renote()" title="Renote">
<fa icon="retweet"/> <fa icon="retweet"/><p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p>
</button> </button>
<button v-else> <button v-else>
<fa icon="ban"/> <fa icon="ban"/>

View File

@ -30,7 +30,7 @@
<mk-media-list :media-list="appearNote.files"/> <mk-media-list :media-list="appearNote.files"/>
</div> </div>
<mk-poll v-if="appearNote.poll" :note="appearNote" ref="pollViewer"/> <mk-poll v-if="appearNote.poll" :note="appearNote" ref="pollViewer"/>
<mk-url-preview v-for="url in urls" :url="url" :key="url"/> <mk-url-preview v-for="url in urls" :url="url" :key="url" :compact="compact"/>
<a class="location" v-if="appearNote.geo" :href="`https://maps.google.com/maps?q=${appearNote.geo.coordinates[1]},${appearNote.geo.coordinates[0]}`" target="_blank"><fa icon="map-marker-alt"/> {{ $t('location') }}</a> <a class="location" v-if="appearNote.geo" :href="`https://maps.google.com/maps?q=${appearNote.geo.coordinates[1]},${appearNote.geo.coordinates[0]}`" target="_blank"><fa icon="map-marker-alt"/> {{ $t('location') }}</a>
<div class="renote" v-if="appearNote.renote"><mk-note-preview :note="appearNote.renote"/></div> <div class="renote" v-if="appearNote.renote"><mk-note-preview :note="appearNote.renote"/></div>
</div> </div>
@ -44,7 +44,7 @@
<p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p> <p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p>
</button> </button>
<button v-if="['public', 'home'].includes(appearNote.visibility)" @click="renote()" title="Renote"> <button v-if="['public', 'home'].includes(appearNote.visibility)" @click="renote()" title="Renote">
<fa icon="retweet"/> <fa icon="retweet"/><p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p>
</button> </button>
<button v-else> <button v-else>
<fa icon="ban"/> <fa icon="ban"/>
@ -90,6 +90,11 @@ export default Vue.extend({
note: { note: {
type: Object, type: Object,
required: true required: true
},
compact: {
type: Boolean,
required: false,
default: false
} }
} }
}); });
@ -98,7 +103,7 @@ export default Vue.extend({
<style lang="stylus" scoped> <style lang="stylus" scoped>
.note .note
font-size 12px font-size 12px
border-bottom solid 1px var(--faceDivider) border-bottom solid var(--lineWidth) var(--faceDivider)
&:focus &:focus
z-index 1 z-index 1
@ -231,7 +236,7 @@ export default Vue.extend({
> * > *
padding 16px padding 16px
border dashed 1px var(--quoteBorder) border dashed var(--lineWidth) var(--quoteBorder)
border-radius 8px border-radius 8px
> .app > .app

View File

@ -15,7 +15,7 @@
<!-- トランジションを有効にするとなぜかメモリリークする --> <!-- トランジションを有効にするとなぜかメモリリークする -->
<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notes" class="transition" tag="div"> <component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notes" class="transition" tag="div">
<template v-for="(note, i) in _notes"> <template v-for="(note, i) in _notes">
<mk-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)"/> <mk-note :note="note" :key="note.id" @update:note="onNoteUpdated(i, $event)" :compact="true"/>
<p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date"> <p class="date" :key="note.id + '_date'" v-if="i != notes.length - 1 && note._date != _notes[i + 1]._date">
<span><fa icon="angle-up"/>{{ note._datetext }}</span> <span><fa icon="angle-up"/>{{ note._datetext }}</span>
<span><fa icon="angle-down"/>{{ _notes[i + 1]._datetext }}</span> <span><fa icon="angle-down"/>{{ _notes[i + 1]._datetext }}</span>
@ -210,7 +210,7 @@ export default Vue.extend({
font-size 0.9em font-size 0.9em
color var(--dateDividerFg) color var(--dateDividerFg)
background var(--dateDividerBg) background var(--dateDividerBg)
border-bottom solid 1px var(--faceDivider) border-bottom solid var(--lineWidth) var(--faceDivider)
span span
margin 0 16px margin 0 16px
@ -240,7 +240,7 @@ export default Vue.extend({
> footer > footer
text-align center text-align center
border-top solid 1px var(--faceDivider) border-top solid var(--lineWidth) var(--faceDivider)
&:empty &:empty
display none display none

View File

@ -152,7 +152,7 @@ export default Vue.extend({
> .notifications > .notifications
> .mk-notification:not(:last-child) > .mk-notification:not(:last-child)
border-bottom solid 1px var(--faceDivider) border-bottom solid var(--lineWidth) var(--faceDivider)
> .date > .date
display block display block
@ -162,7 +162,7 @@ export default Vue.extend({
font-size 0.8em font-size 0.8em
color var(--dateDividerFg) color var(--dateDividerFg)
background var(--dateDividerBg) background var(--dateDividerBg)
border-bottom solid 1px var(--faceDivider) border-bottom solid var(--lineWidth) var(--faceDivider)
span span
margin 0 16px margin 0 16px
@ -175,7 +175,7 @@ export default Vue.extend({
width 100% width 100%
padding 16px padding 16px
color var(--text) color var(--text)
border-top solid 1px rgba(#000, 0.05) border-top solid var(--lineWidth) rgba(#000, 0.05)
> [data-icon] > [data-icon]
margin-right 4px margin-right 4px

View File

@ -41,7 +41,7 @@
<span v-if="visibility === 'public'"><fa icon="globe"/></span> <span v-if="visibility === 'public'"><fa icon="globe"/></span>
<span v-if="visibility === 'home'"><fa icon="home"/></span> <span v-if="visibility === 'home'"><fa icon="home"/></span>
<span v-if="visibility === 'followers'"><fa icon="unlock"/></span> <span v-if="visibility === 'followers'"><fa icon="unlock"/></span>
<span v-if="visibility === 'specified'"><fa icon="lock"/></span> <span v-if="visibility === 'specified'"><fa icon="envelope"/></span>
</button> </button>
</footer> </footer>
<input ref="file" class="file" type="file" multiple="multiple" @change="onChangeFile"/> <input ref="file" class="file" type="file" multiple="multiple" @change="onChangeFile"/>
@ -187,11 +187,11 @@ export default Vue.extend({
const mention = x.host ? `@${x.username}@${toASCII(x.host)}` : `@${x.username}`; const mention = x.host ? `@${x.username}@${toASCII(x.host)}` : `@${x.username}`;
// 自分は除外 // 自分は除外
if (this.$store.state.i.username == x.username && x.host == null) return; if (this.$store.state.i.username == x.username && x.host == null) continue;
if (this.$store.state.i.username == x.username && x.host == host) return; if (this.$store.state.i.username == x.username && x.host == host) continue;
// 重複は除外 // 重複は除外
if (this.text.indexOf(`${mention} `) != -1) return; if (this.text.indexOf(`${mention} `) != -1) continue;
this.text += `${mention} `; this.text += `${mention} `;
} }
@ -211,6 +211,12 @@ export default Vue.extend({
}); });
} }
// keep cw when reply
if (this.reply && this.reply.cw != null) {
this.useCw = true;
this.cw = this.reply.cw;
}
this.focus(); this.focus();
this.$nextTick(() => { this.$nextTick(() => {
@ -301,7 +307,7 @@ export default Vue.extend({
setVisibility() { setVisibility() {
const w = this.$root.new(MkVisibilityChooser, { const w = this.$root.new(MkVisibilityChooser, {
source: this.$refs.visibilityButton, source: this.$refs.visibilityButton,
compact: true currentVisibility: this.visibility
}); });
w.$once('chosen', v => { w.$once('chosen', v => {
this.applyVisibility(v); this.applyVisibility(v);

View File

@ -159,7 +159,7 @@ export default Vue.extend({
left 8px left 8px
pointer-events none pointer-events none
font-size 10px font-size 10px
color var(--primary) color var(--notificationIndicator)
> button:last-child > button:last-child
display block display block

View File

@ -238,7 +238,7 @@ export default Vue.extend({
> i.circle > i.circle
margin-left 6px margin-left 6px
font-size 10px font-size 10px
color var(--primary) color var(--notificationIndicator)
> i:last-child > i:last-child
position absolute position absolute

View File

@ -225,7 +225,7 @@ main
> .badge > .badge
margin-left 6px margin-left 6px
font-size 10px font-size 10px
color var(--primary) color var(--notificationIndicator)
> .tl > .tl
max-width 680px max-width 680px
@ -248,7 +248,7 @@ main
.badge .badge
margin-left 6px margin-left 6px
font-size 10px font-size 10px
color var(--primary) color var(--notificationIndicator)
vertical-align middle vertical-align middle
</style> </style>

View File

@ -7,12 +7,7 @@
<div> <div>
<x-profile-editor/> <x-profile-editor/>
<ui-card> <x-theme/>
<div slot="title"><fa icon="palette"/> {{ $t('theme') }}</div>
<section>
<x-theme/>
</section>
</ui-card>
<ui-card> <ui-card>
<div slot="title"><fa icon="poll-h"/> {{ $t('design') }}</div> <div slot="title"><fa icon="poll-h"/> {{ $t('design') }}</div>
@ -20,6 +15,12 @@
<section> <section>
<ui-switch v-model="darkmode">{{ $t('dark-mode') }}</ui-switch> <ui-switch v-model="darkmode">{{ $t('dark-mode') }}</ui-switch>
<ui-switch v-model="circleIcons">{{ $t('circle-icons') }}</ui-switch> <ui-switch v-model="circleIcons">{{ $t('circle-icons') }}</ui-switch>
<section>
<header>{{ $t('@.line-width') }}</header>
<ui-radio v-model="lineWidth" :value="0.5">{{ $t('@.line-width-thin') }}</ui-radio>
<ui-radio v-model="lineWidth" :value="1">{{ $t('@.line-width-normal') }}</ui-radio>
<ui-radio v-model="lineWidth" :value="2">{{ $t('@.line-width-thick') }}</ui-radio>
</section>
<ui-switch v-model="reduceMotion">{{ $t('@.reduce-motion') }} ({{ $t('@.this-setting-is-this-device-only') }})</ui-switch> <ui-switch v-model="reduceMotion">{{ $t('@.reduce-motion') }} ({{ $t('@.this-setting-is-this-device-only') }})</ui-switch>
<ui-switch v-model="contrastedAcct">{{ $t('contrasted-acct') }}</ui-switch> <ui-switch v-model="contrastedAcct">{{ $t('contrasted-acct') }}</ui-switch>
<ui-switch v-model="showFullAcct">{{ $t('@.show-full-acct') }}</ui-switch> <ui-switch v-model="showFullAcct">{{ $t('@.show-full-acct') }}</ui-switch>
@ -33,7 +34,7 @@
<section> <section>
<ui-switch v-model="games_reversi_showBoardLabels">{{ $t('@.show-reversi-board-labels') }}</ui-switch> <ui-switch v-model="games_reversi_showBoardLabels">{{ $t('@.show-reversi-board-labels') }}</ui-switch>
<ui-switch v-model="games_reversi_useWhiteBlackStones">{{ $t('@.use-white-black-reversi-stones') }}</ui-switch> <ui-switch v-model="games_reversi_useAvatarStones">{{ $t('@.use-avatar-reversi-stones') }}</ui-switch>
</section> </section>
<section> <section>
@ -265,6 +266,11 @@ export default Vue.extend({
set(value) { this.$store.dispatch('settings/set', { key: 'circleIcons', value }); } set(value) { this.$store.dispatch('settings/set', { key: 'circleIcons', value }); }
}, },
lineWidth: {
get() { return this.$store.state.device.lineWidth; },
set(value) { this.$store.commit('device/set', { key: 'lineWidth', value }); }
},
contrastedAcct: { contrastedAcct: {
get() { return this.$store.state.settings.contrastedAcct; }, get() { return this.$store.state.settings.contrastedAcct; },
set(value) { this.$store.dispatch('settings/set', { key: 'contrastedAcct', value }); } set(value) { this.$store.dispatch('settings/set', { key: 'contrastedAcct', value }); }
@ -290,9 +296,9 @@ export default Vue.extend({
set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.showBoardLabels', value }); } set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.showBoardLabels', value }); }
}, },
games_reversi_useWhiteBlackStones: { games_reversi_useAvatarStones: {
get() { return this.$store.state.settings.games.reversi.useWhiteBlackStones; }, get() { return this.$store.state.settings.games.reversi.useAvatarStones; },
set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useWhiteBlackStones', value }); } set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useAvatarStones', value }); }
}, },
disableAnimatedMfm: { disableAnimatedMfm: {

View File

@ -208,7 +208,6 @@ export default Vue.extend({
this.$root.new(Menu, { this.$root.new(Menu, {
source: this.$refs.menu, source: this.$refs.menu,
compact: true,
items: menu items: menu
}); });
}, },

View File

@ -34,6 +34,7 @@ export default Vue.extend({
this.$root.api('users/notes', { this.$root.api('users/notes', {
userId: this.user.id, userId: this.user.id,
fileType: image, fileType: image,
excludeNsfw: !this.$store.state.device.alwaysShowNsfw,
limit: 9, limit: 9,
untilDate: new Date().getTime() + 1000 * 86400 * 365 untilDate: new Date().getTime() + 1000 * 86400 * 365
}).then(notes => { }).then(notes => {

View File

@ -40,7 +40,7 @@ const defaultSettings = {
games: { games: {
reversi: { reversi: {
showBoardLabels: false, showBoardLabels: false,
useWhiteBlackStones: false, useAvatarStones: true,
} }
} }
}; };
@ -52,6 +52,7 @@ const defaultDeviceSettings = {
darkmode: false, darkmode: false,
darkTheme: 'dark', darkTheme: 'dark',
lightTheme: 'light', lightTheme: 'light',
lineWidth: 1,
themes: [], themes: [],
enableSounds: true, enableSounds: true,
soundVolume: 0.5, soundVolume: 0.5,

View File

@ -15,13 +15,29 @@ export const darkTheme: Theme = require('../theme/dark.json5');
export const pinkTheme: Theme = require('../theme/pink.json5'); export const pinkTheme: Theme = require('../theme/pink.json5');
export const blackTheme: Theme = require('../theme/black.json5'); export const blackTheme: Theme = require('../theme/black.json5');
export const halloweenTheme: Theme = require('../theme/halloween.json5'); export const halloweenTheme: Theme = require('../theme/halloween.json5');
export const cafeTheme: Theme = require('../theme/cafe.json5');
export const japaneseSushiSetTheme: Theme = require('../theme/japanese-sushi-set.json5');
export const gruvboxDarkTheme: Theme = require('../theme/gruvbox-dark.json5');
export const monokaiTheme: Theme = require('../theme/monokai.json5');
export const colorfulTheme: Theme = require('../theme/colorful.json5');
export const rainyTheme: Theme = require('../theme/rainy.json5');
export const mauveTheme: Theme = require('../theme/mauve.json5');
export const grayTheme: Theme = require('../theme/gray.json5');
export const builtinThemes = [ export const builtinThemes = [
lightTheme, lightTheme,
darkTheme, darkTheme,
pinkTheme, pinkTheme,
blackTheme, blackTheme,
halloweenTheme halloweenTheme,
cafeTheme,
japaneseSushiSetTheme,
gruvboxDarkTheme,
monokaiTheme,
colorfulTheme,
rainyTheme,
mauveTheme,
grayTheme,
]; ];
export function applyTheme(theme: Theme, persisted = true) { export function applyTheme(theme: Theme, persisted = true) {
@ -85,12 +101,12 @@ function compile(theme: Theme): { [key: string]: string } {
props['primaryAlpha0' + i] = genValue(color); props['primaryAlpha0' + i] = genValue(color);
} }
for (let i = 1; i < 100; i++) { for (let i = 5; i < 100; i += 5) {
const color = primary.clone().lighten(i); const color = primary.clone().lighten(i);
props['primaryLighten' + i] = genValue(color); props['primaryLighten' + i] = genValue(color);
} }
for (let i = 1; i < 100; i++) { for (let i = 5; i < 100; i += 5) {
const color = primary.clone().darken(i); const color = primary.clone().darken(i);
props['primaryDarken' + i] = genValue(color); props['primaryDarken' + i] = genValue(color);
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

View File

@ -22,7 +22,7 @@ html, body
a a
text-decoration none text-decoration none
color var(--primary) color var(--link)
cursor pointer cursor pointer
&:hover &:hover
@ -33,7 +33,7 @@ a
@css { @css {
a { a {
tap-highlight-color: var(--primaryAlpha07) !important; tap-highlight-color: var(--linkTapHighlight) !important;
-webkit-tap-highlight-color: var(--primaryAlpha07) !important; -webkit-tap-highlight-color: var(--linkTapHighlight) !important;
} }
} }

View File

@ -0,0 +1,21 @@
{
id: '0ff48d43-aab3-46e7-ab12-8492110d2e2b',
name: 'Cafe',
author: 'syuilo',
base: 'light',
vars: {
primary: 'rgb(234, 154, 82)',
secondary: 'rgb(238, 236, 232)',
text: 'rgb(149, 143, 139)',
},
props: {
renoteGradient: '#ffe1c7',
renoteText: '$primary',
quoteBorder: '$primary',
mfmMention: '#56907b',
},
}

View File

@ -0,0 +1,23 @@
{
id: '2d066d6e-bd39-4f23-bd48-686d5c1c6ae8',
name: 'Colorful',
author: 'syuilo',
base: 'light',
vars: {
primary: 'rgb(255, 153, 64)',
secondary: 'rgb(255, 255, 255)',
text: 'rgb(108, 118, 128)',
},
props: {
bg: 'rgb(250, 250, 250)',
mfmMention: '#f07171',
mfmMentionForeground: '#fff',
mfmUrl: '#86b300',
mfmLink: '#399ee6',
mfmHashtag: '#fa8d3e'
},
}

View File

@ -24,6 +24,15 @@
scrollbarHandle: ':lighten<5<$secondary', scrollbarHandle: ':lighten<5<$secondary',
scrollbarHandleHover: ':lighten<10<$secondary', scrollbarHandleHover: ':lighten<10<$secondary',
link: '$primary',
linkTapHighlight: ':alpha<0.7<@link',
notificationIndicator: '$primary',
switchActive: '$primary',
switchActiveTrack: ':alpha<0.4<@switchActive',
radioActive: '$primary',
face: '$secondary', face: '$secondary',
faceText: '#fff', faceText: '#fff',
faceHeader: ':lighten<5<$secondary', faceHeader: ':lighten<5<$secondary',
@ -120,8 +129,10 @@
mfmTitleBg: 'rgba(0, 0, 0, 0.2)', mfmTitleBg: 'rgba(0, 0, 0, 0.2)',
mfmQuote: ':alpha<0.7<$text', mfmQuote: ':alpha<0.7<$text',
mfmQuoteLine: ':alpha<0.6<$text', mfmQuoteLine: ':alpha<0.6<$text',
mfmLink: '$primary', mfmUrl: '$primary',
mfmLink: '@mfmUrl',
mfmMention: '$primary', mfmMention: '$primary',
mfmMentionForeground: '@primaryForeground',
mfmHashtag: '$primary', mfmHashtag: '$primary',
suspendedInfoBg: '#611d1d', suspendedInfoBg: '#611d1d',

View File

@ -0,0 +1,21 @@
{
id: '56ff14eb-1e6d-4c0c-9e84-71eb156234e5',
name: 'Gray',
author: 'syuilo',
base: 'light',
vars: {
primary: '#C03233',
secondary: 'rgb(213, 213, 213)',
text: 'rgb(102, 102, 102)',
},
props: {
renoteGradient: '#bdbdbd',
renoteText: '$primary',
quoteBorder: '$primary',
desktopPostFormBg: '#ececec',
},
}

View File

@ -0,0 +1,29 @@
{
id: '0c6e70e2-a1ec-4053-9b1a-b6082fe016cb',
name: 'Gruvbox Dark',
author: 'syuilo',
base: 'dark',
vars: {
primary: 'rgb(215, 153, 33)',
secondary: 'rgb(40, 40, 40)',
text: 'rgb(235, 219, 178)',
},
props: {
renoteGradient: '#58581e',
renoteText: 'rgb(169, 174, 36)',
quoteBorder: 'rgb(169, 174, 36)',
mfmMention: 'rgb(177, 98, 134)',
mfmMentionForeground: '#fff',
mfmUrl: 'rgb(69, 133, 136)',
mfmLink: 'rgb(104, 157, 106)',
mfmHashtag: 'rgb(251, 73, 52)',
notificationIndicator: 'rgb(184, 187, 38)',
switchActive: 'rgb(254, 128, 25)',
radioActive: 'rgb(131, 165, 152)',
link: 'rgb(104, 157, 106)',
},
}

View File

@ -0,0 +1,20 @@
{
id: '2b0a0654-cdb4-4c9a-8244-736b647d3c2a',
name: 'Japanese Sushi Set',
author: 'noizenecio & syuilo',
base: 'dark',
vars: {
primary: 'rgb(234, 136, 50)',
secondary: 'rgb(34, 36, 42)',
text: 'rgb(221, 209, 203)',
},
props: {
renoteGradient: '#6d3d14',
renoteText: '$primary',
quoteBorder: '$primary',
},
}

View File

@ -24,6 +24,15 @@
scrollbarHandle: '#00000033', scrollbarHandle: '#00000033',
scrollbarHandleHover: '#00000066', scrollbarHandleHover: '#00000066',
link: '$primary',
linkTapHighlight: ':alpha<0.7<@link',
notificationIndicator: '$primary',
switchActive: '$primary',
switchActiveTrack: ':alpha<0.4<@switchActive',
radioActive: '$primary',
face: '$secondary', face: '$secondary',
faceText: '$text', faceText: '$text',
faceHeader: ':lighten<5<$secondary', faceHeader: ':lighten<5<$secondary',
@ -120,8 +129,10 @@
mfmTitleBg: 'rgba(0, 0, 0, 0.07)', mfmTitleBg: 'rgba(0, 0, 0, 0.07)',
mfmQuote: ':alpha<0.6<$text', mfmQuote: ':alpha<0.6<$text',
mfmQuoteLine: ':alpha<0.5<$text', mfmQuoteLine: ':alpha<0.5<$text',
mfmLink: '$primary', mfmUrl: '$primary',
mfmLink: '@mfmUrl',
mfmMention: '$primary', mfmMention: '$primary',
mfmMentionForeground: '@primaryForeground',
mfmHashtag: '$primary', mfmHashtag: '$primary',
suspendedInfoBg: '#ffdbdb', suspendedInfoBg: '#ffdbdb',

View File

@ -0,0 +1,20 @@
{
id: '252b2caf-86c2-4c3f-a73f-e1fc1cfa5298',
name: 'Mauve',
author: 'とわこ & syuilo',
base: 'dark',
vars: {
primary: 'rgb(133, 88, 150)',
secondary: 'rgb(54, 43, 59)',
text: 'rgb(229, 223, 231)',
},
props: {
renoteGradient: '#54415d',
renoteText: '$primary',
quoteBorder: '$primary',
},
}

View File

@ -0,0 +1,29 @@
{
id: 'fef11dc4-6b17-436e-b374-73282c44ddc0',
name: 'Monokai',
author: 'syuilo',
base: 'dark',
vars: {
primary: '#f92672',
secondary: '#272822',
text: '#f8f8f2',
},
props: {
renoteGradient: '#3f500f',
renoteText: '#a6e22e',
quoteBorder: '#a6e22e',
mfmMention: '#ae81ff',
mfmMentionForeground: '#fff',
mfmUrl: '#66d9ef',
mfmLink: '#e6db74',
mfmHashtag: '#fd971f',
notificationIndicator: '#66d9ef',
switchActive: 'rgb(166, 226, 46)',
radioActive: '#fd971f',
link: '#e6db74',
},
}

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