Compare commits

...

216 Commits

Author SHA1 Message Date
46a953a9d8 2.18.2 2018-05-27 18:18:51 +09:00
46ef86e478 🎨 2018-05-27 18:18:18 +09:00
fa1a85f682 Fix bug 2018-05-27 18:12:39 +09:00
e477de6dd0 2.18.1 2018-05-27 13:58:35 +09:00
d5f92eed8c Refactor 2018-05-27 13:49:09 +09:00
7cdb790f4e Update favicon 2018-05-27 04:34:32 +09:00
20bb851c4e Fix bug 2018-05-27 03:01:08 +09:00
728dd446b3 Refactor 2018-05-27 02:56:54 +09:00
f8abc8193b 2.18.0 2018-05-27 00:29:31 +09:00
e7d1b6ec00 Fix bug 2018-05-27 00:27:46 +09:00
83c819a130 #1539 2018-05-27 00:18:44 +09:00
d29459fa37 Fix bug 2018-05-26 23:53:22 +09:00
100557e975 Fix bug 2018-05-26 23:37:40 +09:00
102aaeb390 Darken 2018-05-26 23:34:20 +09:00
67b3461c24 Better mention handling 2018-05-26 23:20:52 +09:00
5e4a0fd4ec Merge pull request #1652 from l2dy/readme
Update README.md
2018-05-26 22:40:27 +09:00
f840d491e5 Update README.md 2018-05-26 11:43:09 +00:00
8f175186bc Fix bug 2018-05-26 16:08:57 +09:00
ddb413ca52 🎨 2018-05-26 16:05:02 +09:00
5415b67baa Fix bug 2018-05-26 16:04:47 +09:00
19f6af475a Merge branch 'master' of https://github.com/syuilo/misskey 2018-05-26 13:31:52 +09:00
65a3bac543 ✌️ 2018-05-26 13:25:10 +09:00
f91a53d893 Update dependencies 🚀 2018-05-26 13:23:58 +09:00
f848e3f226 Merge pull request #1650 from syuilo/l10n_master
New Crowdin translations
2018-05-26 12:35:21 +09:00
bc94878225 Merge branch 'master' into l10n_master 2018-05-26 12:35:14 +09:00
bcf52bb2c3 New translations ja.yml (Portuguese) 2018-05-26 12:33:44 +09:00
2c25188f70 New translations ja.yml (Korean) 2018-05-26 12:33:42 +09:00
567aeacff5 New translations ja.yml (Polish) 2018-05-26 12:33:40 +09:00
4b9168e596 New translations ja.yml (Chinese Simplified) 2018-05-26 12:33:38 +09:00
8b79b28916 New translations ja.yml (Italian) 2018-05-26 12:33:36 +09:00
45706cc0ef New translations ja.yml (Russian) 2018-05-26 12:33:34 +09:00
c1e3f4e68e New translations ja.yml (English) 2018-05-26 12:33:32 +09:00
6cbbc97893 New translations ja.yml (Spanish) 2018-05-26 12:33:30 +09:00
fa09523821 New translations ja.yml (German) 2018-05-26 12:33:29 +09:00
7cb527d9ba New translations ja.yml (French) 2018-05-26 12:33:27 +09:00
5320f29fb0 Merge pull request #1649 from l2dy/i18n
i18n
2018-05-26 12:21:52 +09:00
7527af4656 i18n 2018-05-26 03:19:49 +00:00
6adb92b074 Merge pull request #1648 from syuilo/l10n_master
New Crowdin translations
2018-05-26 11:12:50 +09:00
6dc3844682 New translations ja.yml (Polish) 2018-05-26 11:11:18 +09:00
bfb16c27ee New translations ja.yml (English) 2018-05-26 11:00:59 +09:00
ed1cc0b81c 🎨 2018-05-26 10:59:18 +09:00
c66c1c9d2a New translations ja.yml (Portuguese) 2018-05-26 10:51:44 +09:00
1748fcf909 New translations ja.yml (Korean) 2018-05-26 10:51:42 +09:00
bdac8d58ae New translations ja.yml (Polish) 2018-05-26 10:51:40 +09:00
4e21801163 New translations ja.yml (Chinese Simplified) 2018-05-26 10:51:38 +09:00
4929687956 New translations ja.yml (Italian) 2018-05-26 10:51:36 +09:00
4ba7ad8a4b New translations ja.yml (Russian) 2018-05-26 10:51:34 +09:00
800fdaeaef New translations ja.yml (English) 2018-05-26 10:51:32 +09:00
08a89a924d New translations ja.yml (Spanish) 2018-05-26 10:51:29 +09:00
5b057d2275 New translations ja.yml (German) 2018-05-26 10:51:27 +09:00
bdc9bd1345 New translations ja.yml (French) 2018-05-26 10:51:25 +09:00
d8dc677906 Fix 2018-05-26 10:51:00 +09:00
9c312b0e26 Fix 2018-05-26 10:44:34 +09:00
8d28f68e0b Fix 2018-05-26 10:41:50 +09:00
317c9308cc Update add-file.ts 2018-05-26 09:57:31 +09:00
01cd3de5b3 Merge pull request #1647 from syuilo/l10n_master
New Crowdin translations
2018-05-26 09:54:23 +09:00
bc2774093a New translations ja.yml (Polish) 2018-05-25 23:31:57 +09:00
afb999187f Merge pull request #1646 from syuilo/l10n_master
New Crowdin translations
2018-05-25 23:28:23 +09:00
54d0598d92 New translations ja.yml (Polish) 2018-05-25 23:24:15 +09:00
163e60e32e Publish mention event 2018-05-25 22:25:38 +09:00
ccbcc2a738 Merge branch 'master' of https://github.com/syuilo/misskey 2018-05-25 21:21:45 +09:00
07e1882401 2.17.0 2018-05-25 21:21:37 +09:00
e56589d19e Merge pull request #1645 from syuilo/l10n_master
New Crowdin translations
2018-05-25 21:21:13 +09:00
bfb5367d27 New translations ja.yml (English) 2018-05-25 21:20:32 +09:00
712c0ef27d Refactor: Use better english 2018-05-25 21:05:16 +09:00
94b2ddef45 oops 2018-05-25 20:53:27 +09:00
b84a83adf4 New translations ja.yml (Portuguese) 2018-05-25 20:52:27 +09:00
c8514f58c6 New translations ja.yml (Korean) 2018-05-25 20:52:25 +09:00
841ddb036b New translations ja.yml (Polish) 2018-05-25 20:52:23 +09:00
982a37a413 New translations ja.yml (Chinese Simplified) 2018-05-25 20:52:21 +09:00
741af7cce5 New translations ja.yml (Italian) 2018-05-25 20:52:19 +09:00
9954080672 New translations ja.yml (Russian) 2018-05-25 20:52:17 +09:00
f47f4b4a5c New translations ja.yml (English) 2018-05-25 20:52:14 +09:00
1a3fab9cd9 New translations ja.yml (Spanish) 2018-05-25 20:52:11 +09:00
b683bf6f18 New translations ja.yml (German) 2018-05-25 20:52:09 +09:00
976ae1bf44 New translations ja.yml (French) 2018-05-25 20:52:06 +09:00
ffc63383dc i18n 2018-05-25 20:44:06 +09:00
c6ea6de5c2 Fix bug 2018-05-25 20:41:07 +09:00
fe812530d8 New translations ja.yml (English) 2018-05-25 20:31:35 +09:00
75d07175ae New translations ja.yml (Portuguese) 2018-05-25 20:26:11 +09:00
544580bd8b New translations ja.yml (Korean) 2018-05-25 20:26:09 +09:00
d30d307f80 New translations ja.yml (Polish) 2018-05-25 20:26:06 +09:00
5ccdfe258c New translations ja.yml (Chinese Simplified) 2018-05-25 20:26:04 +09:00
8f8b550608 New translations ja.yml (Italian) 2018-05-25 20:26:02 +09:00
7836d0b059 New translations ja.yml (Russian) 2018-05-25 20:25:59 +09:00
4b9cbe9ca7 New translations ja.yml (English) 2018-05-25 20:25:57 +09:00
034b223f8f New translations ja.yml (Spanish) 2018-05-25 20:25:55 +09:00
f87326620b New translations ja.yml (German) 2018-05-25 20:25:53 +09:00
b4a526ed18 New translations ja.yml (French) 2018-05-25 20:25:51 +09:00
410cc171c6 ✌️ 2018-05-25 20:23:36 +09:00
558b897700 リモートサーバーのファイルをデータベースに保存せず、クライアントで直接表示させられるように 2018-05-25 20:19:14 +09:00
e804757d83 Update gitignore 2018-05-25 18:41:59 +09:00
bd434ed02d Refactor and some fixes 2018-05-25 18:41:49 +09:00
df89f5c8b8 Update welcome.vue 2018-05-25 15:06:35 +09:00
3aebd8311f Merge pull request #1644 from syuilo/l10n_master
New Crowdin translations
2018-05-24 22:55:35 +09:00
f025296331 Enable HTTP/2 2018-05-24 22:21:10 +09:00
1a58a962bb New translations ja.yml (Portuguese) 2018-05-24 17:21:50 +09:00
079d6b0de8 New translations ja.yml (English) 2018-05-24 14:21:58 +09:00
321841101b 2.16.8 2018-05-24 09:48:30 +09:00
8071ca0d66 Merge branch 'master' of https://github.com/syuilo/misskey 2018-05-24 09:48:05 +09:00
c1141c5267 Fix bug 2018-05-24 09:48:02 +09:00
f1fdd4524d Update messaging-room.vue 2018-05-24 09:00:16 +09:00
02dd2c7f1a Update messaging-room.vue 2018-05-24 09:00:02 +09:00
fc3a323a21 Fix bug 2018-05-24 06:34:46 +09:00
d92f501b50 2.16.7 2018-05-24 06:22:20 +09:00
be408ba6ea Fix 2018-05-24 06:22:10 +09:00
c81a204e0c 2.16.6 2018-05-24 06:21:04 +09:00
fce1d619e8 Fix bug 2018-05-24 06:20:36 +09:00
3e146d5f94 2.16.5 2018-05-24 06:09:24 +09:00
cb5c0ac2f5 Fix bug 2018-05-24 06:08:23 +09:00
4798657b70 Refactor 2018-05-24 05:57:27 +09:00
f565e60bcf Darken 2018-05-24 05:46:09 +09:00
89461c598f Refactor 2018-05-24 05:28:46 +09:00
b320d08a5e 🎨 2018-05-24 04:56:58 +09:00
a930d4fc7b Fix bug 2018-05-24 04:55:29 +09:00
d42197fc2e Merge pull request #1642 from syuilo/l10n_master
New Crowdin translations
2018-05-23 20:52:32 +09:00
2d3138af76 New translations ja.yml (English) 2018-05-23 20:51:44 +09:00
4ee4b6f332 Update docs 2018-05-23 19:03:25 +09:00
fc6c048fad Update setup.ja.md 2018-05-23 19:00:23 +09:00
dae9c4288d 2.16.4 2018-05-23 16:00:08 +09:00
9f37149369 🎨 2018-05-23 15:58:53 +09:00
e476647ab8 🎨 2018-05-23 15:48:41 +09:00
eb23be979c oops 2018-05-23 15:47:51 +09:00
6d9d6a6779 oops 2018-05-23 15:46:20 +09:00
1c0cb1ae71 2.16.3 2018-05-23 15:27:31 +09:00
0ba5dc3900 Only show local posts in the timeline of top page 2018-05-23 15:25:15 +09:00
872717feeb Merge pull request #1638 from syuilo/l10n_master
New Crowdin translations
2018-05-23 14:07:36 +09:00
85b51f06a4 New translations ja.yml (English) 2018-05-23 14:01:15 +09:00
94df60d054 Merge pull request #1637 from syuilo/l10n_master
New Crowdin translations
2018-05-23 13:51:19 +09:00
7395284480 New translations ja.yml (English) 2018-05-23 13:50:54 +09:00
b537fa5467 Merge pull request #1636 from syuilo/l10n_master
New Crowdin translations
2018-05-22 23:55:42 +09:00
dca58c20d2 New translations ja.yml (Chinese Simplified) 2018-05-22 23:54:36 +09:00
0a3030f7d0 New translations ja.yml (English) 2018-05-22 19:35:05 +09:00
81cc6f3104 2.16.2 2018-05-22 18:20:49 +09:00
cc0b9c6933 oops 2018-05-22 18:19:02 +09:00
5671f1c6a4 2.16.1 2018-05-22 11:47:23 +09:00
89dee86f39 Fix bug and remove unnecessary query 2018-05-22 11:45:49 +09:00
b414068ada Refactor 2018-05-22 11:39:48 +09:00
3be7952e9f Improve avatar rendering 2018-05-22 11:34:40 +09:00
137b5da4aa Fix bug 2018-05-22 11:31:06 +09:00
2ee1639acb Merge pull request #1631 from syuilo/l10n_master
New Crowdin translations
2018-05-22 07:13:58 +09:00
a05b184595 New translations ja.yml (Polish) 2018-05-22 06:00:58 +09:00
f3bacae1dc 2.16.0 2018-05-21 21:52:10 +09:00
af5fb99fe6 Merge pull request #1629 from syuilo/l10n_master
New Crowdin translations
2018-05-21 21:51:39 +09:00
0ebe4ad7a3 New translations ja.yml (English) 2018-05-21 21:51:24 +09:00
0cf99037c8 Merge pull request #1628 from syuilo/l10n_master
New Crowdin translations
2018-05-21 21:41:46 +09:00
b913debc57 New translations ja.yml (Korean) 2018-05-21 21:41:26 +09:00
abe3f1f5e9 New translations ja.yml (Polish) 2018-05-21 21:41:23 +09:00
d30b88364c New translations ja.yml (Chinese Simplified) 2018-05-21 21:41:21 +09:00
4840b7acf7 New translations ja.yml (Italian) 2018-05-21 21:41:19 +09:00
f5bac11fae New translations ja.yml (Russian) 2018-05-21 21:41:17 +09:00
68a70a94fc New translations ja.yml (English) 2018-05-21 21:41:15 +09:00
bf7436ddf8 New translations ja.yml (Spanish) 2018-05-21 21:41:13 +09:00
b99155a084 New translations ja.yml (German) 2018-05-21 21:41:11 +09:00
027e62a6ea New translations ja.yml (French) 2018-05-21 21:41:08 +09:00
c6b6c8afbd Clean up 2018-05-21 21:41:06 +09:00
1236a09247 New welcome page 2018-05-21 21:39:46 +09:00
6a4d38045e Merge branch 'master' of https://github.com/syuilo/misskey 2018-05-21 20:54:54 +09:00
281aed2797 Fix bug 2018-05-21 20:54:52 +09:00
3e47f9943a Merge pull request #1627 from syuilo/l10n_master
New Crowdin translations
2018-05-21 20:36:36 +09:00
f6d27dd17d [travis] Ignore l10n_master 2018-05-21 20:36:14 +09:00
073704c7af New translations ja.yml (Korean) 2018-05-21 20:31:48 +09:00
809db02ca2 New translations ja.yml (Polish) 2018-05-21 20:31:47 +09:00
2e45ff6a32 New translations ja.yml (Chinese Simplified) 2018-05-21 20:31:45 +09:00
02d6974be9 New translations ja.yml (Italian) 2018-05-21 20:31:43 +09:00
e530afb2fe New translations ja.yml (Russian) 2018-05-21 20:31:41 +09:00
dba15f0e8b New translations ja.yml (English) 2018-05-21 20:31:39 +09:00
8f771c60c5 New translations ja.yml (Spanish) 2018-05-21 20:31:37 +09:00
d9b1ca8c48 New translations ja.yml (German) 2018-05-21 20:31:35 +09:00
9e247c119a New translations ja.yml (French) 2018-05-21 20:31:33 +09:00
08b5e21e96 ✌️ 2018-05-21 20:30:42 +09:00
2101d3aa5b Update locales 2018-05-21 20:28:33 +09:00
aa80fb5d4a 2.15.0 2018-05-21 15:18:27 +09:00
63727f6514 Merge pull request #1626 from syuilo/l10n_master
New Crowdin translations
2018-05-21 15:11:13 +09:00
ade35cbb2d New translations ja.yml (Korean) 2018-05-21 15:10:59 +09:00
6ec9059ccc New translations ja.yml (Polish) 2018-05-21 15:10:57 +09:00
c93d1711cf New translations ja.yml (Chinese Simplified) 2018-05-21 15:10:55 +09:00
e734ad0413 New translations ja.yml (Italian) 2018-05-21 15:10:54 +09:00
047dee3a70 New translations ja.yml (Russian) 2018-05-21 15:10:52 +09:00
8c76089caf New translations ja.yml (English) 2018-05-21 15:10:50 +09:00
ab6cf2dba3 New translations ja.yml (Spanish) 2018-05-21 15:10:48 +09:00
65a309e605 New translations ja.yml (German) 2018-05-21 15:10:46 +09:00
f37e713640 New translations ja.yml (French) 2018-05-21 15:10:44 +09:00
bc1e9245bd ✌️ 2018-05-21 15:00:42 +09:00
2fa82bde16 🎨 2018-05-21 14:57:27 +09:00
140249172c Display isAdmin badge 2018-05-21 14:47:21 +09:00
9677d1288a 2.14.0 2018-05-21 11:16:17 +09:00
133ae7d171 Merge pull request #1625 from syuilo/l10n_master
New Crowdin translations
2018-05-21 11:15:45 +09:00
5b92a43361 Fix bug 2018-05-21 11:14:57 +09:00
b839bf6918 New translations ja.yml (Korean) 2018-05-21 11:11:10 +09:00
7ea4ba1d5a New translations ja.yml (Polish) 2018-05-21 11:11:08 +09:00
f000dbd657 New translations ja.yml (Chinese Simplified) 2018-05-21 11:11:06 +09:00
36e4a24527 New translations ja.yml (Italian) 2018-05-21 11:11:04 +09:00
861cc83014 New translations ja.yml (Russian) 2018-05-21 11:11:02 +09:00
d2b273dc3b New translations ja.yml (English) 2018-05-21 11:11:00 +09:00
e49ad120f3 New translations ja.yml (Spanish) 2018-05-21 11:10:58 +09:00
6f441f35ec New translations ja.yml (German) 2018-05-21 11:10:56 +09:00
14a5c429bb New translations ja.yml (French) 2018-05-21 11:10:54 +09:00
100125ad5a Fix bug 2018-05-21 11:08:14 +09:00
f8c414aafc #1621 2018-05-21 11:08:08 +09:00
14aedb07aa Update .eslintrc 2018-05-21 10:35:42 +09:00
40b01e0ad3 Merge pull request #1624 from syuilo/l10n_master
New Crowdin translations
2018-05-21 09:31:11 +09:00
f9f6718174 New translations ja.yml (Korean) 2018-05-21 09:30:52 +09:00
c41723b09f New translations ja.yml (Polish) 2018-05-21 09:30:50 +09:00
1b6effd369 New translations ja.yml (Chinese Simplified) 2018-05-21 09:30:49 +09:00
1bbf7a45a8 New translations ja.yml (Italian) 2018-05-21 09:30:47 +09:00
0a5e021128 New translations ja.yml (Russian) 2018-05-21 09:30:45 +09:00
52ebde60fc New translations ja.yml (English) 2018-05-21 09:30:43 +09:00
c77cf79f5d New translations ja.yml (Spanish) 2018-05-21 09:30:41 +09:00
1233abe5b0 New translations ja.yml (German) 2018-05-21 09:30:39 +09:00
f2f2b09ff1 New translations ja.yml (French) 2018-05-21 09:30:36 +09:00
5bf87b7efe Merge pull request #1623 from syuilo/l10n_master
New Crowdin translations
2018-05-21 09:27:57 +09:00
526321adb6 Merge pull request #1622 from m4sk1n/master
fix typo
2018-05-21 09:27:25 +09:00
f816daa59e New translations ja.yml (Polish) 2018-05-21 05:50:41 +09:00
5d6f75ec05 New translations ja.yml (Polish) 2018-05-21 05:41:13 +09:00
28994d001c fix typo
Signed-off-by: Marcin Mikołajczak <me@m4sk.in>
2018-05-20 22:37:03 +02:00
162 changed files with 2645 additions and 2067 deletions

View File

@ -22,6 +22,7 @@
"globals": { "globals": {
"ENV": true, "ENV": true,
"VERSION": true, "VERSION": true,
"API": true "API": true,
"LANGS": true
} }
} }

1
.gitignore vendored
View File

@ -5,6 +5,7 @@
/build /build
/built /built
/data /data
/.cache-loader
npm-debug.log npm-debug.log
*.pem *.pem
run.bat run.bat

View File

@ -4,6 +4,10 @@
notifications: notifications:
email: false email: false
branches:
except:
- l10n_master
language: node_js language: node_js
node_js: node_js:

View File

@ -25,7 +25,7 @@ ultimately sophisticated new type of mini-blog based SNS.
* Real time contents * Real time contents
* ActivityPub compatible * ActivityPub compatible
and more! You can touch with your own eyes at [misskey.xyz](https://misskey.xyz). and more! You can see it with your own eyes at [misskey.xyz](https://misskey.xyz).
:package: Create your instance :package: Create your instance
---------------------------------------------------------------- ----------------------------------------------------------------

Binary file not shown.

Before

Width:  |  Height:  |  Size: 352 KiB

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -1,161 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="896"
height="896"
viewBox="0 0 237.06667 237.06667"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="128.svg"
inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\128.png"
inkscape:export-xdpi="13.714286"
inkscape:export-ydpi="13.714286">
<defs
id="defs2">
<inkscape:path-effect
effect="simplify"
id="path-effect5115"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect5111"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect5104"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7071068"
inkscape:cx="908.16505"
inkscape:cy="468.2779"
inkscape:document-units="px"
inkscape:current-layer="g4502"
showgrid="true"
units="px"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-center="true"
inkscape:snap-page="true"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="1072"
inkscape:window-maximized="1"
inkscape:snap-object-midpoints="true"
inkscape:snap-midpoints="true"
inkscape:object-paths="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
objecttolerance="1"
guidetolerance="1"
inkscape:snap-nodes="true"
inkscape:snap-others="false"
inkscape:bbox-paths="true"
inkscape:snap-bbox-midpoints="true">
<inkscape:grid
type="xygrid"
id="grid4504"
spacingx="4.2333334"
spacingy="4.2333334"
empcolor="#ff3fff"
empopacity="0.25098039"
empspacing="4" />
</sodipodi:namedview>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="レイヤー 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-30.809093,-10.18601)">
<g
id="g4502"
transform="matrix(1.096096,0,0,1.096096,47.839369,-94.823577)"
inkscape:export-xdpi="6"
inkscape:export-ydpi="6">
<rect
style="opacity:1;fill:#2fa1bb;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.96554804;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.97647059"
id="rect4506"
width="216.28276"
height="216.28278"
x="-15.537212"
y="95.803268" />
<g
style="fill:#ffffff;fill-opacity:1"
transform="translate(-1.3333333e-6,-1.3439941e-6)"
id="g5125">
<g
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)"
id="text4489"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Mi">
<path
sodipodi:nodetypes="zccssscssccscczzzccsccsscscsccz"
inkscape:connector-curvature="0"
id="path5210"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#ffffff;fill-opacity:1;stroke-width:0.28950602px"
d="m 75.196381,231.17126 c -5.855419,0.0202 -10.885068,-3.50766 -13.2572,-7.61584 -1.266603,-1.79454 -3.772419,-2.43291 -3.807919,0 v 11.2332 c 0,4.51309 -1.645397,8.41504 -4.936191,11.70583 -3.196772,3.19677 -7.098714,4.79516 -11.705826,4.79516 -4.513089,0 -8.415031,-1.59839 -11.705825,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -61.7729 c 0,-3.47884 0.987238,-6.6286 2.961715,-9.44928 2.068499,-2.91471 4.701135,-4.9362 7.897906,-6.06447 1.786431,-0.65816 3.666885,-0.98724 5.641362,-0.98724 5.077225,0 9.308247,1.97448 12.693064,5.92343 1.786431,1.97448 2.820681,3.00873 3.102749,3.10275 0,0 13.408119,16.21319 13.78421,16.49526 0.376091,0.28206 1.480789,2.43848 4.127113,2.43848 2.646324,0 3.89218,-2.15642 4.26827,-2.43848 0.376091,-0.28207 13.784088,-16.49526 13.784088,-16.49526 0.09402,0.094 1.081261,-0.94022 2.961715,-3.10275 3.478837,-3.94895 7.756866,-5.92343 12.834096,-5.92343 1.88045,0 3.76091,0.32908 5.64136,0.98724 3.19677,1.12827 5.7824,3.14976 7.75688,6.06447 2.06849,2.82068 3.10274,5.97044 3.10274,9.44928 v 61.7729 c 0,4.51309 -1.6454,8.41504 -4.93619,11.70583 -3.19677,3.19677 -7.09871,4.79516 -11.70582,4.79516 -4.51309,0 -8.41504,-1.59839 -11.705828,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -11.2332 c -0.277898,-3.06563 -2.987588,-1.13379 -3.948953,0 -2.538613,4.70114 -7.401781,7.59567 -13.2572,7.61584 z" />
<path
inkscape:connector-curvature="0"
id="path5212"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#ffffff;fill-opacity:1;stroke-width:0.28950602px"
d="m 145.83461,185.00361 q -5.92343,0 -10.15445,-4.08999 -4.08999,-4.23102 -4.08999,-10.15445 0,-5.92343 4.08999,-10.01342 4.23102,-4.23102 10.15445,-4.23102 5.92343,0 10.15445,4.23102 4.23102,4.08999 4.23102,10.01342 0,5.92343 -4.23102,10.15445 -4.23102,4.08999 -10.15445,4.08999 z m 0.14103,2.82068 q 5.92343,0 10.01342,4.23102 4.23102,4.23102 4.23102,10.15445 v 34.83541 q 0,5.92343 -4.23102,10.15445 -4.08999,4.08999 -10.01342,4.08999 -5.92343,0 -10.15445,-4.08999 -4.23102,-4.23102 -4.23102,-10.15445 v -34.83541 q 0,-5.92343 4.23102,-10.15445 4.23102,-4.23102 10.15445,-4.23102 z" />
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 518 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -1,161 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="896"
height="896"
viewBox="0 0 237.06667 237.06667"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="256.svg"
inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\256.png"
inkscape:export-xdpi="27.428572"
inkscape:export-ydpi="27.428572">
<defs
id="defs2">
<inkscape:path-effect
effect="simplify"
id="path-effect5115"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect5111"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect5104"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7071068"
inkscape:cx="908.16505"
inkscape:cy="468.2779"
inkscape:document-units="px"
inkscape:current-layer="g4502"
showgrid="true"
units="px"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-center="true"
inkscape:snap-page="true"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="1072"
inkscape:window-maximized="1"
inkscape:snap-object-midpoints="true"
inkscape:snap-midpoints="true"
inkscape:object-paths="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
objecttolerance="1"
guidetolerance="1"
inkscape:snap-nodes="true"
inkscape:snap-others="false"
inkscape:bbox-paths="true"
inkscape:snap-bbox-midpoints="true">
<inkscape:grid
type="xygrid"
id="grid4504"
spacingx="4.2333334"
spacingy="4.2333334"
empcolor="#ff3fff"
empopacity="0.25098039"
empspacing="4" />
</sodipodi:namedview>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="レイヤー 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-30.809093,-10.18601)">
<g
id="g4502"
transform="matrix(1.096096,0,0,1.096096,47.839369,-94.823577)"
inkscape:export-xdpi="6"
inkscape:export-ydpi="6">
<rect
style="opacity:1;fill:#2fa1bb;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.96554804;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.97647059"
id="rect4506"
width="216.28276"
height="216.28278"
x="-15.537212"
y="95.803268" />
<g
style="fill:#ffffff;fill-opacity:1"
transform="translate(-1.3333333e-6,-1.3439941e-6)"
id="g5125">
<g
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)"
id="text4489"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Mi">
<path
sodipodi:nodetypes="zccssscssccscczzzccsccsscscsccz"
inkscape:connector-curvature="0"
id="path5210"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#ffffff;fill-opacity:1;stroke-width:0.28950602px"
d="m 75.196381,231.17126 c -5.855419,0.0202 -10.885068,-3.50766 -13.2572,-7.61584 -1.266603,-1.79454 -3.772419,-2.43291 -3.807919,0 v 11.2332 c 0,4.51309 -1.645397,8.41504 -4.936191,11.70583 -3.196772,3.19677 -7.098714,4.79516 -11.705826,4.79516 -4.513089,0 -8.415031,-1.59839 -11.705825,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -61.7729 c 0,-3.47884 0.987238,-6.6286 2.961715,-9.44928 2.068499,-2.91471 4.701135,-4.9362 7.897906,-6.06447 1.786431,-0.65816 3.666885,-0.98724 5.641362,-0.98724 5.077225,0 9.308247,1.97448 12.693064,5.92343 1.786431,1.97448 2.820681,3.00873 3.102749,3.10275 0,0 13.408119,16.21319 13.78421,16.49526 0.376091,0.28206 1.480789,2.43848 4.127113,2.43848 2.646324,0 3.89218,-2.15642 4.26827,-2.43848 0.376091,-0.28207 13.784088,-16.49526 13.784088,-16.49526 0.09402,0.094 1.081261,-0.94022 2.961715,-3.10275 3.478837,-3.94895 7.756866,-5.92343 12.834096,-5.92343 1.88045,0 3.76091,0.32908 5.64136,0.98724 3.19677,1.12827 5.7824,3.14976 7.75688,6.06447 2.06849,2.82068 3.10274,5.97044 3.10274,9.44928 v 61.7729 c 0,4.51309 -1.6454,8.41504 -4.93619,11.70583 -3.19677,3.19677 -7.09871,4.79516 -11.70582,4.79516 -4.51309,0 -8.41504,-1.59839 -11.705828,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -11.2332 c -0.277898,-3.06563 -2.987588,-1.13379 -3.948953,0 -2.538613,4.70114 -7.401781,7.59567 -13.2572,7.61584 z" />
<path
inkscape:connector-curvature="0"
id="path5212"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#ffffff;fill-opacity:1;stroke-width:0.28950602px"
d="m 145.83461,185.00361 q -5.92343,0 -10.15445,-4.08999 -4.08999,-4.23102 -4.08999,-10.15445 0,-5.92343 4.08999,-10.01342 4.23102,-4.23102 10.15445,-4.23102 5.92343,0 10.15445,4.23102 4.23102,4.08999 4.23102,10.01342 0,5.92343 -4.23102,10.15445 -4.23102,4.08999 -10.15445,4.08999 z m 0.14103,2.82068 q 5.92343,0 10.01342,4.23102 4.23102,4.23102 4.23102,10.15445 v 34.83541 q 0,5.92343 -4.23102,10.15445 -4.08999,4.08999 -10.01342,4.08999 -5.92343,0 -10.15445,-4.08999 -4.23102,-4.23102 -4.23102,-10.15445 v -34.83541 q 0,-5.92343 4.23102,-10.15445 4.23102,-4.23102 10.15445,-4.23102 z" />
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 761 B

View File

