Compare commits
122 Commits
Author | SHA1 | Date | |
---|---|---|---|
2ab8a5bc0a | |||
c222b9ae94 | |||
53a0f3c794 | |||
9ff349c548 | |||
0935bd4bd4 | |||
45bee7cc2f | |||
1c86a4bc26 | |||
b385cf2a9f | |||
40d3dc454d | |||
8e92848495 | |||
2d94a22a30 | |||
7a5a091c25 | |||
2baf810c71 | |||
d1ecef13ef | |||
495fa553ad | |||
854e649ea6 | |||
c047324b42 | |||
daac865c72 | |||
63d059b8d1 | |||
e3075a0dc7 | |||
6b6e597b95 | |||
eb0eadad5e | |||
f600fee16d | |||
7b88c54aa6 | |||
623dd57cc3 | |||
f6edd33adb | |||
ac20d73222 | |||
c59374d79d | |||
0d478046de | |||
f3479d1b98 | |||
2fdecb8a38 | |||
a95c3ee557 | |||
67c439c70a | |||
b96037cffa | |||
ebd8d34552 | |||
a653d9a83e | |||
07d6894c42 | |||
03588b3fd6 | |||
2e83440e70 | |||
2633873fcc | |||
5f33713f53 | |||
fe84c5010c | |||
7f39df0713 | |||
928d359dd2 | |||
184eb00133 | |||
e264a49b08 | |||
8caf853c80 | |||
b451c04787 | |||
1653977392 | |||
a0d9def98a | |||
92701e5cec | |||
0b6b6a4f2f | |||
3a2dc95850 | |||
163cf49f16 | |||
37fc3103f6 | |||
b7bd1ff69f | |||
dc36134f10 | |||
fea8821091 | |||
33faf40aca | |||
4410f8d7f7 | |||
3e6029e69d | |||
96c7707e6c | |||
d8e545db3c | |||
a9a6ba0aed | |||
a898c6ceab | |||
0205c5c2d7 | |||
f8074ab74b | |||
f15c491d5f | |||
c38a32dee9 | |||
4f5abed70d | |||
c9ac9923df | |||
bb14895fd8 | |||
6f92d601ec | |||
345143b0c1 | |||
dc80d5d376 | |||
d3544f9637 | |||
864b6ad1bd | |||
c58027e521 | |||
10fb399588 | |||
10f466c895 | |||
32068b4bcc | |||
381f2b7fdf | |||
1c3c733c6b | |||
8bc5febe66 | |||
20335e23f9 | |||
9dbc9115c9 | |||
fe707f88a4 | |||
9b23ebd4a3 | |||
bea450cc2c | |||
e80709f7aa | |||
cb71f92f42 | |||
2ca5348560 | |||
c8e98fdf8e | |||
0bfa041026 | |||
33bf474a1e | |||
53c559c001 | |||
1c99ef454b | |||
cf4cecd4df | |||
6a8835b923 | |||
f2b1cf92e1 | |||
6b79618e74 | |||
3db414add4 | |||
9ef641b403 | |||
6fa7819a44 | |||
59a1b9adbe | |||
3fbc7094f6 | |||
56c6227bc2 | |||
ee82f99f5a | |||
789de130a2 | |||
46c026ce70 | |||
82290f6e4e | |||
8729525f95 | |||
df0115ffe8 | |||
0275b4fc9e | |||
9982fd71ba | |||
081060b7db | |||
0de64f1fc7 | |||
f0508c0a90 | |||
b51ae1dfaa | |||
6e7233d41b | |||
418041a56e | |||
17d20f5a18 |
@ -116,7 +116,7 @@ Please see [Contribution guide](./CONTRIBUTING.md).
|
||||
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
|
||||
</tr></table>
|
||||
|
||||
**Last updated:** Tue, 27 Nov 2018 06:24:05 UTC
|
||||
**Last updated:** Sat, 01 Dec 2018 22:05:05 UTC
|
||||
<!-- PATREON_END -->
|
||||
|
||||
:four_leaf_clover: Copyright
|
||||
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 344 KiB After Width: | Height: | Size: 317 KiB |
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 200 KiB |
BIN
assets/ai.png
Before Width: | Height: | Size: 243 KiB After Width: | Height: | Size: 235 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 264 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
@ -1,108 +1,17 @@
|
||||
<?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="512"
|
||||
height="512"
|
||||
viewBox="0 0 135.46667 135.46667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
sodipodi:docname="favicon.svg"
|
||||
inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\16.png"
|
||||
inkscape:export-xdpi="3"
|
||||
inkscape:export-ydpi="3">
|
||||
version="1.1"
|
||||
viewBox="0 0 135.46667 135.46667"
|
||||
height="512"
|
||||
width="512">
|
||||
<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="1.4142136"
|
||||
inkscape:cx="15.466544"
|
||||
inkscape:cy="235.92965"
|
||||
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="1027"
|
||||
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>
|
||||
id="defs2" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
@ -116,32 +25,27 @@
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="レイヤー 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-30.809093,-111.78601)">
|
||||
style="fill:#2fa3bc;fill-opacity:1"
|
||||
transform="translate(-30.809093,-111.78601)"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g4502"
|
||||
transform="matrix(1.096096,0,0,1.096096,-2.960633,-44.023579)">
|
||||
style="fill:#2fa3bc;fill-opacity:1"
|
||||
transform="matrix(1.096096,0,0,1.096096,-2.960633,-44.023579)"
|
||||
id="g4502">
|
||||
<g
|
||||
style="fill:#2fa1bb;fill-opacity:1"
|
||||
id="g5125">
|
||||
id="g5125"
|
||||
transform="translate(-1.3333333e-6,-1.3439941e-6)"
|
||||
style="fill:#2fa3bc;fill-opacity:1">
|
||||
<g
|
||||
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)"
|
||||
aria-label="Mi"
|
||||
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:#2fa3bc;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
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">
|
||||
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)">
|
||||
<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" />
|
||||
transform="matrix(0.26412464,0,0,0.26412464,24.988264,136.28626)"
|
||||
d="m 62.474609,76.585938 c -7.47555,0 -14.595784,1.246427 -21.359375,3.738281 C 29.011968,84.595952 19.044417,92.249798 11.212891,103.28516 3.7373405,113.96451 0,125.88934 0,139.06055 v 233.8789 c 0,17.08697 6.0510264,31.85913 18.154297,44.31836 12.459246,12.10327 27.233346,18.15625 44.320312,18.15625 17.442947,0 32.215089,-6.05298 44.318361,-18.15625 12.45925,-12.45923 18.68945,-27.23139 18.68945,-44.31836 V 330.4082 c 0.13441,-9.21122 9.6225,-6.79429 14.41797,0 8.98111,15.55395 28.02226,28.91242 50.19141,28.83594 22.16915,-0.0764 40.58194,-11.03699 50.19336,-28.83594 3.63981,-4.29263 13.89902,-11.60675 14.95117,0 v 42.53125 c 0,17.08697 6.05102,31.85913 18.15429,44.31836 12.45923,12.10327 27.23335,18.15625 44.32032,18.15625 17.44294,0 32.21509,-6.05298 44.31836,-18.15625 12.45923,-12.45923 18.68945,-27.23139 18.68945,-44.31836 v -233.8789 c 0,-13.17121 -3.9146,-25.09604 -11.74609,-35.77539 -7.47557,-11.035362 -17.26588,-18.689208 -29.36914,-22.960941 -7.11956,-2.491854 -14.23982,-3.738281 -21.35938,-3.738281 -19.22286,0 -35.41865,7.476649 -48.58984,22.427734 l -63.40235,74.199218 c -1.42391,1.06791 -6.14093,9.23242 -16.16015,9.23242 -10.01923,0 -14.20109,-8.16451 -15.625,-9.23242 L 110.53125,99.013672 C 97.716024,84.062587 81.697447,76.585938 62.474609,76.585938 Z m 395.060551,0 c -14.9511,-10e-7 -27.76596,5.340179 -38.44532,16.019531 -10.32338,10.323381 -15.48437,22.961011 -15.48437,37.912111 0,14.9511 5.16099,27.76596 15.48437,38.44531 10.67936,10.32338 23.49422,15.48633 38.44532,15.48633 14.95109,0 27.76596,-5.16295 38.44531,-15.48633 C 506.65982,158.28354 512,145.46868 512,130.51758 512,115.56648 506.65982,102.92885 495.98047,92.605469 485.30112,81.926117 472.48625,76.585938 457.53516,76.585938 Z m 0.5332,118.541012 c -14.9511,0 -27.76596,5.34018 -38.44531,16.01953 -10.67936,10.67936 -16.01758,23.49422 -16.01758,38.44532 v 131.89062 c 0,14.9511 5.33822,27.76596 16.01758,38.44531 10.67935,10.32339 23.49421,15.48633 38.44531,15.48633 14.9511,0 27.58873,-5.16294 37.91211,-15.48633 C 506.65982,409.24838 512,396.43352 512,381.48242 V 249.5918 c 0,-14.9511 -5.34018,-27.76596 -16.01953,-38.44532 -10.32338,-10.67935 -22.96101,-16.01953 -37.91211,-16.01953 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#2fa3bc;fill-opacity:1;stroke-width:1.09609616px" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 446 B After Width: | Height: | Size: 430 B |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 774 B After Width: | Height: | Size: 671 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1015 B |
129
assets/mi.svg
@ -1,108 +1,17 @@
|
||||
<?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="512"
|
||||
height="512"
|
||||
viewBox="0 0 135.46667 135.46667"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.1 r15371"
|
||||
sodipodi:docname="mi.svg"
|
||||
inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\32.png"
|
||||
inkscape:export-xdpi="6"
|
||||
inkscape:export-ydpi="6">
|
||||
version="1.1"
|
||||
viewBox="0 0 135.46667 135.46667"
|
||||
height="512"
|
||||
width="512">
|
||||
<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="1.4142136"
|
||||
inkscape:cx="232.39583"
|
||||
inkscape:cy="251.50613"
|
||||
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="1027"
|
||||
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>
|
||||
id="defs2" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
@ -111,32 +20,30 @@
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="レイヤー 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-30.809093,-111.78601)">
|
||||
transform="translate(-30.809093,-111.78601)"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g4502"
|
||||
transform="matrix(1.096096,0,0,1.096096,-2.960633,-44.023579)">
|
||||
transform="matrix(1.096096,0,0,1.096096,-2.960633,-44.023579)"
|
||||
id="g4502">
|
||||
<g
|
||||
style="fill:#000000;fill-opacity:1"
|
||||
id="g5125"
|
||||
transform="translate(-1.3333333e-6,-1.3439941e-6)"
|
||||
id="g5125">
|
||||
style="fill:#000000;fill-opacity:1">
|
||||
<g
|
||||
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)"
|
||||
id="text4489"
|
||||
aria-label="Mi"
|
||||
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:#000000;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
aria-label="Mi">
|
||||
id="text4489"
|
||||
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)">
|
||||
<path
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#000000;fill-opacity:1;stroke-width:1.09609616px"
|
||||
d="M 62.474609 76.585938 C 54.999059 76.585938 47.878825 77.832365 41.115234 80.324219 C 29.011968 84.595952 19.044417 92.249798 11.212891 103.28516 C 3.7373405 113.96451 0 125.88934 0 139.06055 L 0 372.93945 C 0 390.02642 6.0510264 404.79858 18.154297 417.25781 C 30.613543 429.36108 45.387643 435.41406 62.474609 435.41406 C 79.917556 435.41406 94.689698 429.36108 106.79297 417.25781 C 119.25222 404.79858 125.48242 390.02642 125.48242 372.93945 L 125.48242 330.4082 C 125.61683 321.19698 135.10492 323.61391 139.90039 330.4082 C 148.8815 345.96215 167.92265 359.32062 190.0918 359.24414 C 212.26095 359.16778 230.67374 348.20715 240.28516 330.4082 C 243.92497 326.11557 254.18418 318.80145 255.23633 330.4082 L 255.23633 372.93945 C 255.23633 390.02642 261.28735 404.79858 273.39062 417.25781 C 285.84985 429.36108 300.62397 435.41406 317.71094 435.41406 C 335.15388 435.41406 349.92603 429.36108 362.0293 417.25781 C 374.48853 404.79858 380.71875 390.02642 380.71875 372.93945 L 380.71875 139.06055 C 380.71875 125.88934 376.80415 113.96451 368.97266 103.28516 C 361.49709 92.249798 351.70678 84.595952 339.60352 80.324219 C 332.48396 77.832365 325.3637 76.585938 318.24414 76.585938 C 299.02128 76.585938 282.82549 84.062587 269.6543 99.013672 C 262.53473 107.20121 258.79542 111.11761 258.43945 110.76172 C 258.43945 110.76172 207.67587 172.14495 206.25195 173.21289 C 204.82804 174.2808 200.11102 182.44531 190.0918 182.44531 C 180.07257 182.44531 175.89071 174.2808 174.4668 173.21289 C 173.04288 172.14495 122.2793 110.76172 122.2793 110.76172 C 121.21136 110.40575 117.29484 106.48923 110.53125 99.013672 C 97.716024 84.062587 81.697447 76.585938 62.474609 76.585938 z M 457.53516 76.585938 C 442.58406 76.585937 429.7692 81.926117 419.08984 92.605469 C 408.76646 102.92885 403.60547 115.56648 403.60547 130.51758 C 403.60547 145.46868 408.76646 158.28354 419.08984 168.96289 C 429.7692 179.28627 442.58406 184.44922 457.53516 184.44922 C 472.48625 184.44922 485.30112 179.28627 495.98047 168.96289 C 506.65982 158.28354 512 145.46868 512 130.51758 C 512 115.56648 506.65982 102.92885 495.98047 92.605469 C 485.30112 81.926117 472.48625 76.585938 457.53516 76.585938 z M 458.06836 195.12695 C 443.11726 195.12695 430.3024 200.46713 419.62305 211.14648 C 408.94369 221.82584 403.60547 234.6407 403.60547 249.5918 L 403.60547 381.48242 C 403.60547 396.43352 408.94369 409.24838 419.62305 419.92773 C 430.3024 430.25112 443.11726 435.41406 458.06836 435.41406 C 473.01946 435.41406 485.65709 430.25112 495.98047 419.92773 C 506.65982 409.24838 512 396.43352 512 381.48242 L 512 249.5918 C 512 234.6407 506.65982 221.82584 495.98047 211.14648 C 485.65709 200.46713 473.01946 195.12695 458.06836 195.12695 z "
|
||||
id="path5210"
|
||||
transform="matrix(0.26412464,0,0,0.26412464,24.988264,136.28626)"
|
||||
id="path5210" />
|
||||
d="m 62.474609,76.585938 c -7.47555,0 -14.595784,1.246427 -21.359375,3.738281 C 29.011968,84.595952 19.044417,92.249798 11.212891,103.28516 3.7373405,113.96451 0,125.88934 0,139.06055 v 233.8789 c 0,17.08697 6.0510264,31.85913 18.154297,44.31836 12.459246,12.10327 27.233346,18.15625 44.320312,18.15625 17.442947,0 32.215089,-6.05298 44.318361,-18.15625 12.45925,-12.45923 18.68945,-27.23139 18.68945,-44.31836 V 330.4082 c 0.13441,-9.21122 9.6225,-6.79429 14.41797,0 8.98111,15.55395 28.02226,28.91242 50.19141,28.83594 22.16915,-0.0764 40.58194,-11.03699 50.19336,-28.83594 3.63981,-4.29263 13.89902,-11.60675 14.95117,0 v 42.53125 c 0,17.08697 6.05102,31.85913 18.15429,44.31836 12.45923,12.10327 27.23335,18.15625 44.32032,18.15625 17.44294,0 32.21509,-6.05298 44.31836,-18.15625 12.45923,-12.45923 18.68945,-27.23139 18.68945,-44.31836 v -233.8789 c 0,-13.17121 -3.9146,-25.09604 -11.74609,-35.77539 -7.47557,-11.035362 -17.26588,-18.689208 -29.36914,-22.960941 -7.11956,-2.491854 -14.23982,-3.738281 -21.35938,-3.738281 -19.22286,0 -35.41865,7.476649 -48.58984,22.427734 l -63.40235,74.199218 c -1.42391,1.06791 -6.14093,9.23242 -16.16015,9.23242 -10.01923,0 -14.20109,-8.16451 -15.625,-9.23242 L 110.53125,99.013672 C 97.716024,84.062587 81.697447,76.585938 62.474609,76.585938 Z m 395.060551,0 c -14.9511,-10e-7 -27.76596,5.340179 -38.44532,16.019531 -10.32338,10.323381 -15.48437,22.961011 -15.48437,37.912111 0,14.9511 5.16099,27.76596 15.48437,38.44531 10.67936,10.32338 23.49422,15.48633 38.44532,15.48633 14.95109,0 27.76596,-5.16295 38.44531,-15.48633 C 506.65982,158.28354 512,145.46868 512,130.51758 512,115.56648 506.65982,102.92885 495.98047,92.605469 485.30112,81.926117 472.48625,76.585938 457.53516,76.585938 Z m 0.5332,118.541012 c -14.9511,0 -27.76596,5.34018 -38.44531,16.01953 -10.67936,10.67936 -16.01758,23.49422 -16.01758,38.44532 v 131.89062 c 0,14.9511 5.33822,27.76596 16.01758,38.44531 10.67935,10.32339 23.49421,15.48633 38.44531,15.48633 14.9511,0 27.58873,-5.16294 37.91211,-15.48633 C 506.65982,409.24838 512,396.43352 512,381.48242 V 249.5918 c 0,-14.9511 -5.34018,-27.76596 -16.01953,-38.44532 -10.32338,-10.67935 -22.96101,-16.01953 -37.91211,-16.01953 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#000000;fill-opacity:1;stroke-width:1.09609616px" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 4.1 KiB |
BIN
assets/title.png
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
language: "言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
||||
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
@ -1360,11 +1362,6 @@ 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: "私は通信を制限されている"
|
||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近の投稿"
|
||||
images: "画像"
|
||||
|
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
||||
enable-sounds-desc: "Spiel einen Ton ab beim Erhalten eines Beitrags bzw. einer Nachricht. Diese Einstellung wird im Browser gespeichert."
|
||||
volume: "Lautstärke"
|
||||
test: "Test"
|
||||
language: "Sprache"
|
||||
pick-language: "Sprache auswählen"
|
||||
recommended: "Empfohlen"
|
||||
auto: "Automatisch"
|
||||
specify-language: "Sprache auswählen"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "Der Cache deines Benutzerkontos (Info, Beiträge, Antworten, Direktnachrichten, Einstellungen), die lokal im Browser gespeichert sind werden gelöscht.\nDu musst die Seite aktualisieren nachdem du aufgeräumt hast."
|
||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
||||
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "ファイルを選択"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
lang: "言語"
|
||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "Sprache auswählen"
|
||||
design: "デザインと表示"
|
||||
dark-mode: "ダークモード"
|
||||
i-am-under-limited-internet: "私は通信を制限されている"
|
||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近の投稿"
|
||||
images: "画像"
|
||||
|
@ -26,7 +26,7 @@ common:
|
||||
close: "Close"
|
||||
do-not-copy-paste: "Please do not enter or paste the code here. Account may be compromised."
|
||||
load-more: "Load more"
|
||||
enter-password: "パスワードを入力してください"
|
||||
enter-password: "Please enter the Password"
|
||||
got-it: "Got it!"
|
||||
customization-tips:
|
||||
title: "Customization tips"
|
||||
@ -268,7 +268,7 @@ common/views/components/theme.vue:
|
||||
install: "Install"
|
||||
installed: "\"{}\" has been installed"
|
||||
create-a-theme: "Create a theme"
|
||||
save-created-theme: "Save a theme"
|
||||
save-created-theme: "Save theme"
|
||||
primary-color: "Primary color"
|
||||
secondary-color: "Secondary color"
|
||||
text-color: "Text color"
|
||||
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{} users mentioned"
|
||||
empty: "No popular hashtag trends"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "Display Language"
|
||||
pick-language: "Select a language"
|
||||
recommended: "Recommended"
|
||||
auto: "Auto"
|
||||
specify-language: "Specify language"
|
||||
info: "You need to reload the page for the changes to take effect."
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "Profile"
|
||||
name: "Name"
|
||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
||||
enable-sounds-desc: "Play a sound when you receive a post/message. This setting is stored in the browser."
|
||||
volume: "Volume"
|
||||
test: "Test"
|
||||
language: "Language"
|
||||
pick-language: "Select a language"
|
||||
recommended: "Recommended"
|
||||
auto: "Automatic"
|
||||
specify-language: "Specify language"
|
||||
language-desc: "You need to reload the page for the changes to take effect."
|
||||
cache: "Cache"
|
||||
clean-cache: "Clear cache"
|
||||
cache-warn: "The cache of account info/posts/replies/messages/settings stored in the browser will be deleted. You need to reload the page after cleaning up."
|
||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
||||
email-config-info: "Used to confirm email and password reset etc."
|
||||
enable-email: "Enable email delivery"
|
||||
email: "Email Address"
|
||||
smtp-use-ssl: "Use SSL for SMTP server"
|
||||
smtp-secure: "Use implicit SSL/TLS in the SMTP connection"
|
||||
smtp-secure-info: "Turn off STARTTLS when used that."
|
||||
smtp-host: "SMTP Host"
|
||||
smtp-port: "SMTP Port"
|
||||
smtp-user: "SMTP User"
|
||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "Choose files"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "Signed in as {}"
|
||||
lang: "Language"
|
||||
lang-tip: "You will need to reload the page for the changes to take effect."
|
||||
recommended: "Recommended"
|
||||
auto: "Auto"
|
||||
specify-language: "Select your language"
|
||||
design: "Design and display"
|
||||
dark-mode: "Dark Mode"
|
||||
i-am-under-limited-internet: "I'm in limited bandwidth"
|
||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
||||
block: "Block"
|
||||
unblock: "Unblock"
|
||||
years-old: "{age} years old"
|
||||
push-to-list: "Add to list"
|
||||
select-list: "Select a list"
|
||||
list-pushed: "Successfully added {user} to {list}."
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "Recent notes"
|
||||
images: "Images"
|
||||
|
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
language: "言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
||||
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
@ -1360,11 +1362,6 @@ 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: "私は通信を制限されている"
|
||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近の投稿"
|
||||
images: "画像"
|
||||
|
@ -26,7 +26,7 @@ common:
|
||||
close: "Fermer"
|
||||
do-not-copy-paste: "Veuillez ne pas entrer ou coller le code ici. Le compte peut être compromis."
|
||||
load-more: "Charger plus"
|
||||
enter-password: "パスワードを入力してください"
|
||||
enter-password: "Veuillez entrer le mot de passe"
|
||||
got-it: "J’ai compris !"
|
||||
customization-tips:
|
||||
title: "Conseils de personnalisation"
|
||||
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{} utilisateurs·rices mentionnés·es"
|
||||
empty: "Aucune tendance"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "Langue "
|
||||
pick-language: "Sélectionner une langue"
|
||||
recommended: "Recommandé"
|
||||
auto: "Automatique"
|
||||
specify-language: "Spécifier la langue"
|
||||
info: "Le rechargement de la page est requis afin d'appliquer les modifications."
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "Profil"
|
||||
name: "Nom"
|
||||
@ -458,10 +465,10 @@ common/views/components/profile-editor.vue:
|
||||
saved: "Profil mis à jour avec succès"
|
||||
uploading: "En cours d'envoi …"
|
||||
upload-failed: "Échec de l'envoi"
|
||||
email: "メール設定"
|
||||
email-address: "メールアドレス"
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
email: "Paramètres de messagerie"
|
||||
email-address: "Adresse de courrier électronique"
|
||||
email-verified: "L’adresse du courrier électronique a été vérifiée."
|
||||
email-not-verified: "Adresse de courriel n’est pas confirmée. Veuillez vérifier votre boite de réception."
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "Récupération"
|
||||
no-broadcasts: "Aucune annonce"
|
||||
@ -736,8 +743,8 @@ desktop/views/components/settings.vue:
|
||||
note-visibility: "Visibilité de la publication"
|
||||
default-note-visibility: "Visibilité par défaut"
|
||||
remember-note-visibility: "Se souvenir du mode de visibilité de la publication"
|
||||
web-search-engine: "ウェブ検索エンジン"
|
||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
||||
web-search-engine: "Moteur de recherche Web"
|
||||
web-search-engine-desc: "Exemple : https://www.google.com/?#q={{query}}"
|
||||
auto-popout: "Fenêtre contextuelle automatique"
|
||||
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
||||
advanced: "Paramètres avancés"
|
||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
||||
enable-sounds-desc: "Jouer un son lorsque vous recevez un message. Ce paramètre est sauvegardé dans le navigateur."
|
||||
volume: "Volume"
|
||||
test: "Test"
|
||||
language: "Langue"
|
||||
pick-language: "Sélectionner une langue"
|
||||
recommended: "Recommandé"
|
||||
auto: "Automatique"
|
||||
specify-language: "Spécifier la langue"
|
||||
language-desc: "Le rechargement de la page est requis afin d'appliquer les modifications."
|
||||
cache: "Cache"
|
||||
clean-cache: "Nettoyage"
|
||||
cache-warn: "Le nettoyage du cache du compte supprime les informations stockées dans le navigateur comme les messages, les réponses ainsi que d’autres données (y compris les paramètres de configuration). Après le nettoyage, vous devez recharger la page."
|
||||
@ -1004,15 +1005,16 @@ admin/views/instance.vue:
|
||||
external-user-recommendation-engine-desc: "Exemple : https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
||||
external-user-recommendation-timeout: "Délai d’expiration"
|
||||
external-user-recommendation-timeout-desc: "En millisecondes (par exemple : 300000)"
|
||||
email-config: "メールサーバーの設定"
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
email-config: "Paramètres du serveur de messagerie"
|
||||
email-config-info: "Utilisé pour confirmer votre adresse de courrier électronique et la réinitialisation de votre mot de passe."
|
||||
enable-email: "Activation de la distribution du courrier"
|
||||
email: "Adresse de courrier électronique"
|
||||
smtp-secure: "Utiliser SSL/TLS implicitement dans la connexion SMTP"
|
||||
smtp-secure-info: "Désactiver STARTTLS lorsque celui-ci est utilisé."
|
||||
smtp-host: "Hôte SMTP"
|
||||
smtp-port: "Port SMTP"
|
||||
smtp-user: "Utilisateur SMTP"
|
||||
smtp-pass: "Mot de passe SMTP"
|
||||
admin/views/charts.vue:
|
||||
title: "Graph"
|
||||
per-day: "par jour"
|
||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "Choisissez un fichier"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "Connecté·e en tant que {}"
|
||||
lang: "Langue"
|
||||
lang-tip: "Le rechargement de la page est requis afin d'appliquer les modifications."
|
||||
recommended: "Recommandé"
|
||||
auto: "Automatique"
|
||||
specify-language: "Sélectionnez votre langue"
|
||||
design: "Affichage et design"
|
||||
dark-mode: "Mode nuit"
|
||||
i-am-under-limited-internet: "J'ai un accès Internet limité"
|
||||
@ -1387,8 +1384,8 @@ mobile/views/pages/settings.vue:
|
||||
note-visibility: "Visibilité de la publication"
|
||||
default-note-visibility: "Visibilité par défaut"
|
||||
remember-note-visibility: "Se souvenir du mode de visibilité de la publication"
|
||||
web-search-engine: "ウェブ検索エンジン"
|
||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
||||
web-search-engine: "Moteur de recherche Web"
|
||||
web-search-engine-desc: "Exemple : https://www.google.com/?#q={{query}}"
|
||||
disable-via-mobile: "Ne pas mentionner que ma publication provient d'un 'périphérique mobile'"
|
||||
load-raw-images: "Afficher les photos jointes en haute qualité"
|
||||
load-remote-media: "Afficher les médias sur le serveur distant"
|
||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
||||
block: "Bloquer"
|
||||
unblock: "Débloquer"
|
||||
years-old: "{age} ans"
|
||||
push-to-list: "Ajouter à la liste"
|
||||
select-list: "Sélectionnez une liste"
|
||||
list-pushed: "Vous avez ajouté {user} à la liste {list} avec succès."
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "Notes récentes"
|
||||
images: "Images"
|
||||
|
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
language: "言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
||||
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
@ -1360,11 +1362,6 @@ 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: "私は通信を制限されている"
|
||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近の投稿"
|
||||
images: "画像"
|
||||
|
@ -440,13 +440,11 @@ common/views/components/stream-indicator.vue:
|
||||
reconnecting: "再接続中"
|
||||
connected: "接続完了"
|
||||
|
||||
common/views/components/twitter-setting.vue:
|
||||
description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。"
|
||||
connected-to: "次のTwitterアカウントに接続されています"
|
||||
detail: "詳細..."
|
||||
reconnect: "再接続する"
|
||||
connect: "Twitterと接続する"
|
||||
common/views/components/integration-settings.vue:
|
||||
title: "サービス連携"
|
||||
connect: "接続する"
|
||||
disconnect: "切断する"
|
||||
connected-to: "次のアカウントに接続されています"
|
||||
|
||||
common/views/components/github-setting.vue:
|
||||
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
|
||||
@ -485,12 +483,21 @@ common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
account: "アカウント"
|
||||
location: "場所"
|
||||
description: "自己紹介"
|
||||
language: "言語"
|
||||
birthday: "誕生日"
|
||||
avatar: "アイコン"
|
||||
banner: "バナー"
|
||||
@ -870,13 +877,6 @@ desktop/views/components/settings.vue:
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
|
||||
language: "言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
@ -1554,11 +1554,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
lang: "言語"
|
||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
design: "デザインと表示"
|
||||
dark-mode: "ダークモード"
|
||||
i-am-under-limited-internet: "私は通信を制限されている"
|
||||
@ -1586,18 +1581,6 @@ mobile/views/pages/settings.vue:
|
||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||
load-raw-images: "添付された画像を高画質で表示する"
|
||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
||||
twitter: "Twitter連携"
|
||||
twitter-connect: "Twitterアカウントに接続する"
|
||||
twitter-reconnect: "再接続する"
|
||||
twitter-disconnect: "切断する"
|
||||
github: "GitHub連携"
|
||||
github-connect: "GitHubアカウントに接続する"
|
||||
github-reconnect: "再接続する"
|
||||
github-disconnect: "切断する"
|
||||
discord: "Discord連携"
|
||||
discord-connect: "Discordアカウントに接続する"
|
||||
discord-reconnect: "再接続する"
|
||||
discord-disconnect: "切断する"
|
||||
update: "Misskey Update"
|
||||
version: "バージョン:"
|
||||
latest-version: "最新のバージョン:"
|
||||
@ -1628,6 +1611,9 @@ mobile/views/pages/user.vue:
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近の投稿"
|
||||
|
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "流行は自分で作るんや"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
||||
enable-sounds-desc: "投稿やメッセージもろたとき、音鳴らしたるわ。大丈夫や、この設定はブラウザが覚えてくれとる。"
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
language: "言語"
|
||||
pick-language: "言語選んでや"
|
||||
recommended: "おすすめ"
|
||||
auto: "自動"
|
||||
specify-language: "言語選んでくれ"
|
||||
language-desc: "変更はページの再度読み込み後に反映されんで。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "お掃除"
|
||||
cache-warn: "お掃除するとな、ブラウザが覚えてくれとるアカウントのあれこれや書きかけの投稿・返信・メッセージや設定情報なんかのデータが全部飛んでいくんや。これやったらページ再読込しといてな。"
|
||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
||||
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
@ -1360,11 +1362,6 @@ 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: "電波と阪神がザコいんや"
|
||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
||||
block: "ブロック"
|
||||
unblock: "ブロックやめたる"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近儲かりまっか?"
|
||||
images: "画像"
|
||||
|
@ -26,7 +26,7 @@ common:
|
||||
close: "닫기"
|
||||
do-not-copy-paste: "여기에 코드를 입력하거나 붙여넣지 마십시오. 계정이 무단으로 사용될 수 있습니다."
|
||||
load-more: "더보기"
|
||||
enter-password: "パスワードを入力してください"
|
||||
enter-password: "비밀번호를 입력하여 주십시오"
|
||||
got-it: "알겠습니다"
|
||||
customization-tips:
|
||||
title: "커스터마이징 도움말"
|
||||
@ -124,7 +124,7 @@ common:
|
||||
is-remote-user: "이 유저 정보는 복사본입니다."
|
||||
is-remote-post: "이 글 정보는 복사본입니다."
|
||||
view-on-remote: "정확한 정보 보기"
|
||||
renoted-by: "{user}가 Renote"
|
||||
renoted-by: "{user}이(가) Renote"
|
||||
error:
|
||||
title: '오류가 발생했습니다'
|
||||
retry: '다시 시도'
|
||||
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}명이 언급함"
|
||||
empty: "트렌드 없음"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "표시 언어"
|
||||
pick-language: "언어 설정"
|
||||
recommended: "추천"
|
||||
auto: "자동"
|
||||
specify-language: "언어 지정"
|
||||
info: "변경사항은 페이지를 새로고침한 뒤에 반영됩니다."
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "프로필"
|
||||
name: "이름"
|
||||
@ -458,10 +465,10 @@ common/views/components/profile-editor.vue:
|
||||
saved: "프로필을 저장하였습니다"
|
||||
uploading: "업로드 중"
|
||||
upload-failed: "업로드에 실패하였습니다"
|
||||
email: "メール設定"
|
||||
email-address: "メールアドレス"
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
email: "메일 설정"
|
||||
email-address: "메일 주소"
|
||||
email-verified: "매일 주소가 확인되었습니다"
|
||||
email-not-verified: "메일 주소가 확인되지 않았습니다. 받은 편지함을 확인하여 주시기 바랍니다."
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "확인중"
|
||||
no-broadcasts: "공지사항이 없습니다"
|
||||
@ -736,8 +743,8 @@ desktop/views/components/settings.vue:
|
||||
note-visibility: "게시물의 공개 범위"
|
||||
default-note-visibility: "기본 공개 범위"
|
||||
remember-note-visibility: "글의 공개 범위를 기억하기"
|
||||
web-search-engine: "ウェブ検索エンジン"
|
||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
||||
web-search-engine: "웹 검색엔진"
|
||||
web-search-engine-desc: "예: https://www.google.com/?#q={{query}}"
|
||||
auto-popout: "창 자동 팝아웃"
|
||||
auto-popout-desc: "창이 열릴 때 팝아웃 (브라우저 밖으로 분리) 이 가능한 경우 자동으로 팝아웃합니다. 이 설정은 브라우저에 저장됩니다."
|
||||
advanced: "고급 설정"
|
||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
||||
enable-sounds-desc: "글이나 메시지를 송수신하였을 때 소리를 재생합니다. 이 설정은 브라우저에 저장됩니다."
|
||||
volume: "음량"
|
||||
test: "테스트"
|
||||
language: "언어"
|
||||
pick-language: "언어 설정"
|
||||
recommended: "추천"
|
||||
auto: "자동"
|
||||
specify-language: "언어 지정"
|
||||
language-desc: "변경사항은 페이지를 새로고침한 뒤에 반영됩니다."
|
||||
cache: "캐시"
|
||||
clean-cache: "지우기"
|
||||
cache-warn: "지우기를 실행하면 브라우저에 저장된 계정 정보 캐시, 글이나 답글 및 메시지의 임시 저장, 그 외 데이터 (설정 정보 포함) 가 삭제 됩니다. 지우기 작업을 수행한 후 페이지를 다시 로드해야 합니다."
|
||||
@ -1004,15 +1005,16 @@ admin/views/instance.vue:
|
||||
external-user-recommendation-engine-desc: "예: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
||||
external-user-recommendation-timeout: "타임 아웃"
|
||||
external-user-recommendation-timeout-desc: "밀리초 (예: 300000)"
|
||||
email-config: "メールサーバーの設定"
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
email-config: "메일 서버 설정"
|
||||
email-config-info: "메일 주소 확인 혹은 암호 재설정에 사용 됩니다."
|
||||
enable-email: "메일 발신 활성화"
|
||||
email: "메일 주소"
|
||||
smtp-secure: "SMTP 연결에 암시적으로 SSL/TLS를 사용"
|
||||
smtp-secure-info: "STARTTLS를 사용 시 ON으로 합니다."
|
||||
smtp-host: "SMTP 호스트"
|
||||
smtp-port: "SMTP 포트"
|
||||
smtp-user: "SMTP 사용자"
|
||||
smtp-pass: "SMTP 비밀번호"
|
||||
admin/views/charts.vue:
|
||||
title: "차트"
|
||||
per-day: "1일마다"
|
||||
@ -1360,11 +1362,6 @@ 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: "저는 통신 대역폭이 제한되어 있습니다"
|
||||
@ -1387,8 +1384,8 @@ mobile/views/pages/settings.vue:
|
||||
note-visibility: "게시물의 공개 범위"
|
||||
default-note-visibility: "기본 공개 범위"
|
||||
remember-note-visibility: "글의 공개 범위를 기억하기"
|
||||
web-search-engine: "ウェブ検索エンジン"
|
||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
||||
web-search-engine: "웹 검색엔진"
|
||||
web-search-engine-desc: "예: https://www.google.com/?#q={{query}}"
|
||||
disable-via-mobile: "작성하는 글에 \"모바일에서 작성함\" 을 붙이지 않음"
|
||||
load-raw-images: "첨부 이미지를 고품질로 표시"
|
||||
load-remote-media: "원격 서버의 미디어를 표시"
|
||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
||||
block: "차단"
|
||||
unblock: "차단 해제"
|
||||
years-old: "{age}세"
|
||||
push-to-list: "리스트에 추가"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "최근 글"
|
||||
images: "이미지"
|
||||
|
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
||||
enable-sounds-desc: "Een geluid afspelen bij het ontvangen van een bericht. Deze instelling wordt opgeslagen in je browser."
|
||||
volume: "Volume"
|
||||
test: "Testen"
|
||||
language: "Taal"
|
||||
pick-language: "Selecteer een taal"
|
||||
recommended: "Aanbevolen"
|
||||
auto: "Automatisch"
|
||||
specify-language: "Taal opgeven"
|
||||
language-desc: "Je moet de pagina herladen om de wijzigingen toe te passen."
|
||||
cache: "Cache"
|
||||
clean-cache: "Opschonen"
|
||||
cache-warn: "De cache van je accountinformatie/berichten/antwoorden/instellingen wordt verwijderd. Je moet de pagina herladen na het opschonen."
|
||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
||||
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "Kies een bestand"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "Ingelogd als {}"
|
||||
lang: "Taal"
|
||||
lang-tip: "Je moet de pagina herladen om de wijzigingen toe te passen."
|
||||
recommended: "Aanbevolen"
|
||||
auto: "Automatisch"
|
||||
specify-language: "Taal opgeven"
|
||||
design: "Ontwerp en weergave"
|
||||
dark-mode: "Donkere modus"
|
||||
i-am-under-limited-internet: "Ik heb beperkt internet"
|
||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "Recente notities"
|
||||
images: "Afbeeldingen"
|
||||
|
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||
volume: "Volum"
|
||||
test: "Test"
|
||||
language: "Språk"
|
||||
pick-language: "Velg språk"
|
||||
recommended: "Anbefalt"
|
||||
auto: "Automatisk"
|
||||
specify-language: "Angi språk"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "Hurtiglager"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
||||
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "ファイルを選択"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "{}としてサインイン中"
|
||||
lang: "Språk"
|
||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
||||
recommended: "Anbefalt"
|
||||
auto: "Automatisk"
|
||||
specify-language: "Angi språk"
|
||||
design: "デザインと表示"
|
||||
dark-mode: "ダークモード"
|
||||
i-am-under-limited-internet: "私は通信を制限されている"
|
||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "Nylige innlegg"
|
||||
images: "Bilder"
|
||||
|
@ -16,7 +16,7 @@ common:
|
||||
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
||||
ui: "Interfejs"
|
||||
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
||||
drive: "ドライブ"
|
||||
drive: "Dysk"
|
||||
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
||||
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
||||
adblock:
|
||||
@ -53,7 +53,7 @@ common:
|
||||
years_ago: "{} lat temu"
|
||||
month-and-day: "{month}-{day}"
|
||||
trash: "Kosz"
|
||||
drive: "ドライブ"
|
||||
drive: "Dysk"
|
||||
messaging: "トーク"
|
||||
weekday-short:
|
||||
sunday: "N"
|
||||
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
||||
enable-sounds-desc: "Odtwarzaj dźwięk przy wstawianiu wpisów, wysyłaniu lub otrzymywaniu wiadomości. Opcja ta jest zapamiętywana przez przeglądarkę."
|
||||
volume: "Głośność"
|
||||
test: "Test"
|
||||
language: "Język"
|
||||
pick-language: "Wybierz język"
|
||||
recommended: "Zalecane"
|
||||
auto: "Automatycznie"
|
||||
specify-language: "Wybierz język"
|
||||
language-desc: "Aby zmiany zostały uwzględnione, odśwież stronę."
|
||||
cache: "Pamięć podręczna"
|
||||
clean-cache: "Wyczyść"
|
||||
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."
|
||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
||||
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
||||
select-file: "Wybierz plik"
|
||||
mobile/views/pages/settings.vue:
|
||||
signed-in-as: "Zalogowany jako {}"
|
||||
lang: "Język"
|
||||
lang-tip: "Aby zmiany zostały uwzględnione, odśwież stronę."
|
||||
recommended: "Zalecany"
|
||||
auto: "Automatycznie"
|
||||
specify-language: "Wybierz język"
|
||||
design: "Wygląd i wyświetlanie"
|
||||
dark-mode: "Tryb ciemny"
|
||||
i-am-under-limited-internet: "Ograniczaj zużycie transferu"
|
||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age} lat"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "Ostatnie wpisy"
|
||||
images: "Zdjęcia"
|
||||
|
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
language: "言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
||||
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
@ -1360,11 +1362,6 @@ 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: "私は通信を制限されている"
|
||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "Notas recentes"
|
||||
images: "Imagens"
|
||||
|
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{}人が投稿"
|
||||
empty: "トレンドなし"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "表示言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
info: "変更はページの再度読み込み後に反映されます。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "プロフィール"
|
||||
name: "名前"
|
||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||
volume: "ボリューム"
|
||||
test: "テスト"
|
||||
language: "言語"
|
||||
pick-language: "言語を選択"
|
||||
recommended: "推奨"
|
||||
auto: "自動"
|
||||
specify-language: "言語を指定"
|
||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
||||
cache: "キャッシュ"
|
||||
clean-cache: "クリーンアップ"
|
||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
||||
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
@ -1360,11 +1362,6 @@ 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: "私は通信を制限されている"
|
||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
||||
block: "ブロック"
|
||||
unblock: "ブロック解除"
|
||||
years-old: "{age}歳"
|
||||
push-to-list: "リストに追加"
|
||||
select-list: "リストを選択してください"
|
||||
list-pushed: "{user}を{list}に追加しました"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近の投稿"
|
||||
images: "画像"
|
||||
|
@ -26,7 +26,7 @@ common:
|
||||
close: "关闭"
|
||||
do-not-copy-paste: "请不要在这里输入或粘贴代码。您帐户可能会受到损害。"
|
||||
load-more: "加载更多"
|
||||
enter-password: "パスワードを入力してください"
|
||||
enter-password: "请输入您的密码"
|
||||
got-it: "没问题"
|
||||
customization-tips:
|
||||
title: "客制化提示"
|
||||
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
||||
common/views/components/trends.vue:
|
||||
count: "{} 被提到"
|
||||
empty: "没有流行的标签"
|
||||
common/views/components/language-settings.vue:
|
||||
title: "显示语言"
|
||||
pick-language: "选择一个语言"
|
||||
recommended: "推荐"
|
||||
auto: "自动"
|
||||
specify-language: "指定语言"
|
||||
info: "你需要刷新这个页面来应用更改。"
|
||||
common/views/components/profile-editor.vue:
|
||||
title: "简况"
|
||||
name: "名称"
|
||||
@ -458,10 +465,10 @@ common/views/components/profile-editor.vue:
|
||||
saved: "更新配置文件成功"
|
||||
uploading: "正在上传"
|
||||
upload-failed: "上传失败"
|
||||
email: "メール設定"
|
||||
email-address: "メールアドレス"
|
||||
email-verified: "メールアドレスが確認されました"
|
||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
||||
email: "邮件设置"
|
||||
email-address: "电子邮件地址"
|
||||
email-verified: "电子邮件地址已验证"
|
||||
email-not-verified: "电子邮件地址还没有验证哦, 请检查一下收信箱吧~"
|
||||
common/views/widgets/broadcast.vue:
|
||||
fetching: "确认中"
|
||||
no-broadcasts: "没有公告"
|
||||
@ -736,8 +743,8 @@ desktop/views/components/settings.vue:
|
||||
note-visibility: "帖子可见性"
|
||||
default-note-visibility: "默认可见性"
|
||||
remember-note-visibility: "记住帖子可见性"
|
||||
web-search-engine: "ウェブ検索エンジン"
|
||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
||||
web-search-engine: "搜索引擎"
|
||||
web-search-engine-desc: "例如: https://www.google.com/?#q={{query}}"
|
||||
auto-popout: "自动弹出窗口"
|
||||
auto-popout-desc: "如果可用,将使用弹出显示而不是打开新窗口。 此设置存储在浏览器中。"
|
||||
advanced: "更多设置"
|
||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
||||
enable-sounds-desc: "收到帖子/留言时播放声音。 此设置将被存储在浏览器中。"
|
||||
volume: "音量"
|
||||
test: "测试"
|
||||
language: "语言"
|
||||
pick-language: "选择一个语言"
|
||||
recommended: "推荐"
|
||||
auto: "自动"
|
||||
specify-language: "指定语言"
|
||||
language-desc: "你需要刷新这个页面来应用更改。"
|
||||
cache: "缓存"
|
||||
clean-cache: "清除缓存"
|
||||
cache-warn: "将删除存储在浏览器中的帐户信息/帖子/回复/消息/设置的缓存。 清理完毕后需要刷新页面。"
|
||||
@ -1004,15 +1005,16 @@ admin/views/instance.vue:
|
||||
external-user-recommendation-engine-desc: "例如: https://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-misskey-api.cgi?{{host}}+{{user}}+{{limit}}+{{offset}}"
|
||||
external-user-recommendation-timeout: "超时"
|
||||
external-user-recommendation-timeout-desc: "单位为毫秒 (例如:300000)"
|
||||
email-config: "メールサーバーの設定"
|
||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||
enable-email: "メール配信を有効にする"
|
||||
email: "メールアドレス"
|
||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
||||
smtp-host: "SMTPホスト"
|
||||
smtp-port: "SMTPポート"
|
||||
smtp-user: "SMTPユーザー"
|
||||
smtp-pass: "SMTPパスワード"
|
||||
email-config: "电子邮件服务器设置"
|
||||
email-config-info: "用于确认电子邮件和密码重置等。"
|
||||
enable-email: "启用电子邮件送递"
|
||||
email: "电子邮件地址"
|
||||
smtp-secure: "在 SMTP 连接中使用隐式 SSL / TLS"
|
||||
smtp-secure-info: "使用时关闭 STARTTLS。"
|
||||
smtp-host: "SMTP 服务器地址 (主机名)"
|
||||
smtp-port: "SMTP 端口"
|
||||
smtp-user: "SMTP 用户名"
|
||||
smtp-pass: "SMTP 密码"
|
||||
admin/views/charts.vue:
|
||||
title: "历史记录"
|
||||
per-day: "每天"
|
||||
@ -1360,11 +1362,6 @@ 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: "我的带宽有限"
|
||||
@ -1387,8 +1384,8 @@ mobile/views/pages/settings.vue:
|
||||
note-visibility: "帖子可见性"
|
||||
default-note-visibility: "默认可见性"
|
||||
remember-note-visibility: "记住帖子可见性"
|
||||
web-search-engine: "ウェブ検索エンジン"
|
||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
||||
web-search-engine: "搜索引擎"
|
||||
web-search-engine-desc: "例如: https://www.google.com/?#q={{query}}"
|
||||
disable-via-mobile: "不要将帖子标记为“来自手机”"
|
||||
load-raw-images: "以原始质量显示附加图像"
|
||||
load-remote-media: "显示来自远程服务器的媒体"
|
||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
||||
block: "屏蔽"
|
||||
unblock: "取消屏蔽"
|
||||
years-old: "{age}岁"
|
||||
push-to-list: "添加至列表"
|
||||
select-list: "选择一个列表"
|
||||
list-pushed: "成功添加{user}到{list}"
|
||||
mobile/views/pages/user/home.vue:
|
||||
recent-notes: "最近的帖子"
|
||||
images: "图片"
|
||||
|
11
package.json
@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "misskey",
|
||||
"author": "syuilo <i@syuilo.com>",
|
||||
"version": "10.59.2",
|
||||
"clientVersion": "2.0.12277",
|
||||
"version": "10.60.4",
|
||||
"clientVersion": "2.0.12401",
|
||||
"codename": "nighthike",
|
||||
"main": "./built/index.js",
|
||||
"private": true,
|
||||
@ -35,7 +35,7 @@
|
||||
"@types/deep-equal": "1.0.1",
|
||||
"@types/double-ended-queue": "2.1.0",
|
||||
"@types/elasticsearch": "5.0.28",
|
||||
"@types/file-type": "5.2.1",
|
||||
"@types/file-type": "5.2.2",
|
||||
"@types/gulp": "3.8.36",
|
||||
"@types/gulp-htmlmin": "1.3.32",
|
||||
"@types/gulp-mocha": "0.0.32",
|
||||
@ -156,6 +156,7 @@
|
||||
"koa-send": "5.0.0",
|
||||
"koa-slow": "2.1.0",
|
||||
"koa-views": "6.1.4",
|
||||
"langmap": "0.0.16",
|
||||
"loader-utils": "1.1.0",
|
||||
"minio": "7.0.1",
|
||||
"mkdirp": "0.5.1",
|
||||
@ -223,7 +224,7 @@
|
||||
"vue-content-loading": "1.5.3",
|
||||
"vue-cropperjs": "2.2.2",
|
||||
"vue-i18n": "8.3.2",
|
||||
"vue-js-modal": "1.3.26",
|
||||
"vue-js-modal": "1.3.27",
|
||||
"vue-loader": "15.4.2",
|
||||
"vue-marquee-text-component": "1.1.0",
|
||||
"vue-router": "3.0.2",
|
||||
@ -236,7 +237,7 @@
|
||||
"vuex-persistedstate": "2.5.4",
|
||||
"web-push": "3.3.3",
|
||||
"webfinger.js": "2.7.0",
|
||||
"webpack": "4.26.0",
|
||||
"webpack": "4.26.1",
|
||||
"webpack-cli": "3.1.2",
|
||||
"websocket": "1.0.28",
|
||||
"ws": "6.1.2",
|
||||
|
@ -48,15 +48,15 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
remove(i) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'warning',
|
||||
text: this.$t('_remove.are-you-sure').replace('$1', this.announcements.find((_, j) => j == i).title),
|
||||
showCancelButton: true
|
||||
}).then(res => {
|
||||
if (!res) return;
|
||||
}).then(({ canceled }) => {
|
||||
if (canceled) return;
|
||||
this.announcements = this.announcements.filter((_, j) => j !== i);
|
||||
this.save(true);
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('_remove.removed')
|
||||
});
|
||||
@ -68,13 +68,13 @@ export default Vue.extend({
|
||||
broadcasts: this.announcements
|
||||
}).then(() => {
|
||||
if (!silent) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('saved')
|
||||
});
|
||||
}
|
||||
}).catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e
|
||||
});
|
||||
|
@ -75,13 +75,13 @@ export default Vue.extend({
|
||||
url: this.url,
|
||||
aliases: this.aliases.split(' ').filter(x => x.length > 0)
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('add-emoji.added')
|
||||
});
|
||||
this.fetchEmojis();
|
||||
}).catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e
|
||||
});
|
||||
@ -103,12 +103,12 @@ export default Vue.extend({
|
||||
url: emoji.url,
|
||||
aliases: emoji.aliases.split(' ').filter(x => x.length > 0)
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('updated')
|
||||
});
|
||||
}).catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e
|
||||
});
|
||||
@ -116,23 +116,23 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
removeEmoji(emoji) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'warning',
|
||||
text: this.$t('remove-emoji.are-you-sure').replace('$1', emoji.name),
|
||||
showCancelButton: true
|
||||
}).then(res => {
|
||||
if (!res) return;
|
||||
}).then(({ canceled }) => {
|
||||
if (canceled) return;
|
||||
|
||||
this.$root.api('admin/emoji/remove', {
|
||||
id: emoji.id
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('remove-emoji.removed')
|
||||
});
|
||||
this.fetchEmojis();
|
||||
}).catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e
|
||||
});
|
||||
|
@ -212,7 +212,7 @@ export default Vue.extend({
|
||||
this.$root.api('admin/invite').then(x => {
|
||||
this.inviteCode = x.code;
|
||||
}).catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e
|
||||
});
|
||||
@ -258,12 +258,12 @@ export default Vue.extend({
|
||||
smtpUser: this.smtpUser,
|
||||
smtpPass: this.smtpPass
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('saved')
|
||||
});
|
||||
}).catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e
|
||||
});
|
||||
|
@ -34,14 +34,14 @@ export default Vue.extend({
|
||||
const process = async () => {
|
||||
const user = await this.$root.api('users/show', parseAcct(this.username));
|
||||
await this.$root.api('admin/moderators/add', { userId: user.id });
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('add-moderator.added')
|
||||
});
|
||||
};
|
||||
|
||||
await process().catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e.toString()
|
||||
});
|
||||
|
@ -115,12 +115,12 @@ export default Vue.extend({
|
||||
return await this.$root.api('users/show', this.target.startsWith('@') ? parseAcct(this.target) : { userId: this.target });
|
||||
} catch (e) {
|
||||
if (e == 'user not found') {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('user-not-found')
|
||||
});
|
||||
} else {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e.toString()
|
||||
});
|
||||
@ -138,7 +138,7 @@ export default Vue.extend({
|
||||
async resetPassword() {
|
||||
const user = await this.fetchUser();
|
||||
this.$root.api('admin/reset-password', { userId: user.id }).then(res => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('password-updated', { password: res.password })
|
||||
});
|
||||
@ -151,14 +151,14 @@ export default Vue.extend({
|
||||
const process = async () => {
|
||||
const user = await this.fetchUser();
|
||||
await this.$root.api('admin/verify-user', { userId: user.id });
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('verified')
|
||||
});
|
||||
};
|
||||
|
||||
await process().catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e.toString()
|
||||
});
|
||||
@ -173,14 +173,14 @@ export default Vue.extend({
|
||||
const process = async () => {
|
||||
const user = await this.fetchUser();
|
||||
await this.$root.api('admin/unverify-user', { userId: user.id });
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('unverified')
|
||||
});
|
||||
};
|
||||
|
||||
await process().catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e.toString()
|
||||
});
|
||||
@ -195,14 +195,14 @@ export default Vue.extend({
|
||||
const process = async () => {
|
||||
const user = await this.fetchUser();
|
||||
await this.$root.api('admin/suspend-user', { userId: user.id });
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('suspended')
|
||||
});
|
||||
};
|
||||
|
||||
await process().catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e.toString()
|
||||
});
|
||||
@ -217,14 +217,14 @@ export default Vue.extend({
|
||||
const process = async () => {
|
||||
const user = await this.fetchUser();
|
||||
await this.$root.api('admin/unsuspend-user', { userId: user.id });
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('unsuspended')
|
||||
});
|
||||
};
|
||||
|
||||
await process().catch(e => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: e.toString()
|
||||
});
|
||||
|
@ -21,12 +21,12 @@ export default async function($root: any, force = false, silent = false) {
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
if (!silent) {
|
||||
$root.alert({
|
||||
/*if (!silent) {
|
||||
$root.dialog({
|
||||
title: $root.$t('@.update-available-title'),
|
||||
text: $root.$t('@.update-available', { newer, current })
|
||||
});
|
||||
}
|
||||
}*/
|
||||
|
||||
return newer;
|
||||
} else {
|
||||
|
@ -4,7 +4,7 @@ export default ($root: any) => {
|
||||
require('fuckadblock');
|
||||
|
||||
function adBlockDetected() {
|
||||
$root.alert({
|
||||
$root.dialog({
|
||||
title: $root.$t('@.adblock.detected'),
|
||||
text: $root.$t('@.adblock.warning')
|
||||
});
|
||||
|
@ -142,7 +142,7 @@ export default (opts: Opts = {}) => ({
|
||||
this.$root.api('notes/favorites/create', {
|
||||
noteId: this.appearNote.id
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
splash: true
|
||||
});
|
||||
|
@ -50,10 +50,13 @@ export default Vue.extend({
|
||||
|
||||
methods: {
|
||||
regenerateToken() {
|
||||
this.$input({
|
||||
this.$root.dialog({
|
||||
title: this.$t('enter-password'),
|
||||
type: 'password'
|
||||
}).then(password => {
|
||||
input: {
|
||||
type: 'password'
|
||||
}
|
||||
}).then(({ canceled, result: password }) => {
|
||||
if (canceled) return;
|
||||
this.$root.api('i/regenerate_token', {
|
||||
password: password
|
||||
});
|
||||
|
@ -187,7 +187,8 @@ export default Vue.extend({
|
||||
} else {
|
||||
this.$root.api('users/search', {
|
||||
query: this.q,
|
||||
limit: 30
|
||||
limit: 10,
|
||||
detail: false
|
||||
}).then(users => {
|
||||
this.users = users;
|
||||
this.fetching = false;
|
||||
|
@ -2,12 +2,17 @@
|
||||
<div class="felqjxyj" :class="{ splash }">
|
||||
<div class="bg" ref="bg" @click="onBgClick"></div>
|
||||
<div class="main" ref="main">
|
||||
<div class="icon" :class="type"><fa :icon="icon"/></div>
|
||||
<div class="icon" v-if="!input && !select && !user" :class="type"><fa :icon="icon"/></div>
|
||||
<header v-if="title" v-html="title"></header>
|
||||
<div class="body" v-if="text" v-html="text"></div>
|
||||
<ui-input v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder" @keydown="onInputKeydown"></ui-input>
|
||||
<ui-input v-if="user" v-model="userInputValue" autofocus @keydown="onInputKeydown"><span slot="prefix">@</span></ui-input>
|
||||
<ui-select v-if="select" v-model="selectedValue">
|
||||
<option v-for="item in select.items" :value="item.value">{{ item.text }}</option>
|
||||
</ui-select>
|
||||
<ui-horizon-group no-grow class="buttons fit-bottom" v-if="!splash">
|
||||
<ui-button @click="ok" primary autofocus>OK</ui-button>
|
||||
<ui-button @click="cancel" v-if="showCancelButton">Cancel</ui-button>
|
||||
<ui-button @click="ok" primary :autofocus="!input && !select && !user">OK</ui-button>
|
||||
<ui-button @click="cancel" v-if="showCancelButton || input || select || user">Cancel</ui-button>
|
||||
</ui-horizon-group>
|
||||
</div>
|
||||
</div>
|
||||
@ -17,6 +22,7 @@
|
||||
import Vue from 'vue';
|
||||
import * as anime from 'animejs';
|
||||
import { faTimesCircle, faQuestionCircle } from '@fortawesome/free-regular-svg-icons';
|
||||
import parseAcct from "../../../../../misc/acct/parse";
|
||||
|
||||
export default Vue.extend({
|
||||
props: {
|
||||
@ -33,6 +39,15 @@ export default Vue.extend({
|
||||
type: String,
|
||||
required: false
|
||||
},
|
||||
input: {
|
||||
required: false
|
||||
},
|
||||
select: {
|
||||
required: false
|
||||
},
|
||||
user: {
|
||||
required: false
|
||||
},
|
||||
showCancelButton: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
@ -43,6 +58,14 @@ export default Vue.extend({
|
||||
}
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
inputValue: this.input && this.input.default ? this.input.default : null,
|
||||
userInputValue: null,
|
||||
selectedValue: null
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
icon(): any {
|
||||
switch (this.type) {
|
||||
@ -82,9 +105,21 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
methods: {
|
||||
ok() {
|
||||
this.$emit('ok');
|
||||
this.close();
|
||||
async ok() {
|
||||
if (this.user) {
|
||||
const user = await this.$root.api('users/show', parseAcct(this.userInputValue));
|
||||
if (user) {
|
||||
this.$emit('ok', user);
|
||||
this.close();
|
||||
}
|
||||
} else {
|
||||
const result =
|
||||
this.input ? this.inputValue :
|
||||
this.select ? this.selectedValue :
|
||||
true;
|
||||
this.$emit('ok', result);
|
||||
this.close();
|
||||
}
|
||||
},
|
||||
|
||||
cancel() {
|
||||
@ -114,6 +149,14 @@ export default Vue.extend({
|
||||
|
||||
onBgClick() {
|
||||
this.cancel();
|
||||
},
|
||||
|
||||
onInputKeydown(e) {
|
||||
if (e.which == 13) { // Enter
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.ok();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -180,8 +223,11 @@ export default Vue.extend({
|
||||
display block
|
||||
margin 0 auto
|
||||
|
||||
& + header
|
||||
margin-top 16px
|
||||
|
||||
> header
|
||||
margin 16px 0 8px 0
|
||||
margin 0 0 8px 0
|
||||
font-weight bold
|
||||
font-size 20px
|
||||
|
@ -1,64 +0,0 @@
|
||||
<template>
|
||||
<div class="mk-discord-setting">
|
||||
<p>{{ $t('description') }}</p>
|
||||
<p class="account" v-if="$store.state.i.discord" :title="`Discord ID: ${$store.state.i.discord.id}`">{{ $t('connected-to') }}: <a :href="`https://discordapp.com/users/${$store.state.i.discord.id}`" target="_blank">@{{ $store.state.i.discord.username }}#{{ $store.state.i.discord.discriminator }}</a></p>
|
||||
<p>
|
||||
<a :href="`${apiUrl}/connect/discord`" target="_blank" @click.prevent="connect">{{ $store.state.i.discord ? this.$t('reconnect') : this.$t('connect') }}</a>
|
||||
<span v-if="$store.state.i.discord"> or </span>
|
||||
<a :href="`${apiUrl}/disconnect/discord`" target="_blank" v-if="$store.state.i.discord" @click.prevent="disconnect">{{ $t('disconnect') }}</a>
|
||||
</p>
|
||||
<p class="id" v-if="$store.state.i.discord">Discord ID: {{ $store.state.i.discord.id }}</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { apiUrl } from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/discord-setting.vue'),
|
||||
data() {
|
||||
return {
|
||||
form: null,
|
||||
apiUrl
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$watch('$store.state.i', () => {
|
||||
if (this.$store.state.i.discord && this.form)
|
||||
this.form.close();
|
||||
}, {
|
||||
deep: true
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
connect() {
|
||||
this.form = window.open(apiUrl + '/connect/discord',
|
||||
'discord_connect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
disconnect() {
|
||||
window.open(apiUrl + '/disconnect/discord',
|
||||
'discord_disconnect_window',
|
||||
'height=570, width=520');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.mk-discord-setting
|
||||
.account
|
||||
border solid 1px #e1e8ed
|
||||
border-radius 4px
|
||||
padding 16px
|
||||
|
||||
a
|
||||
font-weight bold
|
||||
color inherit
|
||||
|
||||
.id
|
||||
color #8899a6
|
||||
</style>
|
@ -99,23 +99,22 @@ export default Vue.extend({
|
||||
this.$emit('go', game);
|
||||
},
|
||||
|
||||
match() {
|
||||
this.$input({
|
||||
title: this.$t('enter-username')
|
||||
}).then(username => {
|
||||
this.$root.api('users/show', {
|
||||
username
|
||||
}).then(user => {
|
||||
this.$root.api('games/reversi/match', {
|
||||
userId: user.id
|
||||
}).then(res => {
|
||||
if (res == null) {
|
||||
this.$emit('matching', user);
|
||||
} else {
|
||||
this.$emit('go', res);
|
||||
}
|
||||
});
|
||||
});
|
||||
async match() {
|
||||
const { result: user } = await this.$root.dialog({
|
||||
title: this.$t('enter-username'),
|
||||
user: {
|
||||
local: true
|
||||
}
|
||||
});
|
||||
if (user == null) return;
|
||||
this.$root.api('games/reversi/match', {
|
||||
userId: user.id
|
||||
}).then(res => {
|
||||
if (res == null) {
|
||||
this.$emit('matching', user);
|
||||
} else {
|
||||
this.$emit('go', res);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -1,64 +0,0 @@
|
||||
<template>
|
||||
<div class="mk-github-setting">
|
||||
<p>{{ $t('description') }}</p>
|
||||
<p class="account" v-if="$store.state.i.github" :title="`GitHub ID: ${$store.state.i.github.id}`">{{ $t('connected-to') }}: <a :href="`https://github.com/${$store.state.i.github.login}`" target="_blank">@{{ $store.state.i.github.login }}</a></p>
|
||||
<p>
|
||||
<a :href="`${apiUrl}/connect/github`" target="_blank" @click.prevent="connect">{{ $store.state.i.github ? this.$t('reconnect') : this.$t('connect') }}</a>
|
||||
<span v-if="$store.state.i.github"> or </span>
|
||||
<a :href="`${apiUrl}/disconnect/github`" target="_blank" v-if="$store.state.i.github" @click.prevent="disconnect">{{ $t('disconnect') }}</a>
|
||||
</p>
|
||||
<p class="id" v-if="$store.state.i.github">GitHub ID: {{ $store.state.i.github.id }}</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { apiUrl } from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/github-setting.vue'),
|
||||
data() {
|
||||
return {
|
||||
form: null,
|
||||
apiUrl
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$watch('$store.state.i', () => {
|
||||
if (this.$store.state.i.github && this.form)
|
||||
this.form.close();
|
||||
}, {
|
||||
deep: true
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
connect() {
|
||||
this.form = window.open(apiUrl + '/connect/github',
|
||||
'github_connect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
disconnect() {
|
||||
window.open(apiUrl + '/disconnect/github',
|
||||
'github_disconnect_window',
|
||||
'height=570, width=520');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.mk-github-setting
|
||||
.account
|
||||
border solid 1px #e1e8ed
|
||||
border-radius 4px
|
||||
padding 16px
|
||||
|
||||
a
|
||||
font-weight bold
|
||||
color inherit
|
||||
|
||||
.id
|
||||
color #8899a6
|
||||
</style>
|
@ -0,0 +1,96 @@
|
||||
<template>
|
||||
<ui-card>
|
||||
<div slot="title"><fa icon="share-alt"/> {{ $t('title') }}</div>
|
||||
|
||||
<section>
|
||||
<header><fa :icon="['fab', 'twitter']"/> Twitter</header>
|
||||
<p v-if="$store.state.i.twitter">{{ $t('connected-to') }}: <a :href="`https://twitter.com/${$store.state.i.twitter.screenName}`" target="_blank">@{{ $store.state.i.twitter.screenName }}</a></p>
|
||||
<ui-button v-if="$store.state.i.twitter" @click="disconnectTwitter">{{ $t('disconnect') }}</ui-button>
|
||||
<ui-button v-else @click="connectTwitter">{{ $t('connect') }}</ui-button>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<header><fa :icon="['fab', 'discord']"/> Discord</header>
|
||||
<p v-if="$store.state.i.discord">{{ $t('connected-to') }}: <a :href="`https://discord.com/${$store.state.i.discord.screenName}`" target="_blank">@{{ $store.state.i.discord.screenName }}</a></p>
|
||||
<ui-button v-if="$store.state.i.discord" @click="disconnectDiscord">{{ $t('disconnect') }}</ui-button>
|
||||
<ui-button v-else @click="connectDiscord">{{ $t('connect') }}</ui-button>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<header><fa :icon="['fab', 'github']"/> GitHub</header>
|
||||
<p v-if="$store.state.i.github">{{ $t('connected-to') }}: <a :href="`https://github.com/${$store.state.i.github.screenName}`" target="_blank">@{{ $store.state.i.github.screenName }}</a></p>
|
||||
<ui-button v-if="$store.state.i.github" @click="disconnectGithub">{{ $t('disconnect') }}</ui-button>
|
||||
<ui-button v-else @click="connectGithub">{{ $t('connect') }}</ui-button>
|
||||
</section>
|
||||
</ui-card>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { apiUrl } from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/integration-settings.vue'),
|
||||
|
||||
data() {
|
||||
return {
|
||||
apiUrl,
|
||||
twitterForm: null,
|
||||
discordForm: null,
|
||||
githubForm: null,
|
||||
};
|
||||
},
|
||||
|
||||
mounted() {
|
||||
this.$watch('$store.state.i', () => {
|
||||
if (this.$store.state.i.twitter) {
|
||||
if (this.twitterForm) this.twitterForm.close();
|
||||
}
|
||||
}, {
|
||||
deep: true
|
||||
});
|
||||
},
|
||||
|
||||
methods: {
|
||||
connectTwitter() {
|
||||
this.twitterForm = window.open(apiUrl + '/connect/twitter',
|
||||
'twitter_connect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
disconnectTwitter() {
|
||||
window.open(apiUrl + '/disconnect/twitter',
|
||||
'twitter_disconnect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
connectDiscord() {
|
||||
this.discordForm = window.open(apiUrl + '/connect/discord',
|
||||
'discord_connect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
disconnectDiscord() {
|
||||
window.open(apiUrl + '/disconnect/discord',
|
||||
'discord_disconnect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
connectGithub() {
|
||||
this.githubForm = window.open(apiUrl + '/connect/github',
|
||||
'github_connect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
disconnectGithub() {
|
||||
window.open(apiUrl + '/disconnect/github',
|
||||
'github_disconnect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
</style>
|
54
src/client/app/common/views/components/language-settings.vue
Normal file
@ -0,0 +1,54 @@
|
||||
<template>
|
||||
<ui-card>
|
||||
<div slot="title"><fa icon="language"/> {{ $t('title') }}</div>
|
||||
|
||||
<section class="fit-top">
|
||||
<ui-select v-model="lang" :placeholder="$t('pick-language')">
|
||||
<optgroup :label="$t('recommended')">
|
||||
<option value="">{{ $t('auto') }}</option>
|
||||
</optgroup>
|
||||
|
||||
<optgroup :label="$t('specify-language')">
|
||||
<option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option>
|
||||
</optgroup>
|
||||
</ui-select>
|
||||
<ui-info>Current: <i>{{ currentLanguage }}</i></ui-info>
|
||||
<ui-info warn>{{ $t('info') }}</ui-info>
|
||||
</section>
|
||||
</ui-card>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { langs } from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/language-settings.vue'),
|
||||
|
||||
data() {
|
||||
return {
|
||||
langs,
|
||||
currentLanguage: 'Unknown',
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
lang: {
|
||||
get() { return this.$store.state.device.lang; },
|
||||
set(value) { this.$store.commit('device/set', { key: 'lang', value }); }
|
||||
},
|
||||
},
|
||||
|
||||
created() {
|
||||
try {
|
||||
const locale = JSON.parse(localStorage.getItem('locale') || "{}");
|
||||
const localeKey = localStorage.getItem('localeKey');
|
||||
this.currentLanguage = `${locale.meta.lang} (${localeKey})`;
|
||||
} catch { }
|
||||
},
|
||||
|
||||
methods: {
|
||||
}
|
||||
});
|
||||
</script>
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="onchrpzrvnoruiaenfcqvccjfuupzzwv">
|
||||
<div class="onchrpzrvnoruiaenfcqvccjfuupzzwv" :class="{ big: $root.isMobile }">
|
||||
<div class="backdrop" ref="backdrop" @click="close"></div>
|
||||
<div class="popover" :class="{ hukidasi }" ref="popover">
|
||||
<template v-for="item, i in items">
|
||||
@ -125,6 +125,11 @@ export default Vue.extend({
|
||||
|
||||
position initial
|
||||
|
||||
&.big
|
||||
> .popover
|
||||
> button
|
||||
font-size 15px
|
||||
|
||||
> .backdrop
|
||||
position fixed
|
||||
top 0
|
||||
|
@ -115,9 +115,11 @@ export default Vue.extend({
|
||||
}
|
||||
this.$root.api('users/search', {
|
||||
query: this.q,
|
||||
max: 5
|
||||
localOnly: true,
|
||||
limit: 10,
|
||||
detail: false
|
||||
}).then(users => {
|
||||
this.result = users;
|
||||
this.result = users.filter(user => user.id != this.$store.state.i.id);
|
||||
});
|
||||
},
|
||||
navigate(user) {
|
||||
|
@ -78,7 +78,7 @@ export default Vue.extend({
|
||||
this.$root.api('i/pin', {
|
||||
noteId: this.note.id
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
splash: true
|
||||
});
|
||||
@ -95,12 +95,12 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
del() {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'warning',
|
||||
text: this.$t('delete-confirm'),
|
||||
showCancelButton: true
|
||||
}).then(res => {
|
||||
if (!res) return;
|
||||
}).then(({ canceled }) => {
|
||||
if (canceled) return;
|
||||
|
||||
this.$root.api('notes/delete', {
|
||||
noteId: this.note.id
|
||||
@ -114,7 +114,7 @@ export default Vue.extend({
|
||||
this.$root.api('notes/favorites/create', {
|
||||
noteId: this.note.id
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
splash: true
|
||||
});
|
||||
@ -126,7 +126,7 @@ export default Vue.extend({
|
||||
this.$root.api('notes/favorites/delete', {
|
||||
noteId: this.note.id
|
||||
}).then(() => {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
splash: true
|
||||
});
|
||||
|
@ -11,34 +11,43 @@ import i18n from '../../../i18n';
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/password-settings.vue'),
|
||||
methods: {
|
||||
reset() {
|
||||
this.$input({
|
||||
async reset() {
|
||||
const { canceled: canceled1, result: currentPassword } = await this.$root.dialog({
|
||||
title: this.$t('enter-current-password'),
|
||||
type: 'password'
|
||||
}).then(currentPassword => {
|
||||
this.$input({
|
||||
title: this.$t('enter-new-password'),
|
||||
input: {
|
||||
type: 'password'
|
||||
}).then(newPassword => {
|
||||
this.$input({
|
||||
title: this.$t('enter-new-password-again'),
|
||||
type: 'password'
|
||||
}).then(newPassword2 => {
|
||||
if (newPassword !== newPassword2) {
|
||||
this.$root.alert({
|
||||
title: null,
|
||||
text: this.$t('not-match')
|
||||
});
|
||||
return;
|
||||
}
|
||||
this.$root.api('i/change_password', {
|
||||
currentPasword: currentPassword,
|
||||
newPassword: newPassword
|
||||
}).then(() => {
|
||||
this.$notify(this.$t('changed'));
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
if (canceled1) return;
|
||||
|
||||
const { canceled: canceled2, result: newPassword } = await this.$root.dialog({
|
||||
title: this.$t('enter-new-password'),
|
||||
input: {
|
||||
type: 'password'
|
||||
}
|
||||
});
|
||||
if (canceled2) return;
|
||||
|
||||
const { canceled: canceled3, result: newPassword2 } = await this.$root.dialog({
|
||||
title: this.$t('enter-new-password-again'),
|
||||
input: {
|
||||
type: 'password'
|
||||
}
|
||||
});
|
||||
if (canceled3) return;
|
||||
|
||||
if (newPassword !== newPassword2) {
|
||||
this.$root.dialog({
|
||||
title: null,
|
||||
text: this.$t('not-match')
|
||||
});
|
||||
return;
|
||||
}
|
||||
this.$root.api('i/change_password', {
|
||||
currentPasword: currentPassword,
|
||||
newPassword: newPassword
|
||||
}).then(() => {
|
||||
this.$notify(this.$t('changed'));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,12 @@
|
||||
<span>{{ $t('description') }}</span>
|
||||
</ui-textarea>
|
||||
|
||||
<ui-select v-model="lang">
|
||||
<span slot="label">{{ $t('language') }}</span>
|
||||
<span slot="icon"><fa icon="language"/></span>
|
||||
<option v-for="lang in unique(Object.values(langmap).map(x => x.nativeName)).map(name => Object.keys(langmap).find(k => langmap[k].nativeName == name))" :value="lang" :key="lang">{{ langmap[lang].nativeName }}</option>
|
||||
</ui-select>
|
||||
|
||||
<ui-input type="file" @change="onAvatarChange">
|
||||
<span>{{ $t('avatar') }}</span>
|
||||
<span slot="icon"><fa icon="image"/></span>
|
||||
@ -87,12 +93,16 @@ import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { apiUrl, host } from '../../../config';
|
||||
import { toUnicode } from 'punycode';
|
||||
import langmap from 'langmap';
|
||||
import { unique } from '../../../../../prelude/array';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/profile-editor.vue'),
|
||||
|
||||
data() {
|
||||
return {
|
||||
unique,
|
||||
langmap,
|
||||
host: toUnicode(host),
|
||||
enableEmail: false,
|
||||
email: null,
|
||||
@ -100,6 +110,7 @@ export default Vue.extend({
|
||||
username: null,
|
||||
location: null,
|
||||
description: null,
|
||||
lang: null,
|
||||
birthday: null,
|
||||
avatarId: null,
|
||||
bannerId: null,
|
||||
@ -137,6 +148,7 @@ export default Vue.extend({
|
||||
this.username = this.$store.state.i.username;
|
||||
this.location = this.$store.state.i.profile.location;
|
||||
this.description = this.$store.state.i.description;
|
||||
this.lang = this.$store.state.i.lang;
|
||||
this.birthday = this.$store.state.i.profile.birthday;
|
||||
this.avatarId = this.$store.state.i.avatarId;
|
||||
this.bannerId = this.$store.state.i.bannerId;
|
||||
@ -198,6 +210,7 @@ export default Vue.extend({
|
||||
name: this.name || null,
|
||||
location: this.location || null,
|
||||
description: this.description || null,
|
||||
lang: this.lang,
|
||||
birthday: this.birthday || null,
|
||||
avatarId: this.avatarId || undefined,
|
||||
bannerId: this.bannerId || undefined,
|
||||
@ -213,7 +226,7 @@ export default Vue.extend({
|
||||
this.$store.state.i.bannerUrl = i.bannerUrl;
|
||||
|
||||
if (notify) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('saved')
|
||||
});
|
||||
@ -222,10 +235,13 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
updateEmail() {
|
||||
this.$input({
|
||||
this.$root.dialog({
|
||||
title: this.$t('@.enter-password'),
|
||||
type: 'password'
|
||||
}).then(password => {
|
||||
input: {
|
||||
type: 'password'
|
||||
}
|
||||
}).then(({ canceled, result: password }) => {
|
||||
if (canceled) return;
|
||||
this.$root.api('i/update_email', {
|
||||
password: password,
|
||||
email: this.email == '' ? null : this.email
|
||||
|
@ -223,7 +223,7 @@ export default Vue.extend({
|
||||
try {
|
||||
theme = JSON5.parse(code);
|
||||
} catch (e) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('invalid-theme')
|
||||
});
|
||||
@ -236,7 +236,7 @@ export default Vue.extend({
|
||||
}
|
||||
|
||||
if (theme.id == null) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'error',
|
||||
text: this.$t('invalid-theme')
|
||||
});
|
||||
@ -244,7 +244,7 @@ export default Vue.extend({
|
||||
}
|
||||
|
||||
if (this.$store.state.device.themes.some(t => t.id == theme.id)) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'info',
|
||||
text: this.$t('already-installed')
|
||||
});
|
||||
@ -256,7 +256,7 @@ export default Vue.extend({
|
||||
key: 'themes', value: themes
|
||||
});
|
||||
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('installed').replace('{}', theme.name)
|
||||
});
|
||||
@ -269,7 +269,7 @@ export default Vue.extend({
|
||||
key: 'themes', value: themes
|
||||
});
|
||||
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'info',
|
||||
text: this.$t('uninstalled').replace('{}', theme.name)
|
||||
});
|
||||
@ -306,7 +306,7 @@ export default Vue.extend({
|
||||
const theme = this.myTheme;
|
||||
|
||||
if (theme.name == null || theme.name.trim() == '') {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'warning',
|
||||
text: this.$t('theme-name-required')
|
||||
});
|
||||
@ -320,7 +320,7 @@ export default Vue.extend({
|
||||
key: 'themes', value: themes
|
||||
});
|
||||
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
text: this.$t('saved')
|
||||
});
|
||||
|
@ -1,65 +0,0 @@
|
||||
<template>
|
||||
<div class="mk-twitter-setting">
|
||||
<p>{{ $t('description') }}</p>
|
||||
<p class="account" v-if="$store.state.i.twitter" :title="`Twitter ID: ${$store.state.i.twitter.userId}`">{{ $t('connected-to') }}: <a :href="`https://twitter.com/${$store.state.i.twitter.screenName}`" target="_blank">@{{ $store.state.i.twitter.screenName }}</a></p>
|
||||
<p>
|
||||
<a :href="`${apiUrl}/connect/twitter`" target="_blank" @click.prevent="connect">{{ $store.state.i.twitter ? this.$t('reconnect') : this.$t('connect') }}</a>
|
||||
<span v-if="$store.state.i.twitter"> or </span>
|
||||
<a :href="`${apiUrl}/disconnect/twitter`" target="_blank" v-if="$store.state.i.twitter" @click.prevent="disconnect">{{ $t('disconnect') }}</a>
|
||||
</p>
|
||||
<p class="id" v-if="$store.state.i.twitter">Twitter ID: {{ $store.state.i.twitter.userId }}</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { apiUrl } from '../../../config';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('common/views/components/twitter-setting.vue'),
|
||||
data() {
|
||||
return {
|
||||
form: null,
|
||||
apiUrl
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.$watch('$store.state.i', () => {
|
||||
if (this.$store.state.i.twitter) {
|
||||
if (this.form) this.form.close();
|
||||
}
|
||||
}, {
|
||||
deep: true
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
connect() {
|
||||
this.form = window.open(apiUrl + '/connect/twitter',
|
||||
'twitter_connect_window',
|
||||
'height=570, width=520');
|
||||
},
|
||||
|
||||
disconnect() {
|
||||
window.open(apiUrl + '/disconnect/twitter',
|
||||
'twitter_disconnect_window',
|
||||
'height=570, width=520');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.mk-twitter-setting
|
||||
.account
|
||||
border solid 1px #e1e8ed
|
||||
border-radius 4px
|
||||
padding 16px
|
||||
|
||||
a
|
||||
font-weight bold
|
||||
color inherit
|
||||
|
||||
.id
|
||||
color #8899a6
|
||||
</style>
|
@ -43,6 +43,7 @@ export default Vue.extend({
|
||||
|
||||
> *
|
||||
flex 1
|
||||
min-width 0 !important
|
||||
|
||||
> *:not(:last-child)
|
||||
margin-right 16px !important
|
||||
|
@ -14,17 +14,19 @@
|
||||
:disabled="disabled"
|
||||
:required="required"
|
||||
:readonly="readonly"
|
||||
:placeholder="placeholder"
|
||||
:pattern="pattern"
|
||||
:autocomplete="autocomplete"
|
||||
:spellcheck="spellcheck"
|
||||
@focus="focused = true"
|
||||
@blur="focused = false"
|
||||
@keydown="$emit('keydown', $event)"
|
||||
>
|
||||
</template>
|
||||
<template v-else>
|
||||
<input ref="input"
|
||||
type="text"
|
||||
:value="placeholder"
|
||||
:value="filePlaceholder"
|
||||
readonly
|
||||
@click="chooseFile"
|
||||
>
|
||||
@ -74,6 +76,15 @@ export default Vue.extend({
|
||||
type: String,
|
||||
required: false
|
||||
},
|
||||
placeholder: {
|
||||
type: String,
|
||||
required: false
|
||||
},
|
||||
autofocus: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false
|
||||
},
|
||||
autocomplete: {
|
||||
required: false
|
||||
},
|
||||
@ -109,7 +120,7 @@ export default Vue.extend({
|
||||
filled(): boolean {
|
||||
return this.v != '' && this.v != null;
|
||||
},
|
||||
placeholder(): string {
|
||||
filePlaceholder(): string {
|
||||
if (this.type != 'file') return null;
|
||||
if (this.v == null) return null;
|
||||
|
||||
@ -142,6 +153,12 @@ export default Vue.extend({
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
if (this.autofocus) {
|
||||
this.$nextTick(() => {
|
||||
this.$refs.input.focus();
|
||||
});
|
||||
}
|
||||
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs.prefix) {
|
||||
this.$refs.label.style.left = (this.$refs.prefix.offsetLeft + this.$refs.prefix.offsetWidth) + 'px';
|
||||
|
@ -8,7 +8,7 @@ export default ($root: any) => {
|
||||
|
||||
const regex = RegExp('\.(jpg|jpeg|png|gif|webp|bmp|tiff)$');
|
||||
if (!regex.test(file.name) ) {
|
||||
$root.alert({
|
||||
$root.dialog({
|
||||
title: '%fa:info-circle% %i18n:desktop.invalid-filetype%',
|
||||
text: null
|
||||
});
|
||||
@ -87,7 +87,7 @@ export default ($root: any) => {
|
||||
value: i.avatarUrl
|
||||
});
|
||||
|
||||
$root.alert({
|
||||
$root.dialog({
|
||||
title: '%fa:info-circle% %i18n:desktop.avatar-updated%',
|
||||
text: null
|
||||
});
|
||||
|
@ -87,7 +87,7 @@ export default ($root: any) => {
|
||||
value: i.bannerUrl
|
||||
});
|
||||
|
||||
$root.alert({
|
||||
$root.dialog({
|
||||
title: '%fa:info-circle% %i18n:desktop.banner-updated%',
|
||||
text: null
|
||||
});
|
||||
|
@ -34,7 +34,6 @@ import PostFormWindow from './views/components/post-form-window.vue';
|
||||
import RenoteFormWindow from './views/components/renote-form-window.vue';
|
||||
import MkChooseFileFromDriveWindow from './views/components/choose-file-from-drive-window.vue';
|
||||
import MkChooseFolderFromDriveWindow from './views/components/choose-folder-from-drive-window.vue';
|
||||
import InputDialog from './views/components/input-dialog.vue';
|
||||
import Notification from './views/components/ui-notification.vue';
|
||||
|
||||
import { url } from '../config';
|
||||
@ -113,22 +112,6 @@ init(async (launch) => {
|
||||
});
|
||||
},
|
||||
|
||||
$input(opts) {
|
||||
return new Promise<string>((res, rej) => {
|
||||
const o = opts || {};
|
||||
const d = this.$root.new(InputDialog, {
|
||||
title: o.title,
|
||||
placeholder: o.placeholder,
|
||||
default: o.default,
|
||||
type: o.type || 'text',
|
||||
allowEmpty: o.allowEmpty
|
||||
});
|
||||
d.$once('done', text => {
|
||||
res(text);
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
$notify(message) {
|
||||
this.$root.new(Notification, {
|
||||
message
|
||||
|
@ -148,12 +148,15 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
rename() {
|
||||
this.$input({
|
||||
this.$root.dialog({
|
||||
title: this.$t('contextmenu.rename-file'),
|
||||
placeholder: this.$t('contextmenu.input-new-file-name'),
|
||||
default: this.file.name,
|
||||
allowEmpty: false
|
||||
}).then(name => {
|
||||
input: {
|
||||
placeholder: this.$t('contextmenu.input-new-file-name'),
|
||||
default: this.file.name,
|
||||
allowEmpty: false
|
||||
}
|
||||
}).then(({ canceled, result: name }) => {
|
||||
if (canceled) return;
|
||||
this.$root.api('drive/files/update', {
|
||||
fileId: this.file.id,
|
||||
name: name
|
||||
@ -170,7 +173,7 @@ export default Vue.extend({
|
||||
|
||||
copyUrl() {
|
||||
copyToClipboard(this.file.url);
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
title: this.$t('contextmenu.copied'),
|
||||
text: this.$t('contextmenu.copied-url-to-clipboard')
|
||||
});
|
||||
|
@ -155,7 +155,7 @@ export default Vue.extend({
|
||||
}).catch(err => {
|
||||
switch (err) {
|
||||
case 'detected-circular-definition':
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
title: this.$t('unable-to-process'),
|
||||
text: this.$t('circular-reference-detected')
|
||||
});
|
||||
@ -192,11 +192,14 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
rename() {
|
||||
this.$input({
|
||||
this.$root.dialog({
|
||||
title: this.$t('contextmenu.rename-folder'),
|
||||
placeholder: this.$t('contextmenu.input-new-folder-name'),
|
||||
default: this.folder.name
|
||||
}).then(name => {
|
||||
input: {
|
||||
placeholder: this.$t('contextmenu.input-new-folder-name'),
|
||||
default: this.folder.name
|
||||
}
|
||||
}).then(({ canceled, result: name }) => {
|
||||
if (canceled) return;
|
||||
this.$root.api('drive/folders/update', {
|
||||
folderId: this.folder.id,
|
||||
name: name
|
||||
|
@ -313,7 +313,7 @@ export default Vue.extend({
|
||||
}).catch(err => {
|
||||
switch (err) {
|
||||
case 'detected-circular-definition':
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
title: this.$t('unable-to-process'),
|
||||
text: this.$t('circular-reference-detected')
|
||||
});
|
||||
@ -331,16 +331,19 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
urlUpload() {
|
||||
this.$input({
|
||||
this.$root.dialog({
|
||||
title: this.$t('url-upload'),
|
||||
placeholder: this.$t('url-of-file')
|
||||
}).then(url => {
|
||||
input: {
|
||||
placeholder: this.$t('url-of-file')
|
||||
}
|
||||
}).then(({ canceled, result: url }) => {
|
||||
if (canceled) return;
|
||||
this.$root.api('drive/files/upload_from_url', {
|
||||
url: url,
|
||||
folderId: this.folder ? this.folder.id : undefined
|
||||
});
|
||||
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
title: this.$t('url-upload-requested'),
|
||||
text: this.$t('may-take-time')
|
||||
});
|
||||
@ -348,10 +351,13 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
createFolder() {
|
||||
this.$input({
|
||||
this.$root.dialog({
|
||||
title: this.$t('create-folder'),
|
||||
placeholder: this.$t('folder-name')
|
||||
}).then(name => {
|
||||
input: {
|
||||
placeholder: this.$t('folder-name')
|
||||
}
|
||||
}).then(({ canceled, result: name }) => {
|
||||
if (canceled) return;
|
||||
this.$root.api('drive/folders/create', {
|
||||
name: name,
|
||||
parentId: this.folder ? this.folder.id : undefined
|
||||
|
@ -186,7 +186,7 @@ export default Vue.extend({
|
||||
|
||||
methods: {
|
||||
hint() {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
title: this.$t('@.customization-tips.title'),
|
||||
text: this.$t('@.customization-tips.paragraph')
|
||||
});
|
||||
|
@ -1,180 +0,0 @@
|
||||
<template>
|
||||
<mk-window ref="window" is-modal width="500px" @before-close="beforeClose" @closed="destroyDom">
|
||||
<span slot="header" :class="$style.header">
|
||||
<fa icon="i-cursor"/>{{ title }}
|
||||
</span>
|
||||
|
||||
<div :class="$style.body">
|
||||
<input ref="text" v-model="text" :type="type" @keydown="onKeydown" :placeholder="placeholder"/>
|
||||
</div>
|
||||
<div :class="$style.actions">
|
||||
<button :class="$style.cancel" @click="cancel">{{ $t('cancel') }}</button>
|
||||
<button :class="$style.ok" :disabled="!allowEmpty && text.length == 0" @click="ok">{{ $t('ok') }}</button>
|
||||
</div>
|
||||
</mk-window>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
export default Vue.extend({
|
||||
i18n: i18n('desktop/views/input-dialog.vue'),
|
||||
props: {
|
||||
title: {
|
||||
type: String
|
||||
},
|
||||
placeholder: {
|
||||
type: String
|
||||
},
|
||||
default: {
|
||||
type: String
|
||||
},
|
||||
allowEmpty: {
|
||||
default: true
|
||||
},
|
||||
type: {
|
||||
default: 'text'
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
done: false,
|
||||
text: ''
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
if (this.default) this.text = this.default;
|
||||
this.$nextTick(() => {
|
||||
(this.$refs.text as any).focus();
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
ok() {
|
||||
if (!this.allowEmpty && this.text == '') return;
|
||||
this.done = true;
|
||||
(this.$refs.window as any).close();
|
||||
},
|
||||
cancel() {
|
||||
this.done = false;
|
||||
(this.$refs.window as any).close();
|
||||
},
|
||||
beforeClose() {
|
||||
if (this.done) {
|
||||
this.$emit('done', this.text);
|
||||
} else {
|
||||
this.$emit('canceled');
|
||||
}
|
||||
},
|
||||
onKeydown(e) {
|
||||
if (e.which == 13) { // Enter
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.ok();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
<style lang="stylus" module>
|
||||
.header
|
||||
> [data-icon]
|
||||
margin-right 4px
|
||||
|
||||
.body
|
||||
padding 16px
|
||||
|
||||
> input
|
||||
display block
|
||||
padding 8px
|
||||
margin 0
|
||||
width 100%
|
||||
max-width 100%
|
||||
min-width 100%
|
||||
font-size 1em
|
||||
color #333
|
||||
background #fff
|
||||
outline none
|
||||
border solid 1px var(--primaryAlpha01)
|
||||
border-radius 4px
|
||||
transition border-color .3s ease
|
||||
|
||||
&:hover
|
||||
border-color var(--primaryAlpha02)
|
||||
transition border-color .1s ease
|
||||
|
||||
&:focus
|
||||
color var(--primary)
|
||||
border-color var(--primaryAlpha05)
|
||||
transition border-color 0s ease
|
||||
|
||||
&::-webkit-input-placeholder
|
||||
color var(--primaryAlpha03)
|
||||
|
||||
.actions
|
||||
height 72px
|
||||
background var(--primaryLighten95)
|
||||
|
||||
.ok
|
||||
.cancel
|
||||
display block
|
||||
position absolute
|
||||
bottom 16px
|
||||
cursor pointer
|
||||
padding 0
|
||||
margin 0
|
||||
width 120px
|
||||
height 40px
|
||||
font-size 1em
|
||||
outline none
|
||||
border-radius 4px
|
||||
|
||||
&:focus
|
||||
&:after
|
||||
content ""
|
||||
pointer-events none
|
||||
position absolute
|
||||
top -5px
|
||||
right -5px
|
||||
bottom -5px
|
||||
left -5px
|
||||
border 2px solid var(--primaryAlpha03)
|
||||
border-radius 8px
|
||||
|
||||
&:disabled
|
||||
opacity 0.7
|
||||
cursor default
|
||||
|
||||
.ok
|
||||
right 16px
|
||||
color var(--primaryForeground)
|
||||
background linear-gradient(to bottom, var(--primaryLighten25) 0%, var(--primaryLighten10) 100%)
|
||||
border solid 1px var(--primaryLighten15)
|
||||
|
||||
&:not(:disabled)
|
||||
font-weight bold
|
||||
|
||||
&:hover:not(:disabled)
|
||||
background linear-gradient(to bottom, var(--primaryLighten8) 0%, var(--primaryDarken8) 100%)
|
||||
border-color var(--primary)
|
||||
|
||||
&:active:not(:disabled)
|
||||
background var(--primary)
|
||||
border-color var(--primary)
|
||||
|
||||
.cancel
|
||||
right 148px
|
||||
color #888
|
||||
background linear-gradient(to bottom, #ffffff 0%, #f5f5f5 100%)
|
||||
border solid 1px #e2e2e2
|
||||
|
||||
&:hover
|
||||
background linear-gradient(to bottom, #f9f9f9 0%, #ececec 100%)
|
||||
border-color #dcdcdc
|
||||
|
||||
&:active
|
||||
background #ececec
|
||||
border-color #dcdcdc
|
||||
|
||||
</style>
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="uofhebxjdgksfmltszlxurtjnjjsvioh" v-if="video.isSensitive && hide" @click="hide = false">
|
||||
<div class="uofhebxjdgksfmltszlxurtjnjjsvioh" v-if="video.isSensitive && hide && !$store.state.device.alwaysShowNsfw" @click="hide = false">
|
||||
<div>
|
||||
<b><fa icon="exclamation-triangle"/> {{ $t('sensitive') }}</b>
|
||||
<span>{{ $t('click-to-show') }}</span>
|
||||
|
@ -39,7 +39,7 @@
|
||||
</header>
|
||||
<div class="body">
|
||||
<p v-if="appearNote.cw != null" class="cw">
|
||||
<span class="text" v-if="appearNote.cw != ''">{{ appearNote.cw }}</span>
|
||||
<misskey-flavored-markdown v-if="appearNote.cw != ''" class="text" :text="appearNote.cw" :author="appearNote.user" :i="$store.state.i" :custom-emojis="appearNote.emojis" />
|
||||
<mk-cw-button v-model="showContent"/>
|
||||
</p>
|
||||
<div class="content" v-show="appearNote.cw == null || showContent">
|
||||
|
@ -5,7 +5,7 @@
|
||||
<mk-note-header class="header" :note="note" :mini="true"/>
|
||||
<div class="body">
|
||||
<p v-if="note.cw != null" class="cw">
|
||||
<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
|
||||
<misskey-flavored-markdown v-if="note.cw != ''" class="text" :text="note.cw" :author="note.user" :i="$store.state.i" :custom-emojis="note.emojis" />
|
||||
<mk-cw-button v-model="showContent"/>
|
||||
</p>
|
||||
<div class="content" v-show="note.cw == null || showContent">
|
||||
|
@ -5,7 +5,7 @@
|
||||
<mk-note-header class="header" :note="note"/>
|
||||
<div class="body">
|
||||
<p v-if="note.cw != null" class="cw">
|
||||
<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
|
||||
<misskey-flavored-markdown v-if="note.cw != ''" class="text" :text="note.cw" :author="note.user" :i="$store.state.i" :custom-emojis="note.emojis" />
|
||||
<mk-cw-button v-model="showContent"/>
|
||||
</p>
|
||||
<div class="content" v-show="note.cw == null || showContent">
|
||||
|
@ -20,7 +20,7 @@
|
||||
<mk-note-header class="header" :note="appearNote" :mini="mini"/>
|
||||
<div class="body" v-if="appearNote.deletedAt == null">
|
||||
<p v-if="appearNote.cw != null" class="cw">
|
||||
<span class="text" v-if="appearNote.cw != ''">{{ appearNote.cw }}</span>
|
||||
<misskey-flavored-markdown v-if="appearNote.cw != ''" class="text" :text="appearNote.cw" :author="appearNote.user" :i="$store.state.i" :custom-emojis="appearNote.emojis" />
|
||||
<mk-cw-button v-model="showContent"/>
|
||||
</p>
|
||||
<div class="content" v-show="appearNote.cw == null || showContent">
|
||||
|
@ -20,7 +20,7 @@
|
||||
<mk-reaction-icon :reaction="notification.reaction"/>
|
||||
<router-link :to="notification.user | userPage" v-user-preview="notification.user.id">{{ notification.user | userName }}</router-link>
|
||||
</p>
|
||||
<router-link class="note-ref" :to="notification.note | notePage">
|
||||
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">
|
||||
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}<fa icon="quote-right"/>
|
||||
</router-link>
|
||||
</div>
|
||||
@ -32,7 +32,7 @@
|
||||
<p><fa icon="retweet"/>
|
||||
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
|
||||
</p>
|
||||
<router-link class="note-ref" :to="notification.note | notePage">
|
||||
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note.renote)">
|
||||
<fa icon="quote-left"/>{{ getNoteSummary(notification.note.renote) }}<fa icon="quote-right"/>
|
||||
</router-link>
|
||||
</div>
|
||||
@ -44,7 +44,7 @@
|
||||
<p><fa icon="quote-left"/>
|
||||
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
|
||||
</p>
|
||||
<router-link class="note-preview" :to="notification.note | notePage">{{ getNoteSummary(notification.note) }}</router-link>
|
||||
<router-link class="note-preview" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">{{ getNoteSummary(notification.note) }}</router-link>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -72,7 +72,7 @@
|
||||
<p><fa icon="reply"/>
|
||||
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
|
||||
</p>
|
||||
<router-link class="note-preview" :to="notification.note | notePage">{{ getNoteSummary(notification.note) }}</router-link>
|
||||
<router-link class="note-preview" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">{{ getNoteSummary(notification.note) }}</router-link>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -82,7 +82,7 @@
|
||||
<p><fa icon="at"/>
|
||||
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
|
||||
</p>
|
||||
<a class="note-preview" :href="notification.note | notePage">{{ getNoteSummary(notification.note) }}</a>
|
||||
<a class="note-preview" :href="notification.note | notePage" :title="getNoteSummary(notification.note)">{{ getNoteSummary(notification.note) }}</a>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -90,7 +90,7 @@
|
||||
<mk-avatar class="avatar" :user="notification.user"/>
|
||||
<div class="text">
|
||||
<p><fa icon="chart-pie"/><a :href="notification.user | userPage" v-user-preview="notification.user.id">{{ notification.user | userName }}</a></p>
|
||||
<router-link class="note-ref" :to="notification.note | notePage">
|
||||
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">
|
||||
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}<fa icon="quote-right"/>
|
||||
</router-link>
|
||||
</div>
|
||||
@ -219,7 +219,7 @@ export default Vue.extend({
|
||||
margin 0
|
||||
padding 16px
|
||||
overflow-wrap break-word
|
||||
font-size 13px
|
||||
font-size 12px
|
||||
border-bottom solid 1px var(--faceDivider)
|
||||
|
||||
&:last-child
|
||||
@ -262,9 +262,18 @@ export default Vue.extend({
|
||||
|
||||
.note-preview
|
||||
color var(--noteText)
|
||||
display inline-block
|
||||
overflow hidden
|
||||
max-height 48px
|
||||
word-break break-all
|
||||
|
||||
.note-ref
|
||||
color var(--noteText)
|
||||
display inline-block
|
||||
width: 100%
|
||||
overflow hidden
|
||||
white-space nowrap
|
||||
text-overflow ellipsis
|
||||
|
||||
[data-icon]
|
||||
font-size 1em
|
||||
|
@ -15,7 +15,7 @@
|
||||
<a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)" :title="$t('click-to-tagging')">#{{ tag }}</a>
|
||||
</div>
|
||||
<div class="local-only" v-if="this.localOnly == true">{{ $t('local-only-message') }}</div>
|
||||
<input v-show="useCw" v-model="cw" :placeholder="$t('annotations')">
|
||||
<input v-show="useCw" ref="cw" v-model="cw" :placeholder="$t('annotations')" v-autocomplete="'cw'">
|
||||
<div class="textarea">
|
||||
<textarea :class="{ with: (files.length != 0 || poll) }"
|
||||
ref="text" v-model="text" :disabled="posting"
|
||||
@ -71,7 +71,6 @@ import parse from '../../../../../mfm/parse';
|
||||
import { host } from '../../../config';
|
||||
import { erase, unique } from '../../../../../prelude/array';
|
||||
import { length } from 'stringz';
|
||||
import parseAcct from '../../../../../misc/acct/parse';
|
||||
import { toASCII } from 'punycode';
|
||||
|
||||
export default Vue.extend({
|
||||
@ -384,13 +383,12 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
addVisibleUser() {
|
||||
this.$input({
|
||||
title: this.$t('enter-username')
|
||||
}).then(acct => {
|
||||
if (acct.startsWith('@')) acct = acct.substr(1);
|
||||
this.$root.api('users/show', parseAcct(acct)).then(user => {
|
||||
this.visibleUsers.push(user);
|
||||
});
|
||||
this.$root.dialog({
|
||||
title: this.$t('enter-username'),
|
||||
user: true
|
||||
}).then(({ canceled, result: user }) => {
|
||||
if (canceled) return;
|
||||
this.visibleUsers.push(user);
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -35,10 +35,13 @@ export default Vue.extend({
|
||||
},
|
||||
methods: {
|
||||
register() {
|
||||
this.$input({
|
||||
this.$root.dialog({
|
||||
title: this.$t('enter-password'),
|
||||
type: 'password'
|
||||
}).then(password => {
|
||||
input: {
|
||||
type: 'password'
|
||||
}
|
||||
}).then(({ canceled, result: password }) => {
|
||||
if (canceled) return;
|
||||
this.$root.api('i/2fa/register', {
|
||||
password: password
|
||||
}).then(data => {
|
||||
@ -48,10 +51,13 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
unregister() {
|
||||
this.$input({
|
||||
this.$root.dialog({
|
||||
title: this.$t('enter-password'),
|
||||
type: 'password'
|
||||
}).then(password => {
|
||||
input: {
|
||||
type: 'password'
|
||||
}
|
||||
}).then(({ canceled, result: password }) => {
|
||||
if (canceled) return;
|
||||
this.$root.api('i/2fa/unregister', {
|
||||
password: password
|
||||
}).then(() => {
|
||||
|
@ -16,27 +16,7 @@
|
||||
<div class="pages">
|
||||
<div class="profile" v-show="page == 'profile'">
|
||||
<x-profile-editor/>
|
||||
|
||||
<ui-card>
|
||||
<div slot="title"><fa :icon="['fab', 'twitter']"/> {{ $t('twitter') }}</div>
|
||||
<section>
|
||||
<x-twitter-setting/>
|
||||
</section>
|
||||
</ui-card>
|
||||
|
||||
<ui-card>
|
||||
<div slot="title"><fa :icon="['fab', 'github']"/> {{ $t('github') }}</div>
|
||||
<section>
|
||||
<x-github-setting/>
|
||||
</section>
|
||||
</ui-card>
|
||||
|
||||
<ui-card>
|
||||
<div slot="title"><fa :icon="['fab', 'discord']"/> {{ $t('discord') }}</div>
|
||||
<section>
|
||||
<x-discord-setting/>
|
||||
</section>
|
||||
</ui-card>
|
||||
<x-integration-settings/>
|
||||
</div>
|
||||
|
||||
<ui-card class="theme" v-show="page == 'theme'">
|
||||
@ -169,24 +149,7 @@
|
||||
</section>
|
||||
</ui-card>
|
||||
|
||||
<ui-card class="web" v-show="page == 'web'">
|
||||
<div slot="title"><fa icon="language"/> {{ $t('language') }}</div>
|
||||
<section class="fit-top">
|
||||
<ui-select v-model="lang" :placeholder="$t('pick-language')">
|
||||
<optgroup :label="$t('recommended')">
|
||||
<option value="">{{ $t('auto') }}</option>
|
||||
</optgroup>
|
||||
|
||||
<optgroup :label="$t('specify-language')">
|
||||
<option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option>
|
||||
</optgroup>
|
||||
</ui-select>
|
||||
<div class="none ui info">
|
||||
<div>Current: <i>{{ this.currentLanguage }}</i></div>
|
||||
<p><fa icon="info-circle"/>{{ $t('language-desc') }}</p>
|
||||
</div>
|
||||
</section>
|
||||
</ui-card>
|
||||
<x-language-settings v-show="page == 'web'"/>
|
||||
|
||||
<ui-card class="web" v-show="page == 'web'">
|
||||
<div slot="title"><fa :icon="['far', 'trash-alt']"/> {{ $t('cache') }}</div>
|
||||
@ -309,17 +272,16 @@ import X2fa from './settings.2fa.vue';
|
||||
import XApps from './settings.apps.vue';
|
||||
import XSignins from './settings.signins.vue';
|
||||
import XTags from './settings.tags.vue';
|
||||
import XTwitterSetting from '../../../common/views/components/twitter-setting.vue';
|
||||
import XGithubSetting from '../../../common/views/components/github-setting.vue';
|
||||
import XDiscordSetting from '../../../common/views/components/discord-setting.vue';
|
||||
import XIntegrationSettings from '../../../common/views/components/integration-settings.vue';
|
||||
import XTheme from '../../../common/views/components/theme.vue';
|
||||
import XDriveSettings from '../../../common/views/components/drive-settings.vue';
|
||||
import XMuteAndBlock from '../../../common/views/components/mute-and-block.vue';
|
||||
import XPasswordSettings from '../../../common/views/components/password-settings.vue';
|
||||
import XProfileEditor from '../../../common/views/components/profile-editor.vue';
|
||||
import XApiSettings from '../../../common/views/components/api-settings.vue';
|
||||
import XLanguageSettings from '../../../common/views/components/language-settings.vue';
|
||||
|
||||
import { url, langs, clientVersion as version } from '../../../config';
|
||||
import { url, clientVersion as version } from '../../../config';
|
||||
import checkForUpdate from '../../../common/scripts/check-for-update';
|
||||
|
||||
export default Vue.extend({
|
||||
@ -329,15 +291,14 @@ export default Vue.extend({
|
||||
XApps,
|
||||
XSignins,
|
||||
XTags,
|
||||
XTwitterSetting,
|
||||
XGithubSetting,
|
||||
XDiscordSetting,
|
||||
XIntegrationSettings,
|
||||
XTheme,
|
||||
XDriveSettings,
|
||||
XMuteAndBlock,
|
||||
XPasswordSettings,
|
||||
XProfileEditor,
|
||||
XApiSettings,
|
||||
XLanguageSettings,
|
||||
},
|
||||
props: {
|
||||
initialPage: {
|
||||
@ -350,8 +311,6 @@ export default Vue.extend({
|
||||
page: this.initialPage || 'profile',
|
||||
meta: null,
|
||||
version,
|
||||
langs,
|
||||
currentLanguage: 'Unknown',
|
||||
latestVersion: undefined,
|
||||
checkingForUpdate: false
|
||||
};
|
||||
@ -412,11 +371,6 @@ export default Vue.extend({
|
||||
set(value) { this.$store.commit('device/set', { key: 'soundVolume', value }); }
|
||||
},
|
||||
|
||||
lang: {
|
||||
get() { return this.$store.state.device.lang; },
|
||||
set(value) { this.$store.commit('device/set', { key: 'lang', value }); }
|
||||
},
|
||||
|
||||
preventUpdate: {
|
||||
get() { return this.$store.state.device.preventUpdate; },
|
||||
set(value) { this.$store.commit('device/set', { key: 'preventUpdate', value }); }
|
||||
@ -556,12 +510,6 @@ export default Vue.extend({
|
||||
this.$root.getMeta().then(meta => {
|
||||
this.meta = meta;
|
||||
});
|
||||
|
||||
try {
|
||||
const locale = JSON.parse(localStorage.getItem('locale') || "{}");
|
||||
const localeKey = localStorage.getItem('localeKey');
|
||||
this.currentLanguage = `${locale.meta.lang} (${localeKey})`;
|
||||
} catch { }
|
||||
},
|
||||
methods: {
|
||||
readAllUnreadNotes() {
|
||||
@ -596,12 +544,12 @@ export default Vue.extend({
|
||||
this.checkingForUpdate = false;
|
||||
this.latestVersion = newer;
|
||||
if (newer == null) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
title: this.$t('no-updates'),
|
||||
text: this.$t('no-updates-desc')
|
||||
});
|
||||
} else {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
title: this.$t('update-available'),
|
||||
text: this.$t('update-available-desc')
|
||||
});
|
||||
@ -610,7 +558,7 @@ export default Vue.extend({
|
||||
},
|
||||
clean() {
|
||||
localStorage.clear();
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
title: this.$t('cache-cleared'),
|
||||
text: this.$t('cache-cleared-desc')
|
||||
});
|
||||
|
@ -109,9 +109,11 @@ export default Vue.extend({
|
||||
icon: 'plus',
|
||||
text: this.$t('add-list'),
|
||||
action: () => {
|
||||
this.$input({
|
||||
this.$root.dialog({
|
||||
title: this.$t('list-name'),
|
||||
}).then(async title => {
|
||||
input: true
|
||||
}).then(async ({ canceled, result: title }) => {
|
||||
if (canceled) return;
|
||||
const list = await this.$root.api('users/lists/create', {
|
||||
title
|
||||
});
|
||||
|
@ -29,9 +29,11 @@ export default Vue.extend({
|
||||
},
|
||||
methods: {
|
||||
add() {
|
||||
this.$input({
|
||||
this.$root.dialog({
|
||||
title: this.$t('list-name'),
|
||||
}).then(async title => {
|
||||
input: true
|
||||
}).then(async ({ canceled, result: title }) => {
|
||||
if (canceled) return;
|
||||
const list = await this.$root.api('users/lists/create', {
|
||||
title
|
||||
});
|
||||
|
@ -156,7 +156,7 @@ export default Vue.extend({
|
||||
|
||||
> .follow-button
|
||||
position absolute
|
||||
top 92px
|
||||
top 8px
|
||||
right 8px
|
||||
|
||||
</style>
|
||||
|
@ -167,11 +167,14 @@ export default Vue.extend({
|
||||
icon: 'pencil-alt',
|
||||
text: this.$t('rename'),
|
||||
action: () => {
|
||||
this.$input({
|
||||
this.$root.dialog({
|
||||
title: this.$t('rename'),
|
||||
default: this.name,
|
||||
allowEmpty: false
|
||||
}).then(name => {
|
||||
input: {
|
||||
default: this.name,
|
||||
allowEmpty: false
|
||||
}
|
||||
}).then(({ canceled, result: name }) => {
|
||||
if (canceled) return;
|
||||
this.$store.dispatch('settings/renameDeckColumn', { id: this.column.id, name });
|
||||
});
|
||||
}
|
||||
|
@ -8,7 +8,7 @@
|
||||
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
||||
<mk-time :time="notification.createdAt"/>
|
||||
</header>
|
||||
<router-link class="note-ref" :to="notification.note | notePage">
|
||||
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">
|
||||
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}
|
||||
<fa icon="quote-right"/>
|
||||
</router-link>
|
||||
@ -23,7 +23,7 @@
|
||||
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
||||
<mk-time :time="notification.createdAt"/>
|
||||
</header>
|
||||
<router-link class="note-ref" :to="notification.note | notePage">
|
||||
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note.renote)">
|
||||
<fa icon="quote-left"/>{{ getNoteSummary(notification.note.renote) }}<fa icon="quote-right"/>
|
||||
</router-link>
|
||||
</div>
|
||||
@ -59,7 +59,7 @@
|
||||
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
||||
<mk-time :time="notification.createdAt"/>
|
||||
</header>
|
||||
<router-link class="note-ref" :to="notification.note | notePage">
|
||||
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">
|
||||
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}<fa icon="quote-right"/>
|
||||
</router-link>
|
||||
</div>
|
||||
@ -112,7 +112,7 @@ export default Vue.extend({
|
||||
.dsfykdcjpuwfvpefwufddclpjhzktmpw
|
||||
> .notification
|
||||
padding 16px
|
||||
font-size 13px
|
||||
font-size 12px
|
||||
overflow-wrap break-word
|
||||
|
||||
&:after
|
||||
@ -150,6 +150,11 @@ export default Vue.extend({
|
||||
|
||||
> .note-ref
|
||||
color var(--noteText)
|
||||
display inline-block
|
||||
width: 100%
|
||||
overflow hidden
|
||||
white-space nowrap
|
||||
text-overflow ellipsis
|
||||
|
||||
[data-icon]
|
||||
font-size 1em
|
||||
|
@ -307,7 +307,7 @@ export default Vue.extend({
|
||||
listId: list.id,
|
||||
userId: this.user.id
|
||||
});
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
splash: true
|
||||
});
|
||||
|
@ -252,9 +252,11 @@ export default Vue.extend({
|
||||
icon: 'hashtag',
|
||||
text: this.$t('@deck.hashtag'),
|
||||
action: () => {
|
||||
this.$input({
|
||||
title: this.$t('enter-hashtag-tl-title')
|
||||
}).then(title => {
|
||||
this.$root.dialog({
|
||||
title: this.$t('enter-hashtag-tl-title'),
|
||||
input: true
|
||||
}).then(({ canceled, result: title }) => {
|
||||
if (canceled) return;
|
||||
this.$store.dispatch('settings/addDeckColumn', {
|
||||
id: uuid(),
|
||||
type: 'hashtag',
|
||||
|
@ -1,7 +1,9 @@
|
||||
<template>
|
||||
<div class="lkafjvabenanajk17kwqpsatoushincb">
|
||||
<span><fa :icon="['fab', 'discord']"/><a :href="`https://discordapp.com/users/${user.discord.id}`" target="_blank">@{{ user.discord.username }}#{{ user.discord.discriminator }}</a></span>
|
||||
</div>
|
||||
<a class="lkafjvabenanajk17kwqpsatoushincb" :href="`https://discordapp.com/users/${user.discord.id}`" target="_blank">
|
||||
<div>
|
||||
<span><fa :icon="['fab', 'discord']"/>@{{ user.discord.username }}#{{ user.discord.discriminator }}</span>
|
||||
</div>
|
||||
</a>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
@ -14,13 +16,13 @@ export default Vue.extend({
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.lkafjvabenanajk17kwqpsatoushincb
|
||||
padding 32px
|
||||
background #7289da
|
||||
border-radius 6px
|
||||
margin-left 8px
|
||||
color #fff
|
||||
|
||||
a
|
||||
margin-left 8px
|
||||
div
|
||||
padding 32px
|
||||
background #7289da
|
||||
border-radius 6px
|
||||
color #fff
|
||||
|
||||
</style>
|
||||
|
@ -1,7 +1,9 @@
|
||||
<template>
|
||||
<div class="aqooishiizumijmihokohinatamihoaz">
|
||||
<span><fa :icon="['fab', 'github']"/><a :href="`https://github.com/${user.github.login}`" target="_blank">@{{ user.github.login }}</a></span>
|
||||
</div>
|
||||
<a class="aqooishiizumijmihokohinatamihoaz" :href="`https://github.com/${user.github.login}`" target="_blank">
|
||||
<div>
|
||||
<span><fa :icon="['fab', 'github']"/>@{{ user.github.login }}</span>
|
||||
</div>
|
||||
</a>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
@ -14,13 +16,13 @@ export default Vue.extend({
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.aqooishiizumijmihokohinatamihoaz
|
||||
padding 32px
|
||||
background #171515
|
||||
border-radius 6px
|
||||
margin-left 8px
|
||||
color #fff
|
||||
|
||||
a
|
||||
margin-left 8px
|
||||
div
|
||||
padding 32px
|
||||
background #171515
|
||||
border-radius 6px
|
||||
color #fff
|
||||
|
||||
</style>
|
||||
|
@ -73,12 +73,12 @@ export default Vue.extend({
|
||||
},
|
||||
|
||||
block() {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'warning',
|
||||
text: this.$t('block-confirm'),
|
||||
showCancelButton: true
|
||||
}).then(res => {
|
||||
if (!res) return;
|
||||
}).then(({ canceled }) => {
|
||||
if (canceled) return;
|
||||
|
||||
this.$root.api('blocking/create', {
|
||||
userId: this.user.id
|
||||
@ -108,9 +108,13 @@ export default Vue.extend({
|
||||
listId: list.id,
|
||||
userId: this.user.id
|
||||
});
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'success',
|
||||
title: 'Done!',
|
||||
text: this.$t('list-pushed').replace('{user}', this.user.name).replace('{list}', list.title)
|
||||
text: this.$t('list-pushed', {
|
||||
user: this.user.name,
|
||||
list: list.title
|
||||
})
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -1,7 +1,9 @@
|
||||
<template>
|
||||
<div class="adsvaidqfznoartcbplullnejvxjphcn">
|
||||
<span><fa :icon="['fab', 'twitter']"/><a :href="`https://twitter.com/${user.twitter.screenName}`" target="_blank">@{{ user.twitter.screenName }}</a></span>
|
||||
</div>
|
||||
<a class="adsvaidqfznoartcbplullnejvxjphcn" :href="`https://twitter.com/${user.twitter.screenName}`" target="_blank">
|
||||
<div>
|
||||
<span><fa :icon="['fab', 'twitter']"/>@{{ user.twitter.screenName }}</span>
|
||||
</div>
|
||||
</a>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
@ -14,13 +16,13 @@ export default Vue.extend({
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.adsvaidqfznoartcbplullnejvxjphcn
|
||||
padding 32px
|
||||
background #1a94f2
|
||||
border-radius 6px
|
||||
margin-left 8px
|
||||
color #fff
|
||||
|
||||
a
|
||||
margin-left 8px
|
||||
div
|
||||
padding 32px
|
||||
background #1a94f2
|
||||
border-radius 6px
|
||||
color #fff
|
||||
|
||||
</style>
|
||||
|
@ -15,7 +15,7 @@ import checkForUpdate from './common/scripts/check-for-update';
|
||||
import MiOS from './mios';
|
||||
import { clientVersion as version, codename, lang } from './config';
|
||||
import { builtinThemes, lightTheme, applyTheme } from './theme';
|
||||
import Alert from './common/views/components/alert.vue';
|
||||
import Dialog from './common/views/components/dialog.vue';
|
||||
|
||||
if (localStorage.getItem('theme') == null) {
|
||||
applyTheme(lightTheme);
|
||||
@ -143,6 +143,9 @@ import {
|
||||
faCalendarAlt as farCalendarAlt,
|
||||
faHdd as farHdd,
|
||||
faMoon as farMoon,
|
||||
faPlayCircle as farPlayCircle,
|
||||
faLightbulb as farLightbulb,
|
||||
faStickyNote as farStickyNote,
|
||||
} from '@fortawesome/free-regular-svg-icons';
|
||||
|
||||
import {
|
||||
@ -248,7 +251,7 @@ library.add(
|
||||
faSync,
|
||||
faArrowLeft,
|
||||
faMapMarker,
|
||||
faRobot,
|
||||
faRobot,
|
||||
|
||||
farBell,
|
||||
farEnvelope,
|
||||
@ -268,6 +271,9 @@ library.add(
|
||||
farCalendarAlt,
|
||||
farHdd,
|
||||
farMoon,
|
||||
farPlayCircle,
|
||||
farLightbulb,
|
||||
farStickyNote,
|
||||
|
||||
fabTwitter,
|
||||
fabGithub,
|
||||
@ -451,11 +457,11 @@ export default (callback: (launch: (router: VueRouter) => [Vue, MiOS]) => void,
|
||||
document.body.appendChild(x.$el);
|
||||
return x;
|
||||
},
|
||||
alert(opts) {
|
||||
dialog(opts) {
|
||||
const vm = this.new(Dialog, opts);
|
||||
return new Promise((res) => {
|
||||
const vm = this.new(Alert, opts);
|
||||
vm.$once('ok', () => res(true));
|
||||
vm.$once('cancel', () => res(false));
|
||||
vm.$once('ok', result => res({ canceled: false, result }));
|
||||
vm.$once('cancel', () => res({ canceled: true }));
|
||||
});
|
||||
}
|
||||
},
|
||||
|
@ -41,6 +41,12 @@ import FolderChooser from './views/components/drive-folder-chooser.vue';
|
||||
*/
|
||||
init((launch) => {
|
||||
Vue.mixin({
|
||||
data() {
|
||||
return {
|
||||
isMobile: true
|
||||
};
|
||||
},
|
||||
|
||||
methods: {
|
||||
$post(opts) {
|
||||
const o = opts || {};
|
||||
@ -89,15 +95,6 @@ init((launch) => {
|
||||
});
|
||||
},
|
||||
|
||||
$input(opts) {
|
||||
return new Promise<string>((res, rej) => {
|
||||
const x = window.prompt(opts.title);
|
||||
if (x) {
|
||||
res(x);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
$notify(message) {
|
||||
alert(message);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="icozogqfvdetwohsdglrbswgrejoxbdj" v-if="video.isSensitive && hide" @click="hide = false">
|
||||
<div class="icozogqfvdetwohsdglrbswgrejoxbdj" v-if="video.isSensitive && hide && !$store.state.device.alwaysShowNsfw" @click="hide = false">
|
||||
<div>
|
||||
<b><fa icon="exclamation-triangle"/> {{ $t('sensitive') }}</b>
|
||||
<span>{{ $t('click-to-show') }}</span>
|
||||
|
@ -26,7 +26,7 @@
|
||||
</header>
|
||||
<div class="body">
|
||||
<p v-if="appearNote.cw != null" class="cw">
|
||||
<span class="text" v-if="appearNote.cw != ''">{{ appearNote.cw }}</span>
|
||||
<misskey-flavored-markdown v-if="appearNote.cw != ''" class="text" :text="appearNote.cw" :author="appearNote.user" :i="$store.state.i" :custom-emojis="appearNote.emojis" />
|
||||
<mk-cw-button v-model="showContent"/>
|
||||
</p>
|
||||
<div class="content" v-show="appearNote.cw == null || showContent">
|
||||
@ -152,7 +152,7 @@ export default Vue.extend({
|
||||
text-align left
|
||||
background var(--face)
|
||||
border-radius 8px
|
||||
box-shadow 0 0 2px rgba(#000, 0.1)
|
||||
box-shadow 0 4px 16px rgba(#000, 0.1)
|
||||
|
||||
@media (min-width 500px)
|
||||
box-shadow 0 8px 32px rgba(#000, 0.1)
|
||||
|
@ -5,7 +5,7 @@
|
||||
<mk-note-header class="header" :note="note" :mini="true"/>
|
||||
<div class="body">
|
||||
<p v-if="note.cw != null" class="cw">
|
||||
<span class="text" v-if="note.cw != ''">{{ note.cw }}</span>
|
||||
<misskey-flavored-markdown v-if="note.cw != ''" class="text" :text="note.cw" :author="note.user" :i="$store.state.i" :custom-emojis="note.emojis" />
|
||||
<mk-cw-button v-model="showContent"/>
|
||||
</p>
|
||||
<div class="content" v-show="note.cw == null || showContent">
|
||||
|
@ -16,7 +16,7 @@
|
||||
<mk-note-header class="header" :note="appearNote" :mini="true"/>
|
||||
<div class="body" v-if="appearNote.deletedAt == null">
|
||||
<p v-if="appearNote.cw != null" class="cw">
|
||||
<span class="text" v-if="appearNote.cw != ''">{{ appearNote.cw }}</span>
|
||||
<misskey-flavored-markdown v-if="appearNote.cw != ''" class="text" :text="appearNote.cw" :author="appearNote.user" :i="$store.state.i" :custom-emojis="appearNote.emojis" />
|
||||
<mk-cw-button v-model="showContent"/>
|
||||
</p>
|
||||
<div class="content" v-show="appearNote.cw == null || showContent">
|
||||
|
@ -186,7 +186,7 @@ export default Vue.extend({
|
||||
overflow hidden
|
||||
background var(--face)
|
||||
border-radius 8px
|
||||
box-shadow 0 0 2px rgba(#000, 0.1)
|
||||
box-shadow 0 4px 16px rgba(#000, 0.1)
|
||||
|
||||
@media (min-width 500px)
|
||||
box-shadow 0 8px 32px rgba(#000, 0.1)
|
||||
|
@ -8,7 +8,7 @@
|
||||
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
||||
<mk-time :time="notification.createdAt"/>
|
||||
</header>
|
||||
<router-link class="note-ref" :to="notification.note | notePage">
|
||||
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">
|
||||
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}
|
||||
<fa icon="quote-right"/>
|
||||
</router-link>
|
||||
@ -23,7 +23,7 @@
|
||||
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
||||
<mk-time :time="notification.createdAt"/>
|
||||
</header>
|
||||
<router-link class="note-ref" :to="notification.note | notePage">
|
||||
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note.renote)">
|
||||
<fa icon="quote-left"/>{{ getNoteSummary(notification.note.renote) }}<fa icon="quote-right"/>
|
||||
</router-link>
|
||||
</div>
|
||||
@ -59,7 +59,7 @@
|
||||
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
||||
<mk-time :time="notification.createdAt"/>
|
||||
</header>
|
||||
<router-link class="note-ref" :to="notification.note | notePage">
|
||||
<router-link class="note-ref" :to="notification.note | notePage" :title="getNoteSummary(notification.note)">
|
||||
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}<fa icon="quote-right"/>
|
||||
</router-link>
|
||||
</div>
|
||||
@ -162,6 +162,11 @@ export default Vue.extend({
|
||||
|
||||
> .note-ref
|
||||
color var(--noteText)
|
||||
display inline-block
|
||||
width: 100%
|
||||
overflow hidden
|
||||
white-space nowrap
|
||||
text-overflow ellipsis
|
||||
|
||||
[data-icon]
|
||||
font-size 1em
|
||||
|
@ -16,7 +16,7 @@
|
||||
<span v-for="u in visibleUsers">{{ u | userName }}<a @click="removeVisibleUser(u)">[x]</a></span>
|
||||
<a @click="addVisibleUser">+{{ $t('add-visible-user') }}</a>
|
||||
</div>
|
||||
<input v-show="useCw" v-model="cw" :placeholder="$t('annotations')">
|
||||
<input v-show="useCw" ref="cw" v-model="cw" :placeholder="$t('annotations')" v-autocomplete="'cw'">
|
||||
<textarea v-model="text" ref="text" :disabled="posting" :placeholder="placeholder" v-autocomplete="'text'"></textarea>
|
||||
<div class="attaches" v-show="files.length != 0">
|
||||
<x-draggable class="files" :list="files" :options="{ animation: 150 }">
|
||||
@ -62,7 +62,6 @@ import parse from '../../../../../mfm/parse';
|
||||
import { host } from '../../../config';
|
||||
import { erase, unique } from '../../../../../prelude/array';
|
||||
import { length } from 'stringz';
|
||||
import parseAcct from '../../../../../misc/acct/parse';
|
||||
import { toASCII } from 'punycode';
|
||||
|
||||
export default Vue.extend({
|
||||
@ -219,6 +218,16 @@ export default Vue.extend({
|
||||
(this.$refs.text as any).focus();
|
||||
},
|
||||
|
||||
addVisibleUser() {
|
||||
this.$root.dialog({
|
||||
title: this.$t('enter-username'),
|
||||
user: true
|
||||
}).then(({ canceled, result: user }) => {
|
||||
if (canceled) return;
|
||||
this.visibleUsers.push(user);
|
||||
});
|
||||
},
|
||||
|
||||
chooseFile() {
|
||||
(this.$refs.file as any).click();
|
||||
},
|
||||
|
@ -81,7 +81,7 @@ export default Vue.extend({
|
||||
top 0
|
||||
z-index 1024
|
||||
width 100%
|
||||
box-shadow 0 1px 0 rgba(#000, 0.075)
|
||||
box-shadow 0 0px 8px rgba(0, 0, 0, 0.25)
|
||||
|
||||
&, *
|
||||
user-select none
|
||||
|
@ -95,9 +95,13 @@ export default Vue.extend({
|
||||
|
||||
methods: {
|
||||
search() {
|
||||
const query = window.prompt(this.$t('search'));
|
||||
if (query == null || query == '') return;
|
||||
this.$router.push(`/search?q=${encodeURIComponent(query)}`);
|
||||
this.$root.dialog({
|
||||
title: this.$t('search'),
|
||||
input: true
|
||||
}).then(({ canceled, result: query }) => {
|
||||
if (canceled) return;
|
||||
this.$router.push(`/search?q=${encodeURIComponent(query)}`);
|
||||
});
|
||||
},
|
||||
|
||||
onReversiInvited() {
|
||||
|
@ -23,12 +23,12 @@ export default Vue.extend({
|
||||
},
|
||||
methods: {
|
||||
fn() {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
type: 'warning',
|
||||
text: this.$t('read-all'),
|
||||
showCancelButton: true
|
||||
}).then(res => {
|
||||
if (!res) return;
|
||||
}).then(({ canceled }) => {
|
||||
if (canceled) return;
|
||||
|
||||
this.$root.api('notifications/mark_all_as_read');
|
||||
});
|
||||
|
@ -105,62 +105,9 @@
|
||||
</section>
|
||||
</ui-card>
|
||||
|
||||
<ui-card>
|
||||
<div slot="title"><fa icon="language"/> {{ $t('lang') }}</div>
|
||||
<x-language-settings/>
|
||||
|
||||
<section class="fit-top">
|
||||
<ui-select v-model="lang" :placeholder="$t('auto')">
|
||||
<optgroup :label="$t('recommended')">
|
||||
<option value="">{{ $t('auto') }}</option>
|
||||
</optgroup>
|
||||
|
||||
<optgroup :label="$t('specify-language')">
|
||||
<option v-for="x in langs" :value="x[0]" :key="x[0]">{{ x[1] }}</option>
|
||||
</optgroup>
|
||||
</ui-select>
|
||||
<div>Current: <i>{{ this.currentLanguage }}</i></div>
|
||||
<p><fa icon="info-circle"/> {{ $t('lang-tip') }}</p>
|
||||
</section>
|
||||
</ui-card>
|
||||
|
||||
<ui-card>
|
||||
<div slot="title"><fa :icon="['fab', 'twitter']"/> {{ $t('twitter') }}</div>
|
||||
|
||||
<section>
|
||||
<p class="account" v-if="$store.state.i.twitter"><a :href="`https://twitter.com/${$store.state.i.twitter.screenName}`" target="_blank">@{{ $store.state.i.twitter.screenName }}</a></p>
|
||||
<p>
|
||||
<a :href="`${apiUrl}/connect/twitter`" target="_blank">{{ $store.state.i.twitter ? this.$t('twitter-reconnect') : this.$t('twitter-connect') }}</a>
|
||||
<span v-if="$store.state.i.twitter"> or </span>
|
||||
<a :href="`${apiUrl}/disconnect/twitter`" target="_blank" v-if="$store.state.i.twitter">{{ $t('twitter-disconnect') }}</a>
|
||||
</p>
|
||||
</section>
|
||||
</ui-card>
|
||||
|
||||
<ui-card>
|
||||
<div slot="title"><fa :icon="['fab', 'github']"/> {{ $t('github') }}</div>
|
||||
|
||||
<section>
|
||||
<p class="account" v-if="$store.state.i.github"><a :href="`https://github.com/${$store.state.i.github.login}`" target="_blank">@{{ $store.state.i.github.login }}</a></p>
|
||||
<p>
|
||||
<a :href="`${apiUrl}/connect/github`" target="_blank">{{ $store.state.i.github ? this.$t('github-reconnect') : this.$t('github-connect') }}</a>
|
||||
<span v-if="$store.state.i.github"> or </span>
|
||||
<a :href="`${apiUrl}/disconnect/github`" target="_blank" v-if="$store.state.i.github">{{ $t('github-disconnect') }}</a>
|
||||
</p>
|
||||
</section>
|
||||
</ui-card>
|
||||
|
||||
<ui-card>
|
||||
<div slot="title"><fa :icon="['fab', 'discord']"/> {{ $t('discord') }}</div>
|
||||
|
||||
<section>
|
||||
<p class="account" v-if="$store.state.i.discord"><a :href="`https://discordapp.com/users/${$store.state.i.discord.id}`" target="_blank">@{{ $store.state.i.discord.username }}#{{ $store.state.i.discord.discriminator }}</a></p>
|
||||
<p>
|
||||
<a :href="`${apiUrl}/connect/discord`" target="_blank">{{ $store.state.i.discord ? this.$t('discord-reconnect') : this.$t('discord-connect') }}</a>
|
||||
<span v-if="$store.state.i.discord"> or </span>
|
||||
<a :href="`${apiUrl}/disconnect/discord`" target="_blank" v-if="$store.state.i.discord">{{ $t('discord-disconnect') }}</a>
|
||||
</p>
|
||||
</section>
|
||||
</ui-card>
|
||||
<x-integration-settings/>
|
||||
|
||||
<x-api-settings />
|
||||
|
||||
@ -199,7 +146,7 @@
|
||||
<script lang="ts">
|
||||
import Vue from 'vue';
|
||||
import i18n from '../../../i18n';
|
||||
import { apiUrl, clientVersion as version, codename, langs } from '../../../config';
|
||||
import { apiUrl, clientVersion as version, codename } from '../../../config';
|
||||
import checkForUpdate from '../../../common/scripts/check-for-update';
|
||||
import XTheme from '../../../common/views/components/theme.vue';
|
||||
import XDriveSettings from '../../../common/views/components/drive-settings.vue';
|
||||
@ -207,6 +154,8 @@ import XMuteAndBlock from '../../../common/views/components/mute-and-block.vue';
|
||||
import XPasswordSettings from '../../../common/views/components/password-settings.vue';
|
||||
import XProfileEditor from '../../../common/views/components/profile-editor.vue';
|
||||
import XApiSettings from '../../../common/views/components/api-settings.vue';
|
||||
import XLanguageSettings from '../../../common/views/components/language-settings.vue';
|
||||
import XIntegrationSettings from '../../../common/views/components/integration-settings.vue';
|
||||
|
||||
export default Vue.extend({
|
||||
i18n: i18n('mobile/views/pages/settings.vue'),
|
||||
@ -218,6 +167,8 @@ export default Vue.extend({
|
||||
XPasswordSettings,
|
||||
XProfileEditor,
|
||||
XApiSettings,
|
||||
XLanguageSettings,
|
||||
XIntegrationSettings,
|
||||
},
|
||||
|
||||
data() {
|
||||
@ -225,8 +176,6 @@ export default Vue.extend({
|
||||
apiUrl,
|
||||
version,
|
||||
codename,
|
||||
langs,
|
||||
currentLanguage: 'Unknown',
|
||||
latestVersion: undefined,
|
||||
checkingForUpdate: false
|
||||
};
|
||||
@ -277,11 +226,6 @@ export default Vue.extend({
|
||||
set(value) { this.$store.commit('device/set', { key: 'loadRawImages', value }); }
|
||||
},
|
||||
|
||||
lang: {
|
||||
get() { return this.$store.state.device.lang; },
|
||||
set(value) { this.$store.commit('device/set', { key: 'lang', value }); }
|
||||
},
|
||||
|
||||
enableSounds: {
|
||||
get() { return this.$store.state.device.enableSounds; },
|
||||
set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); }
|
||||
@ -327,7 +271,6 @@ export default Vue.extend({
|
||||
set(value) { this.$store.dispatch('settings/set', { key: 'showVia', value }); }
|
||||
},
|
||||
|
||||
|
||||
iLikeSushi: {
|
||||
get() { return this.$store.state.settings.iLikeSushi; },
|
||||
set(value) { this.$store.dispatch('settings/set', { key: 'iLikeSushi', value }); }
|
||||
@ -379,14 +322,6 @@ export default Vue.extend({
|
||||
},
|
||||
},
|
||||
|
||||
created() {
|
||||
try {
|
||||
const locale = JSON.parse(localStorage.getItem('locale') || "{}");
|
||||
const localeKey = localStorage.getItem('localeKey');
|
||||
this.currentLanguage = `${locale.meta.lang} (${localeKey})`;
|
||||
} catch { }
|
||||
},
|
||||
|
||||
mounted() {
|
||||
document.title = this.$t('settings');
|
||||
},
|
||||
@ -402,12 +337,12 @@ export default Vue.extend({
|
||||
this.checkingForUpdate = false;
|
||||
this.latestVersion = newer;
|
||||
if (newer == null) {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
title: this.$t('no-updates'),
|
||||
text: this.$t('no-updates-desc')
|
||||
});
|
||||
} else {
|
||||
this.$root.alert({
|
||||
this.$root.dialog({
|
||||
title: this.$t('update-available'),
|
||||
text: this.$t('update-available-desc')
|
||||
});
|
||||
|