Compare commits
33 Commits
feature_cy
...
cybrespace
Author | SHA1 | Date |
---|---|---|
Claire | c4a3b7eef3 | |
khr | a22ab5038a | |
khr | 1217500350 | |
khr | 9c46d38db4 | |
khr | 8856c046e4 | |
khr | 39a545e9a2 | |
khr | c61e53ab87 | |
Andrew | 49d0e3fa64 | |
khr | bd4f834a18 | |
khr | af6d57b7c8 | |
khr | 16c31821d2 | |
khr | 9a43dce739 | |
khr | 63f8176496 | |
khr | a00797766b | |
khr | 75334de32c | |
khr | 814e1d6c16 | |
khr | e76104bc52 | |
khr | 1ad5b4f818 | |
khr | c8c9a6cb6d | |
khr | 8fad28aff3 | |
khr | 06bbb8e4f9 | |
khr | 6958c14a77 | |
Andrew | 3a295eb1d7 | |
nightpool | 5792d4daf5 | |
nightpool | 4f9f95d38f | |
nightpool | 9e87a069bd | |
khr | 03f1abe3b9 | |
Andrew | fff295dafb | |
khr | b75a99e16b | |
Andrew | 3362e25c6b | |
khr | 2854fcdbb2 | |
khr | 09638e5897 | |
khr | 7e1a15db9c |
|
@ -6,7 +6,9 @@ class Api::V2::MediaController < Api::V1::MediaController
|
||||||
render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: 202
|
render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: 202
|
||||||
rescue Paperclip::Errors::NotIdentifiedByImageMagickError
|
rescue Paperclip::Errors::NotIdentifiedByImageMagickError
|
||||||
render json: file_type_error, status: 422
|
render json: file_type_error, status: 422
|
||||||
rescue Paperclip::Error
|
rescue Paperclip::Error => e
|
||||||
|
Rails.logger.error "Ran into media create error (#{e.message})"
|
||||||
|
e.backtrace.each{ |line| Rails.logger.error line }
|
||||||
render json: processing_error, status: 500
|
render json: processing_error, status: 500
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
After Width: | Height: | Size: 622 B |
After Width: | Height: | Size: 223 KiB |
After Width: | Height: | Size: 232 KiB |
After Width: | Height: | Size: 378 B |
After Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 40 KiB |
|
@ -0,0 +1,64 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="384" version="1.1" height="384">
|
||||||
|
<g transform="translate(-282.71845,-76)" id="RenderLayer_LineSet">
|
||||||
|
<g id="strokes">
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path2" d="m 405.991,306.829 v 10 10 10 10 10 10 10 10 6.581 5.978 9.656 3.057" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path4" d="m 405.991,409.044 v 0 -9.656 -5.978 -10 -10 -10 -10 -10 -10 -10 -10 -6.581" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path6" d="m 370.692,127.899 v 1.329 10 1.4 10 0.947 4.955 2.701 10 10 10 10 10 9.658 10 10 10 10 10 10 1.283" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path8" d="m 439.906,283.073 v 0 h -10 -10 -10.303 -3.612 -10 -10 -10 -2.337 l -2.962,-2.901 v 0" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path10" d="m 373.654,283.073 -2.962,-2.901 v -10 -10 -10 -10 -10 -10 -1.283 -10 -10 -10 -10 -10 -9.658" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path12" d="m 370.692,127.899 h -7.383 -10 -2.899 -5.311 v 0 l -0.45,0.28 -0.37,0.387 -0.268,0.47 v 0.192 10 1.4 10 0.947 4.955 2.701 10 10 10 10 10 9.658 10 10 10 10 10 10 1.283 2.901 10 4.487 5.906 3.363 10 10 10 10 10 10 10 10 6.581 l 6.235,6.039 7.183,6.957 2.643,2.56 3.237,3.135 v 0 h 7.383 2.962 10 10 10 2.337 v 0 0 -3.057" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path14" d="m 584.095,303.466 3.074,3.363 v 10 10 10 10 10 10 10 10 6.581 6.183 9.988 10e-4 0.001 2.518 h 6.497 10 2.976 7.534 v 0 0" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path16" d="m 615.989,393.41 v -10 -10 -10 -10 -10 -10 -10 -10 -6.581 -3.363 -5.906 -10 -4.487 -2.901 -10 -10 -10 -10 -10 -10 -1.283 -10 -10 -10 -10 -10 -9.658 -2.701 -4.955 -10 -0.947 -10 -1.4 -0.061 l -0.299,-0.524 -0.394,-0.413 -0.019,-0.019 v 0" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path18" d="m 584.093,129.228 h -10 -10 -10 -10 l -10,-0.001 h -10 -5.476 -10 -10 -10 -10 -10 -10 l -10,-0.001 h -8.828 -10 -10 -10 -0.326 -3.615 l -10,0.001 h -10 l -10,0.001 h -2.205 -2.951 v 0" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path20" d="m 615.277,128.211 v 0 l -0.501,-0.312 v 0 0 h -8.134 -10 -2.976 -6.497 v 1.329" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path22" d="m 615.69,128.643 0.299,0.524 v 0.061 10 1.4 10 0.947 4.955 2.701 10 10 10 10 10 9.658 10 10 10 10 10 10 1.283 2.901 10 4.487 5.906 3.363 10 10 10 10 10 10 10 10 6.581 6.183 9.987 0.626 l -0.447,0.784 -0.617,0.644 -0.749,0.467" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path24" d="m 587.169,156.53 v 0 0 2.701 10 10 10 10 10 9.658 10 10 10 10 10 10 1.283 l -3.074,2.901 h -10 -10 -10 -10 -10 -10 -5.424" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path26" d="m 370.692,129.228 v -1.329 0 0" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path28" d="m 584.093,129.228 h 3.076" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path30" d="m 350.41,140.628 h 10 2.899 v 10 0.947 h -3.555 -9.344 v 0" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path32" d="m 587.169,129.228 v 10 1.4 10 0.947 4.955" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path34" d="m 350.41,151.575 v -10 -0.947" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path36" d="m 593.666,151.575 v -10 -0.947 0 h 10 2.976" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path38" d="m 606.642,140.628 v 10 0.947 h -10 -2.976 v 0 -10 -0.947" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path40" d="m 615.69,128.643 -0.394,-0.413 -0.019,-0.019 v 0 l -0.501,-0.312" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path42" d="m 615.989,393.41 v 6.183 9.987 0.626 l -0.447,0.783 -0.576,0.603 -0.041,0.042 v 0" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path44" d="m 614.925,411.634 v 0 l -0.749,0.467" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path46" d="m 615.69,128.643 -0.009,-0.01 -0.404,-0.422 -0.501,-0.312" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path48" d="m 614.176,412.101 0.749,-0.467 v 0 l 0.041,-0.042 0.576,-0.603 0.447,-0.783 v -0.626 -9.987 -6.183" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path50" d="m 406.223,306.613 -0.232,0.216 v 0 l 0.232,-0.216 3.38,-3.147 h 10 10 10.303 10 10 10 10 10 10 10 8.765 10 10 1.007" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path52" d="m 518.671,283.073 v 0 h -10 -2.247" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path54" d="m 615.277,128.211 0.404,0.422" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path56" d="m 383.445,273.927 h 10 10 10 10 10 6.461" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path58" d="m 576.555,273.927 2.03,-0.051 1.978,-0.302 1.707,-0.727" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path60" d="m 582.27,272.847 1.099,-1.131 0.456,-1.309 0.077,-1.342" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path62" d="m 583.902,269.065 v -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -9.834 0 -10 -7.959" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path64" d="m 583.902,141.272 -0.077,-1.344 -0.457,-1.309 -1.098,-1.13" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path66" d="m 582.27,137.489 -1.709,-0.727 -1.977,-0.301 -2.029,-0.051" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path68" d="m 576.555,136.41 h -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -3.11 l -2.03,0.051 -1.978,0.302 -1.707,0.726" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path70" d="m 377.73,137.489 -1.099,1.131 -0.456,1.309 -0.077,1.343" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path72" d="m 376.098,269.065 0.077,1.343 0.457,1.309 1.098,1.13" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path74" d="m 377.73,272.847 1.709,0.727 1.977,0.302 2.029,0.051" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path76" d="m 457.882,318.176 v 10 10 10 10 10 10 10 8.996 l -0.375,1.491 -0.542,1.03" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path78" d="m 456.965,399.693 h -10 -10 -8.726 l -0.542,-1.03 -0.375,-1.491" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path80" d="m 539.678,303.466 -0.064,-0.035 h -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10.198 l -1.889,1.029 -1.304,1.491" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path82" d="m 543.74,411.917 v -2.465 -0.024 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -2.742 l -1.686,-1.925 -2.376,-1.295" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path84" d="m 427.612,316.452 0.42,-0.797 h 10 10 8.933 l 0.542,1.03 0.375,1.491" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path86" d="m 427.322,317.607 0.29,-1.155" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path88" d="m 350.41,151.575 v -10 -0.947" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path90" d="m 370.692,127.899 v 0" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path92" d="m 376.098,141.272 v 10 7.954 0.005 10 10 10 10 10 10 10 10 10 10 9.834" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path94" d="m 405.991,409.044 v 3.057" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path96" d="m 406.223,305.951 v 0.662 0 0 0 10 10 10 10 10 10 10 10 10 10 2.333 0.098 2.873" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path98" d="m 427.322,397.172 v -10 -10 -10 -10 -10 -10 -10 -9.565" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path100" d="m 405.991,409.044 h 0.232" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path102" d="m 506.424,283.073 h -3.436 -10 -10 -10 -10 -6.548 -3.543 -10e-4 -10 -2.99" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path104" d="m 406.223,411.917 h 10 10 10 10 10 10 10 10 10 10 10 10 10 7.517" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path106" d="m 518.671,273.927 h 10 10 10 10 10 7.884" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path108" d="m 439.906,273.927 h 6.803 v 0 h 2.704 10 10 10 10 10 10.551 2.65 10e-4 6.056" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path110" d="m 539.678,303.466 h 10 10 10 10 4.417" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path112" d="m 587.169,156.53 v 0" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path114" d="m 543.74,409.452 10,0.029 10,0.03 10,0.03 9.999,0.029 3.43,0.01" />
|
||||||
|
<path style="fill:none;stroke:#87B97D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path116" d="m 615.989,393.41 v -10 -10 -10 -10 -10 -10 -10 -10 -6.581" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,64 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="384" version="1.1" height="384">
|
||||||
|
<g transform="translate(-282.71845,-76)" id="RenderLayer_LineSet">
|
||||||
|
<g id="strokes">
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path2" d="m 405.991,306.829 v 10 10 10 10 10 10 10 10 6.581 5.978 9.656 3.057" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path4" d="m 405.991,409.044 v 0 -9.656 -5.978 -10 -10 -10 -10 -10 -10 -10 -10 -6.581" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path6" d="m 370.692,127.899 v 1.329 10 1.4 10 0.947 4.955 2.701 10 10 10 10 10 9.658 10 10 10 10 10 10 1.283" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path8" d="m 439.906,283.073 v 0 h -10 -10 -10.303 -3.612 -10 -10 -10 -2.337 l -2.962,-2.901 v 0" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path10" d="m 373.654,283.073 -2.962,-2.901 v -10 -10 -10 -10 -10 -10 -1.283 -10 -10 -10 -10 -10 -9.658" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path12" d="m 370.692,127.899 h -7.383 -10 -2.899 -5.311 v 0 l -0.45,0.28 -0.37,0.387 -0.268,0.47 v 0.192 10 1.4 10 0.947 4.955 2.701 10 10 10 10 10 9.658 10 10 10 10 10 10 1.283 2.901 10 4.487 5.906 3.363 10 10 10 10 10 10 10 10 6.581 l 6.235,6.039 7.183,6.957 2.643,2.56 3.237,3.135 v 0 h 7.383 2.962 10 10 10 2.337 v 0 0 -3.057" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path14" d="m 584.095,303.466 3.074,3.363 v 10 10 10 10 10 10 10 10 6.581 6.183 9.988 10e-4 0.001 2.518 h 6.497 10 2.976 7.534 v 0 0" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path16" d="m 615.989,393.41 v -10 -10 -10 -10 -10 -10 -10 -10 -6.581 -3.363 -5.906 -10 -4.487 -2.901 -10 -10 -10 -10 -10 -10 -1.283 -10 -10 -10 -10 -10 -9.658 -2.701 -4.955 -10 -0.947 -10 -1.4 -0.061 l -0.299,-0.524 -0.394,-0.413 -0.019,-0.019 v 0" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path18" d="m 584.093,129.228 h -10 -10 -10 -10 l -10,-0.001 h -10 -5.476 -10 -10 -10 -10 -10 -10 l -10,-0.001 h -8.828 -10 -10 -10 -0.326 -3.615 l -10,0.001 h -10 l -10,0.001 h -2.205 -2.951 v 0" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path20" d="m 615.277,128.211 v 0 l -0.501,-0.312 v 0 0 h -8.134 -10 -2.976 -6.497 v 1.329" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path22" d="m 615.69,128.643 0.299,0.524 v 0.061 10 1.4 10 0.947 4.955 2.701 10 10 10 10 10 9.658 10 10 10 10 10 10 1.283 2.901 10 4.487 5.906 3.363 10 10 10 10 10 10 10 10 6.581 6.183 9.987 0.626 l -0.447,0.784 -0.617,0.644 -0.749,0.467" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path24" d="m 587.169,156.53 v 0 0 2.701 10 10 10 10 10 9.658 10 10 10 10 10 10 1.283 l -3.074,2.901 h -10 -10 -10 -10 -10 -10 -5.424" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path26" d="m 370.692,129.228 v -1.329 0 0" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path28" d="m 584.093,129.228 h 3.076" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path30" d="m 350.41,140.628 h 10 2.899 v 10 0.947 h -3.555 -9.344 v 0" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path32" d="m 587.169,129.228 v 10 1.4 10 0.947 4.955" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path34" d="m 350.41,151.575 v -10 -0.947" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path36" d="m 593.666,151.575 v -10 -0.947 0 h 10 2.976" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path38" d="m 606.642,140.628 v 10 0.947 h -10 -2.976 v 0 -10 -0.947" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path40" d="m 615.69,128.643 -0.394,-0.413 -0.019,-0.019 v 0 l -0.501,-0.312" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path42" d="m 615.989,393.41 v 6.183 9.987 0.626 l -0.447,0.783 -0.576,0.603 -0.041,0.042 v 0" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path44" d="m 614.925,411.634 v 0 l -0.749,0.467" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path46" d="m 615.69,128.643 -0.009,-0.01 -0.404,-0.422 -0.501,-0.312" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path48" d="m 614.176,412.101 0.749,-0.467 v 0 l 0.041,-0.042 0.576,-0.603 0.447,-0.783 v -0.626 -9.987 -6.183" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path50" d="m 406.223,306.613 -0.232,0.216 v 0 l 0.232,-0.216 3.38,-3.147 h 10 10 10.303 10 10 10 10 10 10 10 8.765 10 10 1.007" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path52" d="m 518.671,283.073 v 0 h -10 -2.247" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path54" d="m 615.277,128.211 0.404,0.422" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path56" d="m 383.445,273.927 h 10 10 10 10 10 6.461" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path58" d="m 576.555,273.927 2.03,-0.051 1.978,-0.302 1.707,-0.727" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path60" d="m 582.27,272.847 1.099,-1.131 0.456,-1.309 0.077,-1.342" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path62" d="m 583.902,269.065 v -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -9.834 0 -10 -7.959" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path64" d="m 583.902,141.272 -0.077,-1.344 -0.457,-1.309 -1.098,-1.13" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path66" d="m 582.27,137.489 -1.709,-0.727 -1.977,-0.301 -2.029,-0.051" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path68" d="m 576.555,136.41 h -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -3.11 l -2.03,0.051 -1.978,0.302 -1.707,0.726" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path70" d="m 377.73,137.489 -1.099,1.131 -0.456,1.309 -0.077,1.343" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path72" d="m 376.098,269.065 0.077,1.343 0.457,1.309 1.098,1.13" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path74" d="m 377.73,272.847 1.709,0.727 1.977,0.302 2.029,0.051" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path76" d="m 457.882,318.176 v 10 10 10 10 10 10 10 8.996 l -0.375,1.491 -0.542,1.03" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path78" d="m 456.965,399.693 h -10 -10 -8.726 l -0.542,-1.03 -0.375,-1.491" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path80" d="m 539.678,303.466 -0.064,-0.035 h -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10.198 l -1.889,1.029 -1.304,1.491" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path82" d="m 543.74,411.917 v -2.465 -0.024 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -2.742 l -1.686,-1.925 -2.376,-1.295" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path84" d="m 427.612,316.452 0.42,-0.797 h 10 10 8.933 l 0.542,1.03 0.375,1.491" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path86" d="m 427.322,317.607 0.29,-1.155" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path88" d="m 350.41,151.575 v -10 -0.947" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path90" d="m 370.692,127.899 v 0" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path92" d="m 376.098,141.272 v 10 7.954 0.005 10 10 10 10 10 10 10 10 10 10 9.834" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path94" d="m 405.991,409.044 v 3.057" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path96" d="m 406.223,305.951 v 0.662 0 0 0 10 10 10 10 10 10 10 10 10 10 2.333 0.098 2.873" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path98" d="m 427.322,397.172 v -10 -10 -10 -10 -10 -10 -10 -9.565" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path100" d="m 405.991,409.044 h 0.232" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path102" d="m 506.424,283.073 h -3.436 -10 -10 -10 -10 -6.548 -3.543 -10e-4 -10 -2.99" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path104" d="m 406.223,411.917 h 10 10 10 10 10 10 10 10 10 10 10 10 10 7.517" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path106" d="m 518.671,273.927 h 10 10 10 10 10 7.884" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path108" d="m 439.906,273.927 h 6.803 v 0 h 2.704 10 10 10 10 10 10.551 2.65 10e-4 6.056" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path110" d="m 539.678,303.466 h 10 10 10 10 4.417" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path112" d="m 587.169,156.53 v 0" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path114" d="m 543.74,409.452 10,0.029 10,0.03 10,0.03 9.999,0.029 3.43,0.01" />
|
||||||
|
<path style="fill:none;stroke:#A9713D;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path116" d="m 615.989,393.41 v -10 -10 -10 -10 -10 -10 -10 -10 -6.581" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,64 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="384" version="1.1" height="384">
|
||||||
|
<g transform="translate(-282.71845,-76)" id="RenderLayer_LineSet">
|
||||||
|
<g id="strokes">
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path2" d="m 405.991,306.829 v 10 10 10 10 10 10 10 10 6.581 5.978 9.656 3.057" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path4" d="m 405.991,409.044 v 0 -9.656 -5.978 -10 -10 -10 -10 -10 -10 -10 -10 -6.581" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path6" d="m 370.692,127.899 v 1.329 10 1.4 10 0.947 4.955 2.701 10 10 10 10 10 9.658 10 10 10 10 10 10 1.283" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path8" d="m 439.906,283.073 v 0 h -10 -10 -10.303 -3.612 -10 -10 -10 -2.337 l -2.962,-2.901 v 0" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path10" d="m 373.654,283.073 -2.962,-2.901 v -10 -10 -10 -10 -10 -10 -1.283 -10 -10 -10 -10 -10 -9.658" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path12" d="m 370.692,127.899 h -7.383 -10 -2.899 -5.311 v 0 l -0.45,0.28 -0.37,0.387 -0.268,0.47 v 0.192 10 1.4 10 0.947 4.955 2.701 10 10 10 10 10 9.658 10 10 10 10 10 10 1.283 2.901 10 4.487 5.906 3.363 10 10 10 10 10 10 10 10 6.581 l 6.235,6.039 7.183,6.957 2.643,2.56 3.237,3.135 v 0 h 7.383 2.962 10 10 10 2.337 v 0 0 -3.057" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path14" d="m 584.095,303.466 3.074,3.363 v 10 10 10 10 10 10 10 10 6.581 6.183 9.988 10e-4 0.001 2.518 h 6.497 10 2.976 7.534 v 0 0" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path16" d="m 615.989,393.41 v -10 -10 -10 -10 -10 -10 -10 -10 -6.581 -3.363 -5.906 -10 -4.487 -2.901 -10 -10 -10 -10 -10 -10 -1.283 -10 -10 -10 -10 -10 -9.658 -2.701 -4.955 -10 -0.947 -10 -1.4 -0.061 l -0.299,-0.524 -0.394,-0.413 -0.019,-0.019 v 0" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path18" d="m 584.093,129.228 h -10 -10 -10 -10 l -10,-0.001 h -10 -5.476 -10 -10 -10 -10 -10 -10 l -10,-0.001 h -8.828 -10 -10 -10 -0.326 -3.615 l -10,0.001 h -10 l -10,0.001 h -2.205 -2.951 v 0" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path20" d="m 615.277,128.211 v 0 l -0.501,-0.312 v 0 0 h -8.134 -10 -2.976 -6.497 v 1.329" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path22" d="m 615.69,128.643 0.299,0.524 v 0.061 10 1.4 10 0.947 4.955 2.701 10 10 10 10 10 9.658 10 10 10 10 10 10 1.283 2.901 10 4.487 5.906 3.363 10 10 10 10 10 10 10 10 6.581 6.183 9.987 0.626 l -0.447,0.784 -0.617,0.644 -0.749,0.467" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path24" d="m 587.169,156.53 v 0 0 2.701 10 10 10 10 10 9.658 10 10 10 10 10 10 1.283 l -3.074,2.901 h -10 -10 -10 -10 -10 -10 -5.424" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path26" d="m 370.692,129.228 v -1.329 0 0" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path28" d="m 584.093,129.228 h 3.076" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path30" d="m 350.41,140.628 h 10 2.899 v 10 0.947 h -3.555 -9.344 v 0" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path32" d="m 587.169,129.228 v 10 1.4 10 0.947 4.955" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path34" d="m 350.41,151.575 v -10 -0.947" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path36" d="m 593.666,151.575 v -10 -0.947 0 h 10 2.976" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path38" d="m 606.642,140.628 v 10 0.947 h -10 -2.976 v 0 -10 -0.947" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path40" d="m 615.69,128.643 -0.394,-0.413 -0.019,-0.019 v 0 l -0.501,-0.312" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path42" d="m 615.989,393.41 v 6.183 9.987 0.626 l -0.447,0.783 -0.576,0.603 -0.041,0.042 v 0" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path44" d="m 614.925,411.634 v 0 l -0.749,0.467" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path46" d="m 615.69,128.643 -0.009,-0.01 -0.404,-0.422 -0.501,-0.312" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path48" d="m 614.176,412.101 0.749,-0.467 v 0 l 0.041,-0.042 0.576,-0.603 0.447,-0.783 v -0.626 -9.987 -6.183" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path50" d="m 406.223,306.613 -0.232,0.216 v 0 l 0.232,-0.216 3.38,-3.147 h 10 10 10.303 10 10 10 10 10 10 10 8.765 10 10 1.007" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path52" d="m 518.671,283.073 v 0 h -10 -2.247" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path54" d="m 615.277,128.211 0.404,0.422" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path56" d="m 383.445,273.927 h 10 10 10 10 10 6.461" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path58" d="m 576.555,273.927 2.03,-0.051 1.978,-0.302 1.707,-0.727" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path60" d="m 582.27,272.847 1.099,-1.131 0.456,-1.309 0.077,-1.342" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path62" d="m 583.902,269.065 v -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -9.834 0 -10 -7.959" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path64" d="m 583.902,141.272 -0.077,-1.344 -0.457,-1.309 -1.098,-1.13" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path66" d="m 582.27,137.489 -1.709,-0.727 -1.977,-0.301 -2.029,-0.051" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path68" d="m 576.555,136.41 h -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -3.11 l -2.03,0.051 -1.978,0.302 -1.707,0.726" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path70" d="m 377.73,137.489 -1.099,1.131 -0.456,1.309 -0.077,1.343" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path72" d="m 376.098,269.065 0.077,1.343 0.457,1.309 1.098,1.13" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path74" d="m 377.73,272.847 1.709,0.727 1.977,0.302 2.029,0.051" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path76" d="m 457.882,318.176 v 10 10 10 10 10 10 10 8.996 l -0.375,1.491 -0.542,1.03" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path78" d="m 456.965,399.693 h -10 -10 -8.726 l -0.542,-1.03 -0.375,-1.491" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path80" d="m 539.678,303.466 -0.064,-0.035 h -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10.198 l -1.889,1.029 -1.304,1.491" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path82" d="m 543.74,411.917 v -2.465 -0.024 -10 -10 -10 -10 -10 -10 -10 -10 -10 -10 -2.742 l -1.686,-1.925 -2.376,-1.295" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path84" d="m 427.612,316.452 0.42,-0.797 h 10 10 8.933 l 0.542,1.03 0.375,1.491" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path86" d="m 427.322,317.607 0.29,-1.155" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path88" d="m 350.41,151.575 v -10 -0.947" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path90" d="m 370.692,127.899 v 0" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path92" d="m 376.098,141.272 v 10 7.954 0.005 10 10 10 10 10 10 10 10 10 10 9.834" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path94" d="m 405.991,409.044 v 3.057" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path96" d="m 406.223,305.951 v 0.662 0 0 0 10 10 10 10 10 10 10 10 10 10 2.333 0.098 2.873" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path98" d="m 427.322,397.172 v -10 -10 -10 -10 -10 -10 -10 -9.565" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path100" d="m 405.991,409.044 h 0.232" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path102" d="m 506.424,283.073 h -3.436 -10 -10 -10 -10 -6.548 -3.543 -10e-4 -10 -2.99" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path104" d="m 406.223,411.917 h 10 10 10 10 10 10 10 10 10 10 10 10 10 7.517" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path106" d="m 518.671,273.927 h 10 10 10 10 10 7.884" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path108" d="m 439.906,273.927 h 6.803 v 0 h 2.704 10 10 10 10 10 10.551 2.65 10e-4 6.056" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path110" d="m 539.678,303.466 h 10 10 10 10 4.417" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path112" d="m 587.169,156.53 v 0" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path114" d="m 543.74,409.452 10,0.029 10,0.03 10,0.03 9.999,0.029 3.43,0.01" />
|
||||||
|
<path style="fill:none;stroke:#CB7590;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" id="path116" d="m 615.989,393.41 v -10 -10 -10 -10 -10 -10 -10 -10 -6.581" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 786 KiB |
After Width: | Height: | Size: 9.9 KiB |
After Width: | Height: | Size: 398 KiB |
After Width: | Height: | Size: 497 B |
After Width: | Height: | Size: 356 B |
After Width: | Height: | Size: 418 B |
After Width: | Height: | Size: 488 B |
After Width: | Height: | Size: 390 B |
After Width: | Height: | Size: 452 B |
After Width: | Height: | Size: 589 B |
After Width: | Height: | Size: 561 B |
After Width: | Height: | Size: 328 B |
After Width: | Height: | Size: 457 B |
After Width: | Height: | Size: 384 B |
After Width: | Height: | Size: 326 B |
After Width: | Height: | Size: 437 B |
After Width: | Height: | Size: 599 B |
After Width: | Height: | Size: 383 B |
After Width: | Height: | Size: 650 B |
After Width: | Height: | Size: 411 B |
After Width: | Height: | Size: 282 B |
After Width: | Height: | Size: 337 B |
After Width: | Height: | Size: 340 B |
After Width: | Height: | Size: 688 B |
After Width: | Height: | Size: 780 B |
After Width: | Height: | Size: 639 B |
After Width: | Height: | Size: 498 B |
After Width: | Height: | Size: 149 KiB |
After Width: | Height: | Size: 184 KiB |
After Width: | Height: | Size: 263 B |
|
@ -319,10 +319,9 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='status__action-bar'>
|
<div className='status__action-bar'>
|
||||||
<IconButton className='status__action-bar-button' title={replyTitle} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} counter={status.get('replies_count')} obfuscateCount />
|
<IconButton className='status__action-bar-button' title={replyTitle} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} />
|
||||||
<IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} />
|
<IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} />
|
||||||
<IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} />
|
<IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='floppy-o' onClick={this.handleFavouriteClick} />
|
||||||
|
|
||||||
{shareButton}
|
{shareButton}
|
||||||
|
|
||||||
<div className='status__action-bar-dropdown'>
|
<div className='status__action-bar-dropdown'>
|
||||||
|
|
|
@ -193,6 +193,7 @@ export default class StatusContent extends React.PureComponent {
|
||||||
|
|
||||||
const showThreadButton = (
|
const showThreadButton = (
|
||||||
<button className='status__content__read-more-button' onClick={this.props.onClick}>
|
<button className='status__content__read-more-button' onClick={this.props.onClick}>
|
||||||
|
<i className='fa fa-fw fa-sort-amount-desc status__prepend-icon' />
|
||||||
<FormattedMessage id='status.show_thread' defaultMessage='Show thread' />
|
<FormattedMessage id='status.show_thread' defaultMessage='Show thread' />
|
||||||
</button>
|
</button>
|
||||||
);
|
);
|
||||||
|
|
|
@ -7,6 +7,7 @@ import { hydrateStore } from '../actions/store';
|
||||||
import { IntlProvider, addLocaleData } from 'react-intl';
|
import { IntlProvider, addLocaleData } from 'react-intl';
|
||||||
import { getLocale } from '../locales';
|
import { getLocale } from '../locales';
|
||||||
import PublicTimeline from '../features/standalone/public_timeline';
|
import PublicTimeline from '../features/standalone/public_timeline';
|
||||||
|
import CommunityTimeline from '../features/standalone/community_timeline';
|
||||||
import HashtagTimeline from '../features/standalone/hashtag_timeline';
|
import HashtagTimeline from '../features/standalone/hashtag_timeline';
|
||||||
import ModalContainer from '../features/ui/containers/modal_container';
|
import ModalContainer from '../features/ui/containers/modal_container';
|
||||||
import initialState from '../initial_state';
|
import initialState from '../initial_state';
|
||||||
|
@ -25,22 +26,24 @@ export default class TimelineContainer extends React.PureComponent {
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
locale: PropTypes.string.isRequired,
|
locale: PropTypes.string.isRequired,
|
||||||
hashtag: PropTypes.string,
|
hashtag: PropTypes.string,
|
||||||
local: PropTypes.bool,
|
showPublicTimeline: PropTypes.bool.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
local: !initialState.settings.known_fediverse,
|
showPublicTimeline: initialState.settings.known_fediverse,
|
||||||
};
|
};
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { locale, hashtag, local } = this.props;
|
const { locale, hashtag, showPublicTimeline } = this.props;
|
||||||
|
|
||||||
let timeline;
|
let timeline;
|
||||||
|
|
||||||
if (hashtag) {
|
if (hashtag) {
|
||||||
timeline = <HashtagTimeline hashtag={hashtag} local={local} />;
|
timeline = <HashtagTimeline hashtag={hashtag} local={local} />;
|
||||||
|
} else if (showPublicTimeline) {
|
||||||
|
timeline = <PublicTimeline />;
|
||||||
} else {
|
} else {
|
||||||
timeline = <PublicTimeline local={local} />;
|
timeline = <CommunityTimeline />;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -48,7 +51,6 @@ export default class TimelineContainer extends React.PureComponent {
|
||||||
<Provider store={store}>
|
<Provider store={store}>
|
||||||
<Fragment>
|
<Fragment>
|
||||||
{timeline}
|
{timeline}
|
||||||
|
|
||||||
{ReactDOM.createPortal(
|
{ReactDOM.createPortal(
|
||||||
<ModalContainer />,
|
<ModalContainer />,
|
||||||
document.getElementById('modal-container'),
|
document.getElementById('modal-container'),
|
||||||
|
|
|
@ -86,7 +86,7 @@ class ComposeForm extends ImmutablePureComponent {
|
||||||
const fulltext = this.getFulltextForCharacterCounting();
|
const fulltext = this.getFulltextForCharacterCounting();
|
||||||
const isOnlyWhitespace = fulltext.length !== 0 && fulltext.trim().length === 0;
|
const isOnlyWhitespace = fulltext.length !== 0 && fulltext.trim().length === 0;
|
||||||
|
|
||||||
return !(isSubmitting || isUploading || isChangingUpload || length(fulltext) > 500 || (isOnlyWhitespace && !anyMedia));
|
return !(isSubmitting || isUploading || isChangingUpload || length(fulltext) > 1024 || (isOnlyWhitespace && !anyMedia));
|
||||||
}
|
}
|
||||||
|
|
||||||
handleSubmit = () => {
|
handleSubmit = () => {
|
||||||
|
@ -249,7 +249,7 @@ class ComposeForm extends ImmutablePureComponent {
|
||||||
<PrivacyDropdownContainer />
|
<PrivacyDropdownContainer />
|
||||||
<SpoilerButtonContainer />
|
<SpoilerButtonContainer />
|
||||||
</div>
|
</div>
|
||||||
<div className='character-counter__wrapper'><CharacterCounter max={500} text={this.getFulltextForCharacterCounting()} /></div>
|
<div className='character-counter__wrapper'><CharacterCounter max={1024} text={this.getFulltextForCharacterCounting()} /></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className='compose-form__publish'>
|
<div className='compose-form__publish'>
|
||||||
|
|
|
@ -361,8 +361,8 @@ class EmojiPickerDropdown extends React.PureComponent {
|
||||||
<div ref={this.setTargetRef} className='emoji-button' title={title} aria-label={title} aria-expanded={active} role='button' onClick={this.onToggle} onKeyDown={this.onToggle} tabIndex={0}>
|
<div ref={this.setTargetRef} className='emoji-button' title={title} aria-label={title} aria-expanded={active} role='button' onClick={this.onToggle} onKeyDown={this.onToggle} tabIndex={0}>
|
||||||
{button || <img
|
{button || <img
|
||||||
className={classNames('emojione', { 'pulse-loading': active && loading })}
|
className={classNames('emojione', { 'pulse-loading': active && loading })}
|
||||||
alt='🙂'
|
alt='🤔'
|
||||||
src={`${assetHost}/emoji/1f602.svg`}
|
src={`${assetHost}/emoji/1f914.svg`}
|
||||||
/>}
|
/>}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -12,13 +12,13 @@ const DEFAULTS = [
|
||||||
'+1',
|
'+1',
|
||||||
'grinning',
|
'grinning',
|
||||||
'kissing_heart',
|
'kissing_heart',
|
||||||
'heart_eyes',
|
'vhs',
|
||||||
'laughing',
|
'laughing',
|
||||||
'stuck_out_tongue_winking_eye',
|
'floppy_disk',
|
||||||
'sweat_smile',
|
'sweat_smile',
|
||||||
'joy',
|
'joy',
|
||||||
'yum',
|
'yum',
|
||||||
'disappointed',
|
'computer',
|
||||||
'thinking_face',
|
'thinking_face',
|
||||||
'weary',
|
'weary',
|
||||||
'sob',
|
'sob',
|
||||||
|
|
|
@ -16,21 +16,21 @@ import LinkFooter from 'mastodon/features/ui/components/link_footer';
|
||||||
import TrendsContainer from './containers/trends_container';
|
import TrendsContainer from './containers/trends_container';
|
||||||
|
|
||||||
const messages = defineMessages({
|
const messages = defineMessages({
|
||||||
home_timeline: { id: 'tabs_bar.home', defaultMessage: 'Home' },
|
home_timeline: { id: 'tabs_bar.home', defaultMessage: '/timelines/home' },
|
||||||
notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' },
|
notifications: { id: 'tabs_bar.notifications', defaultMessage: '~/.notifications' },
|
||||||
public_timeline: { id: 'navigation_bar.public_timeline', defaultMessage: 'Federated timeline' },
|
public_timeline: { id: 'navigation_bar.public_timeline', defaultMessage: '/timelines/federated' },
|
||||||
settings_subheading: { id: 'column_subheading.settings', defaultMessage: 'Settings' },
|
settings_subheading: { id: 'column_subheading.settings', defaultMessage: 'Settings' },
|
||||||
community_timeline: { id: 'navigation_bar.community_timeline', defaultMessage: 'Local timeline' },
|
community_timeline: { id: 'navigation_bar.community_timeline', defaultMessage: '/timelines/local' },
|
||||||
direct: { id: 'navigation_bar.direct', defaultMessage: 'Direct messages' },
|
direct: { id: 'navigation_bar.direct', defaultMessage: '~/.dms' },
|
||||||
bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },
|
bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: '~/.bookmarks' },
|
||||||
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
|
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'edit ~/.config' },
|
||||||
follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },
|
follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: '~/.follow-requests' },
|
||||||
favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favourites' },
|
favourites: { id: 'navigation_bar.favourites', defaultMessage: '~/.florps' },
|
||||||
blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
|
blocks: { id: 'navigation_bar.blocks', defaultMessage: '~/.blocked' },
|
||||||
domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: 'Hidden domains' },
|
domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: '~/.muted/domains' },
|
||||||
mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' },
|
mutes: { id: 'navigation_bar.mutes', defaultMessage: '~/.muted' },
|
||||||
pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned toots' },
|
pins: { id: 'navigation_bar.pins', defaultMessage: '~/.pinned' },
|
||||||
lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },
|
lists: { id: 'navigation_bar.lists', defaultMessage: '~/.lists' },
|
||||||
discover: { id: 'navigation_bar.discover', defaultMessage: 'Discover' },
|
discover: { id: 'navigation_bar.discover', defaultMessage: 'Discover' },
|
||||||
personal: { id: 'navigation_bar.personal', defaultMessage: 'Personal' },
|
personal: { id: 'navigation_bar.personal', defaultMessage: 'Personal' },
|
||||||
security: { id: 'navigation_bar.security', defaultMessage: 'Security' },
|
security: { id: 'navigation_bar.security', defaultMessage: 'Security' },
|
||||||
|
|
|
@ -185,7 +185,7 @@ class Notification extends ImmutablePureComponent {
|
||||||
<div className={classNames('notification notification-favourite focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.favourite, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}>
|
<div className={classNames('notification notification-favourite focusable', { unread })} tabIndex='0' aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.favourite, { name: notification.getIn(['account', 'acct']) }), notification.get('created_at'))}>
|
||||||
<div className='notification__message'>
|
<div className='notification__message'>
|
||||||
<div className='notification__favourite-icon-wrapper'>
|
<div className='notification__favourite-icon-wrapper'>
|
||||||
<Icon id='star' className='star-icon' fixedWidth />
|
<Icon id='floppy-o' className='star-icon' fixedWidth />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span title={notification.get('created_at')}>
|
<span title={notification.get('created_at')}>
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { connect } from 'react-redux';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import StatusListContainer from '../../ui/containers/status_list_container';
|
||||||
|
import { expandCommunityTimeline } from '../../../actions/timelines';
|
||||||
|
import Column from '../../../components/column';
|
||||||
|
import ColumnHeader from '../../../components/column_header';
|
||||||
|
import { defineMessages, injectIntl } from 'react-intl';
|
||||||
|
import { connectCommunityStream } from '../../../actions/streaming';
|
||||||
|
|
||||||
|
const messages = defineMessages({
|
||||||
|
title: { id: 'standalone.public_title', defaultMessage: 'A look inside...' },
|
||||||
|
});
|
||||||
|
|
||||||
|
export default @connect()
|
||||||
|
@injectIntl
|
||||||
|
class CommunityTimeline extends React.PureComponent {
|
||||||
|
|
||||||
|
static propTypes = {
|
||||||
|
dispatch: PropTypes.func.isRequired,
|
||||||
|
intl: PropTypes.object.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
handleHeaderClick = () => {
|
||||||
|
this.column.scrollTop();
|
||||||
|
}
|
||||||
|
|
||||||
|
setRef = c => {
|
||||||
|
this.column = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
componentDidMount () {
|
||||||
|
const { dispatch } = this.props;
|
||||||
|
|
||||||
|
dispatch(expandCommunityTimeline());
|
||||||
|
this.disconnect = dispatch(connectCommunityStream());
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillUnmount () {
|
||||||
|
if (this.disconnect) {
|
||||||
|
this.disconnect();
|
||||||
|
this.disconnect = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
handleLoadMore = maxId => {
|
||||||
|
this.props.dispatch(expandCommunityTimeline({ maxId }));
|
||||||
|
}
|
||||||
|
|
||||||
|
render () {
|
||||||
|
const { intl } = this.props;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Column ref={this.setRef} label={intl.formatMessage(messages.title)}>
|
||||||
|
<ColumnHeader
|
||||||
|
icon='users'
|
||||||
|
title={intl.formatMessage(messages.title)}
|
||||||
|
onClick={this.handleHeaderClick}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<StatusListContainer
|
||||||
|
timelineId='community'
|
||||||
|
onLoadMore={this.handleLoadMore}
|
||||||
|
scrollKey='standalone_public_timeline'
|
||||||
|
trackScroll={false}
|
||||||
|
/>
|
||||||
|
</Column>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -275,7 +275,7 @@ class ActionBar extends React.PureComponent {
|
||||||
<div className='detailed-status__action-bar'>
|
<div className='detailed-status__action-bar'>
|
||||||
<div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.reply)} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} /></div>
|
<div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.reply)} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} /></div>
|
||||||
<div className='detailed-status__button' ><IconButton className={classNames({ reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} /></div>
|
<div className='detailed-status__button' ><IconButton className={classNames({ reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} /></div>
|
||||||
<div className='detailed-status__button'><IconButton className='star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} /></div>
|
<div className='detailed-status__button'><IconButton className='star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='floppy-o' onClick={this.handleFavouriteClick} /></div>
|
||||||
{shareButton}
|
{shareButton}
|
||||||
<div className='detailed-status__button'><IconButton className='bookmark-icon' active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} /></div>
|
<div className='detailed-status__button'><IconButton className='bookmark-icon' active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' onClick={this.handleBookmarkClick} /></div>
|
||||||
|
|
||||||
|
|
|
@ -220,7 +220,7 @@ class DetailedStatus extends ImmutablePureComponent {
|
||||||
if (this.context.router) {
|
if (this.context.router) {
|
||||||
favouriteLink = (
|
favouriteLink = (
|
||||||
<Link to={`/statuses/${status.get('id')}/favourites`} className='detailed-status__link'>
|
<Link to={`/statuses/${status.get('id')}/favourites`} className='detailed-status__link'>
|
||||||
<Icon id='star' />
|
<Icon id='floppy-o' />
|
||||||
<span className='detailed-status__favorites'>
|
<span className='detailed-status__favorites'>
|
||||||
<AnimatedNumber value={status.get('favourites_count')} />
|
<AnimatedNumber value={status.get('favourites_count')} />
|
||||||
</span>
|
</span>
|
||||||
|
@ -229,7 +229,7 @@ class DetailedStatus extends ImmutablePureComponent {
|
||||||
} else {
|
} else {
|
||||||
favouriteLink = (
|
favouriteLink = (
|
||||||
<a href={`/interact/${status.get('id')}?type=favourite`} className='detailed-status__link' onClick={this.handleModalLink}>
|
<a href={`/interact/${status.get('id')}?type=favourite`} className='detailed-status__link' onClick={this.handleModalLink}>
|
||||||
<Icon id='star' />
|
<Icon id='floppy-o' />
|
||||||
<span className='detailed-status__favorites'>
|
<span className='detailed-status__favorites'>
|
||||||
<AnimatedNumber value={status.get('favourites_count')} />
|
<AnimatedNumber value={status.get('favourites_count')} />
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -23,15 +23,7 @@ class DocumentTitle extends PureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
_sideEffects () {
|
_sideEffects () {
|
||||||
const { unread } = this.props;
|
document.title = title;
|
||||||
|
|
||||||
if (unread > 99) {
|
|
||||||
document.title = `(*) ${title}`;
|
|
||||||
} else if (unread > 0) {
|
|
||||||
document.title = `(${unread}) ${title}`;
|
|
||||||
} else {
|
|
||||||
document.title = title;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
|
|
|
@ -112,7 +112,7 @@
|
||||||
"getting_started.appsshort": "Apps",
|
"getting_started.appsshort": "Apps",
|
||||||
"getting_started.faq": "FAQ",
|
"getting_started.faq": "FAQ",
|
||||||
"getting_started.heading": "Getting started",
|
"getting_started.heading": "Getting started",
|
||||||
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
|
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on cybre.tech at {github}.",
|
||||||
"getting_started.userguide": "User Guide",
|
"getting_started.userguide": "User Guide",
|
||||||
"home.column_settings.advanced": "Advanced",
|
"home.column_settings.advanced": "Advanced",
|
||||||
"home.column_settings.basic": "Basic",
|
"home.column_settings.basic": "Basic",
|
||||||
|
|
|
@ -183,7 +183,7 @@
|
||||||
"getting_started.documentation": "Documentation",
|
"getting_started.documentation": "Documentation",
|
||||||
"getting_started.heading": "Getting started",
|
"getting_started.heading": "Getting started",
|
||||||
"getting_started.invite": "Invite people",
|
"getting_started.invite": "Invite people",
|
||||||
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
|
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on cybre.tech at {github}.",
|
||||||
"getting_started.security": "Account settings",
|
"getting_started.security": "Account settings",
|
||||||
"getting_started.terms": "Terms of service",
|
"getting_started.terms": "Terms of service",
|
||||||
"hashtag.column_header.tag_mode.all": "and {additional}",
|
"hashtag.column_header.tag_mode.all": "and {additional}",
|
||||||
|
|
|
@ -9,3 +9,5 @@ loadPolyfills().then(() => {
|
||||||
}).catch(e => {
|
}).catch(e => {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
require('what-input');
|
||||||
|
|
|
@ -20,6 +20,12 @@ window.addEventListener('message', e => {
|
||||||
id: data.id,
|
id: data.id,
|
||||||
height: document.getElementsByTagName('html')[0].scrollHeight,
|
height: document.getElementsByTagName('html')[0].scrollHeight,
|
||||||
}, '*');
|
}, '*');
|
||||||
|
|
||||||
|
if (document.fonts && document.fonts.ready) {
|
||||||
|
document.fonts.ready.then(sizeBioText);
|
||||||
|
} else {
|
||||||
|
sizeBioText();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -161,6 +167,12 @@ function main() {
|
||||||
const message = (statusEl.dataset.spoiler === 'expanded') ? (messages['status.show_less'] || 'Show less') : (messages['status.show_more'] || 'Show more');
|
const message = (statusEl.dataset.spoiler === 'expanded') ? (messages['status.show_less'] || 'Show less') : (messages['status.show_more'] || 'Show more');
|
||||||
spoilerLink.textContent = (new IntlMessageFormat(message, locale)).format();
|
spoilerLink.textContent = (new IntlMessageFormat(message, locale)).format();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (document.fonts && document.fonts.ready) {
|
||||||
|
document.fonts.ready.then(sizeBioText);
|
||||||
|
} else {
|
||||||
|
sizeBioText();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
delegate(document, '.webapp-btn', 'click', ({ target, button }) => {
|
delegate(document, '.webapp-btn', 'click', ({ target, button }) => {
|
||||||
|
@ -291,6 +303,22 @@ function main() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
delegate(document, '#account_note', 'input', sizeBioText);
|
||||||
|
|
||||||
|
function sizeBioText() {
|
||||||
|
const noteCounter = document.querySelector('.note-counter');
|
||||||
|
const bioTextArea = document.querySelector('#account_note');
|
||||||
|
|
||||||
|
if (noteCounter) {
|
||||||
|
noteCounter.textContent = 1024 - length(bioTextArea.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bioTextArea) {
|
||||||
|
bioTextArea.style.height = 'auto';
|
||||||
|
bioTextArea.style.height = (bioTextArea.scrollHeight+3) + 'px';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
loadPolyfills()
|
loadPolyfills()
|
||||||
|
|
|
@ -0,0 +1,91 @@
|
||||||
|
@import 'application';
|
||||||
|
|
||||||
|
/* Wider compose area */
|
||||||
|
@media screen and (min-width: 1300px) {
|
||||||
|
.drawer {
|
||||||
|
width: 17%; /* Not part of the flex fun */
|
||||||
|
max-width: 400px;
|
||||||
|
min-width: 330px;
|
||||||
|
}
|
||||||
|
.layout-multiple-columns .column {
|
||||||
|
flex-grow: 1 !important;
|
||||||
|
max-width: 400px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Don't show outline around statuses if we're in
|
||||||
|
* mouse or touch mode (rather than keyboard) */
|
||||||
|
[data-whatinput="mouse"], [data-whatinput="touch"] {
|
||||||
|
.status__content:focus, .status:focus,
|
||||||
|
.status__wrapper:focus, .status__content__text:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Less emphatic show more */
|
||||||
|
.status__content__read-more-button {
|
||||||
|
font-size: 14px;
|
||||||
|
color: $dark-text-color;
|
||||||
|
|
||||||
|
.status__prepend-icon {
|
||||||
|
padding-right: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show a little arrowey thing after the time in a
|
||||||
|
* status to signal that you can click it to see
|
||||||
|
* a detailed view */
|
||||||
|
.status time:after,
|
||||||
|
.detailed-status__datetime span:after {
|
||||||
|
font: normal normal normal 14px/1 FontAwesome;
|
||||||
|
content: "\00a0\00a0\f08e";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Don't display the elephant mascot (we have our
|
||||||
|
* own, thanks) */
|
||||||
|
.drawer__inner__mastodon {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Let the compose area/drawer be short, but
|
||||||
|
* expand if necessary */
|
||||||
|
.drawer .drawer__inner {
|
||||||
|
overflow: visible;
|
||||||
|
height:inherit;
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
.drawer__pager {
|
||||||
|
overflow-y:auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Put a reasonable background on the single-column compose form */
|
||||||
|
.layout-single-column .compose-panel {
|
||||||
|
background-color: $ui-base-color;
|
||||||
|
height: auto;
|
||||||
|
max-height: 100%;
|
||||||
|
overflow-y: visible;
|
||||||
|
margin-top: 65px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Better distinguish the search bar */
|
||||||
|
.layout-single-column .compose-panel .search {
|
||||||
|
position:relative;
|
||||||
|
top: -55px;
|
||||||
|
margin-bottom: -55px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Use display: none instead of visibility:hidden
|
||||||
|
* to hide the suggested follows list on non-mobile */
|
||||||
|
@media screen and (min-width: 630px) {
|
||||||
|
.search-results .trends {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Don't display the weird triangles on the modal layout,
|
||||||
|
* because they look strange on cybrespace themes. */
|
||||||
|
.modal-layout__mastodon {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@import 'fullwidth-media';
|
|
@ -0,0 +1,959 @@
|
||||||
|
$success-green: #B64579; // Padua
|
||||||
|
|
||||||
|
$ui-base-color: #f7e8ed; // "darkest"
|
||||||
|
$ui-base-alt: #f9f2f5;
|
||||||
|
$ui-base-lighter-color: darken($ui-base-color, 40%); // Lighter darkest
|
||||||
|
$ui-secondary-color: #ead0d6; // "lightest"
|
||||||
|
$ui-primary-color: #bf5677; // "lighter"
|
||||||
|
$ui-highlight-color: #bf5677; // "vibrant"
|
||||||
|
$primary-text-color: #382b32;
|
||||||
|
$dark-text-color: #ca748f;
|
||||||
|
$secondary-text-color: #382b32;
|
||||||
|
|
||||||
|
$header-color: $ui-primary-color;
|
||||||
|
$header-text-color: #fff;
|
||||||
|
$icon-button-inactive-color: lighten(desaturate($ui-base-lighter-color, 20%), 20%);
|
||||||
|
$action-button-color: $icon-button-inactive-color;
|
||||||
|
|
||||||
|
$about-page-text: $primary-text-color;
|
||||||
|
|
||||||
|
@import 'cybre-base';
|
||||||
|
|
||||||
|
$gold-star: #dd9d08;
|
||||||
|
|
||||||
|
/* cybre-specific additions */
|
||||||
|
|
||||||
|
.column .static-content.getting-started {
|
||||||
|
background-image: url('../images/logo-cybre-light.png');
|
||||||
|
background-size:auto 50%;
|
||||||
|
background-position: 50% 75%;
|
||||||
|
background-repeat:no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui, body {
|
||||||
|
background: $ui-base-color url('../images/background-cybre-light.png');
|
||||||
|
background-attachment: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.drawer__inner__mastodon {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page .header-wrapper {
|
||||||
|
background-image:url('../images/header-cybre-alt.jpg');
|
||||||
|
background-size:cover;
|
||||||
|
background-position:50% 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page.alternative .header {
|
||||||
|
background-image:url('../images/header-cybre-colour.jpg');
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
background-size:contain;
|
||||||
|
height:45vh;
|
||||||
|
width: 100%;
|
||||||
|
position:absolute;
|
||||||
|
z-index: 1;
|
||||||
|
text-align:center;
|
||||||
|
|
||||||
|
display: unset!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page.alternative .header img {
|
||||||
|
margin: auto;
|
||||||
|
max-height:45vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.landing-page.alternative .grid {
|
||||||
|
position: relative;
|
||||||
|
z-index:2;
|
||||||
|
margin-top:15vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page.alternative .landing-page__hero img {
|
||||||
|
visibility: hidden;
|
||||||
|
max-height:170px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page.alternative .landing-page__forms {
|
||||||
|
height:auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page.alternative .column-1 {
|
||||||
|
display:flex;
|
||||||
|
align-items:flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page.alternative .column {
|
||||||
|
max-height:initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page.alternative .row__mascot {
|
||||||
|
.floats {
|
||||||
|
position:absolute;
|
||||||
|
img {
|
||||||
|
width:100%;
|
||||||
|
height:100%;
|
||||||
|
}
|
||||||
|
transition: all 0.1s linear;
|
||||||
|
animation-name: floating;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
animation-direction: alternate;
|
||||||
|
animation-timing-function: ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.float-1 {
|
||||||
|
width:50px;
|
||||||
|
height:50px;
|
||||||
|
bottom:60px;
|
||||||
|
left:110px;
|
||||||
|
animation-duration: 3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.float-2 {
|
||||||
|
width:130px;
|
||||||
|
height:130px;
|
||||||
|
left:85px;
|
||||||
|
bottom: -60px;
|
||||||
|
animation-duration: 3.5s;
|
||||||
|
animation-delay: 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.float-3 {
|
||||||
|
width:100px;
|
||||||
|
height:100px;
|
||||||
|
right: 50;
|
||||||
|
top: -10px;
|
||||||
|
animation-duration: 4s;
|
||||||
|
animation-delay: 0.5s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* about.scss */
|
||||||
|
|
||||||
|
.landing-page {
|
||||||
|
h1 {
|
||||||
|
color: $about-page-text;
|
||||||
|
small {
|
||||||
|
color: lighten($about-page-text, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p, li {
|
||||||
|
color: $about-page-text;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-wrapper {
|
||||||
|
padding-top:0px;
|
||||||
|
|
||||||
|
background-size:cover;
|
||||||
|
background-position:50% 55%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-wrapper {
|
||||||
|
.mascot {
|
||||||
|
width:500px;
|
||||||
|
bottom:-52px;
|
||||||
|
left:-120px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.container.links {
|
||||||
|
background-color: $ui-base-color;
|
||||||
|
border-top: 5px solid $ui-primary-color;
|
||||||
|
width:100%;
|
||||||
|
max-width:100%;
|
||||||
|
padding:0px calc(50% - 400px);
|
||||||
|
|
||||||
|
a {
|
||||||
|
&:hover {
|
||||||
|
color: lighten($ui-primary-color, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.container.hero {
|
||||||
|
.floats {
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.closed-registrations-message, form {
|
||||||
|
border-top: 50px solid #5f4770;
|
||||||
|
-webkit-box-shadow: 0 0 6px rgba(0,0,0,.1);
|
||||||
|
box-shadow: 0 0 6px rgba(0,0,0,.1);
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
font-size: 16px;
|
||||||
|
font-family:inherit;
|
||||||
|
line-height:inherit;
|
||||||
|
font-weight:normal;
|
||||||
|
color:white;
|
||||||
|
position:absolute;
|
||||||
|
top:-35px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.closed-registrations-message:before {
|
||||||
|
content: "Registrations closed";
|
||||||
|
}
|
||||||
|
|
||||||
|
form:before {
|
||||||
|
content: "Register now";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#mastodon-timeline {
|
||||||
|
.column-header {
|
||||||
|
color:white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.features-list__row {
|
||||||
|
.text {
|
||||||
|
color: $about-page-text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.information-board {
|
||||||
|
.panel {
|
||||||
|
.panel-header {
|
||||||
|
color: $primary-text-color;
|
||||||
|
border-bottom: 1px solid lighten($ui-secondary-color, 4%);
|
||||||
|
|
||||||
|
a,
|
||||||
|
span {
|
||||||
|
font-weight: 400;
|
||||||
|
color: lighten($ui-primary-color, 4%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* components.scss */
|
||||||
|
|
||||||
|
.onboarding-modal__page {
|
||||||
|
p {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-header {
|
||||||
|
background: $header-color;
|
||||||
|
color: $header-text-color;
|
||||||
|
border-top-left-radius: 3px;
|
||||||
|
border-top-right-radius: 3px;
|
||||||
|
box-shadow: 0px 0px 3px rgba(0,0,0,0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-header__button {
|
||||||
|
background: $header-color;
|
||||||
|
color: $header-text-color;
|
||||||
|
border-top-right-radius: 3px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: darken($ui-base-color, 10%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
color: $primary-text-color;
|
||||||
|
background: darken($ui-base-color, 5%);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: darken($ui-base-color, 5%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.status-card, .status-card.compact {
|
||||||
|
border-color: $ui-highlight-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
// selectivity -- needs to override .column-header > button
|
||||||
|
.column-header .column-header__back-button {
|
||||||
|
background: $header-color;
|
||||||
|
color:$header-text-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-back-button {
|
||||||
|
background: $header-color;
|
||||||
|
color:$header-text-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column-header__collapsible-inner {
|
||||||
|
background: darken($ui-base-alt, 2%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty-column-indicator,
|
||||||
|
.error-column {
|
||||||
|
color: darken($ui-base-lighter-color, 15%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.column > .scrollable {
|
||||||
|
background: $ui-base-alt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.compose-form {
|
||||||
|
.autosuggest-textarea__textarea,
|
||||||
|
.spoiler-input__input {
|
||||||
|
color: $primary-text-color;
|
||||||
|
border: 1px solid $ui-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.autosuggest-textarea__textarea {
|
||||||
|
border-bottom-width:0px;
|
||||||
|
}
|
||||||
|
.compose-form__modifiers {
|
||||||
|
border: 1px solid $ui-primary-color;
|
||||||
|
border-top-width:0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.compose-form__buttons button.active:last-child {
|
||||||
|
border-radius:3px;
|
||||||
|
background: $ui-base-color;
|
||||||
|
color: $ui-primary-color;
|
||||||
|
}
|
||||||
|
.compose-form__buttons-wrapper {
|
||||||
|
background-color:$ui-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.compose-form__warning a {
|
||||||
|
color:white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-button.inverted {
|
||||||
|
color:white;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color:$ui-secondary-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.character-counter {
|
||||||
|
color:$white;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.icon-button {
|
||||||
|
&.disabled {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-button {
|
||||||
|
&.inverted {
|
||||||
|
color: darken($ui-base-lighter-color, 10%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.overlayed {
|
||||||
|
background: rgba($base-overlay-background, 0.2);
|
||||||
|
color: rgba($white, 0.7);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: rgba($base-overlay-background, 0.4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
color: desaturate($icon-button-inactive-color, 5%);
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:active,
|
||||||
|
&:focus {
|
||||||
|
color: desaturate($icon-button-inactive-color, 5%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
color: $icon-button-inactive-color;
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&:active,
|
||||||
|
&:focus {
|
||||||
|
color: darken($icon-button-inactive-color, 5%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-button.star-icon,
|
||||||
|
.icon-button.star-icon:active {
|
||||||
|
background:transparent;
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-button.star-icon.active {
|
||||||
|
color: $gold-star;
|
||||||
|
&:active, &:hover, &:focus {
|
||||||
|
color: $gold-star;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-icon-button {
|
||||||
|
color: $white;
|
||||||
|
&.active {
|
||||||
|
background: $ui-base-color;
|
||||||
|
color: $ui-primary-color;
|
||||||
|
}
|
||||||
|
&:focus, &:hover {
|
||||||
|
color: darken($ui-base-color, 3%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.status.status-direct {
|
||||||
|
background: darken($ui-base-alt, 5%);
|
||||||
|
.icon-button.disabled {
|
||||||
|
color: lighten($ui-base-lighter-color, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.account__header, .account-card {
|
||||||
|
& > div {
|
||||||
|
background: rgba(lighten($ui-base-color, 4%), 0.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.account__header__content {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detailed-status__display-name .display-name strong {
|
||||||
|
color: $ui-highlight-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-button {
|
||||||
|
&, &:hover {
|
||||||
|
color:desaturate($ui-base-lighter-color, 20%);
|
||||||
|
}
|
||||||
|
&.active {
|
||||||
|
&, &:hover {
|
||||||
|
color:$ui-base-lighter-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.account__section-headline a {
|
||||||
|
&.active {
|
||||||
|
color: $primary-text-color;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
border-bottom-color: $ui-base-alt;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
border-bottom-color: $ui-base-alt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.privacy-dropdown.active .privacy-dropdown__value.active .icon-button {
|
||||||
|
color: $ui-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.privacy-dropdown__option {
|
||||||
|
color: $primary-text-color;
|
||||||
|
|
||||||
|
strong {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover,
|
||||||
|
&.active {
|
||||||
|
color: $white;
|
||||||
|
|
||||||
|
.privacy-dropdown__option__content {
|
||||||
|
color: $white;
|
||||||
|
|
||||||
|
strong {
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.emoji-picker-dropdown__menu {
|
||||||
|
.emoji-search-wrapper {
|
||||||
|
border-color: darken($ui-base-color, 10%);
|
||||||
|
}
|
||||||
|
.emoji-search {
|
||||||
|
background: darken($ui-base-color, 5%);
|
||||||
|
border-color: darken($ui-base-color, 10%);
|
||||||
|
}
|
||||||
|
.emoji-mart {
|
||||||
|
color: $ui-primary-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-popout {
|
||||||
|
background: $ui-base-color;
|
||||||
|
color: $ui-primary-color;
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
color: $ui-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
em {
|
||||||
|
color: $ui-highlight-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.search__icon .fa.active {
|
||||||
|
opacity:1.0;
|
||||||
|
}
|
||||||
|
.search-results__hashtag {
|
||||||
|
color: darken($ui-primary-color, 10%);
|
||||||
|
&:hover {
|
||||||
|
color: lighten($ui-primary-color, 5%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.static-content {
|
||||||
|
/*color: $primary-text-color;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
#Getting-started {
|
||||||
|
background: $ui-primary-color;
|
||||||
|
border-bottom:0px;
|
||||||
|
color:white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.getting-started {
|
||||||
|
p {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: darken($ui-base-lighter-color, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.getting-started__wrapper {
|
||||||
|
flex: 0 0.5 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.getting-started {
|
||||||
|
.column-link {
|
||||||
|
background: lighten($ui-primary-color, 5%);
|
||||||
|
color:$white;
|
||||||
|
&:hover {
|
||||||
|
background: lighten($ui-primary-color, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.column-link__badge {
|
||||||
|
background: saturate(darken($ui-primary-color, 5%), 5%);
|
||||||
|
}
|
||||||
|
.column-subheading {
|
||||||
|
background: darken($ui-primary-color, 5%);
|
||||||
|
color:$white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.media-spoiler,
|
||||||
|
.video-player__spoiler.active {
|
||||||
|
color: $white;
|
||||||
|
&:hover {
|
||||||
|
color: darken($white, 5%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.status {
|
||||||
|
border-bottom: 1px solid $ui-secondary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status__relative-time, .status__display-name {
|
||||||
|
color: darken($ui-base-color, 40%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.status__content {
|
||||||
|
.status__content__spoiler-link {
|
||||||
|
background: $ui-base-lighter-color;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: lighten($ui-base-lighter-color, 5%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.muted .status__content p {
|
||||||
|
color: $icon-button-inactive-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-menu__item {
|
||||||
|
& > a {
|
||||||
|
color: $primary-text-color;
|
||||||
|
&:hover, &:active, &:focus {
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown--active .dropdown__content {
|
||||||
|
& > ul {
|
||||||
|
background: $ui-base-color;
|
||||||
|
box-shadow: 0 0 5px rgba($base-shadow-color, 0.2);
|
||||||
|
& > li > a {
|
||||||
|
background: $ui-base-color;
|
||||||
|
color: $primary-text-color;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: $ui-highlight-color;
|
||||||
|
color: $ui-base-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.boost-modal,
|
||||||
|
.confirmation-modal,
|
||||||
|
.report-modal,
|
||||||
|
.actions-modal,
|
||||||
|
.mute-modal
|
||||||
|
{
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
.boost-modal__action-bar,
|
||||||
|
.confirmation-modal__action-bar,
|
||||||
|
.mute-modal__action-bar,
|
||||||
|
.report-modal__action-bar,
|
||||||
|
.mute-modal__action-bar {
|
||||||
|
& > div {
|
||||||
|
color: $ui-primary-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.actions-modal
|
||||||
|
{
|
||||||
|
ul {
|
||||||
|
li:not(:empty) {
|
||||||
|
a {
|
||||||
|
color: $primary-text-color;
|
||||||
|
button {
|
||||||
|
|
||||||
|
}
|
||||||
|
&.active, &:hover, &:active, &:focus {
|
||||||
|
color: $white;
|
||||||
|
button {
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.react-toggle-track {
|
||||||
|
background-color: $icon-button-inactive-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.report-modal__comment .setting-text {
|
||||||
|
color: $primary-text-color;
|
||||||
|
border-bottom-color: lighten($ui-primary-color, 10%);
|
||||||
|
&:focus, &:active {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.status.light {
|
||||||
|
.status__content {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
.display-name strong {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.reply-indicator__content a {
|
||||||
|
color: lighten($ui-highlight-color, 30%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.status__content
|
||||||
|
{
|
||||||
|
a {
|
||||||
|
color: $ui-highlight-color;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
.fa {
|
||||||
|
color: darken($ui-base-color, 40%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.detailed-status__display-name {
|
||||||
|
color: $ui-base-lighter-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.drawer .drawer__inner {
|
||||||
|
overflow: visible;
|
||||||
|
height:inherit;
|
||||||
|
background:$ui-base-alt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search__icon .fa {
|
||||||
|
color: $ui-highlight-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.drawer__pager {
|
||||||
|
overflow-y:auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.drawer .drawer__header {
|
||||||
|
background: $ui-base-color;
|
||||||
|
border-radius:3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.onboarding-modal__page h1 {
|
||||||
|
background-color: darken($ui-primary-color, 5%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.poll__text input[type="text"],
|
||||||
|
.compose-form__poll-wrapper select {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.compose-form__poll-wrapper .button.button-secondary {
|
||||||
|
color: $ui-highlight-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* forms.scss */
|
||||||
|
.block-button, .button, button {
|
||||||
|
background-color: $ui-primary-color;
|
||||||
|
color: $white;
|
||||||
|
|
||||||
|
&.button-alternative {
|
||||||
|
color: $ui-base-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.logo-button {
|
||||||
|
color: $white;
|
||||||
|
svg path:first-child {
|
||||||
|
fill: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.simple_form {
|
||||||
|
p.hint {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.block-button, .button, button {
|
||||||
|
background-color: $ui-primary-color;
|
||||||
|
color: $white;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: lighten($ui-primary-color, 5%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active,
|
||||||
|
&:focus {
|
||||||
|
background-color: darken($ui-primary-color, 5%);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* admin.scss */
|
||||||
|
|
||||||
|
.table > thead > tr > th {
|
||||||
|
border-bottom-color: $ui-secondary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.simple_form h4 {
|
||||||
|
border-bottom: 1px solid $ui-highlight-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-wrapper {
|
||||||
|
.content {
|
||||||
|
h2, p.hint, h4, h6 {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.muted-hint {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
.logo {
|
||||||
|
-webkit-filter: invert(100%);
|
||||||
|
filter: invert(100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
ul {
|
||||||
|
a {
|
||||||
|
&.selected {
|
||||||
|
background-color: $ui-primary-color;
|
||||||
|
color: $white;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: lighten($ui-primary-color, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
&.selected {
|
||||||
|
background-color: $ui-primary-color;
|
||||||
|
color: $white;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: lighten($ui-primary-color, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination .current {
|
||||||
|
color: $ui-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.report-accounts__item > strong {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-wrapper .content {
|
||||||
|
& > p {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
hr {
|
||||||
|
border-color: $ui-highlight-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* accounts.scss */
|
||||||
|
.card {
|
||||||
|
.name {
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.counter {
|
||||||
|
.counter-number {
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* stream_entries.scss */
|
||||||
|
.activity-stream {
|
||||||
|
.entry {
|
||||||
|
}
|
||||||
|
.status.light {
|
||||||
|
.display-name {
|
||||||
|
strong {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.status__content {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.detailed-status.light {
|
||||||
|
.detailed-status__display-name {
|
||||||
|
.display-name {
|
||||||
|
strong {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.status__content {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
.status-card,
|
||||||
|
.status-card__title,
|
||||||
|
.status-card__description {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* accounts.scss */
|
||||||
|
.card {
|
||||||
|
.name {
|
||||||
|
color: darken($ui-primary-color, 15%);
|
||||||
|
}
|
||||||
|
.counter {
|
||||||
|
.counter-number {
|
||||||
|
color: darken($ui-primary-color, 15%);
|
||||||
|
}
|
||||||
|
border-color: $ui-primary-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.activity-stream-tabs {
|
||||||
|
a {
|
||||||
|
color: lighten($ui-primary-color, 10%);
|
||||||
|
&.active {
|
||||||
|
color: darken($ui-primary-color, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* uncategorized */
|
||||||
|
|
||||||
|
.empty-column-indicator, .error-column {
|
||||||
|
background-color: $ui-base-alt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.actions .button.button-alternative {
|
||||||
|
background: $ui-highlight-color;
|
||||||
|
color: $white;
|
||||||
|
|
||||||
|
&:active,
|
||||||
|
&:focus,
|
||||||
|
&:hover {
|
||||||
|
background-color: lighten($ui-highlight-color, 4%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.public-layout .header {
|
||||||
|
background: $ui-highlight-color;
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.public-layout .public-account-header__tabs__name h1 {
|
||||||
|
color: $white;
|
||||||
|
small {
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.public-layout .header .brand:hover,
|
||||||
|
.public-layout .header .brand:focus,
|
||||||
|
.public-layout .header .brand:active {
|
||||||
|
background: lighten($ui-highlight-color, 5%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.public-layout .container:last-child {
|
||||||
|
background:$ui-highlight-color;
|
||||||
|
padding-left: 100px;
|
||||||
|
padding-right: 100px;
|
||||||
|
border-radius: 4px;
|
||||||
|
h4 {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-layout, .modal-layout__mastodon > * {
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dashboard__widgets a:not(.name-tag) {
|
||||||
|
color: $primary-text-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabs-bar__wrapper {
|
||||||
|
background: $ui-base-color url('../images/background-cybre-light.png');
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-single-column .navigation-panel {
|
||||||
|
background-color: $ui-highlight-color;
|
||||||
|
height: auto;
|
||||||
|
.column-link {
|
||||||
|
background: lighten($ui-primary-color, 5%);
|
||||||
|
color:$white;
|
||||||
|
&:hover {
|
||||||
|
background: lighten($ui-primary-color, 10%);
|
||||||
|
}
|
||||||
|
&.active {
|
||||||
|
background: darken($ui-primary-color, 5%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hr {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,278 @@
|
||||||
|
$ui-base-color: #1b1b1b; // darkest
|
||||||
|
$ui-highlight-color: #1ea21e; // vibrant
|
||||||
|
$ui-secondary-color: #E4F2E4; // lightest
|
||||||
|
$ui-primary-color: #E4F2E4; // lighter
|
||||||
|
$ui-primary-color-alt: #a0b49c; // darker, for external pages
|
||||||
|
|
||||||
|
$about-page-text: lighten($ui-base-color, 50%);
|
||||||
|
|
||||||
|
@import 'cybre-base';
|
||||||
|
|
||||||
|
@keyframes floating {
|
||||||
|
from {
|
||||||
|
transform: translate(0, 0);
|
||||||
|
}
|
||||||
|
65% {
|
||||||
|
transform: translate(0, 4px);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: translate(0, -0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
body, body.about-body {
|
||||||
|
background: $ui-base-color url('../images/background-cybre.png');
|
||||||
|
background-attachment: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.about-body {
|
||||||
|
// basics.scss &.about-body
|
||||||
|
background: darken($ui-base-color, 8%) url('../images/background-cybre.png');
|
||||||
|
|
||||||
|
background-position-y: 200px;
|
||||||
|
background-position-x: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.about-body .mascot {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.muted {
|
||||||
|
.status__content p, .status__content a {
|
||||||
|
color: lighten($ui-base-color, 35%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.status__display-name strong {
|
||||||
|
color: lighten($ui-base-color, 35%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.compose-form__buttons button.active:last-child {
|
||||||
|
color:$ui-secondary-color;
|
||||||
|
background-color: $ui-highlight-color;
|
||||||
|
border-radius:3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.screenshot-with-signup {
|
||||||
|
min-height:300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container.hero .closed-registrations-message .clock {
|
||||||
|
font-size: 150%;
|
||||||
|
margin: 1em auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column .static-content.getting-started {
|
||||||
|
background-image: url('../images/logo-cybre.png'), url('../images/background-cybre.png');
|
||||||
|
background-size:auto 50%, cover;
|
||||||
|
background-position: 50% 75%, center center;
|
||||||
|
background-repeat:no-repeat, no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.columns-area {
|
||||||
|
background: $ui-base-color url('../images/background-cybre.png');
|
||||||
|
}
|
||||||
|
|
||||||
|
.actions .button.button-alternative {
|
||||||
|
background: $ui-highlight-color;
|
||||||
|
color: $ui-primary-color;
|
||||||
|
|
||||||
|
&:active,
|
||||||
|
&:focus,
|
||||||
|
&:hover {
|
||||||
|
background-color: lighten($ui-highlight-color, 4%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 1280px) {
|
||||||
|
.landing-page .container.links {
|
||||||
|
top: -15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page.alternative .header {
|
||||||
|
background-image:url('../images/header-cybre-colour.jpg');
|
||||||
|
background-repeat: repeat-x;
|
||||||
|
background-size:contain;
|
||||||
|
height:45vh;
|
||||||
|
width: 100%;
|
||||||
|
position:absolute;
|
||||||
|
z-index: 1;
|
||||||
|
text-align:center;
|
||||||
|
|
||||||
|
display: unset!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page.alternative .header img {
|
||||||
|
margin: auto;
|
||||||
|
max-height:45vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.landing-page.alternative .grid {
|
||||||
|
position: relative;
|
||||||
|
z-index:2;
|
||||||
|
margin-top:15vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page.alternative .landing-page__hero img {
|
||||||
|
visibility: hidden;
|
||||||
|
max-height:170px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page.alternative .landing-page__forms {
|
||||||
|
height:auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page.alternative .column-1 {
|
||||||
|
display:flex;
|
||||||
|
align-items:flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page.alternative .column {
|
||||||
|
max-height:initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
.landing-page.alternative .row__mascot {
|
||||||
|
.floats {
|
||||||
|
position:absolute;
|
||||||
|
img {
|
||||||
|
width:100%;
|
||||||
|
height:100%;
|
||||||
|
}
|
||||||
|
transition: all 0.1s linear;
|
||||||
|
animation-name: floating;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
animation-direction: alternate;
|
||||||
|
animation-timing-function: ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.float-1 {
|
||||||
|
width:50px;
|
||||||
|
height:50px;
|
||||||
|
bottom:60px;
|
||||||
|
left:110px;
|
||||||
|
animation-duration: 3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.float-2 {
|
||||||
|
width:130px;
|
||||||
|
height:130px;
|
||||||
|
left:85px;
|
||||||
|
bottom: -60px;
|
||||||
|
animation-duration: 3.5s;
|
||||||
|
animation-delay: 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.float-3 {
|
||||||
|
width:100px;
|
||||||
|
height:100px;
|
||||||
|
right: 50;
|
||||||
|
top: -10px;
|
||||||
|
animation-duration: 4s;
|
||||||
|
animation-delay: 0.5s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.activity-stream {
|
||||||
|
.status.light {
|
||||||
|
.status__header .status__meta .status__relative-time {
|
||||||
|
color: $ui-primary-color-alt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.display-name span {
|
||||||
|
color: $ui-primary-color-alt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status__content {
|
||||||
|
a.status__content__spoiler-link {
|
||||||
|
background: $ui-primary-color-alt;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: lighten($ui-primary-color-alt, 8%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.detailed-status.light {
|
||||||
|
.detailed-status__display-name .display-name span {
|
||||||
|
color: $ui-primary-color-alt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status__content a.status__content__spoiler-link {
|
||||||
|
background: $ui-primary-color-alt;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: lighten($ui-primary-color-alt, 8%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.detailed-status__meta {
|
||||||
|
color: $ui-primary-color-alt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.media-spoiler {
|
||||||
|
background: $ui-primary-color-alt;
|
||||||
|
&:hover {
|
||||||
|
background: darken($ui-primary-color-alt, 5%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pre-header {
|
||||||
|
color: $ui-primary-color-alt;
|
||||||
|
.status__display-name.muted strong {
|
||||||
|
color: $ui-primary-color-alt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.embed .activity-stream .entry .detailed-status.light .button.button-secondary.logo-button {
|
||||||
|
color: $ui-primary-color-alt;
|
||||||
|
svg {
|
||||||
|
path:first-child {
|
||||||
|
fill: $ui-primary-color-alt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:active,
|
||||||
|
&:focus,
|
||||||
|
&:hover {
|
||||||
|
svg path:first-child {
|
||||||
|
fill: lighten($ui-primary-color-alt, 4%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.emoji-mart-search {
|
||||||
|
background: $simple-background-color;
|
||||||
|
input {
|
||||||
|
color: $ui-primary-color-alt;
|
||||||
|
border: 1px solid $ui-primary-color-alt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.emoji-mart-anchor {
|
||||||
|
color: $ui-primary-color-alt;
|
||||||
|
&:hover {
|
||||||
|
color: darken($ui-primary-color-alt, 8%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-popout {
|
||||||
|
background: $ui-base-color;
|
||||||
|
color: $ui-primary-color;
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
color: $ui-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
em {
|
||||||
|
color: $ui-highlight-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.status__content a,
|
||||||
|
.status__content a.unhandled-link {
|
||||||
|
color: mix($ui-highlight-color, $ui-secondary-color, 10%);
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
|
||||||
|
.detailed-status > .media-spoiler,
|
||||||
|
.status > .media-spoiler,
|
||||||
|
.status .video-player,
|
||||||
|
.media-gallery,
|
||||||
|
.status .status-card.interactive {
|
||||||
|
margin-top: 20px;
|
||||||
|
margin-left: -68px;
|
||||||
|
width: calc(100% + 80px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.detailed-status > .media-spoiler,
|
||||||
|
.status > .media-spoiler,
|
||||||
|
.video-player {
|
||||||
|
max-width: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If there's no status text, add an extra margin on top */
|
||||||
|
.status .status__info + .media-gallery,
|
||||||
|
.status .status__info + .media-spoiler,
|
||||||
|
.status .status__info + .video-player,
|
||||||
|
.status .status__info + .status-card {
|
||||||
|
margin-top: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status__video-player-video {
|
||||||
|
transform: unset;
|
||||||
|
top: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detailed-status .media-gallery {
|
||||||
|
margin-left: -10px;
|
||||||
|
width: calc(100% + 22px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.public-layout .status {
|
||||||
|
.status__content {
|
||||||
|
min-height: 15px;
|
||||||
|
}
|
||||||
|
& > .media-spoiler,
|
||||||
|
.video-player,
|
||||||
|
.media-gallery,
|
||||||
|
.status-card {
|
||||||
|
margin-top: 20px;
|
||||||
|
width: calc(100% + 94px);
|
||||||
|
margin-left: -78px;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1669,13 +1669,13 @@ a.account__display-name {
|
||||||
|
|
||||||
.no-reduce-motion .icon-button.star-icon {
|
.no-reduce-motion .icon-button.star-icon {
|
||||||
&.activate {
|
&.activate {
|
||||||
& > .fa-star {
|
& > .fa-floppy-o {
|
||||||
animation: spring-rotate-in 1s linear;
|
animation: spring-rotate-in 1s linear;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.deactivate {
|
&.deactivate {
|
||||||
& > .fa-star {
|
& > .fa-floppy-o {
|
||||||
animation: spring-rotate-out 1s linear;
|
animation: spring-rotate-out 1s linear;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3195,7 +3195,6 @@ a.status-card.compact:hover {
|
||||||
}
|
}
|
||||||
|
|
||||||
.status-card__image-image {
|
.status-card__image-image {
|
||||||
border-radius: 4px 0 0 4px;
|
|
||||||
display: block;
|
display: block;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
|
@ -263,8 +263,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
max-width: 960px;
|
|
||||||
|
|
||||||
@media screen and (max-width: $no-gap-breakpoint) {
|
@media screen and (max-width: $no-gap-breakpoint) {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
@ -298,6 +296,12 @@
|
||||||
min-height: 1px;
|
min-height: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 1rem;
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
.nav-left {
|
.nav-left {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: stretch;
|
align-items: stretch;
|
||||||
|
|
|
@ -98,7 +98,7 @@ class ActivityPub::Activity
|
||||||
crawl_links(status)
|
crawl_links(status)
|
||||||
|
|
||||||
notify_about_reblog(status) if reblog_of_local_account?(status) && !reblog_by_following_group_account?(status)
|
notify_about_reblog(status) if reblog_of_local_account?(status) && !reblog_by_following_group_account?(status)
|
||||||
notify_about_mentions(status)
|
notify_about_mentions(status) unless spammy_mentions?(status)
|
||||||
|
|
||||||
# Only continue if the status is supposed to have arrived in real-time.
|
# Only continue if the status is supposed to have arrived in real-time.
|
||||||
# Note that if @options[:override_timestamps] isn't set, the status
|
# Note that if @options[:override_timestamps] isn't set, the status
|
||||||
|
@ -117,6 +117,11 @@ class ActivityPub::Activity
|
||||||
status.reblog? && status.account.group? && status.reblog.account.following?(status.account)
|
status.reblog? && status.account.group? && status.reblog.account.following?(status.account)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def spammy_mentions?(status)
|
||||||
|
status.has_non_mention_links? &&
|
||||||
|
@account.followers.local.count == 0
|
||||||
|
end
|
||||||
|
|
||||||
def notify_about_reblog(status)
|
def notify_about_reblog(status)
|
||||||
NotifyService.new.call(status.reblog.account, :reblog, status)
|
NotifyService.new.call(status.reblog.account, :reblog, status)
|
||||||
end
|
end
|
||||||
|
@ -144,7 +149,7 @@ class ActivityPub::Activity
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_later!(uri)
|
def delete_later!(uri)
|
||||||
redis.setex("delete_upon_arrival:#{@account.id}:#{uri}", 6.hours.seconds, uri)
|
redis.setex("delete_upon_arrival:#{@account.id}:#{uri}", 6.hours.seconds, true)
|
||||||
end
|
end
|
||||||
|
|
||||||
def status_from_object
|
def status_from_object
|
||||||
|
@ -210,12 +215,22 @@ class ActivityPub::Activity
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def lock_or_return(key, expire_after = 7.days.seconds)
|
def lock_or_return(key, expire_after = 2.hours.seconds)
|
||||||
yield if redis.set(key, true, nx: true, ex: expire_after)
|
yield if redis.set(key, true, nx: true, ex: expire_after)
|
||||||
ensure
|
ensure
|
||||||
redis.del(key)
|
redis.del(key)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def lock_or_fail(key)
|
||||||
|
RedisLock.acquire({ redis: Redis.current, key: key }) do |lock|
|
||||||
|
if lock.acquired?
|
||||||
|
yield
|
||||||
|
else
|
||||||
|
raise Mastodon::RaceConditionError
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def fetch?
|
def fetch?
|
||||||
!@options[:delivery]
|
!@options[:delivery]
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,29 +4,25 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity
|
||||||
def perform
|
def perform
|
||||||
return reject_payload! if delete_arrived_first?(@json['id']) || !related_to_local_activity?
|
return reject_payload! if delete_arrived_first?(@json['id']) || !related_to_local_activity?
|
||||||
|
|
||||||
RedisLock.acquire(lock_options) do |lock|
|
lock_or_fail("announce:#{@object['id']}") do
|
||||||
if lock.acquired?
|
original_status = status_from_object
|
||||||
original_status = status_from_object
|
|
||||||
|
|
||||||
return reject_payload! if original_status.nil? || !announceable?(original_status)
|
return reject_payload! if original_status.nil? || !announceable?(original_status)
|
||||||
|
|
||||||
@status = Status.find_by(account: @account, reblog: original_status)
|
@status = Status.find_by(account: @account, reblog: original_status)
|
||||||
|
|
||||||
return @status unless @status.nil?
|
return @status unless @status.nil?
|
||||||
|
|
||||||
@status = Status.create!(
|
@status = Status.create!(
|
||||||
account: @account,
|
account: @account,
|
||||||
reblog: original_status,
|
reblog: original_status,
|
||||||
uri: @json['id'],
|
uri: @json['id'],
|
||||||
created_at: @json['published'],
|
created_at: @json['published'],
|
||||||
override_timestamps: @options[:override_timestamps],
|
override_timestamps: @options[:override_timestamps],
|
||||||
visibility: visibility_from_audience
|
visibility: visibility_from_audience
|
||||||
)
|
)
|
||||||
|
|
||||||
distribute(@status)
|
distribute(@status)
|
||||||
else
|
|
||||||
raise Mastodon::RaceConditionError
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@status
|
@status
|
||||||
|
@ -69,8 +65,4 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity
|
||||||
def reblog_of_local_status?
|
def reblog_of_local_status?
|
||||||
status_from_uri(object_uri)&.account&.local?
|
status_from_uri(object_uri)&.account&.local?
|
||||||
end
|
end
|
||||||
|
|
||||||
def lock_options
|
|
||||||
{ redis: Redis.current, key: "announce:#{@object['id']}" }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -45,19 +45,15 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||||
def create_status
|
def create_status
|
||||||
return reject_payload! if unsupported_object_type? || invalid_origin?(object_uri) || tombstone_exists? || !related_to_local_activity?
|
return reject_payload! if unsupported_object_type? || invalid_origin?(object_uri) || tombstone_exists? || !related_to_local_activity?
|
||||||
|
|
||||||
RedisLock.acquire(lock_options) do |lock|
|
lock_or_fail("create:#{object_uri}") do
|
||||||
if lock.acquired?
|
return if delete_arrived_first?(object_uri) || poll_vote? # rubocop:disable Lint/NonLocalExitFromIterator
|
||||||
return if delete_arrived_first?(object_uri) || poll_vote? # rubocop:disable Lint/NonLocalExitFromIterator
|
|
||||||
|
|
||||||
@status = find_existing_status
|
@status = find_existing_status
|
||||||
|
|
||||||
if @status.nil?
|
if @status.nil?
|
||||||
process_status
|
process_status
|
||||||
elsif @options[:delivered_to_account_id].present?
|
elsif @options[:delivered_to_account_id].present?
|
||||||
postprocess_audience_and_deliver
|
postprocess_audience_and_deliver
|
||||||
end
|
|
||||||
else
|
|
||||||
raise Mastodon::RaceConditionError
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -253,7 +249,8 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||||
rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError
|
rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError
|
||||||
RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id)
|
RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id)
|
||||||
rescue Seahorse::Client::NetworkingError
|
rescue Seahorse::Client::NetworkingError
|
||||||
nil
|
Rails.logger.info "Ran into seahorse networking error on MEDIA:#{media_attachment.id} (url:#{media_attachment.remote_url})"
|
||||||
|
raise
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -314,13 +311,9 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||||
poll = replied_to_status.preloadable_poll
|
poll = replied_to_status.preloadable_poll
|
||||||
already_voted = true
|
already_voted = true
|
||||||
|
|
||||||
RedisLock.acquire(poll_lock_options) do |lock|
|
lock_or_fail("vote:#{replied_to_status.poll_id}:#{@account.id}") do
|
||||||
if lock.acquired?
|
already_voted = poll.votes.where(account: @account).exists?
|
||||||
already_voted = poll.votes.where(account: @account).exists?
|
poll.votes.create!(account: @account, choice: poll.options.index(@object['name']), uri: object_uri)
|
||||||
poll.votes.create!(account: @account, choice: poll.options.index(@object['name']), uri: object_uri)
|
|
||||||
else
|
|
||||||
raise Mastodon::RaceConditionError
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
increment_voters_count! unless already_voted
|
increment_voters_count! unless already_voted
|
||||||
|
@ -513,12 +506,4 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||||
poll.reload
|
poll.reload
|
||||||
retry
|
retry
|
||||||
end
|
end
|
||||||
|
|
||||||
def lock_options
|
|
||||||
{ redis: Redis.current, key: "create:#{object_uri}" }
|
|
||||||
end
|
|
||||||
|
|
||||||
def poll_lock_options
|
|
||||||
{ redis: Redis.current, key: "vote:#{replied_to_status.poll_id}:#{@account.id}" }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,33 +20,35 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
|
||||||
def delete_note
|
def delete_note
|
||||||
return if object_uri.nil?
|
return if object_uri.nil?
|
||||||
|
|
||||||
unless invalid_origin?(object_uri)
|
lock_or_return("delete_status_in_progress:#{object_uri}", 5.minutes.seconds) do
|
||||||
RedisLock.acquire(lock_options) { |_lock| delete_later!(object_uri) }
|
unless invalid_origin?(object_uri)
|
||||||
Tombstone.find_or_create_by(uri: object_uri, account: @account)
|
# This lock ensures a concurrent `ActivityPub::Activity::Create` either
|
||||||
|
# does not create a status at all, or has finished saving it to the
|
||||||
|
# database before we try to load it.
|
||||||
|
# Without the lock, `delete_later!` could be called after `delete_arrived_first?`
|
||||||
|
# and `Status.find` before `Status.create!`
|
||||||
|
lock_or_fail("create:#{object_uri}") { delete_later!(object_uri) }
|
||||||
|
|
||||||
|
Tombstone.find_or_create_by(uri: object_uri, account: @account)
|
||||||
|
end
|
||||||
|
|
||||||
|
@status = Status.find_by(uri: object_uri, account: @account)
|
||||||
|
@status ||= Status.find_by(uri: @object['atomUri'], account: @account) if @object.is_a?(Hash) && @object['atomUri'].present?
|
||||||
|
|
||||||
|
return if @status.nil?
|
||||||
|
|
||||||
|
forward! if @json['signature'].present? && @status.distributable?
|
||||||
|
delete_now!
|
||||||
end
|
end
|
||||||
|
|
||||||
@status = Status.find_by(uri: object_uri, account: @account)
|
|
||||||
@status ||= Status.find_by(uri: @object['atomUri'], account: @account) if @object.is_a?(Hash) && @object['atomUri'].present?
|
|
||||||
|
|
||||||
return if @status.nil?
|
|
||||||
|
|
||||||
if @status.distributable?
|
|
||||||
forward_for_reply
|
|
||||||
forward_for_reblogs
|
|
||||||
end
|
|
||||||
|
|
||||||
delete_now!
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def forward_for_reblogs
|
def rebloggers_ids
|
||||||
return if @json['signature'].blank?
|
return @rebloggers_ids if defined?(@rebloggers_ids)
|
||||||
|
@rebloggers_ids = @status.reblogs.includes(:account).references(:account).merge(Account.local).pluck(:account_id)
|
||||||
|
end
|
||||||
|
|
||||||
rebloggers_ids = @status.reblogs.includes(:account).references(:account).merge(Account.local).pluck(:account_id)
|
def inboxes_for_reblogs
|
||||||
inboxes = Account.where(id: ::Follow.where(target_account_id: rebloggers_ids).select(:account_id)).inboxes - [@account.preferred_inbox_url]
|
Account.where(id: ::Follow.where(target_account_id: rebloggers_ids).select(:account_id)).inboxes
|
||||||
|
|
||||||
ActivityPub::LowPriorityDeliveryWorker.push_bulk(inboxes) do |inbox_url|
|
|
||||||
[payload, rebloggers_ids.first, inbox_url]
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def replied_to_status
|
def replied_to_status
|
||||||
|
@ -58,13 +60,19 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
|
||||||
!replied_to_status.nil? && replied_to_status.account.local?
|
!replied_to_status.nil? && replied_to_status.account.local?
|
||||||
end
|
end
|
||||||
|
|
||||||
def forward_for_reply
|
def inboxes_for_reply
|
||||||
return unless @json['signature'].present? && reply_to_local?
|
replied_to_status.account.followers.inboxes
|
||||||
|
end
|
||||||
|
|
||||||
inboxes = replied_to_status.account.followers.inboxes - [@account.preferred_inbox_url]
|
def forward!
|
||||||
|
inboxes = inboxes_for_reblogs
|
||||||
|
inboxes += inboxes_for_reply if reply_to_local?
|
||||||
|
inboxes -= [@account.preferred_inbox_url]
|
||||||
|
|
||||||
ActivityPub::LowPriorityDeliveryWorker.push_bulk(inboxes) do |inbox_url|
|
sender_id = reply_to_local? ? replied_to_status.account_id : rebloggers_ids.first
|
||||||
[payload, replied_to_status.account_id, inbox_url]
|
|
||||||
|
ActivityPub::LowPriorityDeliveryWorker.push_bulk(inboxes.uniq) do |inbox_url|
|
||||||
|
[payload, sender_id, inbox_url]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -75,8 +83,4 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
|
||||||
def payload
|
def payload
|
||||||
@payload ||= Oj.dump(@json)
|
@payload ||= Oj.dump(@json)
|
||||||
end
|
end
|
||||||
|
|
||||||
def lock_options
|
|
||||||
{ redis: Redis.current, key: "create:#{object_uri}" }
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -267,8 +267,9 @@ class Formatter
|
||||||
|
|
||||||
def link_to_mention(entity, linkable_accounts)
|
def link_to_mention(entity, linkable_accounts)
|
||||||
acct = entity[:screen_name]
|
acct = entity[:screen_name]
|
||||||
|
username, domain = acct.split('@')
|
||||||
|
|
||||||
return link_to_account(acct) unless linkable_accounts
|
return link_to_account(acct) unless linkable_accounts and domain != "twitter.com"
|
||||||
|
|
||||||
account = linkable_accounts.find { |item| TagManager.instance.same_acct?(item.acct, acct) }
|
account = linkable_accounts.find { |item| TagManager.instance.same_acct?(item.acct, acct) }
|
||||||
account ? mention_html(account) : "@#{encode(acct)}"
|
account ? mention_html(account) : "@#{encode(acct)}"
|
||||||
|
@ -277,6 +278,10 @@ class Formatter
|
||||||
def link_to_account(acct)
|
def link_to_account(acct)
|
||||||
username, domain = acct.split('@')
|
username, domain = acct.split('@')
|
||||||
|
|
||||||
|
if domain == "twitter.com"
|
||||||
|
return mention_twitter_html(username)
|
||||||
|
end
|
||||||
|
|
||||||
domain = nil if TagManager.instance.local_domain?(domain)
|
domain = nil if TagManager.instance.local_domain?(domain)
|
||||||
account = EntityCache.instance.mention(username, domain)
|
account = EntityCache.instance.mention(username, domain)
|
||||||
|
|
||||||
|
@ -304,4 +309,8 @@ class Formatter
|
||||||
def mention_html(account)
|
def mention_html(account)
|
||||||
"<span class=\"h-card\"><a href=\"#{encode(ActivityPub::TagManager.instance.url_for(account))}\" class=\"u-url mention\">@<span>#{encode(account.username)}</span></a></span>"
|
"<span class=\"h-card\"><a href=\"#{encode(ActivityPub::TagManager.instance.url_for(account))}\" class=\"u-url mention\">@<span>#{encode(account.username)}</span></a></span>"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def mention_twitter_html(username)
|
||||||
|
"<span class=\"h-card\"><a href=\"https://twitter.com/#{username}\" class=\"u-url mention\">@<span>#{username}@twitter.com</span></a></span>"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -88,7 +88,8 @@ class Account < ApplicationRecord
|
||||||
validates :username, format: { with: /\A[a-z0-9_]+\z/i }, length: { maximum: 30 }, if: -> { local? && will_save_change_to_username? && actor_type != 'Application' }
|
validates :username, format: { with: /\A[a-z0-9_]+\z/i }, length: { maximum: 30 }, if: -> { local? && will_save_change_to_username? && actor_type != 'Application' }
|
||||||
validates_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? }
|
validates_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? }
|
||||||
validates :display_name, length: { maximum: 30 }, if: -> { local? && will_save_change_to_display_name? }
|
validates :display_name, length: { maximum: 30 }, if: -> { local? && will_save_change_to_display_name? }
|
||||||
validates :note, note_length: { maximum: 500 }, if: -> { local? && will_save_change_to_note? }
|
validates :note, note_length: { maximum: 1024 }, if: -> { local? && will_save_change_to_note? }
|
||||||
|
validate :note_has_ten_newlines?, if: -> { local? && will_save_change_to_note? }
|
||||||
validates :fields, length: { maximum: 4 }, if: -> { local? && will_save_change_to_fields? }
|
validates :fields, length: { maximum: 4 }, if: -> { local? && will_save_change_to_fields? }
|
||||||
|
|
||||||
scope :remote, -> { where.not(domain: nil) }
|
scope :remote, -> { where.not(domain: nil) }
|
||||||
|
@ -346,7 +347,6 @@ class Account < ApplicationRecord
|
||||||
rescue ActiveRecord::RecordInvalid
|
rescue ActiveRecord::RecordInvalid
|
||||||
self.avatar = nil
|
self.avatar = nil
|
||||||
self.header = nil
|
self.header = nil
|
||||||
|
|
||||||
save!
|
save!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -382,6 +382,10 @@ class Account < ApplicationRecord
|
||||||
return 'local' if local?
|
return 'local' if local?
|
||||||
|
|
||||||
@synchronization_uri_prefix ||= uri[/http(s?):\/\/[^\/]+\//]
|
@synchronization_uri_prefix ||= uri[/http(s?):\/\/[^\/]+\//]
|
||||||
|
end
|
||||||
|
|
||||||
|
def note_has_ten_newlines?
|
||||||
|
errors.add(:note, 'Bio can\'t have more then 10 newlines') unless note.count("\n") <= 10
|
||||||
end
|
end
|
||||||
|
|
||||||
class Field < ActiveModelSerializers::Model
|
class Field < ActiveModelSerializers::Model
|
||||||
|
|
|
@ -351,6 +351,14 @@ class Status < ApplicationRecord
|
||||||
super || build_status_stat
|
super || build_status_stat
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def has_non_mention_links?
|
||||||
|
if local?
|
||||||
|
text.match? %r{https?://\w}
|
||||||
|
else
|
||||||
|
Nokogiri::HTML.fragment(text).css('a:not(.mention)').present?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def update_status_stat!(attrs)
|
def update_status_stat!(attrs)
|
||||||
|
|
|
@ -8,6 +8,7 @@ class InstancePresenter
|
||||||
:site_description,
|
:site_description,
|
||||||
:site_extended_description,
|
:site_extended_description,
|
||||||
:site_terms,
|
:site_terms,
|
||||||
|
:open_registrations,
|
||||||
:closed_registrations_message,
|
:closed_registrations_message,
|
||||||
to: Setting
|
to: Setting
|
||||||
)
|
)
|
||||||
|
|
|
@ -5,7 +5,7 @@ class REST::InstanceSerializer < ActiveModel::Serializer
|
||||||
|
|
||||||
attributes :uri, :title, :short_description, :description, :email,
|
attributes :uri, :title, :short_description, :description, :email,
|
||||||
:version, :urls, :stats, :thumbnail,
|
:version, :urls, :stats, :thumbnail,
|
||||||
:languages, :registrations, :approval_required, :invites_enabled
|
:languages, :registrations, :approval_required, :invites_enabled, :max_toot_chars
|
||||||
|
|
||||||
has_one :contact_account, serializer: REST::AccountSerializer
|
has_one :contact_account, serializer: REST::AccountSerializer
|
||||||
|
|
||||||
|
@ -39,6 +39,10 @@ class REST::InstanceSerializer < ActiveModel::Serializer
|
||||||
instance_presenter.thumbnail ? full_asset_url(instance_presenter.thumbnail.file.url) : full_pack_url('media/images/preview.jpg')
|
instance_presenter.thumbnail ? full_asset_url(instance_presenter.thumbnail.file.url) : full_pack_url('media/images/preview.jpg')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def max_toot_chars
|
||||||
|
StatusLengthValidator::MAX_CHARS
|
||||||
|
end
|
||||||
|
|
||||||
def stats
|
def stats
|
||||||
{
|
{
|
||||||
user_count: instance_presenter.user_count,
|
user_count: instance_presenter.user_count,
|
||||||
|
|
|
@ -16,6 +16,8 @@ class RemoveStatusService < BaseService
|
||||||
@account = status.account
|
@account = status.account
|
||||||
@options = options
|
@options = options
|
||||||
|
|
||||||
|
@status.discard
|
||||||
|
|
||||||
RedisLock.acquire(lock_options) do |lock|
|
RedisLock.acquire(lock_options) do |lock|
|
||||||
if lock.acquired?
|
if lock.acquired?
|
||||||
remove_from_self if @account.local?
|
remove_from_self if @account.local?
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class StatusLengthValidator < ActiveModel::Validator
|
class StatusLengthValidator < ActiveModel::Validator
|
||||||
MAX_CHARS = 500
|
MAX_CHARS = 1024
|
||||||
|
|
||||||
def validate(status)
|
def validate(status)
|
||||||
return unless status.local? && !status.reblog?
|
return unless status.local? && !status.reblog?
|
||||||
|
|
|
@ -8,8 +8,7 @@
|
||||||
.landing
|
.landing
|
||||||
.landing__brand
|
.landing__brand
|
||||||
= link_to root_url, class: 'brand' do
|
= link_to root_url, class: 'brand' do
|
||||||
= svg_logo_full
|
= image_pack_tag 'logo-cybre.png', width: 100, alt: 'Cybrespace'
|
||||||
%span.brand__tagline=t 'about.tagline'
|
|
||||||
|
|
||||||
.landing__grid
|
.landing__grid
|
||||||
.landing__grid__column.landing__grid__column-registration
|
.landing__grid__column.landing__grid__column-registration
|
||||||
|
|
|
@ -19,6 +19,11 @@
|
||||||
|
|
||||||
= render 'header', account: @account, with_bio: true
|
= render 'header', account: @account, with_bio: true
|
||||||
|
|
||||||
|
- if @account.user&.disabled?
|
||||||
|
.header
|
||||||
|
.nav-center
|
||||||
|
%h2 This user's account has been locked by a moderator.
|
||||||
|
|
||||||
.grid
|
.grid
|
||||||
.column-0
|
.column-0
|
||||||
.h-feed
|
.h-feed
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
.sidebar-wrapper__inner
|
.sidebar-wrapper__inner
|
||||||
.sidebar
|
.sidebar
|
||||||
= link_to root_path do
|
= link_to root_path do
|
||||||
= image_pack_tag 'logo.svg', class: 'logo', alt: 'Mastodon'
|
= image_pack_tag 'logo-cybre.png', class: 'logo', alt: 'Cybrespace'
|
||||||
|
|
||||||
.sidebar__toggle
|
.sidebar__toggle
|
||||||
.sidebar__toggle__logo
|
.sidebar__toggle__logo
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
.logo-container
|
.logo-container
|
||||||
%h1
|
%h1
|
||||||
= link_to root_path do
|
= link_to root_path do
|
||||||
= svg_logo_full
|
= image_pack_tag 'logo-cybre.png', alt: 'Cybrespace'
|
||||||
|
|
||||||
.form-container
|
.form-container
|
||||||
= render 'flashes'
|
= render 'flashes'
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
%li= link_to t('about.api'), 'https://docs.joinmastodon.org/client/intro/'
|
%li= link_to t('about.api'), 'https://docs.joinmastodon.org/client/intro/'
|
||||||
.column-2
|
.column-2
|
||||||
%h4= link_to t('about.what_is_mastodon'), 'https://joinmastodon.org/'
|
%h4= link_to t('about.what_is_mastodon'), 'https://joinmastodon.org/'
|
||||||
= link_to svg_logo, root_url, class: 'brand'
|
= link_to (image_pack_tag 'logo-cybre.png', width: 50), root_url, class: 'brand', alt: 'Cybrespace'
|
||||||
.column-3
|
.column-3
|
||||||
%h4= site_hostname
|
%h4= site_hostname
|
||||||
%ul
|
%ul
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
.fields-row
|
.fields-row
|
||||||
.fields-row__column.fields-group.fields-row__column-6
|
.fields-row__column.fields-group.fields-row__column-6
|
||||||
= f.input :display_name, wrapper: :with_label, input_html: { maxlength: 30, data: { default: @account.username } }, hint: false
|
= f.input :display_name, wrapper: :with_label, input_html: { maxlength: 30, data: { default: @account.username } }, hint: false
|
||||||
= f.input :note, wrapper: :with_label, input_html: { maxlength: 500 }, hint: false
|
= f.input :note, wrapper: :with_label, input_html: { maxlength: 1024 }, hint: false
|
||||||
|
|
||||||
.fields-row
|
.fields-row
|
||||||
.fields-row__column.fields-row__column-6
|
.fields-row__column.fields-row__column-6
|
||||||
|
|
|
@ -71,7 +71,7 @@
|
||||||
= " "
|
= " "
|
||||||
·
|
·
|
||||||
= link_to remote_interaction_path(status, type: :favourite), class: 'modal-button detailed-status__link' do
|
= link_to remote_interaction_path(status, type: :favourite), class: 'modal-button detailed-status__link' do
|
||||||
= fa_icon('star')
|
= fa_icon('floppy-o')
|
||||||
%span.detailed-status__favorites>= number_to_human status.favourites_count, strip_insignificant_zeros: true
|
%span.detailed-status__favorites>= number_to_human status.favourites_count, strip_insignificant_zeros: true
|
||||||
= " "
|
= " "
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,6 @@
|
||||||
= fa_icon 'reply fw'
|
= fa_icon 'reply fw'
|
||||||
- else
|
- else
|
||||||
= fa_icon 'reply-all fw'
|
= fa_icon 'reply-all fw'
|
||||||
%span.icon-button__counter= obscured_counter status.replies_count
|
|
||||||
= link_to remote_interaction_path(status, type: :reblog), class: 'status__action-bar-button icon-button modal-button' do
|
= link_to remote_interaction_path(status, type: :reblog), class: 'status__action-bar-button icon-button modal-button' do
|
||||||
- if status.distributable?
|
- if status.distributable?
|
||||||
= fa_icon 'retweet fw'
|
= fa_icon 'retweet fw'
|
||||||
|
@ -69,4 +68,4 @@
|
||||||
- else
|
- else
|
||||||
= fa_icon 'envelope fw'
|
= fa_icon 'envelope fw'
|
||||||
= link_to remote_interaction_path(status, type: :favourite), class: 'status__action-bar-button icon-button modal-button' do
|
= link_to remote_interaction_path(status, type: :favourite), class: 'status__action-bar-button icon-button modal-button' do
|
||||||
= fa_icon 'star fw'
|
= fa_icon 'floppy-o fw'
|
||||||
|
|
|
@ -42,7 +42,10 @@ en-CY:
|
||||||
nothing_here: There is nothing here!
|
nothing_here: There is nothing here!
|
||||||
people_followed_by: People whom %{name} follows
|
people_followed_by: People whom %{name} follows
|
||||||
people_who_follow: People who follow %{name}
|
people_who_follow: People who follow %{name}
|
||||||
posts: Pings
|
posts:
|
||||||
|
one: Ping
|
||||||
|
other: Pings
|
||||||
|
posts_tab_heading: Pings
|
||||||
posts_with_replies: Pings with replies
|
posts_with_replies: Pings with replies
|
||||||
remote_follow: Remote follow
|
remote_follow: Remote follow
|
||||||
reserved_username: The username is reserved
|
reserved_username: The username is reserved
|
||||||
|
|
|
@ -1331,9 +1331,12 @@ en:
|
||||||
<p>Originally adapted from the <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p>
|
<p>Originally adapted from the <a href="https://github.com/discourse/discourse">Discourse privacy policy</a>.</p>
|
||||||
title: "%{instance} Terms of Service and Privacy Policy"
|
title: "%{instance} Terms of Service and Privacy Policy"
|
||||||
themes:
|
themes:
|
||||||
|
default: Cybrespace
|
||||||
contrast: Mastodon (High contrast)
|
contrast: Mastodon (High contrast)
|
||||||
default: Mastodon (Dark)
|
mastodon: Mastodon (Dark)
|
||||||
mastodon-light: Mastodon (Light)
|
mastodon-light: Mastodon (light)
|
||||||
|
light: Cybre Lite
|
||||||
|
win95: Windows 95
|
||||||
time:
|
time:
|
||||||
formats:
|
formats:
|
||||||
default: "%b %d, %Y, %H:%M"
|
default: "%b %d, %Y, %H:%M"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# important settings can be changed from the admin interface.
|
# important settings can be changed from the admin interface.
|
||||||
|
|
||||||
defaults: &defaults
|
defaults: &defaults
|
||||||
site_title: Mastodon
|
site_title: 'Cybrespace'
|
||||||
site_short_description: ''
|
site_short_description: ''
|
||||||
site_description: ''
|
site_description: ''
|
||||||
site_extended_description: ''
|
site_extended_description: ''
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
default: styles/application.scss
|
default: styles/cybre.scss
|
||||||
|
mastodon: styles/application.scss
|
||||||
contrast: styles/contrast.scss
|
contrast: styles/contrast.scss
|
||||||
mastodon-light: styles/mastodon-light.scss
|
mastodon-light: styles/mastodon-light.scss
|
||||||
|
light: styles/cybre-light.scss
|
||||||
|
win95: styles/win95.scss
|
||||||
|
|
|
@ -31,6 +31,7 @@ default: &default
|
||||||
- .ttf
|
- .ttf
|
||||||
- .woff
|
- .woff
|
||||||
- .woff2
|
- .woff2
|
||||||
|
- .gif
|
||||||
|
|
||||||
extensions:
|
extensions:
|
||||||
- .mjs
|
- .mjs
|
||||||
|
|
|
@ -24,7 +24,7 @@ setup_redis_env_url
|
||||||
setup_redis_env_url(:cache, false)
|
setup_redis_env_url(:cache, false)
|
||||||
|
|
||||||
namespace = ENV.fetch('REDIS_NAMESPACE', nil)
|
namespace = ENV.fetch('REDIS_NAMESPACE', nil)
|
||||||
cache_namespace = namespace ? namespace + '_cache' : 'cache'
|
cache_namespace = [namespace, 'cache', `git rev-parse --short HEAD`.strip].compact.join('_')
|
||||||
|
|
||||||
REDIS_CACHE_PARAMS = {
|
REDIS_CACHE_PARAMS = {
|
||||||
expires_in: 10.minutes,
|
expires_in: 10.minutes,
|
||||||
|
|
|
@ -21,7 +21,7 @@ module Mastodon
|
||||||
end
|
end
|
||||||
|
|
||||||
def suffix
|
def suffix
|
||||||
''
|
'-cybre'
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_a
|
def to_a
|
||||||
|
|
|
@ -169,6 +169,7 @@
|
||||||
"webpack-cli": "^3.3.12",
|
"webpack-cli": "^3.3.12",
|
||||||
"webpack-merge": "^5.4.0",
|
"webpack-merge": "^5.4.0",
|
||||||
"wicg-inert": "^3.1.0"
|
"wicg-inert": "^3.1.0"
|
||||||
|
"what-input": "^4.3.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@testing-library/jest-dom": "^5.11.6",
|
"@testing-library/jest-dom": "^5.11.6",
|
||||||
|
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 232 KiB |
|
@ -3,7 +3,7 @@
|
||||||
<msapplication>
|
<msapplication>
|
||||||
<tile>
|
<tile>
|
||||||
<square150x150logo src="/mstile-150x150.png"/>
|
<square150x150logo src="/mstile-150x150.png"/>
|
||||||
<TileColor>#282c37</TileColor>
|
<TileColor>#1ea21e</TileColor>
|
||||||
</tile>
|
</tile>
|
||||||
</msapplication>
|
</msapplication>
|
||||||
</browserconfig>
|
</browserconfig>
|
||||||
|
|
Before Width: | Height: | Size: 997 B After Width: | Height: | Size: 310 KiB |
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 295 KiB |
After Width: | Height: | Size: 398 KiB |
After Width: | Height: | Size: 818 KiB |
After Width: | Height: | Size: 184 KiB |