@ -1,152 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="640"
height="640"
viewBox="0 0 169.33333 169.33333"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="32.svg"
inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\32.png"
inkscape:export-xdpi="4.8000002"
inkscape:export-ydpi="4.8000002">
<defs
id="defs2">
<inkscape:path-effect
effect="simplify"
id="path-effect5115"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect5111"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect5104"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7071068"
inkscape:cx="16.781901"
inkscape:cy="343.6089"
inkscape:document-units="px"
inkscape:current-layer="g4502"
showgrid="true"
units="px"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="false"
inkscape:snap-smooth-nodes="true"
inkscape:snap-center="true"
inkscape:snap-page="true"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="1072"
inkscape:window-maximized="1"
inkscape:snap-object-midpoints="true"
inkscape:snap-midpoints="true"
inkscape:object-paths="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
objecttolerance="1"
guidetolerance="1"
inkscape:snap-nodes="false"
inkscape:snap-others="false">
<inkscape:grid
type="xygrid"
id="grid4504"
spacingx="4.2333334"
spacingy="4.2333334"
empcolor="#ff3fff"
empopacity="0.25098039"
empspacing="4" />
</sodipodi:namedview>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="レイヤー 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-30.809093,-77.919343)">
<g
id="g4502"
transform="matrix(1.096096,0,0,1.096096,13.972699,-60.956914)"
inkscape:export-xdpi="6"
inkscape:export-ydpi="6">
<g
style="fill:#2fa1bb;fill-opacity:1"
transform="translate(-1.7127735e-6,-1.5982974e-6)"
id="g5125">
<g
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)"
id="text4489"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#2fa1bb;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Mi">
<path
sodipodi:nodetypes="zccssscssccscczzzccsccsscscsccz"
inkscape:connector-curvature="0"
id="path5210"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#2fa1bb;fill-opacity:1;stroke-width:0.28950602px"
d="m 75.196381,231.17126 c -5.855419,0.0202 -10.885068,-3.50766 -13.2572,-7.61584 -1.266603,-1.79454 -3.772419,-2.43291 -3.807919,0 v 11.2332 c 0,4.51309 -1.645397,8.41504 -4.936191,11.70583 -3.196772,3.19677 -7.098714,4.79516 -11.705826,4.79516 -4.513089,0 -8.415031,-1.59839 -11.705825,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -61.7729 c 0,-3.47884 0.987238,-6.6286 2.961715,-9.44928 2.068499,-2.91471 4.701135,-4.9362 7.897906,-6.06447 1.786431,-0.65816 3.666885,-0.98724 5.641362,-0.98724 5.077225,0 9.308247,1.97448 12.693064,5.92343 1.786431,1.97448 2.820681,3.00873 3.102749,3.10275 0,0 13.408119,16.21319 13.78421,16.49526 0.376091,0.28206 1.480789,2.43848 4.127113,2.43848 2.646324,0 3.89218,-2.15642 4.26827,-2.43848 0.376091,-0.28207 13.784088,-16.49526 13.784088,-16.49526 0.09402,0.094 1.081261,-0.94022 2.961715,-3.10275 3.478837,-3.94895 7.756866,-5.92343 12.834096,-5.92343 1.88045,0 3.76091,0.32908 5.64136,0.98724 3.19677,1.12827 5.7824,3.14976 7.75688,6.06447 2.06849,2.82068 3.10274,5.97044 3.10274,9.44928 v 61.7729 c 0,4.51309 -1.6454,8.41504 -4.93619,11.70583 -3.19677,3.19677 -7.09871,4.79516 -11.70582,4.79516 -4.51309,0 -8.41504,-1.59839 -11.705828,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -11.2332 c -0.277898,-3.06563 -2.987588,-1.13379 -3.948953,0 -2.538613,4.70114 -7.401781,7.59567 -13.2572,7.61584 z" />
<path
inkscape:connector-curvature="0"
id="path5212"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#2fa1bb;fill-opacity:1;stroke-width:0.28950602px"
d="m 145.83461,185.00361 q -5.92343,0 -10.15445,-4.08999 -4.08999,-4.23102 -4.08999,-10.15445 0,-5.92343 4.08999,-10.01342 4.23102,-4.23102 10.15445,-4.23102 5.92343,0 10.15445,4.23102 4.23102,4.08999 4.23102,10.01342 0,5.92343 -4.23102,10.15445 -4.23102,4.08999 -10.15445,4.08999 z m 0.14103,2.82068 q 5.92343,0 10.01342,4.23102 4.23102,4.23102 4.23102,10.15445 v 34.83541 q 0,5.92343 -4.23102,10.15445 -4.08999,4.08999 -10.01342,4.08999 -5.92343,0 -10.15445,-4.08999 -4.23102,-4.23102 -4.23102,-10.15445 v -34.83541 q 0,-5.92343 4.23102,-10.15445 4.23102,-4.23102 10.15445,-4.23102 z" />
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1,152 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="768"
height="768"
viewBox="0 0 203.2 203.2"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="64.svg"
inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\64.png"
inkscape:export-xdpi="8"
inkscape:export-ydpi="8">
<defs
id="defs2">
<inkscape:path-effect
effect="simplify"
id="path-effect5115"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect5111"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect5104"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7071068"
inkscape:cx="16.781901"
inkscape:cy="343.6089"
inkscape:document-units="px"
inkscape:current-layer="g5125"
showgrid="true"
units="px"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="false"
inkscape:snap-smooth-nodes="true"
inkscape:snap-center="true"
inkscape:snap-page="true"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="1072"
inkscape:window-maximized="1"
inkscape:snap-object-midpoints="true"
inkscape:snap-midpoints="true"
inkscape:object-paths="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
objecttolerance="1"
guidetolerance="1"
inkscape:snap-nodes="false"
inkscape:snap-others="false">
<inkscape:grid
type="xygrid"
id="grid4504"
spacingx="4.2333334"
spacingy="4.2333334"
empcolor="#ff3fff"
empopacity="0.25098039"
empspacing="4" />
</sodipodi:namedview>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="レイヤー 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-30.809093,-44.052677)">
<g
id="g4502"
transform="matrix(1.096096,0,0,1.096096,30.906034,-77.890245)"
inkscape:export-xdpi="6"
inkscape:export-ydpi="6">
<g
style="fill:#2fa1bb;fill-opacity:0.94117647"
transform="translate(-1.3333333e-6,-1.3439941e-6)"
id="g5125">
<g
transform="matrix(0.91391326,0,0,0.91391326,7.9719903,17.595761)"
id="text4489"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#2fa1bb;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Mi">
<path
sodipodi:nodetypes="zccssscssccscczzzccsccsscscsccz"
inkscape:connector-curvature="0"
id="path5210"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#2fa1bb;fill-opacity:1;stroke-width:0.28950602px"
d="m 75.196381,231.17126 c -5.855419,0.0202 -10.885068,-3.50766 -13.2572,-7.61584 -1.266603,-1.79454 -3.772419,-2.43291 -3.807919,0 v 11.2332 c 0,4.51309 -1.645397,8.41504 -4.936191,11.70583 -3.196772,3.19677 -7.098714,4.79516 -11.705826,4.79516 -4.513089,0 -8.415031,-1.59839 -11.705825,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -61.7729 c 0,-3.47884 0.987238,-6.6286 2.961715,-9.44928 2.068499,-2.91471 4.701135,-4.9362 7.897906,-6.06447 1.786431,-0.65816 3.666885,-0.98724 5.641362,-0.98724 5.077225,0 9.308247,1.97448 12.693064,5.92343 1.786431,1.97448 2.820681,3.00873 3.102749,3.10275 0,0 13.408119,16.21319 13.78421,16.49526 0.376091,0.28206 1.480789,2.43848 4.127113,2.43848 2.646324,0 3.89218,-2.15642 4.26827,-2.43848 0.376091,-0.28207 13.784088,-16.49526 13.784088,-16.49526 0.09402,0.094 1.081261,-0.94022 2.961715,-3.10275 3.478837,-3.94895 7.756866,-5.92343 12.834096,-5.92343 1.88045,0 3.76091,0.32908 5.64136,0.98724 3.19677,1.12827 5.7824,3.14976 7.75688,6.06447 2.06849,2.82068 3.10274,5.97044 3.10274,9.44928 v 61.7729 c 0,4.51309 -1.6454,8.41504 -4.93619,11.70583 -3.19677,3.19677 -7.09871,4.79516 -11.70582,4.79516 -4.51309,0 -8.41504,-1.59839 -11.705828,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -11.2332 c -0.277898,-3.06563 -2.987588,-1.13379 -3.948953,0 -2.538613,4.70114 -7.401781,7.59567 -13.2572,7.61584 z" />
<path
inkscape:connector-curvature="0"
id="path5212"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#2fa1bb;fill-opacity:1;stroke-width:0.28950602px"
d="m 145.83461,185.00361 q -5.92343,0 -10.15445,-4.08999 -4.08999,-4.23102 -4.08999,-10.15445 0,-5.92343 4.08999,-10.01342 4.23102,-4.23102 10.15445,-4.23102 5.92343,0 10.15445,4.23102 4.23102,4.08999 4.23102,10.01342 0,5.92343 -4.23102,10.15445 -4.23102,4.08999 -10.15445,4.08999 z m 0.14103,2.82068 q 5.92343,0 10.01342,4.23102 4.23102,4.23102 4.23102,10.15445 v 34.83541 q 0,5.92343 -4.23102,10.15445 -4.08999,4.08999 -10.01342,4.08999 -5.92343,0 -10.15445,-4.08999 -4.23102,-4.23102 -4.23102,-10.15445 v -34.83541 q 0,-5.92343 4.23102,-10.15445 4.23102,-4.23102 10.15445,-4.23102 z" />
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.0 KiB

BIN
assets/favicon/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -15,7 +15,7 @@
version="1.1" version="1.1"
id="svg8" id="svg8"
inkscape:version="0.92.1 r15371" inkscape:version="0.92.1 r15371"
sodipodi:docname="16.svg" sodipodi:docname="favicon.svg"
inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\16.png" inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\16.png"
inkscape:export-xdpi="3" inkscape:export-xdpi="3"
inkscape:export-ydpi="3"> inkscape:export-ydpi="3">
@ -66,7 +66,7 @@
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="1.4142136" inkscape:zoom="1.4142136"
inkscape:cx="110.21885" inkscape:cx="15.466544"
inkscape:cy="235.92965" inkscape:cy="235.92965"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:current-layer="g4502" inkscape:current-layer="g4502"
@ -79,7 +79,7 @@
inkscape:snap-center="true" inkscape:snap-center="true"
inkscape:snap-page="true" inkscape:snap-page="true"
inkscape:window-width="1920" inkscape:window-width="1920"
inkscape:window-height="1017" inkscape:window-height="1027"
inkscape:window-x="-8" inkscape:window-x="-8"
inkscape:window-y="1072" inkscape:window-y="1072"
inkscape:window-maximized="1" inkscape:window-maximized="1"
@ -111,7 +111,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title /> <dc:title></dc:title>
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

140
assets/title-dark.svg Normal file
View File

