From 4d2af0d664b155f5ca2e9259920ed70eec63b8b0 Mon Sep 17 00:00:00 2001 From: Kibigo Date: Mon, 27 Feb 2017 04:32:41 -0800 Subject: [PATCH 01/44] Character counter fix --- .../features/compose/components/character_counter.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/components/features/compose/components/character_counter.jsx b/app/assets/javascripts/components/features/compose/components/character_counter.jsx index f0c1b7c8..e6b67535 100644 --- a/app/assets/javascripts/components/features/compose/components/character_counter.jsx +++ b/app/assets/javascripts/components/features/compose/components/character_counter.jsx @@ -10,7 +10,7 @@ const CharacterCounter = React.createClass({ mixins: [PureRenderMixin], render () { - const diff = this.props.max - this.props.text.length; + const diff = this.props.max - this.props.text.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, "_").length; return ( From 9214b5d02ee76dfc202af6c986a6b67e4cecb989 Mon Sep 17 00:00:00 2001 From: Eugen Date: Mon, 27 Feb 2017 22:51:24 +0100 Subject: [PATCH 02/44] Add new illustration --- app/assets/images/mastodon-not-found.png | Bin 0 -> 19560 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/assets/images/mastodon-not-found.png diff --git a/app/assets/images/mastodon-not-found.png b/app/assets/images/mastodon-not-found.png new file mode 100644 index 0000000000000000000000000000000000000000..76108d41f69272a51209faa631f6db3bc000a797 GIT binary patch literal 19560 zcmd>G1y@^Lu*IF?PN6u(-K9{V#Y-VT(BjY_#odZqvEtT3u@KxHN^uG9lHwku5S*9q zy`S+`7VDCmb#G?QJ+o(@nSB!TLF*kM9xWaU3JRg>d!>)a<0T3TDmxAq^1o)c5-Q{Y z%ToQF63X*`uOFSIsmL?9U)}@VQBd&7{`*5k$4Ft(ikP?-h%~95U^GqOGYB7@&OZoqrmuKhv!WFd_;Ma{p z=Z7kS@7Bplg2QU(c_sIrQi*??^Nk)d02-OUHh$}mh;N6x(aY^0Y%^Hd245O6`B%pe z9H+((6J!w^3)=tIk2+c-ir^*2ZZ7m=oEv9DE9-8PtzJ=Z@GV8k^7KO{_V}R9g6`Dh!Dpdd7VE|`|myholvHm<>#}hnxpH$8@ zKrQuhuoJ-wSts=Ma#Hn7=Xd|N?ovFn6osI$gFf+P@C99QjS>KgeX3DbdKNYTiI(3w zCS=ZF_tRP&!4NPw*pPguofbqe0o1={TlHS83I0Lt9_TFv%{aK$Cl-trv|hRp4Q9vS zRAK0jOGZAlqy8|W;4e(Br|;q%&c#Q-Mj<8pEKuG-{g>VwY#wgTw6JU~aq7f{ zp=mkg+TPuP`h|zAIz8~`r#FijmhQ^r?%P+JvWYTYtYuG?!yb3KpxfHiuHMK^Z<&z&}9eQL>Firs3B)S%Afsw4&rh8AZ0r#PZW;amu0j><}Lhqq{ z+g=5Vh_)^b6_@*O`k!V&2W~16_{N z^NASb?X78UE_)KGt?rna*Y8mt_Iffxf*bvg|8%2ItbzejLC@`%tg3Qg@H3?9Q6Yp! zQ^JjP>*n*1g*jucCm-IgDoU*pTIF+A9Od~%dkUk&n={F#4Y`l)ryDC-0!AHr{8mOI%FGBd#kyr6OO};AQQhOutO8lGsMoLnS zc9KDxxqf1vAxaSSjjPqReei2&#=Vx5uWCLWge2etO=6{^Gn+b{@!Y2M$Cs!Km_fEk ztF&|FJTDwO+6yx`cu2fMw|b;Q9xEG-jFAIPUh{$n1(?FhezffY`N_pylKR?4M-AsE znc@xc*{ib{{aN$2<_D_zc+{V(O z_*9i99l2h7=J{QvRgdOq*Oka2Awq&^D;d0jb60$slo2b4{DukkBbqe?{8=-#&bL*T zu>z5Q;Gx#Mz&0wJB7(GA)9ex%S>Wv-@LON~UvaZ2vHD>;=t4m#J-@|R) zm1l40uVrEq>d3+OgN8SImNTt3orT@BR%-FJEq_vMU(c@xloa9MBotHaA0$AB7*U>- zQWpPqR;*cHz5nDO*t-mxv2x%#X2emCi!AP^1=U%fe5^GBJPn3UAwxo*Y%gw2&Q)rU zcbbs^yC)Gn*i7jK^Dle4a*B^62QfoTR%5uJlP+QzPt!1*2}ww!p`Gds`4LYqw$dMP zB-2?C?Dpx?&BN}%vdqxGZ{A)01@5Q8gzMfA(bd3Tqf_nN)7I6$z+g+EeA3^}E~YM| zlb^ecf!{^g3UI}x-0o5K_-5lvi4_gepKf;ti~{ExfoM7xAZ^pRW5<)4)>>7a??1lQMs}puw{$ET92m>ahV9n z_q{%TV>q`yXdFCpGa~)!f(a2PznEh-03e^#%&^aCy18aHo&(qWOT_h*QhD{Y;VGJ2 z!{n&cJ+`QN+;#fejfg0{Af(B6Uw7}HI8UE3Rj`+743Dz>bVc0@;V~9v4!RL_x~YC@1y7kP$ zp0TbzT05ZDhpUzch9V|T;=yD+iT{P~DiUYRqnph<>djrmjYC+#cXEOQF(K3rr3Plc zje91LM(P=yb;Gb)MH~jW?7RfTDF`b0?t?P=fWN$>=AH{G+1{$cq&)3cHJ#a9**)J| zN7(Ugw)#>2`7ehM9J4Y|_aMWDbIHhkNF&zKv8eOyuKp)0W1W8R#n|p$|Fg@2r)nsp zD(U^tu)aShj6PsXH9)$Ld9#kEg~-PVbI8&TqW8Vg8Xg3N$n}GP`YEvWV>iQDG<` zH>lkD#7$F&D{nQacmYpJGdxe{lhB+A0FKH4CyFc;6Q8#%HYC3USzRsSE-(^gghqwJ zQBTQO5aGlh0P&s7vqzY|RZYt%Oc?Qk5_`Md3mE+!dVoB1C~86Q(^9n)gkIv|fK_#! zTai&O`^Uv+m4v#!Sh!+3IIK6T7n>t6AeyP5E^tr#AXVqM1BaBXN<$nCkRg>!; z-RgFouT@fpRSKpG(MDkRo!4sz?(B55|4XEzqI%ZJ-+30%Oof)j_zz2Zll-h0`3e>@ zFQd@@@Dm(9wOH5W+~TvOqZi48YIjwVE)^c4e!_6%sMOLxlBtCuSb`t$bWwbn2zRUR zh63+u` zMKIp|3iNgp2{al8%7PnBN$#+pV&J>Iki-%PziLlgh4^UK5?SnSKc=uvlUPA4LN!5N zBf*NY&r$59c}Qmj1p+V5`5g-aZ~qm$+d&`JSrUU_scX)A&!-+z&y!O3!r(h7MD%%{ z`V!K}ETk9*y(SGgXP!+20*j~Xcs1Gi#X?0p$$DPgR2<@&MQHJHriw7*9WPf&;VjnQM zWuFi|z4ic;vjI(`wtD)JP#n?H!WVn%1vx*T$9uMc8K?evSv%oHY|Xx2VY+WXr6lIW zmTn=GFR)DWxAPr_-oeawi6A1)yvwJjPd-28shu62ArW@@L5cbdyI*rGFx}-?+DL?pY>X+<0q9qjrfCWgh|Aj$cd{*y0N;zBXy!O zbzKL2Pl4ZL$eQns*kfSy@dM1MG4S#_yZ|S6D_)gmF3DfN{YI^3-KUG)OXxNffdCMic;TpU(XTa_vIp$qyccK#7jb9kIap+A%=tn|&yGY|4>Oc~ zo;|=(2_&Xwb++EOrHzUl;^Yx_GJ;iAeZ-5O*G@94VlBI>lDZoyF8T&&?HuVG#Hy>K z=}M^78h|OgG>37;@)n@zH+uVf+Zo>xr@-k%u}tL(;1M-BR&) zm=wq(Ht&9K!Y+F_^yXfqCy2(SgCVz5pUNZo??*G zzXhDm{1NBjjcF7sTmra%2@CNnq&hB6Pxwl(;CpA)8E111TX`N+zUq}QgDci&&L|yYSCrzhmV5x_z)QePo3Z( zv+yWl$!KPqV#iZMh^FDb--kSTlijK&ih#;^_HS)3w5Fn_MQ+nd8J;&=1G%HPVE5$u zJ*wi>LqgX$Z4iQ@S|bukS~PQsz{71_q;(JkkK`x|pxDczS1tb}FvQkDcSnqtE=%i3 zPGFxXvS4l1a3z-Xo8|h;#wY$zdHZ-(NIkXpR>wInzR&gLm;Stbfd9^#7Rx42PTY>| zI8OZn1lT9}&Z_v4`HZCJA9kOe%ih3xOTbUF?ts4s#XD){B*~aoV}0PyM@BRWybk%( zN3%art*U2%bm$Iv#?p~>#EO%l2!+U~(|txOm-^S(eb5tUjTp-yf8!mi z9&@VXK1;gZ4%)bmcYl7m7Ta0DAx=hw(w%&H&ZXtUP2yDN<4R7D(A~YwPG~3*TGUd*Xx7kq!Y(yN| zg&hj_*ywdDr%_aEwY73=*yPP9;r7;^Yzu`Q5#QDo3Kyl*(0HsK9mPu=8pZq8~QIVZcv7% zmW>ar^PPi=CHjFi`mfcvZHn~b7t#n`w z@OS(|&BBU%^CO-E*Yl(@x??8#p^oS;<|o!O)5e7{>Oo8B)-i?m%2J7^yE|QcG625x z^MHJXlI5sOPK?*%wdx<9Yaag@faZk1U3@$Tlfhiy$ZPRa0B>RvY7 zvaty1qj&l5ioNr~>Sc;%P9}l&UxD=~b9Ap^N4U$2?9-Z7KQ(bKhuJvp!~VuKZ@E>Q zN*E*42bJEHgW#^T^1cth2A;*F0R$u7fjyNP9f-G8E0Dz%%M%x^p1Q3IFzqIw$M&s( z#Q%z^o1D9SVQ;nU0T8H@{f&E3^+SeGrfLKewC`7)sD-a7{gMU0lUqR|xnx#2yyyD8 zZ9nT;Q>Ha(|HC!8I|?3*g(v{L3Q`^sOnh}8 z+4WKc_z5y|fZLwbQd%}DI_2>L-r?{>ekxwL`Zdhwy<)0rkjC~BE{XB*;tM;57CI3? zba3S3xFS?7-+af}E^_#nt;m3HHFoHK*tosY3b=6M-W^X6MP~g}{mBiSWqi4zG&G`p z4`~m7)9GKY_ur>@r7zGOD|Un38ywKAm@vpG2rU>jS9YC@_Y+2`z`b4QiQKEak%&U( z8O6z0JbW0FO^hqF(-?~E0DmwJE~ zQONn&h10>q%$TF$x#Vx{+M8l$;I^*Hyx0VA6FP6@;ufh)0qKmnXe%rrEf%SnB1lP9 zz)|=?;#Rug6b{<<Rn3c+PME_L`DfFx=8ooSzIZ)xr>A}nj3VOy^@ zc!n$h)Y=iw3`5H*v9?K}NyRn7b@2lXcH#&bvBkHwwd zr!Z)AGF)LFlPL9fO*NyyG=X8wL~_f3)B19)UL!5&xIJFb91K2G?~x3JSIJ6lTGt-A zp2oJzO3NEGCg&wz+eeZFkodgD2%I!`56Z@8N3i{%8I%i_{DP?1a z3J&=&AIkO-@1qq+A#?H4-=ASQfZ{|fXiZgeKW5*l8}yH=uwF1-`Das<7rb!kv*CoR zxFXKo=HzH(1nXo21cUK!%DBArM-iPNjOW5si3uLisu%jkD&M(f=Tpl$d5-Sc7 zWz*H2sr~sJOE!5C>@I}NIV;RPrr?f6MgqoaP@o*tbP)UTgHEK0(muaY%C?#SkER7^ zML55#%nf6a8bW`Uhy2O_^2Okzxw!vHGD=q*4|Aqydj!IYG`zp{R4*nRs+)~YM2%P2m@e&XyKE9oj`q*33lJ?-};`#-- z%GOuvqGRQb-G$`ZF)Ux!s}uNw<4bUh@@PrwnVI9}vxAX6iTWPI-5Uc{L!-0BwNtO0 zDm*S*|8R_O33M=5BDFqAUcBK43^5=$T2_HV!D!X`J9t=?%n|;r;KbRsn zVvH{DbL%>{IMw-?FSKCgKkk4|^V413;C_jPmKA?UeW(aU`DgCb^6T6*Z<{Pu1S53p zFM7Elx1+PaO3|Binsmx)lR;LJ*x&W7mtx#5bj(yE8u|{yCKyo`3_o=~ZMqlx63+tGR?i$R2IigMU{M37l3=ZY)Z6YpYVJ2x zV4|7hB)>a-BTl6KhsepFI*>_Z41&K_r%*ODvY!UfqVd&QXZ^r4UWr`xxBJsE2)xI) z0X*`ZIe{UwjcLvtNyTl0QpVh`^u?O=h_`R1G``Vm4cFQ78R~Flh|Ac}7@E|$d#_}c zIQzQ`f1u1n@h-Y+L}E+gJHZVa#nWkxm4}&uOtb8g@g)g$1P-uzSvsI`((Adk4O~s* zBaSaYF|(OX(oxUYiO{pbL{m-au*{f0@(j9O7iLJPoe=96SktQCu6ms`{C3iNYTLWu zm?-k7T93DBc0>Na<6@8aHYnn>!Cq;8IH3Km(RcBxO(5%6yh{F$pDqyDObNs=7@UvY zHH!TaFgUHamY-o~%oUNqYXLHDJ^J)Ja8P)Cd*s^WMMpkf~+!r+0ya3o@ zO+DD-IEz-%G)nm}fl`s$~bVkBkuFztx~zeRVuJ^5K6(lKtSF)K+!Gzg=O}ny$kU zITRWH)i~ZpodQ9d*t*+PS5A36(YX*_-~2&8Y^u(AXQN9w!d$+tnYp zj^%VinLG2siCmkqboSQM3_*rZB4b{`m8Bg_hJW}RFhne2`w}Z zE--k{z5fAxqX{SnXTdgL^_R}gD`qjjp^>Ll%2Rl2OqQhZ$4-%*0xIPC245UB+4AM7 z_#(du?qdXC)S25-ra9}KGIuOop+!^uJnR(f0&sssK{3sB>J>J9(| zVkIX=^nBDYI`|bTQ`Fe?`>upZlaTxVrGkZ1wX^Im6Gnl$R%8yGByzy&_emN}?=zclB%wt!eRcZ*z zQAyz`TAGX2okIuTF~D|^Ym|#|w<*uhcJNpJ*S%HDC)zV-P$dr! zpUB?qQOiPq!zZacOUTcegRwP7LN$Q+0cU+hhi?2>Mwh8oYuIMstA?uUx%nk(;pU0n zDA~YC7s`6LygG0k3lob`U|^B>AqXIcL0%cL-m2qq5Bu2;rA@{RCjxyaKMapBd!@PD z@2B#9CR~P>M$;|ULGyzw4AQ93Cyy^j9gdh=Hv$pdr;|}q3a8&|jw5`er0LY9S$~^V z1>ThQEQC;nb|LM= z_tVzSY1M=;Fk^>3oJD73`WjBZoXGb7vd3pWHo<9LYuPzru6=;P(}je%?jsA4f`=u!2HILWT)BUWIB@iDD0a*55u%~Bmv&Ic z4NvPU?}W^E0MACwWZM(XwcG;HPfm*YSbFV_CqAFyx}opDbuuJ+j7{^qjZt~EA8vAG z$SxX&Um`LHG8S?IJWj|A$gdPW(cPGSdP!Yz7zKi+xa;3lw#(+w=zsscn@**C_lEIi zwkz#zs`SZ207u;IN(h{cB*Xgx1To(_^c#?7(cqp1gR>2QIsj3XaII?hw;6Yl&O9F$ z3??QPxYe=(8J1^7yJ?b7+Nze8mVaha&H{>tD~`six661ZfVc|o@W(Kb`zk3Ur7v#k zvDUsjTwM}A@?H!4CrQ%Pef?9KH{0P=UPo3puZpVfyYxAY*cYj)njcKvVmjqjr#mE_ zSuuEwjYlFHZOuKZSK=2>5WE=+vJRiEWv0F%{Nio<$7e+PP>29&@;?tRv^Z)e>n|l# z0KR-KoSq4&-{Q`4xwNayrOZ{34~^&2o6gEHyLbU3ThBsfxp#p9^m6${oAXHMigT_E zhYP;CGl!dFyhCMuQ_jnswu34#sX zMeX5#H=HXkB`_Wb3TGoqgoH*<0BT%L;-pnP^6Ke6hwuq)PzowR^3?%vrAN+8K3^V@q*Ymepl=Ub`9?LlQ zW167Y#d#5yHf1l8*kIMf%Gyo3|$xPUG(9ZsQFo)x@-d^6sU-%2)F^x4lx33I_&(fh5m5S^ZL; z5$?}zs7@l@(DB{3pM>&7+EZQn)+Xw{|B(cP3$Mpx<88VB(80~1JeS80T@AAw4hTMD z(7}~obY>QQpl;$@C1P%C-$-qGyqh+y!?vz=)9q_lt3P4HiZ$#0QSZpv#|Xzl{4!iwG2ld71sMcPoBxfS?0DkMfF=n_@8cd877Mq8QRDf<5nV zteV+27uVNOQa5eRe@t*1sYs_)UH?GEzWaM+V<7gnOE{M4}A18ots^+pEhS7zo2`e?ISwoKBNC$18w-|5(Rve zJv?Fk1Y*gbGQ5s%^`-9Z{b?nlSfbon&3VY^ymrEm@+|zp9*0q38`PL#{x82efx}{J ziK9DUkZ`1%tbY|-&N5zbfR;4FL_En|Hg4(|ptYwne>=W|zSCe|xG_-}zC@cTt~9hR zE_s#(&`b&MFYfmZygBJGzzMD6tR1KmqBnC_sU9IUzqggU0c~GN2#t-Hypv`*1P>U- zCBsJRn)nMMcDjmImW*SUhY6#I{F=Ok{I5*{8PDuO_0lR&oMJ7P zJv7HZdUk7%VJRIu!bS39NUqkO3)b)Xul;tb%?vB*cIxL>+p|+x+Y^<4e_C=|=uMg8 z9BpcfOGJO}|4(rgcsDyd`et|~M4C$!$rPnUE^D5xtP)NV9qToo;n#XY6C_muGbN z=A>y9uABgELfMgRS?@8wIoz@H-B2nT;rQE=P%@5v#JvF)dD%yeQklztGx1H{%RN5~ zK$X$S;-V4@GKg&9i-~KmEmgx_|HmDqKoq6R5YTp*E2Fo-)mim(rnSu%^J4V_KxKez z{7`CDU3lU6pn24GNLq6&5EiAp9X3FF@K0)CJ1mD2SSJR!WLWDB81~& zOOarh!s>KUXAl@gEOYocCT5Os{Jd>+Bt@4bkf$Ly@a5mSKTy{1dvQ=faWNZ)g$%7= zmR8PREI{$s#?N*!FZQ0EYfbe+YCOxIFxf+N@FWTY+ z>qyi$n)0IEheDB!WYhoF-?6vv5(MEjRau3uo%6p3iYI76G8LFzTK?M)$NCFSonFRw zF-axP`PFMyX`R8vVLP6sc_IlkNyRioxjsoO$aE1#3SrX}rp%xOni#RV;&xSKY2kzG zJ{!?;Lp`LN3Qx>lSEPuj0%=~fKIg%$ePBJJX^t}o-)ErRKR{G`-<5S9WX|GxYTK%) z0!}n>G#4^_(H9oXB=t42j^oQlVbrC&zn{R zFBLG_8D|}sL+nJFY^5pibPf0_-B1eR4kDD@4=h|r+mp5Gq}0=coj%r~|=3o{Na z7#n`tc%pd0AT!kU$o(%P188zMbK(UwG_S_V03mMOgg?O z6!`CE`AOyF>&z8kJSEQKRfQ9uUNmZB2rl#e==M{ZKC(&XNX1Q^iUvb~Mk2XBc2RG! zUjq5Ae;e@vKg)dp+)=;~A;N%SA_)$n*~TX6oE=(kX>~%I2uJ4#9t>HWfL3|xE{{_D zJFPfdx>q*oUVapa)iEOtj#RNh+yT=@5iO5I<;DBxmRe+vllu4?Hz7ArgL8(c_XQ z=jlce5QG#k%A*Ga zuJ*BT5d~ook6WIJtLfaO0xB@SR!BxdJ3%ypOw{va1r^U0s+W{CSaa`r6`NNP(a~Dl zE37U5(oDu(MKrt`MIKj1@W^i&*-b~b3=`42QR6!i_pya0lf=0pH_N)@Y@WthqQ<`d zo&zuy1~r^eFoZfm<@*dN9Npn_Ef$t~sLT~>42vdj-fB(fOHS@J^97zs4NBj-Do?@D zu_*E8j%&Ypo_}MWYbS+}MVg#n;0F|+CV6VP+V*Fu*xMuHF;f_Jyx_Y(L%c4KMY6MO z%J_F=ia6AEd%EwvQdz$pOC>x0RXZvY9B+8hZfvsP&ZaQ~OJc=MJ^xj?GeL_lN0-l- zy}nnMcO+X;)7Ir(W89(n!STAy>&?D50n0a@DJWe4bdg7gCyO6Hbv{#7a5&lFk<@p6_Vr2Xs4S~3NQD(eVk zk!zHWgM=7dpB^OhWo{+tj_At3KJaJBvwCEwyyNfoIMVkzd1^Cz%tv@Am7b?;cnx47 z$OHf=14~W)5DR~G*e645K*^>&HMaXg?t{Ucr#v$Dnb@ht<+^_~ zXDi5Mc)#?V)P{p)RmkhJJZ6s>5t3F_5ieVX!)0OGgv@vj48ltqLt*XP&!}Efd9o2~ z)hnSJVr%Ns($dF{E{%N`eXE`8FGUOF!NHlM6Pcr6*O02 z`MZg!J{kn&c>$^1-5u}JS@}29Eg;xSBG|^KWxpEYULx_KGMv`)P2pG_^PONtV!(Ytgaqz7J+@j zybW8jZ(%b%3t+VlE*;Z%d7Qh|=*ZThVz58} z?)$emL|BX$BAR1_8Lf>uFI9?2`hU4n*cIm|_y^|U+rGT5;)5*2aR;_(YSeM!4HS{A z80ToHu&{3l+USgNL{BJn`XAZ?$&Zg6>sxClisPt|by6NG{#=*mZz)Y=nqV;2T;Lm| zM5ep7wN`)qcjFxLsUs!A`pDK5MGhV4zv?QyasFy!l1C-@_x+hD{1Lg;#Qc0cc*6gg z4t%Ey+Y2oyp)q?_h20|E*Rped+?+nU<*@>y!|Am9CGdepsU_($>NS*nmHq|AZZ5zB z>KmD}a2!T%Zc~zQg^h7d&x+dH`y`9<0v>)ZzZ&KHcWuw&M^IUSMCQ8*9@Js) z{7f(9cd~xL{p=?GhWRG~ly%N$g~=v52mmJq-0HVlu-WmhcN&_3fvzMs*ggGi*YbY1 z(|5HpP%06^0csX7(xU?psh8!4m@r{a(`T`>y?8cB|7qlnI zRUZOj1t=U2*A&5Tl77+1)ikRtH6HL?vVWH_<2@8nRjspjwn_cvaOZuJSigM11KnL= zs9ra6-3iP&Z?XZR(xc_W`KtqVY;zc0EH#nhT8+Cfi}|O_f7owV7zvQ?XIF5=kP|Z^ zqWEt%!bB|6r3!R#g8~GzY8`C920CYI=nbS!j()tXRN1z&G_1uEHc>S^T`^5_Rs@j8 z4}^|8ohbwWEt(G>ufVScn*D_bS#|!+E4$|b-4FK-IbWVF0xy5(%_Ju5lW?vydN@P#g-n! zk%^eDG9rk)MIB(X+eORb(Y_{bIwoE>FYdp#e4oiJF3kf5qX+GzeYL1$n+O?<7YxQu z?&dtxym)T*ZW2tf1-yLD^Dpo_TFc9iboylAw9mue6s!2h^cBXeQsH|geM@q|o4G_z zH9gYz8XED*_LiGeWSRu#7&_6h#Qm9N3S)SY5&6e;4Grxr{9C90#ykw>E?4~%8BZ_u z3=kgL-T-f?-a@YVbXL|W_%OTl^jUH*-`^~^!zc+(ntZRkEgdQft7N`dUOqI>hY25T z1X}nOao#);Ur`83a-dZ*fArbsCFkLzTn)^yI%j~YpYpamcTrNEE{)IWQz!!G2YtR= zwH4u2K@{&~&eD7v#@zXL(ZgT9aDQy7GMSeGZjzo6f2n4tAYaZq9$23~udws88hU2| z049GVg;DevP-die`z|V0SDp)<1t|ql`Jhiya%|?l?SSQ`VgXK2iK0^t_{=&G=7~~R zbat)|zS0=Ck%$0uq(;^-7DNS{Tvuo|_~Kgo>A;eKZ{g^494(GXke(n~XNjg~?g-P^ zpkhzq3G1dU=Jo~2!{+pbaF0PKwz4%4a1?`o$+~OGZ6+>p{CQnI*tw(pu_Y-`r^871 z?niV0@jtc+Nr$@tQ9^ugj<4~DC9)&260L^#ZSuo=#6>2gr7p3_R0aya)<(XnED5t& zyD+Kd9|HlXm`&dF{Eid^k>?IDXh^BXnD@6IeaP=k?HTPvxTySCIhrcZ>4D<6imm9R zv8e(ML${%5<_tuUm5?fmiPnW;>R?l)^{5(HCsdiLpNUMt{?DS))OnCC~Je>(izPV8}VM%=kMpwY|X@y-?cqa4&${px? z@Nj~g2*HX|AKmz{tqKS% z1Gm_f@(Xdg2Q0Um1m~xuh=`B!b6Xr4#g!H~ogceD;sm_B$s13&av4AJ6BXPr8H1m# z%SMk?XVPUXw$c;4ofGX9*jo*Ze(37S`4ht*%j}Jlh6~CR&5*N|4|x~*oa+HKGH`P$ z8$qfPy14cq!$P^MoTTs2*_3dY;%@G~?OmjaY0K~ZyX6l1$(4xCh}tCpWlM@sz1|%a zz_#(MdQN3loZ{N|So!BoTE00(DaF4F4=2!n^HzgU?g`>#?URSAa9Udi>%%ieL}LWlVPWZ zwVyLurc712BO39v$Q$G`>2k_dn5{P~{JlFM1%U)8Gc;`oa#tS15Qme1X$GAq+gX)YC?w|JGT z0*_)D(3F4na$vn`3m->QfJa)ai6*$MxdU%tOpqG#Wsm}APdwbnjG zSH2>>O;gE3oOv33k zsv<*5VnI+^F2o|!CZEP~%SKz&@UbS)RHqOigt-XJTAoS(-$il-Q9t^ttRU+At=3P zTrL^d$(%GLAIit}5g`w1H1>tllhOh%#lnM`Gbpo@#)Y8QQgTN{=5v>VF+Eh0F46;z zdHC=Gp3%dtp26Y9-;uyw;5+EQ3$dw_tnP}Kct5uyV#N-eW0b_T7~e_uU3aCFs2N3zZd$h^Sgdd;W_&TcUHN-AUNs}bs zgN`0P-@nlus~=m!@|tjve>6QhCP_x~A@+fe92%{p$H(|aBE~pyf?nEqLTjl`@wH1= zhJlXjylC?19qa#n>?LcVT$&(pgc?EV-spYm!D)nKprrl{SGt=(lXlr7- z#_Qdp0`L5tlN{fg7%6B?IN<`iygPj`M5Y3!ORbWu3Gb-}Lt!DRuOZ zm%h<1aX6I|Ri0iGozy^=Yt1E9qYZroJ4rz9`dyGd7ieck>@E|>QaeMR~@EFfud|IMLa*QE_wPF zLq|Fa74FOG7OA{nPgjU2BHlGXx%pJ|vM5nrO4EjgQFp-fb*Q#_g_`J4qR_LoFh)w8 zM|{p$adET~G%G4`2B>k={-JetvJ&PX%N6ahE#oVn64v?YN9PJFdUsH9F1Ma#Of_su z^j2A)iwQCRRGDu7+^x*g4FyU~UQS}K`6J57#K(c;aCALpoLaVMXv)RedABtSaz_9& z!b3_XE0r&(L9p#?M?YQCX5)hyHRa&g2tad@E`O=& zX;@4z{JYiDO7H=oI|2$%efVOe_SS(@XLHwzv1*?yt;#PCsQ5YeIEO?SRsh`{>cw?x zXR)|Zw0)dk8h1b@U#`7>@pJw6dLtd0{*bW*Me;ZSs{_5htQE~jm@+q z)1bC=c9_sc^%YDy!R}8Z@ks$l?eG=(@B_xyr`(#s`#;o(O|qxep%_hx%{ z8_;yN@E&#v2YBOBcMrrV9dLY;&Xv0baC5G9ixlDCWJxNZ&I-^%XTKVQXeOrmIpi8H z=wcqTP+Bhr;L!?bCURPxd4?H-qJqavZ>`&bfP(!L>o~#QeWM*kdM%6iXOG0asRz2D zm+Wl^ge}2o%VAGcAQo}dhmMD9ZH;G00LJ40PF#YmNH5|2m_=L`*xLHDC;H}s_haYD zH!rdRSNZia;?DYd1j^bL{?Hd&(Jqk|Oh6>n?H8J3XeKg3YH7-oTJ8Z*fLg}wWkY9< zPH$pb?KXE#X%Af*e$V&o!>TE$dpezPLrha6yn%XfAgtIhm#YJYC-Wqe$reTORv#)Y zvMNrPi8(svvToM(^$yEI^B8qPb6r5&tiw4l3>U`!xlNFmr9eNb2ecs$I@r&g{zLmN z^d$w|VYttvYclpPwX%eaI#(kQ!Hy!U5cOk)XJ_1}v-xXTGx{tgoP!JV!~-qzsq;zG z><=eqwyv7FR}u68A*40~{NQsPMe|s#Ohw0eb_;r@m&>O-O-3w7E=HU5Tle6wsz3AT zSyhUfyo(Q$w`@mLKWk@G@@{w#Ejl=_ay*khF3w0KigsZc>*!c~Bc{%}cJ6Drqo0+V zQ-!?qN@BGEq3VdVs;ir$k$^|RO>l}qE}4|VbBX6;Dl}{`E!AQyq>-x$T8uKP;m z4$Jb(5wKRRCHrW}d@Ae@=@lE0l)RW)DcVvTNtEPCK9#3$Zb?4I$Zib!@R06;CR?TB z9UxbfvIbmnx6g@I>4@yDUcM@}^cOXo2OnxPK46sf@_}$Tj_*e71V|Q-SPdF*?mOTDJg)n8AHB4cs%T)lhIA&W(Ih-0A2=*y) z9f1el3c`{NP8^2`-*aow=rG4`<9}@HXBa>^XrTk6twJ;LQ;pFLEfIIF;D{g>#^w95 zUTGDjVv4nif|`W$7hJzQA;boigu&W#;s-Oo9_5dV=A;PQED5yGRMrE#F8{_+BG&{? zpu~@-CQy3Zo$JFeCr#c5%}Xx`u?QDKu2K*`lyX>%E*@%`BlYKL>%(gEFk6MGJlVN6 z%9pONCO9oOIQ(TRe_o01E@PQ|4^Ek%|CfWU{)ejLn|l&e?RFXHh-wqf#aGNkepuJ9 zqjDc6)>>t7_U6{|Jl-Q3VNO)I<3(*0|AwmXJ3`i##Pa;_hJ2}2c=2_>M^U??f(-q? z#k;x+bbSM>cB#$ucY1p1qCpB9RF}0kXC(6JEMTKLf|X@6qplV_1w{IVMEz8?`D-u1 zR#Nj|)!y51!wt7#@WgI*D=b8VQ}c!~{AJn+b@;@bk$|zv43d3V@ntc_F86T$3u!BNyRl>FV9kJR*h^dRG6)NHq3x} z?|2`wNELn0?BzObO)O7;iI8iwtdmM2966uwhL*fKxRp|RFZQn|^KE!3y~DAVhu9&D zgr)1B^O~hB<{e0%P>({8IWqS(W}v_1H^tcI{kA(J9rnDbRFhj{iJml;V;JeBYZL6# zcdZ;tO`wKyyi}%NIlWXzuBZW9m8R-&@pL7XigKm-q&Ci7f9chg#_JfOn8^-E%|>u dMg-4(xqjya5!ALf1f+hstROH8iaGM}e*vsf$lCw_ literal 0 HcmV?d00001 From 809455aaaed1e576ca2613828ad009a93224afa0 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 28 Feb 2017 00:43:36 +0100 Subject: [PATCH 03/44] Add elephant friend to missing indicator --- app/assets/stylesheets/components.scss | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/assets/stylesheets/components.scss b/app/assets/stylesheets/components.scss index 5fc67d9c..3b7c6ddf 100644 --- a/app/assets/stylesheets/components.scss +++ b/app/assets/stylesheets/components.scss @@ -1074,8 +1074,10 @@ button.active i.fa-retweet { text-align: center; font-size: 16px; font-weight: 500; - color: lighten($color1, 26%); - padding-top: 120px; + color: lighten($color1, 16%); + padding-top: 210px; + background: image-url('mastodon-not-found.png') no-repeat center -50px; + cursor: default; } .column-header { From d180aaa2a7e4026612dbc46243689f4f2e52c258 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 28 Feb 2017 01:52:31 +0100 Subject: [PATCH 04/44] Fix #186 - Add RTL support to the compose form textarea and statuses output --- .../components/autosuggest_textarea.jsx | 7 +++++ .../components/components/status_content.jsx | 10 +++++-- app/assets/javascripts/components/rtl.jsx | 27 +++++++++++++++++++ app/helpers/stream_entries_helper.rb | 13 +++++++++ .../stream_entries/_detailed_status.html.haml | 2 +- .../stream_entries/_simple_status.html.haml | 2 +- 6 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 app/assets/javascripts/components/rtl.jsx diff --git a/app/assets/javascripts/components/components/autosuggest_textarea.jsx b/app/assets/javascripts/components/components/autosuggest_textarea.jsx index 4e4c2090..59065867 100644 --- a/app/assets/javascripts/components/components/autosuggest_textarea.jsx +++ b/app/assets/javascripts/components/components/autosuggest_textarea.jsx @@ -1,5 +1,6 @@ import AutosuggestAccountContainer from '../features/compose/containers/autosuggest_account_container'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import { isRtl } from '../rtl'; const textAtCursorMatchesToken = (str, caretPosition) => { let word; @@ -176,6 +177,11 @@ const AutosuggestTextarea = React.createClass({ const { value, suggestions, fileDropDate, disabled, placeholder, onKeyUp } = this.props; const { isFileDragging, suggestionsHidden, selectedSuggestion } = this.state; const className = isFileDragging ? 'autosuggest-textarea__textarea file-drop' : 'autosuggest-textarea__textarea'; + const style = { direction: 'ltr' }; + + if (isRtl(value)) { + style.direction = 'rtl'; + } return (
@@ -192,6 +198,7 @@ const AutosuggestTextarea = React.createClass({ onBlur={this.onBlur} onDragEnter={this.onDragEnter} onDragExit={this.onDragExit} + style={style} />
0 && !suggestionsHidden) ? 'block' : 'none' }} className='autosuggest-textarea__suggestions'> diff --git a/app/assets/javascripts/components/components/status_content.jsx b/app/assets/javascripts/components/components/status_content.jsx index 43bbb958..6c25afde 100644 --- a/app/assets/javascripts/components/components/status_content.jsx +++ b/app/assets/javascripts/components/components/status_content.jsx @@ -2,6 +2,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import PureRenderMixin from 'react-addons-pure-render-mixin'; import escapeTextContentForBrowser from 'escape-html'; import emojify from '../emoji'; +import { isRtl } from '../rtl'; import { FormattedMessage } from 'react-intl'; import Permalink from './permalink'; @@ -92,6 +93,11 @@ const StatusContent = React.createClass({ const content = { __html: emojify(status.get('content')) }; const spoilerContent = { __html: emojify(escapeTextContentForBrowser(status.get('spoiler_text', ''))) }; + const directionStyle = { direction: 'ltr' }; + + if (isRtl(status.get('content'))) { + directionStyle.direction = 'rtl'; + } if (status.get('spoiler_text').length > 0) { let mentionsPlaceholder = ''; @@ -116,14 +122,14 @@ const StatusContent = React.createClass({ {mentionsPlaceholder} -