Compare commits
192 Commits
Author | SHA1 | Date | |
---|---|---|---|
3d62bd8007 | |||
7ad9560f53 | |||
c135d02895 | |||
0757f67bde | |||
c5dc25cb9e | |||
0fcf422dec | |||
21e801a325 | |||
183faf3b2a | |||
9fc66a2d1e | |||
12cf598e6b | |||
dd6cd6332c | |||
20ee2118ee | |||
1546160f6a | |||
dd77a6194e | |||
203fba0216 | |||
826a2466b7 | |||
273bc6507a | |||
2b13969b26 | |||
2f10ff1a2e | |||
1f52aea193 | |||
0a0e76679e | |||
845f3436cc | |||
f6a8c8cf76 | |||
af61a7a17f | |||
667ad8fe96 | |||
e1cc2394fa | |||
04e1e48f17 | |||
c417e2f4a1 | |||
02a27a8b12 | |||
d775e19059 | |||
35e7dca2bb | |||
6c4ea5e087 | |||
54a1e500e2 | |||
450ed2c471 | |||
bf97fcb2fd | |||
4edeae07a0 | |||
8e19e4d33b | |||
2a774c9414 | |||
6f50ed327d | |||
a51d384f19 | |||
e2b2e4633a | |||
46ec773128 | |||
1827a65874 | |||
1b4dd64cbe | |||
95b7d84025 | |||
137b081b8a | |||
76af9bbda7 | |||
17ab07ae9c | |||
4c4d06e49b | |||
5d9ef68f14 | |||
4689cf5591 | |||
58e7edf08a | |||
9c6c281ac3 | |||
2326d6208b | |||
cd4be4116b | |||
6697ca243c | |||
15ce89a88d | |||
4b13278a41 | |||
e01167fcab | |||
719ff26e79 | |||
2657328ac1 | |||
4b7cef239e | |||
49d9e51f72 | |||
40a5f79d76 | |||
9cfd0b7351 | |||
2223ecf890 | |||
06bad9c501 | |||
a479e65f3e | |||
a2e99e46b9 | |||
07a27cfb9a | |||
77f3a0d3a9 | |||
f9065943c5 | |||
d0aff4409d | |||
84ea1fbd4d | |||
d1d92be09a | |||
52b23af97e | |||
b76cd18dea | |||
cd3b30bf5c | |||
b87ebc6f9d | |||
4d7d119524 | |||
b4b6e9548d | |||
ebf9cd18c8 | |||
b1ccbb2deb | |||
562cd6ad0b | |||
a832672b59 | |||
309058f209 | |||
2a344dfbd8 | |||
866d4cd59a | |||
165350cca6 | |||
8c21b8a9a6 | |||
41e3a9a004 | |||
4dc6ec5387 | |||
96515c4544 | |||
b3637b5e8a | |||
43bcdf397e | |||
22c5db7121 | |||
1c6a8f8691 | |||
31b5175bb0 | |||
9add59aca9 | |||
16c65173c1 | |||
4f6ae4633f | |||
8aa1577713 | |||
5bd41704ae | |||
4d0b335748 | |||
5692ae59a1 | |||
84f1ce866b | |||
e68c6175ce | |||
0de11c3636 | |||
1f70657d4a | |||
73646aac9b | |||
e72c590c6b | |||
06e026b346 | |||
5621d5725c | |||
14d0a07b29 | |||
105fefd114 | |||
f81c10fe62 | |||
86a2aa42a4 | |||
42f5c3fe22 | |||
975740464c | |||
c57bffb142 | |||
d92a2cdb55 | |||
5b91463233 | |||
39eed3378f | |||
cf98d40a44 | |||
7d6436c90e | |||
0acf3a8f6d | |||
8b7324c8d3 | |||
a0b0d5dff7 | |||
bef0e36665 | |||
766e721ff3 | |||
93ad4b359e | |||
b3032ad84d | |||
4f76acd249 | |||
fcc4b2c704 | |||
12286f4915 | |||
193abfdbac | |||
0e13481eb4 | |||
b713cac4f1 | |||
2137c894ef | |||
f0d2ce4f19 | |||
e3a89d302f | |||
d01d2ef65e | |||
23c550acba | |||
b9db88f616 | |||
dee4a18d48 | |||
fa5073b042 | |||
9dda698dc8 | |||
99d0930fba | |||
a599524b5f | |||
5f34758e87 | |||
cdb8e41176 | |||
d8f3e9d4a3 | |||
da900439a3 | |||
ad0273ab99 | |||
8bbff90aca | |||
fcb3ba9947 | |||
23b3e33df6 | |||
9edac2cd74 | |||
fbe0d70661 | |||
8782a64b18 | |||
d3b81c3e00 | |||
fd816afcd0 | |||
ac423f1ef4 | |||
f11ebafe47 | |||
7947036af9 | |||
b722431720 | |||
295563caad | |||
26735815f1 | |||
c06a52c237 | |||
5678adf3b5 | |||
ac772dd389 | |||
2c4de8475f | |||
46facaf176 | |||
eea1b7fc63 | |||
f0e9386cd0 | |||
e4a4238b57 | |||
55e126998a | |||
608a30d37b | |||
7d22d6255d | |||
4e55436339 | |||
3adadc8a52 | |||
b525af822c | |||
bee8a5b065 | |||
f4d80122b3 | |||
2e8ea34413 | |||
7341d97a00 | |||
964b34bd3b | |||
64bb6daa43 | |||
0a1951f24c | |||
3985fe6b09 | |||
db71a5da62 | |||
d76e3e4853 |
@ -35,7 +35,7 @@ while :
|
||||
cat patreon.cache | \
|
||||
awk -F'\t' '{print $2,$1}' | \
|
||||
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 && \
|
||||
cat patreon.cache | \
|
||||
awk -F'\t' '{print $3,$1}' | \
|
||||
|
46
CHANGELOG.md
46
CHANGELOG.md
@ -1,6 +1,52 @@
|
||||
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
|
||||
-------
|
||||
* フォローしているユーザーからのフォローを自動承認するオプション
|
||||
|
40
README.md
40
README.md
@ -73,16 +73,14 @@ Please see [Contribution guide](./CONTRIBUTING.md).
|
||||
----------------------------------------------------------------
|
||||
<!-- PATREON_START -->
|
||||
<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/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/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/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/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/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/eyJoIjoxMDAsInciOjEwMH0%3D/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=GgJ_NmUB6_nnRNLVGUWjV-WX91On7BOu59LKncYV9fE%3D" alt="gutfuckllc"></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/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/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/eyJ3IjoyMDB9/patreon-media/p/user/12999811/5f349fafcce44dd1824a8b1ebbec4564/3?token-time=2145916800&token-hash=LtV2lRi3L2jOWMLwccr9qWYfPrFlzIo2jYZHKzHEb6k%3D" alt="Xeltica" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/3384329/8b713330cb27404ea6e9fac50ff96efe/1?token-time=2145916800&token-hash=Ch3iF81ZGP0LMo894Y9ajpLisgtE91SnxtZE7fxsgrM%3D" alt="べすれい" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12021162/963128bb8d14476dbd8407943db8f31a/1?token-time=2145916800&token-hash=1FlxS9MEgmNGH_RHUVHbO5hIXB5I1z0lvA33CTvYvjA%3D" alt="gutfuckllc" width="100"></td>
|
||||
</tr><tr>
|
||||
<td><a href="https://www.patreon.com/weepjp">weep</a></td>
|
||||
<td><a href="https://www.patreon.com/user?u=13376668">Arctic</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/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>
|
||||
</tr></table>
|
||||
<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://c8.patreon.com/2/100/12718187" alt="Peter G."></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/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/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/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/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/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/200/12718187" alt="Peter G." width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13039004/509d0c412eb14ae08d6a812a3054f7d6/1?token-time=2145916800&token-hash=2PsbFNw0tnubZzgSXD01R6hIgncfiElG7H7HX2Y3dyo%3D" alt="nemu" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/3?token-time=2145916800&token-hash=9JtETp0X8gI280Ne1E8bxn6j4Lw5o2k4mJkICx97V_k%3D" alt="YUKIMOCHI" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/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/eyJ3IjoyMDB9/patreon-media/p/user/13034746/c711c7f58e204ecfbc2fd646bc8a4eee/1?token-time=2145916800&token-hash=5T8XcaAf9Zyzfg3QubR06s_kJZkArVEM2dwObrBVAU4%3D" alt="Hiratake" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/10789744/97175095d8f04c0f86225ff47cb98d40/1?token-time=2145916800&token-hash=ubVARikVOg3v7NW6LDhtG-ClE1LTU3I2TJ3js2-5xDs%3D" alt="Naoki Hirayama" width="100"></td>
|
||||
</tr><tr>
|
||||
<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>
|
||||
@ -107,10 +105,10 @@ Please see [Contribution guide](./CONTRIBUTING.md).
|
||||
<td><a href="https://www.patreon.com/spinlock">Naoki Hirayama</a></td>
|
||||
</tr></table>
|
||||
<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/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/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/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/4503830/ccf2cc867ea64de0b524bb2e24b9a1cb/1?token-time=2145916800&token-hash=Ksk_2l3gjPDbnzMUOCSW1E-hdPJsNs2tSR4_RAakRK8%3D" alt="dansup" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/619786/32cf01444db24e578cd1982c197f6fc6/1?token-time=2145916800&token-hash=CXe9AqlZy9AsYfiWd3OBYVOzvODoN47Litz0Tu4BFpU%3D" alt="Gargron" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1?token-time=2145916800&token-hash=xhR1n6NAAyEb-IUXLD6_dshkFa3mefU5ZZuk1L8qKTs%3D" alt="Nokotaro Takeda" width="100"></td>
|
||||
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1?token-time=2145916800&token-hash=uR-48MQ0A4j0irQSrCAQZJ-sJUSs_Fkihlg3-l59b7c%3D" alt="Takashi Shibuya" width="100"></td>
|
||||
</tr><tr>
|
||||
<td><a href="https://www.patreon.com/dansup">dansup</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>
|
||||
</tr></table>
|
||||
|
||||
**Last updated:** Tue, 25 Dec 2018 04:58:06 UTC
|
||||
**Last updated:** Sun, 06 Jan 2019 21:53:06 UTC
|
||||
<!-- PATREON_END -->
|
||||
|
||||
: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).
|
||||
|
||||
|
@ -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`.
|
||||
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
|
||||
----------------------------------------------------------------
|
||||
|
67
docs/docker.fr.md
Normal file
67
docs/docker.fr.md
Normal 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
18
docs/manage.fr.md
Normal 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
|
||||
```
|
@ -109,7 +109,7 @@ common:
|
||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||
use-white-black-reversi-stones: "リバーシに白黒の石を使う"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "公式アカウント"
|
||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
@ -120,6 +120,10 @@ common:
|
||||
reduce-motion: "UIの動きを減らす"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "閲覧注意"
|
||||
click-to-show: "クリックして表示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@ -276,6 +281,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@ -331,6 +337,7 @@ common/views/components/nav.vue:
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "詳細"
|
||||
copy-content: "内容をコピー"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "お気に入り"
|
||||
unfavorite: "お気に入り解除"
|
||||
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "パスワードを入力してください"
|
||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
||||
howtoinstall: "インストール方法はこちら"
|
||||
token: "トークン"
|
||||
scan: "次に、表示されているQRコードをスキャンします:"
|
||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
||||
submit: "完了"
|
||||
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "動作"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
|
@ -109,7 +109,7 @@ common:
|
||||
my-token-regenerated: "Dein Token wurde generiert. Du wirst jetzt abgemeldet."
|
||||
i-like-sushi: "Ich bevorzuge Sushi anstelle von Pudding"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||
use-white-black-reversi-stones: "リバーシに白黒の石を使う"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "Verifizierter Benutzer"
|
||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
@ -120,6 +120,10 @@ common:
|
||||
reduce-motion: "Animationen der Benutzeroberfläche reduzieren"
|
||||
this-setting-is-this-device-only: "Nur auf diesem Gerät"
|
||||
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."
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "Dieser Inhalt ist NSFW"
|
||||
click-to-show: "Klicke zum den Inhalt anzusehen"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "Thema"
|
||||
dark-theme: "Thema während des Nachtmodus"
|
||||
light-themes: "Helles Thema"
|
||||
@ -276,6 +281,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "Basisthema"
|
||||
base-theme-light: "Hell"
|
||||
base-theme-dark: "Dunkel"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "Name des Themas"
|
||||
preview-created-theme: "Vorschau"
|
||||
invalid-theme: "Thema ist ungültig"
|
||||
@ -331,6 +337,7 @@ common/views/components/nav.vue:
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "詳細"
|
||||
copy-content: "内容をコピー"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "Diese Notiz favorisieren"
|
||||
unfavorite: "Aus Favoriten entfernen"
|
||||
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "Bitte Passwort eingeben"
|
||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
||||
howtoinstall: "インストール方法はこちら"
|
||||
token: "トークン"
|
||||
scan: "次に、表示されているQRコードをスキャンします:"
|
||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
||||
submit: "完了"
|
||||
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "動作"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
|
@ -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."
|
||||
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."
|
||||
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:
|
||||
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>."
|
||||
@ -109,7 +109,7 @@ common:
|
||||
my-token-regenerated: "Your token has been regenerated, so you will be signed out."
|
||||
i-like-sushi: "I prefer sushi rather than pudding"
|
||||
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"
|
||||
disable-animated-mfm: "Disable animated texts in a post"
|
||||
suggest-recent-hashtags: "Suggest recently used hashtags within the post composition area"
|
||||
@ -120,11 +120,15 @@ common:
|
||||
reduce-motion: "Reduce motion in UI"
|
||||
this-setting-is-this-device-only: "Only for this device"
|
||||
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."
|
||||
user-suspended: "This user has been suspended."
|
||||
is-remote-user: "This user information is copied."
|
||||
is-remote-post: "This post information is a copy."
|
||||
view-on-remote: "View it on remote"
|
||||
is-remote-user: "This user's information is mirrored."
|
||||
is-remote-post: "These post contents are mirrored."
|
||||
view-on-remote: "For completion, view it remotely."
|
||||
renoted-by: "Renoted by {user}"
|
||||
error:
|
||||
title: "Something happened :("
|
||||
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "NSFW"
|
||||
click-to-show: "Click to show"
|
||||
common/views/components/theme.vue:
|
||||
theme: "Theme"
|
||||
light-theme: "Theme"
|
||||
dark-theme: "Theme during dark mode"
|
||||
light-themes: "Light theme"
|
||||
@ -276,6 +281,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "Base theme"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "Find more themes"
|
||||
theme-name: "Theme name"
|
||||
preview-created-theme: "Preview"
|
||||
invalid-theme: "Not valid theme"
|
||||
@ -329,8 +335,9 @@ common/views/components/nav.vue:
|
||||
develop: "Developers"
|
||||
feedback: "Feedback"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "Mentions"
|
||||
mention: "Mention"
|
||||
detail: "Details"
|
||||
copy-content: "Copy the contents"
|
||||
copy-link: "Copy link"
|
||||
favorite: "Favorite this note"
|
||||
unfavorite: "Unfavorite"
|
||||
@ -497,8 +504,8 @@ common/views/widgets/calendar.vue:
|
||||
month: "{},"
|
||||
day: "{}"
|
||||
today: "Today: "
|
||||
this-month: "This month: "
|
||||
this-year: "This year: "
|
||||
this-month: "Month:"
|
||||
this-year: "Year:"
|
||||
common/views/widgets/photo-stream.vue:
|
||||
title: "Photo stream"
|
||||
no-photos: "No photos"
|
||||
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "Enter the password"
|
||||
authenticator: "First, you need to install Google Authenticator on your device:"
|
||||
howtoinstall: "How to install"
|
||||
token: "Token"
|
||||
scan: "And then, scan the QR code:"
|
||||
done: "Please enter the token displayed on your device:"
|
||||
submit: "Submit"
|
||||
@ -985,6 +993,7 @@ admin/views/instance.vue:
|
||||
instance-name: "Instance name"
|
||||
instance-description: "Instance description"
|
||||
host: "Host"
|
||||
logo-url: "Logo image URL"
|
||||
banner-url: "Banner image URL"
|
||||
error-image-url: "Error image URL"
|
||||
languages: "Language of this instance"
|
||||
@ -1058,7 +1067,7 @@ admin/views/charts.vue:
|
||||
federation: "Federation"
|
||||
notes: "Posts"
|
||||
users: "Users"
|
||||
drive: "Drive"
|
||||
drive: "Media storage"
|
||||
network: "Network"
|
||||
charts:
|
||||
federation-instances: "The number of instances: increase/decrease"
|
||||
@ -1432,7 +1441,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "Notification style"
|
||||
notification-position-bottom: "Bottom"
|
||||
notification-position-top: "Top"
|
||||
theme: "Theme"
|
||||
behavior: "Behavior"
|
||||
fetch-on-scroll: "Endless loading on scroll"
|
||||
note-visibility: "Post visibility"
|
||||
@ -1525,7 +1533,7 @@ deck/deck.user-column.vue:
|
||||
pinned-notes: "Pinned posts"
|
||||
push-to-a-list: "Add to list"
|
||||
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!"
|
||||
api:
|
||||
entities:
|
||||
|
@ -109,7 +109,7 @@ common:
|
||||
my-token-regenerated: "Tu token se ha regenerado vas a ser desconectado."
|
||||
i-like-sushi: "Prefiero sushi a pudín"
|
||||
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"
|
||||
disable-animated-mfm: "Desactivar texto animado en una publicación"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
@ -120,6 +120,10 @@ common:
|
||||
reduce-motion: "UIの動きを減らす"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
do-not-use-in-production: "Esto está en desarrollo, no usarlo para producción."
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "閲覧注意"
|
||||
click-to-show: "クリックして表示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@ -276,6 +281,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@ -331,6 +337,7 @@ common/views/components/nav.vue:
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "Detalles"
|
||||
copy-content: "内容をコピー"
|
||||
copy-link: "Copiar enlace"
|
||||
favorite: "Me gusta esta nota"
|
||||
unfavorite: "お気に入り解除"
|
||||
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "Escribe una contraseña"
|
||||
authenticator: "Primero, necesitas instalar Google Authenticator en tu dispositivo:"
|
||||
howtoinstall: "Cómo instalar"
|
||||
token: "トークン"
|
||||
scan: "Luego, escanea el código QR:"
|
||||
done: "Por favor ingresa el token mostrado en tu dispositivo:"
|
||||
submit: "Enviar"
|
||||
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "動作"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
|
@ -109,10 +109,10 @@ common:
|
||||
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"
|
||||
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 l’avatar comme pion dans Reversi"
|
||||
verified-user: "Compte vérifié"
|
||||
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-mark-nsfw: "Toujours marquer les notes ayant des attachements comme sensibles"
|
||||
show-full-acct: "Afficher l’adresse complète de l’utilisateur"
|
||||
@ -120,8 +120,12 @@ common:
|
||||
reduce-motion: "Réduire les animations dans l’interface utilisateur"
|
||||
this-setting-is-this-device-only: "Uniquement sur cet appareil"
|
||||
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 s’agit d’une 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-post: "Ceci est une publication distante."
|
||||
view-on-remote: " Consulter le profil complet"
|
||||
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "Contenu sensible"
|
||||
click-to-show: "Cliquer pour afficher"
|
||||
common/views/components/theme.vue:
|
||||
theme: "Thème"
|
||||
light-theme: "Thème en mode jour"
|
||||
dark-theme: "Thème en mode nuit"
|
||||
light-themes: "Thème clair"
|
||||
@ -276,6 +281,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "Thème de base"
|
||||
base-theme-light: "Clair"
|
||||
base-theme-dark: "Sombre"
|
||||
find-more-theme: "Obtenir d’autres thèmes"
|
||||
theme-name: "Nom du Thème"
|
||||
preview-created-theme: "Prévisualisation"
|
||||
invalid-theme: "Thème n’est pas valide."
|
||||
@ -299,7 +305,7 @@ common/views/components/cw-button.vue:
|
||||
show: "Voir plus"
|
||||
chars: "{count} caractères"
|
||||
files: "{count} fichiers"
|
||||
poll: "アンケート"
|
||||
poll: "Sondage"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "Trouver un utilisateur"
|
||||
you: "Vous"
|
||||
@ -329,8 +335,9 @@ common/views/components/nav.vue:
|
||||
develop: "Développeurs"
|
||||
feedback: "Suggestions"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
mention: "Mention"
|
||||
detail: "Détails"
|
||||
copy-content: "Copier le contenu"
|
||||
copy-link: "Copier le lien"
|
||||
favorite: "Mettre cette note en favoris"
|
||||
unfavorite: "Retirer des favoris"
|
||||
@ -406,10 +413,10 @@ common/views/components/stream-indicator.vue:
|
||||
reconnecting: "Reconnexion en cours"
|
||||
connected: "Connecté"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "通知"
|
||||
mark-as-read-all-notifications: "すべての通知を既読にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
|
||||
title: "Notifications"
|
||||
mark-as-read-all-notifications: "Marquer toutes les notifications comme lues"
|
||||
mark-as-read-all-unread-notes: "Marquer toutes les notes comme lues"
|
||||
mark-as-read-all-talk-messages: "Marquer toutes les conversations comme lues"
|
||||
auto-watch: "投稿の自動ウォッチ"
|
||||
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
|
||||
common/views/components/integration-settings.vue:
|
||||
@ -436,7 +443,7 @@ common/views/components/uploader.vue:
|
||||
common/views/components/visibility-chooser.vue:
|
||||
public: "Public"
|
||||
home: "Accueil"
|
||||
home-desc: "Publier sur le fil d'Accueil uniquement"
|
||||
home-desc: "Publier sur le fil d’Accueil uniquement"
|
||||
followers: "Abonnés"
|
||||
followers-desc: "Publier à vos abonnés uniquement"
|
||||
specified: "Direct"
|
||||
@ -474,7 +481,7 @@ common/views/components/profile-editor.vue:
|
||||
privacy: "Vie privée"
|
||||
save: "Mettre à jour le profil"
|
||||
saved: "Profil mis à jour avec succès"
|
||||
uploading: "En cours d'envoi…"
|
||||
uploading: "En cours d’envoi …"
|
||||
upload-failed: "Échec de l'envoi"
|
||||
email: "Paramètres de messagerie"
|
||||
email-address: "Adresse de courrier électronique"
|
||||
@ -540,7 +547,7 @@ common/views/widgets/tips.vue:
|
||||
tips-line24: "Misskey est fonctionnel depuis 2014"
|
||||
tips-line25: "Vous pouvez recevoir les notifications de Misskey dans un navigateur web compatible"
|
||||
common/views/pages/not-found.vue:
|
||||
page-not-found: "ページが見つかりませんでした"
|
||||
page-not-found: "La page demandée est introuvable !"
|
||||
common/views/pages/follow.vue:
|
||||
signed-in-as: "Connecté en tant que {}"
|
||||
following: "Suit"
|
||||
@ -676,12 +683,12 @@ desktop/views/components/note-detail.vue:
|
||||
location: "Géolocalisation"
|
||||
renote: "Republier"
|
||||
add-reaction: "Ajouter votre reaction"
|
||||
undo-reaction: "リアクション解除"
|
||||
undo-reaction: "Inverser la réaction"
|
||||
desktop/views/components/note.vue:
|
||||
reply: "Répondre"
|
||||
renote: "Partager"
|
||||
add-reaction: "Ajouter votre réaction"
|
||||
undo-reaction: "リアクション解除"
|
||||
undo-reaction: "Inverser la réaction"
|
||||
detail: "Détails"
|
||||
private: "Cette publication est privée"
|
||||
deleted: "Cette publication a été supprimée"
|
||||
@ -731,7 +738,7 @@ desktop/views/components/renote-form.vue:
|
||||
quote: "Citer..."
|
||||
cancel: "Annuler"
|
||||
renote: "Republier"
|
||||
renote-home: "Renote (Home)"
|
||||
renote-home: "Renote (accueil)"
|
||||
reposting: "Republication en cours…"
|
||||
success: "Republié !"
|
||||
failure: "La renote a échoué"
|
||||
@ -769,8 +776,8 @@ desktop/views/components/settings.vue:
|
||||
advanced: "Paramètres avancés"
|
||||
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."
|
||||
deck-nav: "デッキ内ナビゲーション"
|
||||
deck-nav-desc: "デッキを使用しているとき、ナビゲーションが発生する際にページ遷移を行わずに一時的なカラムで受けるようにします。"
|
||||
deck-nav: "Deck sans tansitions"
|
||||
deck-nav-desc: "Vous obtenez une colonne temporaire sans transitions dans la page pendant la navigation, lors de l’utilisation du Deck."
|
||||
deck-default: "Utiliser le Deck comme IU par défaut"
|
||||
display: "Affichage et design"
|
||||
customize: "Personnaliser l'Accueil"
|
||||
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "Entrez un mot de passe"
|
||||
authenticator: "Vous devez au préalable installer Google Authenticator sur votre appareil :"
|
||||
howtoinstall: "Comment installer"
|
||||
token: "Jeton"
|
||||
scan: "Ensuite, scannez le code QR affiché sur votre écran :"
|
||||
done: "Veuillez entrer le token qui s'affiche sur votre appareil :"
|
||||
submit: "Envoyer"
|
||||
@ -1050,7 +1058,7 @@ admin/views/instance.vue:
|
||||
serviceworker-info: "Devrait être activé pour les notifications push."
|
||||
vapid-publickey: "Clé Publique 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:
|
||||
title: "Graphe"
|
||||
per-day: "par jour"
|
||||
@ -1066,7 +1074,7 @@ admin/views/charts.vue:
|
||||
notes: "Nombre de publications : augmentation/diminution (combinés)"
|
||||
local-notes: "Nombre des publications : augmentation/diminution (Local)"
|
||||
remote-notes: "Nombre de publications : augmentation/diminution (distants)"
|
||||
notes-total: "Total des publications"
|
||||
notes-total: "Total des notes"
|
||||
users: "Nombre d’utilisateurs : augmentation/diminution"
|
||||
users-total: "Nombre total des utilisateurs"
|
||||
drive: "Capacité utilisée comme stockage : augmentation/diminution"
|
||||
@ -1166,7 +1174,7 @@ desktop/views/pages/welcome.vue:
|
||||
signup: "S'enregistrer"
|
||||
signin-button: "Se connecter"
|
||||
signup-button: "S'inscrire"
|
||||
timeline: "Fil d'actualité"
|
||||
timeline: "Fil d’actualité"
|
||||
announcements: "Notices"
|
||||
photos: "Images récentes"
|
||||
powered-by-misskey: "Propulsé par <b>Misskey</b>."
|
||||
@ -1223,7 +1231,7 @@ desktop/views/pages/user/user.header.vue:
|
||||
posts: "Notes"
|
||||
following: "Suit"
|
||||
followers: "Abonnés"
|
||||
mention: "メンション"
|
||||
mention: "Mentions"
|
||||
is-bot: "Ce compte est un Bot"
|
||||
years-old: "{age} ans"
|
||||
year: "/"
|
||||
@ -1347,7 +1355,7 @@ mobile/views/components/ui.header.vue:
|
||||
welcome-back: "Content de vous revoir ! "
|
||||
adjective: "M."
|
||||
mobile/views/components/ui.nav.vue:
|
||||
timeline: "Fil d'actualité"
|
||||
timeline: "Fil d’actualité"
|
||||
notifications: "Notifications"
|
||||
follow-requests: "Demandes d’abonnement"
|
||||
search: "Rechercher"
|
||||
@ -1361,7 +1369,7 @@ mobile/views/components/ui.nav.vue:
|
||||
about: "À propos de Misskey"
|
||||
mobile/views/components/user-timeline.vue:
|
||||
no-notes: "Il semble que cet utilisateur n’a 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:
|
||||
all: "Tout"
|
||||
known: "Vous connaissez"
|
||||
@ -1421,18 +1429,17 @@ mobile/views/pages/settings.vue:
|
||||
i-am-under-limited-internet: "J'ai un accès Internet limité"
|
||||
circle-icons: "Utiliser des icônes circulaires"
|
||||
contrasted-acct: "Nom d’utilisateur contrasté"
|
||||
timeline: "Fil d'actualité"
|
||||
timeline: "Fil d’actualité"
|
||||
show-reply-target: "Afficher les réponses"
|
||||
show-my-renotes: "Afficher mes partages"
|
||||
show-renoted-my-notes: "Afficher mes publications partagées"
|
||||
show-local-renotes: "Afficher les publications partagées localement"
|
||||
show-renoted-my-notes: "Afficher mes notes partagées"
|
||||
show-local-renotes: "Afficher les notes partagées localement"
|
||||
post-style: "Style de la publication"
|
||||
post-style-standard: "Standard"
|
||||
post-style-smart: "Intelligent"
|
||||
notification-position: "Style de notification"
|
||||
notification-position-bottom: "en bas"
|
||||
notification-position-top: "en haut"
|
||||
theme: "Thème"
|
||||
behavior: "Comportement"
|
||||
fetch-on-scroll: "Chargement lors du défilement"
|
||||
note-visibility: "Visibilité de la publication"
|
||||
@ -1463,7 +1470,7 @@ mobile/views/pages/user.vue:
|
||||
followers: "Abonnés"
|
||||
notes: "Notes"
|
||||
overview: "Aperçu"
|
||||
timeline: "Fil d'actualité"
|
||||
timeline: "Fil d’actualité"
|
||||
media: "Média"
|
||||
mute: "Mettre en sourdine"
|
||||
unmute: "Enlever la sourdine"
|
||||
@ -1518,7 +1525,7 @@ deck/deck.user-column.vue:
|
||||
posts: "Notes"
|
||||
following: "Suit"
|
||||
followers: "Abonnés"
|
||||
mention: "メンション"
|
||||
mention: "Mentions"
|
||||
images: "Images"
|
||||
activity: "Activité"
|
||||
timeline: "Fil d’actualité"
|
||||
|
@ -109,7 +109,7 @@ common:
|
||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||
use-white-black-reversi-stones: "リバーシに白黒の石を使う"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "公式アカウント"
|
||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
@ -120,6 +120,10 @@ common:
|
||||
reduce-motion: "UIの動きを減らす"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "閲覧注意"
|
||||
click-to-show: "クリックして表示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@ -276,6 +281,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@ -331,6 +337,7 @@ common/views/components/nav.vue:
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "詳細"
|
||||
copy-content: "内容をコピー"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "お気に入り"
|
||||
unfavorite: "お気に入り解除"
|
||||
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "パスワードを入力してください"
|
||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
||||
howtoinstall: "インストール方法はこちら"
|
||||
token: "トークン"
|
||||
scan: "次に、表示されているQRコードをスキャンします:"
|
||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
||||
submit: "完了"
|
||||
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "動作"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
|
@ -117,7 +117,7 @@ common:
|
||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||
use-white-black-reversi-stones: "リバーシに白黒の石を使う"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "公式アカウント"
|
||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
@ -128,6 +128,12 @@ common:
|
||||
reduce-motion: "UIの動きを減らす"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
hide-password: "パスワードを隠す"
|
||||
show-password: "パスワードを表示する"
|
||||
|
||||
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
@ -283,6 +289,7 @@ common/views/components/media-banner.vue:
|
||||
click-to-show: "クリックして表示"
|
||||
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@ -299,6 +306,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@ -361,6 +369,7 @@ common/views/components/nav.vue:
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "詳細"
|
||||
copy-content: "内容をコピー"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "お気に入り"
|
||||
unfavorite: "お気に入り解除"
|
||||
@ -952,6 +961,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "パスワードを入力してください"
|
||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
||||
howtoinstall: "インストール方法はこちら"
|
||||
token: "トークン"
|
||||
scan: "次に、表示されているQRコードをスキャンします:"
|
||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
||||
submit: "完了"
|
||||
@ -1245,6 +1255,14 @@ admin/views/users.vue:
|
||||
createdAtDesc: "登録日時が新しい順"
|
||||
updatedAtAsc: "更新日時が古い順"
|
||||
updatedAtDesc: "更新日時が新しい順"
|
||||
state:
|
||||
title: "状態"
|
||||
all: "すべて"
|
||||
admin: "管理者"
|
||||
moderator: "モデレーター"
|
||||
adminOrModerator: "管理者+モデレーター"
|
||||
verified: "公式アカウント"
|
||||
suspended: "凍結済み"
|
||||
origin:
|
||||
title: "オリジン"
|
||||
combined: "ローカル+リモート"
|
||||
@ -1258,6 +1276,8 @@ admin/views/moderators.vue:
|
||||
title: "モデレーターの登録"
|
||||
add: "登録"
|
||||
added: "モデレーターを登録しました"
|
||||
remove: "解除"
|
||||
removed: "モデレーター登録を解除しました"
|
||||
|
||||
admin/views/emoji.vue:
|
||||
add-emoji:
|
||||
@ -1627,7 +1647,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "動作"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
|
@ -109,7 +109,7 @@ common:
|
||||
my-token-regenerated: "あんさんのトークンが更新されたらしいわ。すまんがとりあえずサインアウトすんで。"
|
||||
i-like-sushi: "寿司(のほうがプリンよりむしろ)ウマい、タコ焼きはあらへんけど。"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示や!"
|
||||
use-white-black-reversi-stones: "リバーシに白黒の石を使う"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "アメちゃん付きアカウント"
|
||||
disable-animated-mfm: "投稿内のちょろちょろ動いてんのを止める"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
@ -120,6 +120,10 @@ common:
|
||||
reduce-motion: "UI、動き過ぎや、静かにしてや"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OSにもとから入っとる絵文字使う"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
do-not-use-in-production: "開発ビルドや。本番環境で使わんといて!知らんで!"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "見せたらあかん"
|
||||
click-to-show: "押してみ、見せたるわ"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "ナイトゲームちゃう時のテーマどないする?"
|
||||
dark-theme: "ナイトゲームの時のテーマどないする?"
|
||||
light-themes: "デイゲーム"
|
||||
@ -276,6 +281,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "この色が背景や!"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "試してみる"
|
||||
invalid-theme: "このテーマあかんわ、なんか間違うとる"
|
||||
@ -331,6 +337,7 @@ common/views/components/nav.vue:
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "もっと"
|
||||
copy-content: "内容をコピー"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "お気に入り"
|
||||
unfavorite: "お気に入りやめる"
|
||||
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "パスワードを入れてや"
|
||||
authenticator: "まず、Google Authenticatorとかのをつこてるデバイスにインストールしてや:"
|
||||
howtoinstall: "インストール方法はここやで"
|
||||
token: "トークン"
|
||||
scan: "んで、ここに出とるQRコードをスキャンしてな:"
|
||||
done: "最後にデバイスに表示されとるトークンを入力してな:"
|
||||
submit: "送信"
|
||||
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知どこ見せる?"
|
||||
notification-position-bottom: "ミナミの方"
|
||||
notification-position-top: "キタの方"
|
||||
theme: "テーマ"
|
||||
behavior: "動き"
|
||||
fetch-on-scroll: "スクロールしたらもっと見せてや"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
|
@ -109,7 +109,7 @@ common:
|
||||
my-token-regenerated: "당신의 토큰이 업데이트되었으므로 로그아웃합니다."
|
||||
i-like-sushi: "저는 (푸딩보다 차라리) 초밥이 좋아요"
|
||||
show-reversi-board-labels: "리버시 보드의 행과 열 레이블을 표시"
|
||||
use-white-black-reversi-stones: "리버시에 흑백 돌을 사용"
|
||||
use-avatar-reversi-stones: "리버시의 돌로 아바타를 사용"
|
||||
verified-user: "공식 계정"
|
||||
disable-animated-mfm: "글의 문자 애니메이션을 비활성화"
|
||||
suggest-recent-hashtags: "최근 해시태그를 글 작성란에 표시"
|
||||
@ -120,6 +120,10 @@ common:
|
||||
reduce-motion: "UI의 애니메이션 줄이기"
|
||||
this-setting-is-this-device-only: "이 장치만"
|
||||
use-os-default-emojis: "운영체제의 기본 이모지 사용"
|
||||
line-width: "선 두께"
|
||||
line-width-thin: "얇음"
|
||||
line-width-normal: "보통"
|
||||
line-width-thick: "두꺼움"
|
||||
do-not-use-in-production: "이것은 개발 빌드입니다. 프로덕션 환경에서 사용하지 마십시오."
|
||||
user-suspended: "이 사용자는 정지된 상태입니다."
|
||||
is-remote-user: "이 유저 정보는 복사본입니다."
|
||||
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "열람주의"
|
||||
click-to-show: "클릭하여 표시"
|
||||
common/views/components/theme.vue:
|
||||
theme: "테마"
|
||||
light-theme: "다크 모드가 아닐 때 사용하는 테마"
|
||||
dark-theme: "다크 모드일 때 사용하는 테마"
|
||||
light-themes: "밝은 테마"
|
||||
@ -276,6 +281,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "기본 테마"
|
||||
base-theme-light: "밝음"
|
||||
base-theme-dark: "어두움"
|
||||
find-more-theme: "그 외 테마 찾아보기"
|
||||
theme-name: "테마명"
|
||||
preview-created-theme: "미리보기"
|
||||
invalid-theme: "테마가 올바르지 않습니다."
|
||||
@ -331,6 +337,7 @@ common/views/components/nav.vue:
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "멘션"
|
||||
detail: "상세"
|
||||
copy-content: "내용 복사"
|
||||
copy-link: "링크 복사"
|
||||
favorite: "이 노트 즐겨찾기"
|
||||
unfavorite: "즐겨찾기에서 제거"
|
||||
@ -469,7 +476,7 @@ common/views/components/profile-editor.vue:
|
||||
is-bot: "이 계정은 Bot입니다"
|
||||
is-locked: "팔로우를 수동으로 승인"
|
||||
careful-bot: "Bot의 팔로우만 수동으로 승인"
|
||||
auto-accept-followed: "フォローしているユーザーからのフォローを自動承認する"
|
||||
auto-accept-followed: "팔로우중인 사용자로부터의 팔로우를 자동으로 승인"
|
||||
advanced: "기타"
|
||||
privacy: "프라이버시"
|
||||
save: "저장"
|
||||
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "비밀번호를 입력하여 주십시오"
|
||||
authenticator: "먼저, 가지고 계신 장치에 Google Authenticator를 설치해야 합니다:"
|
||||
howtoinstall: "설치 방법은 여기에 있습니다"
|
||||
token: "토큰"
|
||||
scan: "다음으로 표시되어 있는 QR 코드를 스캔합니다:"
|
||||
done: "사용중이신 장치에 표시된 토큰을 입력해주시면 마무리됩니다:"
|
||||
submit: "완료"
|
||||
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "알림 표시"
|
||||
notification-position-bottom: "아래"
|
||||
notification-position-top: "위"
|
||||
theme: "테마"
|
||||
behavior: "동작"
|
||||
fetch-on-scroll: "스크롤하여 자동으로 불러오기"
|
||||
note-visibility: "게시물의 공개 범위"
|
||||
|
@ -109,7 +109,7 @@ common:
|
||||
my-token-regenerated: "Je sleutel is gegenereerd; je wordt nu uitgelogd."
|
||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||
use-white-black-reversi-stones: "リバーシに白黒の石を使う"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "公式アカウント"
|
||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
@ -120,6 +120,10 @@ common:
|
||||
reduce-motion: "UIの動きを減らす"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "閲覧注意"
|
||||
click-to-show: "クリックして表示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@ -276,6 +281,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@ -331,6 +337,7 @@ common/views/components/nav.vue:
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "詳細"
|
||||
copy-content: "内容をコピー"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "Deze notitie toevoegen aan favorieten"
|
||||
unfavorite: "お気に入り解除"
|
||||
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "Voer het wachtwoord in"
|
||||
authenticator: "Installeer eerst Google Authenticator op je apparaat:"
|
||||
howtoinstall: "Hoe installeer ik dit?"
|
||||
token: "トークン"
|
||||
scan: "Scan daarna de QR-code:"
|
||||
done: "Voer de op je apparaat getoonde sleutel in:"
|
||||
submit: "Versturen"
|
||||
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "Gedrag"
|
||||
fetch-on-scroll: "Ophalen bij scrollen"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
|
@ -109,7 +109,7 @@ common:
|
||||
my-token-regenerated: "Ditt synbol har blitt generert. Du vil nå bli utlogget."
|
||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||
use-white-black-reversi-stones: "リバーシに白黒の石を使う"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "公式アカウント"
|
||||
disable-animated-mfm: "投稿内の動きのあるテキストを無効にする"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
@ -120,6 +120,10 @@ common:
|
||||
reduce-motion: "UIの動きを減らす"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "Sensitivt innhold"
|
||||
click-to-show: "クリックして表示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@ -276,6 +281,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Mørk"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "Tema navn"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@ -331,6 +337,7 @@ common/views/components/nav.vue:
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "Detaljer"
|
||||
copy-content: "内容をコピー"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "Merket som favoritt"
|
||||
unfavorite: "お気に入り解除"
|
||||
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "パスワードを入力してください"
|
||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
||||
howtoinstall: "インストール方法はこちら"
|
||||
token: "トークン"
|
||||
scan: "次に、表示されているQRコードをスキャンします:"
|
||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
||||
submit: "Send"
|
||||
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "Bunn"
|
||||
notification-position-top: "Topp"
|
||||
theme: "Utseende"
|
||||
behavior: "Oppførsel"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
|
@ -109,7 +109,7 @@ common:
|
||||
my-token-regenerated: "Twój token został wygenerowany. Zostaniesz wylogowany."
|
||||
i-like-sushi: "Wolę sushi od puddingu"
|
||||
show-reversi-board-labels: "Pokazuj podpisy wierszy i kolumn w Reversi"
|
||||
use-white-black-reversi-stones: "リバーシに白黒の石を使う"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "Zweryfikowane konto"
|
||||
disable-animated-mfm: "Wyłącz animowany tekst we wpisach"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
@ -120,11 +120,15 @@ common:
|
||||
reduce-motion: "Zredukuj ruch w UI"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
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: "これは開発ビルドです。本番環境で使用しないでください。"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "Informacje o użytkowniku są kopiowane."
|
||||
is-remote-post: "この投稿情報はコピーです。"
|
||||
view-on-remote: "正確な情報を見る"
|
||||
view-on-remote: "Dla dopełnienia, zobacz to zdalnie."
|
||||
renoted-by: "{user} udostępnił(a)"
|
||||
error:
|
||||
title: "Coś poszło nie tak"
|
||||
@ -257,10 +261,11 @@ common/views/components/connect-failed.troubleshooter.vue:
|
||||
flush: "Wyczyść pamięć podręczną"
|
||||
set-version: "Określ wersję"
|
||||
common/views/components/media-banner.vue:
|
||||
sensitive: "閲覧注意"
|
||||
click-to-show: "クリックして表示"
|
||||
sensitive: "NSFW"
|
||||
click-to-show: "Naciśnij aby wyświetlić"
|
||||
common/views/components/theme.vue:
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
theme: "Motyw"
|
||||
light-theme: "Motyw"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "Jasny Motyw"
|
||||
dark-themes: "Ciemny motyw"
|
||||
@ -276,21 +281,22 @@ common/views/components/theme.vue:
|
||||
base-theme: "Podstawowy motyw"
|
||||
base-theme-light: "Jasny"
|
||||
base-theme-dark: "Ciemny"
|
||||
find-more-theme: "Odkryj więcej motywów"
|
||||
theme-name: "Nazwa motywu"
|
||||
preview-created-theme: "Pokaż podgląd"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
invalid-theme: "Nieprawidłowy motyw"
|
||||
already-installed: "Ten motyw jest już zainstalowany"
|
||||
saved: "Zapisano"
|
||||
manage-themes: "Zarządzanie motywami"
|
||||
builtin-themes: "Standardowe motywy"
|
||||
my-themes: "Moje motywy"
|
||||
installed-themes: "Zainstalowane motywy"
|
||||
select-theme: "テーマを選択してください"
|
||||
select-theme: "Wybierz motyw"
|
||||
uninstall: "Odinstaluj"
|
||||
uninstalled: "\"{}\" został odinstalowany"
|
||||
author: "Author"
|
||||
desc: "Opis"
|
||||
export: "エクスポート"
|
||||
export: "Eksportuj"
|
||||
import: "Importuj"
|
||||
import-by-code: "lub wklej kod"
|
||||
theme-name-required: "Nazwa motywu jest obowiązkowa."
|
||||
@ -299,7 +305,7 @@ common/views/components/cw-button.vue:
|
||||
show: "Pokaż więcej"
|
||||
chars: "{count} znaków"
|
||||
files: "{count} plików"
|
||||
poll: "アンケート"
|
||||
poll: "Ankieta"
|
||||
common/views/components/messaging.vue:
|
||||
search-user: "Znajdź użytkownika"
|
||||
you: "Ty"
|
||||
@ -329,8 +335,9 @@ common/views/components/nav.vue:
|
||||
develop: "Autorzy"
|
||||
feedback: "Podziel się opinią"
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
mention: "Wspomnij"
|
||||
detail: "Szczegóły"
|
||||
copy-content: "内容をコピー"
|
||||
copy-link: "Skopiuj adres"
|
||||
favorite: "Dodaj do ulubionych"
|
||||
unfavorite: "Usuń z ulubionych"
|
||||
@ -406,7 +413,7 @@ common/views/components/stream-indicator.vue:
|
||||
reconnecting: "Ponowne łączenie"
|
||||
connected: "Połączono"
|
||||
common/views/components/notification-settings.vue:
|
||||
title: "通知"
|
||||
title: "Powiadomienia"
|
||||
mark-as-read-all-notifications: "すべての通知を既読にする"
|
||||
mark-as-read-all-unread-notes: "すべての投稿を既読にする"
|
||||
mark-as-read-all-talk-messages: "すべてのトークを既読にする"
|
||||
@ -415,7 +422,7 @@ common/views/components/notification-settings.vue:
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "サービス連携"
|
||||
connect: "Połącz"
|
||||
disconnect: "切断する"
|
||||
disconnect: "Rozłącz"
|
||||
connected-to: "次のアカウントに接続されています"
|
||||
common/views/components/github-setting.vue:
|
||||
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
|
||||
@ -546,7 +553,7 @@ common/views/pages/follow.vue:
|
||||
following: "Śledzisz"
|
||||
follow: "Śledź"
|
||||
request-pending: "Oczekiwanie na pozwolenie"
|
||||
follow-processing: "フォロー処理中"
|
||||
follow-processing: "Przetwarzanie śledzenia"
|
||||
follow-request: "Poproś o śledzenie"
|
||||
desktop:
|
||||
banner-crop-title: "バナーとして表示する部分を選択"
|
||||
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "Wprowadź hasło"
|
||||
authenticator: "Na początek musisz zainstalować Google Authenticator na swoim urządzeniu:"
|
||||
howtoinstall: "Jak zainstalować"
|
||||
token: "トークン"
|
||||
scan: "Później, zeskanuje ten kod QR:"
|
||||
done: "Wprowadź token wyświetlony na Twoim urządzeniu:"
|
||||
submit: "Wyślij"
|
||||
@ -901,7 +909,7 @@ desktop/views/components/sub-note-content.vue:
|
||||
poll: "Ankieta"
|
||||
desktop/views/components/settings.tags.vue:
|
||||
title: "Tagi"
|
||||
query: "クエリ (省略可)"
|
||||
query: "Zapytanie (opcjonalne)"
|
||||
add: "Dodaj"
|
||||
save: "Zapisz"
|
||||
desktop/views/components/taskmanager.vue:
|
||||
@ -1223,7 +1231,7 @@ desktop/views/pages/user/user.header.vue:
|
||||
posts: "Wpisy"
|
||||
following: "Śledzeni"
|
||||
followers: "Śledzący"
|
||||
mention: "メンション"
|
||||
mention: "Wspomnij"
|
||||
is-bot: "To konto jest botem"
|
||||
years-old: "{age} lat"
|
||||
year: "/"
|
||||
@ -1233,7 +1241,7 @@ desktop/views/pages/user/user.timeline.vue:
|
||||
default: "Wpisy"
|
||||
with-replies: "Wpisy i odpowiedzi"
|
||||
with-media: "Multimedia"
|
||||
my-posts: "私の投稿"
|
||||
my-posts: "Moje wpisy"
|
||||
empty: "Ten użytkownik nie umieścił jeszcze niczego."
|
||||
desktop/views/widgets/messaging.vue:
|
||||
title: "Wiadomości"
|
||||
@ -1297,7 +1305,7 @@ common/views/components/follow-button.vue:
|
||||
following: "フォロー中"
|
||||
follow: "Śledź"
|
||||
request-pending: "フォロー許可待ち"
|
||||
follow-processing: "フォロー処理中"
|
||||
follow-processing: "Przetwarzanie"
|
||||
follow-request: "Poproś o śledzenie"
|
||||
mobile/views/components/friends-maker.vue:
|
||||
title: "Zacznij śledzić ludzi takich jak Ty"
|
||||
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "Dół"
|
||||
notification-position-top: "Góra"
|
||||
theme: "Motyw"
|
||||
behavior: "Zachowanie"
|
||||
fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół"
|
||||
note-visibility: "Widoczność wpisów"
|
||||
@ -1518,7 +1525,7 @@ deck/deck.user-column.vue:
|
||||
posts: "Wpisy"
|
||||
following: "Śledzeni"
|
||||
followers: "Śledzący"
|
||||
mention: "メンション"
|
||||
mention: "Wspomnij"
|
||||
images: "Zdjęcia"
|
||||
activity: "Aktywność"
|
||||
timeline: "Oś czasu"
|
||||
|
@ -109,7 +109,7 @@ common:
|
||||
my-token-regenerated: "Seu token foi recriado, portanto você foi deslogado."
|
||||
i-like-sushi: "Eu prefiro sushi a pudim"
|
||||
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"
|
||||
disable-animated-mfm: "Desativar texto animado nas publicações"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
@ -120,6 +120,10 @@ common:
|
||||
reduce-motion: "UIの動きを減らす"
|
||||
this-setting-is-this-device-only: "このデバイスのみ"
|
||||
use-os-default-emojis: "OS標準の絵文字を使用"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
do-not-use-in-production: "これは開発ビルドです。本番環境で使用しないでください。"
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "閲覧注意"
|
||||
click-to-show: "クリックして表示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@ -276,6 +281,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@ -331,6 +337,7 @@ common/views/components/nav.vue:
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "詳細"
|
||||
copy-content: "内容をコピー"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "お気に入り"
|
||||
unfavorite: "お気に入り解除"
|
||||
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "パスワードを入力してください"
|
||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
||||
howtoinstall: "インストール方法はこちら"
|
||||
token: "トークン"
|
||||
scan: "次に、表示されているQRコードをスキャンします:"
|
||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
||||
submit: "完了"
|
||||
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "動作"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
|
@ -109,7 +109,7 @@ common:
|
||||
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
|
||||
i-like-sushi: "私は(プリンよりむしろ)寿司が好き"
|
||||
show-reversi-board-labels: "リバーシのボードの行と列のラベルを表示"
|
||||
use-white-black-reversi-stones: "リバーシに白黒の石を使う"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "公式アカウント"
|
||||
disable-animated-mfm: "Отключить анимированный текст в постах"
|
||||
suggest-recent-hashtags: "最近のハッシュタグを投稿フォームに表示する"
|
||||
@ -120,6 +120,10 @@ common:
|
||||
reduce-motion: "Уменьшить движение в интерфейсе"
|
||||
this-setting-is-this-device-only: "Только для этого устройства"
|
||||
use-os-default-emojis: "Использовать стандартные Emoji из ОС"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
do-not-use-in-production: "Эта сборка для разработчиков. Не используйте в продакшне."
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "このユーザー情報はコピーです。"
|
||||
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "閲覧注意"
|
||||
click-to-show: "クリックして表示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "非ダークモード時に使用するテーマ"
|
||||
dark-theme: "ダークモード時に使用するテーマ"
|
||||
light-themes: "明るいテーマ"
|
||||
@ -276,6 +281,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "ベーステーマ"
|
||||
base-theme-light: "Light"
|
||||
base-theme-dark: "Dark"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "テーマ名"
|
||||
preview-created-theme: "プレビュー"
|
||||
invalid-theme: "テーマが正しくありません。"
|
||||
@ -331,6 +337,7 @@ common/views/components/nav.vue:
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "詳細"
|
||||
copy-content: "内容をコピー"
|
||||
copy-link: "リンクをコピー"
|
||||
favorite: "お気に入り"
|
||||
unfavorite: "お気に入り解除"
|
||||
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "パスワードを入力してください"
|
||||
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
|
||||
howtoinstall: "インストール方法はこちら"
|
||||
token: "トークン"
|
||||
scan: "次に、表示されているQRコードをスキャンします:"
|
||||
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
|
||||
submit: "完了"
|
||||
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知の表示"
|
||||
notification-position-bottom: "下"
|
||||
notification-position-top: "上"
|
||||
theme: "テーマ"
|
||||
behavior: "動作"
|
||||
fetch-on-scroll: "スクロールで自動読み込み"
|
||||
note-visibility: "投稿の公開範囲"
|
||||
|
@ -109,7 +109,7 @@ common:
|
||||
my-token-regenerated: "您的 Token 已被重置, 您将自动登出。"
|
||||
i-like-sushi: "相比于布丁来说, 我更喜欢寿司。"
|
||||
show-reversi-board-labels: "在 Reversi 中显示行和列表签"
|
||||
use-white-black-reversi-stones: "リバーシに白黒の石を使う"
|
||||
use-avatar-reversi-stones: "リバーシの石にアバターを使う"
|
||||
verified-user: "认证用户"
|
||||
disable-animated-mfm: "在帖子中禁用动画文本"
|
||||
suggest-recent-hashtags: "在帖子表单上显示最近流行的主题标签"
|
||||
@ -120,6 +120,10 @@ common:
|
||||
reduce-motion: "减弱UI中的动画效果"
|
||||
this-setting-is-this-device-only: "设置仅在本设备中生效"
|
||||
use-os-default-emojis: "使用设备系统默认的 emojis"
|
||||
line-width: "線の太さ"
|
||||
line-width-thin: "細い"
|
||||
line-width-normal: "普通"
|
||||
line-width-thick: "太い"
|
||||
do-not-use-in-production: "这是一个开发者测试版. 请勿在生产环境中使用."
|
||||
user-suspended: "このユーザーは凍結されています。"
|
||||
is-remote-user: "该用户的信息已被复制."
|
||||
@ -260,6 +264,7 @@ common/views/components/media-banner.vue:
|
||||
sensitive: "阅读注意"
|
||||
click-to-show: "点击以显示"
|
||||
common/views/components/theme.vue:
|
||||
theme: "テーマ"
|
||||
light-theme: "主题"
|
||||
dark-theme: "黑暗模式主题"
|
||||
light-themes: "明亮主题"
|
||||
@ -276,6 +281,7 @@ common/views/components/theme.vue:
|
||||
base-theme: "基础主题"
|
||||
base-theme-light: "亮"
|
||||
base-theme-dark: "暗"
|
||||
find-more-theme: "その他のテーマを入手"
|
||||
theme-name: "主题名称"
|
||||
preview-created-theme: "预览"
|
||||
invalid-theme: "无效主题"
|
||||
@ -331,6 +337,7 @@ common/views/components/nav.vue:
|
||||
common/views/components/note-menu.vue:
|
||||
mention: "メンション"
|
||||
detail: "详细信息"
|
||||
copy-content: "内容をコピー"
|
||||
copy-link: "复制链接"
|
||||
favorite: "收藏这个投稿"
|
||||
unfavorite: "取消收藏"
|
||||
@ -849,6 +856,7 @@ desktop/views/components/settings.2fa.vue:
|
||||
enter-password: "请输入您的密码"
|
||||
authenticator: "首先,您需要在设备上安装 Google Authenticator:"
|
||||
howtoinstall: "怎样安装"
|
||||
token: "トークン"
|
||||
scan: "然后,扫描二维码:"
|
||||
done: "请输入显示在您设备上的密钥:"
|
||||
submit: "提交"
|
||||
@ -1432,7 +1440,6 @@ mobile/views/pages/settings.vue:
|
||||
notification-position: "通知形式"
|
||||
notification-position-bottom: "底部"
|
||||
notification-position-top: "顶部"
|
||||
theme: "主题"
|
||||
behavior: "动作"
|
||||
fetch-on-scroll: "滚动无限加载"
|
||||
note-visibility: "帖子可见性"
|
||||
|
46
package.json
46
package.json
@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "misskey",
|
||||
"author": "syuilo <i@syuilo.com>",
|
||||
"version": "10.70.0",
|
||||
"clientVersion": "2.0.13176",
|
||||
"version": "10.75.0",
|
||||
"clientVersion": "2.0.13368",
|
||||
"codename": "nighthike",
|
||||
"main": "./built/index.js",
|
||||
"private": true,
|
||||
@ -20,21 +20,21 @@
|
||||
"format": "gulp format"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-svg-core": "1.2.8",
|
||||
"@fortawesome/free-brands-svg-icons": "5.6.0",
|
||||
"@fortawesome/fontawesome-svg-core": "1.2.12",
|
||||
"@fortawesome/free-brands-svg-icons": "5.6.3",
|
||||
"@fortawesome/free-regular-svg-icons": "5.5.0",
|
||||
"@fortawesome/free-solid-svg-icons": "5.6.3",
|
||||
"@fortawesome/vue-fontawesome": "0.1.2",
|
||||
"@koa/cors": "2.2.2",
|
||||
"@koa/cors": "2.2.3",
|
||||
"@prezzemolo/rap": "0.1.2",
|
||||
"@prezzemolo/zip": "0.0.3",
|
||||
"@types/bcryptjs": "2.4.2",
|
||||
"@types/chai-http": "3.0.5",
|
||||
"@types/dateformat": "1.0.1",
|
||||
"@types/dateformat": "3.0.0",
|
||||
"@types/debug": "0.0.31",
|
||||
"@types/deep-equal": "1.0.1",
|
||||
"@types/double-ended-queue": "2.1.0",
|
||||
"@types/elasticsearch": "5.0.29",
|
||||
"@types/elasticsearch": "5.0.30",
|
||||
"@types/file-type": "10.6.0",
|
||||
"@types/gulp": "3.8.36",
|
||||
"@types/gulp-mocha": "0.0.32",
|
||||
@ -46,7 +46,7 @@
|
||||
"@types/is-url": "1.2.28",
|
||||
"@types/js-yaml": "3.11.4",
|
||||
"@types/katex": "0.5.0",
|
||||
"@types/koa": "2.0.47",
|
||||
"@types/koa": "2.0.48",
|
||||
"@types/koa-bodyparser": "5.0.2",
|
||||
"@types/koa-compress": "2.0.8",
|
||||
"@types/koa-favicon": "2.0.19",
|
||||
@ -62,7 +62,7 @@
|
||||
"@types/mocha": "5.2.5",
|
||||
"@types/mongodb": "3.1.14",
|
||||
"@types/ms": "0.7.30",
|
||||
"@types/node": "10.12.10",
|
||||
"@types/node": "10.12.18",
|
||||
"@types/nodemailer": "4.6.5",
|
||||
"@types/oauth": "0.9.1",
|
||||
"@types/parsimmon": "1.10.0",
|
||||
@ -70,13 +70,13 @@
|
||||
"@types/pug": "2.0.4",
|
||||
"@types/qrcode": "1.3.0",
|
||||
"@types/ratelimiter": "2.1.28",
|
||||
"@types/redis": "2.8.8",
|
||||
"@types/redis": "2.8.10",
|
||||
"@types/request": "2.48.1",
|
||||
"@types/request-promise-native": "1.0.15",
|
||||
"@types/rimraf": "2.0.2",
|
||||
"@types/seedrandom": "2.4.27",
|
||||
"@types/sharp": "0.21.0",
|
||||
"@types/showdown": "1.7.5",
|
||||
"@types/showdown": "1.9.0",
|
||||
"@types/speakeasy": "2.0.3",
|
||||
"@types/systeminformation": "3.23.1",
|
||||
"@types/tinycolor2": "1.4.1",
|
||||
@ -87,7 +87,7 @@
|
||||
"@types/websocket": "0.0.40",
|
||||
"@types/ws": "6.0.1",
|
||||
"animejs": "2.2.0",
|
||||
"apexcharts": "2.4.2",
|
||||
"apexcharts": "2.5.1",
|
||||
"autobind-decorator": "2.4.0",
|
||||
"autosize": "4.0.2",
|
||||
"autwh": "0.1.0",
|
||||
@ -111,12 +111,12 @@
|
||||
"elasticsearch": "15.2.0",
|
||||
"emojilib": "2.4.0",
|
||||
"escape-regexp": "0.0.1",
|
||||
"eslint": "5.8.0",
|
||||
"eslint-plugin-vue": "4.7.1",
|
||||
"eslint": "5.11.1",
|
||||
"eslint-plugin-vue": "5.0.0",
|
||||
"eventemitter3": "3.1.0",
|
||||
"feed": "2.0.2",
|
||||
"file-loader": "2.0.0",
|
||||
"file-type": "10.6.0",
|
||||
"file-type": "10.7.0",
|
||||
"fuckadblock": "3.2.1",
|
||||
"gulp": "3.9.1",
|
||||
"gulp-cssnano": "2.1.3",
|
||||
@ -155,18 +155,19 @@
|
||||
"koa-slow": "2.1.0",
|
||||
"koa-views": "6.1.4",
|
||||
"langmap": "0.0.16",
|
||||
"loader-utils": "1.1.0",
|
||||
"loader-utils": "1.2.3",
|
||||
"lookup-dns-cache": "2.1.0",
|
||||
"minio": "7.0.2",
|
||||
"mkdirp": "0.5.1",
|
||||
"mocha": "5.2.0",
|
||||
"moji": "0.5.1",
|
||||
"moment": "2.22.2",
|
||||
"moment": "2.23.0",
|
||||
"mongodb": "3.1.10",
|
||||
"monk": "6.0.6",
|
||||
"ms": "2.1.1",
|
||||
"nan": "2.12.1",
|
||||
"nested-property": "0.0.7",
|
||||
"nodemailer": "4.7.0",
|
||||
"nodemailer": "5.0.0",
|
||||
"nprogress": "0.2.0",
|
||||
"object-assign-deep": "0.4.0",
|
||||
"on-build-webpack": "0.1.0",
|
||||
@ -176,6 +177,7 @@
|
||||
"portscanner": "2.2.0",
|
||||
"postcss-loader": "3.0.0",
|
||||
"progress-bar-webpack-plugin": "1.11.0",
|
||||
"promise-any": "0.2.0",
|
||||
"promise-limit": "2.7.0",
|
||||
"promise-sequential": "1.1.1",
|
||||
"pug": "2.0.3",
|
||||
@ -204,7 +206,7 @@
|
||||
"summaly": "2.2.0",
|
||||
"systeminformation": "3.52.2",
|
||||
"syuilo-password-strength": "0.0.1",
|
||||
"terser-webpack-plugin": "1.1.0",
|
||||
"terser-webpack-plugin": "1.2.1",
|
||||
"textarea-caret": "3.1.0",
|
||||
"tinycolor2": "1.4.1",
|
||||
"tmp": "0.0.33",
|
||||
@ -222,10 +224,10 @@
|
||||
"vue-color": "2.7.0",
|
||||
"vue-content-loading": "1.5.3",
|
||||
"vue-cropperjs": "3.0.0",
|
||||
"vue-i18n": "8.3.2",
|
||||
"vue-i18n": "8.6.0",
|
||||
"vue-js-modal": "1.3.28",
|
||||
"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-sequential-entrance": "1.1.3",
|
||||
"vue-style-loader": "4.1.2",
|
||||
@ -237,7 +239,7 @@
|
||||
"vuex-persistedstate": "2.5.4",
|
||||
"web-push": "3.3.3",
|
||||
"webfinger.js": "2.7.0",
|
||||
"webpack": "4.26.1",
|
||||
"webpack": "4.28.3",
|
||||
"webpack-cli": "3.1.2",
|
||||
"websocket": "1.0.28",
|
||||
"ws": "6.1.2",
|
||||
|
@ -39,6 +39,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div v-show="file._open">
|
||||
<ui-input readonly :value="file.url"></ui-input>
|
||||
<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-else><fa :icon="faEyeSlash"/> {{ $t('mark-as-sensitive') }}</ui-button>
|
||||
|
@ -6,6 +6,7 @@
|
||||
<ui-input :value="host" readonly>{{ $t('host') }}</ui-input>
|
||||
<ui-input v-model="name">{{ $t('instance-name') }}</ui-input>
|
||||
<ui-textarea v-model="description">{{ $t('instance-description') }}</ui-textarea>
|
||||
<ui-input v-model="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="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>
|
||||
@ -53,7 +54,7 @@
|
||||
</ui-horizon-group>
|
||||
<ui-horizon-group inputs>
|
||||
<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-switch v-model="smtpSecure" :disabled="!enableEmail">{{ $t('smtp-secure') }}<span slot="desc">{{ $t('smtp-secure-info') }}</span></ui-switch>
|
||||
</section>
|
||||
@ -149,6 +150,7 @@ export default Vue.extend({
|
||||
maintainerEmail: null,
|
||||
disableRegistration: false,
|
||||
disableLocalTimeline: false,
|
||||
mascotImageUrl: null,
|
||||
bannerUrl: null,
|
||||
errorImageUrl: null,
|
||||
name: null,
|
||||
@ -196,6 +198,7 @@ export default Vue.extend({
|
||||
this.maintainerEmail = meta.maintainer.email;
|
||||
this.disableRegistration = meta.disableRegistration;
|
||||
this.disableLocalTimeline = meta.disableLocalTimeline;
|
||||
this.mascotImageUrl = meta.mascotImageUrl;
|
||||
this.bannerUrl = meta.bannerUrl;
|
||||
this.errorImageUrl = meta.errorImageUrl;
|
||||
this.name = meta.name;
|
||||
@ -253,6 +256,7 @@ export default Vue.extend({
|
||||
maintainerEmail: this.maintainerEmail,
|
||||
disableRegistration: this.disableRegistration,
|
||||
disableLocalTimeline: this.disableLocalTimeline,
|
||||
mascotImageUrl: this.mascotImageUrl,
|
||||
bannerUrl: this.bannerUrl,
|
||||
errorImageUrl: this.errorImageUrl,
|
||||
name: this.name,
|
||||
|
@ -6,7 +6,8 @@
|
||||
<ui-input v-model="username" type="text">
|
||||
<span slot="prefix">@</span>
|
||||
</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>
|
||||
</ui-card>
|
||||
</div>
|
||||
@ -23,13 +24,13 @@ export default Vue.extend({
|
||||
data() {
|
||||
return {
|
||||
username: '',
|
||||
adding: false
|
||||
changing: false
|
||||
};
|
||||
},
|
||||
|
||||
methods: {
|
||||
async add() {
|
||||
this.adding = true;
|
||||
this.changing = true;
|
||||
|
||||
const process = async () => {
|
||||
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;
|
||||
},
|
||||
}
|
||||
});
|
||||
|
@ -31,6 +31,14 @@
|
||||
<option value="-updatedAt">{{ $t('users.sort.updatedAtAsc') }}</option>
|
||||
<option value="+updatedAt">{{ $t('users.sort.updatedAtDesc') }}</option>
|
||||
</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">
|
||||
<span slot="label">{{ $t('users.origin.title') }}</span>
|
||||
<option value="combined">{{ $t('users.origin.combined') }}</option>
|
||||
@ -39,7 +47,7 @@
|
||||
</ui-select>
|
||||
</ui-horizon-group>
|
||||
<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>
|
||||
<a :href="user | userPage(null, true)">
|
||||
<mk-avatar class="avatar" :user="user" :disable-link="true"/>
|
||||
@ -49,6 +57,10 @@
|
||||
<header>
|
||||
<b><mk-user-name :user="user"/></b>
|
||||
<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>
|
||||
<div>
|
||||
<span>{{ $t('users.updatedAt') }}: <mk-time :time="user.updatedAt" mode="detail"/></span>
|
||||
@ -84,6 +96,7 @@ export default Vue.extend({
|
||||
suspending: false,
|
||||
unsuspending: false,
|
||||
sort: '+createdAt',
|
||||
state: 'all',
|
||||
origin: 'combined',
|
||||
limit: 10,
|
||||
offset: 0,
|
||||
@ -100,6 +113,12 @@ export default Vue.extend({
|
||||
this.fetchUsers();
|
||||
},
|
||||
|
||||
state() {
|
||||
this.users = [];
|
||||
this.offset = 0;
|
||||
this.fetchUsers();
|
||||
},
|
||||
|
||||
origin() {
|
||||
this.users = [];
|
||||
this.offset = 0;
|
||||
@ -236,7 +255,8 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
fetchUsers() {
|
||||
this.$root.api('users', {
|
||||
this.$root.api('admin/show-users', {
|
||||
state: this.state,
|
||||
origin: this.origin,
|
||||
sort: this.sort,
|
||||
offset: this.offset,
|
||||
@ -284,4 +304,19 @@ export default Vue.extend({
|
||||
margin-left 8px
|
||||
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>
|
||||
|
@ -129,9 +129,7 @@ export default (opts: Opts = {}) => ({
|
||||
source: this.$refs.reactButton,
|
||||
note: this.appearNote,
|
||||
showFocus: viaKeyboard,
|
||||
animation: !viaKeyboard,
|
||||
compact: opts.mobile,
|
||||
big: opts.mobile
|
||||
animation: !viaKeyboard
|
||||
}).$once('closed', this.focus);
|
||||
},
|
||||
|
||||
@ -171,8 +169,7 @@ export default (opts: Opts = {}) => ({
|
||||
this.$root.new(MkNoteMenu, {
|
||||
source: this.$refs.menuButton,
|
||||
note: this.appearNote,
|
||||
animation: !viaKeyboard,
|
||||
compact: opts.mobile,
|
||||
animation: !viaKeyboard
|
||||
}).$once('closed', this.focus);
|
||||
},
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
<span class="mk-acct">
|
||||
<span class="name">@{{ user.username }}</span>
|
||||
<span class="host" :class="{ fade: $store.state.settings.contrastedAcct }" v-if="user.host || detail || $store.state.settings.showFullAcct">@{{ user.host || host }}</span>
|
||||
<fa v-if="user.isLocked == true" class="locked" icon="lock" fixed-width/>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
@ -23,4 +24,8 @@ export default Vue.extend({
|
||||
.mk-acct
|
||||
> .host.fade
|
||||
opacity 0.5
|
||||
|
||||
> .locked
|
||||
opacity 0.8
|
||||
margin-left 0.5em
|
||||
</style>
|
||||
|
@ -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 }"
|
||||
@click="set(i)"
|
||||
: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 === false" :src="whiteUser.avatarUrl" alt="white">
|
||||
</template>
|
||||
<template v-if="$store.state.settings.games.reversi.useWhiteBlackStones">
|
||||
<template v-else>
|
||||
<fa v-if="stone === true" :icon="fasCircle"/>
|
||||
<fa v-if="stone === false" :icon="farCircle"/>
|
||||
</template>
|
||||
|
@ -53,14 +53,14 @@ export default Vue.extend({
|
||||
pointer-events none
|
||||
user-select none
|
||||
padding 0 4px
|
||||
background var(--primary)
|
||||
border solid 1px var(--primary)
|
||||
background var(--mfmMention)
|
||||
border solid var(--lineWidth) var(--mfmMention)
|
||||
border-radius 4px 0 0 4px
|
||||
color var(--primaryForeground)
|
||||
color var(--mfmMentionForeground)
|
||||
|
||||
& + .main
|
||||
padding 0 4px
|
||||
border solid 1px var(--primary)
|
||||
border solid var(--lineWidth) var(--mfmMention)
|
||||
border-radius 0 4px 4px 0
|
||||
|
||||
> .main
|
||||
|
@ -24,16 +24,11 @@ export default Vue.extend({
|
||||
items: {
|
||||
type: Array,
|
||||
required: true
|
||||
},
|
||||
compact: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
hukidasi: !this.compact
|
||||
hukidasi: !this.$root.isMobile
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
@ -47,7 +42,7 @@ export default Vue.extend({
|
||||
let left;
|
||||
let top;
|
||||
|
||||
if (this.compact) {
|
||||
if (this.$root.isMobile) {
|
||||
const x = rect.left + window.pageXOffset + (this.source.offsetWidth / 2);
|
||||
const y = rect.top + window.pageYOffset + (this.source.offsetHeight / 2);
|
||||
left = (x - (width / 2));
|
||||
@ -121,14 +116,11 @@ export default Vue.extend({
|
||||
<style lang="stylus" scoped>
|
||||
.onchrpzrvnoruiaenfcqvccjfuupzzwv
|
||||
$bg-color = var(--popupBg)
|
||||
$border-color = rgba(27, 31, 35, 0.15)
|
||||
|
||||
position initial
|
||||
|
||||
&.isMobile
|
||||
> .popover
|
||||
border none
|
||||
|
||||
> button
|
||||
font-size 15px
|
||||
|
||||
@ -147,7 +139,6 @@ export default Vue.extend({
|
||||
z-index 10001
|
||||
padding 8px 0
|
||||
background $bg-color
|
||||
border 1px solid $border-color
|
||||
border-radius 4px
|
||||
box-shadow 0 3px 12px rgba(27, 31, 35, 0.15)
|
||||
transform scale(0.5)
|
||||
@ -172,14 +163,6 @@ export default Vue.extend({
|
||||
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
|
||||
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
|
||||
|
||||
> button
|
||||
@ -203,7 +186,7 @@ export default Vue.extend({
|
||||
|
||||
> div
|
||||
margin 8px 0
|
||||
height 1px
|
||||
height var(--lineWidth)
|
||||
background var(--faceDivider)
|
||||
|
||||
</style>
|
||||
|
@ -129,8 +129,10 @@ export default Vue.component('misskey-flavored-markdown', {
|
||||
key: Math.random(),
|
||||
props: {
|
||||
url: token.node.props.url,
|
||||
target: '_blank',
|
||||
style: 'color:var(--mfmLink);'
|
||||
target: '_blank'
|
||||
},
|
||||
attrs: {
|
||||
style: 'color:var(--mfmUrl);'
|
||||
}
|
||||
})];
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
<span class="visibility" v-if="note.visibility != 'public'">
|
||||
<fa v-if="note.visibility == 'home'" icon="home"/>
|
||||
<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 class="localOnly" v-if="note.localOnly == true"><fa icon="heart"/></span>
|
||||
</div>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div style="position:initial">
|
||||
<mk-menu :source="source" :compact="compact" :items="items" @closed="closed"/>
|
||||
<mk-menu :source="source" :items="items" @closed="closed"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -13,7 +13,7 @@ import { concat, intersperse } from '../../../../../prelude/array';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/note-menu.vue'),
|
||||
props: ['note', 'source', 'compact'],
|
||||
props: ['note', 'source'],
|
||||
computed: {
|
||||
items(): any[] {
|
||||
return concat(intersperse([null], [
|
||||
@ -29,6 +29,10 @@ export default Vue.extend({
|
||||
icon: 'info-circle',
|
||||
text: this.$t('detail'),
|
||||
action: this.detail
|
||||
}], [{
|
||||
icon: 'align-left',
|
||||
text: this.$t('copy-content'),
|
||||
action: this.copyContent
|
||||
}], [{
|
||||
icon: 'link',
|
||||
text: this.$t('copy-link'),
|
||||
@ -81,6 +85,10 @@ export default Vue.extend({
|
||||
this.$router.push(`/notes/${this.note.id}`);
|
||||
},
|
||||
|
||||
copyContent() {
|
||||
copyToClipboard(this.note.text);
|
||||
},
|
||||
|
||||
copyLink() {
|
||||
copyToClipboard(`${url}/notes/${this.note.id}`);
|
||||
},
|
||||
|
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<ui-card>
|
||||
<div slot="title"><fa :icon="['far', 'bell']"/> {{ $t('notification') }}</div>
|
||||
<div slot="title"><fa :icon="['far', 'bell']"/> {{ $t('title') }}</div>
|
||||
<section>
|
||||
<ui-switch v-model="$store.state.i.settings.autoWatch" @change="onChangeAutoWatch">
|
||||
{{ $t('auto-watch') }}<span slot="desc">{{ $t('auto-watch-desc') }}</span>
|
||||
|
@ -1,8 +1,8 @@
|
||||
<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="popover" :class="{ compact, big }" ref="popover">
|
||||
<p v-if="!compact">{{ title }}</p>
|
||||
<div class="popover" :class="{ isMobile: $root.isMobile }" ref="popover">
|
||||
<p v-if="!$root.isMobile">{{ title }}</p>
|
||||
<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('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
|
||||
},
|
||||
|
||||
compact: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
|
||||
cb: {
|
||||
required: false
|
||||
},
|
||||
|
||||
big: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
|
||||
showFocus: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
@ -115,7 +103,7 @@ export default Vue.extend({
|
||||
const width = popover.offsetWidth;
|
||||
const height = popover.offsetHeight;
|
||||
|
||||
if (this.compact) {
|
||||
if (this.$root.isMobile) {
|
||||
const x = rect.left + window.pageXOffset + (this.source.offsetWidth / 2);
|
||||
const y = rect.top + window.pageYOffset + (this.source.offsetHeight / 2);
|
||||
popover.style.left = (x - (width / 2)) + 'px';
|
||||
@ -210,9 +198,7 @@ export default Vue.extend({
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
$border-color = rgba(27, 31, 35, 0.15)
|
||||
|
||||
.mk-reaction-picker
|
||||
.rdfaahpb
|
||||
position initial
|
||||
|
||||
> .backdrop
|
||||
@ -230,41 +216,12 @@ $border-color = rgba(27, 31, 35, 0.15)
|
||||
position absolute
|
||||
z-index 10001
|
||||
background $bgcolor
|
||||
border 1px solid $border-color
|
||||
border-radius 4px
|
||||
box-shadow 0 3px 12px rgba(27, 31, 35, 0.15)
|
||||
transform scale(0.5)
|
||||
opacity 0
|
||||
|
||||
$balloon-size = 16px
|
||||
|
||||
&: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
|
||||
&.isMobile
|
||||
> div
|
||||
width 280px
|
||||
|
||||
@ -274,13 +231,30 @@ $border-color = rgba(27, 31, 35, 0.15)
|
||||
font-size 28px
|
||||
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
|
||||
display block
|
||||
margin 0
|
||||
padding 8px 10px
|
||||
font-size 14px
|
||||
color var(--popupFg)
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
> div
|
||||
padding 4px
|
||||
|
@ -13,7 +13,7 @@
|
||||
<span class="visibility" v-if="note.visibility != 'public'">
|
||||
<fa v-if="note.visibility == 'home'" icon="home"/>
|
||||
<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 class="localOnly" v-if="note.localOnly == true"><fa icon="heart"/></span>
|
||||
</div>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<span slot="prefix">@</span>
|
||||
<span slot="suffix">@{{ host }}</span>
|
||||
</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 slot="prefix"><fa icon="lock"/></span>
|
||||
</ui-input>
|
||||
|
@ -1,99 +1,104 @@
|
||||
<template>
|
||||
<div class="nicnklzforebnpfgasiypmpdaaglujqm">
|
||||
<label>
|
||||
<span><fa :icon="faSun"/> {{ $t('light-theme') }}</span>
|
||||
<ui-select v-model="light" :placeholder="$t('light-theme')">
|
||||
<optgroup :label="$t('light-themes')">
|
||||
<option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
<optgroup :label="$t('dark-themes')">
|
||||
<option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
</ui-select>
|
||||
</label>
|
||||
<ui-card>
|
||||
<div slot="title"><fa icon="palette"/> {{ $t('theme') }}</div>
|
||||
<section class="nicnklzforebnpfgasiypmpdaaglujqm fit-top">
|
||||
<label>
|
||||
<ui-select v-model="light" :placeholder="$t('light-theme')">
|
||||
<span slot="label"><fa :icon="faSun"/> {{ $t('light-theme') }}</span>
|
||||
<optgroup :label="$t('light-themes')">
|
||||
<option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
<optgroup :label="$t('dark-themes')">
|
||||
<option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
</ui-select>
|
||||
</label>
|
||||
|
||||
<label>
|
||||
<span><fa :icon="faMoon"/> {{ $t('dark-theme') }}</span>
|
||||
<ui-select v-model="dark" :placeholder="$t('dark-theme')">
|
||||
<optgroup :label="$t('dark-themes')">
|
||||
<option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
<optgroup :label="$t('light-themes')">
|
||||
<option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
</ui-select>
|
||||
</label>
|
||||
<label>
|
||||
<ui-select v-model="dark" :placeholder="$t('dark-theme')">
|
||||
<span slot="label"><fa :icon="faMoon"/> {{ $t('dark-theme') }}</span>
|
||||
<optgroup :label="$t('dark-themes')">
|
||||
<option v-for="x in darkThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
<optgroup :label="$t('light-themes')">
|
||||
<option v-for="x in lightThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
|
||||
</optgroup>
|
||||
</ui-select>
|
||||
</label>
|
||||
|
||||
<details class="creator">
|
||||
<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>
|
||||
<a href="https://assets.msky.cafe/theme/list" target="_blank">{{ $t('find-more-theme') }}</a>
|
||||
|
||||
<details>
|
||||
<summary><fa icon="download"/> {{ $t('install-a-theme') }}</summary>
|
||||
<ui-button @click="import_()"><fa icon="file-import"/> {{ $t('import') }}</ui-button>
|
||||
<input ref="file" type="file" accept=".misskeytheme" style="display:none;" @change="onUpdateImportFile"/>
|
||||
<p>{{ $t('import-by-code') }}:</p>
|
||||
<ui-textarea v-model="installThemeCode">
|
||||
<span>{{ $t('theme-code') }}</span>
|
||||
</ui-textarea>
|
||||
<ui-button @click="() => install(this.installThemeCode)"><fa icon="check"/> {{ $t('install') }}</ui-button>
|
||||
</details>
|
||||
<details class="creator">
|
||||
<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>
|
||||
<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 :value="selectedThemeCode">
|
||||
<details>
|
||||
<summary><fa icon="download"/> {{ $t('install-a-theme') }}</summary>
|
||||
<ui-button @click="import_()"><fa icon="file-import"/> {{ $t('import') }}</ui-button>
|
||||
<input ref="file" type="file" accept=".misskeytheme" style="display:none;" @change="onUpdateImportFile"/>
|
||||
<p>{{ $t('import-by-code') }}:</p>
|
||||
<ui-textarea v-model="installThemeCode">
|
||||
<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>
|
||||
</div>
|
||||
<ui-button @click="() => install(this.installThemeCode)"><fa icon="check"/> {{ $t('install') }}</ui-button>
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<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>
|
||||
|
||||
<script lang="ts">
|
||||
@ -331,8 +336,13 @@ export default Vue.extend({
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.nicnklzforebnpfgasiypmpdaaglujqm
|
||||
> a
|
||||
display block
|
||||
margin-top -16px
|
||||
margin-bottom 16px
|
||||
|
||||
> details
|
||||
border-top solid 1px var(--faceDivider)
|
||||
border-top solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
> summary
|
||||
padding 16px 0
|
||||
@ -343,5 +353,5 @@ export default Vue.extend({
|
||||
> .creator
|
||||
> div
|
||||
padding 16px 0
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
</style>
|
||||
|
@ -41,7 +41,7 @@ export default Vue.extend({
|
||||
|
||||
> section
|
||||
padding 20px 16px
|
||||
border-top solid 1px var(--faceDivider)
|
||||
border-top solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
@media (min-width 500px)
|
||||
padding 32px
|
||||
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="vnxwkwuf" :class="{ inputs, noGrow }">
|
||||
<div class="vnxwkwuf" :class="{ inputs, noGrow }" :data-children-count="children">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
@ -21,6 +21,16 @@ export default Vue.extend({
|
||||
required: false,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
children: 0
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$nextTick(() => {
|
||||
this.children = this.$slots.default.length;
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@ -48,4 +58,19 @@ export default Vue.extend({
|
||||
> *:not(:last-child)
|
||||
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>
|
||||
|
@ -39,6 +39,12 @@
|
||||
</template>
|
||||
<div class="suffix" ref="suffix"><slot name="suffix"></slot></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>
|
||||
</template>
|
||||
@ -97,6 +103,11 @@ export default Vue.extend({
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
withPasswordToggle: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
inline: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
@ -178,6 +189,13 @@ export default Vue.extend({
|
||||
focus() {
|
||||
this.$refs.input.focus();
|
||||
},
|
||||
togglePassword() {
|
||||
if (this.type == 'password') {
|
||||
this.type = 'text'
|
||||
} else {
|
||||
this.type = 'password'
|
||||
}
|
||||
},
|
||||
chooseFile() {
|
||||
this.$refs.file.click();
|
||||
},
|
||||
@ -356,6 +374,17 @@ root(fill)
|
||||
if fill
|
||||
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
|
||||
margin 6px 0
|
||||
font-size 13px
|
||||
|
@ -25,11 +25,9 @@ export default Vue.extend({
|
||||
},
|
||||
props: {
|
||||
model: {
|
||||
type: String,
|
||||
required: false
|
||||
},
|
||||
value: {
|
||||
type: String,
|
||||
required: false
|
||||
},
|
||||
disabled: {
|
||||
@ -66,10 +64,10 @@ export default Vue.extend({
|
||||
|
||||
&.checked
|
||||
> .button
|
||||
border-color var(--primary)
|
||||
border-color var(--radioActive)
|
||||
|
||||
&:after
|
||||
background-color var(--primary)
|
||||
background-color var(--radioActive)
|
||||
transform scale(1)
|
||||
opacity 1
|
||||
|
||||
|
@ -77,11 +77,11 @@ export default Vue.extend({
|
||||
|
||||
&.checked
|
||||
> .button
|
||||
background-color var(--primaryAlpha04)
|
||||
border-color var(--primaryAlpha04)
|
||||
background-color var(--switchActiveTrack)
|
||||
border-color var(--switchActiveTrack)
|
||||
|
||||
> *
|
||||
background-color var(--primary)
|
||||
background-color var(--switchActive)
|
||||
transform translateX(14px)
|
||||
|
||||
> input
|
||||
|
@ -8,16 +8,16 @@
|
||||
</blockquote>
|
||||
</div>
|
||||
<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>
|
||||
<article>
|
||||
<header>
|
||||
<h1>{{ title }}</h1>
|
||||
<h1 :title="title">{{ title }}</h1>
|
||||
</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>
|
||||
<img class="icon" v-if="icon" :src="icon"/>
|
||||
<p>{{ sitename }}</p>
|
||||
<p :title="sitename">{{ sitename }}</p>
|
||||
</footer>
|
||||
</article>
|
||||
</a>
|
||||
@ -120,6 +120,12 @@ export default Vue.extend({
|
||||
default: false
|
||||
},
|
||||
|
||||
compact: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
|
||||
mini: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
@ -207,7 +213,7 @@ export default Vue.extend({
|
||||
> a
|
||||
display block
|
||||
font-size 14px
|
||||
border solid 1px var(--urlPreviewBorder)
|
||||
border solid var(--lineWidth) var(--urlPreviewBorder)
|
||||
border-radius 4px
|
||||
overflow hidden
|
||||
|
||||
@ -302,6 +308,23 @@ export default Vue.extend({
|
||||
width 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
|
||||
font-size 10px
|
||||
|
||||
@ -325,4 +348,27 @@ export default Vue.extend({
|
||||
width 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>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="mk-visibility-chooser">
|
||||
<div class="gqyayizv">
|
||||
<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><fa icon="globe"/></div>
|
||||
<div>
|
||||
@ -23,7 +23,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div @click="choose('specified')" :class="{ active: v == 'specified' }">
|
||||
<div><fa icon="lock"/></div>
|
||||
<div><fa icon="envelope"/></div>
|
||||
<div>
|
||||
<span>{{ $t('specified') }}</span>
|
||||
<span>{{ $t('specified-desc') }}</span>
|
||||
@ -59,10 +59,18 @@ import * as anime from 'animejs';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/visibility-chooser.vue'),
|
||||
props: ['source', 'compact'],
|
||||
props: {
|
||||
source: {
|
||||
required: true
|
||||
},
|
||||
currentVisibility: {
|
||||
type: String,
|
||||
required: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
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() {
|
||||
@ -76,7 +84,7 @@ export default Vue.extend({
|
||||
let left;
|
||||
let top;
|
||||
|
||||
if (this.compact) {
|
||||
if (this.$root.isMobile) {
|
||||
const x = rect.left + window.pageXOffset + (this.source.offsetWidth / 2);
|
||||
const y = rect.top + window.pageYOffset + (this.source.offsetHeight / 2);
|
||||
left = (x - (width / 2));
|
||||
@ -142,9 +150,7 @@ export default Vue.extend({
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
$border-color = rgba(27, 31, 35, 0.15)
|
||||
|
||||
.mk-visibility-chooser
|
||||
.gqyayizv
|
||||
position initial
|
||||
|
||||
> .backdrop
|
||||
@ -164,39 +170,27 @@ $border-color = rgba(27, 31, 35, 0.15)
|
||||
width 240px
|
||||
padding 8px 0
|
||||
background $bgcolor
|
||||
border 1px solid $border-color
|
||||
border-radius 4px
|
||||
box-shadow 0 3px 12px rgba(27, 31, 35, 0.15)
|
||||
transform scale(0.5)
|
||||
opacity 0
|
||||
|
||||
$balloon-size = 10px
|
||||
&:not(.isMobile)
|
||||
$arrow-size = 10px
|
||||
|
||||
&:not(.compact)
|
||||
margin-top $balloon-size
|
||||
transform-origin center -($balloon-size)
|
||||
margin-top $arrow-size
|
||||
transform-origin center -($arrow-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
|
||||
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
|
||||
|
||||
> div
|
||||
display flex
|
||||
@ -235,4 +229,5 @@ $border-color = rgba(27, 31, 35, 0.15)
|
||||
|
||||
> span:last-child:not(:first-child)
|
||||
opacity 0.6
|
||||
|
||||
</style>
|
||||
|
@ -72,7 +72,7 @@ export default define({
|
||||
color var(--inputText)
|
||||
background var(--face)
|
||||
border none
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
border-radius 0
|
||||
|
||||
> button
|
||||
|
@ -77,7 +77,7 @@ export default define({
|
||||
display block
|
||||
padding 4px 0
|
||||
color var(--text)
|
||||
border-bottom dashed 1px var(--faceDivider)
|
||||
border-bottom dashed var(--lineWidth) var(--faceDivider)
|
||||
|
||||
&:last-child
|
||||
border-bottom none
|
||||
|
@ -84,6 +84,7 @@ export default define({
|
||||
<style lang="stylus" scoped>
|
||||
.mkw-tips
|
||||
overflow visible !important
|
||||
opacity 0.8
|
||||
|
||||
> p
|
||||
display block
|
||||
@ -91,7 +92,7 @@ export default define({
|
||||
padding 0 12px
|
||||
text-align center
|
||||
font-size 0.7em
|
||||
color #999
|
||||
color var(--text)
|
||||
|
||||
> [data-icon]
|
||||
margin-right 4px
|
||||
@ -102,7 +103,7 @@ export default define({
|
||||
margin 0 2px
|
||||
font-size 1em
|
||||
font-family inherit
|
||||
border solid 1px #999
|
||||
border solid 1px var(--text)
|
||||
border-radius 2px
|
||||
|
||||
</style>
|
||||
|
@ -24,6 +24,7 @@ p
|
||||
padding 0 12px
|
||||
text-align center
|
||||
font-size 0.7em
|
||||
color #aaa
|
||||
color var(--text)
|
||||
opacity 0.8
|
||||
|
||||
</style>
|
||||
|
@ -151,7 +151,7 @@ export default Vue.extend({
|
||||
font-weight bold
|
||||
color var(--faceHeaderText)
|
||||
background var(--faceHeader)
|
||||
box-shadow 0 1px rgba(#000, 0.07)
|
||||
box-shadow 0 var(--lineWidth) rgba(#000, 0.07)
|
||||
|
||||
> [data-icon]
|
||||
margin-right 4px
|
||||
@ -199,11 +199,11 @@ export default Vue.extend({
|
||||
color var(--calendarSaturdayOrSunday)
|
||||
|
||||
&[data-today]
|
||||
box-shadow 0 0 0 1px var(--calendarWeek) inset
|
||||
box-shadow 0 0 0 var(--lineWidth) var(--calendarWeek) inset
|
||||
border-radius 6px
|
||||
|
||||
&[data-is-donichi]
|
||||
box-shadow 0 0 0 1px var(--calendarSaturdayOrSunday) inset
|
||||
box-shadow 0 0 0 var(--lineWidth) var(--calendarSaturdayOrSunday) inset
|
||||
|
||||
&.day
|
||||
cursor pointer
|
||||
|
@ -46,7 +46,7 @@ export default Vue.extend({
|
||||
&.divider
|
||||
margin-top $padding
|
||||
padding-top $padding
|
||||
border-top solid 1px var(--faceDivider)
|
||||
border-top solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
&.nest
|
||||
> p
|
||||
|
@ -32,7 +32,7 @@
|
||||
<span class="visibility" v-if="appearNote.visibility != 'public'">
|
||||
<fa v-if="appearNote.visibility == 'home'" icon="home"/>
|
||||
<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 class="localOnly" v-if="appearNote.localOnly == true"><fa icon="heart"/></span>
|
||||
</div>
|
||||
@ -70,7 +70,7 @@
|
||||
<p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p>
|
||||
</button>
|
||||
<button v-if="['public', 'home'].includes(appearNote.visibility)" class="renoteButton" @click="renote()" :title="$t('renote')">
|
||||
<fa icon="retweet"/>
|
||||
<fa icon="retweet"/><p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p>
|
||||
</button>
|
||||
<button v-else class="inhibitedButton">
|
||||
<fa icon="ban"/>
|
||||
|
@ -36,7 +36,7 @@
|
||||
<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>
|
||||
<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>
|
||||
<footer v-if="appearNote.deletedAt == null">
|
||||
@ -48,7 +48,7 @@
|
||||
<p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p>
|
||||
</button>
|
||||
<button v-if="['public', 'home'].includes(appearNote.visibility)" class="renoteButton" @click="renote()" :title="$t('renote')">
|
||||
<fa icon="retweet"/>
|
||||
<fa icon="retweet"/><p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p>
|
||||
</button>
|
||||
<button v-else class="inhibitedButton">
|
||||
<fa icon="ban"/>
|
||||
@ -102,6 +102,11 @@ export default Vue.extend({
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
compact: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
mini: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
@ -140,7 +145,7 @@ export default Vue.extend({
|
||||
margin 0
|
||||
padding 0
|
||||
background var(--face)
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
&.mini
|
||||
font-size 13px
|
||||
@ -261,7 +266,7 @@ export default Vue.extend({
|
||||
|
||||
> *
|
||||
padding 16px
|
||||
border dashed 1px var(--quoteBorder)
|
||||
border dashed var(--lineWidth) var(--quoteBorder)
|
||||
border-radius 8px
|
||||
|
||||
> footer
|
||||
|
@ -15,7 +15,7 @@
|
||||
<!-- トランジションを有効にするとなぜかメモリリークする -->
|
||||
<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">
|
||||
<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">
|
||||
<span><fa icon="angle-up"/>{{ note._datetext }}</span>
|
||||
<span><fa icon="angle-down"/>{{ _notes[i + 1]._datetext }}</span>
|
||||
@ -209,7 +209,7 @@ export default Vue.extend({
|
||||
text-align center
|
||||
color var(--dateDividerFg)
|
||||
background var(--dateDividerBg)
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
span
|
||||
margin 0 16px
|
||||
@ -233,7 +233,7 @@ export default Vue.extend({
|
||||
text-align center
|
||||
color #ccc
|
||||
background var(--face)
|
||||
border-top solid 1px var(--faceDivider)
|
||||
border-top solid var(--lineWidth) var(--faceDivider)
|
||||
border-bottom-left-radius 6px
|
||||
border-bottom-right-radius 6px
|
||||
|
||||
|
@ -248,7 +248,7 @@ export default Vue.extend({
|
||||
padding 16px
|
||||
overflow-wrap break-word
|
||||
font-size 12px
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
&:last-child
|
||||
border-bottom none
|
||||
@ -332,7 +332,7 @@ export default Vue.extend({
|
||||
font-size 0.8em
|
||||
color var(--dateDividerFg)
|
||||
background var(--dateDividerBg)
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
span
|
||||
margin 0 16px
|
||||
@ -345,7 +345,7 @@ export default Vue.extend({
|
||||
width 100%
|
||||
padding 16px
|
||||
color var(--text)
|
||||
border-top solid 1px rgba(#000, 0.05)
|
||||
border-top solid var(--lineWidth) rgba(#000, 0.05)
|
||||
|
||||
&:hover
|
||||
background rgba(#000, 0.025)
|
||||
|
@ -50,7 +50,7 @@
|
||||
<span v-if="visibility === 'public'"><fa icon="globe"/></span>
|
||||
<span v-if="visibility === 'home'"><fa icon="home"/></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>
|
||||
<p class="text-count" :class="{ over: trimmedLength(text) > maxNoteTextLength }">{{ maxNoteTextLength - trimmedLength(text) }}</p>
|
||||
<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({
|
||||
i18n: i18n('desktop/views/components/post-form.vue'),
|
||||
|
||||
components: {
|
||||
XDraggable,
|
||||
MkVisibilityChooser
|
||||
@ -197,11 +198,11 @@ export default Vue.extend({
|
||||
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 == host) return;
|
||||
if (this.$store.state.i.username == x.username && x.host == null) continue;
|
||||
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} `;
|
||||
}
|
||||
@ -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(() => {
|
||||
// 書きかけの投稿を復元
|
||||
if (!this.instant && !this.mention) {
|
||||
@ -381,7 +388,8 @@ export default Vue.extend({
|
||||
|
||||
setVisibility() {
|
||||
const w = this.$root.new(MkVisibilityChooser, {
|
||||
source: this.$refs.visibilityButton
|
||||
source: this.$refs.visibilityButton,
|
||||
currentVisibility: this.visibility
|
||||
});
|
||||
w.$once('chosen', v => {
|
||||
this.applyVisibility(v);
|
||||
|
@ -21,7 +21,14 @@ import i18n from '../../../i18n';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('desktop/views/components/renote-form.vue'),
|
||||
props: ['note'],
|
||||
|
||||
props: {
|
||||
note: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
wait: false,
|
||||
@ -29,6 +36,7 @@ export default Vue.extend({
|
||||
visibility: this.$store.state.settings.defaultNoteVisibility
|
||||
};
|
||||
},
|
||||
|
||||
methods: {
|
||||
ok(v: string) {
|
||||
this.wait = true;
|
||||
@ -44,9 +52,11 @@ export default Vue.extend({
|
||||
this.wait = false;
|
||||
});
|
||||
},
|
||||
|
||||
cancel() {
|
||||
this.$emit('canceled');
|
||||
},
|
||||
|
||||
onQuote() {
|
||||
this.quote = true;
|
||||
|
||||
@ -54,6 +64,7 @@ export default Vue.extend({
|
||||
(this.$refs.form as any).focus();
|
||||
});
|
||||
},
|
||||
|
||||
onChildFormPosted() {
|
||||
this.$emit('posted');
|
||||
}
|
||||
|
@ -7,16 +7,16 @@
|
||||
<p>{{ $t('already-registered') }}</p>
|
||||
<ui-button @click="unregister">{{ $t('unregister') }}</ui-button>
|
||||
</template>
|
||||
<div v-if="data">
|
||||
<div v-if="data && !$store.state.i.twoFactorEnabled">
|
||||
<ol>
|
||||
<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('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>
|
||||
</li>
|
||||
</ol>
|
||||
<div class="ui info"><p><fa icon="info-circle"/>{{ $t('info') }}</p></div>
|
||||
<ui-info>{{ $t('info') }}</ui-info>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -19,13 +19,7 @@
|
||||
<x-integration-settings/>
|
||||
</div>
|
||||
|
||||
<ui-card class="theme" v-show="page == 'theme'">
|
||||
<div slot="title"><fa icon="palette"/> {{ $t('theme') }}</div>
|
||||
|
||||
<section>
|
||||
<x-theme/>
|
||||
</section>
|
||||
</ui-card>
|
||||
<x-theme class="theme" v-show="page == 'theme'"/>
|
||||
|
||||
<ui-card class="web" v-show="page == 'web'">
|
||||
<div slot="title"><fa icon="sliders-h"/> {{ $t('behaviour') }}</div>
|
||||
@ -86,8 +80,10 @@
|
||||
</section>
|
||||
<section>
|
||||
<header>{{ $t('wallpaper') }}</header>
|
||||
<ui-button @click="updateWallpaper">{{ $t('choose-wallpaper') }}</ui-button>
|
||||
<ui-button @click="deleteWallpaper">{{ $t('delete-wallpaper') }}</ui-button>
|
||||
<ui-horizon-group class="fit-bottom">
|
||||
<ui-button @click="updateWallpaper">{{ $t('choose-wallpaper') }}</ui-button>
|
||||
<ui-button @click="deleteWallpaper">{{ $t('delete-wallpaper') }}</ui-button>
|
||||
</ui-horizon-group>
|
||||
</section>
|
||||
<section>
|
||||
<header>{{ $t('navbar-position') }}</header>
|
||||
@ -103,6 +99,12 @@
|
||||
<ui-switch v-model="useShadow">{{ $t('use-shadow') }}</ui-switch>
|
||||
<ui-switch v-model="roundedCorners">{{ $t('rounded-corners') }}</ui-switch>
|
||||
<ui-switch v-model="circleIcons">{{ $t('circle-icons') }}</ui-switch>
|
||||
<section>
|
||||
<header>{{ $t('@.line-width') }}</header>
|
||||
<ui-radio v-model="lineWidth" :value="0.5">{{ $t('@.line-width-thin') }}</ui-radio>
|
||||
<ui-radio v-model="lineWidth" :value="1">{{ $t('@.line-width-normal') }}</ui-radio>
|
||||
<ui-radio v-model="lineWidth" :value="2">{{ $t('@.line-width-thick') }}</ui-radio>
|
||||
</section>
|
||||
<ui-switch v-model="reduceMotion">{{ $t('@.reduce-motion') }}</ui-switch>
|
||||
<ui-switch v-model="contrastedAcct">{{ $t('contrasted-acct') }}</ui-switch>
|
||||
<ui-switch v-model="showFullAcct">{{ $t('@.show-full-acct') }}</ui-switch>
|
||||
@ -135,7 +137,7 @@
|
||||
</section>
|
||||
<section>
|
||||
<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>
|
||||
</ui-card>
|
||||
|
||||
@ -411,6 +413,11 @@ export default Vue.extend({
|
||||
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: {
|
||||
get() { return this.$store.state.settings.fetchOnScroll; },
|
||||
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 }); }
|
||||
},
|
||||
|
||||
games_reversi_useWhiteBlackStones: {
|
||||
get() { return this.$store.state.settings.games.reversi.useWhiteBlackStones; },
|
||||
set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useWhiteBlackStones', value }); }
|
||||
games_reversi_useAvatarStones: {
|
||||
get() { return this.$store.state.settings.games.reversi.useAvatarStones; },
|
||||
set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useAvatarStones', value }); }
|
||||
},
|
||||
|
||||
disableAnimatedMfm: {
|
||||
|
@ -173,7 +173,7 @@ export default Vue.extend({
|
||||
<style lang="stylus" scoped>
|
||||
.mk-timeline-core
|
||||
> .mk-friends-maker
|
||||
border-bottom solid 1px #eee
|
||||
border-bottom solid var(--lineWidth) #eee
|
||||
|
||||
</style>
|
||||
|
||||
|
@ -139,7 +139,6 @@ export default Vue.extend({
|
||||
|
||||
this.$root.new(Menu, {
|
||||
source: this.$refs.listButton,
|
||||
compact: false,
|
||||
items: menu
|
||||
});
|
||||
},
|
||||
@ -170,7 +169,6 @@ export default Vue.extend({
|
||||
|
||||
this.$root.new(Menu, {
|
||||
source: this.$refs.tagButton,
|
||||
compact: false,
|
||||
items: menu
|
||||
});
|
||||
}
|
||||
@ -189,7 +187,7 @@ export default Vue.extend({
|
||||
padding 0 8px
|
||||
z-index 10
|
||||
background var(--faceHeader)
|
||||
box-shadow 0 1px var(--desktopTimelineHeaderShadow)
|
||||
box-shadow 0 var(--lineWidth) var(--desktopTimelineHeaderShadow)
|
||||
|
||||
> .buttons
|
||||
position absolute
|
||||
@ -209,7 +207,7 @@ export default Vue.extend({
|
||||
top -4px
|
||||
right 4px
|
||||
font-size 10px
|
||||
color var(--primary)
|
||||
color var(--notificationIndicator)
|
||||
|
||||
&:hover
|
||||
color var(--faceTextButtonHover)
|
||||
|
@ -227,7 +227,7 @@ export default Vue.extend({
|
||||
font-size 0.8em
|
||||
background $bgcolor
|
||||
border-radius 4px
|
||||
box-shadow 0 1px 4px rgba(#000, 0.25)
|
||||
box-shadow 0 var(--lineWidth) 4px rgba(#000, 0.25)
|
||||
|
||||
&:before
|
||||
content ""
|
||||
@ -261,7 +261,7 @@ export default Vue.extend({
|
||||
|
||||
& + ul
|
||||
padding-top 10px
|
||||
border-top solid 1px var(--faceDivider)
|
||||
border-top solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
> li
|
||||
display block
|
||||
|
@ -147,7 +147,7 @@ export default Vue.extend({
|
||||
> [data-icon]:last-child
|
||||
margin-left 5px
|
||||
font-size 10px
|
||||
color var(--primary)
|
||||
color var(--notificationIndicator)
|
||||
|
||||
@media (max-width 1100px)
|
||||
margin-left -5px
|
||||
|
@ -90,7 +90,7 @@ export default Vue.extend({
|
||||
margin-left -5px
|
||||
vertical-align super
|
||||
font-size 10px
|
||||
color var(--primary)
|
||||
color var(--notificationIndicator)
|
||||
|
||||
> .pop
|
||||
$bgcolor = var(--face)
|
||||
|
@ -7,7 +7,8 @@
|
||||
<router-link :to="user | userPage" class="name">
|
||||
<mk-user-name :user="user"/>
|
||||
</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">
|
||||
<misskey-flavored-markdown v-if="user.description" :text="user.description" :author="user" :i="$store.state.i" :custom-emojis="user.emojis"/>
|
||||
</div>
|
||||
@ -75,6 +76,9 @@ export default Vue.extend({
|
||||
display block
|
||||
opacity 0.7
|
||||
|
||||
> .locked
|
||||
opacity 0.8
|
||||
|
||||
> .description
|
||||
margin 8px 0 16px 0
|
||||
|
||||
|
@ -46,7 +46,7 @@ export default Vue.extend({
|
||||
font-size 0.9em
|
||||
font-weight bold
|
||||
color var(--faceHeaderText)
|
||||
box-shadow 0 1px rgba(#000, 0.07)
|
||||
box-shadow 0 var(--lineWidth) rgba(#000, 0.07)
|
||||
|
||||
> [data-icon]
|
||||
margin-right 6px
|
||||
|
@ -240,7 +240,6 @@ export default Vue.extend({
|
||||
showMenu() {
|
||||
this.$root.new(Menu, {
|
||||
source: this.$refs.menu,
|
||||
compact: false,
|
||||
items: this.getMenu()
|
||||
});
|
||||
},
|
||||
@ -374,7 +373,7 @@ export default Vue.extend({
|
||||
font-size 14px
|
||||
color var(--faceHeaderText)
|
||||
background var(--faceHeader)
|
||||
box-shadow 0 1px rgba(#000, 0.15)
|
||||
box-shadow 0 var(--lineWidth) rgba(#000, 0.15)
|
||||
cursor pointer
|
||||
|
||||
&, *
|
||||
|
@ -18,6 +18,7 @@
|
||||
:key="note.id"
|
||||
@update:note="onNoteUpdated(i, $event)"
|
||||
:media-view="mediaView"
|
||||
:compact="true"
|
||||
:mini="true"/>
|
||||
<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>
|
||||
@ -214,7 +215,7 @@ export default Vue.extend({
|
||||
text-align center
|
||||
color var(--dateDividerFg)
|
||||
background var(--dateDividerBg)
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
span
|
||||
margin 0 16px
|
||||
@ -231,7 +232,7 @@ export default Vue.extend({
|
||||
text-align center
|
||||
color #ccc
|
||||
background var(--face)
|
||||
border-top solid 1px var(--faceDivider)
|
||||
border-top solid var(--lineWidth) var(--faceDivider)
|
||||
border-bottom-left-radius 6px
|
||||
border-bottom-right-radius 6px
|
||||
|
||||
|
@ -177,7 +177,7 @@ export default Vue.extend({
|
||||
> .notifications
|
||||
|
||||
> .notification:not(:last-child)
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
> .date
|
||||
display block
|
||||
@ -187,7 +187,7 @@ export default Vue.extend({
|
||||
font-size 12px
|
||||
color var(--dateDividerFg)
|
||||
background var(--dateDividerBg)
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
span
|
||||
margin 0 16px
|
||||
@ -200,7 +200,7 @@ export default Vue.extend({
|
||||
width 100%
|
||||
padding 16px
|
||||
color #555
|
||||
border-top solid 1px rgba(#000, 0.05)
|
||||
border-top solid var(--lineWidth) rgba(#000, 0.05)
|
||||
|
||||
&:hover
|
||||
background rgba(#000, 0.025)
|
||||
|
@ -19,7 +19,7 @@
|
||||
<span class="name">
|
||||
<mk-user-name :user="user"/>
|
||||
</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>
|
||||
</header>
|
||||
<div class="info">
|
||||
@ -169,6 +169,7 @@ export default Vue.extend({
|
||||
this.$root.api('users/notes', {
|
||||
userId: this.user.id,
|
||||
fileType: image,
|
||||
excludeNsfw: !this.$store.state.device.alwaysShowNsfw,
|
||||
limit: 9,
|
||||
untilDate: new Date().getTime() + 1000 * 86400 * 365
|
||||
}).then(notes => {
|
||||
@ -336,7 +337,6 @@ export default Vue.extend({
|
||||
|
||||
this.$root.new(Menu, {
|
||||
source: this.$refs.menu,
|
||||
compact: false,
|
||||
items: menu
|
||||
});
|
||||
},
|
||||
@ -412,6 +412,9 @@ export default Vue.extend({
|
||||
opacity 0.7
|
||||
text-shadow 0 0 8px #000
|
||||
|
||||
> .locked
|
||||
opacity 0.8
|
||||
|
||||
> .info
|
||||
padding 16px
|
||||
font-size 12px
|
||||
@ -463,7 +466,7 @@ export default Vue.extend({
|
||||
display grid
|
||||
grid-template-columns 2fr 2fr 2fr 1fr
|
||||
margin-top 8px
|
||||
border-top solid 1px var(--faceDivider)
|
||||
border-top solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
> div
|
||||
padding 8px 8px 0 8px
|
||||
|
@ -179,7 +179,6 @@ export default Vue.extend({
|
||||
add() {
|
||||
this.$root.new(Menu, {
|
||||
source: this.$refs.add,
|
||||
compact: true,
|
||||
items: [{
|
||||
icon: 'home',
|
||||
text: this.$t('@deck.home'),
|
||||
|
@ -29,9 +29,11 @@ export default Vue.extend({
|
||||
'image/png',
|
||||
'image/gif'
|
||||
];
|
||||
|
||||
this.$root.api('users/notes', {
|
||||
userId: this.user.id,
|
||||
fileType: image,
|
||||
excludeNsfw: !this.$store.state.device.alwaysShowNsfw,
|
||||
limit: 9,
|
||||
untilDate: new Date().getTime() + 1000 * 86400 * 365
|
||||
}).then(notes => {
|
||||
|
@ -35,7 +35,7 @@
|
||||
<span class="signin" @click="signin">{{ $t('signin') }}</span>
|
||||
</p>
|
||||
|
||||
<img src="/assets/ai.png" alt="" title="藍" class="char">
|
||||
<img :src="meta.mascotImageUrl" alt="" title="藍" class="char">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -124,6 +124,7 @@ import {
|
||||
faMapMarker,
|
||||
faRobot,
|
||||
faHourglassHalf,
|
||||
faAlignLeft
|
||||
} from '@fortawesome/free-solid-svg-icons';
|
||||
|
||||
import {
|
||||
@ -255,6 +256,7 @@ library.add(
|
||||
faMapMarker,
|
||||
faRobot,
|
||||
faHourglassHalf,
|
||||
faAlignLeft,
|
||||
|
||||
farBell,
|
||||
farEnvelope,
|
||||
@ -413,6 +415,15 @@ export default (callback: (launch: (router: VueRouter) => [Vue, MiOS]) => void,
|
||||
});
|
||||
//#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
|
||||
router.beforeEach((to, from, next) => {
|
||||
next(os.store.state.navHook && os.store.state.navHook(to) ? false : undefined);
|
||||
|
@ -37,6 +37,7 @@
|
||||
</div>
|
||||
<div class="menu">
|
||||
<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 @click="rename"><fa icon="pencil-alt"/> {{ $t('rename') }}</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
|
||||
|
||||
> .menu
|
||||
padding 14px
|
||||
padding 0 14px 14px 14px
|
||||
border-top solid 1px var(--faceDivider)
|
||||
|
||||
> div
|
||||
|
@ -54,7 +54,7 @@
|
||||
<span class="visibility" v-if="appearNote.visibility != 'public'">
|
||||
<fa v-if="appearNote.visibility == 'home'" icon="home"/>
|
||||
<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 class="localOnly" v-if="appearNote.localOnly == true"><fa icon="heart"/></span>
|
||||
</div>
|
||||
@ -66,7 +66,7 @@
|
||||
<p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p>
|
||||
</button>
|
||||
<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 v-else>
|
||||
<fa icon="ban"/>
|
||||
|
@ -30,7 +30,7 @@
|
||||
<mk-media-list :media-list="appearNote.files"/>
|
||||
</div>
|
||||
<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>
|
||||
<div class="renote" v-if="appearNote.renote"><mk-note-preview :note="appearNote.renote"/></div>
|
||||
</div>
|
||||
@ -44,7 +44,7 @@
|
||||
<p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p>
|
||||
</button>
|
||||
<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 v-else>
|
||||
<fa icon="ban"/>
|
||||
@ -90,6 +90,11 @@ export default Vue.extend({
|
||||
note: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
compact: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -98,7 +103,7 @@ export default Vue.extend({
|
||||
<style lang="stylus" scoped>
|
||||
.note
|
||||
font-size 12px
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
&:focus
|
||||
z-index 1
|
||||
@ -231,7 +236,7 @@ export default Vue.extend({
|
||||
|
||||
> *
|
||||
padding 16px
|
||||
border dashed 1px var(--quoteBorder)
|
||||
border dashed var(--lineWidth) var(--quoteBorder)
|
||||
border-radius 8px
|
||||
|
||||
> .app
|
||||
|
@ -15,7 +15,7 @@
|
||||
<!-- トランジションを有効にするとなぜかメモリリークする -->
|
||||
<component :is="!$store.state.device.reduceMotion ? 'transition-group' : 'div'" name="mk-notes" class="transition" tag="div">
|
||||
<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">
|
||||
<span><fa icon="angle-up"/>{{ note._datetext }}</span>
|
||||
<span><fa icon="angle-down"/>{{ _notes[i + 1]._datetext }}</span>
|
||||
@ -210,7 +210,7 @@ export default Vue.extend({
|
||||
font-size 0.9em
|
||||
color var(--dateDividerFg)
|
||||
background var(--dateDividerBg)
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
span
|
||||
margin 0 16px
|
||||
@ -240,7 +240,7 @@ export default Vue.extend({
|
||||
|
||||
> footer
|
||||
text-align center
|
||||
border-top solid 1px var(--faceDivider)
|
||||
border-top solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
&:empty
|
||||
display none
|
||||
|
@ -152,7 +152,7 @@ export default Vue.extend({
|
||||
> .notifications
|
||||
|
||||
> .mk-notification:not(:last-child)
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
> .date
|
||||
display block
|
||||
@ -162,7 +162,7 @@ export default Vue.extend({
|
||||
font-size 0.8em
|
||||
color var(--dateDividerFg)
|
||||
background var(--dateDividerBg)
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
border-bottom solid var(--lineWidth) var(--faceDivider)
|
||||
|
||||
span
|
||||
margin 0 16px
|
||||
@ -175,7 +175,7 @@ export default Vue.extend({
|
||||
width 100%
|
||||
padding 16px
|
||||
color var(--text)
|
||||
border-top solid 1px rgba(#000, 0.05)
|
||||
border-top solid var(--lineWidth) rgba(#000, 0.05)
|
||||
|
||||
> [data-icon]
|
||||
margin-right 4px
|
||||
|
@ -41,7 +41,7 @@
|
||||
<span v-if="visibility === 'public'"><fa icon="globe"/></span>
|
||||
<span v-if="visibility === 'home'"><fa icon="home"/></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>
|
||||
</footer>
|
||||
<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}`;
|
||||
|
||||
// 自分は除外
|
||||
if (this.$store.state.i.username == x.username && x.host == null) return;
|
||||
if (this.$store.state.i.username == x.username && x.host == host) return;
|
||||
if (this.$store.state.i.username == x.username && x.host == null) continue;
|
||||
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} `;
|
||||
}
|
||||
@ -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.$nextTick(() => {
|
||||
@ -301,7 +307,7 @@ export default Vue.extend({
|
||||
setVisibility() {
|
||||
const w = this.$root.new(MkVisibilityChooser, {
|
||||
source: this.$refs.visibilityButton,
|
||||
compact: true
|
||||
currentVisibility: this.visibility
|
||||
});
|
||||
w.$once('chosen', v => {
|
||||
this.applyVisibility(v);
|
||||
|
@ -159,7 +159,7 @@ export default Vue.extend({
|
||||
left 8px
|
||||
pointer-events none
|
||||
font-size 10px
|
||||
color var(--primary)
|
||||
color var(--notificationIndicator)
|
||||
|
||||
> button:last-child
|
||||
display block
|
||||
|
@ -238,7 +238,7 @@ export default Vue.extend({
|
||||
> i.circle
|
||||
margin-left 6px
|
||||
font-size 10px
|
||||
color var(--primary)
|
||||
color var(--notificationIndicator)
|
||||
|
||||
> i:last-child
|
||||
position absolute
|
||||
|
@ -225,7 +225,7 @@ main
|
||||
> .badge
|
||||
margin-left 6px
|
||||
font-size 10px
|
||||
color var(--primary)
|
||||
color var(--notificationIndicator)
|
||||
|
||||
> .tl
|
||||
max-width 680px
|
||||
@ -248,7 +248,7 @@ main
|
||||
.badge
|
||||
margin-left 6px
|
||||
font-size 10px
|
||||
color var(--primary)
|
||||
color var(--notificationIndicator)
|
||||
vertical-align middle
|
||||
|
||||
</style>
|
||||
|
@ -7,12 +7,7 @@
|
||||
<div>
|
||||
<x-profile-editor/>
|
||||
|
||||
<ui-card>
|
||||
<div slot="title"><fa icon="palette"/> {{ $t('theme') }}</div>
|
||||
<section>
|
||||
<x-theme/>
|
||||
</section>
|
||||
</ui-card>
|
||||
<x-theme/>
|
||||
|
||||
<ui-card>
|
||||
<div slot="title"><fa icon="poll-h"/> {{ $t('design') }}</div>
|
||||
@ -20,6 +15,12 @@
|
||||
<section>
|
||||
<ui-switch v-model="darkmode">{{ $t('dark-mode') }}</ui-switch>
|
||||
<ui-switch v-model="circleIcons">{{ $t('circle-icons') }}</ui-switch>
|
||||
<section>
|
||||
<header>{{ $t('@.line-width') }}</header>
|
||||
<ui-radio v-model="lineWidth" :value="0.5">{{ $t('@.line-width-thin') }}</ui-radio>
|
||||
<ui-radio v-model="lineWidth" :value="1">{{ $t('@.line-width-normal') }}</ui-radio>
|
||||
<ui-radio v-model="lineWidth" :value="2">{{ $t('@.line-width-thick') }}</ui-radio>
|
||||
</section>
|
||||
<ui-switch v-model="reduceMotion">{{ $t('@.reduce-motion') }} ({{ $t('@.this-setting-is-this-device-only') }})</ui-switch>
|
||||
<ui-switch v-model="contrastedAcct">{{ $t('contrasted-acct') }}</ui-switch>
|
||||
<ui-switch v-model="showFullAcct">{{ $t('@.show-full-acct') }}</ui-switch>
|
||||
@ -33,7 +34,7 @@
|
||||
|
||||
<section>
|
||||
<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>
|
||||
@ -265,6 +266,11 @@ export default Vue.extend({
|
||||
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: {
|
||||
get() { return this.$store.state.settings.contrastedAcct; },
|
||||
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 }); }
|
||||
},
|
||||
|
||||
games_reversi_useWhiteBlackStones: {
|
||||
get() { return this.$store.state.settings.games.reversi.useWhiteBlackStones; },
|
||||
set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useWhiteBlackStones', value }); }
|
||||
games_reversi_useAvatarStones: {
|
||||
get() { return this.$store.state.settings.games.reversi.useAvatarStones; },
|
||||
set(value) { this.$store.dispatch('settings/set', { key: 'games.reversi.useAvatarStones', value }); }
|
||||
},
|
||||
|
||||
disableAnimatedMfm: {
|
||||
|
@ -208,7 +208,6 @@ export default Vue.extend({
|
||||
|
||||
this.$root.new(Menu, {
|
||||
source: this.$refs.menu,
|
||||
compact: true,
|
||||
items: menu
|
||||
});
|
||||
},
|
||||
|
@ -34,6 +34,7 @@ export default Vue.extend({
|
||||
this.$root.api('users/notes', {
|
||||
userId: this.user.id,
|
||||
fileType: image,
|
||||
excludeNsfw: !this.$store.state.device.alwaysShowNsfw,
|
||||
limit: 9,
|
||||
untilDate: new Date().getTime() + 1000 * 86400 * 365
|
||||
}).then(notes => {
|
||||
|
@ -40,7 +40,7 @@ const defaultSettings = {
|
||||
games: {
|
||||
reversi: {
|
||||
showBoardLabels: false,
|
||||
useWhiteBlackStones: false,
|
||||
useAvatarStones: true,
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -52,6 +52,7 @@ const defaultDeviceSettings = {
|
||||
darkmode: false,
|
||||
darkTheme: 'dark',
|
||||
lightTheme: 'light',
|
||||
lineWidth: 1,
|
||||
themes: [],
|
||||
enableSounds: true,
|
||||
soundVolume: 0.5,
|
||||
|
@ -15,13 +15,29 @@ export const darkTheme: Theme = require('../theme/dark.json5');
|
||||
export const pinkTheme: Theme = require('../theme/pink.json5');
|
||||
export const blackTheme: Theme = require('../theme/black.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 = [
|
||||
lightTheme,
|
||||
darkTheme,
|
||||
pinkTheme,
|
||||
blackTheme,
|
||||
halloweenTheme
|
||||
halloweenTheme,
|
||||
cafeTheme,
|
||||
japaneseSushiSetTheme,
|
||||
gruvboxDarkTheme,
|
||||
monokaiTheme,
|
||||
colorfulTheme,
|
||||
rainyTheme,
|
||||
mauveTheme,
|
||||
grayTheme,
|
||||
];
|
||||
|
||||
export function applyTheme(theme: Theme, persisted = true) {
|
||||
@ -85,12 +101,12 @@ function compile(theme: Theme): { [key: string]: string } {
|
||||
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);
|
||||
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);
|
||||
props['primaryDarken' + i] = genValue(color);
|
||||
}
|
||||
|
BIN
src/client/assets/misskey-php-like-logo.png
Normal file
BIN
src/client/assets/misskey-php-like-logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 49 KiB |
@ -22,7 +22,7 @@ html, body
|
||||
|
||||
a
|
||||
text-decoration none
|
||||
color var(--primary)
|
||||
color var(--link)
|
||||
cursor pointer
|
||||
|
||||
&:hover
|
||||
@ -33,7 +33,7 @@ a
|
||||
|
||||
@css {
|
||||
a {
|
||||
tap-highlight-color: var(--primaryAlpha07) !important;
|
||||
-webkit-tap-highlight-color: var(--primaryAlpha07) !important;
|
||||
tap-highlight-color: var(--linkTapHighlight) !important;
|
||||
-webkit-tap-highlight-color: var(--linkTapHighlight) !important;
|
||||
}
|
||||
}
|
||||
|
21
src/client/theme/cafe.json5
Normal file
21
src/client/theme/cafe.json5
Normal 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',
|
||||
},
|
||||
}
|
23
src/client/theme/colorful.json5
Normal file
23
src/client/theme/colorful.json5
Normal 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'
|
||||
},
|
||||
}
|
@ -24,6 +24,15 @@
|
||||
scrollbarHandle: ':lighten<5<$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',
|
||||
faceText: '#fff',
|
||||
faceHeader: ':lighten<5<$secondary',
|
||||
@ -120,8 +129,10 @@
|
||||
mfmTitleBg: 'rgba(0, 0, 0, 0.2)',
|
||||
mfmQuote: ':alpha<0.7<$text',
|
||||
mfmQuoteLine: ':alpha<0.6<$text',
|
||||
mfmLink: '$primary',
|
||||
mfmUrl: '$primary',
|
||||
mfmLink: '@mfmUrl',
|
||||
mfmMention: '$primary',
|
||||
mfmMentionForeground: '@primaryForeground',
|
||||
mfmHashtag: '$primary',
|
||||
|
||||
suspendedInfoBg: '#611d1d',
|
||||
|
21
src/client/theme/gray.json5
Normal file
21
src/client/theme/gray.json5
Normal 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',
|
||||
},
|
||||
}
|
29
src/client/theme/gruvbox-dark.json5
Normal file
29
src/client/theme/gruvbox-dark.json5
Normal 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)',
|
||||
},
|
||||
}
|
20
src/client/theme/japanese-sushi-set.json5
Normal file
20
src/client/theme/japanese-sushi-set.json5
Normal 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',
|
||||
},
|
||||
}
|
@ -24,6 +24,15 @@
|
||||
scrollbarHandle: '#00000033',
|
||||
scrollbarHandleHover: '#00000066',
|
||||
|
||||
link: '$primary',
|
||||
linkTapHighlight: ':alpha<0.7<@link',
|
||||
|
||||
notificationIndicator: '$primary',
|
||||
|
||||
switchActive: '$primary',
|
||||
switchActiveTrack: ':alpha<0.4<@switchActive',
|
||||
radioActive: '$primary',
|
||||
|
||||
face: '$secondary',
|
||||
faceText: '$text',
|
||||
faceHeader: ':lighten<5<$secondary',
|
||||
@ -120,8 +129,10 @@
|
||||
mfmTitleBg: 'rgba(0, 0, 0, 0.07)',
|
||||
mfmQuote: ':alpha<0.6<$text',
|
||||
mfmQuoteLine: ':alpha<0.5<$text',
|
||||
mfmLink: '$primary',
|
||||
mfmUrl: '$primary',
|
||||
mfmLink: '@mfmUrl',
|
||||
mfmMention: '$primary',
|
||||
mfmMentionForeground: '@primaryForeground',
|
||||
mfmHashtag: '$primary',
|
||||
|
||||
suspendedInfoBg: '#ffdbdb',
|
||||
|
20
src/client/theme/mauve.json5
Normal file
20
src/client/theme/mauve.json5
Normal 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',
|
||||
},
|
||||
}
|
29
src/client/theme/monokai.json5
Normal file
29
src/client/theme/monokai.json5
Normal 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
Reference in New Issue
Block a user