@ -0,0 +1,140 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="614.71039"
height="205.08009"
viewBox="0 0 162.64213 54.260776"
version="1.1"
id="svg8"
inkscape:version="0.92.1 r15371"
sodipodi:docname="misskey.svg"
inkscape:export-filename="C:\Users\Takumiya_Cho\Desktop\misskey.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96">
<defs
id="defs2">
<inkscape:path-effect
effect="simplify"
id="path-effect5115"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
<inkscape:path-effect
effect="simplify"
id="path-effect5104"
is_visible="true"
steps="1"
threshold="0.000408163"
smooth_angles="360"
helper_size="0"
simplify_individual_paths="false"
simplify_just_coalesce="false"
simplifyindividualpaths="false"
simplifyJustCoalesce="false" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.9899495"
inkscape:cx="370.82839"
inkscape:cy="79.043895"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:snap-bbox="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="false"
inkscape:snap-smooth-nodes="true"
inkscape:snap-center="true"
inkscape:snap-page="true"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="-8"
inkscape:window-y="1072"
inkscape:window-maximized="1"
inkscape:object-paths="true"
inkscape:bbox-paths="true"
fit-margin-top="50"
fit-margin-left="50"
fit-margin-bottom="20"
fit-margin-right="50" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="レイヤー 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-11.097531,-173.29664)">
<g
transform="matrix(0.28612302,0,0,0.28612302,17.176981,141.74334)"
id="text4489-6"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:141.03404236px;line-height:476.69509888px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#fff;fill-opacity:1;stroke:none;stroke-width:0.92471898px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
aria-label="Mi">
<path
sodipodi:nodetypes="zccssscssccscczzzccsccsscscsccz"
inkscape:connector-curvature="0"
id="path5210"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#fff;fill-opacity:1;stroke-width:0.92471898px"
d="m 75.196381,231.17126 c -5.855419,0.0202 -10.885068,-3.50766 -13.2572,-7.61584 -1.266603,-1.79454 -3.772419,-2.43291 -3.807919,0 v 11.2332 c 0,4.51309 -1.645397,8.41504 -4.936191,11.70583 -3.196772,3.19677 -7.098714,4.79516 -11.705826,4.79516 -4.513089,0 -8.415031,-1.59839 -11.705825,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -61.7729 c 0,-3.47884 0.987238,-6.6286 2.961715,-9.44928 2.068499,-2.91471 4.701135,-4.9362 7.897906,-6.06447 1.786431,-0.65816 3.666885,-0.98724 5.641362,-0.98724 5.077225,0 9.308247,1.97448 12.693064,5.92343 1.786431,1.97448 2.820681,3.00873 3.102749,3.10275 0,0 13.408119,16.21319 13.78421,16.49526 0.376091,0.28206 1.480789,2.43848 4.127113,2.43848 2.646324,0 3.89218,-2.15642 4.26827,-2.43848 0.376091,-0.28207 13.784088,-16.49526 13.784088,-16.49526 0.09402,0.094 1.081261,-0.94022 2.961715,-3.10275 3.478837,-3.94895 7.756866,-5.92343 12.834096,-5.92343 1.88045,0 3.76091,0.32908 5.64136,0.98724 3.19677,1.12827 5.7824,3.14976 7.75688,6.06447 2.06849,2.82068 3.10274,5.97044 3.10274,9.44928 v 61.7729 c 0,4.51309 -1.6454,8.41504 -4.93619,11.70583 -3.19677,3.19677 -7.09871,4.79516 -11.70582,4.79516 -4.51309,0 -8.41504,-1.59839 -11.705828,-4.79516 -3.196772,-3.29079 -4.795158,-7.19274 -4.795158,-11.70583 v -11.2332 c -0.277898,-3.06563 -2.987588,-1.13379 -3.948953,0 -2.538613,4.70114 -7.401781,7.59567 -13.2572,7.61584 z" />
<path
inkscape:connector-curvature="0"
id="path5212"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#fff;fill-opacity:1;stroke-width:0.92471898px"
d="m 145.83461,185.00361 q -5.92343,0 -10.15445,-4.08999 -4.08999,-4.23102 -4.08999,-10.15445 0,-5.92343 4.08999,-10.01342 4.23102,-4.23102 10.15445,-4.23102 5.92343,0 10.15445,4.23102 4.23102,4.08999 4.23102,10.01342 0,5.92343 -4.23102,10.15445 -4.23102,4.08999 -10.15445,4.08999 z m 0.14103,2.82068 q 5.92343,0 10.01342,4.23102 4.23102,4.23102 4.23102,10.15445 v 34.83541 q 0,5.92343 -4.23102,10.15445 -4.08999,4.08999 -10.01342,4.08999 -5.92343,0 -10.15445,-4.08999 -4.23102,-4.23102 -4.23102,-10.15445 v -34.83541 q 0,-5.92343 4.23102,-10.15445 4.23102,-4.23102 10.15445,-4.23102 z" />
</g>
<path
inkscape:connector-curvature="0"
id="path5199"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#fff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 72.022691,200.53715 q 0.968125,0.24203 2.420312,0.5244 2.420313,0.40339 3.791824,1.29083 2.581666,1.69422 2.581666,5.08266 0,2.74302 -1.815234,4.47758 -2.097604,2.01693 -5.849089,2.01693 -2.743021,0 -6.131458,-0.76644 -1.089141,-0.24203 -1.774896,-1.08914 -0.645417,-0.84711 -0.645417,-1.89591 0,-1.29083 0.887448,-2.17828 0.927786,-0.92779 2.178281,-0.92779 0.363047,0 0.685756,0.0807 1.169817,0.24203 4.477578,0.60508 0.443724,0 0.968125,-0.0403 0.201693,0 0.201693,-0.24203 0.04034,-0.20169 -0.242032,-0.28237 -1.37151,-0.24203 -2.541328,-0.5244 -1.331172,-0.28237 -1.895911,-0.48406 -1.12948,-0.32271 -1.895912,-0.84711 -2.581667,-1.69422 -2.622005,-5.08266 0,-2.70268 1.855573,-4.47758 2.258958,-2.17828 6.413828,-1.97659 2.783359,0.12102 5.566719,0.7261 1.048802,0.24203 1.734557,1.08914 0.685756,0.84711 0.685756,1.93625 0,1.25049 -0.927787,2.17828 -0.887448,0.88745 -2.178281,0.88745 -0.322709,0 -0.645417,-0.0807 -1.169818,-0.24203 -4.517917,-0.56474 -0.403385,-0.0403 -0.766432,0 -0.322708,0.0403 -0.322708,0.24203 0.04034,0.24203 0.322708,0.32271 z" />
<path
inkscape:connector-curvature="0"
id="path5201"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#fff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 89.577027,200.53715 q 0.968125,0.24203 2.420312,0.5244 2.420313,0.40339 3.791823,1.29083 2.581667,1.69422 2.581667,5.08266 0,2.74302 -1.815234,4.47758 -2.097604,2.01693 -5.849089,2.01693 -2.743021,0 -6.131458,-0.76644 -1.089141,-0.24203 -1.774896,-1.08914 -0.645417,-0.84711 -0.645417,-1.89591 0,-1.29083 0.887448,-2.17828 0.927786,-0.92779 2.178281,-0.92779 0.363047,0 0.685755,0.0807 1.169818,0.24203 4.477579,0.60508 0.443724,0 0.968125,-0.0403 0.201692,0 0.201692,-0.24203 0.04034,-0.20169 -0.242031,-0.28237 -1.37151,-0.24203 -2.541328,-0.5244 -1.331172,-0.28237 -1.895912,-0.48406 -1.129479,-0.32271 -1.895911,-0.84711 -2.581667,-1.69422 -2.622005,-5.08266 0,-2.70268 1.855573,-4.47758 2.258958,-2.17828 6.413828,-1.97659 2.783359,0.12102 5.566719,0.7261 1.048802,0.24203 1.734557,1.08914 0.685755,0.84711 0.685755,1.93625 0,1.25049 -0.927786,2.17828 -0.887448,0.88745 -2.178281,0.88745 -0.322709,0 -0.645417,-0.0807 -1.169818,-0.24203 -4.517917,-0.56474 -0.403385,-0.0403 -0.766432,0 -0.322708,0.0403 -0.322708,0.24203 0.04034,0.24203 0.322708,0.32271 z" />
<path
inkscape:connector-curvature="0"
id="path5203"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#fff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 115.65209,203.87137 q 0.12101,0.0807 2.86404,2.78336 1.25049,1.21016 1.25049,2.94471 0,1.61354 -1.16982,2.86404 -1.16982,1.21016 -2.90437,1.21016 -1.65388,0 -2.86404,-1.16982 l -4.03385,-3.91284 q -0.16136,-0.12102 -0.32271,-0.12102 -0.32271,0 -0.32271,1.21016 0,1.69422 -1.21016,2.90438 -1.21015,1.16981 -2.90437,1.16981 -1.69422,0 -2.90438,-1.16981 -1.169807,-1.21016 -1.169807,-2.90438 v -18.79776 q 0,-1.69422 1.169807,-2.86404 1.21016,-1.21015 2.90438,-1.21015 1.69422,0 2.90437,1.21015 1.21016,1.16982 1.21016,2.86404 v 6.29281 q 0,0.40339 0.28237,0.5244 0.24203,0.12102 0.5244,-0.0807 0.16135,-0.0807 4.84063,-3.18675 1.0488,-0.64542 2.25895,-0.64542 2.21862,0 3.42878,1.81524 0.64542,1.0488 0.64542,2.25896 0,2.21862 -1.81524,3.42877 l -2.54133,1.61354 v 0.0403 l -0.0807,0.0403 q -0.56474,0.36305 -0.0403,0.88745 z" />
<path
inkscape:connector-curvature="0"
id="path5205"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#fff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 131.25181,213.92955 q -4.19521,0 -7.18026,-2.94472 -2.94472,-2.98505 -2.94472,-7.18026 0,-4.15487 2.94472,-7.09958 2.98505,-2.98505 7.18026,-2.98505 4.15487,0 6.97857,2.78335 0.92778,0.92779 0.92778,2.25896 0,1.33118 -0.92778,2.25896 l -4.67928,4.63893 q -1.00846,1.00847 -2.01692,1.00847 -1.45219,0 -2.25896,-0.80677 -0.80677,-0.80677 -0.80677,-2.13795 0,-1.29083 0.92778,-2.21862 l 0.80678,-0.84711 q 0.16135,-0.12101 0.0807,-0.24203 -0.12101,-0.0807 -0.32271,-0.0403 -0.80677,0.20169 -1.37151,0.80677 -1.12948,1.08914 -1.12948,2.622 0,1.5732 1.08915,2.70268 1.12947,1.08914 2.70268,1.08914 1.53286,0 2.622,-1.12947 0.92779,-0.92779 2.25896,-0.92779 1.33117,0 2.25896,0.92779 0.92779,0.92778 0.92779,2.25895 0,1.33118 -0.92779,2.25896 -2.98505,2.94472 -7.13992,2.94472 z" />
<path
inkscape:connector-curvature="0"
id="path5207"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:136.34428406px;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';letter-spacing:0px;word-spacing:0px;fill:#fff;fill-opacity:1;stroke:none;stroke-width:0.26458335px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 160.51049,198.1433 v 5.60705 q 0,0.56474 -0.0807,1.21016 v 7.38195 q 0,4.51792 -2.74302,7.2206 -2.70268,2.70269 -7.30128,2.70269 -2.66234,0 -4.80028,-1.00847 -2.13795,-0.96812 -2.13795,-3.3481 0,-0.80677 0.36305,-1.53286 0.96812,-2.17828 3.3481,-2.17828 0.56474,0 1.5732,0.32271 1.00847,0.3227 1.65388,0.3227 1.69422,0 2.21862,-0.72609 0.20169,-0.28237 0.0807,-0.44372 -0.16136,-0.24204 -0.56474,-0.16136 -0.68576,0.12102 -1.49253,0.12102 -4.07419,0 -6.97856,-2.90438 -2.90438,-2.90437 -2.90438,-6.97857 v -5.60705 q 0,-1.69422 1.16982,-2.86404 1.21015,-1.21016 2.90437,-1.21016 1.69422,0 2.90438,1.21016 1.21015,1.16982 1.21015,2.86404 v 5.60705 q 0,0.68576 0.48407,1.21016 0.5244,0.48406 1.21015,0.48406 0.7261,0 1.21016,-0.48406 0.48406,-0.5244 0.48406,-1.21016 v -5.60705 q 0,-1.69422 1.21016,-2.86404 1.21015,-1.21016 2.90437,-1.21016 1.69422,0 2.86404,1.21016 1.21016,1.16982 1.21016,2.86404 z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -8,7 +8,8 @@ const { default: User } = require('../built/models/user');
const q = { const q = {
'metadata._user.host': { 'metadata._user.host': {
$ne: null $ne: null
} },
'metadata.isMetaOnly': false
}; };
async function main() { async function main() {
@ -56,8 +57,7 @@ async function main() {
DriveFile.update({ _id: file._id }, { DriveFile.update({ _id: file._id }, {
$set: { $set: {
'metadata.deletedAt': new Date(), 'metadata.isMetaOnly': true
'metadata.isExpired': true
} }
}) })
]).then(async () => { ]).then(async () => {

View File

@ -43,13 +43,7 @@ Please install and setup these softwares:
*4.* Prepare configuration *4.* Prepare configuration
---------------------------------------------------------------- ----------------------------------------------------------------
1. Copy `example.yml` of `.config` directory You need to generate config file via `npm run config` command.
2. Rename it to `default.yml`
3. Edit it
---
Or you can generate config file via `npm run config` command.
*5.* Build Misskey *5.* Build Misskey
---------------------------------------------------------------- ----------------------------------------------------------------

View File

@ -43,18 +43,14 @@ web-push generate-vapid-keys
*4.* 設定ファイルを用意する *4.* 設定ファイルを用意する
---------------------------------------------------------------- ----------------------------------------------------------------
1. `.config`ディレクトリ内の`example.yml`をコピー `npm run config`コマンドを利用して、ガイドに従って情報を入力してください。
2. `default.yml`にリネーム
3. 編集する
---
または、`npm run config`コマンドを利用して、ガイドに従って情報を
入力して設定ファイルを生成することもできます。
*5.* Misskeyのビルド *5.* Misskeyのビルド
---------------------------------------------------------------- ----------------------------------------------------------------
1. `npm run build` 1. `npm install -g node-gyp`
2. `node-gyp configure`
3. `node-gyp build`
4. `npm run build`
*6.* 以上です! *6.* 以上です!
---------------------------------------------------------------- ----------------------------------------------------------------
@ -78,4 +74,4 @@ VPSなどでビルドする時は、もしかしたらメモリが足りなく
3. npm run webpack 3. npm run webpack
4. built/client をサーバーにアップロードする 4. built/client をサーバーにアップロードする
5. サーバー上で、npm run gulp 5. サーバー上で、npm run gulp
6. 完了 6. 完了

View File

@ -1,7 +1,7 @@
--- ---
meta: meta:
lang: "Deutsch" lang: "Deutsch"
divider: "" divider: " "
common: common:
misskey: "Teile alles mit anderen mithilfe von Misskey" misskey: "Teile alles mit anderen mithilfe von Misskey"
time: time:
@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "Trennen" disconnect: "Trennen"
common/views/components/uploader.vue: common/views/components/uploader.vue:
waiting: "Warten" waiting: "Warten"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "Laden" fetching: "Laden"
no-broadcasts: "Keine Broadcasts" no-broadcasts: "Keine Broadcasts"
@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue: common/views/widgets/server.vue:
title: "Serverinformationen" title: "Serverinformationen"
toggle: "Sicht umschalten" toggle: "Sicht umschalten"
commons/views/widgets/visibility-chooser.vue:
public: "Öffentlich"
home: "Home"
home-desc: "Nur an dieser Stelle sichtbar"
followers: "Follower"
followers-desc: "Nur für diejenigen sichtbar, die dir folgen"
specified: "Direkt"
specified-desc: "Nur für bestimmte Benutzer"
private: "Privat"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Schwarz ... komplett" total: "Schwarz ... komplett"
notes: "Blau ... Hinweise" notes: "Blau ... Hinweise"
@ -304,7 +304,7 @@ desktop/views/components/messaging-window.vue:
desktop/views/components/note-detail.vue: desktop/views/components/note-detail.vue:
more: "Lade weitere Konversationen" more: "Lade weitere Konversationen"
private: "(Dieser Post ist privat)" private: "(Dieser Post ist privat)"
is-renote: "がRenote" reposted-by: "{}がRenote"
location: "Ort" location: "Ort"
renote: "Anmerkung" renote: "Anmerkung"
add-reaction: "Reaktion hinzufügen" add-reaction: "Reaktion hinzufügen"
@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Weitersagen fehlgeschlagen" failure: "Weitersagen fehlgeschlagen"
desktop/views/components/renote-form-window.vue: desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか" title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue: desktop/views/components/settings.vue:
profile: "プロフィール" profile: "プロフィール"
notification: "通知" notification: "通知"
@ -475,6 +477,8 @@ desktop/views/components/settings.profile.vue:
description: "自己紹介" description: "自己紹介"
birthday: "誕生日" birthday: "誕生日"
save: "Profil aktualisieren" save: "Profil aktualisieren"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
hidden: "(この投稿は非公開です)" hidden: "(この投稿は非公開です)"
media: "つのメディア" media: "つのメディア"
@ -521,6 +525,12 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/welcome.vue:
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -660,7 +670,9 @@ mobile/views/pages/followers.vue:
mobile/views/pages/following.vue: mobile/views/pages/following.vue:
following-of: "{}のフォロー" following-of: "{}のフォロー"
mobile/views/pages/home.vue: mobile/views/pages/home.vue:
timeline: "タイムライン" home: "ホーム"
local: "ローカル"
global: "グローバル"
mobile/views/pages/messaging.vue: mobile/views/pages/messaging.vue:
messaging: "メッセージ" messaging: "メッセージ"
mobile/views/pages/messaging-room.vue: mobile/views/pages/messaging-room.vue:
@ -674,7 +686,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/settings/settings.profile.vue: mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール" title: "プロフィール"
will-be-published: "※公開されます"
name: "名前" name: "名前"
account: "アカウント" account: "アカウント"
location: "場所" location: "場所"
@ -682,7 +693,7 @@ mobile/views/pages/settings/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-bot: "このアカウントはBotです" is-cat: "このアカウントはCatです"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -713,6 +724,8 @@ mobile/views/pages/settings.vue:
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する"
twitter: "Twitter連携" twitter: "Twitter連携"
twitter-connect: "Twitterアカウントに接続する" twitter-connect: "Twitterアカウントに接続する"
twitter-reconnect: "再接続する" twitter-reconnect: "再接続する"

View File

@ -56,9 +56,9 @@ common/views/components/connect-failed.troubleshooter.vue:
no-network-desc: "Please make sure you are connected to the Network." no-network-desc: "Please make sure you are connected to the Network."
no-internet: "There is no Internet connection" no-internet: "There is no Internet connection"
no-internet-desc: "Please make sure you are connected to the Internet." no-internet-desc: "Please make sure you are connected to the Internet."
no-server: "Unable to connect to the server" no-server: "Unable to connect to the Misskey server"
no-server-desc: "The network connection of your PC is normal, but you could not connect to Misskey's server. There is a possibility that the server is either down or under maintenance, please try again later." no-server-desc: "The network connection of your PC is normal, but you could not connect to the Misskey server. There is a possibility that the server is either down or under maintenance, please try again later."
success: "Successfully connected to Misskey's server" success: "Successfully connected to the Misskey server"
success-desc: "It seems to be able to connect. Please reload the page." success-desc: "It seems to be able to connect. Please reload the page."
flush: "Clean cache" flush: "Clean cache"
set-version: "Specify version" set-version: "Specify version"
@ -121,7 +121,7 @@ common/views/components/signup.vue:
unavailable: "Unavailable" unavailable: "Unavailable"
error: "Network error" error: "Network error"
invalid-format: "Only use letters, numbers and -." invalid-format: "Only use letters, numbers and -."
too-short: "Please enter at least 1 character" too-short: "Please enter at least 1 character!"
too-long: "Please enter up to 20 characters." too-long: "Please enter up to 20 characters."
password: "Password" password: "Password"
password-placeholder: "We recommend more than 8 characters." password-placeholder: "We recommend more than 8 characters."
@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "Disconnect" disconnect: "Disconnect"
common/views/components/uploader.vue: common/views/components/uploader.vue:
waiting: "Waiting" waiting: "Waiting"
common/views/components/visibility-chooser.vue:
public: "Public"
home: "Home"
home-desc: "Post to the home timeline only"
followers: "Followers"
followers-desc: "Post to followers only"
specified: "Direct"
specified-desc: "Post to specified users only"
private: "Private"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "Fetching" fetching: "Fetching"
no-broadcasts: "No broadcasts" no-broadcasts: "No broadcasts"
@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue: common/views/widgets/server.vue:
title: "Server info" title: "Server info"
toggle: "Toggle views" toggle: "Toggle views"
commons/views/widgets/visibility-chooser.vue:
public: "Public"
home: "Home"
home-desc: "ホームタイムラインにのみ公開"
followers: "Followers"
followers-desc: "自分のフォロワーにのみ公開"
specified: "Direct"
specified-desc: "指定したユーザーにのみ公開"
private: "Private"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -188,7 +188,7 @@ desktop/views/components/calendar.vue:
next: "Next month" next: "Next month"
go: "Click to naviguate" go: "Click to naviguate"
desktop/views/components/choose-file-from-drive-window.vue: desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "ファイル選択中" choose-file: "Choosing files"
upload: "Upload files from your PC" upload: "Upload files from your PC"
cancel: "Cancel" cancel: "Cancel"
ok: "OK" ok: "OK"
@ -264,7 +264,7 @@ desktop/views/components/following-window.vue:
desktop/views/components/following.vue: desktop/views/components/following.vue:
empty: "You dont follow anyone." empty: "You dont follow anyone."
desktop/views/components/friends-maker.vue: desktop/views/components/friends-maker.vue:
title: "気になるユーザーをフォロー:" title: "Recommended users:"
empty: "Similar users werent found." empty: "Similar users werent found."
fetching: "Loading…" fetching: "Loading…"
refresh: "More" refresh: "More"
@ -304,10 +304,10 @@ desktop/views/components/messaging-window.vue:
desktop/views/components/note-detail.vue: desktop/views/components/note-detail.vue:
more: "Load more conversations" more: "Load more conversations"
private: "(this post is private)" private: "(this post is private)"
is-renote: "Renote" reposted-by: "Renoted by {}"
location: "Location" location: "Location"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "Add a reaction"
desktop/views/components/note-detail.sub.vue: desktop/views/components/note-detail.sub.vue:
private: "(this post is private)" private: "(this post is private)"
desktop/views/components/notes.note.vue: desktop/views/components/notes.note.vue:
@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Failed to Renote" failure: "Failed to Renote"
desktop/views/components/renote-form-window.vue: desktop/views/components/renote-form-window.vue:
title: "Are you sure you want to renote this note?" title: "Are you sure you want to renote this note?"
desktop/views/components/settings-window.vue:
settings: "Settings"
desktop/views/components/settings.vue: desktop/views/components/settings.vue:
profile: "Profile" profile: "Profile"
notification: "Notification" notification: "Notification"
@ -417,8 +419,8 @@ desktop/views/components/settings.vue:
update-checking: "Checking for updates" update-checking: "Checking for updates"
do-update: "Check for update" do-update: "Check for update"
update-settings: "Advanced settings" update-settings: "Advanced settings"
prevent-update: "アップデートを延期する(非推奨)" prevent-update: "Postpone updates (not recommended)"
prevent-update-desc: "この設定をオンにしてもアップデートが反映される場合があります。この設定はこのデバイスのみ有効です。" prevent-update-desc: "You may reflect updates even if you select this setting. This setting is valid only this device."
no-updates: "No updates available" no-updates: "No updates available"
no-updates-desc: "Your Misskey is up to date." no-updates-desc: "Your Misskey is up to date."
update-available: "New version is available!" update-available: "New version is available!"
@ -475,6 +477,8 @@ desktop/views/components/settings.profile.vue:
description: "Description" description: "Description"
birthday: "Birthday" birthday: "Birthday"
save: "Update profile" save: "Update profile"
is-bot: "This account is a Bot"
is-cat: "This account is a Cat"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
hidden: "(this post is private)" hidden: "(this post is private)"
media: " media" media: " media"
@ -521,6 +525,12 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "Popout" popout: "Popout"
close: "Close" close: "Close"
desktop/views/pages/welcome.vue:
signin: "Log In"
signup: "Sign up"
signin-button: "Log in"
signup-button: "Sign up"
timeline: "Timeline"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -660,7 +670,9 @@ mobile/views/pages/followers.vue:
mobile/views/pages/following.vue: mobile/views/pages/following.vue:
following-of: "Following of {}" following-of: "Following of {}"
mobile/views/pages/home.vue: mobile/views/pages/home.vue:
timeline: "Timeline" home: "Home"
local: "Local"
global: "Global"
mobile/views/pages/messaging.vue: mobile/views/pages/messaging.vue:
messaging: "Messaging" messaging: "Messaging"
mobile/views/pages/messaging-room.vue: mobile/views/pages/messaging-room.vue:
@ -674,7 +686,6 @@ mobile/views/pages/notifications.vue:
read-all: "Are you sure you want to mark all unread notifications as read?" read-all: "Are you sure you want to mark all unread notifications as read?"
mobile/views/pages/settings/settings.profile.vue: mobile/views/pages/settings/settings.profile.vue:
title: "Profile" title: "Profile"
will-be-published: "※公開されます"
name: "Name" name: "Name"
account: "Account" account: "Account"
location: "Location" location: "Location"
@ -682,7 +693,7 @@ mobile/views/pages/settings/settings.profile.vue:
birthday: "Birthday" birthday: "Birthday"
avatar: "Avatar" avatar: "Avatar"
banner: "Banner" banner: "Banner"
is-bot: "This account is a Bot" is-cat: "This account is a Cat"
save: "Update profile" save: "Update profile"
saved: "Profile updated successfully" saved: "Profile updated successfully"
uploading: "Uploading" uploading: "Uploading"
@ -713,6 +724,8 @@ mobile/views/pages/settings.vue:
behavior: "Behavior" behavior: "Behavior"
fetch-on-scroll: "Fetch on scroll" fetch-on-scroll: "Fetch on scroll"
disable-via-mobile: "Without the \"mobile posts\" flag" disable-via-mobile: "Without the \"mobile posts\" flag"
load-raw-images: "Show attached pictures in high-quality"
load-remote-media: "Show media on a remote server"
twitter: "Twitter integration" twitter: "Twitter integration"
twitter-connect: "Connect to your Twitter account" twitter-connect: "Connect to your Twitter account"
twitter-reconnect: "Reconnect" twitter-reconnect: "Reconnect"

View File

@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "切断する" disconnect: "切断する"
common/views/components/uploader.vue: common/views/components/uploader.vue:
waiting: "待機中" waiting: "待機中"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "確認中" fetching: "確認中"
no-broadcasts: "お知らせはありません" no-broadcasts: "お知らせはありません"
@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue: common/views/widgets/server.vue:
title: "サーバー情報" title: "サーバー情報"
toggle: "表示を切り替え" toggle: "表示を切り替え"
commons/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -304,7 +304,7 @@ desktop/views/components/messaging-window.vue:
desktop/views/components/note-detail.vue: desktop/views/components/note-detail.vue:
more: "会話をもっと読み込む" more: "会話をもっと読み込む"
private: "(この投稿は非公開です)" private: "(この投稿は非公開です)"
is-renote: "がRenote" reposted-by: "{}がRenote"
location: "位置情報" location: "位置情報"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Renoteに失敗しました" failure: "Renoteに失敗しました"
desktop/views/components/renote-form-window.vue: desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか" title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue: desktop/views/components/settings.vue:
profile: "プロフィール" profile: "プロフィール"
notification: "通知" notification: "通知"
@ -475,6 +477,8 @@ desktop/views/components/settings.profile.vue:
description: "自己紹介" description: "自己紹介"
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
hidden: "(この投稿は非公開です)" hidden: "(この投稿は非公開です)"
media: "つのメディア" media: "つのメディア"
@ -521,6 +525,12 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/welcome.vue:
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -660,7 +670,9 @@ mobile/views/pages/followers.vue:
mobile/views/pages/following.vue: mobile/views/pages/following.vue:
following-of: "{}のフォロー" following-of: "{}のフォロー"
mobile/views/pages/home.vue: mobile/views/pages/home.vue:
timeline: "タイムライン" home: "ホーム"
local: "ローカル"
global: "グローバル"
mobile/views/pages/messaging.vue: mobile/views/pages/messaging.vue:
messaging: "メッセージ" messaging: "メッセージ"
mobile/views/pages/messaging-room.vue: mobile/views/pages/messaging-room.vue:
@ -674,7 +686,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/settings/settings.profile.vue: mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール" title: "プロフィール"
will-be-published: "※公開されます"
name: "名前" name: "名前"
account: "アカウント" account: "アカウント"
location: "場所" location: "場所"
@ -682,7 +693,7 @@ mobile/views/pages/settings/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-bot: "このアカウントはBotです" is-cat: "このアカウントはCatです"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -713,6 +724,8 @@ mobile/views/pages/settings.vue:
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する"
twitter: "Twitter連携" twitter: "Twitter連携"
twitter-connect: "Twitterアカウントに接続する" twitter-connect: "Twitterアカウントに接続する"
twitter-reconnect: "再接続する" twitter-reconnect: "再接続する"

View File

@ -1,7 +1,7 @@
--- ---
meta: meta:
lang: "日本語" lang: "Français"
divider: "" divider: " "
common: common:
misskey: "Partagez avec les autres en utilisant Misskey" misskey: "Partagez avec les autres en utilisant Misskey"
time: time:
@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "Deconnecter" disconnect: "Deconnecter"
common/views/components/uploader.vue: common/views/components/uploader.vue:
waiting: "En attente" waiting: "En attente"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "Récuperation" fetching: "Récuperation"
no-broadcasts: "No broadcasts" no-broadcasts: "No broadcasts"
@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue: common/views/widgets/server.vue:
title: "Info sur le serveur" title: "Info sur le serveur"
toggle: "Afficher les vues" toggle: "Afficher les vues"
commons/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -304,7 +304,7 @@ desktop/views/components/messaging-window.vue:
desktop/views/components/note-detail.vue: desktop/views/components/note-detail.vue:
more: "会話をもっと読み込む" more: "会話をもっと読み込む"
private: "(この投稿は非公開です)" private: "(この投稿は非公開です)"
is-renote: "がRenote" reposted-by: "{}がRenote"
location: "位置情報" location: "位置情報"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "La renote a échoué" failure: "La renote a échoué"
desktop/views/components/renote-form-window.vue: desktop/views/components/renote-form-window.vue:
title: "Êtes vous sûr de vouloir renote cette note?" title: "Êtes vous sûr de vouloir renote cette note?"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue: desktop/views/components/settings.vue:
profile: "Profil" profile: "Profil"
notification: "Notification" notification: "Notification"
@ -475,6 +477,8 @@ desktop/views/components/settings.profile.vue:
description: "Description" description: "Description"
birthday: "Date de naissance" birthday: "Date de naissance"
save: "Mettre à jour le profil" save: "Mettre à jour le profil"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
hidden: "(この投稿は非公開です)" hidden: "(この投稿は非公開です)"
media: "つのメディア" media: "つのメディア"
@ -521,6 +525,12 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/welcome.vue:
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -660,7 +670,9 @@ mobile/views/pages/followers.vue:
mobile/views/pages/following.vue: mobile/views/pages/following.vue:
following-of: "Abonnements de {}" following-of: "Abonnements de {}"
mobile/views/pages/home.vue: mobile/views/pages/home.vue:
timeline: "Fil d'actualité" home: "ホーム"
local: "ローカル"
global: "グローバル"
mobile/views/pages/messaging.vue: mobile/views/pages/messaging.vue:
messaging: "Messagerie" messaging: "Messagerie"
mobile/views/pages/messaging-room.vue: mobile/views/pages/messaging-room.vue:
@ -674,7 +686,6 @@ mobile/views/pages/notifications.vue:
read-all: "Êtes vous sûr de vouloir marqués toutes les notifications non-lus en tant que lus?" read-all: "Êtes vous sûr de vouloir marqués toutes les notifications non-lus en tant que lus?"
mobile/views/pages/settings/settings.profile.vue: mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール" title: "プロフィール"
will-be-published: "※公開されます"
name: "名前" name: "名前"
account: "アカウント" account: "アカウント"
location: "場所" location: "場所"
@ -682,7 +693,7 @@ mobile/views/pages/settings/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-bot: "このアカウントはBotです" is-cat: "このアカウントはCatです"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -713,6 +724,8 @@ mobile/views/pages/settings.vue:
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する"
twitter: "Twitter連携" twitter: "Twitter連携"
twitter-connect: "Twitterアカウントに接続する" twitter-connect: "Twitterアカウントに接続する"
twitter-reconnect: "再接続する" twitter-reconnect: "再接続する"

View File

@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "切断する" disconnect: "切断する"
common/views/components/uploader.vue: common/views/components/uploader.vue:
waiting: "待機中" waiting: "待機中"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "確認中" fetching: "確認中"
no-broadcasts: "お知らせはありません" no-broadcasts: "お知らせはありません"
@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue: common/views/widgets/server.vue:
title: "サーバー情報" title: "サーバー情報"
toggle: "表示を切り替え" toggle: "表示を切り替え"
commons/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -304,7 +304,7 @@ desktop/views/components/messaging-window.vue:
desktop/views/components/note-detail.vue: desktop/views/components/note-detail.vue:
more: "会話をもっと読み込む" more: "会話をもっと読み込む"
private: "(この投稿は非公開です)" private: "(この投稿は非公開です)"
is-renote: "がRenote" reposted-by: "{}がRenote"
location: "位置情報" location: "位置情報"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Renoteに失敗しました" failure: "Renoteに失敗しました"
desktop/views/components/renote-form-window.vue: desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか" title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue: desktop/views/components/settings.vue:
profile: "プロフィール" profile: "プロフィール"
notification: "通知" notification: "通知"
@ -475,6 +477,8 @@ desktop/views/components/settings.profile.vue:
description: "自己紹介" description: "自己紹介"
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
hidden: "(この投稿は非公開です)" hidden: "(この投稿は非公開です)"
media: "つのメディア" media: "つのメディア"
@ -521,6 +525,12 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/welcome.vue:
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -660,7 +670,9 @@ mobile/views/pages/followers.vue:
mobile/views/pages/following.vue: mobile/views/pages/following.vue:
following-of: "{}のフォロー" following-of: "{}のフォロー"
mobile/views/pages/home.vue: mobile/views/pages/home.vue:
timeline: "タイムライン" home: "ホーム"
local: "ローカル"
global: "グローバル"
mobile/views/pages/messaging.vue: mobile/views/pages/messaging.vue:
messaging: "メッセージ" messaging: "メッセージ"
mobile/views/pages/messaging-room.vue: mobile/views/pages/messaging-room.vue:
@ -674,7 +686,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/settings/settings.profile.vue: mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール" title: "プロフィール"
will-be-published: "※公開されます"
name: "名前" name: "名前"
account: "アカウント" account: "アカウント"
location: "場所" location: "場所"
@ -682,7 +693,7 @@ mobile/views/pages/settings/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-bot: "このアカウントはBotです" is-cat: "このアカウントはCatです"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -713,6 +724,8 @@ mobile/views/pages/settings.vue:
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する"
twitter: "Twitter連携" twitter: "Twitter連携"
twitter-connect: "Twitterアカウントに接続する" twitter-connect: "Twitterアカウントに接続する"
twitter-reconnect: "再接続する" twitter-reconnect: "再接続する"

View File

@ -173,6 +173,16 @@ common/views/components/twitter-setting.vue:
common/views/components/uploader.vue: common/views/components/uploader.vue:
waiting: "待機中" waiting: "待機中"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "確認中" fetching: "確認中"
no-broadcasts: "お知らせはありません" no-broadcasts: "お知らせはありません"
@ -191,16 +201,6 @@ common/views/widgets/server.vue:
title: "サーバー情報" title: "サーバー情報"
toggle: "表示を切り替え" toggle: "表示を切り替え"
commons/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -353,7 +353,7 @@ desktop/views/components/messaging-window.vue:
desktop/views/components/note-detail.vue: desktop/views/components/note-detail.vue:
more: "会話をもっと読み込む" more: "会話をもっと読み込む"
private: "(この投稿は非公開です)" private: "(この投稿は非公開です)"
is-renote: "がRenote" reposted-by: "{}がRenote"
location: "位置情報" location: "位置情報"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
@ -417,6 +417,9 @@ desktop/views/components/renote-form.vue:
desktop/views/components/renote-form-window.vue: desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか" title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue: desktop/views/components/settings.vue:
profile: "プロフィール" profile: "プロフィール"
notification: "通知" notification: "通知"
@ -550,6 +553,8 @@ desktop/views/components/settings.profile.vue:
description: "自己紹介" description: "自己紹介"
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
hidden: "(この投稿は非公開です)" hidden: "(この投稿は非公開です)"
@ -610,6 +615,13 @@ desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/welcome.vue:
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
@ -786,7 +798,9 @@ mobile/views/pages/following.vue:
following-of: "{}のフォロー" following-of: "{}のフォロー"
mobile/views/pages/home.vue: mobile/views/pages/home.vue:
timeline: "タイムライン" home: "ホーム"
local: "ローカル"
global: "グローバル"
mobile/views/pages/messaging.vue: mobile/views/pages/messaging.vue:
messaging: "メッセージ" messaging: "メッセージ"
@ -805,7 +819,6 @@ mobile/views/pages/notifications.vue:
mobile/views/pages/settings/settings.profile.vue: mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール" title: "プロフィール"
will-be-published: "※公開されます"
name: "名前" name: "名前"
account: "アカウント" account: "アカウント"
location: "場所" location: "場所"
@ -813,7 +826,7 @@ mobile/views/pages/settings/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-bot: "このアカウントはBotです" is-cat: "このアカウントはCatです"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -847,6 +860,8 @@ mobile/views/pages/settings.vue:
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する"
twitter: "Twitter連携" twitter: "Twitter連携"
twitter-connect: "Twitterアカウントに接続する" twitter-connect: "Twitterアカウントに接続する"
twitter-reconnect: "再接続する" twitter-reconnect: "再接続する"

View File

@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "切断する" disconnect: "切断する"
common/views/components/uploader.vue: common/views/components/uploader.vue:
waiting: "待機中" waiting: "待機中"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "確認中" fetching: "確認中"
no-broadcasts: "お知らせはありません" no-broadcasts: "お知らせはありません"
@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue: common/views/widgets/server.vue:
title: "サーバー情報" title: "サーバー情報"
toggle: "表示を切り替え" toggle: "表示を切り替え"
commons/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -304,7 +304,7 @@ desktop/views/components/messaging-window.vue:
desktop/views/components/note-detail.vue: desktop/views/components/note-detail.vue:
more: "会話をもっと読み込む" more: "会話をもっと読み込む"
private: "(この投稿は非公開です)" private: "(この投稿は非公開です)"
is-renote: "がRenote" reposted-by: "{}がRenote"
location: "位置情報" location: "位置情報"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Renoteに失敗しました" failure: "Renoteに失敗しました"
desktop/views/components/renote-form-window.vue: desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか" title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue: desktop/views/components/settings.vue:
profile: "プロフィール" profile: "プロフィール"
notification: "通知" notification: "通知"
@ -475,6 +477,8 @@ desktop/views/components/settings.profile.vue:
description: "自己紹介" description: "自己紹介"
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
hidden: "(この投稿は非公開です)" hidden: "(この投稿は非公開です)"
media: "つのメディア" media: "つのメディア"
@ -521,6 +525,12 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/welcome.vue:
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -660,7 +670,9 @@ mobile/views/pages/followers.vue:
mobile/views/pages/following.vue: mobile/views/pages/following.vue:
following-of: "{}のフォロー" following-of: "{}のフォロー"
mobile/views/pages/home.vue: mobile/views/pages/home.vue:
timeline: "タイムライン" home: "ホーム"
local: "ローカル"
global: "グローバル"
mobile/views/pages/messaging.vue: mobile/views/pages/messaging.vue:
messaging: "メッセージ" messaging: "メッセージ"
mobile/views/pages/messaging-room.vue: mobile/views/pages/messaging-room.vue:
@ -674,7 +686,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/settings/settings.profile.vue: mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール" title: "プロフィール"
will-be-published: "※公開されます"
name: "名前" name: "名前"
account: "アカウント" account: "アカウント"
location: "場所" location: "場所"
@ -682,7 +693,7 @@ mobile/views/pages/settings/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-bot: "このアカウントはBotです" is-cat: "このアカウントはCatです"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -713,6 +724,8 @@ mobile/views/pages/settings.vue:
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する"
twitter: "Twitter連携" twitter: "Twitter連携"
twitter-connect: "Twitterアカウントに接続する" twitter-connect: "Twitterアカウントに接続する"
twitter-reconnect: "再接続する" twitter-reconnect: "再接続する"

View File

@ -1,7 +1,7 @@
--- ---
meta: meta:
lang: "japoński" lang: "język polski"
divider: "" divider: " "
common: common:
misskey: "Dziel się zawartością z innymi korzystając z Misskey." misskey: "Dziel się zawartością z innymi korzystając z Misskey."
time: time:
@ -92,7 +92,7 @@ common/views/components/nav.vue:
common/views/components/note-menu.vue: common/views/components/note-menu.vue:
favorite: "Dodaj do ulubionych" favorite: "Dodaj do ulubionych"
pin: "Przypnij do profilu" pin: "Przypnij do profilu"
remote: "投稿元で見る" remote: "Pokaż oryginał"
common/views/components/poll.vue: common/views/components/poll.vue:
vote-to: "Zagłosuj na '{}'" vote-to: "Zagłosuj na '{}'"
vote-count: "{} głosów" vote-count: "{} głosów"
@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "Rozłącz" disconnect: "Rozłącz"
common/views/components/uploader.vue: common/views/components/uploader.vue:
waiting: "Oczekiwanie" waiting: "Oczekiwanie"
common/views/components/visibility-chooser.vue:
public: "Publiczny"
home: "Lokalny"
home-desc: "Widoczny tylko na tej instancji"
followers: "Dla śledzących"
followers-desc: "Widoczny tylko dla osób, które Cię śledzą"
specified: "Bezpośredni"
specified-desc: "Tylko dla określonych użytkowników"
private: "Prywatny"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "Sprawdzanie" fetching: "Sprawdzanie"
no-broadcasts: "Brak transmisji" no-broadcasts: "Brak transmisji"
@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue: common/views/widgets/server.vue:
title: "Informacje o serwerze" title: "Informacje o serwerze"
toggle: "Przełącz widok" toggle: "Przełącz widok"
commons/views/widgets/visibility-chooser.vue:
public: "Publiczny"
home: "Lokalny"
home-desc: "Widoczny tylko na tej instancji"
followers: "Dla śledzących"
followers-desc: "Widoczny tylko dla osób, które Cię śledzą"
specified: "Bezpośredni"
specified-desc: "Tylko dla określonych użytkowników"
private: "Prywatny"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Czarny … Łącznie" total: "Czarny … Łącznie"
notes: "Niebieski … Wpisy" notes: "Niebieski … Wpisy"
@ -235,7 +235,7 @@ desktop/views/components/drive.nav-folder.vue:
desktop/views/components/drive.vue: desktop/views/components/drive.vue:
search: "Szukaj" search: "Szukaj"
load-more: "Załaduj więcej" load-more: "Załaduj więcej"
empty-draghover: "ドロップですか?いいですよ、ボクはカワイイですからね" empty-draghover: "Przeciągnij tutaj!"
empty-drive: "Twój dysk jest pusty" empty-drive: "Twój dysk jest pusty"
empty-drive-description: "Możesz wysłać plik klikając prawym przyciskiem myszy i wybierając \"Wyślij plik\" lub przeciągnąć plik i upuścić w tym oknie." empty-drive-description: "Możesz wysłać plik klikając prawym przyciskiem myszy i wybierając \"Wyślij plik\" lub przeciągnąć plik i upuścić w tym oknie."
empty-folder: "Ten katalog jest posty" empty-folder: "Ten katalog jest posty"
@ -304,16 +304,16 @@ desktop/views/components/messaging-window.vue:
desktop/views/components/note-detail.vue: desktop/views/components/note-detail.vue:
more: "Załaduj więcej konwersacji" more: "Załaduj więcej konwersacji"
private: "(ten wpis jest prywatny)" private: "(ten wpis jest prywatny)"
is-renote: "がRenote" reposted-by: "Udostępniono przez {}"
location: "Informacje o lokalizacji" location: "Informacje o lokalizacji"
renote: "Przeredaguj" renote: "Udostępnienie"
add-reaction: "Dodaj reakcję" add-reaction: "Dodaj reakcję"
desktop/views/components/note-detail.sub.vue: desktop/views/components/note-detail.sub.vue:
private: "(ten wpis jest prywatny)" private: "(ten wpis jest prywatny)"
desktop/views/components/notes.note.vue: desktop/views/components/notes.note.vue:
reposted-by: "Udostępniono przez {}" reposted-by: "Udostępniono przez {}"
reply: "Odpowiedz" reply: "Odpowiedz"
renote: "Przeredaguj" renote: "Udostępnij"
add-reaction: "Dodaj reakcję" add-reaction: "Dodaj reakcję"
detail: "Pokaż szczegóły" detail: "Pokaż szczegóły"
desktop/views/components/notes.vue: desktop/views/components/notes.vue:
@ -328,13 +328,13 @@ desktop/views/components/post-form.vue:
quote-placeholder: "Zacytuj ten wpis…" quote-placeholder: "Zacytuj ten wpis…"
note: "Wyślij" note: "Wyślij"
reply: "Odpowiedz" reply: "Odpowiedz"
renote: "Przeredaguj" renote: "Udostępnienie"
posted: "Opublikowano!" posted: "Opublikowano!"
replied: "Odpowiedziano!" replied: "Odpowiedziano!"
reposted: "Udostępniono!" reposted: "Udostępniono!"
note-failed: "Nie udało się wysłać" note-failed: "Nie udało się wysłać"
reply-failed: "Nie udało się odpowiedzieć" reply-failed: "Nie udało się odpowiedzieć"
renote-failed: "Nie udało się przeredagować" renote-failed: "Nie udało się udostępnić"
posting: "Wysyłanie" posting: "Wysyłanie"
attach-media-from-local: "Załącz zawartość multimedialną z komputera" attach-media-from-local: "Załącz zawartość multimedialną z komputera"
attach-media-from-drive: "Załącz zawartość multimedialną z dysku" attach-media-from-drive: "Załącz zawartość multimedialną z dysku"
@ -352,12 +352,14 @@ desktop/views/components/progress-dialog.vue:
desktop/views/components/renote-form.vue: desktop/views/components/renote-form.vue:
quote: "Cytuj…" quote: "Cytuj…"
cancel: "Anuluj" cancel: "Anuluj"
renote: "Przeredaguj" renote: "Udostępnij"
reposting: "Udostępnianie…" reposting: "Udostępnianie…"
success: "Udostępniono!" success: "Udostępniono!"
failure: "Nie udało się przeredagować" failure: "Nie udało się udostępnić"
desktop/views/components/renote-form-window.vue: desktop/views/components/renote-form-window.vue:
title: "Czy na pewno chcesz przeredagować ten wpis?" title: "Czy na pewno chcesz udostępnić ten wpis?"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue: desktop/views/components/settings.vue:
profile: "Profil" profile: "Profil"
notification: "Powiadomienia" notification: "Powiadomienia"
@ -385,8 +387,8 @@ desktop/views/components/settings.vue:
gradient-window-header: "Używaj gradientów na pasku tytułu okna" gradient-window-header: "Używaj gradientów na pasku tytułu okna"
post-form-on-timeline: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu" post-form-on-timeline: "Wyświetlaj formularz tworzenia wpisu w górnej części osi czasu"
show-reply-target: "Pokazuj cel odpowiedzi" show-reply-target: "Pokazuj cel odpowiedzi"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する" show-my-renotes: "Pokazuj moje udostępnienia na osi czasu"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する" show-renoted-my-notes: "Pokazuj udostępnienia moich wpisów na osi czasu"
show-maps: "Automatycznie pokazuj mapę" show-maps: "Automatycznie pokazuj mapę"
show-maps-desc: "Mapa będzie automatycznie rozwijana dla wpisów zawierających informacje o lokalizacji." show-maps-desc: "Mapa będzie automatycznie rozwijana dla wpisów zawierających informacje o lokalizacji."
sound: "Dźwięk" sound: "Dźwięk"
@ -404,11 +406,11 @@ desktop/views/components/settings.vue:
language-desc: "Aby zmiany zostały uwzględnione, odśwież stronę." language-desc: "Aby zmiany zostały uwzględnione, odśwież stronę."
cache: "Pamięć podręczna" cache: "Pamięć podręczna"
clean-cache: "Wyczyść" clean-cache: "Wyczyść"
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。" cache-warn: "Pamięć podręczna informacji o koncie/wpisów/odpowiedzi/wiadomości/ustawień przechowywanych w przeglądarce zostanie usunięta. Będziesz musiał odświeżyć stronę po wyczyszczeniu."
cache-cleared: "Wyczyszczono pamięć podręczną" cache-cleared: "Wyczyszczono pamięć podręczną"
cache-cleared-desc: "Proszę odświeżyć stronę." cache-cleared-desc: "Proszę odświeżyć stronę."
auto-watch: "投稿の自動ウォッチ" auto-watch: "投稿の自動ウォッチ"
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。" auto-watch-desc: "Otrzymuj natychmiastowo informacje o wpisach/odpowiedziach/reakcjach."
about: "O Misskey" about: "O Misskey"
operator: "Administrator instancji" operator: "Administrator instancji"
update: "Aktualizacja Misskey" update: "Aktualizacja Misskey"
@ -475,10 +477,12 @@ desktop/views/components/settings.profile.vue:
description: "Opis" description: "Opis"
birthday: "Data urodzenia" birthday: "Data urodzenia"
save: "Aktualizuj profil" save: "Aktualizuj profil"
is-bot: "To konto jest prowadzone przez bota"
is-cat: "To konto jest prowadzone przez kota"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
hidden: "(この投稿は非公開です)" hidden: "(ten wpis jest prywatny)"
media: "つのメディア" media: "zawartość multimedialna"
poll: "投票" poll: "Ankiety"
desktop/views/components/taskmanager.vue: desktop/views/components/taskmanager.vue:
title: "Menedżer zadań" title: "Menedżer zadań"
desktop/views/components/timeline.vue: desktop/views/components/timeline.vue:
@ -517,16 +521,22 @@ desktop/views/components/users-list.vue:
load-more: "Więcej" load-more: "Więcej"
fetching: "Ładowanie…" fetching: "Ładowanie…"
desktop/views/components/users-list-item.vue: desktop/views/components/users-list-item.vue:
followed: "フォローされています" followed: "Obserwuje Cię"
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "Zamknij"
desktop/views/pages/welcome.vue:
signin: "Zaloguj się"
signup: "Zarejestruj się"
signin-button: "Zaloguj się"
signup-button: "Zarejestruj się"
timeline: "Oś czasu"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Dysk Misskey"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
more: "さらに読み込む" more: "Załaduj więcej"
desktop/views/pages/home-customize.vue: desktop/views/pages/home-customize.vue:
title: "ホームのカスタマイズ" title: "Dostosuj stronę główną"
desktop/views/pages/note.vue: desktop/views/pages/note.vue:
prev: "Poprzedni wpis" prev: "Poprzedni wpis"
next: "Następny wpis" next: "Następny wpis"
@ -536,9 +546,9 @@ desktop/views/pages/selectdrive.vue:
cancel: "Anuluj" cancel: "Anuluj"
upload: "Wyślij pliki z Twojego komputera" upload: "Wyślij pliki z Twojego komputera"
desktop/views/pages/user-list.users.vue: desktop/views/pages/user-list.users.vue:
users: "ユーザー" users: "Użytkownicy"
add-user: "ユーザーを追加" add-user: "Dodaj użytkownika"
username: "ユーザー名" username: "Nazwa użytkownika"
desktop/views/pages/user/user.followers-you-know.vue: desktop/views/pages/user/user.followers-you-know.vue:
title: "Śledzący których znasz" title: "Śledzący których znasz"
loading: "Ładowanie" loading: "Ładowanie"
@ -566,10 +576,10 @@ desktop/views/pages/user/user.profile.vue:
muted: "Wyciszyłeś" muted: "Wyciszyłeś"
unmute: "Cofnij wyciszenie" unmute: "Cofnij wyciszenie"
desktop/views/pages/user/user.timeline.vue: desktop/views/pages/user/user.timeline.vue:
default: "投稿" default: "Wpisy"
with-replies: "投稿と返信" with-replies: "Wpisy i odpowiedzi"
with-media: "メディア" with-media: "Zawartość multimedialna"
empty: "このユーザーはまだ何も投稿していないようです。" empty: "Ten użytkownik nie umieścił jeszcze niczego."
desktop/views/widgets/messaging.vue: desktop/views/widgets/messaging.vue:
title: "Wiadomości" title: "Wiadomości"
desktop/views/widgets/notifications.vue: desktop/views/widgets/notifications.vue:
@ -584,8 +594,8 @@ desktop/views/widgets/post-form.vue:
note: "Wpis" note: "Wpis"
placeholder: "Co się dzieje?" placeholder: "Co się dzieje?"
desktop/views/widgets/profile.vue: desktop/views/widgets/profile.vue:
update-banner: "クリックでバナー編集" update-banner: "Naciśnij, aby zmienić baner"
update-avatar: "クリックでアバター編集" update-avatar: "Naciśnij, aby zmienić awatar"
desktop/views/widgets/trends.vue: desktop/views/widgets/trends.vue:
title: "Na czasie" title: "Na czasie"
refresh: "Pokaż inne" refresh: "Pokaż inne"
@ -627,7 +637,7 @@ mobile/views/components/notifications.vue:
mobile/views/components/post-form.vue: mobile/views/components/post-form.vue:
submit: "Wyślij" submit: "Wyślij"
reply: "Odpowiedz" reply: "Odpowiedz"
renote: "Przeredaguj" renote: "Udostępnij"
renote-placeholder: "Zacytuj wpis… (nieobowiązkowe)" renote-placeholder: "Zacytuj wpis… (nieobowiązkowe)"
reply-placeholder: "Odpowiedź na ten wpis…" reply-placeholder: "Odpowiedź na ten wpis…"
note-placeholder: "Co się dzieje?" note-placeholder: "Co się dzieje?"
@ -660,33 +670,34 @@ mobile/views/pages/followers.vue:
mobile/views/pages/following.vue: mobile/views/pages/following.vue:
following-of: "Śledzeni przez {}" following-of: "Śledzeni przez {}"
mobile/views/pages/home.vue: mobile/views/pages/home.vue:
timeline: "Oś czasu" home: "Strona główna"
local: "Lokalne"
global: "Globalne"
mobile/views/pages/messaging.vue: mobile/views/pages/messaging.vue:
messaging: "Wiadomości" messaging: "Wiadomości"
mobile/views/pages/messaging-room.vue: mobile/views/pages/messaging-room.vue:
messaging: "Wiadomości" messaging: "Wiadomości"
mobile/views/pages/note.vue: mobile/views/pages/note.vue:
title: "Wyślij" title: "Wpis"
prev: "Poprzedni wpis" prev: "Poprzedni wpis"
next: "Następny wpis" next: "Następny wpis"
mobile/views/pages/notifications.vue: mobile/views/pages/notifications.vue:
notifications: "Powiadomienia" notifications: "Powiadomienia"
read-all: "Czy na pewno chcesz oznaczyć wszystkie powiadomienia jako przeczytane?" read-all: "Czy na pewno chcesz oznaczyć wszystkie powiadomienia jako przeczytane?"
mobile/views/pages/settings/settings.profile.vue: mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール" title: "Profil"
will-be-published: "※公開されます" name: "Nazwa"
name: "名前" account: "Konto"
account: "アカウント" location: "Lokalizacja"
location: "場所" description: "Opis"
description: "自己紹介" birthday: "Data urodzenia"
birthday: "誕生日" avatar: "Awatar"
avatar: "アイコン" banner: "Baner"
banner: "バナー" is-cat: "To konto jest prowadzone przez kota"
is-bot: "このアカウントはBotです" save: "Aktualizuj profil"
save: "保存" saved: "Pomyślnie zaktualizowano profil"
saved: "プロフィールを保存しました" uploading: "Wysyłanie"
uploading: "アップロード中" upload-failed: "Wysyłanie nie powiodło się"
upload-failed: "アップロードに失敗しました"
mobile/views/pages/search.vue: mobile/views/pages/search.vue:
search: "Szukaj" search: "Szukaj"
empty: "Nie znaleziono wpisów zawierających '{}'" empty: "Nie znaleziono wpisów zawierających '{}'"
@ -705,14 +716,16 @@ mobile/views/pages/settings.vue:
circle-icons: "Używaj okrągłych ikon" circle-icons: "Używaj okrągłych ikon"
timeline: "Oś czasu" timeline: "Oś czasu"
show-reply-target: "Pokazuj cel odpowiedzi" show-reply-target: "Pokazuj cel odpowiedzi"
show-my-renotes: "自分の行ったRenoteを表示する" show-my-renotes: "Pokazuj moje udostępnienia"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する" show-renoted-my-notes: "Pokazuj udostępnienia moich wpisów"
post-style: "投稿の表示スタイル" post-style: "Styl wpisów"
post-style-standard: "標準" post-style-standard: "Standardowy"
post-style-smart: "スマート" post-style-smart: "スマート"
behavior: "Zachowanie" behavior: "Zachowanie"
fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół" fetch-on-scroll: "Automatycznie ładuj po przeciągnięciu w dół"
disable-via-mobile: "Nie oznaczaj wpisów jako „wysłane z telefonu”" disable-via-mobile: "Nie oznaczaj wpisów jako „wysłane z telefonu”"
load-raw-images: "Wyświetlaj załączone zdjęcia w wysokiej jakości"
load-remote-media: "Wyświetlaj zawartość multimedialną ze zdalnych serwerów"
twitter: "Połączenie z Twitterem" twitter: "Połączenie z Twitterem"
twitter-connect: "Połącz z Twitterem" twitter-connect: "Połącz z Twitterem"
twitter-reconnect: "Połącz ponownie" twitter-reconnect: "Połącz ponownie"

791
locales/pt.yml Normal file
View File

@ -0,0 +1,791 @@
---
meta:
lang: "Português"
divider: ""
common:
misskey: "Misskeyで皆と共有しよう。"
time:
unknown: "なぞのじかん"
future: "未来"
just_now: "たった今"
seconds_ago: "{}秒前"
minutes_ago: "{}分前"
hours_ago: "{}時間前"
days_ago: "{}日前"
weeks_ago: "{}週間前"
months_ago: "{}ヶ月前"
years_ago: "{}年前"
weekday-short:
sunday: "日"
monday: "月"
tuesday: "火"
wednesday: "水"
thursday: "木"
friday: "金"
saturday: "土"
reactions:
like: "いいね"
love: "しゅき"
laugh: "笑"
hmm: "ふぅ~む"
surprise: "わお"
congrats: "おめでとう"
angry: "おこ"
confused: "こまこまのこまり"
pudding: "Pudding"
delete: "削除"
loading: "読み込み中"
ok: "わかった"
update-available: "Misskeyの新しいバージョンがあります({newer}。現在{current}を利用中)。ページを再度読み込みすると更新が適用されます。"
my-token-regenerated: "あなたのトークンが更新されたのでサインアウトします。"
common/views/components/connect-failed.vue:
title: "サーバーに接続できません"
description: "インターネット回線に問題があるか、サーバーがダウンまたはメンテナンスしている可能性があります。しばらくしてから{再度お試し}ください。"
thanks: "いつもMisskeyをご利用いただきありがとうございます。"
troubleshoot: "トラブルシュート"
common/views/components/connect-failed.troubleshooter.vue:
title: "トラブルシューティング"
network: "ネットワーク接続"
checking-network: "ネットワーク接続を確認中"
internet: "インターネット接続"
checking-internet: "インターネット接続を確認中"
server: "サーバー接続"
checking-server: "サーバー接続を確認中"
finding: "問題を調べています"
no-network: "ネットワークに接続されていません"
no-network-desc: "お使いのPCのネットワーク接続が正常か確認してください。"
no-internet: "インターネットに接続されていません"
no-internet-desc: "ネットワークには接続されていますが、インターネットには接続されていないようです。お使いのPCのインターネット接続が正常か確認してください。"
no-server: "Misskeyのサーバーに接続できません"
no-server-desc: "お使いのPCのインターネット接続は正常ですが、Misskeyのサーバーには接続できませんでした。サーバーがダウンまたはメンテナンスしている可能性があるので、しばらくしてから再度御アクセスください。"
success: "Misskeyのサーバーに接続できました"
success-desc: "正常に接続できるようです。ページを再度読み込みしてください。"
flush: "キャッシュの削除"
set-version: "バージョン指定"
common/views/components/messaging.vue:
search-user: "ユーザーを探す"
you: "あなた"
no-history: "履歴はありません"
common/views/components/messaging-room.vue:
empty: "このユーザーと話したことはありません"
more: "もっと読む"
no-history: "これより過去の履歴はありません"
resize-form: "ドラッグしてフォームの広さを調整"
new-message: "新しいメッセージがあります"
common/views/components/messaging-room.form.vue:
input-message-here: "ここにメッセージを入力"
send: "送信"
attach-from-local: "PCからファイルを添付する"
attach-from-drive: "ドライブからファイルを添付する"
common/views/components/messaging-room.message.vue:
is-read: "既読"
deleted: "このメッセージは削除されました"
common/views/components/nav.vue:
about: "Misskeyについて"
stats: "統計"
status: "ステータス"
wiki: "Wiki"
donors: "ドナー"
repository: "リポジトリ"
develop: "開発者"
feedback: "フィードバック"
common/views/components/note-menu.vue:
favorite: "お気に入り"
pin: "ピン留め"
remote: "投稿元で見る"
common/views/components/poll.vue:
vote-to: "「{}」に投票する"
vote-count: "{}票"
total-users: "{}人が投票"
vote: "投票する"
show-result: "結果を見る"
voted: "投票済み"
common/views/components/poll-editor.vue:
no-only-one-choice: "投票には、選択肢が最低2つ必要です"
choice-n: "選択肢{}"
remove: "この選択肢を削除"
add: "+選択肢を追加"
destroy: "投票を破棄"
common/views/components/reaction-picker.vue:
choose-reaction: "リアクションを選択"
common/views/components/signin.vue:
username: "ユーザー名"
password: "パスワード"
token: "トークン"
signing-in: "やってます..."
signin: "サインイン"
common/views/components/signup.vue:
username: "ユーザー名"
checking: "確認しています..."
available: "利用できます"
unavailable: "既に利用されています"
error: "通信エラー"
invalid-format: "a~z、A~Z、0~9、_が使えます"
too-short: "1文字以上でお願いします"
too-long: "20文字以内でお願いします"
password: "パスワード"
password-placeholder: "8文字以上を推奨します"
weak-password: "弱いパスワード"
normal-password: "まあまあのパスワード"
strong-password: "強いパスワード"
retype: "再入力"
retype-placeholder: "確認のため再入力してください"
password-matched: "確認されました"
password-not-matched: "一致していません"
recaptcha: "認証"
create: "アカウント作成"
some-error: "何らかの原因によりアカウントの作成に失敗しました。再度お試しください。"
common/views/components/special-message.vue:
new-year: "Happy New Year!"
christmas: "Merry Christmas!"
common/views/components/stream-indicator.vue:
connecting: "接続中"
reconnecting: "再接続中"
connected: "接続完了"
common/views/components/twitter-setting.vue:
description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。"
connected-to: "次のTwitterアカウントに接続されています"
detail: "詳細..."
reconnect: "再接続する"
connect: "Twitterと接続する"
disconnect: "切断する"
common/views/components/uploader.vue:
waiting: "待機中"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue:
fetching: "確認中"
no-broadcasts: "お知らせはありません"
have-a-nice-day: "良い一日を!"
next: "次"
common/views/widgets/donation.vue:
title: "寄付のお願い"
text: "Misskeyの運営にはドメイン、サーバー等のコストが掛かります。Misskeyは広告を掲載したりしないため、収入を皆様からの寄付に頼っています。もしご興味があれば、{}までご連絡ください。ご協力ありがとうございます。"
common/views/widgets/photo-stream.vue:
title: "フォトストリーム"
no-photos: "写真はありません"
common/views/widgets/server.vue:
title: "サーバー情報"
toggle: "表示を切り替え"
desktop/views/components/activity.chart.vue:
total: "Black ... Total"
notes: "Blue ... Notes"
replies: "Red ... Replies"
renotes: "Green ... Renotes"
desktop/views/components/activity.vue:
title: "アクティビティ"
toggle: "表示を切り替え"
desktop/views/components/calendar.vue:
title: "{1}年 {2}月"
prev: "前の月"
next: "次の月"
go: "クリックして時間遡行"
desktop/views/components/choose-file-from-drive-window.vue:
choose-file: "ファイル選択中"
upload: "PCからドライブにファイルをアップロード"
cancel: "キャンセル"
ok: "決定"
choose-prompt: "ファイルを選択"
desktop/views/components/choose-folder-from-drive-window.vue:
cancel: "キャンセル"
ok: "決定"
choose-prompt: "フォルダを選択"
desktop/views/components/crop-window.vue:
skip: "クロップをスキップ"
cancel: "キャンセル"
ok: "決定"
desktop/views/components/drive-window.vue:
used: "使用中"
drive: "ドライブ"
desktop/views/components/drive.file.vue:
avatar: "アイコン"
banner: "バナー"
contextmenu:
rename: "名前を変更"
copy-url: "URLをコピー"
download: "ダウンロード"
else-files: "その他..."
set-as-avatar: "アイコンに設定"
set-as-banner: "バナーに設定"
open-in-app: "アプリで開く"
add-app: "アプリを追加"
rename-file: "ファイル名の変更"
input-new-file-name: "新しいファイル名を入力してください"
copied: "コピー完了"
copied-url-to-clipboard: "URLをクリップボードにコピーしました"
desktop/views/components/drive.folder.vue:
unable-to-process: "操作を完了できません"
circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。"
unhandled-error: "不明なエラー"
contextmenu:
move-to-this-folder: "このフォルダへ移動"
show-in-new-window: "新しいウィンドウで表示"
rename: "名前を変更"
rename-folder: "フォルダ名の変更"
input-new-folder-name: "新しいフォルダ名を入力してください"
desktop/views/components/drive.nav-folder.vue:
drive: "ドライブ"
desktop/views/components/drive.vue:
search: "検索"
load-more: "もっと読み込む"
empty-draghover: "ドロップですか?いいですよ、ボクはカワイイですからね"
empty-drive: "ドライブには何もありません。"
empty-drive-description: "右クリックして「ファイルをアップロード」を選んだり、ファイルをドラッグ&ドロップすることでもアップロードできます。"
empty-folder: "このフォルダーは空です"
unable-to-process: "操作を完了できません"
circular-reference-detected: "移動先のフォルダーは、移動するフォルダーのサブフォルダーです。"
unhandled-error: "不明なエラー"
url-upload: "URLアップロード"
url-of-file: "アップロードしたいファイルのURL"
url-upload-requested: "アップロードをリクエストしました"
may-take-time: "アップロードが完了するまで時間がかかる場合があります。"
create-folder: "フォルダー作成"
folder-name: "フォルダー名"
contextmenu:
create-folder: "フォルダーを作成"
upload: "ファイルをアップロード"
url-upload: "URLからアップロード"
desktop/views/components/follow-button.vue:
unfollow: "フォロー解除"
follow: "フォローする"
desktop/views/components/followers-window.vue:
followers: "{} のフォロワー"
desktop/views/components/followers.vue:
empty: "フォロワーはいないようです。"
desktop/views/components/following-window.vue:
following: "{} のフォロー"
desktop/views/components/following.vue:
empty: "フォロー中のユーザーはいないようです。"
desktop/views/components/friends-maker.vue:
title: "気になるユーザーをフォロー:"
empty: "おすすめのユーザーは見つかりませんでした。"
fetching: "読み込んでいます"
refresh: "もっと見る"
close: "閉じる"
desktop/views/components/game-window.vue:
game: "オセロ"
desktop/views/components/home.vue:
done: "完了"
add-widget: "ウィジェットを追加:"
profile: "プロフィール"
calendar: "カレンダー"
timemachine: "カレンダー(タイムマシン)"
activity: "アクティビティ"
rss: "RSSリーダー"
trends: "トレンド"
photostream: "フォトストリーム"
slideshow: "スライドショー"
version: "バージョン"
broadcast: "ブロードキャスト"
notifications: "通知"
users: "おすすめユーザー"
polls: "投票"
post-form: "投稿フォーム"
messaging: "メッセージ"
server: "サーバー情報"
donation: "寄付のお願い"
nav: "ナビゲーション"
tips: "ヒント"
add: "追加"
desktop/views/input-dialog.vue:
cancel: "キャンセル"
ok: "決定"
desktop/views/components/messaging-room-window.vue:
title: "メッセージ:"
desktop/views/components/messaging-window.vue:
title: "メッセージ"
desktop/views/components/note-detail.vue:
more: "会話をもっと読み込む"
private: "(この投稿は非公開です)"
reposted-by: "{}がRenote"
location: "位置情報"
renote: "Renote"
add-reaction: "リアクション"
desktop/views/components/note-detail.sub.vue:
private: "(この投稿は非公開です)"
desktop/views/components/notes.note.vue:
reposted-by: "{}がRenote"
reply: "返信"
renote: "Renote"
add-reaction: "リアクション"
detail: "詳細"
desktop/views/components/notes.vue:
error: "読み込みに失敗しました。"
retry: "リトライ"
desktop/views/components/notifications.vue:
more: "もっと見る"
empty: "ありません!"
desktop/views/components/post-form.vue:
note-placeholder: "いまどうしてる?"
reply-placeholder: "この投稿への返信..."
quote-placeholder: "この投稿を引用..."
note: "投稿"
reply: "返信"
renote: "Renote"
posted: "投稿しました!"
replied: "返信しました!"
reposted: "Renoteしました"
note-failed: "投稿に失敗しました"
reply-failed: "返信に失敗しました"
renote-failed: "Renoteに失敗しました"
posting: "投稿中"
attach-media-from-local: "PCからメディアを添付"
attach-media-from-drive: "ドライブからメディアを添付"
attach-cancel: "添付取り消し"
insert-a-kao: "v(‘ω’)v"
create-poll: "投票を作成"
text-remain: "残り{}文字"
desktop/views/components/post-form-window.vue:
note: "新規投稿"
reply: "返信"
attaches: "添付: {}メディア"
uploading-media: "{}個のメディアをアップロード中"
desktop/views/components/progress-dialog.vue:
waiting: "待機中"
desktop/views/components/renote-form.vue:
quote: "引用する..."
cancel: "キャンセル"
renote: "Renote"
reposting: "しています..."
success: "Renoteしました"
failure: "Renoteに失敗しました"
desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue:
profile: "プロフィール"
notification: "通知"
apps: "アプリ"
mute: "ミュート"
drive: "ドライブ"
security: "セキュリティ"
signin: "サインイン履歴"
password: "パスワード"
2fa: "二段階認証"
other: "その他"
license: "ライセンス"
behaviour: "動作"
fetch-on-scroll: "スクロールで自動読み込み"
fetch-on-scroll-desc: "ページを下までスクロールしたときに自動で追加のコンテンツを読み込みます。"
auto-popout: "ウィンドウの自動ポップアウト"
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
advanced: "詳細設定"
api-via-stream: "ストリームを経由したAPIリクエスト"
api-via-stream-desc: "この設定をオンにすると、websocket接続を経由してAPIリクエストが行われます(パフォーマンス向上が期待できます)。オフにすると、ネイティブの fetch APIが利用されます。この設定はこのデバイスのみ有効です。"
display: "デザインと表示"
customize: "ホームをカスタマイズ"
dark-mode: "ダークモード"
circle-icons: "円形のアイコンを使用"
gradient-window-header: "ウィンドウのタイトルバーにグラデーションを使用"
post-form-on-timeline: "タイムライン上部に投稿フォームを表示する"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteをタイムラインに表示する"
show-renoted-my-notes: "Renoteされた自分の投稿をタイムラインに表示する"
show-maps: "マップの自動展開"
show-maps-desc: "位置情報が添付された投稿のマップを自動的に展開します。"
sound: "サウンド"
enable-sounds: "サウンドを有効にする"
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
volume: "ボリューム"
test: "テスト"
mobile: "モバイル"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
language: "言語"
pick-language: "言語を選択"
recommended: "推奨"
auto: "自動"
specify-language: "言語を指定"
language-desc: "変更はページの再度読み込み後に反映されます。"
cache: "キャッシュ"
clean-cache: "クリーンアップ"
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
cache-cleared: "キャッシュを削除しました"
cache-cleared-desc: "ページを再度読み込みしてください。"
auto-watch: "投稿の自動ウォッチ"
auto-watch-desc: "リアクションしたり返信したりした投稿に関する通知を自動的に受け取るようにします。"
about: "Misskeyについて"
operator: "このサーバーの運営者"
update: "Misskey Update"
version: "バージョン:"
latest-version: "最新のバージョン:"
update-checking: "アップデートを確認中"
do-update: "アップデートを確認"
update-settings: "詳細設定"
prevent-update: "アップデートを延期する(非推奨)"
prevent-update-desc: "この設定をオンにしてもアップデートが反映される場合があります。この設定はこのデバイスのみ有効です。"
no-updates: "利用可能な更新はありません"
no-updates-desc: "お使いのMisskeyは最新です。"
update-available: "新しいバージョンが利用可能です"
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
advanced-settings: "高度な設定"
debug-mode: "デバッグモードを有効にする"
debug-mode-desc: "この設定はブラウザに記憶されます。"
experimental: "実験的機能を有効にする"
experimental-desc: "実験的機能を有効にするとMisskeyの動作が不安定になる可能性があります。この設定はブラウザに記憶されます。"
tools: "ツール"
task-manager: "タスクマネージャ"
third-parties: "サードパーティ"
desktop/views/components/settings.2fa.vue:
intro: "二段階認証を設定すると、サインイン時にパスワードだけでなく、予め登録しておいた物理的なデバイス(例えばあなたのスマートフォンなど)も必要になり、よりセキュリティが向上します。"
detail: "詳細..."
url: "https://www.google.co.jp/intl/ja/landing/2step/"
caution: "登録したデバイスを紛失するなどした場合、Misskeyにサインインできなくなりますのでご注意ください。"
register: "デバイスを登録する"
already-registered: "既に設定は完了しています。"
unregister: "設定を解除"
unregistered: "二段階認証が無効になりました。"
enter-password: "パスワードを入力してください"
authenticator: "まず、Google Authenticatorをお使いのデバイスにインストールします:"
howtoinstall: "インストール方法はこちら"
scan: "次に、表示されているQRコードをスキャンします:"
done: "お使いのデバイスに表示されているトークンを入力して完了します:"
submit: "完了"
success: "設定が完了しました!"
failed: "設定に失敗しました。トークンに誤りがないかご確認ください。"
info: "次回サインインからは、同様にパスワードに加えてデバイスに表示されているトークンを入力します。"
desktop/views/components/settings.api.vue:
intro: "APIを利用するには、上記のトークンを「i」というキーでパラメータに付加してリクエストします。"
caution: "アカウントを不正利用される可能性があるため、このトークンは第三者に教えないでください(アプリなどにも入力しないでください)。"
regeneration-of-token: "万が一このトークンが漏れたりその可能性がある場合はトークンを再生成できます。"
regenerate-token: "トークンを再生成"
token: "Token:"
enter-password: "パスワードを入力してください"
desktop/views/components/settings.app.vue:
no-apps: "連携しているアプリケーションはありません"
desktop/views/components/settings.mute.vue:
no-users: "ミュートしているユーザーはいません"
desktop/views/components/settings.password.vue:
reset: "パスワードを変更する"
enter-current-password: "現在のパスワードを入力してください"
enter-new-password: "新しいパスワードを入力してください"
enter-new-password-again: "もう一度新しいパスワードを入力してください"
not-match: "新しいパスワードが一致しません"
changed: "パスワードを変更しました"
desktop/views/components/settings.profile.vue:
avatar: "アイコン"
choice-avatar: "画像を選択"
name: "名前"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
save: "保存"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
desktop/views/components/sub-note-content.vue:
hidden: "(この投稿は非公開です)"
media: "つのメディア"
poll: "投票"
desktop/views/components/taskmanager.vue:
title: "タスクマネージャ"
desktop/views/components/timeline.vue:
home: "ホーム"
local: "ローカル"
global: "グローバル"
list: "リスト"
desktop/views/components/ui.header.account.vue:
profile: "プロフィール"
drive: "ドライブ"
favorites: "お気に入り"
lists: "リスト"
customize: "カスタマイズ"
settings: "設定"
signout: "サインアウト"
dark: "闇に飲まれる"
desktop/views/components/ui.header.nav.vue:
home: "ホーム"
messaging: "メッセージ"
game: "ゲーム"
desktop/views/components/ui.header.notifications.vue:
title: "通知"
desktop/views/components/ui.header.post.vue:
post: "新規投稿"
desktop/views/components/ui.header.search.vue:
placeholder: "検索"
desktop/views/components/user-lists-window.vue:
create-list: "リストを作成"
desktop/views/components/user-preview.vue:
notes: "投稿"
following: "フォロー"
followers: "フォロワー"
desktop/views/components/users-list.vue:
all: "すべて"
iknow: "知り合い"
load-more: "もっと"
fetching: "読み込んでいます"
desktop/views/components/users-list-item.vue:
followed: "フォローされています"
desktop/views/components/window.vue:
popout: "ポップアウト"
close: "閉じる"
desktop/views/pages/welcome.vue:
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
desktop/views/pages/drive.vue:
title: "Misskey Drive"
desktop/views/pages/favorites.vue:
more: "さらに読み込む"
desktop/views/pages/home-customize.vue:
title: "ホームのカスタマイズ"
desktop/views/pages/note.vue:
prev: "前の投稿"
next: "次の投稿"
desktop/views/pages/selectdrive.vue:
title: "ファイルを選択してください"
ok: "決定"
cancel: "キャンセル"
upload: "PCからドライブにファイルをアップロード"
desktop/views/pages/user-list.users.vue:
users: "ユーザー"
add-user: "ユーザーを追加"
username: "ユーザー名"
desktop/views/pages/user/user.followers-you-know.vue:
title: "知り合いのフォロワー"
loading: "読み込み中"
no-users: "知り合いのフォロワーはいません"
desktop/views/pages/user/user.friends.vue:
title: "よく話すユーザー"
loading: "読み込み中"
no-users: "よく話すユーザーはいません"
desktop/views/pages/user/user.header.vue:
is-suspended: "このユーザーは凍結されています。"
is-remote: "このユーザーはリモートユーザーです。"
view-remote: "正確な情報を見る"
desktop/views/pages/user/user.home.vue:
last-used-at: "最終アクセス"
desktop/views/pages/user/user.photos.vue:
title: "フォト"
loading: "読み込み中"
no-photos: "写真はありません"
desktop/views/pages/user/user.profile.vue:
follows-you: "フォローされています"
stalk: "ストークする"
stalking: "ストーキングしています"
unstalk: "ストーク解除"
mute: "ミュートする"
muted: "ミュートしています"
unmute: "ミュート解除"
desktop/views/pages/user/user.timeline.vue:
default: "投稿"
with-replies: "投稿と返信"
with-media: "メディア"
empty: "このユーザーはまだ何も投稿していないようです。"
desktop/views/widgets/messaging.vue:
title: "メッセージ"
desktop/views/widgets/notifications.vue:
title: "通知"
settings: "通知の設定"
desktop/views/widgets/polls.vue:
title: "投票"
refresh: "他を見る"
nothing: "ありません!"
desktop/views/widgets/post-form.vue:
title: "投稿"
note: "投稿"
placeholder: "いまどうしてる?"
desktop/views/widgets/profile.vue:
update-banner: "クリックでバナー編集"
update-avatar: "クリックでアバター編集"
desktop/views/widgets/trends.vue:
title: "トレンド"
refresh: "他を見る"
nothing: "ありません!"
desktop/views/widgets/users.vue:
title: "おすすめユーザー"
refresh: "他を見る"
no-one: "いません!"
mobile/views/components/drive.vue:
drive: "ドライブ"
used: "使用中"
folder-count: "フォルダ"
count-separator: "、"
file-count: "ファイル"
load-more: "もっと読み込む"
nothing-in-drive: "ドライブには何もありません"
folder-is-empty: "このフォルダは空です"
mobile/views/components/drive-file-chooser.vue:
select-file: "ファイルを選択"
mobile/views/components/drive-folder-chooser.vue:
select-folder: "フォルダーを選択"
mobile/views/components/drive.file-detail.vue:
download: "ダウンロード"
rename: "名前を変更"
move: "移動"
hash: "ハッシュ (md5)"
exif: "EXIF"
mobile/views/components/follow-button.vue:
follow: "フォロー"
unfollow: "フォロー解除"
mobile/views/components/note.vue:
reposted-by: "{}がRenote"
mobile/views/components/note-detail.vue:
reply: "返信"
reaction: "リアクション"
mobile/views/components/notifications.vue:
more: "もっと見る"
empty: "ありません!"
mobile/views/components/post-form.vue:
submit: "投稿"
reply: "返信"
renote: "Renote"
renote-placeholder: "この投稿を引用... (オプション)"
reply-placeholder: "この投稿への返信..."
note-placeholder: "いまどうしてる?"
mobile/views/components/sub-note-content.vue:
media-count: "{}個のメディア"
poll: "投票"
mobile/views/components/timeline.vue:
empty: "投稿がありません"
load-more: "もっと"
mobile/views/components/ui.nav.vue:
home: "ホーム"
notifications: "通知"
messaging: "メッセージ"
search: "検索"
drive: "ドライブ"
settings: "設定"
about: "Misskeyについて"
mobile/views/components/user-timeline.vue:
no-notes: "このユーザーは投稿していないようです。"
no-notes-with-media: "メディア付き投稿はありません。"
load-more: "もっと"
mobile/views/components/users-list.vue:
all: "すべて"
known: "知り合い"
load-more: "もっと"
mobile/views/pages/drive.vue:
drive: "ドライブ"
mobile/views/pages/followers.vue:
followers-of: "{}のフォロワー"
mobile/views/pages/following.vue:
following-of: "{}のフォロー"
mobile/views/pages/home.vue:
home: "ホーム"
local: "ローカル"
global: "グローバル"
mobile/views/pages/messaging.vue:
messaging: "メッセージ"
mobile/views/pages/messaging-room.vue:
messaging: "メッセージ"
mobile/views/pages/note.vue:
title: "投稿"
prev: "前の投稿"
next: "次の投稿"
mobile/views/pages/notifications.vue:
notifications: "通知"
read-all: "すべての通知を既読にしますか?"
mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール"
name: "名前"
account: "アカウント"
location: "場所"
description: "自己紹介"
birthday: "誕生日"
avatar: "アイコン"
banner: "バナー"
is-cat: "このアカウントはCatです"
save: "保存"
saved: "プロフィールを保存しました"
uploading: "アップロード中"
upload-failed: "アップロードに失敗しました"
mobile/views/pages/search.vue:
search: "検索"
empty: "「{}」に関する投稿は見つかりませんでした。"
mobile/views/pages/selectdrive.vue:
select-file: "ファイルを選択"
mobile/views/pages/settings.vue:
signed-in-as: "{}としてサインイン中"
lang: "言語"
lang-tip: "変更はページの再読み込み後に反映されます。"
recommended: "推奨"
auto: "自動"
specify-language: "言語を指定"
design: "デザインと表示"
dark-mode: "ダークモード"
i-am-under-limited-internet: "私は通信を制限されている"
circle-icons: "円形のアイコンを使用"
timeline: "タイムライン"
show-reply-target: "リプライ先を表示する"
show-my-renotes: "自分の行ったRenoteを表示する"
show-renoted-my-notes: "Renoteされた自分の投稿を表示する"
post-style: "投稿の表示スタイル"
post-style-standard: "標準"
post-style-smart: "スマート"
behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する"
twitter: "Twitter連携"
twitter-connect: "Twitterアカウントに接続する"
twitter-reconnect: "再接続する"
twitter-disconnect: "切断する"
update: "Misskey Update"
version: "バージョン:"
latest-version: "最新のバージョン:"
update-checking: "アップデートを確認中"
check-for-updates: "アップデートを確認"
no-updates: "利用可能な更新はありません"
no-updates-desc: "お使いのMisskeyは最新です。"
update-available: "新しいバージョンが利用可能です"
update-available-desc: "ページを再度読み込みすると更新が適用されます。"
settings: "設定"
signout: "サインアウト"
mobile/views/pages/user.vue:
follows-you: "フォローされています"
following: "フォロー"
followers: "フォロワー"
notes: "投稿"
overview: "概要"
timeline: "タイムライン"
media: "メディア"
is-suspended: "このユーザーは凍結されています。"
is-remote: "このユーザーはリモートユーザーです。"
view-remote: "正確な情報を見る"
mobile/views/pages/user/home.vue:
recent-notes: "最近の投稿"
images: "画像"
activity: "アクティビティ"
keywords: "キーワード"
domains: "頻出ドメイン"
frequently-replied-users: "よく会話するユーザー"
followers-you-know: "知り合いのフォロワー"
last-used-at: "最終ログイン"
mobile/views/pages/user/home.followers-you-know.vue:
loading: "読み込み中"
no-users: "知り合いのユーザーはいません"
mobile/views/pages/user/home.friends.vue:
loading: "読み込み中"
no-users: "よく会話するユーザーはいません"
mobile/views/pages/user/home.notes.vue:
loading: "読み込み中"
no-notes: "投稿はありません"
mobile/views/pages/user/home.photos.vue:
loading: "読み込み中"
no-photos: "写真はありません"
docs:
edit-this-page-on-github: "間違いや改善点を見つけましたか?"
edit-this-page-on-github-link: "このページをGitHubで編集"
api:
entities:
properties: "プロパティ"
endpoints:
params: "パラメータ"
res: "レスポンス"
props:
name: "名前"
type: "型"
optional: "オプション"
description: "説明"
yes: "はい"
no: "いいえ"

View File

@ -1,7 +1,7 @@
--- ---
meta: meta:
lang: "日本語" lang: "Русский язык"
divider: "" divider: " "
common: common:
misskey: "Misskeyで皆と共有しよう。" misskey: "Misskeyで皆と共有しよう。"
time: time:
@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "切断する" disconnect: "切断する"
common/views/components/uploader.vue: common/views/components/uploader.vue:
waiting: "待機中" waiting: "待機中"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "確認中" fetching: "確認中"
no-broadcasts: "お知らせはありません" no-broadcasts: "お知らせはありません"
@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue: common/views/widgets/server.vue:
title: "サーバー情報" title: "サーバー情報"
toggle: "表示を切り替え" toggle: "表示を切り替え"
commons/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -304,7 +304,7 @@ desktop/views/components/messaging-window.vue:
desktop/views/components/note-detail.vue: desktop/views/components/note-detail.vue:
more: "会話をもっと読み込む" more: "会話をもっと読み込む"
private: "(この投稿は非公開です)" private: "(この投稿は非公開です)"
is-renote: "がRenote" reposted-by: "{}がRenote"
location: "位置情報" location: "位置情報"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Renoteに失敗しました" failure: "Renoteに失敗しました"
desktop/views/components/renote-form-window.vue: desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか" title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue: desktop/views/components/settings.vue:
profile: "プロフィール" profile: "プロフィール"
notification: "通知" notification: "通知"
@ -475,6 +477,8 @@ desktop/views/components/settings.profile.vue:
description: "自己紹介" description: "自己紹介"
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
hidden: "(この投稿は非公開です)" hidden: "(この投稿は非公開です)"
media: "つのメディア" media: "つのメディア"
@ -521,6 +525,12 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/welcome.vue:
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -660,7 +670,9 @@ mobile/views/pages/followers.vue:
mobile/views/pages/following.vue: mobile/views/pages/following.vue:
following-of: "{}のフォロー" following-of: "{}のフォロー"
mobile/views/pages/home.vue: mobile/views/pages/home.vue:
timeline: "タイムライン" home: "ホーム"
local: "ローカル"
global: "グローバル"
mobile/views/pages/messaging.vue: mobile/views/pages/messaging.vue:
messaging: "メッセージ" messaging: "メッセージ"
mobile/views/pages/messaging-room.vue: mobile/views/pages/messaging-room.vue:
@ -674,7 +686,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/settings/settings.profile.vue: mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール" title: "プロフィール"
will-be-published: "※公開されます"
name: "名前" name: "名前"
account: "アカウント" account: "アカウント"
location: "場所" location: "場所"
@ -682,7 +693,7 @@ mobile/views/pages/settings/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-bot: "このアカウントはBotです" is-cat: "このアカウントはCatです"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -713,6 +724,8 @@ mobile/views/pages/settings.vue:
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する"
twitter: "Twitter連携" twitter: "Twitter連携"
twitter-connect: "Twitterアカウントに接続する" twitter-connect: "Twitterアカウントに接続する"
twitter-reconnect: "再接続する" twitter-reconnect: "再接続する"

View File

@ -1,6 +1,6 @@
--- ---
meta: meta:
lang: "日本語" lang: "中文(简体)"
divider: "" divider: ""
common: common:
misskey: "Misskeyで皆と共有しよう。" misskey: "Misskeyで皆と共有しよう。"
@ -151,6 +151,15 @@ common/views/components/twitter-setting.vue:
disconnect: "切断する" disconnect: "切断する"
common/views/components/uploader.vue: common/views/components/uploader.vue:
waiting: "待機中" waiting: "待機中"
common/views/components/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
common/views/widgets/broadcast.vue: common/views/widgets/broadcast.vue:
fetching: "確認中" fetching: "確認中"
no-broadcasts: "お知らせはありません" no-broadcasts: "お知らせはありません"
@ -165,15 +174,6 @@ common/views/widgets/photo-stream.vue:
common/views/widgets/server.vue: common/views/widgets/server.vue:
title: "サーバー情報" title: "サーバー情報"
toggle: "表示を切り替え" toggle: "表示を切り替え"
commons/views/widgets/visibility-chooser.vue:
public: "公開"
home: "ホーム"
home-desc: "ホームタイムラインにのみ公開"
followers: "フォロワー"
followers-desc: "自分のフォロワーにのみ公開"
specified: "ダイレクト"
specified-desc: "指定したユーザーにのみ公開"
private: "非公開"
desktop/views/components/activity.chart.vue: desktop/views/components/activity.chart.vue:
total: "Black ... Total" total: "Black ... Total"
notes: "Blue ... Notes" notes: "Blue ... Notes"
@ -304,7 +304,7 @@ desktop/views/components/messaging-window.vue:
desktop/views/components/note-detail.vue: desktop/views/components/note-detail.vue:
more: "会話をもっと読み込む" more: "会話をもっと読み込む"
private: "(この投稿は非公開です)" private: "(この投稿は非公開です)"
is-renote: "がRenote" reposted-by: "{}がRenote"
location: "位置情報" location: "位置情報"
renote: "Renote" renote: "Renote"
add-reaction: "リアクション" add-reaction: "リアクション"
@ -358,6 +358,8 @@ desktop/views/components/renote-form.vue:
failure: "Renoteに失敗しました" failure: "Renoteに失敗しました"
desktop/views/components/renote-form-window.vue: desktop/views/components/renote-form-window.vue:
title: "この投稿をRenoteしますか" title: "この投稿をRenoteしますか"
desktop/views/components/settings-window.vue:
settings: "設定"
desktop/views/components/settings.vue: desktop/views/components/settings.vue:
profile: "プロフィール" profile: "プロフィール"
notification: "通知" notification: "通知"
@ -475,6 +477,8 @@ desktop/views/components/settings.profile.vue:
description: "自己紹介" description: "自己紹介"
birthday: "誕生日" birthday: "誕生日"
save: "保存" save: "保存"
is-bot: "このアカウントはBotです"
is-cat: "このアカウントはCatです"
desktop/views/components/sub-note-content.vue: desktop/views/components/sub-note-content.vue:
hidden: "(この投稿は非公開です)" hidden: "(この投稿は非公開です)"
media: "つのメディア" media: "つのメディア"
@ -521,6 +525,12 @@ desktop/views/components/users-list-item.vue:
desktop/views/components/window.vue: desktop/views/components/window.vue:
popout: "ポップアウト" popout: "ポップアウト"
close: "閉じる" close: "閉じる"
desktop/views/pages/welcome.vue:
signin: "ログイン"
signup: "新規登録"
signin-button: "やってる"
signup-button: "やる"
timeline: "タイムライン"
desktop/views/pages/drive.vue: desktop/views/pages/drive.vue:
title: "Misskey Drive" title: "Misskey Drive"
desktop/views/pages/favorites.vue: desktop/views/pages/favorites.vue:
@ -660,7 +670,9 @@ mobile/views/pages/followers.vue:
mobile/views/pages/following.vue: mobile/views/pages/following.vue:
following-of: "{}のフォロー" following-of: "{}のフォロー"
mobile/views/pages/home.vue: mobile/views/pages/home.vue:
timeline: "タイムライン" home: "ホーム"
local: "ローカル"
global: "グローバル"
mobile/views/pages/messaging.vue: mobile/views/pages/messaging.vue:
messaging: "メッセージ" messaging: "メッセージ"
mobile/views/pages/messaging-room.vue: mobile/views/pages/messaging-room.vue:
@ -674,7 +686,6 @@ mobile/views/pages/notifications.vue:
read-all: "すべての通知を既読にしますか?" read-all: "すべての通知を既読にしますか?"
mobile/views/pages/settings/settings.profile.vue: mobile/views/pages/settings/settings.profile.vue:
title: "プロフィール" title: "プロフィール"
will-be-published: "※公開されます"
name: "名前" name: "名前"
account: "アカウント" account: "アカウント"
location: "場所" location: "場所"
@ -682,7 +693,7 @@ mobile/views/pages/settings/settings.profile.vue:
birthday: "誕生日" birthday: "誕生日"
avatar: "アイコン" avatar: "アイコン"
banner: "バナー" banner: "バナー"
is-bot: "このアカウントはBotです" is-cat: "このアカウントはCatです"
save: "保存" save: "保存"
saved: "プロフィールを保存しました" saved: "プロフィールを保存しました"
uploading: "アップロード中" uploading: "アップロード中"
@ -713,6 +724,8 @@ mobile/views/pages/settings.vue:
behavior: "動作" behavior: "動作"
fetch-on-scroll: "スクロールで自動読み込み" fetch-on-scroll: "スクロールで自動読み込み"
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する"
twitter: "Twitter連携" twitter: "Twitter連携"
twitter-connect: "Twitterアカウントに接続する" twitter-connect: "Twitterアカウントに接続する"
twitter-reconnect: "再接続する" twitter-reconnect: "再接続する"

View File

@ -1,8 +1,8 @@
{ {
"name": "misskey", "name": "misskey",
"author": "syuilo <i@syuilo.com>", "author": "syuilo <i@syuilo.com>",
"version": "2.13.0", "version": "2.18.2",
"clientVersion": "1.0.5576", "clientVersion": "1.0.5793",
"codename": "nighthike", "codename": "nighthike",
"main": "./built/index.js", "main": "./built/index.js",
"private": true, "private": true,
@ -114,7 +114,7 @@
"gulp-cssnano": "2.1.3", "gulp-cssnano": "2.1.3",
"gulp-htmlmin": "4.0.0", "gulp-htmlmin": "4.0.0",
"gulp-imagemin": "4.1.0", "gulp-imagemin": "4.1.0",
"gulp-mocha": "5.0.0", "gulp-mocha": "6.0.0",
"gulp-pug": "4.0.1", "gulp-pug": "4.0.1",
"gulp-rename": "1.2.3", "gulp-rename": "1.2.3",
"gulp-replace": "1.0.0", "gulp-replace": "1.0.0",
@ -124,17 +124,17 @@
"gulp-typescript": "4.0.2", "gulp-typescript": "4.0.2",
"gulp-uglify": "3.0.0", "gulp-uglify": "3.0.0",
"gulp-util": "3.0.8", "gulp-util": "3.0.8",
"hard-source-webpack-plugin": "0.6.9", "hard-source-webpack-plugin": "0.6.10",
"highlight.js": "9.12.0", "highlight.js": "9.12.0",
"html-minifier": "3.5.15", "html-minifier": "3.5.16",
"http-signature": "1.2.0", "http-signature": "1.2.0",
"inquirer": "5.2.0", "inquirer": "5.2.0",
"is-root": "2.0.0", "is-root": "2.0.0",
"is-url": "1.2.4", "is-url": "1.2.4",
"js-yaml": "3.11.0", "js-yaml": "3.11.0",
"jsdom": "11.10.0", "jsdom": "11.11.0",
"koa": "2.5.1", "koa": "2.5.1",
"koa-bodyparser": "4.2.0", "koa-bodyparser": "4.2.1",
"koa-compress": "3.0.0", "koa-compress": "3.0.0",
"koa-favicon": "2.0.1", "koa-favicon": "2.0.1",
"koa-json-body": "5.3.0", "koa-json-body": "5.3.0",
@ -163,18 +163,18 @@
"object-assign-deep": "0.4.0", "object-assign-deep": "0.4.0",
"on-build-webpack": "0.1.0", "on-build-webpack": "0.1.0",
"os-utils": "0.0.14", "os-utils": "0.0.14",
"parse5": "4.0.0", "parse5": "5.0.0",
"progress-bar-webpack-plugin": "1.11.0", "progress-bar-webpack-plugin": "1.11.0",
"prominence": "0.2.0", "prominence": "0.2.0",
"promise-sequential": "1.1.1", "promise-sequential": "1.1.1",
"pug": "2.0.3", "pug": "2.0.3",
"punycode": "2.1.0", "punycode": "2.1.1",
"qrcode": "1.2.0", "qrcode": "1.2.0",
"ratelimiter": "3.0.3", "ratelimiter": "3.0.3",
"recaptcha-promise": "0.1.3", "recaptcha-promise": "0.1.3",
"reconnecting-websocket": "3.2.2", "reconnecting-websocket": "3.2.2",
"redis": "2.8.0", "redis": "2.8.0",
"request": "2.86.0", "request": "2.87.0",
"request-promise-native": "1.0.5", "request-promise-native": "1.0.5",
"rimraf": "2.6.2", "rimraf": "2.6.2",
"rndstr": "1.0.0", "rndstr": "1.0.0",
@ -193,7 +193,7 @@
"textarea-caret": "3.1.0", "textarea-caret": "3.1.0",
"tmp": "0.0.33", "tmp": "0.0.33",
"ts-loader": "4.3.0", "ts-loader": "4.3.0",
"ts-node": "6.0.3", "ts-node": "6.0.4",
"tslint": "5.10.0", "tslint": "5.10.0",
"typescript": "2.8.3", "typescript": "2.8.3",
"typescript-eslint-parser": "15.0.0", "typescript-eslint-parser": "15.0.0",
@ -205,7 +205,7 @@
"vue-cropperjs": "2.2.0", "vue-cropperjs": "2.2.0",
"vue-js-modal": "1.3.13", "vue-js-modal": "1.3.13",
"vue-json-tree-view": "2.1.4", "vue-json-tree-view": "2.1.4",
"vue-loader": "15.1.0", "vue-loader": "15.2.1",
"vue-material": "^1.0.0-beta-10.2", "vue-material": "^1.0.0-beta-10.2",
"vue-router": "3.0.1", "vue-router": "3.0.1",
"vue-template-compiler": "2.5.16", "vue-template-compiler": "2.5.16",
@ -214,10 +214,10 @@
"vuex-persistedstate": "^2.5.4", "vuex-persistedstate": "^2.5.4",
"web-push": "3.3.1", "web-push": "3.3.1",
"webfinger.js": "2.6.6", "webfinger.js": "2.6.6",
"webpack": "4.8.3", "webpack": "4.9.1",
"webpack-cli": "2.1.3", "webpack-cli": "2.1.4",
"websocket": "1.0.26", "websocket": "1.0.26",
"ws": "5.1.1", "ws": "5.2.0",
"xev": "2.0.0" "xev": "2.0.0"
} }
} }

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="index"> <div class="index">
<main v-if="os.isSignedIn"> <main v-if="$store.getters.isSignedIn">
<p class="fetching" v-if="fetching">読み込み中<mk-ellipsis/></p> <p class="fetching" v-if="fetching">読み込み中<mk-ellipsis/></p>
<x-form <x-form
ref="form" ref="form"
@ -22,7 +22,7 @@
<p>セッションが存在しません</p> <p>セッションが存在しません</p>
</div> </div>
</main> </main>
<main class="signin" v-if="!os.isSignedIn"> <main class="signin" v-if="!$store.getters.isSignedIn">
<h1>サインインしてください</h1> <h1>サインインしてください</h1>
<mk-signin/> <mk-signin/>
</main> </main>
@ -51,7 +51,7 @@ export default Vue.extend({
} }
}, },
mounted() { mounted() {
if (!this.$root.$data.os.isSignedIn) return; if (!this.$root.$data.$store.getters.isSignedIn) return;
// Fetch session // Fetch session
(this as any).api('auth/session/show', { (this as any).api('auth/session/show', {

View File

@ -18,6 +18,14 @@
return; return;
} }
//#region Load settings
let settings = null;
const vuex = localStorage.getItem('vuex');
if (vuex) {
settings = JSON.parse(vuex);
}
//#endregion
// Get the current url information // Get the current url information
const url = new URL(location.href); const url = new URL(location.href);
@ -35,14 +43,9 @@
// The default language is English // The default language is English
if (!LANGS.includes(lang)) lang = 'en'; if (!LANGS.includes(lang)) lang = 'en';
const vuex = localStorage.getItem('vuex'); if (settings) {
if (vuex) { if (settings.device.lang) lang = settings.device.lang;
const data = JSON.parse(vuex);
if (data.device.lang) lang = data.device.lang;
} }
const storedLang = localStorage.getItem('lang');
if (storedLang) lang = storedLang;
//#endregion //#endregion
// Detect the user agent // Detect the user agent
@ -71,8 +74,10 @@
} }
// Dark/Light // Dark/Light
if (localStorage.getItem('darkmode') == 'true') { if (settings) {
document.documentElement.setAttribute('data-darkmode', 'true'); if (settings.device.darkmode) {
document.documentElement.setAttribute('data-darkmode', 'true');
}
} }
// Script version // Script version

View File

@ -24,10 +24,8 @@ export class HomeStream extends Stream {
if (os.debug) { if (os.debug) {
console.log('I updated:', i); console.log('I updated:', i);
} }
merge(me, i);
// キャッシュ更新 os.store.dispatch('mergeMe', i);
os.bakeMe();
}); });
this.on('clientSettingUpdated', x => { this.on('clientSettingUpdated', x => {

View File

@ -26,9 +26,13 @@ export default Vue.extend({
}, },
style(): any { style(): any {
return { return {
backgroundColor: this.user.avatarColor && this.user.avatarColor.length == 3 ? `rgb(${ this.user.avatarColor.join(',') })` : null, backgroundColor: this.lightmode
? `rgb(${ this.user.avatarColor.slice(0, 3).join(',') })`
: this.user.avatarColor && this.user.avatarColor.length == 3
? `rgb(${ this.user.avatarColor.join(',') })`
: null,
backgroundImage: this.lightmode ? null : `url(${ this.user.avatarUrl }?thumbnail)`, backgroundImage: this.lightmode ? null : `url(${ this.user.avatarUrl }?thumbnail)`,
borderRadius: (this as any).clientSettings.circleIcons ? '100%' : null borderRadius: this.$store.state.settings.circleIcons ? '100%' : null
}; };
} }
} }

View File

@ -28,7 +28,7 @@ export default Vue.extend({
}, },
mounted() { mounted() {
document.title = 'Oops!'; document.title = 'Oops!';
document.documentElement.style.background = '#f8f8f8'; document.documentElement.style.setProperty('background', '#f8f8f8', 'important');
}, },
methods: { methods: {
reload() { reload() {

View File

@ -197,7 +197,7 @@ export default Vue.extend({
<style lang="stylus" scoped> <style lang="stylus" scoped>
@import '~const.styl' @import '~const.styl'
.mk-messaging-form root(isDark)
> textarea > textarea
cursor auto cursor auto
display block display block
@ -209,10 +209,10 @@ export default Vue.extend({
padding 8px padding 8px
resize none resize none
font-size 1em font-size 1em
color #000 color isDark ? #fff : #000
outline none outline none
border none border none
border-top solid 1px #eee border-top solid 1px isDark ? #4b5056 : #eee
border-radius 0 border-radius 0
box-shadow none box-shadow none
background transparent background transparent
@ -302,4 +302,10 @@ export default Vue.extend({
input[type=file] input[type=file]
display none display none
.mk-messaging-form[data-darkmode]
root(true)
.mk-messaging-form:not([data-darkmode])
root(false)
</style> </style>

View File

@ -8,7 +8,7 @@
<img src="/assets/desktop/messaging/delete.png" alt="Delete"/> <img src="/assets/desktop/messaging/delete.png" alt="Delete"/>
</button> </button>
<div class="content" v-if="!message.isDeleted"> <div class="content" v-if="!message.isDeleted">
<mk-note-html class="text" v-if="message.text" ref="text" :text="message.text" :i="os.i"/> <mk-note-html class="text" v-if="message.text" ref="text" :text="message.text" :i="$store.state.i"/>
<div class="file" v-if="message.file"> <div class="file" v-if="message.file">
<a :href="message.file.url" target="_blank" :title="message.file.name"> <a :href="message.file.url" target="_blank" :title="message.file.name">
<img v-if="message.file.type.split('/')[0] == 'image'" :src="message.file.url" :alt="message.file.name"/> <img v-if="message.file.type.split('/')[0] == 'image'" :src="message.file.url" :alt="message.file.name"/>
@ -42,7 +42,7 @@ export default Vue.extend({
}, },
computed: { computed: {
isMe(): boolean { isMe(): boolean {
return this.message.userId == (this as any).os.i.id; return this.message.userId == this.$store.state.i.id;
}, },
urls(): string[] { urls(): string[] {
if (this.message.text) { if (this.message.text) {
@ -59,8 +59,10 @@ export default Vue.extend({
</script> </script>
<style lang="stylus" scoped> <style lang="stylus" scoped>
.message @import '~const.styl'
$me-balloon-color = #23A7B6
root(isDark)
$me-balloon-color = $theme-color
padding 10px 12px 10px 12px padding 10px 12px 10px 12px
background-color transparent background-color transparent
@ -126,7 +128,7 @@ export default Vue.extend({
bottom -4px bottom -4px
left -12px left -12px
margin 0 margin 0
color rgba(#000, 0.5) color isDark ? rgba(#fff, 0.5) : rgba(#000, 0.5)
font-size 11px font-size 11px
> .content > .content
@ -187,7 +189,7 @@ export default Vue.extend({
display block display block
margin 2px 0 0 0 margin 2px 0 0 0
font-size 10px font-size 10px
color rgba(#000, 0.4) color isDark ? rgba(#fff, 0.4) : rgba(#000, 0.4)
> [data-fa] > [data-fa]
margin-left 4px margin-left 4px
@ -200,8 +202,9 @@ export default Vue.extend({
padding-left 66px padding-left 66px
> .balloon > .balloon
$color = isDark ? #2d3338 : #eee
float left float left
background #eee background $color
&[data-no-text] &[data-no-text]
background transparent background transparent
@ -209,10 +212,15 @@ export default Vue.extend({
&:not([data-no-text]):before &:not([data-no-text]):before
left -14px left -14px
border-top solid 8px transparent border-top solid 8px transparent
border-right solid 8px #eee border-right solid 8px $color
border-bottom solid 8px transparent border-bottom solid 8px transparent
border-left solid 8px transparent border-left solid 8px transparent
> .content
> .text
if isDark
color #fff
> footer > footer
text-align left text-align left
@ -241,7 +249,7 @@ export default Vue.extend({
> .content > .content
> p.is-deleted > p.is-deleted
color rgba(255, 255, 255, 0.5) color rgba(#fff, 0.5)
> .text >>> > .text >>>
&, * &, *
@ -254,4 +262,10 @@ export default Vue.extend({
> .baloon > .baloon
opacity 0.5 opacity 0.5
.message[data-darkmode]
root(true)
.message:not([data-darkmode])
root(false)
</style> </style>

View File

@ -18,7 +18,11 @@
</template> </template>
</div> </div>
<footer> <footer>
<div ref="notifications" class="notifications"></div> <transition name="fade">
<div class="new-message" v-show="showIndicator">
<button @click="onIndicatorClick">%fa:arrow-circle-down%%i18n:@new-message%</button>
</div>
</transition>
<x-form :user="user" ref="form"/> <x-form :user="user" ref="form"/>
</footer> </footer>
</div> </div>
@ -45,7 +49,9 @@ export default Vue.extend({
fetchingMoreMessages: false, fetchingMoreMessages: false,
messages: [], messages: [],
existMoreMessages: false, existMoreMessages: false,
connection: null connection: null,
showIndicator: false,
timer: null
}; };
}, },
@ -66,7 +72,7 @@ export default Vue.extend({
}, },
mounted() { mounted() {
this.connection = new MessagingStream((this as any).os, (this as any).os.i, this.user.id); this.connection = new MessagingStream((this as any).os, this.$store.state.i, this.user.id);
this.connection.on('message', this.onMessage); this.connection.on('message', this.onMessage);
this.connection.on('read', this.onRead); this.connection.on('read', this.onRead);
@ -158,7 +164,7 @@ export default Vue.extend({
const isBottom = this.isBottom(); const isBottom = this.isBottom();
this.messages.push(message); this.messages.push(message);
if (message.userId != (this as any).os.i.id && !document.hidden) { if (message.userId != this.$store.state.i.id && !document.hidden) {
this.connection.send({ this.connection.send({
type: 'read', type: 'read',
id: message.id id: message.id
@ -170,9 +176,9 @@ export default Vue.extend({
this.$nextTick(() => { this.$nextTick(() => {
this.scrollToBottom(); this.scrollToBottom();
}); });
} else if (message.userId != (this as any).os.i.id) { } else if (message.userId != this.$store.state.i.id) {
// Notify // Notify
this.notify('%i18n:@new-message%'); this.notifyNewMessage();
} }
}, },
@ -205,25 +211,25 @@ export default Vue.extend({
} }
}, },
notify(message) { onIndicatorClick() {
const n = document.createElement('p') as any; this.showIndicator = false;
n.innerHTML = '%fa:arrow-circle-down%' + message; this.scrollToBottom();
n.onclick = () => { },
this.scrollToBottom();
n.parentNode.removeChild(n);
};
(this.$refs.notifications as any).appendChild(n);
setTimeout(() => { notifyNewMessage() {
n.style.opacity = 0; this.showIndicator = true;
setTimeout(() => n.parentNode.removeChild(n), 1000);
if (this.timer) clearTimeout(this.timer);
this.timer = setTimeout(() => {
this.showIndicator = false;
}, 4000); }, 4000);
}, },
onVisibilitychange() { onVisibilitychange() {
if (document.hidden) return; if (document.hidden) return;
this.messages.forEach(message => { this.messages.forEach(message => {
if (message.userId !== (this as any).os.i.id && !message.isRead) { if (message.userId !== this.$store.state.i.id && !message.isRead) {
this.connection.send({ this.connection.send({
type: 'read', type: 'read',
id: message.id id: message.id
@ -238,11 +244,12 @@ export default Vue.extend({
<style lang="stylus" scoped> <style lang="stylus" scoped>
@import '~const.styl' @import '~const.styl'
.mk-messaging-room root(isDark)
display flex display flex
flex 1 flex 1
flex-direction column flex-direction column
height 100% height 100%
background isDark ? #191b22 : #fff
> .stream > .stream
width 100% width 100%
@ -256,7 +263,7 @@ export default Vue.extend({
padding 16px 8px 8px 8px padding 16px 8px 8px 8px
text-align center text-align center
font-size 0.8em font-size 0.8em
color rgba(#000, 0.4) color rgba(isDark ? #fff : #000, 0.4)
[data-fa] [data-fa]
margin-right 4px margin-right 4px
@ -267,7 +274,7 @@ export default Vue.extend({
padding 16px 8px 8px 8px padding 16px 8px 8px 8px
text-align center text-align center
font-size 0.8em font-size 0.8em
color rgba(#000, 0.4) color rgba(isDark ? #fff : #000, 0.4)
[data-fa] [data-fa]
margin-right 4px margin-right 4px
@ -278,7 +285,7 @@ export default Vue.extend({
padding 16px padding 16px
text-align center text-align center
font-size 0.8em font-size 0.8em
color rgba(#000, 0.4) color rgba(isDark ? #fff : #000, 0.4)
[data-fa] [data-fa]
margin-right 4px margin-right 4px
@ -322,7 +329,7 @@ export default Vue.extend({
left 0 left 0
right 0 right 0
margin 0 auto margin 0 auto
background rgba(#000, 0.1) background rgba(isDark ? #fff : #000, 0.1)
> span > span
display inline-block display inline-block
@ -330,8 +337,8 @@ export default Vue.extend({
padding 0 16px padding 0 16px
//font-weight bold //font-weight bold
line-height 32px line-height 32px
color rgba(#000, 0.3) color rgba(isDark ? #fff : #000, 0.3)
background #fff background isDark ? #191b22 : #fff
> footer > footer
position -webkit-sticky position -webkit-sticky
@ -342,30 +349,32 @@ export default Vue.extend({
max-width 600px max-width 600px
margin 0 auto margin 0 auto
padding 0 padding 0
background rgba(255, 255, 255, 0.95) background rgba(isDark ? #282c37 : #fff, 0.95)
background-clip content-box background-clip content-box
> .notifications > .new-message
position absolute position absolute
top -48px top -48px
width 100% width 100%
padding 8px 0 padding 8px 0
text-align center text-align center
&:empty > button
display none
> p
display inline-block display inline-block
margin 0 margin 0
padding 0 12px 0 28px padding 0 12px 0 30px
cursor pointer cursor pointer
line-height 32px line-height 32px
font-size 12px font-size 12px
color $theme-color-foreground color $theme-color-foreground
background $theme-color background $theme-color
border-radius 16px border-radius 16px
transition opacity 1s ease
&:hover
background lighten($theme-color, 10%)
&:active
background darken($theme-color, 10%)
> [data-fa] > [data-fa]
position absolute position absolute
@ -374,4 +383,17 @@ export default Vue.extend({
line-height 32px line-height 32px
font-size 16px font-size 16px
.fade-enter-active, .fade-leave-active
transition opacity 0.1s
.fade-enter, .fade-leave-to
transition opacity 0.5s
opacity 0
.mk-messaging-room[data-darkmode]
root(true)
.mk-messaging-room:not([data-darkmode])
root(false)
</style> </style>

View File

@ -95,7 +95,7 @@ export default Vue.extend({
methods: { methods: {
getAcct, getAcct,
isMe(message) { isMe(message) {
return message.userId == (this as any).os.i.id; return message.userId == this.$store.state.i.id;
}, },
onMessage(message) { onMessage(message) {
this.messages = this.messages.filter(m => !( this.messages = this.messages.filter(m => !(

View File

@ -3,7 +3,7 @@
<div class="backdrop" ref="backdrop" @click="close"></div> <div class="backdrop" ref="backdrop" @click="close"></div>
<div class="popover" :class="{ compact }" ref="popover"> <div class="popover" :class="{ compact }" ref="popover">
<button @click="favorite">%i18n:@favorite%</button> <button @click="favorite">%i18n:@favorite%</button>
<button v-if="note.userId == os.i.id" @click="pin">%i18n:@pin%</button> <button v-if="note.userId == $store.state.i.id" @click="pin">%i18n:@pin%</button>
<a v-if="note.uri" :href="note.uri" target="_blank">%i18n:@remote%</a> <a v-if="note.uri" :href="note.uri" target="_blank">%i18n:@remote%</a>
</div> </div>
</div> </div>

View File

@ -61,13 +61,13 @@ export default Vue.extend({
computed: { computed: {
iAmPlayer(): boolean { iAmPlayer(): boolean {
if (!(this as any).os.isSignedIn) return false; if (!this.$store.getters.isSignedIn) return false;
return this.game.user1Id == (this as any).os.i.id || this.game.user2Id == (this as any).os.i.id; return this.game.user1Id == this.$store.state.i.id || this.game.user2Id == this.$store.state.i.id;
}, },
myColor(): Color { myColor(): Color {
if (!this.iAmPlayer) return null; if (!this.iAmPlayer) return null;
if (this.game.user1Id == (this as any).os.i.id && this.game.black == 1) return true; if (this.game.user1Id == this.$store.state.i.id && this.game.black == 1) return true;
if (this.game.user2Id == (this as any).os.i.id && this.game.black == 2) return true; if (this.game.user2Id == this.$store.state.i.id && this.game.black == 2) return true;
return false; return false;
}, },
opColor(): Color { opColor(): Color {
@ -91,7 +91,7 @@ export default Vue.extend({
}, },
isMyTurn(): boolean { isMyTurn(): boolean {
if (this.turnUser == null) return null; if (this.turnUser == null) return null;
return this.turnUser.id == (this as any).os.i.id; return this.turnUser.id == this.$store.state.i.id;
} }
}, },

View File

@ -25,7 +25,7 @@ export default Vue.extend({
}, },
created() { created() {
this.g = this.game; this.g = this.game;
this.connection = new OthelloGameStream((this as any).os, (this as any).os.i, this.game); this.connection = new OthelloGameStream((this as any).os, this.$store.state.i, this.game);
this.connection.on('started', this.onStarted); this.connection.on('started', this.onStarted);
}, },
beforeDestroy() { beforeDestroy() {

View File

@ -116,13 +116,13 @@ export default Vue.extend({
return categories.filter((item, pos) => categories.indexOf(item) == pos); return categories.filter((item, pos) => categories.indexOf(item) == pos);
}, },
isAccepted(): boolean { isAccepted(): boolean {
if (this.game.user1Id == (this as any).os.i.id && this.game.user1Accepted) return true; if (this.game.user1Id == this.$store.state.i.id && this.game.user1Accepted) return true;
if (this.game.user2Id == (this as any).os.i.id && this.game.user2Accepted) return true; if (this.game.user2Id == this.$store.state.i.id && this.game.user2Accepted) return true;
return false; return false;
}, },
isOpAccepted(): boolean { isOpAccepted(): boolean {
if (this.game.user1Id != (this as any).os.i.id && this.game.user1Accepted) return true; if (this.game.user1Id != this.$store.state.i.id && this.game.user1Accepted) return true;
if (this.game.user2Id != (this as any).os.i.id && this.game.user2Accepted) return true; if (this.game.user2Id != this.$store.state.i.id && this.game.user2Accepted) return true;
return false; return false;
} }
}, },
@ -133,8 +133,8 @@ export default Vue.extend({
this.connection.on('init-form', this.onInitForm); this.connection.on('init-form', this.onInitForm);
this.connection.on('message', this.onMessage); this.connection.on('message', this.onMessage);
if (this.game.user1Id != (this as any).os.i.id && this.game.settings.form1) this.form = this.game.settings.form1; if (this.game.user1Id != this.$store.state.i.id && this.game.settings.form1) this.form = this.game.settings.form1;
if (this.game.user2Id != (this as any).os.i.id && this.game.settings.form2) this.form = this.game.settings.form2; if (this.game.user2Id != this.$store.state.i.id && this.game.settings.form2) this.form = this.game.settings.form2;
}, },
beforeDestroy() { beforeDestroy() {
@ -185,12 +185,12 @@ export default Vue.extend({
}, },
onInitForm(x) { onInitForm(x) {
if (x.userId == (this as any).os.i.id) return; if (x.userId == this.$store.state.i.id) return;
this.form = x.form; this.form = x.form;
}, },
onMessage(x) { onMessage(x) {
if (x.userId == (this as any).os.i.id) return; if (x.userId == this.$store.state.i.id) return;
this.messages.unshift(x.message); this.messages.unshift(x.message);
}, },

View File

@ -1,13 +1,13 @@
<template> <template>
<div class="mk-twitter-setting"> <div class="mk-twitter-setting">
<p>%i18n:@description%<a :href="`${docsUrl}/link-to-twitter`" target="_blank">%i18n:@detail%</a></p> <p>%i18n:@description%<a :href="`${docsUrl}/link-to-twitter`" target="_blank">%i18n:@detail%</a></p>
<p class="account" v-if="os.i.twitter" :title="`Twitter ID: ${os.i.twitter.userId}`">%i18n:@connected-to%: <a :href="`https://twitter.com/${os.i.twitter.screenName}`" target="_blank">@{{ os.i.twitter.screenName }}</a></p> <p class="account" v-if="$store.state.i.twitter" :title="`Twitter ID: ${$store.state.i.twitter.userId}`">%i18n:@connected-to%: <a :href="`https://twitter.com/${$store.state.i.twitter.screenName}`" target="_blank">@{{ $store.state.i.twitter.screenName }}</a></p>
<p> <p>
<a :href="`${apiUrl}/connect/twitter`" target="_blank" @click.prevent="connect">{{ os.i.twitter ? '%i18n:@reconnect%' : '%i18n:@connect%' }}</a> <a :href="`${apiUrl}/connect/twitter`" target="_blank" @click.prevent="connect">{{ $store.state.i.twitter ? '%i18n:@reconnect%' : '%i18n:@connect%' }}</a>
<span v-if="os.i.twitter"> or </span> <span v-if="$store.state.i.twitter"> or </span>
<a :href="`${apiUrl}/disconnect/twitter`" target="_blank" v-if="os.i.twitter" @click.prevent="disconnect">%i18n:@disconnect%</a> <a :href="`${apiUrl}/disconnect/twitter`" target="_blank" v-if="$store.state.i.twitter" @click.prevent="disconnect">%i18n:@disconnect%</a>
</p> </p>
<p class="id" v-if="os.i.twitter">Twitter ID: {{ os.i.twitter.userId }}</p> <p class="id" v-if="$store.state.i.twitter">Twitter ID: {{ $store.state.i.twitter.userId }}</p>
</div> </div>
</template> </template>
@ -24,8 +24,8 @@ export default Vue.extend({
}; };
}, },
mounted() { mounted() {
this.$watch('os.i', () => { this.$watch('$store.state.i', () => {
if ((this as any).os.i.twitter) { if (this.$store.state.i.twitter) {
if (this.form) this.form.close(); if (this.form) this.form.close();
} }
}, { }, {

View File

@ -50,7 +50,7 @@ export default Vue.extend({
reader.readAsDataURL(file); reader.readAsDataURL(file);
const data = new FormData(); const data = new FormData();
data.append('i', (this as any).os.i.token); data.append('i', this.$store.state.i.token);
data.append('file', file); data.append('file', file);
if (folder) data.append('folderId', folder); if (folder) data.append('folderId', folder);

View File

@ -37,6 +37,7 @@ export default Vue.extend({
fetch(cb?) { fetch(cb?) {
this.fetching = true; this.fetching = true;
(this as any).api('notes', { (this as any).api('notes', {
local: true,
reply: false, reply: false,
renote: false, renote: false,
media: false, media: false,
@ -52,15 +53,15 @@ export default Vue.extend({
</script> </script>
<style lang="stylus" scoped> <style lang="stylus" scoped>
.mk-welcome-timeline root(isDark)
background #fff background isDark ? #282C37 : #fff
> div > div
padding 16px padding 16px
overflow-wrap break-word overflow-wrap break-word
font-size .9em font-size .9em
color #4C4C4C color isDark ? #fff : #4C4C4C
border-bottom 1px solid rgba(#000, 0.05) border-bottom 1px solid isDark ? rgba(#000, 0.1) : rgba(#000, 0.05)
&:after &:after
content "" content ""
@ -95,17 +96,23 @@ export default Vue.extend({
overflow hidden overflow hidden
font-weight bold font-weight bold
text-overflow ellipsis text-overflow ellipsis
color #627079 color isDark ? #fff : #627079
> .username > .username
margin 0 .5em 0 0 margin 0 .5em 0 0
color #ccc color isDark ? #606984 : #ccc
> .info > .info
margin-left auto margin-left auto
font-size 0.9em font-size 0.9em
> .created-at > .created-at
color #c0c0c0 color isDark ? #606984 : #c0c0c0
.mk-welcome-timeline[data-darkmode]
root(true)
.mk-welcome-timeline:not([data-darkmode])
root(false)
</style> </style>

View File

@ -1,18 +1,17 @@
import OS from '../../mios';
import { url } from '../../config'; import { url } from '../../config';
import MkChooseFileFromDriveWindow from '../views/components/choose-file-from-drive-window.vue'; import MkChooseFileFromDriveWindow from '../views/components/choose-file-from-drive-window.vue';
export default function(opts) { export default (os: OS) => opts => {
return new Promise((res, rej) => { return new Promise((res, rej) => {
const o = opts || {}; const o = opts || {};
if (document.body.clientWidth > 800) { if (document.body.clientWidth > 800) {
const w = new MkChooseFileFromDriveWindow({ const w = os.new(MkChooseFileFromDriveWindow, {
propsData: { title: o.title,
title: o.title, multiple: o.multiple,
multiple: o.multiple, initFolder: o.currentFolder
initFolder: o.currentFolder });
}
}).$mount();
w.$once('selected', file => { w.$once('selected', file => {
res(file); res(file);
}); });
@ -27,4 +26,4 @@ export default function(opts) {
'height=500, width=800'); 'height=500, width=800');
} }
}); });
} };

View File

@ -1,17 +1,16 @@
import OS from '../../mios';
import MkChooseFolderFromDriveWindow from '../views/components/choose-folder-from-drive-window.vue'; import MkChooseFolderFromDriveWindow from '../views/components/choose-folder-from-drive-window.vue';
export default function(opts) { export default (os: OS) => opts => {
return new Promise((res, rej) => { return new Promise((res, rej) => {
const o = opts || {}; const o = opts || {};
const w = new MkChooseFolderFromDriveWindow({ const w = os.new(MkChooseFolderFromDriveWindow, {
propsData: { title: o.title,
title: o.title, initFolder: o.currentFolder
initFolder: o.currentFolder });
}
}).$mount();
w.$once('selected', folder => { w.$once('selected', folder => {
res(folder); res(folder);
}); });
document.body.appendChild(w.$el); document.body.appendChild(w.$el);
}); });
} };

View File

@ -1,16 +1,15 @@
import OS from '../../mios';
import Ctx from '../views/components/context-menu.vue'; import Ctx from '../views/components/context-menu.vue';
export default function(e, menu, opts?) { export default (os: OS) => (e, menu, opts?) => {
const o = opts || {}; const o = opts || {};
const vm = new Ctx({ const vm = os.new(Ctx, {
propsData: { menu,
menu, x: e.pageX - window.pageXOffset,
x: e.pageX - window.pageXOffset, y: e.pageY - window.pageYOffset,
y: e.pageY - window.pageYOffset, });
}
}).$mount();
vm.$once('closed', () => { vm.$once('closed', () => {
if (o.closed) o.closed(); if (o.closed) o.closed();
}); });
document.body.appendChild(vm.$el); document.body.appendChild(vm.$el);
} };

View File

@ -1,16 +1,15 @@
import OS from '../../mios';
import Dialog from '../views/components/dialog.vue'; import Dialog from '../views/components/dialog.vue';
export default function(opts) { export default (os: OS) => opts => {
return new Promise<string>((res, rej) => { return new Promise<string>((res, rej) => {
const o = opts || {}; const o = opts || {};
const d = new Dialog({ const d = os.new(Dialog, {
propsData: { title: o.title,
title: o.title, text: o.text,
text: o.text, modal: o.modal,
modal: o.modal, buttons: o.actions
buttons: o.actions });
}
}).$mount();
d.$once('clicked', id => { d.$once('clicked', id => {
res(id); res(id);
}); });

View File

@ -1,20 +1,19 @@
import OS from '../../mios';
import InputDialog from '../views/components/input-dialog.vue'; import InputDialog from '../views/components/input-dialog.vue';
export default function(opts) { export default (os: OS) => opts => {
return new Promise<string>((res, rej) => { return new Promise<string>((res, rej) => {
const o = opts || {}; const o = opts || {};
const d = new InputDialog({ const d = os.new(InputDialog, {
propsData: { title: o.title,
title: o.title, placeholder: o.placeholder,
placeholder: o.placeholder, default: o.default,
default: o.default, type: o.type || 'text',
type: o.type || 'text', allowEmpty: o.allowEmpty
allowEmpty: o.allowEmpty });
}
}).$mount();
d.$once('done', text => { d.$once('done', text => {
res(text); res(text);
}); });
document.body.appendChild(d.$el); document.body.appendChild(d.$el);
}); });
} };

View File

@ -1,10 +1,9 @@
import OS from '../../mios';
import Notification from '../views/components/ui-notification.vue'; import Notification from '../views/components/ui-notification.vue';
export default function(message) { export default (os: OS) => message => {
const vm = new Notification({ const vm = os.new(Notification, {
propsData: { message
message });
}
}).$mount();
document.body.appendChild(vm.$el); document.body.appendChild(vm.$el);
} };

View File

@ -1,21 +1,18 @@
import OS from '../../mios';
import PostFormWindow from '../views/components/post-form-window.vue'; import PostFormWindow from '../views/components/post-form-window.vue';
import RenoteFormWindow from '../views/components/renote-form-window.vue'; import RenoteFormWindow from '../views/components/renote-form-window.vue';
export default function(opts) { export default (os: OS) => opts => {
const o = opts || {}; const o = opts || {};
if (o.renote) { if (o.renote) {
const vm = new RenoteFormWindow({ const vm = os.new(RenoteFormWindow, {
propsData: { renote: o.renote
renote: o.renote });
}
}).$mount();
document.body.appendChild(vm.$el); document.body.appendChild(vm.$el);
} else { } else {
const vm = new PostFormWindow({ const vm = os.new(PostFormWindow, {
propsData: { reply: o.reply
reply: o.reply });
}
}).$mount();
document.body.appendChild(vm.$el); document.body.appendChild(vm.$el);
} }
} };

View File

@ -6,17 +6,15 @@ import ProgressDialog from '../views/components/progress-dialog.vue';
export default (os: OS) => (cb, file = null) => { export default (os: OS) => (cb, file = null) => {
const fileSelected = file => { const fileSelected = file => {
const w = new CropWindow({ const w = os.new(CropWindow, {
propsData: { image: file,
image: file, title: 'アバターとして表示する部分を選択',
title: 'アバターとして表示する部分を選択', aspectRatio: 1 / 1
aspectRatio: 1 / 1 });
}
}).$mount();
w.$once('cropped', blob => { w.$once('cropped', blob => {
const data = new FormData(); const data = new FormData();
data.append('i', os.i.token); data.append('i', os.store.state.i.token);
data.append('file', blob, file.name + '.cropped.png'); data.append('file', blob, file.name + '.cropped.png');
os.api('drive/folders/find', { os.api('drive/folders/find', {
@ -42,11 +40,9 @@ export default (os: OS) => (cb, file = null) => {
}; };
const upload = (data, folder) => { const upload = (data, folder) => {
const dialog = new ProgressDialog({ const dialog = os.new(ProgressDialog, {
propsData: { title: '新しいアバターをアップロードしています'
title: '新しいアバターをアップロードしています' });
}
}).$mount();
document.body.appendChild(dialog.$el); document.body.appendChild(dialog.$el);
if (folder) data.append('folderId', folder.id); if (folder) data.append('folderId', folder.id);
@ -70,8 +66,14 @@ export default (os: OS) => (cb, file = null) => {
os.api('i/update', { os.api('i/update', {
avatarId: file.id avatarId: file.id
}).then(i => { }).then(i => {
os.i.avatarId = i.avatarId; os.store.commit('updateIKeyValue', {
os.i.avatarUrl = i.avatarUrl; key: 'avatarId',
value: i.avatarId
});
os.store.commit('updateIKeyValue', {
key: 'avatarUrl',
value: i.avatarUrl
});
os.apis.dialog({ os.apis.dialog({
title: '%fa:info-circle%アバターを更新しました', title: '%fa:info-circle%アバターを更新しました',

View File

@ -6,17 +6,15 @@ import ProgressDialog from '../views/components/progress-dialog.vue';
export default (os: OS) => { export default (os: OS) => {
const cropImage = file => new Promise((resolve, reject) => { const cropImage = file => new Promise((resolve, reject) => {
const w = new CropWindow({ const w = os.new(CropWindow, {
propsData: { image: file,
image: file, title: 'バナーとして表示する部分を選択',
title: 'バナーとして表示する部分を選択', aspectRatio: 16 / 9
aspectRatio: 16 / 9 });
}
}).$mount();
w.$once('cropped', blob => { w.$once('cropped', blob => {
const data = new FormData(); const data = new FormData();
data.append('i', os.i.token); data.append('i', os.store.state.i.token);
data.append('file', blob, file.name + '.cropped.png'); data.append('file', blob, file.name + '.cropped.png');
os.api('drive/folders/find', { os.api('drive/folders/find', {
@ -44,11 +42,9 @@ export default (os: OS) => {
}); });
const upload = (data, folder) => new Promise((resolve, reject) => { const upload = (data, folder) => new Promise((resolve, reject) => {
const dialog = new ProgressDialog({ const dialog = os.new(ProgressDialog, {
propsData: { title: '新しいバナーをアップロードしています'
title: '新しいバナーをアップロードしています' });
}
}).$mount();
document.body.appendChild(dialog.$el); document.body.appendChild(dialog.$el);
if (folder) data.append('folderId', folder.id); if (folder) data.append('folderId', folder.id);
@ -73,8 +69,14 @@ export default (os: OS) => {
return os.api('i/update', { return os.api('i/update', {
bannerId: file.id bannerId: file.id
}).then(i => { }).then(i => {
os.i.bannerId = i.bannerId; os.store.commit('updateIKeyValue', {
os.i.bannerUrl = i.bannerUrl; key: 'bannerId',
value: i.bannerId
});
os.store.commit('updateIKeyValue', {
key: 'bannerUrl',
value: i.bannerUrl
});
os.apis.dialog({ os.apis.dialog({
title: '%fa:info-circle%バナーを更新しました', title: '%fa:info-circle%バナーを更新しました',

View File

@ -2,7 +2,6 @@
* Desktop Client * Desktop Client
*/ */
import Vue from 'vue';
import VueRouter from 'vue-router'; import VueRouter from 'vue-router';
// Style // Style
@ -68,12 +67,12 @@ init(async (launch) => {
// Launch the app // Launch the app
const [, os] = launch(router, os => ({ const [, os] = launch(router, os => ({
chooseDriveFolder, chooseDriveFolder: chooseDriveFolder(os),
chooseDriveFile, chooseDriveFile: chooseDriveFile(os),
dialog, dialog: dialog(os),
input, input: input(os),
post, post: post(os),
notify, notify: notify(os),
updateAvatar: updateAvatar(os), updateAvatar: updateAvatar(os),
updateBanner: updateBanner(os) updateBanner: updateBanner(os)
})); }));

View File

@ -138,6 +138,7 @@ root(isDark)
background isDark ? #282C37 : #fff background isDark ? #282C37 : #fff
border solid 1px rgba(#000, 0.075) border solid 1px rgba(#000, 0.075)
border-radius 6px border-radius 6px
overflow hidden
&[data-melt] &[data-melt]
background transparent !important background transparent !important
@ -151,9 +152,12 @@ root(isDark)
line-height 42px line-height 42px
font-size 0.9em font-size 0.9em
font-weight bold font-weight bold
color #888 color isDark ? #c5ced6 : #888
box-shadow 0 1px rgba(#000, 0.07) box-shadow 0 1px rgba(#000, 0.07)
if isDark
background #313543
> [data-fa] > [data-fa]
margin-right 4px margin-right 4px
@ -165,13 +169,13 @@ root(isDark)
width 42px width 42px
font-size 0.9em font-size 0.9em
line-height 42px line-height 42px
color #ccc color isDark ? #9baec8 : #ccc
&:hover &:hover
color #aaa color isDark ? #b2c1d5 : #aaa
&:active &:active
color #999 color isDark ? #b2c1d5 : #999
&:first-of-type &:first-of-type
left 0 left 0
@ -194,49 +198,49 @@ root(isDark)
font-size 14px font-size 14px
&.weekday &.weekday
color #19a2a9 color isDark ? #43d5dc : #19a2a9
&[data-is-donichi] &[data-is-donichi]
color #ef95a0 color isDark ? #ff6679 : #ef95a0
&[data-today] &[data-today]
box-shadow 0 0 0 1px #19a2a9 inset box-shadow 0 0 0 1px isDark ? #43d5dc : #19a2a9 inset
border-radius 6px border-radius 6px
&[data-is-donichi] &[data-is-donichi]
box-shadow 0 0 0 1px #ef95a0 inset box-shadow 0 0 0 1px isDark ? #ff6679 : #ef95a0 inset
&.day &.day
cursor pointer cursor pointer
color #777 color isDark ? #c5ced6 : #777
> div > div
border-radius 6px border-radius 6px
&:hover > div &:hover > div
background rgba(#000, 0.025) background rgba(#000, isDark ? 0.1 : 0.025)
&:active > div &:active > div
background rgba(#000, 0.05) background rgba(#000, isDark ? 0.2 : 0.05)
&[data-is-donichi] &[data-is-donichi]
color #ef95a0 color isDark ? #ff6679 : #ef95a0
&[data-is-out-of-range] &[data-is-out-of-range]
cursor default cursor default
color rgba(#777, 0.5) color rgba(isDark ? #c5ced6 : #777, 0.5)
&[data-is-donichi] &[data-is-donichi]
color rgba(#ef95a0, 0.5) color rgba(isDark ? #ff6679 : #ef95a0, 0.5)
&[data-selected] &[data-selected]
font-weight bold font-weight bold
> div > div
background rgba(#000, 0.025) background rgba(#000, isDark ? 0.1 : 0.025)
&:active > div &:active > div
background rgba(#000, 0.05) background rgba(#000, isDark ? 0.2 : 0.05)
&[data-today] &[data-today]
> div > div

View File

@ -9,10 +9,10 @@
@contextmenu.prevent.stop="onContextmenu" @contextmenu.prevent.stop="onContextmenu"
:title="title" :title="title"
> >
<div class="label" v-if="os.i.avatarId == file.id"><img src="/assets/label.svg"/> <div class="label" v-if="$store.state.i.avatarId == file.id"><img src="/assets/label.svg"/>
<p>%i18n:@avatar%</p> <p>%i18n:@avatar%</p>
</div> </div>
<div class="label" v-if="os.i.bannerId == file.id"><img src="/assets/label.svg"/> <div class="label" v-if="$store.state.i.bannerId == file.id"><img src="/assets/label.svg"/>
<p>%i18n:@banner%</p> <p>%i18n:@banner%</p>
</div> </div>
<div class="thumbnail" ref="thumbnail" :style="`background-color: ${ background }`"> <div class="thumbnail" ref="thumbnail" :style="`background-color: ${ background }`">

View File

@ -1,7 +1,7 @@
<template> <template>
<mk-window width="400px" height="550px" @closed="$destroy"> <mk-window width="400px" height="550px" @closed="$destroy">
<span slot="header" :class="$style.header"> <span slot="header" :class="$style.header">
<img :src="`${user.avatarUrl}?thumbnail&size=64`" alt=""/>%i18n:@followers%.replace('{}', {{ user | userName }}) <img :src="`${user.avatarUrl}?thumbnail&size=64`" alt=""/>{{ '%i18n:@followers%'.replace('{}', name) }}
</span> </span>
<mk-followers :user="user"/> <mk-followers :user="user"/>
</mk-window> </mk-window>
@ -11,7 +11,12 @@
import Vue from 'vue'; import Vue from 'vue';
export default Vue.extend({ export default Vue.extend({
props: ['user'] props: ['user'],
computed: {
name(): string {
return Vue.filter('userName')(this.user);
}
}
}); });
</script> </script>

View File

@ -1,7 +1,7 @@
<template> <template>
<mk-window width="400px" height="550px" @closed="$destroy"> <mk-window width="400px" height="550px" @closed="$destroy">
<span slot="header" :class="$style.header"> <span slot="header" :class="$style.header">
<img :src="`${user.avatarUrl}?thumbnail&size=64`" alt=""/>%i18n:@following%.replace('{}', {{ user | userName }}) <img :src="`${user.avatarUrl}?thumbnail&size=64`" alt=""/>{{ '%i18n:@following%'.replace('{}', name) }}
</span> </span>
<mk-following :user="user"/> <mk-following :user="user"/>
</mk-window> </mk-window>
@ -11,7 +11,12 @@
import Vue from 'vue'; import Vue from 'vue';
export default Vue.extend({ export default Vue.extend({
props: ['user'] props: ['user'],
computed: {
name(): string {
return Vue.filter('userName')(this.user);
}
}
}); });
</script> </script>

View File

@ -51,7 +51,7 @@
<div class="main"> <div class="main">
<a @click="hint">カスタマイズのヒント</a> <a @click="hint">カスタマイズのヒント</a>
<div> <div>
<mk-post-form v-if="clientSettings.showPostFormOnTopOfTl"/> <mk-post-form v-if="$store.state.settings.showPostFormOnTopOfTl"/>
<mk-timeline ref="tl" @loaded="onTlLoaded"/> <mk-timeline ref="tl" @loaded="onTlLoaded"/>
</div> </div>
</div> </div>
@ -61,7 +61,7 @@
<component v-for="widget in widgets[place]" :is="`mkw-${widget.name}`" :key="widget.id" :ref="widget.id" :widget="widget" @chosen="warp"/> <component v-for="widget in widgets[place]" :is="`mkw-${widget.name}`" :key="widget.id" :ref="widget.id" :widget="widget" @chosen="warp"/>
</div> </div>
<div class="main"> <div class="main">
<mk-post-form v-if="clientSettings.showPostFormOnTopOfTl"/> <mk-post-form v-if="$store.state.settings.showPostFormOnTopOfTl"/>
<mk-timeline ref="tl" @loaded="onTlLoaded" v-if="mode == 'timeline'"/> <mk-timeline ref="tl" @loaded="onTlLoaded" v-if="mode == 'timeline'"/>
<mk-mentions @loaded="onTlLoaded" v-if="mode == 'mentions'"/> <mk-mentions @loaded="onTlLoaded" v-if="mode == 'mentions'"/>
</div> </div>

View File

@ -16,7 +16,7 @@
<div class="body"> <div class="body">
<div class="text"> <div class="text">
<span v-if="note.isHidden" style="opacity: 0.5">%i18n:@private%</span> <span v-if="note.isHidden" style="opacity: 0.5">%i18n:@private%</span>
<mk-note-html v-if="note.text" :text="note.text" :i="os.i"/> <mk-note-html v-if="note.text" :text="note.text" :i="$store.state.i"/>
</div> </div>
<div class="media" v-if="note.mediaIds.length > 0"> <div class="media" v-if="note.mediaIds.length > 0">
<mk-media-list :media-list="note.media"/> <mk-media-list :media-list="note.media"/>

View File

@ -2,16 +2,16 @@
<div class="mk-note-detail" :title="title"> <div class="mk-note-detail" :title="title">
<button <button
class="read-more" class="read-more"
v-if="p.reply && p.reply.replyId && context.length == 0" v-if="p.reply && p.reply.replyId && conversation.length == 0"
title="%i18n:@more%" title="%i18n:@more%"
@click="fetchContext" @click="fetchConversation"
:disabled="contextFetching" :disabled="conversationFetching"
> >
<template v-if="!contextFetching">%fa:ellipsis-v%</template> <template v-if="!conversationFetching">%fa:ellipsis-v%</template>
<template v-if="contextFetching">%fa:spinner .pulse%</template> <template v-if="conversationFetching">%fa:spinner .pulse%</template>
</button> </button>
<div class="context"> <div class="conversation">
<x-sub v-for="note in context" :key="note.id" :note="note"/> <x-sub v-for="note in conversation" :key="note.id" :note="note"/>
</div> </div>
<div class="reply-to" v-if="p.reply"> <div class="reply-to" v-if="p.reply">
<x-sub :note="p.reply"/> <x-sub :note="p.reply"/>
@ -21,7 +21,10 @@
<mk-avatar class="avatar" :user="note.user"/> <mk-avatar class="avatar" :user="note.user"/>
%fa:retweet% %fa:retweet%
<router-link class="name" :href="note.user | userPage">{{ note.user | userName }}</router-link> <router-link class="name" :href="note.user | userPage">{{ note.user | userName }}</router-link>
%i18n:@is-renote% <span>{{ '%i18n:@reposted-by%'.substr(0, '%i18n:@reposted-by%'.indexOf('{')) }}</span>
<a class="name" :href="note.user | userPage" v-user-preview="note.userId">{{ note.user | userName }}</a>
<span>{{ '%i18n:@reposted-by%'.substr('%i18n:@reposted-by%'.indexOf('}') + 1) }}</span>
<mk-time :time="note.createdAt"/>
</p> </p>
</div> </div>
<article> <article>
@ -36,7 +39,7 @@
<div class="body"> <div class="body">
<div class="text"> <div class="text">
<span v-if="p.isHidden" style="opacity: 0.5">%i18n:@private%</span> <span v-if="p.isHidden" style="opacity: 0.5">%i18n:@private%</span>
<mk-note-html v-if="p.text" :text="p.text" :i="os.i"/> <mk-note-html v-if="p.text" :text="p.text" :i="$store.state.i"/>
</div> </div>
<div class="media" v-if="p.media.length > 0"> <div class="media" v-if="p.media.length > 0">
<mk-media-list :media-list="p.media" :raw="true"/> <mk-media-list :media-list="p.media" :raw="true"/>
@ -104,8 +107,8 @@ export default Vue.extend({
data() { data() {
return { return {
context: [], conversation: [],
contextFetching: false, conversationFetching: false,
replies: [] replies: []
}; };
}, },
@ -155,7 +158,7 @@ export default Vue.extend({
// Draw map // Draw map
if (this.p.geo) { if (this.p.geo) {
const shouldShowMap = (this as any).os.isSignedIn ? (this as any).clientSettings.showMaps : true; const shouldShowMap = this.$store.getters.isSignedIn ? this.$store.state.settings.showMaps : true;
if (shouldShowMap) { if (shouldShowMap) {
(this as any).os.getGoogleMaps().then(maps => { (this as any).os.getGoogleMaps().then(maps => {
const uluru = new maps.LatLng(this.p.geo.coordinates[1], this.p.geo.coordinates[0]); const uluru = new maps.LatLng(this.p.geo.coordinates[1], this.p.geo.coordinates[0]);
@ -173,15 +176,15 @@ export default Vue.extend({
}, },
methods: { methods: {
fetchContext() { fetchConversation() {
this.contextFetching = true; this.conversationFetching = true;
// Fetch context // Fetch conversation
(this as any).api('notes/context', { (this as any).api('notes/conversation', {
noteId: this.p.replyId noteId: this.p.replyId
}).then(context => { }).then(conversation => {
this.contextFetching = false; this.conversationFetching = false;
this.context = context.reverse(); this.conversation = conversation.reverse();
}); });
}, },
reply() { reply() {
@ -246,7 +249,7 @@ root(isDark)
&:disabled &:disabled
color isDark ? #21242b : #ccc color isDark ? #21242b : #ccc
> .context > .conversation
> * > *
border-bottom 1px solid isDark ? #1c2023 : #eef0f2 border-bottom 1px solid isDark ? #1c2023 : #eef0f2

View File

@ -4,6 +4,9 @@
<div class="main"> <div class="main">
<header> <header>
<router-link class="name" :to="note.user | userPage" v-user-preview="note.userId">{{ note.user | userName }}</router-link> <router-link class="name" :to="note.user | userPage" v-user-preview="note.userId">{{ note.user | userName }}</router-link>
<span class="is-admin" v-if="note.user.isAdmin">admin</span>
<span class="is-bot" v-if="note.user.isBot">bot</span>
<span class="is-cat" v-if="note.user.isCat">cat</span>
<span class="username"><mk-acct :user="note.user"/></span> <span class="username"><mk-acct :user="note.user"/></span>
<div class="info"> <div class="info">
<span class="mobile" v-if="note.viaMobile">%fa:mobile-alt%</span> <span class="mobile" v-if="note.viaMobile">%fa:mobile-alt%</span>
@ -68,7 +71,6 @@ root(isDark)
align-items baseline align-items baseline
margin-bottom 2px margin-bottom 2px
white-space nowrap white-space nowrap
line-height 21px
> .name > .name
display block display block
@ -84,6 +86,20 @@ root(isDark)
&:hover &:hover
text-decoration underline text-decoration underline
> .is-admin
> .is-bot
> .is-cat
margin 0 0.5em 0 0
padding 1px 5px
font-size 10px
color isDark ? #758188 : #aaa
border solid 1px isDark ? #57616f : #ddd
border-radius 3px
&.is-admin
border-color isDark ? #d42c41 : #f56a7b
color isDark ? #d42c41 : #f56a7b
> .username > .username
margin 0 .5em 0 0 margin 0 .5em 0 0
color isDark ? #606984 : #d1d8da color isDark ? #606984 : #d1d8da

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="note" tabindex="-1" :title="title" @keydown="onKeydown"> <div class="note" tabindex="-1" :title="title" @keydown="onKeydown">
<div class="reply-to" v-if="p.reply && (!os.isSignedIn || clientSettings.showReplyTarget)"> <div class="reply-to" v-if="p.reply && (!$store.getters.isSignedIn || $store.state.settings.showReplyTarget)">
<x-sub :note="p.reply"/> <x-sub :note="p.reply"/>
</div> </div>
<div class="renote" v-if="isRenote"> <div class="renote" v-if="isRenote">
@ -16,7 +16,9 @@
<div class="main"> <div class="main">
<header> <header>
<router-link class="name" :to="p.user | userPage" v-user-preview="p.user.id">{{ p.user | userName }}</router-link> <router-link class="name" :to="p.user | userPage" v-user-preview="p.user.id">{{ p.user | userName }}</router-link>
<span class="is-bot" v-if="p.user.host === null && p.user.isBot">bot</span> <span class="is-admin" v-if="p.user.isAdmin">admin</span>
<span class="is-bot" v-if="p.user.isBot">bot</span>
<span class="is-cat" v-if="p.user.isCat">cat</span>
<span class="username"><mk-acct :user="p.user"/></span> <span class="username"><mk-acct :user="p.user"/></span>
<div class="info"> <div class="info">
<span class="app" v-if="p.app">via <b>{{ p.app.name }}</b></span> <span class="app" v-if="p.app">via <b>{{ p.app.name }}</b></span>
@ -41,7 +43,7 @@
<div class="text"> <div class="text">
<span v-if="p.isHidden" style="opacity: 0.5">(この投稿は非公開です)</span> <span v-if="p.isHidden" style="opacity: 0.5">(この投稿は非公開です)</span>
<a class="reply" v-if="p.reply">%fa:reply%</a> <a class="reply" v-if="p.reply">%fa:reply%</a>
<mk-note-html v-if="p.text && !canHideText(p)" :text="p.text" :i="os.i" :class="$style.text"/> <mk-note-html v-if="p.text && !canHideText(p)" :text="p.text" :i="$store.state.i" :class="$style.text"/>
<a class="rp" v-if="p.renote">RP:</a> <a class="rp" v-if="p.renote">RP:</a>
</div> </div>
<div class="media" v-if="p.media.length > 0"> <div class="media" v-if="p.media.length > 0">
@ -164,7 +166,7 @@ export default Vue.extend({
}, },
created() { created() {
if ((this as any).os.isSignedIn) { if (this.$store.getters.isSignedIn) {
this.connection = (this as any).os.stream.getConnection(); this.connection = (this as any).os.stream.getConnection();
this.connectionId = (this as any).os.stream.use(); this.connectionId = (this as any).os.stream.use();
} }
@ -173,13 +175,13 @@ export default Vue.extend({
mounted() { mounted() {
this.capture(true); this.capture(true);
if ((this as any).os.isSignedIn) { if (this.$store.getters.isSignedIn) {
this.connection.on('_connected_', this.onStreamConnected); this.connection.on('_connected_', this.onStreamConnected);
} }
// Draw map // Draw map
if (this.p.geo) { if (this.p.geo) {
const shouldShowMap = (this as any).os.isSignedIn ? (this as any).clientSettings.showMaps : true; const shouldShowMap = this.$store.getters.isSignedIn ? this.$store.state.settings.showMaps : true;
if (shouldShowMap) { if (shouldShowMap) {
(this as any).os.getGoogleMaps().then(maps => { (this as any).os.getGoogleMaps().then(maps => {
const uluru = new maps.LatLng(this.p.geo.coordinates[1], this.p.geo.coordinates[0]); const uluru = new maps.LatLng(this.p.geo.coordinates[1], this.p.geo.coordinates[0]);
@ -199,7 +201,7 @@ export default Vue.extend({
beforeDestroy() { beforeDestroy() {
this.decapture(true); this.decapture(true);
if ((this as any).os.isSignedIn) { if (this.$store.getters.isSignedIn) {
this.connection.off('_connected_', this.onStreamConnected); this.connection.off('_connected_', this.onStreamConnected);
(this as any).os.stream.dispose(this.connectionId); (this as any).os.stream.dispose(this.connectionId);
} }
@ -209,7 +211,7 @@ export default Vue.extend({
canHideText, canHideText,
capture(withHandler = false) { capture(withHandler = false) {
if ((this as any).os.isSignedIn) { if (this.$store.getters.isSignedIn) {
this.connection.send({ this.connection.send({
type: 'capture', type: 'capture',
id: this.p.id id: this.p.id
@ -219,7 +221,7 @@ export default Vue.extend({
}, },
decapture(withHandler = false) { decapture(withHandler = false) {
if ((this as any).os.isSignedIn) { if (this.$store.getters.isSignedIn) {
this.connection.send({ this.connection.send({
type: 'decapture', type: 'decapture',
id: this.p.id id: this.p.id
@ -430,7 +432,9 @@ root(isDark)
&:hover &:hover
text-decoration underline text-decoration underline
> .is-admin
> .is-bot > .is-bot
> .is-cat
margin 0 .5em 0 0 margin 0 .5em 0 0
padding 1px 6px padding 1px 6px
font-size 12px font-size 12px
@ -438,6 +442,10 @@ root(isDark)
border solid 1px isDark ? #57616f : #ddd border solid 1px isDark ? #57616f : #ddd
border-radius 3px border-radius 3px
&.is-admin
border-color isDark ? #d42c41 : #f56a7b
color isDark ? #d42c41 : #f56a7b
> .username > .username
margin 0 .5em 0 0 margin 0 .5em 0 0
overflow hidden overflow hidden

View File

@ -118,24 +118,24 @@ export default Vue.extend({
prepend(note, silent = false) { prepend(note, silent = false) {
//#region 弾く //#region 弾く
const isMyNote = note.userId == (this as any).os.i.id; const isMyNote = note.userId == this.$store.state.i.id;
const isPureRenote = note.renoteId != null && note.text == null && note.mediaIds.length == 0 && note.poll == null; const isPureRenote = note.renoteId != null && note.text == null && note.mediaIds.length == 0 && note.poll == null;
if ((this as any).clientSettings.showMyRenotes === false) { if (this.$store.state.settings.showMyRenotes === false) {
if (isMyNote && isPureRenote) { if (isMyNote && isPureRenote) {
return; return;
} }
} }
if ((this as any).clientSettings.showRenotedMyNotes === false) { if (this.$store.state.settings.showRenotedMyNotes === false) {
if (isPureRenote && (note.renote.userId == (this as any).os.i.id)) { if (isPureRenote && (note.renote.userId == this.$store.state.i.id)) {
return; return;
} }
} }
//#endregion //#endregion
// 投稿が自分のものではないかつ、タブが非表示またはスクロール位置が最上部ではないならタイトルで通知 // 投稿が自分のものではないかつ、タブが非表示またはスクロール位置が最上部ではないならタイトルで通知
if ((document.hidden || !this.isScrollTop()) && note.userId !== (this as any).os.i.id) { if ((document.hidden || !this.isScrollTop()) && note.userId !== this.$store.state.i.id) {
this.unreadCount++; this.unreadCount++;
document.title = `(${this.unreadCount}) ${getNoteSummary(note)}`; document.title = `(${this.unreadCount}) ${getNoteSummary(note)}`;
} }
@ -199,7 +199,7 @@ export default Vue.extend({
this.clearNotification(); this.clearNotification();
} }
if ((this as any).clientSettings.fetchOnScroll !== false) { if (this.$store.state.settings.fetchOnScroll !== false) {
const current = window.scrollY + window.innerHeight; const current = window.scrollY + window.innerHeight;
if (current > document.body.offsetHeight - 8) this.loadMore(); if (current > document.body.offsetHeight - 8) this.loadMore();
} }

View File

@ -49,6 +49,7 @@ import Vue from 'vue';
import * as XDraggable from 'vuedraggable'; import * as XDraggable from 'vuedraggable';
import getKao from '../../../common/scripts/get-kao'; import getKao from '../../../common/scripts/get-kao';
import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue'; import MkVisibilityChooser from '../../../common/views/components/visibility-chooser.vue';
import parse from '../../../../../text/parse';
export default Vue.extend({ export default Vue.extend({
components: { components: {
@ -110,6 +111,22 @@ export default Vue.extend({
this.text = `@${this.reply.user.username}@${this.reply.user.host} `; this.text = `@${this.reply.user.username}@${this.reply.user.host} `;
} }
if (this.reply && this.reply.text != null) {
const ast = parse(this.reply.text);
ast.filter(t => t.type == 'mention').forEach(x => {
const mention = x.host ? `@${x.username}@${x.host}` : `@${x.username}`;
// 自分は除外
if (this.$store.state.i.username == x.username && x.host == null) return;
// 重複は除外
if (this.text.indexOf(`${mention} `) != -1) return;
this.text += `${mention} `;
});
}
this.$nextTick(() => { this.$nextTick(() => {
// 書きかけの投稿を復元 // 書きかけの投稿を復元
const draft = JSON.parse(localStorage.getItem('drafts') || '{}')[this.draftId]; const draft = JSON.parse(localStorage.getItem('drafts') || '{}')[this.draftId];

View File

@ -1,6 +1,6 @@
<template> <template>
<mk-window ref="window" is-modal width="700px" height="550px" @closed="$destroy"> <mk-window ref="window" is-modal width="700px" height="550px" @closed="$destroy">
<span slot="header" :class="$style.header">%fa:cog%設定</span> <span slot="header" :class="$style.header">%fa:cog%%i18n:@settings%</span>
<mk-settings @done="close"/> <mk-settings @done="close"/>
</mk-window> </mk-window>
</template> </template>

View File

@ -2,8 +2,8 @@
<div class="2fa"> <div class="2fa">
<p>%i18n:@intro%<a href="%i18n:@url%" target="_blank">%i18n:@detail%</a></p> <p>%i18n:@intro%<a href="%i18n:@url%" target="_blank">%i18n:@detail%</a></p>
<div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:@caution%</p></div> <div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:@caution%</p></div>
<p v-if="!data && !os.i.twoFactorEnabled"><button @click="register" class="ui primary">%i18n:@register%</button></p> <p v-if="!data && !$store.state.i.twoFactorEnabled"><button @click="register" class="ui primary">%i18n:@register%</button></p>
<template v-if="os.i.twoFactorEnabled"> <template v-if="$store.state.i.twoFactorEnabled">
<p>%i18n:@already-registered%</p> <p>%i18n:@already-registered%</p>
<button @click="unregister" class="ui">%i18n:@unregister%</button> <button @click="unregister" class="ui">%i18n:@unregister%</button>
</template> </template>
@ -54,7 +54,7 @@ export default Vue.extend({
password: password password: password
}).then(() => { }).then(() => {
(this as any).apis.notify('%i18n:@unregistered%'); (this as any).apis.notify('%i18n:@unregistered%');
(this as any).os.i.twoFactorEnabled = false; this.$store.state.i.twoFactorEnabled = false;
}); });
}); });
}, },
@ -64,7 +64,7 @@ export default Vue.extend({
token: this.token token: this.token
}).then(() => { }).then(() => {
(this as any).apis.notify('%i18n:@success%'); (this as any).apis.notify('%i18n:@success%');
(this as any).os.i.twoFactorEnabled = true; this.$store.state.i.twoFactorEnabled = true;
}).catch(() => { }).catch(() => {
(this as any).apis.notify('%i18n:@failed%'); (this as any).apis.notify('%i18n:@failed%');
}); });

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="root api"> <div class="root api">
<p>%i18n:@token% <code>{{ os.i.token }}</code></p> <p>%i18n:@token% <code>{{ $store.state.i.token }}</code></p>
<p>%i18n:@intro%</p> <p>%i18n:@intro%</p>
<div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:@caution%</p></div> <div class="ui info warn"><p>%fa:exclamation-triangle%%i18n:@caution%</p></div>
<p>%i18n:@regeneration-of-token%</p> <p>%i18n:@regeneration-of-token%</p>

View File

@ -2,7 +2,7 @@
<div class="profile"> <div class="profile">
<label class="avatar ui from group"> <label class="avatar ui from group">
<p>%i18n:@avatar%</p> <p>%i18n:@avatar%</p>
<img class="avatar" :src="`${os.i.avatarUrl}?thumbnail&size=64`" alt="avatar"/> <img class="avatar" :src="`${$store.state.i.avatarUrl}?thumbnail&size=64`" alt="avatar"/>
<button class="ui" @click="updateAvatar">%i18n:@choice-avatar%</button> <button class="ui" @click="updateAvatar">%i18n:@choice-avatar%</button>
</label> </label>
<label class="ui from group"> <label class="ui from group">
@ -24,7 +24,8 @@
<button class="ui primary" @click="save">%i18n:@save%</button> <button class="ui primary" @click="save">%i18n:@save%</button>
<section> <section>
<h2>その他</h2> <h2>その他</h2>
<mk-switch v-model="os.i.isBot" @change="onChangeIsBot" text="このアカウントはbotです"/> <mk-switch v-model="$store.state.i.isBot" @change="onChangeIsBot" text="%i18n:@is-bot%"/>
<mk-switch v-model="$store.state.i.isCat" @change="onChangeIsCat" text="%i18n:@is-cat%"/>
</section> </section>
</div> </div>
</template> </template>
@ -42,10 +43,10 @@ export default Vue.extend({
}; };
}, },
created() { created() {
this.name = (this as any).os.i.name || ''; this.name = this.$store.state.i.name || '';
this.location = (this as any).os.i.profile.location; this.location = this.$store.state.i.profile.location;
this.description = (this as any).os.i.description; this.description = this.$store.state.i.description;
this.birthday = (this as any).os.i.profile.birthday; this.birthday = this.$store.state.i.profile.birthday;
}, },
methods: { methods: {
updateAvatar() { updateAvatar() {
@ -63,7 +64,12 @@ export default Vue.extend({
}, },
onChangeIsBot() { onChangeIsBot() {
(this as any).api('i/update', { (this as any).api('i/update', {
isBot: (this as any).os.i.isBot isBot: this.$store.state.i.isBot
});
},
onChangeIsCat() {
(this as any).api('i/update', {
isCat: this.$store.state.i.isCat
}); });
} }
} }

View File

@ -20,7 +20,7 @@
<section class="web" v-show="page == 'web'"> <section class="web" v-show="page == 'web'">
<h1>%i18n:@behaviour%</h1> <h1>%i18n:@behaviour%</h1>
<mk-switch v-model="clientSettings.fetchOnScroll" @change="onChangeFetchOnScroll" text="%i18n:@fetch-on-scroll%"> <mk-switch v-model="$store.state.settings.fetchOnScroll" @change="onChangeFetchOnScroll" text="%i18n:@fetch-on-scroll%">
<span>%i18n:@fetch-on-scroll-desc%</span> <span>%i18n:@fetch-on-scroll-desc%</span>
</mk-switch> </mk-switch>
<mk-switch v-model="autoPopout" text="%i18n:@auto-popout%"> <mk-switch v-model="autoPopout" text="%i18n:@auto-popout%">
@ -41,14 +41,14 @@
</div> </div>
<div class="div"> <div class="div">
<mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/> <mk-switch v-model="darkmode" text="%i18n:@dark-mode%"/>
<mk-switch v-model="clientSettings.circleIcons" @change="onChangeCircleIcons" text="%i18n:@circle-icons%"/> <mk-switch v-model="$store.state.settings.circleIcons" @change="onChangeCircleIcons" text="%i18n:@circle-icons%"/>
<mk-switch v-model="clientSettings.gradientWindowHeader" @change="onChangeGradientWindowHeader" text="%i18n:@gradient-window-header%"/> <mk-switch v-model="$store.state.settings.gradientWindowHeader" @change="onChangeGradientWindowHeader" text="%i18n:@gradient-window-header%"/>
</div> </div>
<mk-switch v-model="clientSettings.showPostFormOnTopOfTl" @change="onChangeShowPostFormOnTopOfTl" text="%i18n:@post-form-on-timeline%"/> <mk-switch v-model="$store.state.settings.showPostFormOnTopOfTl" @change="onChangeShowPostFormOnTopOfTl" text="%i18n:@post-form-on-timeline%"/>
<mk-switch v-model="clientSettings.showReplyTarget" @change="onChangeShowReplyTarget" text="%i18n:@show-reply-target%"/> <mk-switch v-model="$store.state.settings.showReplyTarget" @change="onChangeShowReplyTarget" text="%i18n:@show-reply-target%"/>
<mk-switch v-model="clientSettings.showMyRenotes" @change="onChangeShowMyRenotes" text="%i18n:@show-my-renotes%"/> <mk-switch v-model="$store.state.settings.showMyRenotes" @change="onChangeShowMyRenotes" text="%i18n:@show-my-renotes%"/>
<mk-switch v-model="clientSettings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes" text="%i18n:@show-renoted-my-notes%"/> <mk-switch v-model="$store.state.settings.showRenotedMyNotes" @change="onChangeShowRenotedMyNotes" text="%i18n:@show-renoted-my-notes%"/>
<mk-switch v-model="clientSettings.showMaps" @change="onChangeShowMaps" text="%i18n:@show-maps%"> <mk-switch v-model="$store.state.settings.showMaps" @change="onChangeShowMaps" text="%i18n:@show-maps%">
<span>%i18n:@show-maps-desc%</span> <span>%i18n:@show-maps-desc%</span>
</mk-switch> </mk-switch>
</section> </section>
@ -72,7 +72,7 @@
<section class="web" v-show="page == 'web'"> <section class="web" v-show="page == 'web'">
<h1>%i18n:@mobile%</h1> <h1>%i18n:@mobile%</h1>
<mk-switch v-model="clientSettings.disableViaMobile" @change="onChangeDisableViaMobile" text="%i18n:@disable-via-mobile%"/> <mk-switch v-model="$store.state.settings.disableViaMobile" @change="onChangeDisableViaMobile" text="%i18n:@disable-via-mobile%"/>
</section> </section>
<section class="web" v-show="page == 'web'"> <section class="web" v-show="page == 'web'">
@ -100,7 +100,7 @@
<section class="notification" v-show="page == 'notification'"> <section class="notification" v-show="page == 'notification'">
<h1>%i18n:@notification%</h1> <h1>%i18n:@notification%</h1>
<mk-switch v-model="os.i.settings.autoWatch" @change="onChangeAutoWatch" text="%i18n:@auto-watch%"> <mk-switch v-model="$store.state.i.settings.autoWatch" @change="onChangeAutoWatch" text="%i18n:@auto-watch%">
<span>%i18n:@auto-watch-desc%</span> <span>%i18n:@auto-watch-desc%</span>
</mk-switch> </mk-switch>
</section> </section>
@ -227,8 +227,7 @@ export default Vue.extend({
version, version,
langs, langs,
latestVersion: undefined, latestVersion: undefined,
checkingForUpdate: false, checkingForUpdate: false
darkmode: localStorage.getItem('darkmode') == 'true'
}; };
}, },
computed: { computed: {
@ -246,6 +245,11 @@ export default Vue.extend({
set(value) { this.$store.commit('device/set', { key: 'autoPopout', value }); } set(value) { this.$store.commit('device/set', { key: 'autoPopout', value }); }
}, },
darkmode: {
get() { return this.$store.state.device.darkmode; },
set(value) { this.$store.commit('device/set', { key: 'darkmode', value }); }
},
enableSounds: { enableSounds: {
get() { return this.$store.state.device.enableSounds; }, get() { return this.$store.state.device.enableSounds; },
set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); } set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); }
@ -276,11 +280,6 @@ export default Vue.extend({
set(value) { this.$store.commit('device/set', { key: 'enableExperimentalFeatures', value }); } set(value) { this.$store.commit('device/set', { key: 'enableExperimentalFeatures', value }); }
} }
}, },
watch: {
darkmode() {
(this as any)._updateDarkmode_(this.darkmode);
}
},
created() { created() {
(this as any).os.getMeta().then(meta => { (this as any).os.getMeta().then(meta => {
this.meta = meta; this.meta = meta;

View File

@ -3,7 +3,7 @@
<div class="body"> <div class="body">
<span v-if="note.isHidden" style="opacity: 0.5">%i18n:@hidden%</span> <span v-if="note.isHidden" style="opacity: 0.5">%i18n:@hidden%</span>
<a class="reply" v-if="note.replyId">%fa:reply%</a> <a class="reply" v-if="note.replyId">%fa:reply%</a>
<mk-note-html :text="note.text" :i="os.i"/> <mk-note-html :text="note.text" :i="$store.state.i"/>
<a class="rp" v-if="note.renoteId" :href="`/note:${note.renoteId}`">RP: ...</a> <a class="rp" v-if="note.renoteId" :href="`/note:${note.renoteId}`">RP: ...</a>
</div> </div>
<details v-if="note.media.length > 0"> <details v-if="note.media.length > 0">

View File

@ -34,14 +34,13 @@ export default Vue.extend({
existMore: false, existMore: false,
connection: null, connection: null,
connectionId: null, connectionId: null,
unreadCount: 0,
date: null date: null
}; };
}, },
computed: { computed: {
alone(): boolean { alone(): boolean {
return (this as any).os.i.followingCount == 0; return this.$store.state.i.followingCount == 0;
}, },
stream(): any { stream(): any {
@ -76,7 +75,6 @@ export default Vue.extend({
} }
document.addEventListener('keydown', this.onKeydown); document.addEventListener('keydown', this.onKeydown);
document.addEventListener('visibilitychange', this.onVisibilitychange, false);
this.fetch(); this.fetch();
}, },
@ -90,7 +88,6 @@ export default Vue.extend({
this.stream.dispose(this.connectionId); this.stream.dispose(this.connectionId);
document.removeEventListener('keydown', this.onKeydown); document.removeEventListener('keydown', this.onKeydown);
document.removeEventListener('visibilitychange', this.onVisibilitychange);
}, },
methods: { methods: {
@ -101,8 +98,8 @@ export default Vue.extend({
(this as any).api(this.endpoint, { (this as any).api(this.endpoint, {
limit: fetchLimit + 1, limit: fetchLimit + 1,
untilDate: this.date ? this.date.getTime() : undefined, untilDate: this.date ? this.date.getTime() : undefined,
includeMyRenotes: (this as any).clientSettings.showMyRenotes, includeMyRenotes: this.$store.state.settings.showMyRenotes,
includeRenotedMyNotes: (this as any).clientSettings.showRenotedMyNotes includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
}).then(notes => { }).then(notes => {
if (notes.length == fetchLimit + 1) { if (notes.length == fetchLimit + 1) {
notes.pop(); notes.pop();
@ -120,12 +117,14 @@ export default Vue.extend({
this.moreFetching = true; this.moreFetching = true;
(this as any).api(this.endpoint, { const promise = (this as any).api(this.endpoint, {
limit: fetchLimit + 1, limit: fetchLimit + 1,
untilId: (this.$refs.timeline as any).tail().id, untilId: (this.$refs.timeline as any).tail().id,
includeMyRenotes: (this as any).clientSettings.showMyRenotes, includeMyRenotes: this.$store.state.settings.showMyRenotes,
includeRenotedMyNotes: (this as any).clientSettings.showRenotedMyNotes includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
}).then(notes => { });
promise.then(notes => {
if (notes.length == fetchLimit + 1) { if (notes.length == fetchLimit + 1) {
notes.pop(); notes.pop();
} else { } else {
@ -134,14 +133,11 @@ export default Vue.extend({
notes.forEach(n => (this.$refs.timeline as any).append(n)); notes.forEach(n => (this.$refs.timeline as any).append(n));
this.moreFetching = false; this.moreFetching = false;
}); });
return promise;
}, },
onNote(note) { onNote(note) {
if (document.hidden && note.userId !== (this as any).os.i.id) {
this.unreadCount++;
document.title = `(${this.unreadCount}) ${getNoteSummary(note)}`;
}
// Prepend a note // Prepend a note
(this.$refs.timeline as any).prepend(note); (this.$refs.timeline as any).prepend(note);
}, },
@ -159,13 +155,6 @@ export default Vue.extend({
this.fetch(); this.fetch();
}, },
onVisibilitychange() {
if (!document.hidden) {
this.unreadCount = 0;
document.title = 'Misskey';
}
},
onKeydown(e) { onKeydown(e) {
if (e.target.tagName != 'INPUT' && e.target.tagName != 'TEXTAREA') { if (e.target.tagName != 'INPUT' && e.target.tagName != 'TEXTAREA') {
if (e.which == 84) { // t if (e.which == 84) { // t

View File

@ -31,8 +31,23 @@ export default Vue.extend({
}; };
}, },
watch: {
src() {
this.saveSrc();
},
list() {
this.saveSrc();
}
},
created() { created() {
if ((this as any).os.i.followingCount == 0) { if (this.$store.state.device.tl) {
this.src = this.$store.state.device.tl.src;
if (this.src == 'list') {
this.list = this.$store.state.device.tl.arg;
}
} else if (this.$store.state.i.followingCount == 0) {
this.src = 'local'; this.src = 'local';
} }
}, },
@ -44,6 +59,13 @@ export default Vue.extend({
}, },
methods: { methods: {
saveSrc() {
this.$store.commit('device/setTl', {
src: this.src,
arg: this.list
});
},
warp(date) { warp(date) {
(this.$refs.tl as any).warp(date); (this.$refs.tl as any).warp(date);
}, },

View File

@ -1,14 +1,14 @@
<template> <template>
<div class="account"> <div class="account">
<button class="header" :data-active="isOpen" @click="toggle"> <button class="header" :data-active="isOpen" @click="toggle">
<span class="username">{{ os.i.username }}<template v-if="!isOpen">%fa:angle-down%</template><template v-if="isOpen">%fa:angle-up%</template></span> <span class="username">{{ $store.state.i.username }}<template v-if="!isOpen">%fa:angle-down%</template><template v-if="isOpen">%fa:angle-up%</template></span>
<mk-avatar class="avatar" :user="os.i"/> <mk-avatar class="avatar" :user="$store.state.i"/>
</button> </button>
<transition name="zoom-in-top"> <transition name="zoom-in-top">
<div class="menu" v-if="isOpen"> <div class="menu" v-if="isOpen">
<ul> <ul>
<li> <li>
<router-link :to="`/@${ os.i.username }`">%fa:user%<span>%i18n:@profile%</span>%fa:angle-right%</router-link> <router-link :to="`/@${ $store.state.i.username }`">%fa:user%<span>%i18n:@profile%</span>%fa:angle-right%</router-link>
</li> </li>
<li @click="drive"> <li @click="drive">
<p>%fa:cloud%<span>%i18n:@drive%</span>%fa:angle-right%</p> <p>%fa:cloud%<span>%i18n:@drive%</span>%fa:angle-right%</p>
@ -35,7 +35,7 @@
</ul> </ul>
<ul> <ul>
<li @click="dark"> <li @click="dark">
<p><span>%i18n:@dark%</span><template v-if="_darkmode_">%fa:moon%</template><template v-else>%fa:R moon%</template></p> <p><span>%i18n:@dark%</span><template v-if="$store.state.device.darkmode">%fa:moon%</template><template v-else>%fa:R moon%</template></p>
</li> </li>
</ul> </ul>
</div> </div>
@ -99,7 +99,10 @@ export default Vue.extend({
(this as any).os.signout(); (this as any).os.signout();
}, },
dark() { dark() {
(this as any)._updateDarkmode_(!(this as any)._darkmode_); this.$store.commit('device/set', {
key: 'darkmode',
value: !this.$store.state.device.darkmode
});
} }
} }
}); });

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="nav"> <div class="nav">
<ul> <ul>
<template v-if="os.isSignedIn"> <template v-if="$store.getters.isSignedIn">
<li class="home" :class="{ active: $route.name == 'index' }"> <li class="home" :class="{ active: $route.name == 'index' }">
<router-link to="/"> <router-link to="/">
%fa:home% %fa:home%
@ -42,7 +42,7 @@ export default Vue.extend({
}; };
}, },
mounted() { mounted() {
if ((this as any).os.isSignedIn) { if (this.$store.getters.isSignedIn) {
this.connection = (this as any).os.stream.getConnection(); this.connection = (this as any).os.stream.getConnection();
this.connectionId = (this as any).os.stream.use(); this.connectionId = (this as any).os.stream.use();
@ -60,7 +60,7 @@ export default Vue.extend({
} }
}, },
beforeDestroy() { beforeDestroy() {
if ((this as any).os.isSignedIn) { if (this.$store.getters.isSignedIn) {
this.connection.off('read_all_messaging_messages', this.onReadAllMessagingMessages); this.connection.off('read_all_messaging_messages', this.onReadAllMessagingMessages);
this.connection.off('unread_messaging_message', this.onUnreadMessagingMessage); this.connection.off('unread_messaging_message', this.onUnreadMessagingMessage);
this.connection.off('othello_invited', this.onOthelloInvited); this.connection.off('othello_invited', this.onOthelloInvited);

View File

@ -23,7 +23,7 @@ export default Vue.extend({
}; };
}, },
mounted() { mounted() {
if ((this as any).os.isSignedIn) { if (this.$store.getters.isSignedIn) {
this.connection = (this as any).os.stream.getConnection(); this.connection = (this as any).os.stream.getConnection();
this.connectionId = (this as any).os.stream.use(); this.connectionId = (this as any).os.stream.use();
@ -39,7 +39,7 @@ export default Vue.extend({
} }
}, },
beforeDestroy() { beforeDestroy() {
if ((this as any).os.isSignedIn) { if (this.$store.getters.isSignedIn) {
this.connection.off('read_all_notifications', this.onReadAllNotifications); this.connection.off('read_all_notifications', this.onReadAllNotifications);
this.connection.off('unread_notification', this.onUnreadNotification); this.connection.off('unread_notification', this.onUnreadNotification);
(this as any).os.stream.dispose(this.connectionId); (this as any).os.stream.dispose(this.connectionId);

View File

@ -4,16 +4,16 @@
<div class="main" ref="main"> <div class="main" ref="main">
<div class="backdrop"></div> <div class="backdrop"></div>
<div class="main"> <div class="main">
<p ref="welcomeback" v-if="os.isSignedIn">おかえりなさい<b>{{ os.i | userName }}</b>さん</p> <p ref="welcomeback" v-if="$store.getters.isSignedIn">おかえりなさい<b>{{ $store.state.i | userName }}</b>さん</p>
<div class="container" ref="mainContainer"> <div class="container" ref="mainContainer">
<div class="left"> <div class="left">
<x-nav/> <x-nav/>
</div> </div>
<div class="right"> <div class="right">
<x-search/> <x-search/>
<x-account v-if="os.isSignedIn"/> <x-account v-if="$store.getters.isSignedIn"/>
<x-notifications v-if="os.isSignedIn"/> <x-notifications v-if="$store.getters.isSignedIn"/>
<x-post v-if="os.isSignedIn"/> <x-post v-if="$store.getters.isSignedIn"/>
<x-clock/> <x-clock/>
</div> </div>
</div> </div>
@ -45,11 +45,11 @@ export default Vue.extend({
mounted() { mounted() {
this.$store.commit('setUiHeaderHeight', 48); this.$store.commit('setUiHeaderHeight', 48);
if ((this as any).os.isSignedIn) { if (this.$store.getters.isSignedIn) {
const ago = (new Date().getTime() - new Date((this as any).os.i.lastUsedAt).getTime()) / 1000; const ago = (new Date().getTime() - new Date(this.$store.state.i.lastUsedAt).getTime()) / 1000;
const isHisasiburi = ago >= 3600; const isHisasiburi = ago >= 3600;
(this as any).os.i.lastUsedAt = new Date(); this.$store.state.i.lastUsedAt = new Date();
(this as any).os.bakeMe();
if (isHisasiburi) { if (isHisasiburi) {
(this.$refs.welcomeback as any).style.display = 'block'; (this.$refs.welcomeback as any).style.display = 'block';
(this.$refs.main as any).style.overflow = 'hidden'; (this.$refs.main as any).style.overflow = 'hidden';

View File

@ -4,7 +4,7 @@
<div class="content"> <div class="content">
<slot></slot> <slot></slot>
</div> </div>
<mk-stream-indicator v-if="os.isSignedIn"/> <mk-stream-indicator v-if="$store.getters.isSignedIn"/>
</div> </div>
</template> </template>

View File

@ -32,7 +32,7 @@ export default Vue.extend({
methods: { methods: {
init() { init() {
if (this.connection) this.connection.close(); if (this.connection) this.connection.close();
this.connection = new UserListStream((this as any).os, (this as any).os.i, this.list.id); this.connection = new UserListStream((this as any).os, this.$store.state.i, this.list.id);
this.connection.on('note', this.onNote); this.connection.on('note', this.onNote);
this.connection.on('userAdded', this.onUserAdded); this.connection.on('userAdded', this.onUserAdded);
this.connection.on('userRemoved', this.onUserRemoved); this.connection.on('userRemoved', this.onUserRemoved);
@ -46,8 +46,8 @@ export default Vue.extend({
(this as any).api('notes/user-list-timeline', { (this as any).api('notes/user-list-timeline', {
listId: this.list.id, listId: this.list.id,
limit: fetchLimit + 1, limit: fetchLimit + 1,
includeMyRenotes: (this as any).clientSettings.showMyRenotes, includeMyRenotes: this.$store.state.settings.showMyRenotes,
includeRenotedMyNotes: (this as any).clientSettings.showRenotedMyNotes includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
}).then(notes => { }).then(notes => {
if (notes.length == fetchLimit + 1) { if (notes.length == fetchLimit + 1) {
notes.pop(); notes.pop();
@ -62,13 +62,15 @@ export default Vue.extend({
more() { more() {
this.moreFetching = true; this.moreFetching = true;
(this as any).api('notes/user-list-timeline', { const promise = (this as any).api('notes/user-list-timeline', {
listId: this.list.id, listId: this.list.id,
limit: fetchLimit + 1, limit: fetchLimit + 1,
untilId: (this.$refs.timeline as any).tail().id, untilId: (this.$refs.timeline as any).tail().id,
includeMyRenotes: (this as any).clientSettings.showMyRenotes, includeMyRenotes: this.$store.state.settings.showMyRenotes,
includeRenotedMyNotes: (this as any).clientSettings.showRenotedMyNotes includeRenotedMyNotes: this.$store.state.settings.showRenotedMyNotes
}).then(notes => { });
promise.then(notes => {
if (notes.length == fetchLimit + 1) { if (notes.length == fetchLimit + 1) {
notes.pop(); notes.pop();
} else { } else {
@ -77,6 +79,8 @@ export default Vue.extend({
notes.forEach(n => (this.$refs.timeline as any).append(n)); notes.forEach(n => (this.$refs.timeline as any).append(n));
this.moreFetching = false; this.moreFetching = false;
}); });
return promise;
}, },
onNote(note) { onNote(note) {
// Prepend a note // Prepend a note

View File

@ -2,7 +2,7 @@
<mk-window ref="window" is-modal width="450px" height="500px" @closed="$destroy"> <mk-window ref="window" is-modal width="450px" height="500px" @closed="$destroy">
<span slot="header">%fa:list% リスト</span> <span slot="header">%fa:list% リスト</span>
<div data-id="6e4caea3-d8f9-4ab7-96de-ab67fe8d5c82" :data-darkmode="_darkmode_"> <div data-id="6e4caea3-d8f9-4ab7-96de-ab67fe8d5c82" :data-darkmode="$store.state.device.darkmode">
<button class="ui" @click="add">%i18n:@create-list%</button> <button class="ui" @click="add">%i18n:@create-list%</button>
<a v-for="list in lists" :key="list.id" @click="choice(list)">{{ list.title }}</a> <a v-for="list in lists" :key="list.id" @click="choice(list)">{{ list.title }}</a>
</div> </div>

View File

@ -19,7 +19,7 @@
<p>%i18n:@followers%</p><a>{{ u.followersCount }}</a> <p>%i18n:@followers%</p><a>{{ u.followersCount }}</a>
</div> </div>
</div> </div>
<mk-follow-button v-if="os.isSignedIn && user.id != os.i.id" :user="u"/> <mk-follow-button v-if="$store.getters.isSignedIn && user.id != $store.state.i.id" :user="u"/>
</template> </template>
</div> </div>
</template> </template>

View File

@ -3,7 +3,7 @@
<nav> <nav>
<div> <div>
<span :data-active="mode == 'all'" @click="mode = 'all'">%i18n:@all%<span>{{ count }}</span></span> <span :data-active="mode == 'all'" @click="mode = 'all'">%i18n:@all%<span>{{ count }}</span></span>
<span v-if="os.isSignedIn && youKnowCount" :data-active="mode == 'iknow'" @click="mode = 'iknow'">%i18n:@iknow%<span>{{ youKnowCount }}</span></span> <span v-if="$store.getters.isSignedIn && youKnowCount" :data-active="mode == 'iknow'" @click="mode = 'iknow'">%i18n:@iknow%<span>{{ youKnowCount }}</span></span>
</div> </div>
</nav> </nav>
<div class="users" v-if="!fetching && users.length != 0"> <div class="users" v-if="!fetching && users.length != 0">

View File

@ -23,9 +23,9 @@ export default Vue.extend({
}, },
computed: { computed: {
withGradient(): boolean { withGradient(): boolean {
return (this as any).os.isSignedIn return this.$store.getters.isSignedIn
? (this as any).clientSettings.gradientWindowHeader != null ? this.$store.state.settings.gradientWindowHeader != null
? (this as any).clientSettings.gradientWindowHeader ? this.$store.state.settings.gradientWindowHeader
: false : false
: false; : false;
} }

View File

@ -4,7 +4,7 @@
<div class="main" ref="main" tabindex="-1" :data-is-modal="isModal" @mousedown="onBodyMousedown" @keydown="onKeydown" :style="{ width, height }"> <div class="main" ref="main" tabindex="-1" :data-is-modal="isModal" @mousedown="onBodyMousedown" @keydown="onKeydown" :style="{ width, height }">
<div class="body"> <div class="body">
<header ref="header" <header ref="header"
:class="{ withGradient: clientSettings.gradientWindowHeader }" :class="{ withGradient: $store.state.settings.gradientWindowHeader }"
@contextmenu.prevent="() => {}" @mousedown.prevent="onHeaderMousedown" @contextmenu.prevent="() => {}" @mousedown.prevent="onHeaderMousedown"
> >
<h1><slot name="header"></slot></h1> <h1><slot name="header"></slot></h1>
@ -488,7 +488,10 @@ root(isDark)
&:focus &:focus
&:not([data-is-modal]) &:not([data-is-modal])
> .body > .body
box-shadow 0 0 0px 1px rgba($theme-color, 0.5), 0 2px 6px 0 rgba(#000, 0.2) if isDark
box-shadow 0 0 0px 1px rgba($theme-color, 0.5), 0 2px 12px 0 rgba(#000, 0.5)
else
box-shadow 0 0 0px 1px rgba($theme-color, 0.5), 0 2px 6px 0 rgba(#000, 0.2)
> .handle > .handle
$size = 8px $size = 8px
@ -556,7 +559,11 @@ root(isDark)
overflow hidden overflow hidden
background isDark ? #282C37 : #fff background isDark ? #282C37 : #fff
border-radius 6px border-radius 6px
box-shadow 0 2px 6px 0 rgba(#000, 0.2)
if isDark
box-shadow 0 2px 12px 0 rgba(#000, 0.5)
else
box-shadow 0 2px 6px 0 rgba(#000, 0.2)
> header > header
$header-height = 40px $header-height = 40px

View File

@ -7,7 +7,6 @@
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from 'vue';
import Progress from '../../../common/scripts/loading'; import Progress from '../../../common/scripts/loading';
import getNoteSummary from '../../../../../renderers/get-note-summary';
export default Vue.extend({ export default Vue.extend({
props: { props: {
@ -16,46 +15,14 @@ export default Vue.extend({
default: 'timeline' default: 'timeline'
} }
}, },
data() {
return {
connection: null,
connectionId: null,
unreadCount: 0
};
},
mounted() { mounted() {
document.title = 'Misskey'; document.title = 'Misskey';
this.connection = (this as any).os.stream.getConnection();
this.connectionId = (this as any).os.stream.use();
this.connection.on('note', this.onStreamNote);
document.addEventListener('visibilitychange', this.onVisibilitychange, false);
Progress.start(); Progress.start();
}, },
beforeDestroy() {
this.connection.off('note', this.onStreamNote);
(this as any).os.stream.dispose(this.connectionId);
document.removeEventListener('visibilitychange', this.onVisibilitychange);
},
methods: { methods: {
loaded() { loaded() {
Progress.done(); Progress.done();
},
onStreamNote(note) {
if (document.hidden && note.userId != (this as any).os.i.id) {
this.unreadCount++;
document.title = `(${this.unreadCount}) ${getNoteSummary(note)}`;
}
},
onVisibilitychange() {
if (!document.hidden) {
this.unreadCount = 0;
document.title = 'Misskey';
}
} }
} }
}); });

View File

@ -1,5 +1,5 @@
<template> <template>
<component :is="os.isSignedIn ? 'home' : 'welcome'"></component> <component :is="$store.getters.isSignedIn ? 'home' : 'welcome'"></component>
</template> </template>
<script lang="ts"> <script lang="ts">

View File

@ -21,10 +21,21 @@ export default Vue.extend({
$route: 'fetch' $route: 'fetch'
}, },
created() { created() {
const applyBg = v =>
document.documentElement.style.setProperty('background', v ? '#191b22' : '#fff', 'important');
applyBg(this.$store.state.device.darkmode);
this.unwatchDarkmode = this.$store.watch(s => {
return s.device.darkmode;
}, applyBg);
this.fetch(); this.fetch();
}, },
mounted() { beforeDestroy() {
document.documentElement.style.background = '#fff'; document.documentElement.style.removeProperty('background');
document.documentElement.style.removeProperty('background-color'); // for safari's bug
this.unwatchDarkmode();
}, },
methods: { methods: {
fetch() { fetch() {
@ -50,6 +61,5 @@ export default Vue.extend({
flex 1 flex 1
flex-direction column flex-direction column
min-height 100% min-height 100%
background #fff
</style> </style>

View File

@ -63,7 +63,7 @@ export default Vue.extend({
}, },
onBannerClick() { onBannerClick() {
if (!(this as any).os.isSignedIn || (this as any).os.i.id != this.user.id) return; if (!this.$store.getters.isSignedIn || this.$store.state.i.id != this.user.id) return;
(this as any).apis.updateBanner().then(i => { (this as any).apis.updateBanner().then(i => {
this.user.bannerUrl = i.bannerUrl; this.user.bannerUrl = i.bannerUrl;

View File

@ -4,7 +4,7 @@
<div ref="left"> <div ref="left">
<x-profile :user="user"/> <x-profile :user="user"/>
<x-photos :user="user"/> <x-photos :user="user"/>
<x-followers-you-know v-if="os.isSignedIn && os.i.id != user.id" :user="user"/> <x-followers-you-know v-if="$store.getters.isSignedIn && $store.state.i.id != user.id" :user="user"/>
<p v-if="user.host === null">%i18n:@last-used-at%: <b><mk-time :time="user.lastUsedAt"/></b></p> <p v-if="user.host === null">%i18n:@last-used-at%: <b><mk-time :time="user.lastUsedAt"/></b></p>
</div> </div>
</div> </div>

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="profile"> <div class="profile">
<div class="friend-form" v-if="os.isSignedIn && os.i.id != user.id"> <div class="friend-form" v-if="$store.getters.isSignedIn && $store.state.i.id != user.id">
<mk-follow-button :user="user" size="big"/> <mk-follow-button :user="user" size="big"/>
<p class="followed" v-if="user.isFollowed">%i18n:@follows-you%</p> <p class="followed" v-if="user.isFollowed">%i18n:@follows-you%</p>
<p class="stalk" v-if="user.isFollowing"> <p class="stalk" v-if="user.isFollowing">

View File

@ -21,6 +21,7 @@ const fetchLimit = 10;
export default Vue.extend({ export default Vue.extend({
props: ['user'], props: ['user'],
data() { data() {
return { return {
fetching: true, fetching: true,
@ -31,19 +32,23 @@ export default Vue.extend({
date: null date: null
}; };
}, },
watch: { watch: {
mode() { mode() {
this.fetch(); this.fetch();
} }
}, },
mounted() { mounted() {
document.addEventListener('keydown', this.onDocumentKeydown); document.addEventListener('keydown', this.onDocumentKeydown);
this.fetch(() => this.$emit('loaded')); this.fetch(() => this.$emit('loaded'));
}, },
beforeDestroy() { beforeDestroy() {
document.removeEventListener('keydown', this.onDocumentKeydown); document.removeEventListener('keydown', this.onDocumentKeydown);
}, },
methods: { methods: {
onDocumentKeydown(e) { onDocumentKeydown(e) {
if (e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA') { if (e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA') {
@ -52,6 +57,7 @@ export default Vue.extend({
} }
} }
}, },
fetch(cb?) { fetch(cb?) {
this.fetching = true; this.fetching = true;
(this.$refs.timeline as any).init(() => new Promise((res, rej) => { (this.$refs.timeline as any).init(() => new Promise((res, rej) => {
@ -72,15 +78,19 @@ export default Vue.extend({
}, rej); }, rej);
})); }));
}, },
more() { more() {
this.moreFetching = true; this.moreFetching = true;
(this as any).api('users/notes', {
const promise = (this as any).api('users/notes', {
userId: this.user.id, userId: this.user.id,
limit: fetchLimit + 1, limit: fetchLimit + 1,
includeReplies: this.mode == 'with-replies', includeReplies: this.mode == 'with-replies',
withMedia: this.mode == 'with-media', withMedia: this.mode == 'with-media',
untilId: (this.$refs.timeline as any).tail().id untilId: (this.$refs.timeline as any).tail().id
}).then(notes => { });
promise.then(notes => {
if (notes.length == fetchLimit + 1) { if (notes.length == fetchLimit + 1) {
notes.pop(); notes.pop();
} else { } else {
@ -89,7 +99,10 @@ export default Vue.extend({
notes.forEach(n => (this.$refs.timeline as any).append(n)); notes.forEach(n => (this.$refs.timeline as any).append(n));
this.moreFetching = false; this.moreFetching = false;
}); });
return promise;
}, },
warp(date) { warp(date) {
this.date = date; this.date = date;
this.fetch(); this.fetch();

View File

@ -1,23 +1,16 @@
<template> <template>
<div class="mk-welcome"> <div class="mk-welcome">
<button @click="dark">
<template v-if="$store.state.device.darkmode">%fa:moon%</template>
<template v-else>%fa:R moon%</template>
</button>
<main> <main>
<div class="top"> <img :src="$store.state.device.darkmode ? 'assets/title-dark.svg' : 'assets/title.svg'" alt="Misskey">
<div> <p><button class="signup" @click="signup">%i18n:@signup-button%</button><button class="signin" @click="signin">%i18n:@signin-button%</button></p>
<div>
<h1>Share<br><span ref="share">Everything!</span><span class="cursor">_</span></h1> <div class="tl">
<p>ようこそ <b>Misskey</b>はTwitter風ミニブログSNSです思ったことや皆と共有したいことを投稿しましょうタイムラインを見れば皆の関心事をすぐにチェックすることもできます<a :href="aboutUrl">詳しく...</a></p> <header>%fa:comments R% %i18n:@timeline%<div><span></span><span></span><span></span></div></header>
<p><button class="signup" @click="signup">はじめる</button><button class="signin" @click="signin">ログイン</button></p> <mk-welcome-timeline/>
<div class="users">
<mk-avatar class="avatar" v-for="user in users" :key="user.id" :user="user"/>
</div>
</div>
<div>
<div>
<header>%fa:comments R% タイムライン<div><span></span><span></span><span></span></div></header>
<mk-welcome-timeline/>
</div>
</div>
</div>
</div> </div>
</main> </main>
<mk-forkit/> <mk-forkit/>
@ -28,11 +21,11 @@
</div> </div>
</footer> </footer>
<modal name="signup" width="500px" height="auto" scrollable> <modal name="signup" width="500px" height="auto" scrollable>
<header :class="$style.signupFormHeader">新規登録</header> <header :class="$style.signupFormHeader">%i18n:@signup%</header>
<mk-signup :class="$style.signupForm"/> <mk-signup :class="$style.signupForm"/>
</modal> </modal>
<modal name="signin" width="500px" height="auto" scrollable> <modal name="signin" width="500px" height="auto" scrollable>
<header :class="$style.signinFormHeader">ログイン</header> <header :class="$style.signinFormHeader">%i18n:@signin%</header>
<mk-signin :class="$style.signinForm"/> <mk-signin :class="$style.signinForm"/>
</modal> </modal>
</div> </div>
@ -42,64 +35,25 @@
import Vue from 'vue'; import Vue from 'vue';
import { docsUrl, copyright, lang } from '../../../config'; import { docsUrl, copyright, lang } from '../../../config';
const shares = [
'Everything!',
'Webpages',
'Photos',
'Interests',
'Favorites'
];
export default Vue.extend({ export default Vue.extend({
data() { data() {
return { return {
aboutUrl: `${docsUrl}/${lang}/about`, aboutUrl: `${docsUrl}/${lang}/about`,
copyright, copyright
users: [],
clock: null,
i: 0
}; };
}, },
mounted() {
(this as any).api('users', {
sort: '+follower',
limit: 20
}).then(users => {
this.users = users;
});
this.clock = setInterval(() => {
if (++this.i == shares.length) this.i = 0;
const speed = 70;
const text = (this.$refs.share as any).innerText;
for (let i = 0; i < text.length; i++) {
setTimeout(() => {
if (this.$refs.share) {
(this.$refs.share as any).innerText = text.substr(0, text.length - i);
}
}, i * speed)
}
setTimeout(() => {
const newText = shares[this.i];
for (let i = 0; i <= newText.length; i++) {
setTimeout(() => {
if (this.$refs.share) {
(this.$refs.share as any).innerText = newText.substr(0, i);
}
}, i * speed)
}
}, text.length * speed);
}, 4000);
},
beforeDestroy() {
clearInterval(this.clock);
},
methods: { methods: {
signup() { signup() {
this.$modal.show('signup'); this.$modal.show('signup');
}, },
signin() { signin() {
this.$modal.show('signin'); this.$modal.show('signin');
},
dark() {
this.$store.commit('device/set', {
key: 'darkmode',
value: !this.$store.state.device.darkmode
});
} }
} }
}); });
@ -115,161 +69,107 @@ export default Vue.extend({
<style lang="stylus" scoped> <style lang="stylus" scoped>
@import '~const.styl' @import '~const.styl'
@import url('https://fonts.googleapis.com/css?family=Sarpanch:700') root(isDark)
.mk-welcome
display flex display flex
flex-direction column flex-direction column
flex 1 flex 1
$width = 1000px
background linear-gradient(to bottom, #1e1d65, #bd6659) > button
//background-image url('/assets/welcome-bg.svg') position absolute
background-size cover z-index 1
background-position top center top 0
&:before
content ""
display block
position fixed
bottom 0
left 0 left 0
width 100% padding 16px
height 100% font-size 18px
background-image url('/assets/welcome-fg.svg') color isDark ? #fff : #555
background-size cover
background-position bottom center
> main > main
display flex
flex 1 flex 1
padding 64px 0 0 0
text-align center
color isDark ? #9aa4b3 : #555
> .top > img
display flex width 350px
width 100%
> div > p
display flex margin 8px 0
max-width $width + 64px line-height 2em
margin 0 auto
padding 80px 32px 0 32px
> * button
margin-bottom 48px padding 8px 16px
font-size inherit
> div:first-child .signup
margin-right 48px color $theme-color
color #fff border solid 2px $theme-color
text-shadow 0 0 12px #172062 border-radius 4px
> h1 &:focus
margin 0 box-shadow 0 0 0 3px rgba($theme-color, 0.2)
font-weight bold
//font-variant small-caps
letter-spacing 12px
font-family 'Sarpanch', sans-serif
font-size 42px
line-height 48px
> .cursor &:hover
animation cursor 1s infinite linear both color $theme-color-foreground
background $theme-color
@keyframes cursor &:active
0% color $theme-color-foreground
opacity 1 background darken($theme-color, 10%)
50% border-color darken($theme-color, 10%)
opacity 0
> p .signin
margin 1em 0 &:hover
line-height 2em color isDark ? #fff : #000
button > .tl
padding 8px 16px margin 32px auto 0 auto
font-size inherit width 410px
text-align left
background isDark ? #313543 : #fff
border-radius 8px
box-shadow 0 8px 32px rgba(#000, 0.15)
overflow hidden
.signup > header
color $theme-color z-index 1
border solid 2px $theme-color padding 12px 16px
border-radius 4px color isDark ? #e3e5e8 : #888d94
box-shadow 0 1px 0px rgba(#000, 0.1)
&:focus > div
box-shadow 0 0 0 3px rgba($theme-color, 0.2) position absolute
top 0
right 0
padding inherit
&:hover > span
color $theme-color-foreground display inline-block
background $theme-color height 11px
width 11px
margin-left 6px
border-radius 100%
vertical-align middle
&:active &:nth-child(1)
color $theme-color-foreground background #5BCC8B
background darken($theme-color, 10%)
border-color darken($theme-color, 10%)
.signin &:nth-child(2)
&:hover background #E6BB46
color #fff
> .users &:nth-child(3)
margin 16px 0 0 0 background #DF7065
> * > .mk-welcome-timeline
display inline-block max-height 350px
margin 4px overflow auto
width 38px
height 38px
border-radius 6px
> div:last-child
> div
width 410px
background #fff
border-radius 8px
box-shadow 0 0 0 12px rgba(#000, 0.1)
overflow hidden
> header
z-index 1
padding 12px 16px
color #888d94
box-shadow 0 1px 0px rgba(#000, 0.1)
> div
position absolute
top 0
right 0
padding inherit
> span
display inline-block
height 11px
width 11px
margin-left 6px
background #ccc
border-radius 100%
vertical-align middle
&:nth-child(1)
background #5BCC8B
&:nth-child(2)
background #E6BB46
&:nth-child(3)
background #DF7065
> .mk-welcome-timeline
max-height 350px
overflow auto
> footer > footer
font-size 12px font-size 12px
color #949ea5 color isDark ? #949ea5 : #737c82
> div > div
max-width $width
margin 0 auto margin 0 auto
padding 0 0 42px 0 padding 64px
text-align center text-align center
> .c > .c
@ -277,6 +177,12 @@ export default Vue.extend({
font-size 10px font-size 10px
opacity 0.7 opacity 0.7
.mk-welcome[data-darkmode]
root(true)
.mk-welcome:not([data-darkmode])
root(false)
</style> </style>
<style lang="stylus" module> <style lang="stylus" module>

View File

@ -2,7 +2,7 @@
<mk-activity <mk-activity
:design="props.design" :design="props.design"
:init-view="props.view" :init-view="props.view"
:user="os.i" :user="$store.state.i"
@view-changed="viewChanged"/> @view-changed="viewChanged"/>
</template> </template>

View File

@ -4,7 +4,7 @@
<template slot="header">%fa:chart-pie%%i18n:@title%</template> <template slot="header">%fa:chart-pie%%i18n:@title%</template>
<button slot="func" title="%i18n:@refresh%" @click="fetch">%fa:sync%</button> <button slot="func" title="%i18n:@refresh%" @click="fetch">%fa:sync%</button>
<div class="mkw-polls--body" :data-darkmode="_darkmode_"> <div class="mkw-polls--body" :data-darkmode="$store.state.device.darkmode">
<div class="poll" v-if="!fetching && poll != null"> <div class="poll" v-if="!fetching && poll != null">
<p v-if="poll.text"><router-link to="poll | notePage">{{ poll.text }}</router-link></p> <p v-if="poll.text"><router-link to="poll | notePage">{{ poll.text }}</router-link></p>
<p v-if="!poll.text"><router-link to="poll | notePage">%fa:link%</router-link></p> <p v-if="!poll.text"><router-link to="poll | notePage">%fa:link%</router-link></p>

View File

@ -4,16 +4,16 @@
:data-melt="props.design == 2" :data-melt="props.design == 2"
> >
<div class="banner" <div class="banner"
:style="os.i.bannerUrl ? `background-image: url(${os.i.bannerUrl}?thumbnail&size=256)` : ''" :style="$store.state.i.bannerUrl ? `background-image: url(${$store.state.i.bannerUrl}?thumbnail&size=256)` : ''"
title="%i18n:@update-banner%" title="%i18n:@update-banner%"
@click="os.apis.updateBanner" @click="os.apis.updateBanner"
></div> ></div>
<mk-avatar class="avatar" :user="os.i" <mk-avatar class="avatar" :user="$store.state.i"
@click="os.apis.updateAvatar" @click="os.apis.updateAvatar"
title="%i18n:@update-avatar%" title="%i18n:@update-avatar%"
/> />
<router-link class="name" :to="os.i | userPage">{{ os.i | userName }}</router-link> <router-link class="name" :to="$store.state.i | userPage">{{ $store.state.i | userName }}</router-link>
<p class="username">@{{ os.i | acct }}</p> <p class="username">@{{ $store.state.i | acct }}</p>
</div> </div>
</template> </template>

View File

@ -49,48 +49,6 @@ Vue.mixin({
} }
}); });
// Dark/Light
const bus = new Vue();
Vue.mixin({
data() {
return {
_darkmode_: localStorage.getItem('darkmode') == 'true'
};
},
beforeCreate() {
// なぜか警告が出るので
this._darkmode_ = localStorage.getItem('darkmode') == 'true';
},
beforeDestroy() {
bus.$off('updated', this._onDarkmodeUpdated_);
},
mounted() {
this._onDarkmodeUpdated_(this._darkmode_);
bus.$on('updated', this._onDarkmodeUpdated_);
},
methods: {
_updateDarkmode_(v) {
localStorage.setItem('darkmode', v.toString());
if (v) {
document.documentElement.setAttribute('data-darkmode', 'true');
} else {
document.documentElement.removeAttribute('data-darkmode');
}
bus.$emit('updated', v);
},
_onDarkmodeUpdated_(v) {
if (!this.$el || !this.$el.setAttribute) return;
if (v) {
this.$el.setAttribute('data-darkmode', 'true');
} else {
this.$el.removeAttribute('data-darkmode');
}
this._darkmode_ = v;
this.$forceUpdate();
}
}
});
/** /**
* APP ENTRY POINT! * APP ENTRY POINT!
*/ */
@ -141,13 +99,51 @@ export default (callback: (launch: (router: VueRouter, api?: (os: MiOS) => API)
const launch = (router: VueRouter, api?: (os: MiOS) => API) => { const launch = (router: VueRouter, api?: (os: MiOS) => API) => {
os.apis = api ? api(os) : null; os.apis = api ? api(os) : null;
//#region Dark/Light
Vue.mixin({
data() {
return {
_unwatchDarkmode_: null
};
},
mounted() {
const apply = v => {
if (this.$el.setAttribute == null) return;
if (v) {
this.$el.setAttribute('data-darkmode', 'true');
} else {
this.$el.removeAttribute('data-darkmode');
}
};
apply(os.store.state.device.darkmode);
this._unwatchDarkmode_ = os.store.watch(s => {
return s.device.darkmode;
}, apply);
},
beforeDestroy() {
this._unwatchDarkmode_();
}
});
os.store.watch(s => {
return s.device.darkmode;
}, v => {
if (v) {
document.documentElement.setAttribute('data-darkmode', 'true');
} else {
document.documentElement.removeAttribute('data-darkmode');
}
});
//#endregion
Vue.mixin({ Vue.mixin({
data() { data() {
return { return {
os, os,
api: os.api, api: os.api,
apis: os.apis, apis: os.apis
clientSettings: os.store.state.settings
}; };
} }
}); });

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