Compare commits
No commits in common. "cybrespace-3.3" and "feature_cybrespace_locale" have entirely different histories.
cybrespace
...
feature_cy
|
@ -6,9 +6,7 @@ class Api::V2::MediaController < Api::V1::MediaController
|
|||
render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: 202
|
||||
rescue Paperclip::Errors::NotIdentifiedByImageMagickError
|
||||
render json: file_type_error, status: 422
|
||||
rescue Paperclip::Error => e
|
||||
Rails.logger.error "Ran into media create error (#{e.message})"
|
||||
e.backtrace.each{ |line| Rails.logger.error line }
|
||||
rescue Paperclip::Error
|
||||
render json: processing_error, status: 500
|
||||
end
|
||||
end
|
||||
|
|
Before Width: | Height: | Size: 622 B |
Before Width: | Height: | Size: 223 KiB |
Before Width: | Height: | Size: 232 KiB |
Before Width: | Height: | Size: 378 B |
Before Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 34 KiB |
|
@ -1,64 +0,0 @@
|
|||
<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>
|
Before Width: | Height: | Size: 12 KiB |
|
@ -1,64 +0,0 @@
|
|||
<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>
|
Before Width: | Height: | Size: 12 KiB |
|
@ -1,64 +0,0 @@
|
|||
<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>
|
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 786 KiB |
Before Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 398 KiB |
Before Width: | Height: | Size: 497 B |
Before Width: | Height: | Size: 356 B |
Before Width: | Height: | Size: 418 B |
Before Width: | Height: | Size: 488 B |
Before Width: | Height: | Size: 390 B |
Before Width: | Height: | Size: 452 B |
Before Width: | Height: | Size: 589 B |
Before Width: | Height: | Size: 561 B |
Before Width: | Height: | Size: 328 B |
Before Width: | Height: | Size: 457 B |
Before Width: | Height: | Size: 384 B |
Before Width: | Height: | Size: 326 B |
Before Width: | Height: | Size: 437 B |
Before Width: | Height: | Size: 599 B |
Before Width: | Height: | Size: 383 B |
Before Width: | Height: | Size: 650 B |
Before Width: | Height: | Size: 411 B |
Before Width: | Height: | Size: 282 B |
Before Width: | Height: | Size: 337 B |
Before Width: | Height: | Size: 340 B |
Before Width: | Height: | Size: 688 B |
Before Width: | Height: | Size: 780 B |
Before Width: | Height: | Size: 639 B |
Before Width: | Height: | Size: 498 B |
Before Width: | Height: | Size: 149 KiB |
Before Width: | Height: | Size: 184 KiB |
Before Width: | Height: | Size: 263 B |
|
@ -319,9 +319,10 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||
|
||||
return (
|
||||
<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} />
|
||||
<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={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='floppy-o' 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='star' onClick={this.handleFavouriteClick} />
|
||||
|
||||
{shareButton}
|
||||
|
||||
<div className='status__action-bar-dropdown'>
|
||||
|
|
|
@ -193,7 +193,6 @@ export default class StatusContent extends React.PureComponent {
|
|||
|
||||
const showThreadButton = (
|
||||
<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' />
|
||||
</button>
|
||||
);
|
||||
|
|
|
@ -7,7 +7,6 @@ import { hydrateStore } from '../actions/store';
|
|||
import { IntlProvider, addLocaleData } from 'react-intl';
|
||||
import { getLocale } from '../locales';
|
||||
import PublicTimeline from '../features/standalone/public_timeline';
|
||||
import CommunityTimeline from '../features/standalone/community_timeline';
|
||||
import HashtagTimeline from '../features/standalone/hashtag_timeline';
|
||||
import ModalContainer from '../features/ui/containers/modal_container';
|
||||
import initialState from '../initial_state';
|
||||
|
@ -26,24 +25,22 @@ export default class TimelineContainer extends React.PureComponent {
|
|||
static propTypes = {
|
||||
locale: PropTypes.string.isRequired,
|
||||
hashtag: PropTypes.string,
|
||||
showPublicTimeline: PropTypes.bool.isRequired,
|
||||
local: PropTypes.bool,
|
||||
};
|
||||
|
||||
static defaultProps = {
|
||||
showPublicTimeline: initialState.settings.known_fediverse,
|
||||
local: !initialState.settings.known_fediverse,
|
||||
};
|
||||
|
||||
render () {
|
||||
const { locale, hashtag, showPublicTimeline } = this.props;
|
||||
const { locale, hashtag, local } = this.props;
|
||||
|
||||
let timeline;
|
||||
|
||||
if (hashtag) {
|
||||
timeline = <HashtagTimeline hashtag={hashtag} local={local} />;
|
||||
} else if (showPublicTimeline) {
|
||||
timeline = <PublicTimeline />;
|
||||
} else {
|
||||
timeline = <CommunityTimeline />;
|
||||
timeline = <PublicTimeline local={local} />;
|
||||
}
|
||||
|
||||
return (
|
||||
|
@ -51,6 +48,7 @@ export default class TimelineContainer extends React.PureComponent {
|
|||
<Provider store={store}>
|
||||
<Fragment>
|
||||
{timeline}
|
||||
|
||||
{ReactDOM.createPortal(
|
||||
<ModalContainer />,
|
||||
document.getElementById('modal-container'),
|
||||
|
|
|
@ -86,7 +86,7 @@ class ComposeForm extends ImmutablePureComponent {
|
|||
const fulltext = this.getFulltextForCharacterCounting();
|
||||
const isOnlyWhitespace = fulltext.length !== 0 && fulltext.trim().length === 0;
|
||||
|
||||
return !(isSubmitting || isUploading || isChangingUpload || length(fulltext) > 1024 || (isOnlyWhitespace && !anyMedia));
|
||||
return !(isSubmitting || isUploading || isChangingUpload || length(fulltext) > 500 || (isOnlyWhitespace && !anyMedia));
|
||||
}
|
||||
|
||||
handleSubmit = () => {
|
||||
|
@ -249,7 +249,7 @@ class ComposeForm extends ImmutablePureComponent {
|
|||
<PrivacyDropdownContainer />
|
||||
<SpoilerButtonContainer />
|
||||
</div>
|
||||
<div className='character-counter__wrapper'><CharacterCounter max={1024} text={this.getFulltextForCharacterCounting()} /></div>
|
||||
<div className='character-counter__wrapper'><CharacterCounter max={500} text={this.getFulltextForCharacterCounting()} /></div>
|
||||
</div>
|
||||
|
||||
<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}>
|
||||
{button || <img
|
||||
className={classNames('emojione', { 'pulse-loading': active && loading })}
|
||||
alt='🤔'
|
||||
src={`${assetHost}/emoji/1f914.svg`}
|
||||
alt='🙂'
|
||||
src={`${assetHost}/emoji/1f602.svg`}
|
||||
/>}
|
||||
</div>
|
||||
|
||||
|
|
|
@ -12,13 +12,13 @@ const DEFAULTS = [
|
|||
'+1',
|
||||
'grinning',
|
||||
'kissing_heart',
|
||||
'vhs',
|
||||
'heart_eyes',
|
||||
'laughing',
|
||||
'floppy_disk',
|
||||
'stuck_out_tongue_winking_eye',
|
||||
'sweat_smile',
|
||||
'joy',
|
||||
'yum',
|
||||
'computer',
|
||||
'disappointed',
|
||||
'thinking_face',
|
||||
'weary',
|
||||
'sob',
|
||||
|
|
|
@ -16,21 +16,21 @@ import LinkFooter from 'mastodon/features/ui/components/link_footer';
|
|||
import TrendsContainer from './containers/trends_container';
|
||||
|
||||
const messages = defineMessages({
|
||||
home_timeline: { id: 'tabs_bar.home', defaultMessage: '/timelines/home' },
|
||||
notifications: { id: 'tabs_bar.notifications', defaultMessage: '~/.notifications' },
|
||||
public_timeline: { id: 'navigation_bar.public_timeline', defaultMessage: '/timelines/federated' },
|
||||
home_timeline: { id: 'tabs_bar.home', defaultMessage: 'Home' },
|
||||
notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' },
|
||||
public_timeline: { id: 'navigation_bar.public_timeline', defaultMessage: 'Federated timeline' },
|
||||
settings_subheading: { id: 'column_subheading.settings', defaultMessage: 'Settings' },
|
||||
community_timeline: { id: 'navigation_bar.community_timeline', defaultMessage: '/timelines/local' },
|
||||
direct: { id: 'navigation_bar.direct', defaultMessage: '~/.dms' },
|
||||
bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: '~/.bookmarks' },
|
||||
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'edit ~/.config' },
|
||||
follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: '~/.follow-requests' },
|
||||
favourites: { id: 'navigation_bar.favourites', defaultMessage: '~/.florps' },
|
||||
blocks: { id: 'navigation_bar.blocks', defaultMessage: '~/.blocked' },
|
||||
domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: '~/.muted/domains' },
|
||||
mutes: { id: 'navigation_bar.mutes', defaultMessage: '~/.muted' },
|
||||
pins: { id: 'navigation_bar.pins', defaultMessage: '~/.pinned' },
|
||||
lists: { id: 'navigation_bar.lists', defaultMessage: '~/.lists' },
|
||||
community_timeline: { id: 'navigation_bar.community_timeline', defaultMessage: 'Local timeline' },
|
||||
direct: { id: 'navigation_bar.direct', defaultMessage: 'Direct messages' },
|
||||
bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },
|
||||
preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
|
||||
follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },
|
||||
favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favourites' },
|
||||
blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
|
||||
domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: 'Hidden domains' },
|
||||
mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' },
|
||||
pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned toots' },
|
||||
lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },
|
||||
discover: { id: 'navigation_bar.discover', defaultMessage: 'Discover' },
|
||||
personal: { id: 'navigation_bar.personal', defaultMessage: 'Personal' },
|
||||
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='notification__message'>
|
||||
<div className='notification__favourite-icon-wrapper'>
|
||||
<Icon id='floppy-o' className='star-icon' fixedWidth />
|
||||
<Icon id='star' className='star-icon' fixedWidth />
|
||||
</div>
|
||||
|
||||
<span title={notification.get('created_at')}>
|
||||
|
|
|
@ -1,71 +0,0 @@
|
|||
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__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='star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='floppy-o' onClick={this.handleFavouriteClick} /></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>
|
||||
{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>
|
||||
|
||||
|
|
|
@ -220,7 +220,7 @@ class DetailedStatus extends ImmutablePureComponent {
|
|||
if (this.context.router) {
|
||||
favouriteLink = (
|
||||
<Link to={`/statuses/${status.get('id')}/favourites`} className='detailed-status__link'>
|
||||
<Icon id='floppy-o' />
|
||||
<Icon id='star' />
|
||||
<span className='detailed-status__favorites'>
|
||||
<AnimatedNumber value={status.get('favourites_count')} />
|
||||
</span>
|
||||
|
@ -229,7 +229,7 @@ class DetailedStatus extends ImmutablePureComponent {
|
|||
} else {
|
||||
favouriteLink = (
|
||||
<a href={`/interact/${status.get('id')}?type=favourite`} className='detailed-status__link' onClick={this.handleModalLink}>
|
||||
<Icon id='floppy-o' />
|
||||
<Icon id='star' />
|
||||
<span className='detailed-status__favorites'>
|
||||
<AnimatedNumber value={status.get('favourites_count')} />
|
||||
</span>
|
||||
|
|
|
@ -23,7 +23,15 @@ class DocumentTitle extends PureComponent {
|
|||
}
|
||||
|
||||
_sideEffects () {
|
||||
document.title = title;
|
||||
const { unread } = this.props;
|
||||
|
||||
if (unread > 99) {
|
||||
document.title = `(*) ${title}`;
|
||||
} else if (unread > 0) {
|
||||
document.title = `(${unread}) ${title}`;
|
||||
} else {
|
||||
document.title = title;
|
||||
}
|
||||
}
|
||||
|
||||
render () {
|
||||
|
|
|
@ -112,7 +112,7 @@
|
|||
"getting_started.appsshort": "Apps",
|
||||
"getting_started.faq": "FAQ",
|
||||
"getting_started.heading": "Getting started",
|
||||
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on cybre.tech at {github}.",
|
||||
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
|
||||
"getting_started.userguide": "User Guide",
|
||||
"home.column_settings.advanced": "Advanced",
|
||||
"home.column_settings.basic": "Basic",
|
||||
|
|
|
@ -183,7 +183,7 @@
|
|||
"getting_started.documentation": "Documentation",
|
||||
"getting_started.heading": "Getting started",
|
||||
"getting_started.invite": "Invite people",
|
||||
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on cybre.tech at {github}.",
|
||||
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.",
|
||||
"getting_started.security": "Account settings",
|
||||
"getting_started.terms": "Terms of service",
|
||||
"hashtag.column_header.tag_mode.all": "and {additional}",
|
||||
|
|
|
@ -9,5 +9,3 @@ loadPolyfills().then(() => {
|
|||
}).catch(e => {
|
||||
console.error(e);
|
||||
});
|
||||
|
||||
require('what-input');
|
||||
|
|
|
@ -20,12 +20,6 @@ window.addEventListener('message', e => {
|
|||
id: data.id,
|
||||
height: document.getElementsByTagName('html')[0].scrollHeight,
|
||||
}, '*');
|
||||
|
||||
if (document.fonts && document.fonts.ready) {
|
||||
document.fonts.ready.then(sizeBioText);
|
||||
} else {
|
||||
sizeBioText();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -167,12 +161,6 @@ function main() {
|
|||
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();
|
||||
});
|
||||
|
||||
if (document.fonts && document.fonts.ready) {
|
||||
document.fonts.ready.then(sizeBioText);
|
||||
} else {
|
||||
sizeBioText();
|
||||
}
|
||||
});
|
||||
|
||||
delegate(document, '.webapp-btn', 'click', ({ target, button }) => {
|
||||
|
@ -303,22 +291,6 @@ 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()
|
||||
|
|
|
@ -1,91 +0,0 @@
|
|||
@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';
|
|
@ -1,959 +0,0 @@
|
|||
$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;
|
||||
}
|
||||
}
|
|
@ -1,278 +0,0 @@
|
|||
$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%);
|
||||
}
|
|
@ -1,48 +0,0 @@
|
|||
|
||||
.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 {
|
||||
&.activate {
|
||||
& > .fa-floppy-o {
|
||||
& > .fa-star {
|
||||
animation: spring-rotate-in 1s linear;
|
||||
}
|
||||
}
|
||||
|
||||
&.deactivate {
|
||||
& > .fa-floppy-o {
|
||||
& > .fa-star {
|
||||
animation: spring-rotate-out 1s linear;
|
||||
}
|
||||
}
|
||||
|
@ -3195,6 +3195,7 @@ a.status-card.compact:hover {
|
|||
}
|
||||
|
||||
.status-card__image-image {
|
||||
border-radius: 4px 0 0 4px;
|
||||
display: block;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
|
|
|
@ -263,6 +263,8 @@
|
|||
}
|
||||
|
||||
.container {
|
||||
max-width: 960px;
|
||||
|
||||
@media screen and (max-width: $no-gap-breakpoint) {
|
||||
padding: 0;
|
||||
}
|
||||
|
@ -296,12 +298,6 @@
|
|||
min-height: 1px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1rem;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.nav-left {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
|
|
|
@ -98,7 +98,7 @@ class ActivityPub::Activity
|
|||
crawl_links(status)
|
||||
|
||||
notify_about_reblog(status) if reblog_of_local_account?(status) && !reblog_by_following_group_account?(status)
|
||||
notify_about_mentions(status) unless spammy_mentions?(status)
|
||||
notify_about_mentions(status)
|
||||
|
||||
# Only continue if the status is supposed to have arrived in real-time.
|
||||
# Note that if @options[:override_timestamps] isn't set, the status
|
||||
|
@ -117,11 +117,6 @@ class ActivityPub::Activity
|
|||
status.reblog? && status.account.group? && status.reblog.account.following?(status.account)
|
||||
end
|
||||
|
||||
def spammy_mentions?(status)
|
||||
status.has_non_mention_links? &&
|
||||
@account.followers.local.count == 0
|
||||
end
|
||||
|
||||
def notify_about_reblog(status)
|
||||
NotifyService.new.call(status.reblog.account, :reblog, status)
|
||||
end
|
||||
|
@ -149,7 +144,7 @@ class ActivityPub::Activity
|
|||
end
|
||||
|
||||
def delete_later!(uri)
|
||||
redis.setex("delete_upon_arrival:#{@account.id}:#{uri}", 6.hours.seconds, true)
|
||||
redis.setex("delete_upon_arrival:#{@account.id}:#{uri}", 6.hours.seconds, uri)
|
||||
end
|
||||
|
||||
def status_from_object
|
||||
|
@ -215,22 +210,12 @@ class ActivityPub::Activity
|
|||
end
|
||||
end
|
||||
|
||||
def lock_or_return(key, expire_after = 2.hours.seconds)
|
||||
def lock_or_return(key, expire_after = 7.days.seconds)
|
||||
yield if redis.set(key, true, nx: true, ex: expire_after)
|
||||
ensure
|
||||
redis.del(key)
|
||||
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?
|
||||
!@options[:delivery]
|
||||
end
|
||||
|
|
|
@ -4,25 +4,29 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity
|
|||
def perform
|
||||
return reject_payload! if delete_arrived_first?(@json['id']) || !related_to_local_activity?
|
||||
|
||||
lock_or_fail("announce:#{@object['id']}") do
|
||||
original_status = status_from_object
|
||||
RedisLock.acquire(lock_options) do |lock|
|
||||
if lock.acquired?
|
||||
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!(
|
||||
account: @account,
|
||||
reblog: original_status,
|
||||
uri: @json['id'],
|
||||
created_at: @json['published'],
|
||||
override_timestamps: @options[:override_timestamps],
|
||||
visibility: visibility_from_audience
|
||||
)
|
||||
@status = Status.create!(
|
||||
account: @account,
|
||||
reblog: original_status,
|
||||
uri: @json['id'],
|
||||
created_at: @json['published'],
|
||||
override_timestamps: @options[:override_timestamps],
|
||||
visibility: visibility_from_audience
|
||||
)
|
||||
|
||||
distribute(@status)
|
||||
distribute(@status)
|
||||
else
|
||||
raise Mastodon::RaceConditionError
|
||||
end
|
||||
end
|
||||
|
||||
@status
|
||||
|
@ -65,4 +69,8 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity
|
|||
def reblog_of_local_status?
|
||||
status_from_uri(object_uri)&.account&.local?
|
||||
end
|
||||
|
||||
def lock_options
|
||||
{ redis: Redis.current, key: "announce:#{@object['id']}" }
|
||||
end
|
||||
end
|
||||
|
|
|
@ -45,15 +45,19 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
def create_status
|
||||
return reject_payload! if unsupported_object_type? || invalid_origin?(object_uri) || tombstone_exists? || !related_to_local_activity?
|
||||
|
||||
lock_or_fail("create:#{object_uri}") do
|
||||
return if delete_arrived_first?(object_uri) || poll_vote? # rubocop:disable Lint/NonLocalExitFromIterator
|
||||
RedisLock.acquire(lock_options) do |lock|
|
||||
if lock.acquired?
|
||||
return if delete_arrived_first?(object_uri) || poll_vote? # rubocop:disable Lint/NonLocalExitFromIterator
|
||||
|
||||
@status = find_existing_status
|
||||
@status = find_existing_status
|
||||
|
||||
if @status.nil?
|
||||
process_status
|
||||
elsif @options[:delivered_to_account_id].present?
|
||||
postprocess_audience_and_deliver
|
||||
if @status.nil?
|
||||
process_status
|
||||
elsif @options[:delivered_to_account_id].present?
|
||||
postprocess_audience_and_deliver
|
||||
end
|
||||
else
|
||||
raise Mastodon::RaceConditionError
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -249,8 +253,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
rescue Mastodon::UnexpectedResponseError, HTTP::TimeoutError, HTTP::ConnectionError, OpenSSL::SSL::SSLError
|
||||
RedownloadMediaWorker.perform_in(rand(30..600).seconds, media_attachment.id)
|
||||
rescue Seahorse::Client::NetworkingError
|
||||
Rails.logger.info "Ran into seahorse networking error on MEDIA:#{media_attachment.id} (url:#{media_attachment.remote_url})"
|
||||
raise
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -311,9 +314,13 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
poll = replied_to_status.preloadable_poll
|
||||
already_voted = true
|
||||
|
||||
lock_or_fail("vote:#{replied_to_status.poll_id}:#{@account.id}") do
|
||||
already_voted = poll.votes.where(account: @account).exists?
|
||||
poll.votes.create!(account: @account, choice: poll.options.index(@object['name']), uri: object_uri)
|
||||
RedisLock.acquire(poll_lock_options) do |lock|
|
||||
if lock.acquired?
|
||||
already_voted = poll.votes.where(account: @account).exists?
|
||||
poll.votes.create!(account: @account, choice: poll.options.index(@object['name']), uri: object_uri)
|
||||
else
|
||||
raise Mastodon::RaceConditionError
|
||||
end
|
||||
end
|
||||
|
||||
increment_voters_count! unless already_voted
|
||||
|
@ -506,4 +513,12 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
poll.reload
|
||||
retry
|
||||
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
|
||||
|
|
|
@ -20,35 +20,33 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
|
|||
def delete_note
|
||||
return if object_uri.nil?
|
||||
|
||||
lock_or_return("delete_status_in_progress:#{object_uri}", 5.minutes.seconds) do
|
||||
unless invalid_origin?(object_uri)
|
||||
# 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!
|
||||
unless invalid_origin?(object_uri)
|
||||
RedisLock.acquire(lock_options) { |_lock| 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?
|
||||
|
||||
if @status.distributable?
|
||||
forward_for_reply
|
||||
forward_for_reblogs
|
||||
end
|
||||
|
||||
delete_now!
|
||||
end
|
||||
|
||||
def rebloggers_ids
|
||||
return @rebloggers_ids if defined?(@rebloggers_ids)
|
||||
@rebloggers_ids = @status.reblogs.includes(:account).references(:account).merge(Account.local).pluck(:account_id)
|
||||
end
|
||||
def forward_for_reblogs
|
||||
return if @json['signature'].blank?
|
||||
|
||||
def inboxes_for_reblogs
|
||||
Account.where(id: ::Follow.where(target_account_id: rebloggers_ids).select(:account_id)).inboxes
|
||||
rebloggers_ids = @status.reblogs.includes(:account).references(:account).merge(Account.local).pluck(:account_id)
|
||||
inboxes = Account.where(id: ::Follow.where(target_account_id: rebloggers_ids).select(:account_id)).inboxes - [@account.preferred_inbox_url]
|
||||
|
||||
ActivityPub::LowPriorityDeliveryWorker.push_bulk(inboxes) do |inbox_url|
|
||||
[payload, rebloggers_ids.first, inbox_url]
|
||||
end
|
||||
end
|
||||
|
||||
def replied_to_status
|
||||
|
@ -60,19 +58,13 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
|
|||
!replied_to_status.nil? && replied_to_status.account.local?
|
||||
end
|
||||
|
||||
def inboxes_for_reply
|
||||
replied_to_status.account.followers.inboxes
|
||||
end
|
||||
def forward_for_reply
|
||||
return unless @json['signature'].present? && reply_to_local?
|
||||
|
||||
def forward!
|
||||
inboxes = inboxes_for_reblogs
|
||||
inboxes += inboxes_for_reply if reply_to_local?
|
||||
inboxes -= [@account.preferred_inbox_url]
|
||||
inboxes = replied_to_status.account.followers.inboxes - [@account.preferred_inbox_url]
|
||||
|
||||
sender_id = reply_to_local? ? replied_to_status.account_id : rebloggers_ids.first
|
||||
|
||||
ActivityPub::LowPriorityDeliveryWorker.push_bulk(inboxes.uniq) do |inbox_url|
|
||||
[payload, sender_id, inbox_url]
|
||||
ActivityPub::LowPriorityDeliveryWorker.push_bulk(inboxes) do |inbox_url|
|
||||
[payload, replied_to_status.account_id, inbox_url]
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -83,4 +75,8 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
|
|||
def payload
|
||||
@payload ||= Oj.dump(@json)
|
||||
end
|
||||
|
||||
def lock_options
|
||||
{ redis: Redis.current, key: "create:#{object_uri}" }
|
||||
end
|
||||
end
|
||||
|
|
|
@ -267,9 +267,8 @@ class Formatter
|
|||
|
||||
def link_to_mention(entity, linkable_accounts)
|
||||
acct = entity[:screen_name]
|
||||
username, domain = acct.split('@')
|
||||
|
||||
return link_to_account(acct) unless linkable_accounts and domain != "twitter.com"
|
||||
return link_to_account(acct) unless linkable_accounts
|
||||
|
||||
account = linkable_accounts.find { |item| TagManager.instance.same_acct?(item.acct, acct) }
|
||||
account ? mention_html(account) : "@#{encode(acct)}"
|
||||
|
@ -278,10 +277,6 @@ class Formatter
|
|||
def link_to_account(acct)
|
||||
username, domain = acct.split('@')
|
||||
|
||||
if domain == "twitter.com"
|
||||
return mention_twitter_html(username)
|
||||
end
|
||||
|
||||
domain = nil if TagManager.instance.local_domain?(domain)
|
||||
account = EntityCache.instance.mention(username, domain)
|
||||
|
||||
|
@ -309,8 +304,4 @@ class Formatter
|
|||
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>"
|
||||
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
|
||||
|
|
|
@ -88,8 +88,7 @@ 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_with UnreservedUsernameValidator, if: -> { local? && will_save_change_to_username? }
|
||||
validates :display_name, length: { maximum: 30 }, if: -> { local? && will_save_change_to_display_name? }
|
||||
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 :note, note_length: { maximum: 500 }, if: -> { local? && will_save_change_to_note? }
|
||||
validates :fields, length: { maximum: 4 }, if: -> { local? && will_save_change_to_fields? }
|
||||
|
||||
scope :remote, -> { where.not(domain: nil) }
|
||||
|
@ -347,6 +346,7 @@ class Account < ApplicationRecord
|
|||
rescue ActiveRecord::RecordInvalid
|
||||
self.avatar = nil
|
||||
self.header = nil
|
||||
|
||||
save!
|
||||
end
|
||||
|
||||
|
@ -382,10 +382,6 @@ class Account < ApplicationRecord
|
|||
return 'local' if local?
|
||||
|
||||
@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
|
||||
|
||||
class Field < ActiveModelSerializers::Model
|
||||
|
|
|
@ -351,14 +351,6 @@ class Status < ApplicationRecord
|
|||
super || build_status_stat
|
||||
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
|
||||
|
||||
def update_status_stat!(attrs)
|
||||
|
|
|
@ -8,7 +8,6 @@ class InstancePresenter
|
|||
:site_description,
|
||||
:site_extended_description,
|
||||
:site_terms,
|
||||
:open_registrations,
|
||||
:closed_registrations_message,
|
||||
to: Setting
|
||||
)
|
||||
|
|
|
@ -5,7 +5,7 @@ class REST::InstanceSerializer < ActiveModel::Serializer
|
|||
|
||||
attributes :uri, :title, :short_description, :description, :email,
|
||||
:version, :urls, :stats, :thumbnail,
|
||||
:languages, :registrations, :approval_required, :invites_enabled, :max_toot_chars
|
||||
:languages, :registrations, :approval_required, :invites_enabled
|
||||
|
||||
has_one :contact_account, serializer: REST::AccountSerializer
|
||||
|
||||
|
@ -39,10 +39,6 @@ class REST::InstanceSerializer < ActiveModel::Serializer
|
|||
instance_presenter.thumbnail ? full_asset_url(instance_presenter.thumbnail.file.url) : full_pack_url('media/images/preview.jpg')
|
||||
end
|
||||
|
||||
def max_toot_chars
|
||||
StatusLengthValidator::MAX_CHARS
|
||||
end
|
||||
|
||||
def stats
|
||||
{
|
||||
user_count: instance_presenter.user_count,
|
||||
|
|
|
@ -16,8 +16,6 @@ class RemoveStatusService < BaseService
|
|||
@account = status.account
|
||||
@options = options
|
||||
|
||||
@status.discard
|
||||
|
||||
RedisLock.acquire(lock_options) do |lock|
|
||||
if lock.acquired?
|
||||
remove_from_self if @account.local?
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class StatusLengthValidator < ActiveModel::Validator
|
||||
MAX_CHARS = 1024
|
||||
MAX_CHARS = 500
|
||||
|
||||
def validate(status)
|
||||
return unless status.local? && !status.reblog?
|
||||
|
|
|
@ -8,7 +8,8 @@
|
|||
.landing
|
||||
.landing__brand
|
||||
= link_to root_url, class: 'brand' do
|
||||
= image_pack_tag 'logo-cybre.png', width: 100, alt: 'Cybrespace'
|
||||
= svg_logo_full
|
||||
%span.brand__tagline=t 'about.tagline'
|
||||
|
||||
.landing__grid
|
||||
.landing__grid__column.landing__grid__column-registration
|
||||
|
|
|
@ -19,11 +19,6 @@
|
|||
|
||||
= 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
|
||||
.column-0
|
||||
.h-feed
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
.sidebar-wrapper__inner
|
||||
.sidebar
|
||||
= link_to root_path do
|
||||
= image_pack_tag 'logo-cybre.png', class: 'logo', alt: 'Cybrespace'
|
||||
= image_pack_tag 'logo.svg', class: 'logo', alt: 'Mastodon'
|
||||
|
||||
.sidebar__toggle
|
||||
.sidebar__toggle__logo
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
.logo-container
|
||||
%h1
|
||||
= link_to root_path do
|
||||
= image_pack_tag 'logo-cybre.png', alt: 'Cybrespace'
|
||||
= svg_logo_full
|
||||
|
||||
.form-container
|
||||
= render 'flashes'
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
%li= link_to t('about.api'), 'https://docs.joinmastodon.org/client/intro/'
|
||||
.column-2
|
||||
%h4= link_to t('about.what_is_mastodon'), 'https://joinmastodon.org/'
|
||||
= link_to (image_pack_tag 'logo-cybre.png', width: 50), root_url, class: 'brand', alt: 'Cybrespace'
|
||||
= link_to svg_logo, root_url, class: 'brand'
|
||||
.column-3
|
||||
%h4= site_hostname
|
||||
%ul
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
.fields-row
|
||||
.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 :note, wrapper: :with_label, input_html: { maxlength: 1024 }, hint: false
|
||||
= f.input :note, wrapper: :with_label, input_html: { maxlength: 500 }, hint: false
|
||||
|
||||
.fields-row
|
||||
.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
|
||||
= fa_icon('floppy-o')
|
||||
= fa_icon('star')
|
||||
%span.detailed-status__favorites>= number_to_human status.favourites_count, strip_insignificant_zeros: true
|
||||
= " "
|
||||
|
||||
|
|
|
@ -60,6 +60,7 @@
|
|||
= fa_icon 'reply fw'
|
||||
- else
|
||||
= 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
|
||||
- if status.distributable?
|
||||
= fa_icon 'retweet fw'
|
||||
|
@ -68,4 +69,4 @@
|
|||
- else
|
||||
= fa_icon 'envelope fw'
|
||||
= link_to remote_interaction_path(status, type: :favourite), class: 'status__action-bar-button icon-button modal-button' do
|
||||
= fa_icon 'floppy-o fw'
|
||||
= fa_icon 'star fw'
|
||||
|
|
|
@ -42,10 +42,7 @@ en-CY:
|
|||
nothing_here: There is nothing here!
|
||||
people_followed_by: People whom %{name} follows
|
||||
people_who_follow: People who follow %{name}
|
||||
posts:
|
||||
one: Ping
|
||||
other: Pings
|
||||
posts_tab_heading: Pings
|
||||
posts: Pings
|
||||
posts_with_replies: Pings with replies
|
||||
remote_follow: Remote follow
|
||||
reserved_username: The username is reserved
|
||||
|
|
|
@ -1331,12 +1331,9 @@ en:
|
|||
<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"
|
||||
themes:
|
||||
default: Cybrespace
|
||||
contrast: Mastodon (High contrast)
|
||||
mastodon: Mastodon (Dark)
|
||||
mastodon-light: Mastodon (light)
|
||||
light: Cybre Lite
|
||||
win95: Windows 95
|
||||
default: Mastodon (Dark)
|
||||
mastodon-light: Mastodon (Light)
|
||||
time:
|
||||
formats:
|
||||
default: "%b %d, %Y, %H:%M"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# important settings can be changed from the admin interface.
|
||||
|
||||
defaults: &defaults
|
||||
site_title: 'Cybrespace'
|
||||
site_title: Mastodon
|
||||
site_short_description: ''
|
||||
site_description: ''
|
||||
site_extended_description: ''
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
default: styles/cybre.scss
|
||||
mastodon: styles/application.scss
|
||||
default: styles/application.scss
|
||||
contrast: styles/contrast.scss
|
||||
mastodon-light: styles/mastodon-light.scss
|
||||
light: styles/cybre-light.scss
|
||||
win95: styles/win95.scss
|
||||
|
|
|
@ -31,7 +31,6 @@ default: &default
|
|||
- .ttf
|
||||
- .woff
|
||||
- .woff2
|
||||
- .gif
|
||||
|
||||
extensions:
|
||||
- .mjs
|
||||
|
|
|
@ -24,7 +24,7 @@ setup_redis_env_url
|
|||
setup_redis_env_url(:cache, false)
|
||||
|
||||
namespace = ENV.fetch('REDIS_NAMESPACE', nil)
|
||||
cache_namespace = [namespace, 'cache', `git rev-parse --short HEAD`.strip].compact.join('_')
|
||||
cache_namespace = namespace ? namespace + '_cache' : 'cache'
|
||||
|
||||
REDIS_CACHE_PARAMS = {
|
||||
expires_in: 10.minutes,
|
||||
|
|
|
@ -21,7 +21,7 @@ module Mastodon
|
|||
end
|
||||
|
||||
def suffix
|
||||
'-cybre'
|
||||
''
|
||||
end
|
||||
|
||||
def to_a
|
||||
|
|
|
@ -169,7 +169,6 @@
|
|||
"webpack-cli": "^3.3.12",
|
||||
"webpack-merge": "^5.4.0",
|
||||
"wicg-inert": "^3.1.0"
|
||||
"what-input": "^4.3.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@testing-library/jest-dom": "^5.11.6",
|
||||
|
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 232 KiB |
|
@ -3,7 +3,7 @@
|
|||
<msapplication>
|
||||
<tile>
|
||||
<square150x150logo src="/mstile-150x150.png"/>
|
||||
<TileColor>#1ea21e</TileColor>
|
||||
<TileColor>#282c37</TileColor>
|
||||
</tile>
|
||||
</msapplication>
|
||||
</browserconfig>
|
||||
|
|
Before Width: | Height: | Size: 310 KiB After Width: | Height: | Size: 997 B |
Before Width: | Height: | Size: 295 KiB After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 398 KiB |
Before Width: | Height: | Size: 818 KiB |
Before Width: | Height: | Size: 184 KiB |