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>
|
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
|
||||||
</tr></table>
|
</tr></table>
|
||||||
|
|
||||||
**Last updated:** Tue, 27 Nov 2018 06:24:05 UTC
|
**Last updated:** Sat, 01 Dec 2018 22:05:05 UTC
|
||||||
<!-- PATREON_END -->
|
<!-- PATREON_END -->
|
||||||
|
|
||||||
:four_leaf_clover: Copyright
|
: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"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
xmlns="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"
|
id="svg8"
|
||||||
inkscape:version="0.92.1 r15371"
|
version="1.1"
|
||||||
sodipodi:docname="favicon.svg"
|
viewBox="0 0 135.46667 135.46667"
|
||||||
inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\16.png"
|
height="512"
|
||||||
inkscape:export-xdpi="3"
|
width="512">
|
||||||
inkscape:export-ydpi="3">
|
|
||||||
<defs
|
<defs
|
||||||
id="defs2">
|
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>
|
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata5">
|
id="metadata5">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
@ -116,32 +25,27 @@
|
|||||||
</rdf:RDF>
|
</rdf:RDF>
|
||||||
</metadata>
|
</metadata>
|
||||||
<g
|
<g
|
||||||
inkscape:label="レイヤー 1"
|
style="fill:#2fa3bc;fill-opacity:1"
|
||||||
inkscape:groupmode="layer"
|
transform="translate(-30.809093,-111.78601)"
|
||||||
id="layer1"
|
id="layer1">
|
||||||
transform="translate(-30.809093,-111.78601)">
|
|
||||||
<g
|
<g
|
||||||
id="g4502"
|
style="fill:#2fa3bc;fill-opacity:1"
|
||||||
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
|
<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
|
<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"
|
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"
|
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)">
|
||||||
aria-label="Mi">
|
|
||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="zccssscssccscczzzccsccsscscsccz"
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path5210"
|
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"
|
transform="matrix(0.26412464,0,0,0.26412464,24.988264,136.28626)"
|
||||||
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" />
|
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"
|
||||||
<path
|
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" />
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path5212"
|
|
||||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'OTADESIGN Rounded';-inkscape-font-specification:'OTADESIGN Rounded';fill:#2fa1bb;fill-opacity:1;stroke-width:0.28950602px"
|
|
||||||
d="m 145.83461,185.00361 q -5.92343,0 -10.15445,-4.08999 -4.08999,-4.23102 -4.08999,-10.15445 0,-5.92343 4.08999,-10.01342 4.23102,-4.23102 10.15445,-4.23102 5.92343,0 10.15445,4.23102 4.23102,4.08999 4.23102,10.01342 0,5.92343 -4.23102,10.15445 -4.23102,4.08999 -10.15445,4.08999 z m 0.14103,2.82068 q 5.92343,0 10.01342,4.23102 4.23102,4.23102 4.23102,10.15445 v 34.83541 q 0,5.92343 -4.23102,10.15445 -4.08999,4.08999 -10.01342,4.08999 -5.92343,0 -10.15445,-4.08999 -4.23102,-4.23102 -4.23102,-10.15445 v -34.83541 q 0,-5.92343 4.23102,-10.15445 4.23102,-4.23102 10.15445,-4.23102 z" />
|
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</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"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
xmlns="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"
|
id="svg8"
|
||||||
inkscape:version="0.92.1 r15371"
|
version="1.1"
|
||||||
sodipodi:docname="mi.svg"
|
viewBox="0 0 135.46667 135.46667"
|
||||||
inkscape:export-filename="C:\Users\syuilo\projects\misskey\assets\favicon\32.png"
|
height="512"
|
||||||
inkscape:export-xdpi="6"
|
width="512">
|
||||||
inkscape:export-ydpi="6">
|
|
||||||
<defs
|
<defs
|
||||||
id="defs2">
|
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>
|
|
||||||
<metadata
|
<metadata
|
||||||
id="metadata5">
|
id="metadata5">
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
@ -111,32 +20,30 @@
|
|||||||
<dc:format>image/svg+xml</dc:format>
|
<dc:format>image/svg+xml</dc:format>
|
||||||
<dc:type
|
<dc:type
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
<dc:title />
|
<dc:title></dc:title>
|
||||||
</cc:Work>
|
</cc:Work>
|
||||||
</rdf:RDF>
|
</rdf:RDF>
|
||||||
</metadata>
|
</metadata>
|
||||||
<g
|
<g
|
||||||
inkscape:label="レイヤー 1"
|
transform="translate(-30.809093,-111.78601)"
|
||||||
inkscape:groupmode="layer"
|
id="layer1">
|
||||||
id="layer1"
|
|
||||||
transform="translate(-30.809093,-111.78601)">
|
|
||||||
<g
|
<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
|
<g
|
||||||
style="fill:#000000;fill-opacity:1"
|
id="g5125"
|
||||||
transform="translate(-1.3333333e-6,-1.3439941e-6)"
|
transform="translate(-1.3333333e-6,-1.3439941e-6)"
|
||||||
id="g5125">
|
style="fill:#000000;fill-opacity:1">
|
||||||
<g
|
<g
|
||||||
transform="matrix(0.91391326,0,0,0.91391326,7.9719907,17.595761)"
|
aria-label="Mi"
|
||||||
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:#000000;fill-opacity:1;stroke:none;stroke-width:0.28950602px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
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
|
<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"
|
id="path5210"
|
||||||
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 "
|
|
||||||
transform="matrix(0.26412464,0,0,0.26412464,24.988264,136.28626)"
|
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>
|
</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:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/language-settings.vue:
|
||||||
|
title: "表示言語"
|
||||||
|
pick-language: "言語を選択"
|
||||||
|
recommended: "推奨"
|
||||||
|
auto: "自動"
|
||||||
|
specify-language: "言語を指定"
|
||||||
|
info: "変更はページの再度読み込み後に反映されます。"
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
name: "名前"
|
name: "名前"
|
||||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
|||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
language: "言語"
|
|
||||||
pick-language: "言語を選択"
|
|
||||||
recommended: "推奨"
|
|
||||||
auto: "自動"
|
|
||||||
specify-language: "言語を指定"
|
|
||||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
|
||||||
cache: "キャッシュ"
|
cache: "キャッシュ"
|
||||||
clean-cache: "クリーンアップ"
|
clean-cache: "クリーンアップ"
|
||||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
|||||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "メール配信を有効にする"
|
||||||
email: "メールアドレス"
|
email: "メールアドレス"
|
||||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||||
|
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||||
smtp-host: "SMTPホスト"
|
smtp-host: "SMTPホスト"
|
||||||
smtp-port: "SMTPポート"
|
smtp-port: "SMTPポート"
|
||||||
smtp-user: "SMTPユーザー"
|
smtp-user: "SMTPユーザー"
|
||||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "{}としてサインイン中"
|
signed-in-as: "{}としてサインイン中"
|
||||||
lang: "言語"
|
|
||||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
|
||||||
recommended: "推奨"
|
|
||||||
auto: "自動"
|
|
||||||
specify-language: "言語を指定"
|
|
||||||
design: "デザインと表示"
|
design: "デザインと表示"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "ブロック"
|
block: "ブロック"
|
||||||
unblock: "ブロック解除"
|
unblock: "ブロック解除"
|
||||||
years-old: "{age}歳"
|
years-old: "{age}歳"
|
||||||
|
push-to-list: "リストに追加"
|
||||||
|
select-list: "リストを選択してください"
|
||||||
|
list-pushed: "{user}を{list}に追加しました"
|
||||||
mobile/views/pages/user/home.vue:
|
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:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/language-settings.vue:
|
||||||
|
title: "表示言語"
|
||||||
|
pick-language: "言語を選択"
|
||||||
|
recommended: "推奨"
|
||||||
|
auto: "自動"
|
||||||
|
specify-language: "言語を指定"
|
||||||
|
info: "変更はページの再度読み込み後に反映されます。"
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
name: "名前"
|
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."
|
enable-sounds-desc: "Spiel einen Ton ab beim Erhalten eines Beitrags bzw. einer Nachricht. Diese Einstellung wird im Browser gespeichert."
|
||||||
volume: "Lautstärke"
|
volume: "Lautstärke"
|
||||||
test: "Test"
|
test: "Test"
|
||||||
language: "Sprache"
|
|
||||||
pick-language: "Sprache auswählen"
|
|
||||||
recommended: "Empfohlen"
|
|
||||||
auto: "Automatisch"
|
|
||||||
specify-language: "Sprache auswählen"
|
|
||||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
|
||||||
cache: "キャッシュ"
|
cache: "キャッシュ"
|
||||||
clean-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."
|
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: "メールアドレス確認やパスワードリセットの際に使われます。"
|
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "メール配信を有効にする"
|
||||||
email: "メールアドレス"
|
email: "メールアドレス"
|
||||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||||
|
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||||
smtp-host: "SMTPホスト"
|
smtp-host: "SMTPホスト"
|
||||||
smtp-port: "SMTPポート"
|
smtp-port: "SMTPポート"
|
||||||
smtp-user: "SMTPユーザー"
|
smtp-user: "SMTPユーザー"
|
||||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "{}としてサインイン中"
|
signed-in-as: "{}としてサインイン中"
|
||||||
lang: "言語"
|
|
||||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
|
||||||
recommended: "推奨"
|
|
||||||
auto: "自動"
|
|
||||||
specify-language: "Sprache auswählen"
|
|
||||||
design: "デザインと表示"
|
design: "デザインと表示"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "ブロック"
|
block: "ブロック"
|
||||||
unblock: "ブロック解除"
|
unblock: "ブロック解除"
|
||||||
years-old: "{age}歳"
|
years-old: "{age}歳"
|
||||||
|
push-to-list: "リストに追加"
|
||||||
|
select-list: "リストを選択してください"
|
||||||
|
list-pushed: "{user}を{list}に追加しました"
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近の投稿"
|
recent-notes: "最近の投稿"
|
||||||
images: "画像"
|
images: "画像"
|
||||||
|
@ -26,7 +26,7 @@ common:
|
|||||||
close: "Close"
|
close: "Close"
|
||||||
do-not-copy-paste: "Please do not enter or paste the code here. Account may be compromised."
|
do-not-copy-paste: "Please do not enter or paste the code here. Account may be compromised."
|
||||||
load-more: "Load more"
|
load-more: "Load more"
|
||||||
enter-password: "パスワードを入力してください"
|
enter-password: "Please enter the Password"
|
||||||
got-it: "Got it!"
|
got-it: "Got it!"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Customization tips"
|
title: "Customization tips"
|
||||||
@ -268,7 +268,7 @@ common/views/components/theme.vue:
|
|||||||
install: "Install"
|
install: "Install"
|
||||||
installed: "\"{}\" has been installed"
|
installed: "\"{}\" has been installed"
|
||||||
create-a-theme: "Create a theme"
|
create-a-theme: "Create a theme"
|
||||||
save-created-theme: "Save a theme"
|
save-created-theme: "Save theme"
|
||||||
primary-color: "Primary color"
|
primary-color: "Primary color"
|
||||||
secondary-color: "Secondary color"
|
secondary-color: "Secondary color"
|
||||||
text-color: "Text color"
|
text-color: "Text color"
|
||||||
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{} users mentioned"
|
count: "{} users mentioned"
|
||||||
empty: "No popular hashtag trends"
|
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:
|
common/views/components/profile-editor.vue:
|
||||||
title: "Profile"
|
title: "Profile"
|
||||||
name: "Name"
|
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."
|
enable-sounds-desc: "Play a sound when you receive a post/message. This setting is stored in the browser."
|
||||||
volume: "Volume"
|
volume: "Volume"
|
||||||
test: "Test"
|
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"
|
cache: "Cache"
|
||||||
clean-cache: "Clear 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."
|
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."
|
email-config-info: "Used to confirm email and password reset etc."
|
||||||
enable-email: "Enable email delivery"
|
enable-email: "Enable email delivery"
|
||||||
email: "Email Address"
|
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-host: "SMTP Host"
|
||||||
smtp-port: "SMTP Port"
|
smtp-port: "SMTP Port"
|
||||||
smtp-user: "SMTP User"
|
smtp-user: "SMTP User"
|
||||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
select-file: "Choose files"
|
select-file: "Choose files"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "Signed in as {}"
|
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"
|
design: "Design and display"
|
||||||
dark-mode: "Dark Mode"
|
dark-mode: "Dark Mode"
|
||||||
i-am-under-limited-internet: "I'm in limited bandwidth"
|
i-am-under-limited-internet: "I'm in limited bandwidth"
|
||||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "Block"
|
block: "Block"
|
||||||
unblock: "Unblock"
|
unblock: "Unblock"
|
||||||
years-old: "{age} years old"
|
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:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "Recent notes"
|
recent-notes: "Recent notes"
|
||||||
images: "Images"
|
images: "Images"
|
||||||
|
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/language-settings.vue:
|
||||||
|
title: "表示言語"
|
||||||
|
pick-language: "言語を選択"
|
||||||
|
recommended: "推奨"
|
||||||
|
auto: "自動"
|
||||||
|
specify-language: "言語を指定"
|
||||||
|
info: "変更はページの再度読み込み後に反映されます。"
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
name: "名前"
|
name: "名前"
|
||||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
|||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
language: "言語"
|
|
||||||
pick-language: "言語を選択"
|
|
||||||
recommended: "推奨"
|
|
||||||
auto: "自動"
|
|
||||||
specify-language: "言語を指定"
|
|
||||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
|
||||||
cache: "キャッシュ"
|
cache: "キャッシュ"
|
||||||
clean-cache: "クリーンアップ"
|
clean-cache: "クリーンアップ"
|
||||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
|||||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "メール配信を有効にする"
|
||||||
email: "メールアドレス"
|
email: "メールアドレス"
|
||||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||||
|
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||||
smtp-host: "SMTPホスト"
|
smtp-host: "SMTPホスト"
|
||||||
smtp-port: "SMTPポート"
|
smtp-port: "SMTPポート"
|
||||||
smtp-user: "SMTPユーザー"
|
smtp-user: "SMTPユーザー"
|
||||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "{}としてサインイン中"
|
signed-in-as: "{}としてサインイン中"
|
||||||
lang: "言語"
|
|
||||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
|
||||||
recommended: "推奨"
|
|
||||||
auto: "自動"
|
|
||||||
specify-language: "言語を指定"
|
|
||||||
design: "デザインと表示"
|
design: "デザインと表示"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "ブロック"
|
block: "ブロック"
|
||||||
unblock: "ブロック解除"
|
unblock: "ブロック解除"
|
||||||
years-old: "{age}歳"
|
years-old: "{age}歳"
|
||||||
|
push-to-list: "リストに追加"
|
||||||
|
select-list: "リストを選択してください"
|
||||||
|
list-pushed: "{user}を{list}に追加しました"
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近の投稿"
|
recent-notes: "最近の投稿"
|
||||||
images: "画像"
|
images: "画像"
|
||||||
|
@ -26,7 +26,7 @@ common:
|
|||||||
close: "Fermer"
|
close: "Fermer"
|
||||||
do-not-copy-paste: "Veuillez ne pas entrer ou coller le code ici. Le compte peut être compromis."
|
do-not-copy-paste: "Veuillez ne pas entrer ou coller le code ici. Le compte peut être compromis."
|
||||||
load-more: "Charger plus"
|
load-more: "Charger plus"
|
||||||
enter-password: "パスワードを入力してください"
|
enter-password: "Veuillez entrer le mot de passe"
|
||||||
got-it: "J’ai compris !"
|
got-it: "J’ai compris !"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "Conseils de personnalisation"
|
title: "Conseils de personnalisation"
|
||||||
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{} utilisateurs·rices mentionnés·es"
|
count: "{} utilisateurs·rices mentionnés·es"
|
||||||
empty: "Aucune tendance"
|
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:
|
common/views/components/profile-editor.vue:
|
||||||
title: "Profil"
|
title: "Profil"
|
||||||
name: "Nom"
|
name: "Nom"
|
||||||
@ -458,10 +465,10 @@ common/views/components/profile-editor.vue:
|
|||||||
saved: "Profil mis à jour avec succès"
|
saved: "Profil mis à jour avec succès"
|
||||||
uploading: "En cours d'envoi …"
|
uploading: "En cours d'envoi …"
|
||||||
upload-failed: "Échec de l'envoi"
|
upload-failed: "Échec de l'envoi"
|
||||||
email: "メール設定"
|
email: "Paramètres de messagerie"
|
||||||
email-address: "メールアドレス"
|
email-address: "Adresse de courrier électronique"
|
||||||
email-verified: "メールアドレスが確認されました"
|
email-verified: "L’adresse du courrier électronique a été vérifiée."
|
||||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
email-not-verified: "Adresse de courriel n’est pas confirmée. Veuillez vérifier votre boite de réception."
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "Récupération"
|
fetching: "Récupération"
|
||||||
no-broadcasts: "Aucune annonce"
|
no-broadcasts: "Aucune annonce"
|
||||||
@ -736,8 +743,8 @@ desktop/views/components/settings.vue:
|
|||||||
note-visibility: "Visibilité de la publication"
|
note-visibility: "Visibilité de la publication"
|
||||||
default-note-visibility: "Visibilité par défaut"
|
default-note-visibility: "Visibilité par défaut"
|
||||||
remember-note-visibility: "Se souvenir du mode de visibilité de la publication"
|
remember-note-visibility: "Se souvenir du mode de visibilité de la publication"
|
||||||
web-search-engine: "ウェブ検索エンジン"
|
web-search-engine: "Moteur de recherche Web"
|
||||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
web-search-engine-desc: "Exemple : https://www.google.com/?#q={{query}}"
|
||||||
auto-popout: "Fenêtre contextuelle automatique"
|
auto-popout: "Fenêtre contextuelle automatique"
|
||||||
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
auto-popout-desc: "ウィンドウが開かれるとき、ポップアウト(ブラウザ外に切り離す)可能なら自動でポップアウトします。この設定はブラウザに記憶されます。"
|
||||||
advanced: "Paramètres avancés"
|
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."
|
enable-sounds-desc: "Jouer un son lorsque vous recevez un message. Ce paramètre est sauvegardé dans le navigateur."
|
||||||
volume: "Volume"
|
volume: "Volume"
|
||||||
test: "Test"
|
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"
|
cache: "Cache"
|
||||||
clean-cache: "Nettoyage"
|
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."
|
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-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: "Délai d’expiration"
|
||||||
external-user-recommendation-timeout-desc: "En millisecondes (par exemple : 300000)"
|
external-user-recommendation-timeout-desc: "En millisecondes (par exemple : 300000)"
|
||||||
email-config: "メールサーバーの設定"
|
email-config: "Paramètres du serveur de messagerie"
|
||||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
email-config-info: "Utilisé pour confirmer votre adresse de courrier électronique et la réinitialisation de votre mot de passe."
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "Activation de la distribution du courrier"
|
||||||
email: "メールアドレス"
|
email: "Adresse de courrier électronique"
|
||||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
smtp-secure: "Utiliser SSL/TLS implicitement dans la connexion SMTP"
|
||||||
smtp-host: "SMTPホスト"
|
smtp-secure-info: "Désactiver STARTTLS lorsque celui-ci est utilisé."
|
||||||
smtp-port: "SMTPポート"
|
smtp-host: "Hôte SMTP"
|
||||||
smtp-user: "SMTPユーザー"
|
smtp-port: "Port SMTP"
|
||||||
smtp-pass: "SMTPパスワード"
|
smtp-user: "Utilisateur SMTP"
|
||||||
|
smtp-pass: "Mot de passe SMTP"
|
||||||
admin/views/charts.vue:
|
admin/views/charts.vue:
|
||||||
title: "Graph"
|
title: "Graph"
|
||||||
per-day: "par jour"
|
per-day: "par jour"
|
||||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
select-file: "Choisissez un fichier"
|
select-file: "Choisissez un fichier"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "Connecté·e en tant que {}"
|
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"
|
design: "Affichage et design"
|
||||||
dark-mode: "Mode nuit"
|
dark-mode: "Mode nuit"
|
||||||
i-am-under-limited-internet: "J'ai un accès Internet limité"
|
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"
|
note-visibility: "Visibilité de la publication"
|
||||||
default-note-visibility: "Visibilité par défaut"
|
default-note-visibility: "Visibilité par défaut"
|
||||||
remember-note-visibility: "Se souvenir du mode de visibilité de la publication"
|
remember-note-visibility: "Se souvenir du mode de visibilité de la publication"
|
||||||
web-search-engine: "ウェブ検索エンジン"
|
web-search-engine: "Moteur de recherche Web"
|
||||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
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'"
|
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-raw-images: "Afficher les photos jointes en haute qualité"
|
||||||
load-remote-media: "Afficher les médias sur le serveur distant"
|
load-remote-media: "Afficher les médias sur le serveur distant"
|
||||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "Bloquer"
|
block: "Bloquer"
|
||||||
unblock: "Débloquer"
|
unblock: "Débloquer"
|
||||||
years-old: "{age} ans"
|
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:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "Notes récentes"
|
recent-notes: "Notes récentes"
|
||||||
images: "Images"
|
images: "Images"
|
||||||
|
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/language-settings.vue:
|
||||||
|
title: "表示言語"
|
||||||
|
pick-language: "言語を選択"
|
||||||
|
recommended: "推奨"
|
||||||
|
auto: "自動"
|
||||||
|
specify-language: "言語を指定"
|
||||||
|
info: "変更はページの再度読み込み後に反映されます。"
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
name: "名前"
|
name: "名前"
|
||||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
|||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
language: "言語"
|
|
||||||
pick-language: "言語を選択"
|
|
||||||
recommended: "推奨"
|
|
||||||
auto: "自動"
|
|
||||||
specify-language: "言語を指定"
|
|
||||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
|
||||||
cache: "キャッシュ"
|
cache: "キャッシュ"
|
||||||
clean-cache: "クリーンアップ"
|
clean-cache: "クリーンアップ"
|
||||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
|||||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "メール配信を有効にする"
|
||||||
email: "メールアドレス"
|
email: "メールアドレス"
|
||||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||||
|
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||||
smtp-host: "SMTPホスト"
|
smtp-host: "SMTPホスト"
|
||||||
smtp-port: "SMTPポート"
|
smtp-port: "SMTPポート"
|
||||||
smtp-user: "SMTPユーザー"
|
smtp-user: "SMTPユーザー"
|
||||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "{}としてサインイン中"
|
signed-in-as: "{}としてサインイン中"
|
||||||
lang: "言語"
|
|
||||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
|
||||||
recommended: "推奨"
|
|
||||||
auto: "自動"
|
|
||||||
specify-language: "言語を指定"
|
|
||||||
design: "デザインと表示"
|
design: "デザインと表示"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "ブロック"
|
block: "ブロック"
|
||||||
unblock: "ブロック解除"
|
unblock: "ブロック解除"
|
||||||
years-old: "{age}歳"
|
years-old: "{age}歳"
|
||||||
|
push-to-list: "リストに追加"
|
||||||
|
select-list: "リストを選択してください"
|
||||||
|
list-pushed: "{user}を{list}に追加しました"
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近の投稿"
|
recent-notes: "最近の投稿"
|
||||||
images: "画像"
|
images: "画像"
|
||||||
|
@ -440,13 +440,11 @@ common/views/components/stream-indicator.vue:
|
|||||||
reconnecting: "再接続中"
|
reconnecting: "再接続中"
|
||||||
connected: "接続完了"
|
connected: "接続完了"
|
||||||
|
|
||||||
common/views/components/twitter-setting.vue:
|
common/views/components/integration-settings.vue:
|
||||||
description: "お使いのTwitterアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでTwitterアカウント情報が表示されるようになったり、Twitterを用いた便利なサインインを利用できるようになります。"
|
title: "サービス連携"
|
||||||
connected-to: "次のTwitterアカウントに接続されています"
|
connect: "接続する"
|
||||||
detail: "詳細..."
|
|
||||||
reconnect: "再接続する"
|
|
||||||
connect: "Twitterと接続する"
|
|
||||||
disconnect: "切断する"
|
disconnect: "切断する"
|
||||||
|
connected-to: "次のアカウントに接続されています"
|
||||||
|
|
||||||
common/views/components/github-setting.vue:
|
common/views/components/github-setting.vue:
|
||||||
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
|
description: "お使いのGitHubアカウントをお使いのMisskeyアカウントに接続しておくと、プロフィールでGitHubアカウント情報が表示されるようになったり、GitHubを用いた便利なサインインを利用できるようになります。"
|
||||||
@ -485,12 +483,21 @@ common/views/components/trends.vue:
|
|||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
|
||||||
|
common/views/components/language-settings.vue:
|
||||||
|
title: "表示言語"
|
||||||
|
pick-language: "言語を選択"
|
||||||
|
recommended: "推奨"
|
||||||
|
auto: "自動"
|
||||||
|
specify-language: "言語を指定"
|
||||||
|
info: "変更はページの再度読み込み後に反映されます。"
|
||||||
|
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
name: "名前"
|
name: "名前"
|
||||||
account: "アカウント"
|
account: "アカウント"
|
||||||
location: "場所"
|
location: "場所"
|
||||||
description: "自己紹介"
|
description: "自己紹介"
|
||||||
|
language: "言語"
|
||||||
birthday: "誕生日"
|
birthday: "誕生日"
|
||||||
avatar: "アイコン"
|
avatar: "アイコン"
|
||||||
banner: "バナー"
|
banner: "バナー"
|
||||||
@ -870,13 +877,6 @@ desktop/views/components/settings.vue:
|
|||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
|
|
||||||
language: "言語"
|
|
||||||
pick-language: "言語を選択"
|
|
||||||
recommended: "推奨"
|
|
||||||
auto: "自動"
|
|
||||||
specify-language: "言語を指定"
|
|
||||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
|
||||||
|
|
||||||
cache: "キャッシュ"
|
cache: "キャッシュ"
|
||||||
clean-cache: "クリーンアップ"
|
clean-cache: "クリーンアップ"
|
||||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||||
@ -1554,11 +1554,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
|
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "{}としてサインイン中"
|
signed-in-as: "{}としてサインイン中"
|
||||||
lang: "言語"
|
|
||||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
|
||||||
recommended: "推奨"
|
|
||||||
auto: "自動"
|
|
||||||
specify-language: "言語を指定"
|
|
||||||
design: "デザインと表示"
|
design: "デザインと表示"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
@ -1586,18 +1581,6 @@ mobile/views/pages/settings.vue:
|
|||||||
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
|
||||||
load-raw-images: "添付された画像を高画質で表示する"
|
load-raw-images: "添付された画像を高画質で表示する"
|
||||||
load-remote-media: "リモートサーバーのメディアを表示する"
|
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"
|
update: "Misskey Update"
|
||||||
version: "バージョン:"
|
version: "バージョン:"
|
||||||
latest-version: "最新のバージョン:"
|
latest-version: "最新のバージョン:"
|
||||||
@ -1628,6 +1611,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "ブロック"
|
block: "ブロック"
|
||||||
unblock: "ブロック解除"
|
unblock: "ブロック解除"
|
||||||
years-old: "{age}歳"
|
years-old: "{age}歳"
|
||||||
|
push-to-list: "リストに追加"
|
||||||
|
select-list: "リストを選択してください"
|
||||||
|
list-pushed: "{user}を{list}に追加しました"
|
||||||
|
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近の投稿"
|
recent-notes: "最近の投稿"
|
||||||
|
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "流行は自分で作るんや"
|
empty: "流行は自分で作るんや"
|
||||||
|
common/views/components/language-settings.vue:
|
||||||
|
title: "表示言語"
|
||||||
|
pick-language: "言語を選択"
|
||||||
|
recommended: "推奨"
|
||||||
|
auto: "自動"
|
||||||
|
specify-language: "言語を指定"
|
||||||
|
info: "変更はページの再度読み込み後に反映されます。"
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
name: "名前"
|
name: "名前"
|
||||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
|||||||
enable-sounds-desc: "投稿やメッセージもろたとき、音鳴らしたるわ。大丈夫や、この設定はブラウザが覚えてくれとる。"
|
enable-sounds-desc: "投稿やメッセージもろたとき、音鳴らしたるわ。大丈夫や、この設定はブラウザが覚えてくれとる。"
|
||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
language: "言語"
|
|
||||||
pick-language: "言語選んでや"
|
|
||||||
recommended: "おすすめ"
|
|
||||||
auto: "自動"
|
|
||||||
specify-language: "言語選んでくれ"
|
|
||||||
language-desc: "変更はページの再度読み込み後に反映されんで。"
|
|
||||||
cache: "キャッシュ"
|
cache: "キャッシュ"
|
||||||
clean-cache: "お掃除"
|
clean-cache: "お掃除"
|
||||||
cache-warn: "お掃除するとな、ブラウザが覚えてくれとるアカウントのあれこれや書きかけの投稿・返信・メッセージや設定情報なんかのデータが全部飛んでいくんや。これやったらページ再読込しといてな。"
|
cache-warn: "お掃除するとな、ブラウザが覚えてくれとるアカウントのあれこれや書きかけの投稿・返信・メッセージや設定情報なんかのデータが全部飛んでいくんや。これやったらページ再読込しといてな。"
|
||||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
|||||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "メール配信を有効にする"
|
||||||
email: "メールアドレス"
|
email: "メールアドレス"
|
||||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||||
|
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||||
smtp-host: "SMTPホスト"
|
smtp-host: "SMTPホスト"
|
||||||
smtp-port: "SMTPポート"
|
smtp-port: "SMTPポート"
|
||||||
smtp-user: "SMTPユーザー"
|
smtp-user: "SMTPユーザー"
|
||||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
select-file: "ファイル選んでや"
|
select-file: "ファイル選んでや"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "あんたは橋の下で拾った{}や!"
|
signed-in-as: "あんたは橋の下で拾った{}や!"
|
||||||
lang: "言語"
|
|
||||||
lang-tip: "ページもっぺん読み込んだら反映したるで。"
|
|
||||||
recommended: "これええで"
|
|
||||||
auto: "勝手にやる"
|
|
||||||
specify-language: "言語選びや"
|
|
||||||
design: "見た感じ"
|
design: "見た感じ"
|
||||||
dark-mode: "ナイトゲームや!"
|
dark-mode: "ナイトゲームや!"
|
||||||
i-am-under-limited-internet: "電波と阪神がザコいんや"
|
i-am-under-limited-internet: "電波と阪神がザコいんや"
|
||||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "ブロック"
|
block: "ブロック"
|
||||||
unblock: "ブロックやめたる"
|
unblock: "ブロックやめたる"
|
||||||
years-old: "{age}歳"
|
years-old: "{age}歳"
|
||||||
|
push-to-list: "リストに追加"
|
||||||
|
select-list: "リストを選択してください"
|
||||||
|
list-pushed: "{user}を{list}に追加しました"
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近儲かりまっか?"
|
recent-notes: "最近儲かりまっか?"
|
||||||
images: "画像"
|
images: "画像"
|
||||||
|
@ -26,7 +26,7 @@ common:
|
|||||||
close: "닫기"
|
close: "닫기"
|
||||||
do-not-copy-paste: "여기에 코드를 입력하거나 붙여넣지 마십시오. 계정이 무단으로 사용될 수 있습니다."
|
do-not-copy-paste: "여기에 코드를 입력하거나 붙여넣지 마십시오. 계정이 무단으로 사용될 수 있습니다."
|
||||||
load-more: "더보기"
|
load-more: "더보기"
|
||||||
enter-password: "パスワードを入力してください"
|
enter-password: "비밀번호를 입력하여 주십시오"
|
||||||
got-it: "알겠습니다"
|
got-it: "알겠습니다"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "커스터마이징 도움말"
|
title: "커스터마이징 도움말"
|
||||||
@ -124,7 +124,7 @@ common:
|
|||||||
is-remote-user: "이 유저 정보는 복사본입니다."
|
is-remote-user: "이 유저 정보는 복사본입니다."
|
||||||
is-remote-post: "이 글 정보는 복사본입니다."
|
is-remote-post: "이 글 정보는 복사본입니다."
|
||||||
view-on-remote: "정확한 정보 보기"
|
view-on-remote: "정확한 정보 보기"
|
||||||
renoted-by: "{user}가 Renote"
|
renoted-by: "{user}이(가) Renote"
|
||||||
error:
|
error:
|
||||||
title: '오류가 발생했습니다'
|
title: '오류가 발생했습니다'
|
||||||
retry: '다시 시도'
|
retry: '다시 시도'
|
||||||
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}명이 언급함"
|
count: "{}명이 언급함"
|
||||||
empty: "트렌드 없음"
|
empty: "트렌드 없음"
|
||||||
|
common/views/components/language-settings.vue:
|
||||||
|
title: "표시 언어"
|
||||||
|
pick-language: "언어 설정"
|
||||||
|
recommended: "추천"
|
||||||
|
auto: "자동"
|
||||||
|
specify-language: "언어 지정"
|
||||||
|
info: "변경사항은 페이지를 새로고침한 뒤에 반영됩니다."
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "프로필"
|
title: "프로필"
|
||||||
name: "이름"
|
name: "이름"
|
||||||
@ -458,10 +465,10 @@ common/views/components/profile-editor.vue:
|
|||||||
saved: "프로필을 저장하였습니다"
|
saved: "프로필을 저장하였습니다"
|
||||||
uploading: "업로드 중"
|
uploading: "업로드 중"
|
||||||
upload-failed: "업로드에 실패하였습니다"
|
upload-failed: "업로드에 실패하였습니다"
|
||||||
email: "メール設定"
|
email: "메일 설정"
|
||||||
email-address: "メールアドレス"
|
email-address: "메일 주소"
|
||||||
email-verified: "メールアドレスが確認されました"
|
email-verified: "매일 주소가 확인되었습니다"
|
||||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
email-not-verified: "메일 주소가 확인되지 않았습니다. 받은 편지함을 확인하여 주시기 바랍니다."
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "확인중"
|
fetching: "확인중"
|
||||||
no-broadcasts: "공지사항이 없습니다"
|
no-broadcasts: "공지사항이 없습니다"
|
||||||
@ -736,8 +743,8 @@ desktop/views/components/settings.vue:
|
|||||||
note-visibility: "게시물의 공개 범위"
|
note-visibility: "게시물의 공개 범위"
|
||||||
default-note-visibility: "기본 공개 범위"
|
default-note-visibility: "기본 공개 범위"
|
||||||
remember-note-visibility: "글의 공개 범위를 기억하기"
|
remember-note-visibility: "글의 공개 범위를 기억하기"
|
||||||
web-search-engine: "ウェブ検索エンジン"
|
web-search-engine: "웹 검색엔진"
|
||||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
web-search-engine-desc: "예: https://www.google.com/?#q={{query}}"
|
||||||
auto-popout: "창 자동 팝아웃"
|
auto-popout: "창 자동 팝아웃"
|
||||||
auto-popout-desc: "창이 열릴 때 팝아웃 (브라우저 밖으로 분리) 이 가능한 경우 자동으로 팝아웃합니다. 이 설정은 브라우저에 저장됩니다."
|
auto-popout-desc: "창이 열릴 때 팝아웃 (브라우저 밖으로 분리) 이 가능한 경우 자동으로 팝아웃합니다. 이 설정은 브라우저에 저장됩니다."
|
||||||
advanced: "고급 설정"
|
advanced: "고급 설정"
|
||||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
|||||||
enable-sounds-desc: "글이나 메시지를 송수신하였을 때 소리를 재생합니다. 이 설정은 브라우저에 저장됩니다."
|
enable-sounds-desc: "글이나 메시지를 송수신하였을 때 소리를 재생합니다. 이 설정은 브라우저에 저장됩니다."
|
||||||
volume: "음량"
|
volume: "음량"
|
||||||
test: "테스트"
|
test: "테스트"
|
||||||
language: "언어"
|
|
||||||
pick-language: "언어 설정"
|
|
||||||
recommended: "추천"
|
|
||||||
auto: "자동"
|
|
||||||
specify-language: "언어 지정"
|
|
||||||
language-desc: "변경사항은 페이지를 새로고침한 뒤에 반영됩니다."
|
|
||||||
cache: "캐시"
|
cache: "캐시"
|
||||||
clean-cache: "지우기"
|
clean-cache: "지우기"
|
||||||
cache-warn: "지우기를 실행하면 브라우저에 저장된 계정 정보 캐시, 글이나 답글 및 메시지의 임시 저장, 그 외 데이터 (설정 정보 포함) 가 삭제 됩니다. 지우기 작업을 수행한 후 페이지를 다시 로드해야 합니다."
|
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-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: "타임 아웃"
|
||||||
external-user-recommendation-timeout-desc: "밀리초 (예: 300000)"
|
external-user-recommendation-timeout-desc: "밀리초 (예: 300000)"
|
||||||
email-config: "メールサーバーの設定"
|
email-config: "메일 서버 설정"
|
||||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
email-config-info: "메일 주소 확인 혹은 암호 재설정에 사용 됩니다."
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "메일 발신 활성화"
|
||||||
email: "メールアドレス"
|
email: "메일 주소"
|
||||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
smtp-secure: "SMTP 연결에 암시적으로 SSL/TLS를 사용"
|
||||||
smtp-host: "SMTPホスト"
|
smtp-secure-info: "STARTTLS를 사용 시 ON으로 합니다."
|
||||||
smtp-port: "SMTPポート"
|
smtp-host: "SMTP 호스트"
|
||||||
smtp-user: "SMTPユーザー"
|
smtp-port: "SMTP 포트"
|
||||||
smtp-pass: "SMTPパスワード"
|
smtp-user: "SMTP 사용자"
|
||||||
|
smtp-pass: "SMTP 비밀번호"
|
||||||
admin/views/charts.vue:
|
admin/views/charts.vue:
|
||||||
title: "차트"
|
title: "차트"
|
||||||
per-day: "1일마다"
|
per-day: "1일마다"
|
||||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
select-file: "파일 선택"
|
select-file: "파일 선택"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "{}(으)로 로그인"
|
signed-in-as: "{}(으)로 로그인"
|
||||||
lang: "언어"
|
|
||||||
lang-tip: "변경사항은 페이지를 새로고침한 뒤에 반영됩니다."
|
|
||||||
recommended: "추천"
|
|
||||||
auto: "자동"
|
|
||||||
specify-language: "언어 지정"
|
|
||||||
design: "디자인 및 표시"
|
design: "디자인 및 표시"
|
||||||
dark-mode: "다크 모드"
|
dark-mode: "다크 모드"
|
||||||
i-am-under-limited-internet: "저는 통신 대역폭이 제한되어 있습니다"
|
i-am-under-limited-internet: "저는 통신 대역폭이 제한되어 있습니다"
|
||||||
@ -1387,8 +1384,8 @@ mobile/views/pages/settings.vue:
|
|||||||
note-visibility: "게시물의 공개 범위"
|
note-visibility: "게시물의 공개 범위"
|
||||||
default-note-visibility: "기본 공개 범위"
|
default-note-visibility: "기본 공개 범위"
|
||||||
remember-note-visibility: "글의 공개 범위를 기억하기"
|
remember-note-visibility: "글의 공개 범위를 기억하기"
|
||||||
web-search-engine: "ウェブ検索エンジン"
|
web-search-engine: "웹 검색엔진"
|
||||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
web-search-engine-desc: "예: https://www.google.com/?#q={{query}}"
|
||||||
disable-via-mobile: "작성하는 글에 \"모바일에서 작성함\" 을 붙이지 않음"
|
disable-via-mobile: "작성하는 글에 \"모바일에서 작성함\" 을 붙이지 않음"
|
||||||
load-raw-images: "첨부 이미지를 고품질로 표시"
|
load-raw-images: "첨부 이미지를 고품질로 표시"
|
||||||
load-remote-media: "원격 서버의 미디어를 표시"
|
load-remote-media: "원격 서버의 미디어를 표시"
|
||||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "차단"
|
block: "차단"
|
||||||
unblock: "차단 해제"
|
unblock: "차단 해제"
|
||||||
years-old: "{age}세"
|
years-old: "{age}세"
|
||||||
|
push-to-list: "리스트에 추가"
|
||||||
|
select-list: "リストを選択してください"
|
||||||
|
list-pushed: "{user}を{list}に追加しました"
|
||||||
mobile/views/pages/user/home.vue:
|
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:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/language-settings.vue:
|
||||||
|
title: "表示言語"
|
||||||
|
pick-language: "言語を選択"
|
||||||
|
recommended: "推奨"
|
||||||
|
auto: "自動"
|
||||||
|
specify-language: "言語を指定"
|
||||||
|
info: "変更はページの再度読み込み後に反映されます。"
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
name: "名前"
|
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."
|
enable-sounds-desc: "Een geluid afspelen bij het ontvangen van een bericht. Deze instelling wordt opgeslagen in je browser."
|
||||||
volume: "Volume"
|
volume: "Volume"
|
||||||
test: "Testen"
|
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"
|
cache: "Cache"
|
||||||
clean-cache: "Opschonen"
|
clean-cache: "Opschonen"
|
||||||
cache-warn: "De cache van je accountinformatie/berichten/antwoorden/instellingen wordt verwijderd. Je moet de pagina herladen na het 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: "メールアドレス確認やパスワードリセットの際に使われます。"
|
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "メール配信を有効にする"
|
||||||
email: "メールアドレス"
|
email: "メールアドレス"
|
||||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||||
|
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||||
smtp-host: "SMTPホスト"
|
smtp-host: "SMTPホスト"
|
||||||
smtp-port: "SMTPポート"
|
smtp-port: "SMTPポート"
|
||||||
smtp-user: "SMTPユーザー"
|
smtp-user: "SMTPユーザー"
|
||||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
select-file: "Kies een bestand"
|
select-file: "Kies een bestand"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "Ingelogd als {}"
|
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"
|
design: "Ontwerp en weergave"
|
||||||
dark-mode: "Donkere modus"
|
dark-mode: "Donkere modus"
|
||||||
i-am-under-limited-internet: "Ik heb beperkt internet"
|
i-am-under-limited-internet: "Ik heb beperkt internet"
|
||||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "ブロック"
|
block: "ブロック"
|
||||||
unblock: "ブロック解除"
|
unblock: "ブロック解除"
|
||||||
years-old: "{age}歳"
|
years-old: "{age}歳"
|
||||||
|
push-to-list: "リストに追加"
|
||||||
|
select-list: "リストを選択してください"
|
||||||
|
list-pushed: "{user}を{list}に追加しました"
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "Recente notities"
|
recent-notes: "Recente notities"
|
||||||
images: "Afbeeldingen"
|
images: "Afbeeldingen"
|
||||||
|
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/language-settings.vue:
|
||||||
|
title: "表示言語"
|
||||||
|
pick-language: "言語を選択"
|
||||||
|
recommended: "推奨"
|
||||||
|
auto: "自動"
|
||||||
|
specify-language: "言語を指定"
|
||||||
|
info: "変更はページの再度読み込み後に反映されます。"
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
name: "名前"
|
name: "名前"
|
||||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
|||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||||
volume: "Volum"
|
volume: "Volum"
|
||||||
test: "Test"
|
test: "Test"
|
||||||
language: "Språk"
|
|
||||||
pick-language: "Velg språk"
|
|
||||||
recommended: "Anbefalt"
|
|
||||||
auto: "Automatisk"
|
|
||||||
specify-language: "Angi språk"
|
|
||||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
|
||||||
cache: "Hurtiglager"
|
cache: "Hurtiglager"
|
||||||
clean-cache: "クリーンアップ"
|
clean-cache: "クリーンアップ"
|
||||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
|||||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "メール配信を有効にする"
|
||||||
email: "メールアドレス"
|
email: "メールアドレス"
|
||||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||||
|
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||||
smtp-host: "SMTPホスト"
|
smtp-host: "SMTPホスト"
|
||||||
smtp-port: "SMTPポート"
|
smtp-port: "SMTPポート"
|
||||||
smtp-user: "SMTPユーザー"
|
smtp-user: "SMTPユーザー"
|
||||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "{}としてサインイン中"
|
signed-in-as: "{}としてサインイン中"
|
||||||
lang: "Språk"
|
|
||||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
|
||||||
recommended: "Anbefalt"
|
|
||||||
auto: "Automatisk"
|
|
||||||
specify-language: "Angi språk"
|
|
||||||
design: "デザインと表示"
|
design: "デザインと表示"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "ブロック"
|
block: "ブロック"
|
||||||
unblock: "ブロック解除"
|
unblock: "ブロック解除"
|
||||||
years-old: "{age}歳"
|
years-old: "{age}歳"
|
||||||
|
push-to-list: "リストに追加"
|
||||||
|
select-list: "リストを選択してください"
|
||||||
|
list-pushed: "{user}を{list}に追加しました"
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "Nylige innlegg"
|
recent-notes: "Nylige innlegg"
|
||||||
images: "Bilder"
|
images: "Bilder"
|
||||||
|
@ -16,7 +16,7 @@ common:
|
|||||||
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
reaction-desc: "あなたの気持ちを伝える最も簡単な方法です。Misskeyは、他のユーザーの投稿に様々なリアクションを付けることができます。いちどMisskeyのリアクション機能を体験してしまうと、もう「いいね」の概念しか存在しないSNSには戻れなくなるかもしれません。"
|
||||||
ui: "Interfejs"
|
ui: "Interfejs"
|
||||||
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
ui-desc: "どのようなUIが使いやすいかは人それぞれです。だから、Misskeyは自由度の高いUIを持っています。レイアウトやデザインを調整したり、カスタマイズ可能な様々なウィジェットを配置したりして、自分だけのホームを作ってください。"
|
||||||
drive: "ドライブ"
|
drive: "Dysk"
|
||||||
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
drive-desc: "以前投稿したことのある画像をまた投稿したくなったことはありませんか?もしくは、アップロードしたファイルをフォルダ分けして整理したくなったことはありませんか?Misskeyの根幹に組み込まれたドライブ機能によってそれらが解決します。ファイルの共有も簡単です。"
|
||||||
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
outro: "他にもMisskeyにしかない機能はまだまだあるので、ぜひあなた自身の目で確かめてください。Misskeyは分散型SNSなので、このインスタンスが気に入らなければ他のインスタンスを試すこともできます。それでは、GLHF!"
|
||||||
adblock:
|
adblock:
|
||||||
@ -53,7 +53,7 @@ common:
|
|||||||
years_ago: "{} lat temu"
|
years_ago: "{} lat temu"
|
||||||
month-and-day: "{month}-{day}"
|
month-and-day: "{month}-{day}"
|
||||||
trash: "Kosz"
|
trash: "Kosz"
|
||||||
drive: "ドライブ"
|
drive: "Dysk"
|
||||||
messaging: "トーク"
|
messaging: "トーク"
|
||||||
weekday-short:
|
weekday-short:
|
||||||
sunday: "N"
|
sunday: "N"
|
||||||
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/language-settings.vue:
|
||||||
|
title: "表示言語"
|
||||||
|
pick-language: "言語を選択"
|
||||||
|
recommended: "推奨"
|
||||||
|
auto: "自動"
|
||||||
|
specify-language: "言語を指定"
|
||||||
|
info: "変更はページの再度読み込み後に反映されます。"
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
name: "名前"
|
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ę."
|
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ść"
|
volume: "Głośność"
|
||||||
test: "Test"
|
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"
|
cache: "Pamięć podręczna"
|
||||||
clean-cache: "Wyczyść"
|
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."
|
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: "メールアドレス確認やパスワードリセットの際に使われます。"
|
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "メール配信を有効にする"
|
||||||
email: "メールアドレス"
|
email: "メールアドレス"
|
||||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||||
|
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||||
smtp-host: "SMTPホスト"
|
smtp-host: "SMTPホスト"
|
||||||
smtp-port: "SMTPポート"
|
smtp-port: "SMTPポート"
|
||||||
smtp-user: "SMTPユーザー"
|
smtp-user: "SMTPユーザー"
|
||||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
select-file: "Wybierz plik"
|
select-file: "Wybierz plik"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "Zalogowany jako {}"
|
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"
|
design: "Wygląd i wyświetlanie"
|
||||||
dark-mode: "Tryb ciemny"
|
dark-mode: "Tryb ciemny"
|
||||||
i-am-under-limited-internet: "Ograniczaj zużycie transferu"
|
i-am-under-limited-internet: "Ograniczaj zużycie transferu"
|
||||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "ブロック"
|
block: "ブロック"
|
||||||
unblock: "ブロック解除"
|
unblock: "ブロック解除"
|
||||||
years-old: "{age} lat"
|
years-old: "{age} lat"
|
||||||
|
push-to-list: "リストに追加"
|
||||||
|
select-list: "リストを選択してください"
|
||||||
|
list-pushed: "{user}を{list}に追加しました"
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "Ostatnie wpisy"
|
recent-notes: "Ostatnie wpisy"
|
||||||
images: "Zdjęcia"
|
images: "Zdjęcia"
|
||||||
|
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/language-settings.vue:
|
||||||
|
title: "表示言語"
|
||||||
|
pick-language: "言語を選択"
|
||||||
|
recommended: "推奨"
|
||||||
|
auto: "自動"
|
||||||
|
specify-language: "言語を指定"
|
||||||
|
info: "変更はページの再度読み込み後に反映されます。"
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
name: "名前"
|
name: "名前"
|
||||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
|||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
language: "言語"
|
|
||||||
pick-language: "言語を選択"
|
|
||||||
recommended: "推奨"
|
|
||||||
auto: "自動"
|
|
||||||
specify-language: "言語を指定"
|
|
||||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
|
||||||
cache: "キャッシュ"
|
cache: "キャッシュ"
|
||||||
clean-cache: "クリーンアップ"
|
clean-cache: "クリーンアップ"
|
||||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
|||||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "メール配信を有効にする"
|
||||||
email: "メールアドレス"
|
email: "メールアドレス"
|
||||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||||
|
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||||
smtp-host: "SMTPホスト"
|
smtp-host: "SMTPホスト"
|
||||||
smtp-port: "SMTPポート"
|
smtp-port: "SMTPポート"
|
||||||
smtp-user: "SMTPユーザー"
|
smtp-user: "SMTPユーザー"
|
||||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "{}としてサインイン中"
|
signed-in-as: "{}としてサインイン中"
|
||||||
lang: "言語"
|
|
||||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
|
||||||
recommended: "推奨"
|
|
||||||
auto: "自動"
|
|
||||||
specify-language: "言語を指定"
|
|
||||||
design: "デザインと表示"
|
design: "デザインと表示"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "ブロック"
|
block: "ブロック"
|
||||||
unblock: "ブロック解除"
|
unblock: "ブロック解除"
|
||||||
years-old: "{age}歳"
|
years-old: "{age}歳"
|
||||||
|
push-to-list: "リストに追加"
|
||||||
|
select-list: "リストを選択してください"
|
||||||
|
list-pushed: "{user}を{list}に追加しました"
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "Notas recentes"
|
recent-notes: "Notas recentes"
|
||||||
images: "Imagens"
|
images: "Imagens"
|
||||||
|
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{}人が投稿"
|
count: "{}人が投稿"
|
||||||
empty: "トレンドなし"
|
empty: "トレンドなし"
|
||||||
|
common/views/components/language-settings.vue:
|
||||||
|
title: "表示言語"
|
||||||
|
pick-language: "言語を選択"
|
||||||
|
recommended: "推奨"
|
||||||
|
auto: "自動"
|
||||||
|
specify-language: "言語を指定"
|
||||||
|
info: "変更はページの再度読み込み後に反映されます。"
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "プロフィール"
|
title: "プロフィール"
|
||||||
name: "名前"
|
name: "名前"
|
||||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
|||||||
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
enable-sounds-desc: "投稿やメッセージを送受信したときなどにサウンドを再生します。この設定はブラウザに記憶されます。"
|
||||||
volume: "ボリューム"
|
volume: "ボリューム"
|
||||||
test: "テスト"
|
test: "テスト"
|
||||||
language: "言語"
|
|
||||||
pick-language: "言語を選択"
|
|
||||||
recommended: "推奨"
|
|
||||||
auto: "自動"
|
|
||||||
specify-language: "言語を指定"
|
|
||||||
language-desc: "変更はページの再度読み込み後に反映されます。"
|
|
||||||
cache: "キャッシュ"
|
cache: "キャッシュ"
|
||||||
clean-cache: "クリーンアップ"
|
clean-cache: "クリーンアップ"
|
||||||
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
cache-warn: "クリーンアップを行うと、ブラウザに記憶されたアカウント情報のキャッシュ、書きかけの投稿・返信・メッセージ、およびその他のデータ(設定情報含む)が削除されます。クリーンアップを行った後はページを再度読み込みする必要があります。"
|
||||||
@ -1008,7 +1009,8 @@ admin/views/instance.vue:
|
|||||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "メール配信を有効にする"
|
||||||
email: "メールアドレス"
|
email: "メールアドレス"
|
||||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
smtp-secure: "SMTP接続に暗黙的なSSL/TLSを使用する"
|
||||||
|
smtp-secure-info: "STARTTLS使用時はオフにします。"
|
||||||
smtp-host: "SMTPホスト"
|
smtp-host: "SMTPホスト"
|
||||||
smtp-port: "SMTPポート"
|
smtp-port: "SMTPポート"
|
||||||
smtp-user: "SMTPユーザー"
|
smtp-user: "SMTPユーザー"
|
||||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
select-file: "ファイルを選択"
|
select-file: "ファイルを選択"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "{}としてサインイン中"
|
signed-in-as: "{}としてサインイン中"
|
||||||
lang: "言語"
|
|
||||||
lang-tip: "変更はページの再読み込み後に反映されます。"
|
|
||||||
recommended: "推奨"
|
|
||||||
auto: "自動"
|
|
||||||
specify-language: "言語を指定"
|
|
||||||
design: "デザインと表示"
|
design: "デザインと表示"
|
||||||
dark-mode: "ダークモード"
|
dark-mode: "ダークモード"
|
||||||
i-am-under-limited-internet: "私は通信を制限されている"
|
i-am-under-limited-internet: "私は通信を制限されている"
|
||||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "ブロック"
|
block: "ブロック"
|
||||||
unblock: "ブロック解除"
|
unblock: "ブロック解除"
|
||||||
years-old: "{age}歳"
|
years-old: "{age}歳"
|
||||||
|
push-to-list: "リストに追加"
|
||||||
|
select-list: "リストを選択してください"
|
||||||
|
list-pushed: "{user}を{list}に追加しました"
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近の投稿"
|
recent-notes: "最近の投稿"
|
||||||
images: "画像"
|
images: "画像"
|
||||||
|
@ -26,7 +26,7 @@ common:
|
|||||||
close: "关闭"
|
close: "关闭"
|
||||||
do-not-copy-paste: "请不要在这里输入或粘贴代码。您帐户可能会受到损害。"
|
do-not-copy-paste: "请不要在这里输入或粘贴代码。您帐户可能会受到损害。"
|
||||||
load-more: "加载更多"
|
load-more: "加载更多"
|
||||||
enter-password: "パスワードを入力してください"
|
enter-password: "请输入您的密码"
|
||||||
got-it: "没问题"
|
got-it: "没问题"
|
||||||
customization-tips:
|
customization-tips:
|
||||||
title: "客制化提示"
|
title: "客制化提示"
|
||||||
@ -439,6 +439,13 @@ common/views/components/visibility-chooser.vue:
|
|||||||
common/views/components/trends.vue:
|
common/views/components/trends.vue:
|
||||||
count: "{} 被提到"
|
count: "{} 被提到"
|
||||||
empty: "没有流行的标签"
|
empty: "没有流行的标签"
|
||||||
|
common/views/components/language-settings.vue:
|
||||||
|
title: "显示语言"
|
||||||
|
pick-language: "选择一个语言"
|
||||||
|
recommended: "推荐"
|
||||||
|
auto: "自动"
|
||||||
|
specify-language: "指定语言"
|
||||||
|
info: "你需要刷新这个页面来应用更改。"
|
||||||
common/views/components/profile-editor.vue:
|
common/views/components/profile-editor.vue:
|
||||||
title: "简况"
|
title: "简况"
|
||||||
name: "名称"
|
name: "名称"
|
||||||
@ -458,10 +465,10 @@ common/views/components/profile-editor.vue:
|
|||||||
saved: "更新配置文件成功"
|
saved: "更新配置文件成功"
|
||||||
uploading: "正在上传"
|
uploading: "正在上传"
|
||||||
upload-failed: "上传失败"
|
upload-failed: "上传失败"
|
||||||
email: "メール設定"
|
email: "邮件设置"
|
||||||
email-address: "メールアドレス"
|
email-address: "电子邮件地址"
|
||||||
email-verified: "メールアドレスが確認されました"
|
email-verified: "电子邮件地址已验证"
|
||||||
email-not-verified: "メールアドレスが確認されていません。メールボックスをご確認ください。"
|
email-not-verified: "电子邮件地址还没有验证哦, 请检查一下收信箱吧~"
|
||||||
common/views/widgets/broadcast.vue:
|
common/views/widgets/broadcast.vue:
|
||||||
fetching: "确认中"
|
fetching: "确认中"
|
||||||
no-broadcasts: "没有公告"
|
no-broadcasts: "没有公告"
|
||||||
@ -736,8 +743,8 @@ desktop/views/components/settings.vue:
|
|||||||
note-visibility: "帖子可见性"
|
note-visibility: "帖子可见性"
|
||||||
default-note-visibility: "默认可见性"
|
default-note-visibility: "默认可见性"
|
||||||
remember-note-visibility: "记住帖子可见性"
|
remember-note-visibility: "记住帖子可见性"
|
||||||
web-search-engine: "ウェブ検索エンジン"
|
web-search-engine: "搜索引擎"
|
||||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
web-search-engine-desc: "例如: https://www.google.com/?#q={{query}}"
|
||||||
auto-popout: "自动弹出窗口"
|
auto-popout: "自动弹出窗口"
|
||||||
auto-popout-desc: "如果可用,将使用弹出显示而不是打开新窗口。 此设置存储在浏览器中。"
|
auto-popout-desc: "如果可用,将使用弹出显示而不是打开新窗口。 此设置存储在浏览器中。"
|
||||||
advanced: "更多设置"
|
advanced: "更多设置"
|
||||||
@ -774,12 +781,6 @@ desktop/views/components/settings.vue:
|
|||||||
enable-sounds-desc: "收到帖子/留言时播放声音。 此设置将被存储在浏览器中。"
|
enable-sounds-desc: "收到帖子/留言时播放声音。 此设置将被存储在浏览器中。"
|
||||||
volume: "音量"
|
volume: "音量"
|
||||||
test: "测试"
|
test: "测试"
|
||||||
language: "语言"
|
|
||||||
pick-language: "选择一个语言"
|
|
||||||
recommended: "推荐"
|
|
||||||
auto: "自动"
|
|
||||||
specify-language: "指定语言"
|
|
||||||
language-desc: "你需要刷新这个页面来应用更改。"
|
|
||||||
cache: "缓存"
|
cache: "缓存"
|
||||||
clean-cache: "清除缓存"
|
clean-cache: "清除缓存"
|
||||||
cache-warn: "将删除存储在浏览器中的帐户信息/帖子/回复/消息/设置的缓存。 清理完毕后需要刷新页面。"
|
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-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: "超时"
|
||||||
external-user-recommendation-timeout-desc: "单位为毫秒 (例如:300000)"
|
external-user-recommendation-timeout-desc: "单位为毫秒 (例如:300000)"
|
||||||
email-config: "メールサーバーの設定"
|
email-config: "电子邮件服务器设置"
|
||||||
email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。"
|
email-config-info: "用于确认电子邮件和密码重置等。"
|
||||||
enable-email: "メール配信を有効にする"
|
enable-email: "启用电子邮件送递"
|
||||||
email: "メールアドレス"
|
email: "电子邮件地址"
|
||||||
smtp-use-ssl: "SMTPサーバーはSSLを使用"
|
smtp-secure: "在 SMTP 连接中使用隐式 SSL / TLS"
|
||||||
smtp-host: "SMTPホスト"
|
smtp-secure-info: "使用时关闭 STARTTLS。"
|
||||||
smtp-port: "SMTPポート"
|
smtp-host: "SMTP 服务器地址 (主机名)"
|
||||||
smtp-user: "SMTPユーザー"
|
smtp-port: "SMTP 端口"
|
||||||
smtp-pass: "SMTPパスワード"
|
smtp-user: "SMTP 用户名"
|
||||||
|
smtp-pass: "SMTP 密码"
|
||||||
admin/views/charts.vue:
|
admin/views/charts.vue:
|
||||||
title: "历史记录"
|
title: "历史记录"
|
||||||
per-day: "每天"
|
per-day: "每天"
|
||||||
@ -1360,11 +1362,6 @@ mobile/views/pages/selectdrive.vue:
|
|||||||
select-file: "选择文件"
|
select-file: "选择文件"
|
||||||
mobile/views/pages/settings.vue:
|
mobile/views/pages/settings.vue:
|
||||||
signed-in-as: "以{}登录"
|
signed-in-as: "以{}登录"
|
||||||
lang: "语言"
|
|
||||||
lang-tip: "你需要刷新这个页面来应用更改。"
|
|
||||||
recommended: "推荐"
|
|
||||||
auto: "自动"
|
|
||||||
specify-language: "选择语言"
|
|
||||||
design: "设计与展示"
|
design: "设计与展示"
|
||||||
dark-mode: "夜间模式"
|
dark-mode: "夜间模式"
|
||||||
i-am-under-limited-internet: "我的带宽有限"
|
i-am-under-limited-internet: "我的带宽有限"
|
||||||
@ -1387,8 +1384,8 @@ mobile/views/pages/settings.vue:
|
|||||||
note-visibility: "帖子可见性"
|
note-visibility: "帖子可见性"
|
||||||
default-note-visibility: "默认可见性"
|
default-note-visibility: "默认可见性"
|
||||||
remember-note-visibility: "记住帖子可见性"
|
remember-note-visibility: "记住帖子可见性"
|
||||||
web-search-engine: "ウェブ検索エンジン"
|
web-search-engine: "搜索引擎"
|
||||||
web-search-engine-desc: "例: https://www.google.com/?#q={{query}}"
|
web-search-engine-desc: "例如: https://www.google.com/?#q={{query}}"
|
||||||
disable-via-mobile: "不要将帖子标记为“来自手机”"
|
disable-via-mobile: "不要将帖子标记为“来自手机”"
|
||||||
load-raw-images: "以原始质量显示附加图像"
|
load-raw-images: "以原始质量显示附加图像"
|
||||||
load-remote-media: "显示来自远程服务器的媒体"
|
load-remote-media: "显示来自远程服务器的媒体"
|
||||||
@ -1433,6 +1430,9 @@ mobile/views/pages/user.vue:
|
|||||||
block: "屏蔽"
|
block: "屏蔽"
|
||||||
unblock: "取消屏蔽"
|
unblock: "取消屏蔽"
|
||||||
years-old: "{age}岁"
|
years-old: "{age}岁"
|
||||||
|
push-to-list: "添加至列表"
|
||||||
|
select-list: "选择一个列表"
|
||||||
|
list-pushed: "成功添加{user}到{list}"
|
||||||
mobile/views/pages/user/home.vue:
|
mobile/views/pages/user/home.vue:
|
||||||
recent-notes: "最近的帖子"
|
recent-notes: "最近的帖子"
|
||||||
images: "图片"
|
images: "图片"
|
||||||
|
11
package.json
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"author": "syuilo <i@syuilo.com>",
|
"author": "syuilo <i@syuilo.com>",
|
||||||
"version": "10.59.2",
|
"version": "10.60.4",
|
||||||
"clientVersion": "2.0.12277",
|
"clientVersion": "2.0.12401",
|
||||||
"codename": "nighthike",
|
"codename": "nighthike",
|
||||||
"main": "./built/index.js",
|
"main": "./built/index.js",
|
||||||
"private": true,
|
"private": true,
|
||||||
@ -35,7 +35,7 @@
|
|||||||
"@types/deep-equal": "1.0.1",
|
"@types/deep-equal": "1.0.1",
|
||||||
"@types/double-ended-queue": "2.1.0",
|
"@types/double-ended-queue": "2.1.0",
|
||||||
"@types/elasticsearch": "5.0.28",
|
"@types/elasticsearch": "5.0.28",
|
||||||
"@types/file-type": "5.2.1",
|
"@types/file-type": "5.2.2",
|
||||||
"@types/gulp": "3.8.36",
|
"@types/gulp": "3.8.36",
|
||||||
"@types/gulp-htmlmin": "1.3.32",
|
"@types/gulp-htmlmin": "1.3.32",
|
||||||
"@types/gulp-mocha": "0.0.32",
|
"@types/gulp-mocha": "0.0.32",
|
||||||
@ -156,6 +156,7 @@
|
|||||||
"koa-send": "5.0.0",
|
"koa-send": "5.0.0",
|
||||||
"koa-slow": "2.1.0",
|
"koa-slow": "2.1.0",
|
||||||
"koa-views": "6.1.4",
|
"koa-views": "6.1.4",
|
||||||
|
"langmap": "0.0.16",
|
||||||
"loader-utils": "1.1.0",
|
"loader-utils": "1.1.0",
|
||||||
"minio": "7.0.1",
|
"minio": "7.0.1",
|
||||||
"mkdirp": "0.5.1",
|
"mkdirp": "0.5.1",
|
||||||
@ -223,7 +224,7 @@
|
|||||||
"vue-content-loading": "1.5.3",
|
"vue-content-loading": "1.5.3",
|
||||||
"vue-cropperjs": "2.2.2",
|
"vue-cropperjs": "2.2.2",
|
||||||
"vue-i18n": "8.3.2",
|
"vue-i18n": "8.3.2",
|
||||||
"vue-js-modal": "1.3.26",
|
"vue-js-modal": "1.3.27",
|
||||||
"vue-loader": "15.4.2",
|
"vue-loader": "15.4.2",
|
||||||
"vue-marquee-text-component": "1.1.0",
|
"vue-marquee-text-component": "1.1.0",
|
||||||
"vue-router": "3.0.2",
|
"vue-router": "3.0.2",
|
||||||
@ -236,7 +237,7 @@
|
|||||||
"vuex-persistedstate": "2.5.4",
|
"vuex-persistedstate": "2.5.4",
|
||||||
"web-push": "3.3.3",
|
"web-push": "3.3.3",
|
||||||
"webfinger.js": "2.7.0",
|
"webfinger.js": "2.7.0",
|
||||||
"webpack": "4.26.0",
|
"webpack": "4.26.1",
|
||||||
"webpack-cli": "3.1.2",
|
"webpack-cli": "3.1.2",
|
||||||
"websocket": "1.0.28",
|
"websocket": "1.0.28",
|
||||||
"ws": "6.1.2",
|
"ws": "6.1.2",
|
||||||
|
@ -48,15 +48,15 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
remove(i) {
|
remove(i) {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
text: this.$t('_remove.are-you-sure').replace('$1', this.announcements.find((_, j) => j == i).title),
|
text: this.$t('_remove.are-you-sure').replace('$1', this.announcements.find((_, j) => j == i).title),
|
||||||
showCancelButton: true
|
showCancelButton: true
|
||||||
}).then(res => {
|
}).then(({ canceled }) => {
|
||||||
if (!res) return;
|
if (canceled) return;
|
||||||
this.announcements = this.announcements.filter((_, j) => j !== i);
|
this.announcements = this.announcements.filter((_, j) => j !== i);
|
||||||
this.save(true);
|
this.save(true);
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('_remove.removed')
|
text: this.$t('_remove.removed')
|
||||||
});
|
});
|
||||||
@ -68,13 +68,13 @@ export default Vue.extend({
|
|||||||
broadcasts: this.announcements
|
broadcasts: this.announcements
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
if (!silent) {
|
if (!silent) {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('saved')
|
text: this.$t('saved')
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}).catch(e => {
|
}).catch(e => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: e
|
text: e
|
||||||
});
|
});
|
||||||
|
@ -75,13 +75,13 @@ export default Vue.extend({
|
|||||||
url: this.url,
|
url: this.url,
|
||||||
aliases: this.aliases.split(' ').filter(x => x.length > 0)
|
aliases: this.aliases.split(' ').filter(x => x.length > 0)
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('add-emoji.added')
|
text: this.$t('add-emoji.added')
|
||||||
});
|
});
|
||||||
this.fetchEmojis();
|
this.fetchEmojis();
|
||||||
}).catch(e => {
|
}).catch(e => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: e
|
text: e
|
||||||
});
|
});
|
||||||
@ -103,12 +103,12 @@ export default Vue.extend({
|
|||||||
url: emoji.url,
|
url: emoji.url,
|
||||||
aliases: emoji.aliases.split(' ').filter(x => x.length > 0)
|
aliases: emoji.aliases.split(' ').filter(x => x.length > 0)
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('updated')
|
text: this.$t('updated')
|
||||||
});
|
});
|
||||||
}).catch(e => {
|
}).catch(e => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: e
|
text: e
|
||||||
});
|
});
|
||||||
@ -116,23 +116,23 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
removeEmoji(emoji) {
|
removeEmoji(emoji) {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
text: this.$t('remove-emoji.are-you-sure').replace('$1', emoji.name),
|
text: this.$t('remove-emoji.are-you-sure').replace('$1', emoji.name),
|
||||||
showCancelButton: true
|
showCancelButton: true
|
||||||
}).then(res => {
|
}).then(({ canceled }) => {
|
||||||
if (!res) return;
|
if (canceled) return;
|
||||||
|
|
||||||
this.$root.api('admin/emoji/remove', {
|
this.$root.api('admin/emoji/remove', {
|
||||||
id: emoji.id
|
id: emoji.id
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('remove-emoji.removed')
|
text: this.$t('remove-emoji.removed')
|
||||||
});
|
});
|
||||||
this.fetchEmojis();
|
this.fetchEmojis();
|
||||||
}).catch(e => {
|
}).catch(e => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: e
|
text: e
|
||||||
});
|
});
|
||||||
|
@ -212,7 +212,7 @@ export default Vue.extend({
|
|||||||
this.$root.api('admin/invite').then(x => {
|
this.$root.api('admin/invite').then(x => {
|
||||||
this.inviteCode = x.code;
|
this.inviteCode = x.code;
|
||||||
}).catch(e => {
|
}).catch(e => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: e
|
text: e
|
||||||
});
|
});
|
||||||
@ -258,12 +258,12 @@ export default Vue.extend({
|
|||||||
smtpUser: this.smtpUser,
|
smtpUser: this.smtpUser,
|
||||||
smtpPass: this.smtpPass
|
smtpPass: this.smtpPass
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('saved')
|
text: this.$t('saved')
|
||||||
});
|
});
|
||||||
}).catch(e => {
|
}).catch(e => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: e
|
text: e
|
||||||
});
|
});
|
||||||
|
@ -34,14 +34,14 @@ export default Vue.extend({
|
|||||||
const process = async () => {
|
const process = async () => {
|
||||||
const user = await this.$root.api('users/show', parseAcct(this.username));
|
const user = await this.$root.api('users/show', parseAcct(this.username));
|
||||||
await this.$root.api('admin/moderators/add', { userId: user.id });
|
await this.$root.api('admin/moderators/add', { userId: user.id });
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('add-moderator.added')
|
text: this.$t('add-moderator.added')
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
await process().catch(e => {
|
await process().catch(e => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: e.toString()
|
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 });
|
return await this.$root.api('users/show', this.target.startsWith('@') ? parseAcct(this.target) : { userId: this.target });
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e == 'user not found') {
|
if (e == 'user not found') {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: this.$t('user-not-found')
|
text: this.$t('user-not-found')
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: e.toString()
|
text: e.toString()
|
||||||
});
|
});
|
||||||
@ -138,7 +138,7 @@ export default Vue.extend({
|
|||||||
async resetPassword() {
|
async resetPassword() {
|
||||||
const user = await this.fetchUser();
|
const user = await this.fetchUser();
|
||||||
this.$root.api('admin/reset-password', { userId: user.id }).then(res => {
|
this.$root.api('admin/reset-password', { userId: user.id }).then(res => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('password-updated', { password: res.password })
|
text: this.$t('password-updated', { password: res.password })
|
||||||
});
|
});
|
||||||
@ -151,14 +151,14 @@ export default Vue.extend({
|
|||||||
const process = async () => {
|
const process = async () => {
|
||||||
const user = await this.fetchUser();
|
const user = await this.fetchUser();
|
||||||
await this.$root.api('admin/verify-user', { userId: user.id });
|
await this.$root.api('admin/verify-user', { userId: user.id });
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('verified')
|
text: this.$t('verified')
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
await process().catch(e => {
|
await process().catch(e => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: e.toString()
|
text: e.toString()
|
||||||
});
|
});
|
||||||
@ -173,14 +173,14 @@ export default Vue.extend({
|
|||||||
const process = async () => {
|
const process = async () => {
|
||||||
const user = await this.fetchUser();
|
const user = await this.fetchUser();
|
||||||
await this.$root.api('admin/unverify-user', { userId: user.id });
|
await this.$root.api('admin/unverify-user', { userId: user.id });
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('unverified')
|
text: this.$t('unverified')
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
await process().catch(e => {
|
await process().catch(e => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: e.toString()
|
text: e.toString()
|
||||||
});
|
});
|
||||||
@ -195,14 +195,14 @@ export default Vue.extend({
|
|||||||
const process = async () => {
|
const process = async () => {
|
||||||
const user = await this.fetchUser();
|
const user = await this.fetchUser();
|
||||||
await this.$root.api('admin/suspend-user', { userId: user.id });
|
await this.$root.api('admin/suspend-user', { userId: user.id });
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('suspended')
|
text: this.$t('suspended')
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
await process().catch(e => {
|
await process().catch(e => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: e.toString()
|
text: e.toString()
|
||||||
});
|
});
|
||||||
@ -217,14 +217,14 @@ export default Vue.extend({
|
|||||||
const process = async () => {
|
const process = async () => {
|
||||||
const user = await this.fetchUser();
|
const user = await this.fetchUser();
|
||||||
await this.$root.api('admin/unsuspend-user', { userId: user.id });
|
await this.$root.api('admin/unsuspend-user', { userId: user.id });
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('unsuspended')
|
text: this.$t('unsuspended')
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
await process().catch(e => {
|
await process().catch(e => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: e.toString()
|
text: e.toString()
|
||||||
});
|
});
|
||||||
|
@ -21,12 +21,12 @@ export default async function($root: any, force = false, silent = false) {
|
|||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!silent) {
|
/*if (!silent) {
|
||||||
$root.alert({
|
$root.dialog({
|
||||||
title: $root.$t('@.update-available-title'),
|
title: $root.$t('@.update-available-title'),
|
||||||
text: $root.$t('@.update-available', { newer, current })
|
text: $root.$t('@.update-available', { newer, current })
|
||||||
});
|
});
|
||||||
}
|
}*/
|
||||||
|
|
||||||
return newer;
|
return newer;
|
||||||
} else {
|
} else {
|
||||||
|
@ -4,7 +4,7 @@ export default ($root: any) => {
|
|||||||
require('fuckadblock');
|
require('fuckadblock');
|
||||||
|
|
||||||
function adBlockDetected() {
|
function adBlockDetected() {
|
||||||
$root.alert({
|
$root.dialog({
|
||||||
title: $root.$t('@.adblock.detected'),
|
title: $root.$t('@.adblock.detected'),
|
||||||
text: $root.$t('@.adblock.warning')
|
text: $root.$t('@.adblock.warning')
|
||||||
});
|
});
|
||||||
|
@ -142,7 +142,7 @@ export default (opts: Opts = {}) => ({
|
|||||||
this.$root.api('notes/favorites/create', {
|
this.$root.api('notes/favorites/create', {
|
||||||
noteId: this.appearNote.id
|
noteId: this.appearNote.id
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
splash: true
|
splash: true
|
||||||
});
|
});
|
||||||
|
@ -50,10 +50,13 @@ export default Vue.extend({
|
|||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
regenerateToken() {
|
regenerateToken() {
|
||||||
this.$input({
|
this.$root.dialog({
|
||||||
title: this.$t('enter-password'),
|
title: this.$t('enter-password'),
|
||||||
|
input: {
|
||||||
type: 'password'
|
type: 'password'
|
||||||
}).then(password => {
|
}
|
||||||
|
}).then(({ canceled, result: password }) => {
|
||||||
|
if (canceled) return;
|
||||||
this.$root.api('i/regenerate_token', {
|
this.$root.api('i/regenerate_token', {
|
||||||
password: password
|
password: password
|
||||||
});
|
});
|
||||||
|
@ -187,7 +187,8 @@ export default Vue.extend({
|
|||||||
} else {
|
} else {
|
||||||
this.$root.api('users/search', {
|
this.$root.api('users/search', {
|
||||||
query: this.q,
|
query: this.q,
|
||||||
limit: 30
|
limit: 10,
|
||||||
|
detail: false
|
||||||
}).then(users => {
|
}).then(users => {
|
||||||
this.users = users;
|
this.users = users;
|
||||||
this.fetching = false;
|
this.fetching = false;
|
||||||
|
@ -2,12 +2,17 @@
|
|||||||
<div class="felqjxyj" :class="{ splash }">
|
<div class="felqjxyj" :class="{ splash }">
|
||||||
<div class="bg" ref="bg" @click="onBgClick"></div>
|
<div class="bg" ref="bg" @click="onBgClick"></div>
|
||||||
<div class="main" ref="main">
|
<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>
|
<header v-if="title" v-html="title"></header>
|
||||||
<div class="body" v-if="text" v-html="text"></div>
|
<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-horizon-group no-grow class="buttons fit-bottom" v-if="!splash">
|
||||||
<ui-button @click="ok" primary autofocus>OK</ui-button>
|
<ui-button @click="ok" primary :autofocus="!input && !select && !user">OK</ui-button>
|
||||||
<ui-button @click="cancel" v-if="showCancelButton">Cancel</ui-button>
|
<ui-button @click="cancel" v-if="showCancelButton || input || select || user">Cancel</ui-button>
|
||||||
</ui-horizon-group>
|
</ui-horizon-group>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -17,6 +22,7 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import * as anime from 'animejs';
|
import * as anime from 'animejs';
|
||||||
import { faTimesCircle, faQuestionCircle } from '@fortawesome/free-regular-svg-icons';
|
import { faTimesCircle, faQuestionCircle } from '@fortawesome/free-regular-svg-icons';
|
||||||
|
import parseAcct from "../../../../../misc/acct/parse";
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
props: {
|
props: {
|
||||||
@ -33,6 +39,15 @@ export default Vue.extend({
|
|||||||
type: String,
|
type: String,
|
||||||
required: false
|
required: false
|
||||||
},
|
},
|
||||||
|
input: {
|
||||||
|
required: false
|
||||||
|
},
|
||||||
|
select: {
|
||||||
|
required: false
|
||||||
|
},
|
||||||
|
user: {
|
||||||
|
required: false
|
||||||
|
},
|
||||||
showCancelButton: {
|
showCancelButton: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false
|
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: {
|
computed: {
|
||||||
icon(): any {
|
icon(): any {
|
||||||
switch (this.type) {
|
switch (this.type) {
|
||||||
@ -82,9 +105,21 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
ok() {
|
async ok() {
|
||||||
this.$emit('ok');
|
if (this.user) {
|
||||||
|
const user = await this.$root.api('users/show', parseAcct(this.userInputValue));
|
||||||
|
if (user) {
|
||||||
|
this.$emit('ok', user);
|
||||||
this.close();
|
this.close();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const result =
|
||||||
|
this.input ? this.inputValue :
|
||||||
|
this.select ? this.selectedValue :
|
||||||
|
true;
|
||||||
|
this.$emit('ok', result);
|
||||||
|
this.close();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
cancel() {
|
cancel() {
|
||||||
@ -114,6 +149,14 @@ export default Vue.extend({
|
|||||||
|
|
||||||
onBgClick() {
|
onBgClick() {
|
||||||
this.cancel();
|
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
|
display block
|
||||||
margin 0 auto
|
margin 0 auto
|
||||||
|
|
||||||
|
& + header
|
||||||
|
margin-top 16px
|
||||||
|
|
||||||
> header
|
> header
|
||||||
margin 16px 0 8px 0
|
margin 0 0 8px 0
|
||||||
font-weight bold
|
font-weight bold
|
||||||
font-size 20px
|
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,13 +99,14 @@ export default Vue.extend({
|
|||||||
this.$emit('go', game);
|
this.$emit('go', game);
|
||||||
},
|
},
|
||||||
|
|
||||||
match() {
|
async match() {
|
||||||
this.$input({
|
const { result: user } = await this.$root.dialog({
|
||||||
title: this.$t('enter-username')
|
title: this.$t('enter-username'),
|
||||||
}).then(username => {
|
user: {
|
||||||
this.$root.api('users/show', {
|
local: true
|
||||||
username
|
}
|
||||||
}).then(user => {
|
});
|
||||||
|
if (user == null) return;
|
||||||
this.$root.api('games/reversi/match', {
|
this.$root.api('games/reversi/match', {
|
||||||
userId: user.id
|
userId: user.id
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
@ -115,8 +116,6 @@ export default Vue.extend({
|
|||||||
this.$emit('go', res);
|
this.$emit('go', res);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
accept(invitation) {
|
accept(invitation) {
|
||||||
|
@ -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>
|
<template>
|
||||||
<div class="onchrpzrvnoruiaenfcqvccjfuupzzwv">
|
<div class="onchrpzrvnoruiaenfcqvccjfuupzzwv" :class="{ big: $root.isMobile }">
|
||||||
<div class="backdrop" ref="backdrop" @click="close"></div>
|
<div class="backdrop" ref="backdrop" @click="close"></div>
|
||||||
<div class="popover" :class="{ hukidasi }" ref="popover">
|
<div class="popover" :class="{ hukidasi }" ref="popover">
|
||||||
<template v-for="item, i in items">
|
<template v-for="item, i in items">
|
||||||
@ -125,6 +125,11 @@ export default Vue.extend({
|
|||||||
|
|
||||||
position initial
|
position initial
|
||||||
|
|
||||||
|
&.big
|
||||||
|
> .popover
|
||||||
|
> button
|
||||||
|
font-size 15px
|
||||||
|
|
||||||
> .backdrop
|
> .backdrop
|
||||||
position fixed
|
position fixed
|
||||||
top 0
|
top 0
|
||||||
|
@ -115,9 +115,11 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
this.$root.api('users/search', {
|
this.$root.api('users/search', {
|
||||||
query: this.q,
|
query: this.q,
|
||||||
max: 5
|
localOnly: true,
|
||||||
|
limit: 10,
|
||||||
|
detail: false
|
||||||
}).then(users => {
|
}).then(users => {
|
||||||
this.result = users;
|
this.result = users.filter(user => user.id != this.$store.state.i.id);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
navigate(user) {
|
navigate(user) {
|
||||||
|
@ -78,7 +78,7 @@ export default Vue.extend({
|
|||||||
this.$root.api('i/pin', {
|
this.$root.api('i/pin', {
|
||||||
noteId: this.note.id
|
noteId: this.note.id
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
splash: true
|
splash: true
|
||||||
});
|
});
|
||||||
@ -95,12 +95,12 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
del() {
|
del() {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
text: this.$t('delete-confirm'),
|
text: this.$t('delete-confirm'),
|
||||||
showCancelButton: true
|
showCancelButton: true
|
||||||
}).then(res => {
|
}).then(({ canceled }) => {
|
||||||
if (!res) return;
|
if (canceled) return;
|
||||||
|
|
||||||
this.$root.api('notes/delete', {
|
this.$root.api('notes/delete', {
|
||||||
noteId: this.note.id
|
noteId: this.note.id
|
||||||
@ -114,7 +114,7 @@ export default Vue.extend({
|
|||||||
this.$root.api('notes/favorites/create', {
|
this.$root.api('notes/favorites/create', {
|
||||||
noteId: this.note.id
|
noteId: this.note.id
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
splash: true
|
splash: true
|
||||||
});
|
});
|
||||||
@ -126,7 +126,7 @@ export default Vue.extend({
|
|||||||
this.$root.api('notes/favorites/delete', {
|
this.$root.api('notes/favorites/delete', {
|
||||||
noteId: this.note.id
|
noteId: this.note.id
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
splash: true
|
splash: true
|
||||||
});
|
});
|
||||||
|
@ -11,21 +11,33 @@ import i18n from '../../../i18n';
|
|||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
i18n: i18n('common/views/components/password-settings.vue'),
|
i18n: i18n('common/views/components/password-settings.vue'),
|
||||||
methods: {
|
methods: {
|
||||||
reset() {
|
async reset() {
|
||||||
this.$input({
|
const { canceled: canceled1, result: currentPassword } = await this.$root.dialog({
|
||||||
title: this.$t('enter-current-password'),
|
title: this.$t('enter-current-password'),
|
||||||
|
input: {
|
||||||
type: 'password'
|
type: 'password'
|
||||||
}).then(currentPassword => {
|
}
|
||||||
this.$input({
|
});
|
||||||
|
if (canceled1) return;
|
||||||
|
|
||||||
|
const { canceled: canceled2, result: newPassword } = await this.$root.dialog({
|
||||||
title: this.$t('enter-new-password'),
|
title: this.$t('enter-new-password'),
|
||||||
|
input: {
|
||||||
type: 'password'
|
type: 'password'
|
||||||
}).then(newPassword => {
|
}
|
||||||
this.$input({
|
});
|
||||||
|
if (canceled2) return;
|
||||||
|
|
||||||
|
const { canceled: canceled3, result: newPassword2 } = await this.$root.dialog({
|
||||||
title: this.$t('enter-new-password-again'),
|
title: this.$t('enter-new-password-again'),
|
||||||
|
input: {
|
||||||
type: 'password'
|
type: 'password'
|
||||||
}).then(newPassword2 => {
|
}
|
||||||
|
});
|
||||||
|
if (canceled3) return;
|
||||||
|
|
||||||
if (newPassword !== newPassword2) {
|
if (newPassword !== newPassword2) {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
title: null,
|
title: null,
|
||||||
text: this.$t('not-match')
|
text: this.$t('not-match')
|
||||||
});
|
});
|
||||||
@ -37,9 +49,6 @@ export default Vue.extend({
|
|||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.$notify(this.$t('changed'));
|
this.$notify(this.$t('changed'));
|
||||||
});
|
});
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -32,6 +32,12 @@
|
|||||||
<span>{{ $t('description') }}</span>
|
<span>{{ $t('description') }}</span>
|
||||||
</ui-textarea>
|
</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">
|
<ui-input type="file" @change="onAvatarChange">
|
||||||
<span>{{ $t('avatar') }}</span>
|
<span>{{ $t('avatar') }}</span>
|
||||||
<span slot="icon"><fa icon="image"/></span>
|
<span slot="icon"><fa icon="image"/></span>
|
||||||
@ -87,12 +93,16 @@ import Vue from 'vue';
|
|||||||
import i18n from '../../../i18n';
|
import i18n from '../../../i18n';
|
||||||
import { apiUrl, host } from '../../../config';
|
import { apiUrl, host } from '../../../config';
|
||||||
import { toUnicode } from 'punycode';
|
import { toUnicode } from 'punycode';
|
||||||
|
import langmap from 'langmap';
|
||||||
|
import { unique } from '../../../../../prelude/array';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
i18n: i18n('common/views/components/profile-editor.vue'),
|
i18n: i18n('common/views/components/profile-editor.vue'),
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
unique,
|
||||||
|
langmap,
|
||||||
host: toUnicode(host),
|
host: toUnicode(host),
|
||||||
enableEmail: false,
|
enableEmail: false,
|
||||||
email: null,
|
email: null,
|
||||||
@ -100,6 +110,7 @@ export default Vue.extend({
|
|||||||
username: null,
|
username: null,
|
||||||
location: null,
|
location: null,
|
||||||
description: null,
|
description: null,
|
||||||
|
lang: null,
|
||||||
birthday: null,
|
birthday: null,
|
||||||
avatarId: null,
|
avatarId: null,
|
||||||
bannerId: null,
|
bannerId: null,
|
||||||
@ -137,6 +148,7 @@ export default Vue.extend({
|
|||||||
this.username = this.$store.state.i.username;
|
this.username = this.$store.state.i.username;
|
||||||
this.location = this.$store.state.i.profile.location;
|
this.location = this.$store.state.i.profile.location;
|
||||||
this.description = this.$store.state.i.description;
|
this.description = this.$store.state.i.description;
|
||||||
|
this.lang = this.$store.state.i.lang;
|
||||||
this.birthday = this.$store.state.i.profile.birthday;
|
this.birthday = this.$store.state.i.profile.birthday;
|
||||||
this.avatarId = this.$store.state.i.avatarId;
|
this.avatarId = this.$store.state.i.avatarId;
|
||||||
this.bannerId = this.$store.state.i.bannerId;
|
this.bannerId = this.$store.state.i.bannerId;
|
||||||
@ -198,6 +210,7 @@ export default Vue.extend({
|
|||||||
name: this.name || null,
|
name: this.name || null,
|
||||||
location: this.location || null,
|
location: this.location || null,
|
||||||
description: this.description || null,
|
description: this.description || null,
|
||||||
|
lang: this.lang,
|
||||||
birthday: this.birthday || null,
|
birthday: this.birthday || null,
|
||||||
avatarId: this.avatarId || undefined,
|
avatarId: this.avatarId || undefined,
|
||||||
bannerId: this.bannerId || undefined,
|
bannerId: this.bannerId || undefined,
|
||||||
@ -213,7 +226,7 @@ export default Vue.extend({
|
|||||||
this.$store.state.i.bannerUrl = i.bannerUrl;
|
this.$store.state.i.bannerUrl = i.bannerUrl;
|
||||||
|
|
||||||
if (notify) {
|
if (notify) {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('saved')
|
text: this.$t('saved')
|
||||||
});
|
});
|
||||||
@ -222,10 +235,13 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
updateEmail() {
|
updateEmail() {
|
||||||
this.$input({
|
this.$root.dialog({
|
||||||
title: this.$t('@.enter-password'),
|
title: this.$t('@.enter-password'),
|
||||||
|
input: {
|
||||||
type: 'password'
|
type: 'password'
|
||||||
}).then(password => {
|
}
|
||||||
|
}).then(({ canceled, result: password }) => {
|
||||||
|
if (canceled) return;
|
||||||
this.$root.api('i/update_email', {
|
this.$root.api('i/update_email', {
|
||||||
password: password,
|
password: password,
|
||||||
email: this.email == '' ? null : this.email
|
email: this.email == '' ? null : this.email
|
||||||
|
@ -223,7 +223,7 @@ export default Vue.extend({
|
|||||||
try {
|
try {
|
||||||
theme = JSON5.parse(code);
|
theme = JSON5.parse(code);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: this.$t('invalid-theme')
|
text: this.$t('invalid-theme')
|
||||||
});
|
});
|
||||||
@ -236,7 +236,7 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (theme.id == null) {
|
if (theme.id == null) {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'error',
|
type: 'error',
|
||||||
text: this.$t('invalid-theme')
|
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)) {
|
if (this.$store.state.device.themes.some(t => t.id == theme.id)) {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'info',
|
type: 'info',
|
||||||
text: this.$t('already-installed')
|
text: this.$t('already-installed')
|
||||||
});
|
});
|
||||||
@ -256,7 +256,7 @@ export default Vue.extend({
|
|||||||
key: 'themes', value: themes
|
key: 'themes', value: themes
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('installed').replace('{}', theme.name)
|
text: this.$t('installed').replace('{}', theme.name)
|
||||||
});
|
});
|
||||||
@ -269,7 +269,7 @@ export default Vue.extend({
|
|||||||
key: 'themes', value: themes
|
key: 'themes', value: themes
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'info',
|
type: 'info',
|
||||||
text: this.$t('uninstalled').replace('{}', theme.name)
|
text: this.$t('uninstalled').replace('{}', theme.name)
|
||||||
});
|
});
|
||||||
@ -306,7 +306,7 @@ export default Vue.extend({
|
|||||||
const theme = this.myTheme;
|
const theme = this.myTheme;
|
||||||
|
|
||||||
if (theme.name == null || theme.name.trim() == '') {
|
if (theme.name == null || theme.name.trim() == '') {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
text: this.$t('theme-name-required')
|
text: this.$t('theme-name-required')
|
||||||
});
|
});
|
||||||
@ -320,7 +320,7 @@ export default Vue.extend({
|
|||||||
key: 'themes', value: themes
|
key: 'themes', value: themes
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
text: this.$t('saved')
|
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
|
flex 1
|
||||||
|
min-width 0 !important
|
||||||
|
|
||||||
> *:not(:last-child)
|
> *:not(:last-child)
|
||||||
margin-right 16px !important
|
margin-right 16px !important
|
||||||
|
@ -14,17 +14,19 @@
|
|||||||
:disabled="disabled"
|
:disabled="disabled"
|
||||||
:required="required"
|
:required="required"
|
||||||
:readonly="readonly"
|
:readonly="readonly"
|
||||||
|
:placeholder="placeholder"
|
||||||
:pattern="pattern"
|
:pattern="pattern"
|
||||||
:autocomplete="autocomplete"
|
:autocomplete="autocomplete"
|
||||||
:spellcheck="spellcheck"
|
:spellcheck="spellcheck"
|
||||||
@focus="focused = true"
|
@focus="focused = true"
|
||||||
@blur="focused = false"
|
@blur="focused = false"
|
||||||
|
@keydown="$emit('keydown', $event)"
|
||||||
>
|
>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<input ref="input"
|
<input ref="input"
|
||||||
type="text"
|
type="text"
|
||||||
:value="placeholder"
|
:value="filePlaceholder"
|
||||||
readonly
|
readonly
|
||||||
@click="chooseFile"
|
@click="chooseFile"
|
||||||
>
|
>
|
||||||
@ -74,6 +76,15 @@ export default Vue.extend({
|
|||||||
type: String,
|
type: String,
|
||||||
required: false
|
required: false
|
||||||
},
|
},
|
||||||
|
placeholder: {
|
||||||
|
type: String,
|
||||||
|
required: false
|
||||||
|
},
|
||||||
|
autofocus: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false
|
||||||
|
},
|
||||||
autocomplete: {
|
autocomplete: {
|
||||||
required: false
|
required: false
|
||||||
},
|
},
|
||||||
@ -109,7 +120,7 @@ export default Vue.extend({
|
|||||||
filled(): boolean {
|
filled(): boolean {
|
||||||
return this.v != '' && this.v != null;
|
return this.v != '' && this.v != null;
|
||||||
},
|
},
|
||||||
placeholder(): string {
|
filePlaceholder(): string {
|
||||||
if (this.type != 'file') return null;
|
if (this.type != 'file') return null;
|
||||||
if (this.v == null) return null;
|
if (this.v == null) return null;
|
||||||
|
|
||||||
@ -142,6 +153,12 @@ export default Vue.extend({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
if (this.autofocus) {
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.input.focus();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
if (this.$refs.prefix) {
|
if (this.$refs.prefix) {
|
||||||
this.$refs.label.style.left = (this.$refs.prefix.offsetLeft + this.$refs.prefix.offsetWidth) + 'px';
|
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)$');
|
const regex = RegExp('\.(jpg|jpeg|png|gif|webp|bmp|tiff)$');
|
||||||
if (!regex.test(file.name) ) {
|
if (!regex.test(file.name) ) {
|
||||||
$root.alert({
|
$root.dialog({
|
||||||
title: '%fa:info-circle% %i18n:desktop.invalid-filetype%',
|
title: '%fa:info-circle% %i18n:desktop.invalid-filetype%',
|
||||||
text: null
|
text: null
|
||||||
});
|
});
|
||||||
@ -87,7 +87,7 @@ export default ($root: any) => {
|
|||||||
value: i.avatarUrl
|
value: i.avatarUrl
|
||||||
});
|
});
|
||||||
|
|
||||||
$root.alert({
|
$root.dialog({
|
||||||
title: '%fa:info-circle% %i18n:desktop.avatar-updated%',
|
title: '%fa:info-circle% %i18n:desktop.avatar-updated%',
|
||||||
text: null
|
text: null
|
||||||
});
|
});
|
||||||
|
@ -87,7 +87,7 @@ export default ($root: any) => {
|
|||||||
value: i.bannerUrl
|
value: i.bannerUrl
|
||||||
});
|
});
|
||||||
|
|
||||||
$root.alert({
|
$root.dialog({
|
||||||
title: '%fa:info-circle% %i18n:desktop.banner-updated%',
|
title: '%fa:info-circle% %i18n:desktop.banner-updated%',
|
||||||
text: null
|
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 RenoteFormWindow from './views/components/renote-form-window.vue';
|
||||||
import MkChooseFileFromDriveWindow from './views/components/choose-file-from-drive-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 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 Notification from './views/components/ui-notification.vue';
|
||||||
|
|
||||||
import { url } from '../config';
|
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) {
|
$notify(message) {
|
||||||
this.$root.new(Notification, {
|
this.$root.new(Notification, {
|
||||||
message
|
message
|
||||||
|
@ -148,12 +148,15 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
rename() {
|
rename() {
|
||||||
this.$input({
|
this.$root.dialog({
|
||||||
title: this.$t('contextmenu.rename-file'),
|
title: this.$t('contextmenu.rename-file'),
|
||||||
|
input: {
|
||||||
placeholder: this.$t('contextmenu.input-new-file-name'),
|
placeholder: this.$t('contextmenu.input-new-file-name'),
|
||||||
default: this.file.name,
|
default: this.file.name,
|
||||||
allowEmpty: false
|
allowEmpty: false
|
||||||
}).then(name => {
|
}
|
||||||
|
}).then(({ canceled, result: name }) => {
|
||||||
|
if (canceled) return;
|
||||||
this.$root.api('drive/files/update', {
|
this.$root.api('drive/files/update', {
|
||||||
fileId: this.file.id,
|
fileId: this.file.id,
|
||||||
name: name
|
name: name
|
||||||
@ -170,7 +173,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
copyUrl() {
|
copyUrl() {
|
||||||
copyToClipboard(this.file.url);
|
copyToClipboard(this.file.url);
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
title: this.$t('contextmenu.copied'),
|
title: this.$t('contextmenu.copied'),
|
||||||
text: this.$t('contextmenu.copied-url-to-clipboard')
|
text: this.$t('contextmenu.copied-url-to-clipboard')
|
||||||
});
|
});
|
||||||
|
@ -155,7 +155,7 @@ export default Vue.extend({
|
|||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
switch (err) {
|
switch (err) {
|
||||||
case 'detected-circular-definition':
|
case 'detected-circular-definition':
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
title: this.$t('unable-to-process'),
|
title: this.$t('unable-to-process'),
|
||||||
text: this.$t('circular-reference-detected')
|
text: this.$t('circular-reference-detected')
|
||||||
});
|
});
|
||||||
@ -192,11 +192,14 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
rename() {
|
rename() {
|
||||||
this.$input({
|
this.$root.dialog({
|
||||||
title: this.$t('contextmenu.rename-folder'),
|
title: this.$t('contextmenu.rename-folder'),
|
||||||
|
input: {
|
||||||
placeholder: this.$t('contextmenu.input-new-folder-name'),
|
placeholder: this.$t('contextmenu.input-new-folder-name'),
|
||||||
default: this.folder.name
|
default: this.folder.name
|
||||||
}).then(name => {
|
}
|
||||||
|
}).then(({ canceled, result: name }) => {
|
||||||
|
if (canceled) return;
|
||||||
this.$root.api('drive/folders/update', {
|
this.$root.api('drive/folders/update', {
|
||||||
folderId: this.folder.id,
|
folderId: this.folder.id,
|
||||||
name: name
|
name: name
|
||||||
|
@ -313,7 +313,7 @@ export default Vue.extend({
|
|||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
switch (err) {
|
switch (err) {
|
||||||
case 'detected-circular-definition':
|
case 'detected-circular-definition':
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
title: this.$t('unable-to-process'),
|
title: this.$t('unable-to-process'),
|
||||||
text: this.$t('circular-reference-detected')
|
text: this.$t('circular-reference-detected')
|
||||||
});
|
});
|
||||||
@ -331,16 +331,19 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
urlUpload() {
|
urlUpload() {
|
||||||
this.$input({
|
this.$root.dialog({
|
||||||
title: this.$t('url-upload'),
|
title: this.$t('url-upload'),
|
||||||
|
input: {
|
||||||
placeholder: this.$t('url-of-file')
|
placeholder: this.$t('url-of-file')
|
||||||
}).then(url => {
|
}
|
||||||
|
}).then(({ canceled, result: url }) => {
|
||||||
|
if (canceled) return;
|
||||||
this.$root.api('drive/files/upload_from_url', {
|
this.$root.api('drive/files/upload_from_url', {
|
||||||
url: url,
|
url: url,
|
||||||
folderId: this.folder ? this.folder.id : undefined
|
folderId: this.folder ? this.folder.id : undefined
|
||||||
});
|
});
|
||||||
|
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
title: this.$t('url-upload-requested'),
|
title: this.$t('url-upload-requested'),
|
||||||
text: this.$t('may-take-time')
|
text: this.$t('may-take-time')
|
||||||
});
|
});
|
||||||
@ -348,10 +351,13 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
createFolder() {
|
createFolder() {
|
||||||
this.$input({
|
this.$root.dialog({
|
||||||
title: this.$t('create-folder'),
|
title: this.$t('create-folder'),
|
||||||
|
input: {
|
||||||
placeholder: this.$t('folder-name')
|
placeholder: this.$t('folder-name')
|
||||||
}).then(name => {
|
}
|
||||||
|
}).then(({ canceled, result: name }) => {
|
||||||
|
if (canceled) return;
|
||||||
this.$root.api('drive/folders/create', {
|
this.$root.api('drive/folders/create', {
|
||||||
name: name,
|
name: name,
|
||||||
parentId: this.folder ? this.folder.id : undefined
|
parentId: this.folder ? this.folder.id : undefined
|
||||||
|
@ -186,7 +186,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
hint() {
|
hint() {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
title: this.$t('@.customization-tips.title'),
|
title: this.$t('@.customization-tips.title'),
|
||||||
text: this.$t('@.customization-tips.paragraph')
|
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>
|
<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>
|
<div>
|
||||||
<b><fa icon="exclamation-triangle"/> {{ $t('sensitive') }}</b>
|
<b><fa icon="exclamation-triangle"/> {{ $t('sensitive') }}</b>
|
||||||
<span>{{ $t('click-to-show') }}</span>
|
<span>{{ $t('click-to-show') }}</span>
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
</header>
|
</header>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<p v-if="appearNote.cw != null" class="cw">
|
<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"/>
|
<mk-cw-button v-model="showContent"/>
|
||||||
</p>
|
</p>
|
||||||
<div class="content" v-show="appearNote.cw == null || showContent">
|
<div class="content" v-show="appearNote.cw == null || showContent">
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<mk-note-header class="header" :note="note" :mini="true"/>
|
<mk-note-header class="header" :note="note" :mini="true"/>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<p v-if="note.cw != null" class="cw">
|
<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"/>
|
<mk-cw-button v-model="showContent"/>
|
||||||
</p>
|
</p>
|
||||||
<div class="content" v-show="note.cw == null || showContent">
|
<div class="content" v-show="note.cw == null || showContent">
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<mk-note-header class="header" :note="note"/>
|
<mk-note-header class="header" :note="note"/>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<p v-if="note.cw != null" class="cw">
|
<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"/>
|
<mk-cw-button v-model="showContent"/>
|
||||||
</p>
|
</p>
|
||||||
<div class="content" v-show="note.cw == null || showContent">
|
<div class="content" v-show="note.cw == null || showContent">
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<mk-note-header class="header" :note="appearNote" :mini="mini"/>
|
<mk-note-header class="header" :note="appearNote" :mini="mini"/>
|
||||||
<div class="body" v-if="appearNote.deletedAt == null">
|
<div class="body" v-if="appearNote.deletedAt == null">
|
||||||
<p v-if="appearNote.cw != null" class="cw">
|
<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"/>
|
<mk-cw-button v-model="showContent"/>
|
||||||
</p>
|
</p>
|
||||||
<div class="content" v-show="appearNote.cw == null || showContent">
|
<div class="content" v-show="appearNote.cw == null || showContent">
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<mk-reaction-icon :reaction="notification.reaction"/>
|
<mk-reaction-icon :reaction="notification.reaction"/>
|
||||||
<router-link :to="notification.user | userPage" v-user-preview="notification.user.id">{{ notification.user | userName }}</router-link>
|
<router-link :to="notification.user | userPage" v-user-preview="notification.user.id">{{ notification.user | userName }}</router-link>
|
||||||
</p>
|
</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"/>
|
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}<fa icon="quote-right"/>
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
@ -32,7 +32,7 @@
|
|||||||
<p><fa icon="retweet"/>
|
<p><fa icon="retweet"/>
|
||||||
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
|
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
|
||||||
</p>
|
</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"/>
|
<fa icon="quote-left"/>{{ getNoteSummary(notification.note.renote) }}<fa icon="quote-right"/>
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
@ -44,7 +44,7 @@
|
|||||||
<p><fa icon="quote-left"/>
|
<p><fa icon="quote-left"/>
|
||||||
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
|
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
|
||||||
</p>
|
</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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -72,7 +72,7 @@
|
|||||||
<p><fa icon="reply"/>
|
<p><fa icon="reply"/>
|
||||||
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
|
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
|
||||||
</p>
|
</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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -82,7 +82,7 @@
|
|||||||
<p><fa icon="at"/>
|
<p><fa icon="at"/>
|
||||||
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
|
<router-link :to="notification.note.user | userPage" v-user-preview="notification.note.userId">{{ notification.note.user | userName }}</router-link>
|
||||||
</p>
|
</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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -90,7 +90,7 @@
|
|||||||
<mk-avatar class="avatar" :user="notification.user"/>
|
<mk-avatar class="avatar" :user="notification.user"/>
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<p><fa icon="chart-pie"/><a :href="notification.user | userPage" v-user-preview="notification.user.id">{{ notification.user | userName }}</a></p>
|
<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"/>
|
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}<fa icon="quote-right"/>
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
@ -219,7 +219,7 @@ export default Vue.extend({
|
|||||||
margin 0
|
margin 0
|
||||||
padding 16px
|
padding 16px
|
||||||
overflow-wrap break-word
|
overflow-wrap break-word
|
||||||
font-size 13px
|
font-size 12px
|
||||||
border-bottom solid 1px var(--faceDivider)
|
border-bottom solid 1px var(--faceDivider)
|
||||||
|
|
||||||
&:last-child
|
&:last-child
|
||||||
@ -262,9 +262,18 @@ export default Vue.extend({
|
|||||||
|
|
||||||
.note-preview
|
.note-preview
|
||||||
color var(--noteText)
|
color var(--noteText)
|
||||||
|
display inline-block
|
||||||
|
overflow hidden
|
||||||
|
max-height 48px
|
||||||
|
word-break break-all
|
||||||
|
|
||||||
.note-ref
|
.note-ref
|
||||||
color var(--noteText)
|
color var(--noteText)
|
||||||
|
display inline-block
|
||||||
|
width: 100%
|
||||||
|
overflow hidden
|
||||||
|
white-space nowrap
|
||||||
|
text-overflow ellipsis
|
||||||
|
|
||||||
[data-icon]
|
[data-icon]
|
||||||
font-size 1em
|
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>
|
<a v-for="tag in recentHashtags.slice(0, 5)" @click="addTag(tag)" :title="$t('click-to-tagging')">#{{ tag }}</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="local-only" v-if="this.localOnly == true">{{ $t('local-only-message') }}</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">
|
<div class="textarea">
|
||||||
<textarea :class="{ with: (files.length != 0 || poll) }"
|
<textarea :class="{ with: (files.length != 0 || poll) }"
|
||||||
ref="text" v-model="text" :disabled="posting"
|
ref="text" v-model="text" :disabled="posting"
|
||||||
@ -71,7 +71,6 @@ import parse from '../../../../../mfm/parse';
|
|||||||
import { host } from '../../../config';
|
import { host } from '../../../config';
|
||||||
import { erase, unique } from '../../../../../prelude/array';
|
import { erase, unique } from '../../../../../prelude/array';
|
||||||
import { length } from 'stringz';
|
import { length } from 'stringz';
|
||||||
import parseAcct from '../../../../../misc/acct/parse';
|
|
||||||
import { toASCII } from 'punycode';
|
import { toASCII } from 'punycode';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
@ -384,14 +383,13 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
addVisibleUser() {
|
addVisibleUser() {
|
||||||
this.$input({
|
this.$root.dialog({
|
||||||
title: this.$t('enter-username')
|
title: this.$t('enter-username'),
|
||||||
}).then(acct => {
|
user: true
|
||||||
if (acct.startsWith('@')) acct = acct.substr(1);
|
}).then(({ canceled, result: user }) => {
|
||||||
this.$root.api('users/show', parseAcct(acct)).then(user => {
|
if (canceled) return;
|
||||||
this.visibleUsers.push(user);
|
this.visibleUsers.push(user);
|
||||||
});
|
});
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
removeVisibleUser(user) {
|
removeVisibleUser(user) {
|
||||||
|
@ -35,10 +35,13 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
register() {
|
register() {
|
||||||
this.$input({
|
this.$root.dialog({
|
||||||
title: this.$t('enter-password'),
|
title: this.$t('enter-password'),
|
||||||
|
input: {
|
||||||
type: 'password'
|
type: 'password'
|
||||||
}).then(password => {
|
}
|
||||||
|
}).then(({ canceled, result: password }) => {
|
||||||
|
if (canceled) return;
|
||||||
this.$root.api('i/2fa/register', {
|
this.$root.api('i/2fa/register', {
|
||||||
password: password
|
password: password
|
||||||
}).then(data => {
|
}).then(data => {
|
||||||
@ -48,10 +51,13 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
unregister() {
|
unregister() {
|
||||||
this.$input({
|
this.$root.dialog({
|
||||||
title: this.$t('enter-password'),
|
title: this.$t('enter-password'),
|
||||||
|
input: {
|
||||||
type: 'password'
|
type: 'password'
|
||||||
}).then(password => {
|
}
|
||||||
|
}).then(({ canceled, result: password }) => {
|
||||||
|
if (canceled) return;
|
||||||
this.$root.api('i/2fa/unregister', {
|
this.$root.api('i/2fa/unregister', {
|
||||||
password: password
|
password: password
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
|
@ -16,27 +16,7 @@
|
|||||||
<div class="pages">
|
<div class="pages">
|
||||||
<div class="profile" v-show="page == 'profile'">
|
<div class="profile" v-show="page == 'profile'">
|
||||||
<x-profile-editor/>
|
<x-profile-editor/>
|
||||||
|
<x-integration-settings/>
|
||||||
<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>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ui-card class="theme" v-show="page == 'theme'">
|
<ui-card class="theme" v-show="page == 'theme'">
|
||||||
@ -169,24 +149,7 @@
|
|||||||
</section>
|
</section>
|
||||||
</ui-card>
|
</ui-card>
|
||||||
|
|
||||||
<ui-card class="web" v-show="page == 'web'">
|
<x-language-settings 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>
|
|
||||||
|
|
||||||
<ui-card class="web" v-show="page == 'web'">
|
<ui-card class="web" v-show="page == 'web'">
|
||||||
<div slot="title"><fa :icon="['far', 'trash-alt']"/> {{ $t('cache') }}</div>
|
<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 XApps from './settings.apps.vue';
|
||||||
import XSignins from './settings.signins.vue';
|
import XSignins from './settings.signins.vue';
|
||||||
import XTags from './settings.tags.vue';
|
import XTags from './settings.tags.vue';
|
||||||
import XTwitterSetting from '../../../common/views/components/twitter-setting.vue';
|
import XIntegrationSettings from '../../../common/views/components/integration-settings.vue';
|
||||||
import XGithubSetting from '../../../common/views/components/github-setting.vue';
|
|
||||||
import XDiscordSetting from '../../../common/views/components/discord-setting.vue';
|
|
||||||
import XTheme from '../../../common/views/components/theme.vue';
|
import XTheme from '../../../common/views/components/theme.vue';
|
||||||
import XDriveSettings from '../../../common/views/components/drive-settings.vue';
|
import XDriveSettings from '../../../common/views/components/drive-settings.vue';
|
||||||
import XMuteAndBlock from '../../../common/views/components/mute-and-block.vue';
|
import XMuteAndBlock from '../../../common/views/components/mute-and-block.vue';
|
||||||
import XPasswordSettings from '../../../common/views/components/password-settings.vue';
|
import XPasswordSettings from '../../../common/views/components/password-settings.vue';
|
||||||
import XProfileEditor from '../../../common/views/components/profile-editor.vue';
|
import XProfileEditor from '../../../common/views/components/profile-editor.vue';
|
||||||
import XApiSettings from '../../../common/views/components/api-settings.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';
|
import checkForUpdate from '../../../common/scripts/check-for-update';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
@ -329,15 +291,14 @@ export default Vue.extend({
|
|||||||
XApps,
|
XApps,
|
||||||
XSignins,
|
XSignins,
|
||||||
XTags,
|
XTags,
|
||||||
XTwitterSetting,
|
XIntegrationSettings,
|
||||||
XGithubSetting,
|
|
||||||
XDiscordSetting,
|
|
||||||
XTheme,
|
XTheme,
|
||||||
XDriveSettings,
|
XDriveSettings,
|
||||||
XMuteAndBlock,
|
XMuteAndBlock,
|
||||||
XPasswordSettings,
|
XPasswordSettings,
|
||||||
XProfileEditor,
|
XProfileEditor,
|
||||||
XApiSettings,
|
XApiSettings,
|
||||||
|
XLanguageSettings,
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
initialPage: {
|
initialPage: {
|
||||||
@ -350,8 +311,6 @@ export default Vue.extend({
|
|||||||
page: this.initialPage || 'profile',
|
page: this.initialPage || 'profile',
|
||||||
meta: null,
|
meta: null,
|
||||||
version,
|
version,
|
||||||
langs,
|
|
||||||
currentLanguage: 'Unknown',
|
|
||||||
latestVersion: undefined,
|
latestVersion: undefined,
|
||||||
checkingForUpdate: false
|
checkingForUpdate: false
|
||||||
};
|
};
|
||||||
@ -412,11 +371,6 @@ export default Vue.extend({
|
|||||||
set(value) { this.$store.commit('device/set', { key: 'soundVolume', value }); }
|
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: {
|
preventUpdate: {
|
||||||
get() { return this.$store.state.device.preventUpdate; },
|
get() { return this.$store.state.device.preventUpdate; },
|
||||||
set(value) { this.$store.commit('device/set', { key: 'preventUpdate', value }); }
|
set(value) { this.$store.commit('device/set', { key: 'preventUpdate', value }); }
|
||||||
@ -556,12 +510,6 @@ export default Vue.extend({
|
|||||||
this.$root.getMeta().then(meta => {
|
this.$root.getMeta().then(meta => {
|
||||||
this.meta = 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: {
|
methods: {
|
||||||
readAllUnreadNotes() {
|
readAllUnreadNotes() {
|
||||||
@ -596,12 +544,12 @@ export default Vue.extend({
|
|||||||
this.checkingForUpdate = false;
|
this.checkingForUpdate = false;
|
||||||
this.latestVersion = newer;
|
this.latestVersion = newer;
|
||||||
if (newer == null) {
|
if (newer == null) {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
title: this.$t('no-updates'),
|
title: this.$t('no-updates'),
|
||||||
text: this.$t('no-updates-desc')
|
text: this.$t('no-updates-desc')
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
title: this.$t('update-available'),
|
title: this.$t('update-available'),
|
||||||
text: this.$t('update-available-desc')
|
text: this.$t('update-available-desc')
|
||||||
});
|
});
|
||||||
@ -610,7 +558,7 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
clean() {
|
clean() {
|
||||||
localStorage.clear();
|
localStorage.clear();
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
title: this.$t('cache-cleared'),
|
title: this.$t('cache-cleared'),
|
||||||
text: this.$t('cache-cleared-desc')
|
text: this.$t('cache-cleared-desc')
|
||||||
});
|
});
|
||||||
|
@ -109,9 +109,11 @@ export default Vue.extend({
|
|||||||
icon: 'plus',
|
icon: 'plus',
|
||||||
text: this.$t('add-list'),
|
text: this.$t('add-list'),
|
||||||
action: () => {
|
action: () => {
|
||||||
this.$input({
|
this.$root.dialog({
|
||||||
title: this.$t('list-name'),
|
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', {
|
const list = await this.$root.api('users/lists/create', {
|
||||||
title
|
title
|
||||||
});
|
});
|
||||||
|
@ -29,9 +29,11 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
add() {
|
add() {
|
||||||
this.$input({
|
this.$root.dialog({
|
||||||
title: this.$t('list-name'),
|
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', {
|
const list = await this.$root.api('users/lists/create', {
|
||||||
title
|
title
|
||||||
});
|
});
|
||||||
|
@ -156,7 +156,7 @@ export default Vue.extend({
|
|||||||
|
|
||||||
> .follow-button
|
> .follow-button
|
||||||
position absolute
|
position absolute
|
||||||
top 92px
|
top 8px
|
||||||
right 8px
|
right 8px
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -167,11 +167,14 @@ export default Vue.extend({
|
|||||||
icon: 'pencil-alt',
|
icon: 'pencil-alt',
|
||||||
text: this.$t('rename'),
|
text: this.$t('rename'),
|
||||||
action: () => {
|
action: () => {
|
||||||
this.$input({
|
this.$root.dialog({
|
||||||
title: this.$t('rename'),
|
title: this.$t('rename'),
|
||||||
|
input: {
|
||||||
default: this.name,
|
default: this.name,
|
||||||
allowEmpty: false
|
allowEmpty: false
|
||||||
}).then(name => {
|
}
|
||||||
|
}).then(({ canceled, result: name }) => {
|
||||||
|
if (canceled) return;
|
||||||
this.$store.dispatch('settings/renameDeckColumn', { id: this.column.id, name });
|
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>
|
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
||||||
<mk-time :time="notification.createdAt"/>
|
<mk-time :time="notification.createdAt"/>
|
||||||
</header>
|
</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-left"/>{{ getNoteSummary(notification.note) }}
|
||||||
<fa icon="quote-right"/>
|
<fa icon="quote-right"/>
|
||||||
</router-link>
|
</router-link>
|
||||||
@ -23,7 +23,7 @@
|
|||||||
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
||||||
<mk-time :time="notification.createdAt"/>
|
<mk-time :time="notification.createdAt"/>
|
||||||
</header>
|
</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"/>
|
<fa icon="quote-left"/>{{ getNoteSummary(notification.note.renote) }}<fa icon="quote-right"/>
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
@ -59,7 +59,7 @@
|
|||||||
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
||||||
<mk-time :time="notification.createdAt"/>
|
<mk-time :time="notification.createdAt"/>
|
||||||
</header>
|
</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"/>
|
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}<fa icon="quote-right"/>
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
@ -112,7 +112,7 @@ export default Vue.extend({
|
|||||||
.dsfykdcjpuwfvpefwufddclpjhzktmpw
|
.dsfykdcjpuwfvpefwufddclpjhzktmpw
|
||||||
> .notification
|
> .notification
|
||||||
padding 16px
|
padding 16px
|
||||||
font-size 13px
|
font-size 12px
|
||||||
overflow-wrap break-word
|
overflow-wrap break-word
|
||||||
|
|
||||||
&:after
|
&:after
|
||||||
@ -150,6 +150,11 @@ export default Vue.extend({
|
|||||||
|
|
||||||
> .note-ref
|
> .note-ref
|
||||||
color var(--noteText)
|
color var(--noteText)
|
||||||
|
display inline-block
|
||||||
|
width: 100%
|
||||||
|
overflow hidden
|
||||||
|
white-space nowrap
|
||||||
|
text-overflow ellipsis
|
||||||
|
|
||||||
[data-icon]
|
[data-icon]
|
||||||
font-size 1em
|
font-size 1em
|
||||||
|
@ -307,7 +307,7 @@ export default Vue.extend({
|
|||||||
listId: list.id,
|
listId: list.id,
|
||||||
userId: this.user.id
|
userId: this.user.id
|
||||||
});
|
});
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
splash: true
|
splash: true
|
||||||
});
|
});
|
||||||
|
@ -252,9 +252,11 @@ export default Vue.extend({
|
|||||||
icon: 'hashtag',
|
icon: 'hashtag',
|
||||||
text: this.$t('@deck.hashtag'),
|
text: this.$t('@deck.hashtag'),
|
||||||
action: () => {
|
action: () => {
|
||||||
this.$input({
|
this.$root.dialog({
|
||||||
title: this.$t('enter-hashtag-tl-title')
|
title: this.$t('enter-hashtag-tl-title'),
|
||||||
}).then(title => {
|
input: true
|
||||||
|
}).then(({ canceled, result: title }) => {
|
||||||
|
if (canceled) return;
|
||||||
this.$store.dispatch('settings/addDeckColumn', {
|
this.$store.dispatch('settings/addDeckColumn', {
|
||||||
id: uuid(),
|
id: uuid(),
|
||||||
type: 'hashtag',
|
type: 'hashtag',
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="lkafjvabenanajk17kwqpsatoushincb">
|
<a class="lkafjvabenanajk17kwqpsatoushincb" :href="`https://discordapp.com/users/${user.discord.id}`" target="_blank">
|
||||||
<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>
|
||||||
</div>
|
<span><fa :icon="['fab', 'discord']"/>@{{ user.discord.username }}#{{ user.discord.discriminator }}</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
@ -14,13 +16,13 @@ export default Vue.extend({
|
|||||||
|
|
||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
.lkafjvabenanajk17kwqpsatoushincb
|
.lkafjvabenanajk17kwqpsatoushincb
|
||||||
|
margin-left 8px
|
||||||
|
color #fff
|
||||||
|
|
||||||
|
div
|
||||||
padding 32px
|
padding 32px
|
||||||
background #7289da
|
background #7289da
|
||||||
border-radius 6px
|
border-radius 6px
|
||||||
color #fff
|
color #fff
|
||||||
|
|
||||||
a
|
|
||||||
margin-left 8px
|
|
||||||
color #fff
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="aqooishiizumijmihokohinatamihoaz">
|
<a class="aqooishiizumijmihokohinatamihoaz" :href="`https://github.com/${user.github.login}`" target="_blank">
|
||||||
<span><fa :icon="['fab', 'github']"/><a :href="`https://github.com/${user.github.login}`" target="_blank">@{{ user.github.login }}</a></span>
|
<div>
|
||||||
</div>
|
<span><fa :icon="['fab', 'github']"/>@{{ user.github.login }}</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
@ -14,13 +16,13 @@ export default Vue.extend({
|
|||||||
|
|
||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
.aqooishiizumijmihokohinatamihoaz
|
.aqooishiizumijmihokohinatamihoaz
|
||||||
|
margin-left 8px
|
||||||
|
color #fff
|
||||||
|
|
||||||
|
div
|
||||||
padding 32px
|
padding 32px
|
||||||
background #171515
|
background #171515
|
||||||
border-radius 6px
|
border-radius 6px
|
||||||
color #fff
|
color #fff
|
||||||
|
|
||||||
a
|
|
||||||
margin-left 8px
|
|
||||||
color #fff
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -73,12 +73,12 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
|
|
||||||
block() {
|
block() {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
text: this.$t('block-confirm'),
|
text: this.$t('block-confirm'),
|
||||||
showCancelButton: true
|
showCancelButton: true
|
||||||
}).then(res => {
|
}).then(({ canceled }) => {
|
||||||
if (!res) return;
|
if (canceled) return;
|
||||||
|
|
||||||
this.$root.api('blocking/create', {
|
this.$root.api('blocking/create', {
|
||||||
userId: this.user.id
|
userId: this.user.id
|
||||||
@ -108,9 +108,13 @@ export default Vue.extend({
|
|||||||
listId: list.id,
|
listId: list.id,
|
||||||
userId: this.user.id
|
userId: this.user.id
|
||||||
});
|
});
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
|
type: 'success',
|
||||||
title: 'Done!',
|
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>
|
<template>
|
||||||
<div class="adsvaidqfznoartcbplullnejvxjphcn">
|
<a class="adsvaidqfznoartcbplullnejvxjphcn" :href="`https://twitter.com/${user.twitter.screenName}`" target="_blank">
|
||||||
<span><fa :icon="['fab', 'twitter']"/><a :href="`https://twitter.com/${user.twitter.screenName}`" target="_blank">@{{ user.twitter.screenName }}</a></span>
|
<div>
|
||||||
</div>
|
<span><fa :icon="['fab', 'twitter']"/>@{{ user.twitter.screenName }}</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
@ -14,13 +16,13 @@ export default Vue.extend({
|
|||||||
|
|
||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
.adsvaidqfznoartcbplullnejvxjphcn
|
.adsvaidqfznoartcbplullnejvxjphcn
|
||||||
|
margin-left 8px
|
||||||
|
color #fff
|
||||||
|
|
||||||
|
div
|
||||||
padding 32px
|
padding 32px
|
||||||
background #1a94f2
|
background #1a94f2
|
||||||
border-radius 6px
|
border-radius 6px
|
||||||
color #fff
|
color #fff
|
||||||
|
|
||||||
a
|
|
||||||
margin-left 8px
|
|
||||||
color #fff
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
@ -15,7 +15,7 @@ import checkForUpdate from './common/scripts/check-for-update';
|
|||||||
import MiOS from './mios';
|
import MiOS from './mios';
|
||||||
import { clientVersion as version, codename, lang } from './config';
|
import { clientVersion as version, codename, lang } from './config';
|
||||||
import { builtinThemes, lightTheme, applyTheme } from './theme';
|
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) {
|
if (localStorage.getItem('theme') == null) {
|
||||||
applyTheme(lightTheme);
|
applyTheme(lightTheme);
|
||||||
@ -143,6 +143,9 @@ import {
|
|||||||
faCalendarAlt as farCalendarAlt,
|
faCalendarAlt as farCalendarAlt,
|
||||||
faHdd as farHdd,
|
faHdd as farHdd,
|
||||||
faMoon as farMoon,
|
faMoon as farMoon,
|
||||||
|
faPlayCircle as farPlayCircle,
|
||||||
|
faLightbulb as farLightbulb,
|
||||||
|
faStickyNote as farStickyNote,
|
||||||
} from '@fortawesome/free-regular-svg-icons';
|
} from '@fortawesome/free-regular-svg-icons';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@ -268,6 +271,9 @@ library.add(
|
|||||||
farCalendarAlt,
|
farCalendarAlt,
|
||||||
farHdd,
|
farHdd,
|
||||||
farMoon,
|
farMoon,
|
||||||
|
farPlayCircle,
|
||||||
|
farLightbulb,
|
||||||
|
farStickyNote,
|
||||||
|
|
||||||
fabTwitter,
|
fabTwitter,
|
||||||
fabGithub,
|
fabGithub,
|
||||||
@ -451,11 +457,11 @@ export default (callback: (launch: (router: VueRouter) => [Vue, MiOS]) => void,
|
|||||||
document.body.appendChild(x.$el);
|
document.body.appendChild(x.$el);
|
||||||
return x;
|
return x;
|
||||||
},
|
},
|
||||||
alert(opts) {
|
dialog(opts) {
|
||||||
|
const vm = this.new(Dialog, opts);
|
||||||
return new Promise((res) => {
|
return new Promise((res) => {
|
||||||
const vm = this.new(Alert, opts);
|
vm.$once('ok', result => res({ canceled: false, result }));
|
||||||
vm.$once('ok', () => res(true));
|
vm.$once('cancel', () => res({ canceled: true }));
|
||||||
vm.$once('cancel', () => res(false));
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -41,6 +41,12 @@ import FolderChooser from './views/components/drive-folder-chooser.vue';
|
|||||||
*/
|
*/
|
||||||
init((launch) => {
|
init((launch) => {
|
||||||
Vue.mixin({
|
Vue.mixin({
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isMobile: true
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
$post(opts) {
|
$post(opts) {
|
||||||
const o = 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) {
|
$notify(message) {
|
||||||
alert(message);
|
alert(message);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<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>
|
<div>
|
||||||
<b><fa icon="exclamation-triangle"/> {{ $t('sensitive') }}</b>
|
<b><fa icon="exclamation-triangle"/> {{ $t('sensitive') }}</b>
|
||||||
<span>{{ $t('click-to-show') }}</span>
|
<span>{{ $t('click-to-show') }}</span>
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
</header>
|
</header>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<p v-if="appearNote.cw != null" class="cw">
|
<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"/>
|
<mk-cw-button v-model="showContent"/>
|
||||||
</p>
|
</p>
|
||||||
<div class="content" v-show="appearNote.cw == null || showContent">
|
<div class="content" v-show="appearNote.cw == null || showContent">
|
||||||
@ -152,7 +152,7 @@ export default Vue.extend({
|
|||||||
text-align left
|
text-align left
|
||||||
background var(--face)
|
background var(--face)
|
||||||
border-radius 8px
|
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)
|
@media (min-width 500px)
|
||||||
box-shadow 0 8px 32px rgba(#000, 0.1)
|
box-shadow 0 8px 32px rgba(#000, 0.1)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<mk-note-header class="header" :note="note" :mini="true"/>
|
<mk-note-header class="header" :note="note" :mini="true"/>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<p v-if="note.cw != null" class="cw">
|
<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"/>
|
<mk-cw-button v-model="showContent"/>
|
||||||
</p>
|
</p>
|
||||||
<div class="content" v-show="note.cw == null || showContent">
|
<div class="content" v-show="note.cw == null || showContent">
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
<mk-note-header class="header" :note="appearNote" :mini="true"/>
|
<mk-note-header class="header" :note="appearNote" :mini="true"/>
|
||||||
<div class="body" v-if="appearNote.deletedAt == null">
|
<div class="body" v-if="appearNote.deletedAt == null">
|
||||||
<p v-if="appearNote.cw != null" class="cw">
|
<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"/>
|
<mk-cw-button v-model="showContent"/>
|
||||||
</p>
|
</p>
|
||||||
<div class="content" v-show="appearNote.cw == null || showContent">
|
<div class="content" v-show="appearNote.cw == null || showContent">
|
||||||
|
@ -186,7 +186,7 @@ export default Vue.extend({
|
|||||||
overflow hidden
|
overflow hidden
|
||||||
background var(--face)
|
background var(--face)
|
||||||
border-radius 8px
|
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)
|
@media (min-width 500px)
|
||||||
box-shadow 0 8px 32px rgba(#000, 0.1)
|
box-shadow 0 8px 32px rgba(#000, 0.1)
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
||||||
<mk-time :time="notification.createdAt"/>
|
<mk-time :time="notification.createdAt"/>
|
||||||
</header>
|
</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-left"/>{{ getNoteSummary(notification.note) }}
|
||||||
<fa icon="quote-right"/>
|
<fa icon="quote-right"/>
|
||||||
</router-link>
|
</router-link>
|
||||||
@ -23,7 +23,7 @@
|
|||||||
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
||||||
<mk-time :time="notification.createdAt"/>
|
<mk-time :time="notification.createdAt"/>
|
||||||
</header>
|
</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"/>
|
<fa icon="quote-left"/>{{ getNoteSummary(notification.note.renote) }}<fa icon="quote-right"/>
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
@ -59,7 +59,7 @@
|
|||||||
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
<router-link :to="notification.user | userPage">{{ notification.user | userName }}</router-link>
|
||||||
<mk-time :time="notification.createdAt"/>
|
<mk-time :time="notification.createdAt"/>
|
||||||
</header>
|
</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"/>
|
<fa icon="quote-left"/>{{ getNoteSummary(notification.note) }}<fa icon="quote-right"/>
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
@ -162,6 +162,11 @@ export default Vue.extend({
|
|||||||
|
|
||||||
> .note-ref
|
> .note-ref
|
||||||
color var(--noteText)
|
color var(--noteText)
|
||||||
|
display inline-block
|
||||||
|
width: 100%
|
||||||
|
overflow hidden
|
||||||
|
white-space nowrap
|
||||||
|
text-overflow ellipsis
|
||||||
|
|
||||||
[data-icon]
|
[data-icon]
|
||||||
font-size 1em
|
font-size 1em
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
<span v-for="u in visibleUsers">{{ u | userName }}<a @click="removeVisibleUser(u)">[x]</a></span>
|
<span v-for="u in visibleUsers">{{ u | userName }}<a @click="removeVisibleUser(u)">[x]</a></span>
|
||||||
<a @click="addVisibleUser">+{{ $t('add-visible-user') }}</a>
|
<a @click="addVisibleUser">+{{ $t('add-visible-user') }}</a>
|
||||||
</div>
|
</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>
|
<textarea v-model="text" ref="text" :disabled="posting" :placeholder="placeholder" v-autocomplete="'text'"></textarea>
|
||||||
<div class="attaches" v-show="files.length != 0">
|
<div class="attaches" v-show="files.length != 0">
|
||||||
<x-draggable class="files" :list="files" :options="{ animation: 150 }">
|
<x-draggable class="files" :list="files" :options="{ animation: 150 }">
|
||||||
@ -62,7 +62,6 @@ import parse from '../../../../../mfm/parse';
|
|||||||
import { host } from '../../../config';
|
import { host } from '../../../config';
|
||||||
import { erase, unique } from '../../../../../prelude/array';
|
import { erase, unique } from '../../../../../prelude/array';
|
||||||
import { length } from 'stringz';
|
import { length } from 'stringz';
|
||||||
import parseAcct from '../../../../../misc/acct/parse';
|
|
||||||
import { toASCII } from 'punycode';
|
import { toASCII } from 'punycode';
|
||||||
|
|
||||||
export default Vue.extend({
|
export default Vue.extend({
|
||||||
@ -219,6 +218,16 @@ export default Vue.extend({
|
|||||||
(this.$refs.text as any).focus();
|
(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() {
|
chooseFile() {
|
||||||
(this.$refs.file as any).click();
|
(this.$refs.file as any).click();
|
||||||
},
|
},
|
||||||
|
@ -81,7 +81,7 @@ export default Vue.extend({
|
|||||||
top 0
|
top 0
|
||||||
z-index 1024
|
z-index 1024
|
||||||
width 100%
|
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
|
user-select none
|
||||||
|
@ -95,9 +95,13 @@ export default Vue.extend({
|
|||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
search() {
|
search() {
|
||||||
const query = window.prompt(this.$t('search'));
|
this.$root.dialog({
|
||||||
if (query == null || query == '') return;
|
title: this.$t('search'),
|
||||||
|
input: true
|
||||||
|
}).then(({ canceled, result: query }) => {
|
||||||
|
if (canceled) return;
|
||||||
this.$router.push(`/search?q=${encodeURIComponent(query)}`);
|
this.$router.push(`/search?q=${encodeURIComponent(query)}`);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
onReversiInvited() {
|
onReversiInvited() {
|
||||||
|
@ -23,12 +23,12 @@ export default Vue.extend({
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
fn() {
|
fn() {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
text: this.$t('read-all'),
|
text: this.$t('read-all'),
|
||||||
showCancelButton: true
|
showCancelButton: true
|
||||||
}).then(res => {
|
}).then(({ canceled }) => {
|
||||||
if (!res) return;
|
if (canceled) return;
|
||||||
|
|
||||||
this.$root.api('notifications/mark_all_as_read');
|
this.$root.api('notifications/mark_all_as_read');
|
||||||
});
|
});
|
||||||
|
@ -105,62 +105,9 @@
|
|||||||
</section>
|
</section>
|
||||||
</ui-card>
|
</ui-card>
|
||||||
|
|
||||||
<ui-card>
|
<x-language-settings/>
|
||||||
<div slot="title"><fa icon="language"/> {{ $t('lang') }}</div>
|
|
||||||
|
|
||||||
<section class="fit-top">
|
<x-integration-settings/>
|
||||||
<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-api-settings />
|
<x-api-settings />
|
||||||
|
|
||||||
@ -199,7 +146,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import i18n from '../../../i18n';
|
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 checkForUpdate from '../../../common/scripts/check-for-update';
|
||||||
import XTheme from '../../../common/views/components/theme.vue';
|
import XTheme from '../../../common/views/components/theme.vue';
|
||||||
import XDriveSettings from '../../../common/views/components/drive-settings.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 XPasswordSettings from '../../../common/views/components/password-settings.vue';
|
||||||
import XProfileEditor from '../../../common/views/components/profile-editor.vue';
|
import XProfileEditor from '../../../common/views/components/profile-editor.vue';
|
||||||
import XApiSettings from '../../../common/views/components/api-settings.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({
|
export default Vue.extend({
|
||||||
i18n: i18n('mobile/views/pages/settings.vue'),
|
i18n: i18n('mobile/views/pages/settings.vue'),
|
||||||
@ -218,6 +167,8 @@ export default Vue.extend({
|
|||||||
XPasswordSettings,
|
XPasswordSettings,
|
||||||
XProfileEditor,
|
XProfileEditor,
|
||||||
XApiSettings,
|
XApiSettings,
|
||||||
|
XLanguageSettings,
|
||||||
|
XIntegrationSettings,
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
@ -225,8 +176,6 @@ export default Vue.extend({
|
|||||||
apiUrl,
|
apiUrl,
|
||||||
version,
|
version,
|
||||||
codename,
|
codename,
|
||||||
langs,
|
|
||||||
currentLanguage: 'Unknown',
|
|
||||||
latestVersion: undefined,
|
latestVersion: undefined,
|
||||||
checkingForUpdate: false
|
checkingForUpdate: false
|
||||||
};
|
};
|
||||||
@ -277,11 +226,6 @@ export default Vue.extend({
|
|||||||
set(value) { this.$store.commit('device/set', { key: 'loadRawImages', value }); }
|
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: {
|
enableSounds: {
|
||||||
get() { return this.$store.state.device.enableSounds; },
|
get() { return this.$store.state.device.enableSounds; },
|
||||||
set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); }
|
set(value) { this.$store.commit('device/set', { key: 'enableSounds', value }); }
|
||||||
@ -327,7 +271,6 @@ export default Vue.extend({
|
|||||||
set(value) { this.$store.dispatch('settings/set', { key: 'showVia', value }); }
|
set(value) { this.$store.dispatch('settings/set', { key: 'showVia', value }); }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
iLikeSushi: {
|
iLikeSushi: {
|
||||||
get() { return this.$store.state.settings.iLikeSushi; },
|
get() { return this.$store.state.settings.iLikeSushi; },
|
||||||
set(value) { this.$store.dispatch('settings/set', { key: 'iLikeSushi', value }); }
|
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() {
|
mounted() {
|
||||||
document.title = this.$t('settings');
|
document.title = this.$t('settings');
|
||||||
},
|
},
|
||||||
@ -402,12 +337,12 @@ export default Vue.extend({
|
|||||||
this.checkingForUpdate = false;
|
this.checkingForUpdate = false;
|
||||||
this.latestVersion = newer;
|
this.latestVersion = newer;
|
||||||
if (newer == null) {
|
if (newer == null) {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
title: this.$t('no-updates'),
|
title: this.$t('no-updates'),
|
||||||
text: this.$t('no-updates-desc')
|
text: this.$t('no-updates-desc')
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.$root.alert({
|
this.$root.dialog({
|
||||||
title: this.$t('update-available'),
|
title: this.$t('update-available'),
|
||||||
text: this.$t('update-available-desc')
|
text: this.$t('update-available-desc')
|
||||||
});
|
});
|
||||||
|