b93h=GSoEP9%rYC`affcxP&ht@w zF&Bj;&-?DpfKkod`@ZYmz}%bl=S+2E!gS4z17NvdQ@7RMtN(rdy=|(x4NEwWrEMx+ zdH?#A8xDPfJTkRm<@)>Q9(Vv>3uPxZF}psn(fnp4^5MrG`*0+0-}@N(%qh0{%T5dy zzY4g15y_wrhrzSD5wv=>4-`6}>i!&_Rof8=Gm<{LGGpsYOO%;h&zp85piU!hl(9Ih z!8`#gRGBfxm7am+7)G=oA88uR%d6gAmE;w1qa5GYB6jEQ*lKl$ z@B1yKA`5~oV7|Vv?cNp~i|>y_a?5TxGN#-=HL-4O?$$~K(ZvPO(H{UEokas|uew9L zs&{L9hL5HQjM4@n2Db vg0KS=+SV bLBCXcyUj`iav}_o1C9 zU!0$R@oo0-eYOVvIkxlPG1L#3!XuwC0C%><21_H6J(yMYOmpQDq(7`oPAW ZV!oW*V?LL~KbQX5mo) zH(7Mx5d~(hmf#U(++6lpx`_l&fqUWVqu?(vFT*x2MxJdNJ6^e&`5>NGamF^9Bc)$7 zCx*9I%kXIruxS7JzUw=^Uh&gc>d)`!(jL7178=I?%Ff_Cx(2=%b7U9|7xsG8BcE%~ z%_kT;-MYx{Db&Z#Y&rnD9&E8kV^QHWEiY)fIfv=2CgfKsVnvajWt#$JZy({jsEjJo zQ5J*;o@^S pc~GVNZ~tywNm3&hwidr+uE!*@f0IzRv3;1+3e6JHfUH zj5=CMVTKy>FDaP%fX51q$AV*(U*dB9SgT~uWGbN_gUcz$U}D*%o{2^*&-)CwHWmR| zBk N2@Z_)=~-I{=i>uuub7@k??T$b5`?c_!2 z9j4;$BD(p_Z@!S!ce#p*AAxl+-fp_}mvvpkmHNxJjVrE+A2m(i7ymW-Cfx$_{(f{5 znz($=vy#UtQYuzU;5>NBx>{=Na=_vZ`#UVbj*GWi^0!w&WBYr^OkUWI2(0_FkrJP! z*+{lpqK{wrTuZ)?pnF>KxUdl7t)wC8L>Gh>ky3uj)Iwne9P&_Wu}xD%su9&tVhJPR z=&mh?WDRt%De0nU@S2lVL%fJNe8XsA6c21~A4zW)e?+$w5*MEG`$!ZPzH3B7grg;n z@P+$SPGVc|(QGo6aFb@7+NNgeROEPGkQAX! KSXy2(di9ZlM=iGBK!5kb zAGYN4E%bfxtdkM**Q}8OJk8OEI45R?99d`)1pcrY(&TW;4kZUO5zR3*a1Y`@A}gxN za#S!3Ls59m&Z(ggy*A%+vCV}$KKfC-;{N-;ZN^ldD+xm3J_QCZ5VtVUmgw&^bzKF& zk5?s8NlH|aDZydG>P|+2_1hf%kw=4@VSWAUSD-=)Ghf%=XaldAFyUbzu;N88r^Gyg zKHN|8g+6a3$Bci9FhT&AL2`yI%^e#!#`g!9xdc92OF*|Xih`@`2o57PP_T`FNiEUO zUiiE>!d)$e!i5?amK|M`Wf_(ua;hg8YSB$m6XH~sBux<{!?tBhb{tI*6;n665}{-` zA~;l1c*1kK=vX30@S1g7SI8<(bA(d_?pi{?&E;3%P=~1U$1p5a3(I&)2$_N4r9`fe z2{M%gj+a$AWV)`MjtGLp%Tk)>pe@STuBysZlqErqTTZ90hXq-eT6t)XQjrQ0U?RST zS4iU1x}0d$g{OgiDX#woFTB7>obVi8fiXwO3kvsV!J71S`X}TKG=%n|huDsB*{3?& zuxQUL?M@0&%LcPuVO!cjPw!0D+W;w73e<80&*2jNb6c;9H8f11Ofa9Y2KP6P8(Lgw z(&lc{CQ@Z-bLo$ IlSd$b*B9Ll4lwV;*Fy6!t zywo;p;kSX@0taL?LZMijMYd@|#)S#O_&fJeNv1^}nDZ15bo>ynNVF)x<3oZhVVF7F zw6n2 ?ECe@foy9_?OuMh^kf$2g23hIg=} z591$Zi R`*d zjRZpKhugp_7_@y{%LAoq#p4cN>Z$|z3|rrN+v@$)-$Vf6C7zzQ4dSq7IA2u#HmM(h z%B%_Y9V!hD_28gt-als~`Nnx8+jH}kq=B6PO@ >`F>%E`@J5#K!@L9kl+&qx}-Wbh_~w>U7`qRBX0*d7*ZQ9UD8u^n1Ij}*jYBs zU)=m>YKx5_8&Ih+Huhn|_RdvdRWwvBR{(~pU|R<&K8==!vntS%ZG>sJRt!Sdh8=ja zwkskuQXUw}mZ8BcFjcj<2Cv2b*@f2|_{5&e)r!Fv?!kk?8gC!MfiKXoG%#2O3W0l= z8FaFu-Gjk>jlu`AbrKya`-?R(1Dc?mb->952MDT_vt_2fhcVl>05M;M%R)8N1Jo8^ z_DihK^3W=Xf|pb-*sTn=ay0KXzXouECQB9Ox(H>_yRQPOp)fF*cb_3dCSYx-fR|BD zS0x?1H=Ugmb69~@bwtT3ypuE~m0(fNNGhfhAC5| 1sM!pnS$5Kb1&MBKn6BB*QI6NKP)*&OF&Xp8j3 Vmqr=`!dJO#LKOMW|$%Y9YIAg8P2uDLoqGxS}~`s zRZ;*~LV &ns72{sgMj9IRY=Yh-yfnnw3t3W4av+aX^2-6$nBw`^e$$ zREH*LVyZusP#{y|cP;}2*MZt%1)w2`5*Y9|Fsp?{AP~G5fO`h2P2Pkx4G&@oM= x9+1&x&v?kLE&H8w?Tl$Ah;9MxWgmpkO8VFcx42h$so93uvKZn`w9f zQYFF@cFzKOyOWbrs;x(47t;@kx@(49)dG*38CN1Jk{OYKt!x|2Kbup@;&}|*5lgDJ zYV)QTGbr)z4al4b5*>Cz3I~)^T`S)el@cK^#z&w(#a23oC0zmAA}xnBSu$G_7BCjC zt!178?vTSrdB#|}Oif-91WnLmQn*#sB`X}VWE$6_eHn?$=5_`2=$Na9IU1I;?V=8o zX@P^+0?je^LlNu{$Hl-JG6@iL*;F)9wxMfP2#FdaB}@f4&t}AtOkI=hP{h^bh~h-_ zRLm^_ K 5wi63=(Hb+n{f+v4HPRw5QsJf<-PPL2y2FjmOQ zwIwnwxoW2-MiQY!C=v!w3JV;^7z~)!kYqO50`uj;HIP8I9gjKT!)vaNxsI$Ib_WuK z7ud`Yk+}f`b0MCHjK6_dEj)%{eS>iv^1+8sL oim%DG?fK4k(N?+%R?1aag z -wr1dxp+JrjwiB-MExt_ zcpRcL*)`ehnvE;NH fKOM3IlBoRL#NOq=t=a)=w 3VLAUv==Z)_*<$DrFnBmb%L}S{@i&YMLcE4Gh5c zHh0G=f`@fk+xV|Q`*9<@DDr H-QYVKEs+EVNKE<&`r=6tQT3seh<71{L|E|hpq6R@zOw8 z>!KjAHZKnOp9Ov-Xq)$*9$kK0SRx3+0P}bWH`bbP7rsag)}KIxr4cebmV4-l96bDe zbf4GSPzH6N61(>tT<-CYLxTfGHiP~qXQgD|5*AC*YT4flwb<1^Y-PROQHwt7?MW@X z#m*T2#yeH~p;2+!{%5{@^r@%npML78V_*1AD*6^qxg`I0sc4OSaB08q_tGxD-K`iu zG~KlOT=e#*@I6nx@P)V7rfL1tXWUAC8@aFMrg8nT#(BkF@?zu8K}XXWuD6faw67Qq z;@Rf-9^1U|6L05>T84{%No-=&3wlp%HtlL+eN=Z@282=LE^o~{YmT87b_1Pn_s?Uq zRkokow22xi75K}^%+MAc|Df(^{4N{!cTOu}{dTanii95&l`~I0g;UM+O}pd+KoLy> znq7|%0zDtki3-+)9II3R&8L1`f6yzoC+(0Qd!gq<3Ff46KG}S(TtXYr&R^|xIpSY4 zXX|nA;v0W4>|H^>Jbsna=re41-VLqWB?W)F5o%6Vq^loU;~$7haC2 @R)mhH7i0%DW{Vvv_@ 6 z6|LV61W84`y N%a (l=8JkGn&mC)E`BK(uH)sVv-wpH92=FE>y= z6W>nWj(;|`qhsOm2F~pI;?dNQD&gxQG3y&4*-n_>&?fdajiR1=CY9ftO@AYmzc`B0 z-b9PlJkLx&ES+J94e`6eoYpmOs_?s4oX3X9Up95V9*Qj8pY+Z%ntzEA@qT^)J;Mw} zFPlNH=lg)a2RvSXMN&qCTaA?*ex+k*^ZpI>0fq*C<(gaYCmL5GmHHyfZ4|}tE*0{b zi7d&rz Fy*JM>l`hg_XzX&4Pe^EOBj0|B(l71+L!k~c`&R!Ha)UX+i zwmZ>sw3(d|K+A5FUfMhiI8ycp&y2i(L-Ci#X$jDIFC^tJ!6!X?C3SFlm~0k94Db4% zH=|sC#ZA>G8uG7vswvda6-{&K>p*V~d;ABR$fcXB m z%fH5%d{U$b4{}6E3OavElE@lKI>qT?QXpKAZqnC932z0 l>L?YC0#JYfAfmV5 p_`e!t`T+a|3Y3b1b!O7K7G`@CRz*&> z+~Hd+f5w^1 Tfpcu~XhrznCYF z&G)yfZ1y{X<4|TbJTrEc`2X7*+x5Tsm9A;;_+`Qzgh}x#SF^p}Xnud`_wD7zZGL!) z5c9(X!mEQYh46+T%t3f82=lO}z99&+UliXIgca0-4g_HpIOjC`g*3;0HgE(z9)vN{ zu^NO4gyTV&LbwowIS7}7FppfkAqWeQz9$GPXg59-gjJNsf4X7z_?>f8hYruDJ2!Nt zivxoz(zo83o`s~TneplL_{sUhvvViX>(U2jXXYoTr)T>P%pRLNFm+&d=ERQ4Lno)l z=Ym-9+C4dUVrq6KJ=ix8q>N6^OwNtZPfoCwPuzB>I6r?deQ<8}Sb8LAGktt+_Q>Rc z`M$&R^T${A_c!+iq?|>^(Vb`xO`${RFq%hcFbW$`7rcw!&!|^G=vF9^hLV1%DKvw| z(KMutqmxkMu$OZJ;_CnodjExC9!)}tX$bdu|Ciy|W&fk$(*N#oY2Kx=EC1JrOUsNx znHjI#xYzT<63!>kZO~5 r)pCWRA|<8ucNOD7IYoj3u!F0rPjXU8Y##OwijVD=E;bZFW5^gNxsb5aCY zHhb`(aR9KIoL+WdYVN@Fn! zc=p&NJv22>4j-Z?Zktg9f-D=Kn9v*H`PoB m68umO;0XkxQZvHr=W)uyf-tzdjA*AkV%dJ diff --git a/rhodecode/public/fonts/RCIcons/rcicons.svg b/rhodecode/public/fonts/RCIcons/rcicons.svg --- a/rhodecode/public/fonts/RCIcons/rcicons.svg +++ b/rhodecode/public/fonts/RCIcons/rcicons.svg @@ -76,6 +76,8 @@ + + diff --git a/rhodecode/public/fonts/RCIcons/rcicons.ttf b/rhodecode/public/fonts/RCIcons/rcicons.ttf index 4b5d46ef39424db778faa0519503f9c94ddb5ff3..8d27f5bf37f690fcf011f7111d942dfceea88958 GIT binary patch literal 17672 zc%0pQYj_*ib>Mx>dj|6WW(E&}AP9f}U*ZEG06i(ml1Q1BWLZ+=NU{~vA|+9xNR^`e zj1?z#vbO6=u9Hn#XPeeuC+@cK=fvt4x4UkWI*!{o+15?7soglK>!cglZ4;~O&F5%E zaL=6?P>`ZT>G$ogC2(i%`<{F5dEIj_h%iD(MfW0#21a+j@0#?lcie>#UJkjtuHV^T z9PZya2 ZjvwH~A3}c+(0kLf2gd*7i3k1&+G~(Lb!_~O<9HYOTPTk~ zIz2OfZ1SczzV$dlYkwcc{PW|pC+3B}d9w?lYo;OnX#}v-9g9a0;`$fQFP`W6S -$ BYd1{(0%=}~ VG_OSoP zZ=gX;7!W)~SNz+4aMJ`@S3~FC^YF13=JMH~Pxxaq{&$Dp^RT)|tsreRmqC7Q@jR )j#-g_Fb1#zn>|FSsz@of4Kdi~WP8-1MM zVaUZ^K4q&4`5X>II)l *(G)Cb0g>WHP^YyABOP`!{@e3K6jwI& Ok|-jiXa;~$VE{ULvf(N7L-J-D23W!HtjG*7UfU}%A*46L|v#G^}xKBp+3|P z^gD=(sDy@48C6gfEk`TRO0){CMr&Yb;i@zE|Nqb9fATLuY7JX=KQQ{K1%b(jS`Zk$ z)q=oit`-DFi?tvyj;{p)Ru$EPz~n )f!wIBe6p;{1t)=(`7Ky|1V1fV}u3j$Cg zss#aP64inL)QM_A06ImrAOOXpS`dJCQ7s5S#i$kppl4JI0#G)p1p#Or)q()jj%q;w zx(6=x18@MUE%O8L0;=`-0k{Iy`uza>focPO08T-*K|dhYN6`7)0Q`pDdD{=bdFY*=`T=+ly;JuCa3eZr`vLe8opbyE9E#43 z_yKqoog4K7a4kBw&kw-A=-f?y08U2dKIsSGX>{)EegN)9=f3X;;B(L!eqgli<$Mgi zgno=~#h)Z& *Kz{{~rIkuwD3s@J;bE5|UO+uPa660aaIL)aTWA zwB_1i?PJ=jq2-~8&;|XJF=lG!h|Sqa`(gX1Zm;{0`|W6N^mEaFiw(sdi~UtR79WX! zA)zOpXwh3v`&_j6F1?@p6zC3C4rfF`6zr%Qb&J(XwK7!57xEEX$hK$lYw%E|)LwKQ zLJ#k`u~aUXZrt r>VZtfwShkJ<1%d$( qd@6uBp^^6^lcgAA2 z9gB6wTkr@=#*^gz9mCn|@aDE;c>hpN$1AKAV=Uv^wN_oT)?UlvW5d=;*>0`u`iQmm zYtRV37hd+?U JktN~tV!@T3?^ z3Z_(*pb7&+gRbQ;p`r|fQBLPSZmRVGHV}R#q#qr;PEoEKJlf!cf20NSU34cT+RJRJ z#pu8wFn=jUAmX+W7X(7oaa*yw3KuJdfx+@neyChvv OV1I3fVn!@Q(QSt=?b)(F=(+S#LOx=f;~Mh*PCH+QdxmVi%a!Bf@?uXCI#MGTFj znus|~76>*)PLc=*6hb*!!65tCXwZg-kvKxQ(7HW?H;0t^an?6}MAm)2{~mpS`~d8b zIOxA?85WzT*M~9Vh7x1tXeM6<8IWbK3gD87V4%PfOEV#yWi?rT3PXV{(6NORiF7tf zelwb-xrM)F@~ySE_qBL?`KD^Dt1YVDIJUW`hvc4)w^z&iZl3n?rf%8)NM~1${2&us zn2Bbg`J=JS!olvfUERaoY9?B}sho`_a=qP~ue&jt$wa4b-dC=6l(L =T*_|(X LH;Jl{)FT}nH R>uabGC>}NjjFrJV$DrSK=>Jvd8#= t z2nt*_sslxGeVPqDF9);?0_r9FPt1nIqNmV2aZbMSv=F9G3yO;O0yHmuR}j7{MWYS+ z{~3Lps>~L|malz5)v#p%iigJZ@v+jvp3>M@>1=5X-wt81emhH&7<-1t5LsMY{23RA zKElkZVnW7KVSRWl_OzN?aF{|Pg?zQSXD%N8Z?WC^g~uaFY&{>_-9bJONqwb0P@c;^ z4 = zMX!>MSnU>QCV+Vu;}Xzh7G#aX>IA4MSXtjXS%pDmfvf=G01uo}q@1L9k24perxnqU zipu7?2F!(DA+V|so^Rp!FA5y~XGN+Eb<_tshH#nH`+Py}b)SuP%Y~;wpgmXrGRws4 z+4C2~>l4IU_=#pKicKchgK*?`!iWn$>DzcsABlKC-0UQA%D!3gcFKspKyC+nbQ1k1 zFqyrX0pk@aKz>XOGhqhI$fB!2=(!>&1)zGys2;Np@T?kZkuMB-L|d)+yxRj}Lx_SV z1QHhfk25gnfEeiTs(XF1kB?NZOQ_tayHp#5#u_{@Sjf{CME {;s6xkTz3=xr! *Wjc)FBzhUc~#U*R|~7QoitnY z2+bu5ZZu>Gt{GQAG3knEq D1zr(Ca#&Nsn(ZXbgb^lCHQPhAu$+*%kgUtRNkLqj zTG&Wgyw)1Yq&E~+Q@S$0A)j|!X(k!gOo?}ls3AuMMG>O>NWiNSq+W7czrCyn|8 zHiwlcG>q4(XTd^o)Ft0GwwS% AR3t)9 z_pDge6^}aRR7a?-V~yDx?^%)PTQQ(*KiT?(-k0oIne40f=})wt+-^FtwNBEqlFq_M zp{<>C$lZ{(TP<&AzxYpN4f&se3_(m$x5AW|+6SJ`)2pOOW }41%W8t?U->amWo(KnddIV&02uW-g%* #}D}3LhuRIE0 zoa$X^e|h5W?T;Q_M^;ate)9D6YP{*o4*tlYN69B&{w?9*`eUu#&X+e0A9>`7(=#i% zYYu*L>)jJyW;;)D@jS@Rx5-ywyfO5CbP%0D_rg9Afk4!8AE`un*V~R1I>3l=MX($J z2oUCMVZmCeFybq)EU {5-l_G^#n~8 zEa?L8h@R2KS7AJn#B`U0(_t=g7PpwZxmk>e^$!hm6ik&$|Je2|10|8G^o`xn2aLLL zqr~U?ZW!yUaMX?WZ{0rDx11759L67pW}Bh;!c-!;Y^d7pz^k;pE50n5aJ!b5;N^5z zKUE1!y$0rFjPI!6$42Wr_wby+5d*(DTL1n5Ea3fa(t{@ReYI1{aonppnoRU;Z|(2x z-_#ASu*7$E@uJnA+Sb#)+U@Oc-PYUELOWjNxtv_kw#LSi?RIQ)s=a d&x~MKiK%R?C zNtM~|Im&jiOo6+;q{uUw?i;wS=#+}&Wnd)|OT>P|PKSw`jE$t-3*Ug1OS_m}*S@=b z3#M-ROG@~>l2XoFvJySx>SuHppNUNvUPEFVjmX1iU1;c>b< 1vZ z!^W `D^+5&&Tm@jG02wo*BTUa0%Iy{{nQkh&5cc7E*R2?1 z-{Qq*gqLcNQ{PEWnM1LKQ(h_kAiP{N|1C>+M!fI^vO4X&b>VaVp6!ctFW3eWI^xSN zKv%KC)F0aqxy;1Vae*-x(?p&@02B?P)z@5rS%3+M8?eVzUXWP=+OGJjvgqv*K=MX| z&P3Pq9<17N#}2Z4em71^;$cONbPBw&JtT@-;|W>h%nwSM*%G~8FohA9 tz=Ee6&^uWme%UM6ayy}hZbx{BvFB!j966Kf6IYL4rt z*8={+s0H1HzJ$&NI=}`z@ M6uh %7FLBI!h3QCe}#Jtn0YO2^v@kZLJh&y+RN-G^QG1o1D8jEsd z14+t|9n|iYyxQC^t=u4*AGG$8&bHR>Zn6g+tGc`Y`yqfuk3?HKV9RY?!xdFwbxTMB zfV3jVU1#vT)T_nZ5C(GQmum7R)KsL^39qI)$ZB#z$_ceZG$PgidYdd6`dXck&Xx|0 z)gjzT2&4^3-X_ath?S(|Aq|7nzy($mGG$VNGQU-U6=_2SzmW`$q@_kG=!>OBk}qR^ zMr-6AkdhhZYXyUrZ6*6a@>K;9#6$(?R%FHt&?}RZK)*l=Tsr63sJ)nr!j|WK_hvw; zX6}98b#Gwq&H8huIx=Cp=Eecg+^?zI>hIP6zW&}eRo#XqoX65O6|cO1{mKo8K0zLt z+OTr{{c{gIfUkwR6PuV`AJ}MqGZOjmV~>3}lDF@DjC|%4bN;dugT=1`tY1Vj$irc< ztZoFUUhM;c4xqX}2WQoG1j3Z0Pp(Ya`rHy_D%Z27-3W-&h#O@j4tp?3McgRIw|}gts=F_Is#t8}VS}pXR4hC1zxH>y^Qv3e_4)_9 zZvV?o>u=7MZ%wOH*JqEcVe@ 21u}2&(sMf=`rO0Y$*u?f;A6Y*o_neG zmovg$&%gU$PrbK;=eKU<`5k_9U1+4CC)WIyoe%9I+fP4n8rnXz^W=;3^Dn;59=^@i zfIr7P{~bg904Y5383SNvE;iU2iR{6&vZtCWmjL}?WpYwcN}y^dC)Jb!O95}SsHETx znI+}bCP?4VS!t` g)I)y@(844i%s^zS2EmTY8U_%UsflI?_ zx0ZH~x@lbVG;1vtJqi()c#h@1 0aWV01)7 oAm`alkJCQS=Ilc27+vRek^<6gyq&-;0<(^mQka3p>`Mx& zKA^Dzqp{#v<(HV8Kh`SQGnq>0$6#{GF<4l(sAr-P%d VAtbq(RC0!H^ zUURZ)h!-)3Zx}6%;(_h$BkAqpkLZ>{;=)t@7>UBdca3O>aJ0k`zHpz)Nz4Tw%_dU` zH)+PHZEB`YMULkMNfFvaPLMcCNyM-mr$uv*;8iQ?bxc RxqQBGBbrtMBUX?^8DN#kH1cwc) zI~fV~Z*%lV9u97X{q?V30ShV2Y+c{c239j+%)>sQ#fx4^iCF@DxS!+;ecn!vDgP8< zhyW^s>gCITB4u5@Of{ByIKl`3pFk* zJGv;#GHgfWR8KP0qMM>7#HlPvnj%PsZOfMIIGP|Trfzm6LdkGMaHyp4gy(e8u|$sG zHS4ynkX4-K2&V|#wS<6~%dfzp4pHTgVc4n`mhqGjG6T^|kz5}WWGV?9FROCMbX_|g z5d?{sr8Lh$UzD?5Rh6kIOM)D?oK9U23$iY?^3WfpA{8WnM0^deki@5TInk;MPXqZ< zT>lGRc!85R;W@klV~&s)6z j`^s-*McK;zE-&cbl9@l_lrWA7fEX z#M^C4)E2&y&>W*J5o5<+Azl;NIgYR l5&UCO_&NiFp07G^S+|jZN&R>mSOtT&4{Ld# zRIPZ_;d5PeAfI9TThFcDPkko>FfZ}syloJNb;J3r>i0?g1T 8S67_o{c##f& zz#zj%3JghgY!J`uA6>!-NF&b!989SVmo6EpI!u6R3hXSK<}W(`nb=};$Oc$y%#D56 zw7qjx*cA;`%M}PiRnV;i6(2`S(^(Zr$u`2ITPp^pYr_saS>F{AIw=nfWy{cE7Ko}^ zT!YtQ|LnpW4Qyi1 8hlI^`^6PVh$^?tBxpH zg?Eysq!KLZ8A-)d;=@tNluS+&!y3hy7Yx-hlR8*MxqKmN3ei|16pLiiCU1z8v{TFp zoaPXTS9qCE5yHu$nTQ*hL QVKs#)noIHudN5C`}NSOFmfvyU9^PIYL4CZ_sB2?Yu@e&;d( za2<#(RslMaD1ixo1G83G1O&m01u)M*w8@*Wrr|*>;Rt4<^6g3LmB)06V}r0(_gN8+ zmC;-XYl9)e{&=v~K WjK(0i1!tPnXXm@f_O11Tf z>|**MQFqOdt6E@jGv!KTMKU8Ykd M3r`Srzu%s)XTcqWXCrf5)!UDqLwYAJLz#Ve m#N7s zf}ja{ObWNEx@3hzmQ3S%v@au3+1##x936AjFh|33wq4X=F)c9gTA({-ekg(+; s}n#*#TYMZ8mJ#&J}zpcV{r{ErKFQfuNrCZ zT-^iYD1_UST;loewvLumYg;_L*-FGhibpi2z{znz1HuYfxwb^6C0Fg##7H8P2t~qR zNnwHG7=Z!N8j{QwTVS?4m ~AoRLpj*+iRgewfH(<*uvTQb9x^R2i*O}-3)F7&=^N;R>m?4k3veUzG9x7{ zGC{#ng+-x0$Rwb9V0WGZbHjkaJ%umf?=vmj;d@6sE0{d 78MQe(UkgYqWGF@ z+n()w7j31RV5eM#UFfw4RhO=hG3noYovitqnbXiNeB;QGHjW%|Bj+!(t4CI6+gr4e z!O_;7m&m44Suc`nU0oh4?a jQ6lU z*8euVinU%nvMP*!bTM9)?AFqbQ`VXnU?rgwnqp0J@r7Nit6bbW@7qV;raMp@S|8j` z9E5rKI+ZEdly}*n;wwWO7^Q*Eh4~Lc%GcNxRw U_)P~d>;305pi#EbYH7G^qvwIarLI|)(|`bUZ}V`hAy` 54An`G&Qzm{kgs(%KW z`ET+UoG9?m!G4p!(9b&l5{r^;BF*6Die%v>O8j1k!g<{a_^&zQ52^S=)A~aq^}yj| zaue|I>NBj%5!NN$0mB4i!G4i-?2o|9KtE00de930881zQ^)3nm>+|B2|5@Nig1&k0 z>EY$Kg(ZYA2r!SAU}L=rcj1f3VB-lySehY&W4Q;O$ic(+qx-bhhBBxFmDs)K;Bt?D z92y)jvK925oRyM+OIR#Lt7YF8YO$+-*vfj|QHwt7`J@)!VrPth W{B z)WoP4^`6*l@@iszRCiec#8KleZ_PVvj-eKI1D$X8&ttPy=Fe?%qDD#u{&F-kutmo| zsCyc}%jW%^(~4NX9ki_?;Ri+K%u`R{R5O0lF8KgpM3Vq#*W-hL&&PA3f;Az>+SGsZ zsUO!L^s4PiJLJb+>^V__HEEnrHlHh(&<3>gS36yf_}9$Ye%!nG#$SwkSI{p{U*$CV z44a;JL+f@)!Jlr#nsXKD>POc22ci<(9NTlndu5F??LD5ay>umCyV&rxdoEe#YmWrT zC cKH>^`E$Q(PCoz-~%xVkgzXg?h(kgM-xWXfIz57-(3&adYuf zxV$rws7v2WEj;cHg`QMX x)NI zL#l+Yi^QyNgk(EmenXqs+cb-M?wM46Z#MmnRQ}>DN_!J6R`WVD`LJ|`AvW0W3Ts-| zyrshLUU3~8EPvV3`En?-bbr!2&uIQ7M#TI10gMbQ7`XWD800Mm~f=* zPo61x|Ayi(Pty{B^Ik~GUjk2h_DbU5@;KQnh8W!SKW_%P{)(HbPc-;n`BYP^AuF2J z(3gSU8us`PwvbCVSIZ6JF8ylj`l2_~i)_fH=+#zuskW$mjYYrq%UAny8D2%#p?$xi z48M3HEHrL9wY!Xyna_+J9W#!HW$nY&i0_CIsg4U*k>y|GOg<^ng9kYxBn6#6B}rtB zB%R`PF)0u($T#WhqJ+1C=F0kS@mCP~2snb>V>rpj(F%e_w^a--j)FQzjAWH)37D zuRyOn(Zu=yMEqY3GI;>@0tHM(K|3>UT??x{3cDgFTkh~RmcQc6 ( zny~EejE>^e=FJN)j*gQ18qH2a7xgzA?bs>rs9(+F$L9OnRkr#a!Eq?l8lD=vO8Wop zjqUp1{7Tofcl =4 z;n}$p>2>LYvorIP)6=tk2WF4W9hf>WJ9A>k RGgnbm_9f+dn`Q?^qD?BH+y9Az >60#weT bQ&P)1Gp}&GYWNP zyn5r_$P-I2pFp?4I7P^v2gn$7a~?ElG;$f7X}|+3I|4ZeAivMU#ysS%1h(w|h4Vsa z>3=II=*oY?%!`XT*z5^d#1fXVf>o^H5Qu66o7lo(90AkBf$d2Y$8a1ca0^c2R_|mq zjoWbsXK@a9;5;tiPTYmNaS!gr%e)ho0X&F{u&Dzc1?^JB%kc`l61ID*@fvnyhlGjA z>B;#?GJ8~n6+bpPGcVmbJA3rl_}o$9*17SS1BdDS_#tk3_P|l$ dxarA* z^SnpB+{EndGs3~y>50iX)qgFUJw7?3&d-gXIJ|7~*zx&0`9pKFCyxtrlgDOno8%78 z&K>2B&CX2 FdH)+H%6 olE^xpnz>DDbj}iH^8l=td~j-dav6hFJTW~5Bb?y9l>yTGzyHlR!vFvP diff --git a/rhodecode/public/fonts/RCIcons/rcicons.woff b/rhodecode/public/fonts/RCIcons/rcicons.woff index be082d717ac7352bf61e23bd6c615dd3f90d3dd7..648b7f0d4a8aa406c66681c8cce5cb36949f9b76 GIT binary patch literal 10596 zc${T=RZtx~)a}9D-QDGkIH=EACL-Demqr1rF}+g@d~khvM#1+?~t!UwOHEW=*oz zmSlGFkcYS{OGyDB0H4NS20;36l!X7^{Qoy;H4Sk900RDVD)0$)@@N__Wi=qjrzY{q zzkcGoFi?%%)Xv!PQ;Yb-JOBX0_O#eSY+>v90|0 9d7s?xKcu=u zG}#$@e6CCTUmn?i`4H-mbN0q|=AWAA=UzVJAba(;X7e2#TwDPFx}Hz1;8V+jo!MdV z0GS$@85wPvuo=~v8aX@NAQ*3r$uf_cCYTr*2LKWTIkMR4IE4}ep@yLT)CX9hlK%*f zfCSJAz{mjpC)Z$ ){-YWTzkY(B5O z#J3{R6j6M?j2XWD!k~r&Ak-iqe%4t3JF1GMf xr;XN{{EugUxiQ*X2OLbnmtZOm$s9IoI9fgJ1=y-EXu_YnNW}WL|Ww zfDCeX{v6-ga~^I^d7k_vnXnQ28oSczHcQ$Re&%$XKGC4>Hdb_+UYLx9ZotXgSfcsm z&qBA&Bp;!O!|-7|=b^ISmB3V6$*%jU7u}rR9%lMmmuAK`;bO) enF*&~wmc<1!6q!*de~SKA~5=exG)2%PYBBu4I2pJo^PePQX; zdhdt-_}}=++*j@z7c_1Wxf~2RZU;GT7dh@|xf~j~97eeupj-}@9Cx8yj JgY*Ro^DIm8Lkar7LD}*Kb8cY-Z8e$Xn8d?+a8g>(A*@G5}J(>>EoxfziXy*fc zt8SBbFH2!I^h4}Dd8=nrcrQtj5UM>@G2WWIoJebaO6*pR>X%?$`DMg&pt(TnXv+GQ zk{WIAS;;Bf1IQU0{{zO9VPXCA5_*8Dy{($`q&>H)E4(YuyIePm+YP%n?12t9x?ZWb zMRcP&Ij_v44b-;Ox_#71c+2P}xC9+R$fg41e5iELoIOkI^x=7?b fNoK)6!J^y~LU^WuteL)1{eY9^O zYKV#AND=&m61mLkw69&Y|4Ve&B;W5`+y&d*UhO>hzy@}jny*$W{dt$8=AGQPv1-TZ z)soYoc*`yn`jO4U;v0=L^Rvy|#zhcgi!Apcob4jscq4L?8(5IapzcsBx&8y=X@VM< z7d`PoR-o1Z{77VuXUJ(li~@=aml(h9M(17oxXP)JZjqRIrXuU7vS-FQVM6yD+lZ6L zz>7~=O;Kn$LU_j6P?AG50}8#`#Dz+SWoOQK&%CsRF>7iHK6Ld-#7UPWC|;w(xd}}z^Pu0<@#6gtJ*U{VDSXs8iwN@FN_#w?fusC5R)$rAlv-Zc$V|6o_4YaB{ zUV7hBNvm^QrMHEWUj37DUE7-g2ps3D#CC6OfB8DO;?PI_nC;0rdNn8Lum{_5OK{CY z4J-;3tg444N^y&Z*D47QNS&rOL6}q|^QH3|ks(OQQ`3=>T(r{RqOcB^;x8=B#@P82 zM<6ty&XB39aqG6R>yQ4d8s}d%cq1tFB{{}1+)-p4%WWn09y`delvF9-zH_F=ofe~x z`IY}ps+bhg>7TI>C?~MQ5hgQG6{N9rs}QPT3D3L_sac=k^^J?KASbc|v8fm6Dn?J= zgi@H`lKqcPZ?SrDW!=EWt3*Szzf6JkI7%jj8$*q{fF2X(AID(Gio}3KA!R*x1<}_o z4zuO{FJV#{#yc_zl^owAWXxj{sHr5_qzZUVfBg<~U{^4an)sJ{cYdM?9h+A^|hR3 KqPiCQz6PxNJehNA$yZ$wP;nB9nS&wss?$ z LFjCAQ2fkZcv`3g^e*yq$81`rl*b*6WPaWr=c={U6zw%rihB5Mlf5?%O}E7b6gSx zrAUYSeA-oi$A)=?Kt YS}0TnllnV zdZ -HDOaaD!T0k5ET1C0MQ#il2N>8_#l7 zgU!(>dJ&9?>Z!b8AbQzbY-W754pznA5 BVe3RsT5-e zem%)kMX+CXS1i@E38kVMzVCed#v0?f!z4jNd-MZ>%}I=>4dNPnsZMA_EjpX^So ;{66d1jvtPl5@>U(w?FVLKDuN4_20QMaq2^lFLmO6BCN|V+~mT%KXK$ zo`2X-L`-cDT7$a@ug>#cQqC|X*r?~Dn _)V`y4=_os6Kzs?z$0is?O3>>i>f_d z@-BZ+@w`KIEa=>o2CfL(Ok?#C$~<2q^g~gHmiqy+b`Y~6c?f^PXv8dyzp#scN0)#G zQUE^at9HkzVR*H~F>I%+>cm 7sS$uMn@DNxj9d4DvtW0Oq}qog&`uru0dX2n{k8Iaq(J}SQ!+?q2M_-pLjx8o`< zu9Wq^_}1quJSsz*%I!kaH_;WAdQj<1&26g0p&D6SEw)uwunM=5rW7_I{m^^8+Z&Rn zbK;jW$xWAranEH;SUU6|B*V?@6WbO+6lXCYfHx>aIvt*1)BHgm)4_`*H)Uaj9q s!OdooPYJx neeCocQyDaqv3EweIHk` z_ZW{wrAEGC5I>2lWVI`2R*%O4EyGH6g8Q|{vCP3jgH562PgPLS3T>*oH9dpA;&DxS zi_3S!uZxbLBL*6}=r9w;Bt=pERj)scyh*~Knv^eG-?17hy7CPk!ewc4XYI7Ft9n!+ zD=N4WzC4)UEk1fbQmuK{46ayK01xW0VgqkhqJ^{`i60-m7ruM<`JJ-M{9X}knVM($ zS3g|k{?u^^p3<&8vsAoB6))H|q#$^8=;3MXlQJfHI6KMP!&;1UxFCki!l#`ip?5g{ z-eYi2BA9@+^sw0GeoXVg%Gqv{YV5Jlo;lcdYHlGNo;fHkwcIU~oJBIBh_cVI`oKgm z7gf@;&)mAfLr&zj4%DjAl_|ZNxk_y;T<&Rfs2~_zA@rsc=;Gi3JL_y-ZEQ @xHipz VjMjjaz|EHRInoqW~Py+D#UatL0lakt9*+r-#)|o`nBl3gZg`F zSQkrU0 yzc zxETBXCS!u;W4y)qP)?XKJ-wFEL2>}-E2-F7f%{jJL=q+L>41GsdYA*Q%7fgkT5P+J z&KLhE`&M38{_-nT;9EsWr#0M0Wm>e)jRr+x?N>9jDhigp5cEeT;d5I0V2E>w1_+~} z^&_s9##p6g3YJwMbaXj%t>$Y@^CcRlH%Qo 9 zaC@HSVxKctdD7O9*1MM{A@pnHIixdp``YW(O~RDEAQpG4qmw+g0Cdkxo(|R+ObQGr z037JGws%LQ+q1epp#Ei-6Vh@c4=v`&>DI{Y&`#h=;{uGhZ|+uDQ7m0%cE*Oknl{0p z&~%aT)0@6EXvMV=D0dxUJ-WzAP(B;mK=3!I>-x8XQevbF++1QRT1^7;??D_%n&Ya1 zx5jq&Zik2S)kpXCEfnr@*-jD}9lH_To8N!zzunGb>T4z_RPa>4CWN};K1>|QrL$#& z1=4=b|Ddt@+O^4TLFK!pyUwVTI2Pc?U@Y?(aEY`1acdWV
o}ZIc`OC91%Rg1Bz-3=lk%-EQgVOdj zrJ|vCgL1UN6=yEVkFogQECH|0RUEumO*- b%` ~%=a6$ Y^zmd`;f4 zrw+!(rv{?T_82guBw>-<=sFW_BIq -!gh8rE^ob4&<_ts>QX!}&>G=2iB#sM=20=;eOMs%{Nvxmvg>@j?9dqrJpV znxlfsvpwwldb{6z7?E%sS%+1B#ofb(*QW0g$C0-YR?ELRqO*&lIWnKeZM2eq=R#<^ zQ)~Oq;3UAJ1E9tb7kfI~WlLKhMW>So0g>d}onf%W)E)hS6o;{ Fs69m+DPCH^17VbyrCbOBBPy;G?kpN}t*Y`>6Ykzv_hQ z=BD$jzxhndsr*aaaOCu(iY%R8guc=zujeXh0>S6gL0%V%a0}Jd?*=?9360Ttg`2Sa z{MaR-+@f&zVH?#%M8c{)b#izi_-mAZp^Lq@ z*>)2+^y(gBJBOFdr?I8xWe@DRI_=SQe?MEZDql+Rus%Hy3=2~de>v$ zv3pb~ZF~yVzVR~dy>T-R^h|oRg?g>*LvEQ+3t*tWi-KvrK_?=P#aC|Ch*NZV5G)cY zBNZ&GU}0;9L$ij#`3>n@U5-m0K9u(S%AsJ$@w8}cH;oi^xG3_QxP31sH_D1B;G`%v zK>#uD%`2Pj3fHSz=|dDbE>KyO=EHTgdl{HNS8pz)4{sj^St~fIYZw>%Hum _7|?!1 -%K Es>6Y#%yh5$*fJQ75b+fWTWP2~YV!1$rwquVn}`3R7@sh@bV!V|;M7%< z)e5K*80qxWg8oj@gcwmc^d=8k(lup@GHLo|le*}{=U?pJZ<< &Z>THueb6)6i_~#Snskfgxe;Laa;1c1zDYx5eXf(mHk^iqF7b(xe}ok zq0lwn++@^aB5q|nSgtOFwCDC_aU?Y{U$;RiAa?ZlDjQNv<`k(cFY5ur<%aq7;JS~B z((xQ^j)j5RnE$kSgvvr#MBQO;BqyKWnwc;uxy1}CD+QHZyeP|dU8a01fvA6?poXKs zbV8MrkLfU@s}es7m47Ksafn&=L3| #f>}0q81p$jD@(&{mN8%q!3SK+D9G;?=@afY(^x_`o zCdm#oz`zg7z=y{Lr1JTi;Cw`as+4B0>Hsy?lGOm)@6LN?P074{vsX!THkdpn)>j@- zPp28(#1)I-Bf8|Vmp@+6vL{ev&Ys{TfTlz_;^FkE_Dv}IvN(EFB5Jb#a;k&96JRj; z0&D0YnwjM_Xx6K(!^BuC(XxZV9;@LZG2b`5FCI=~Xd_wVh@{oE1PA?0+kRyc)+?$( zbt})Bl^mECFhUom?8ofSz1^%<@8Pkd-1j~`$FquuLhf|gV_HJh61Z${`x^~rU8Unb zK-11(*YMEpCKL0#!;B+9=)q3l_;EexZT%V`+d9B}v}J)^pJYI+X^<9Dvd%NY2$r== zoXUPO>F8Vk8atFRXCil{P(qJLES=Klv4PKFS2D+}Vy3NGZVRs2q0cE*D_JQK%H+H* z=emoilGDOeJm6Cpu$*YKW5Pj6m0+$=??5(nbSX|9DPvdkf(t6N-o=bGirGXMyon@c z`4&2&o`S8&ZoBC&ZzX3gn<$?IUl(!ooLPciGNL}pzY$?oQfBg}AG3!l1cMQZ_7tW` z^#`2-4Ug?CR! l>e$o@_WE5x1X#fl6NSa$3ScHw`@4( zKdHq>)F{Mw<8JBUO@TRA*|x-hV^^YqE6Y>I`n`=Wq&rQAY`4c3bfDhko-5JlIrEh@ zLtKdyR+#jzs9$MgY5L*E(S}pUIU3{Uk9X-5$1$6`)7+jzY=fOuDu%~J7%Kz7j;4af zM_F ?Op9xX+GiexFkS&SS(*)DcG<9l2~ zwf?`@x%AxBq8cBoMjr<=>1V+dFv2r4CR#W+O&rfsIx4Ca#^UaOF7A<$-qu*mkg4~@ zNJa~s1r#KWyU-wz?n;xAo=ha3-7A0zwLAV84Ne`E$hPA!g|$?>MuPAo)Q~su+)*;d zSJ9?7h1!bL7wAv(e{suVCxJ>|Dv#hgj~p)LO>a!2 2j)RXZj2nrB z7%qu0FFP;#x^e8W-w8ElI*)KVFfRrkw!*IpAGO6~=Js^3{WfkDh%3*-tD;+hMY3Rc zgWi~|t(6S>yEb-rYSqQ88qLS2FQ}EuiPRB*zGzdS3!SB1qX7wZtY6gSJw~WOA1l=v z_q-=))pQRrt-`Gid+aR|vN|LG3P K&|hCUt}cD*%tahkoeSzi~=1MRZUX}NTCKA*Jmxa^De{qP|*5rQ&&r>s!q*~e~6 z5CIfy8ns~9YRS=cNkO8=f%-A-m>xV*X--!~;_%BYI4)boDc1n;Ez<8lIugLU@N0{J z_pQdrU^hCxs(M7rAf= 13Xu1KvrV3EcG=>6Ku-&=`4^Nvc@(~SG zOSe&7*7(JQV7p-*Arq=u-SsWQ2QM^4xw%R#PTqI%neeMn@{cenGc#?29)4VVn_!eX zRwz~GGkSXJF0h&WkX%4dELJC9ZD2WJF2)L>wzi7P=ILdsSRe{i3|5#NDPp40ZNTp} z50YR!Ax)#vP%VNSD(E}aTM*|}Y;N8s9xAI^a=^n02p#5>)4$`Mo8#oBQd_j++qcB+ zudy{pnHC(7q8uF!F%CH7m5_qZXvnx>ndU4psW*v=>Q5R6C?}pol^ BI?<|jflW;@LiC2T^2*YZb|$v{hu z;o}Y OZwaXG}5WP+Ta7$aAM@lf_v$n+0oZb&@;PLbq$ ztU5~36#lP| R)wUeudNwN0ysSK2_Kr-X`B@(g2y z+~?XXkB4=h1ep53AE@a!f1%4_T*CE)X<}#)0=Wd#Q~R@}05jq3agBh-+EM@wxBqyN!E=!}q8 zVp7SkruR#y5O$7_!I-JX^Y>hiZC2Y3p_QTLY(@GPB!X_37}Jq9DM?sTHV+Po-heo( z5onb^*khFoYBdBQu`!d()hpWBP+zQnP)jcMz6M-I25S5<`+1piZP3is4i;?iB3?=? z`Qyp{&|Gg~SH`9{Uh iN^dV75 z!zGE&qaGUxC;6X#Y9DL^W5VB9JjV6=_MsbtA>Dz%0ff_SG=Lqp>~>WMz9u%MiYLZ% zuo7e!oKreHJdeVXf9WO8EtP$!jjSv6ebCh|ouwRquR6)u%={6|kij=Sp8ISO(Xdfk zUWSJ)Y_AOR+q9f`r?c)?zU6C+9~(VwGQmvJ9Ieh0!D$Yml{~emV_%;SGM=`r^$?Ik z*;v)XHQjM_1nyKxe1WNB8jZ{9j9Ex7;G=)#wzw4+$crJ{nX#3si@z&$ZsW_fg}v?$ zma(4)!OqHV;kp7B&I^Jl0tliqfoRn~@Z4R#&D;8Hx}!YNEHhw--n~6Ua@N%hlsH4_ zMvxJ?VwpxfD_LzG^gUbTrD>hAUZ_idxZS0;^BDXb%O^tBcd`O2*!-BZ=c}WlsF){P z^H-!cXLj8GhNJmUw+8%n`EubSaN)!0$|}p9k;%~D(pu-7e26QjspmCcldKtsx;#RG zyZ#a@^g>#-SYWukbu!q@vZ&6Kahf{z>}AeLb9ALYWu=u2Bdia1f2y-h(x=}S+-KUS z8G0DvfACN6;+hM&)dC~S)_wx4lE(N-Ba2aGO5rEhN7jAy` xo%Rg}r }Lc91~7Q~I<_O>NP|l#Jfy4;x0q_b!mAaxBa1 zAZJm+yH$HhxiKjN!*UUUmrKJN7^J}tD?j5d2~sGhRZBjCkTP+VfH6ek=y=A517`$N z3m9j<>p2?i1tb$t!#r9LEaB@uA6i;b5c3zN^b5A^`4`U~2-`9!nYQ^Pv0{Xn22eMJ z5QR&L1WaNCPf4@u>rf1vO2&|4QONEbA=Ki8Mt#H5={tEm=f_`TaeKy#@qtSww`eiX z$2F -?kIU> z4uX3#M-lL=0hq=X-K`V6y6<{D4$2+g4R@FYJHJA|^*s} +gA~$4t+Th1vOiO|}m8{+acmDi6e5 zNvQH!Jxf10X!&^dzrPVV)*1U_0z?Sh`7#{GWhYtb^qbtSZi`=Le*SX`vj~2e8TIZ9 z=x(m%a~jWfVcK$M-AL^^lJ6G^CFe(mW`K6G#Up!=zrhm}_91H{do0@1+_ikB?DiJT z?c5SFVOHCr-|8`xv)$pDe}lWr8KZ-%)@O2Ol|W{$;_?7{2pe2w%WNg*V&jrstqz&$ zKy cp2vOHW58kqL2&K54nZy_?^=WMnrFO2hKr97glttz^cqDqDaYh@!F@yQ|5T z+HG-E?ykgr9kia^^8M^_syo3H7Ei)1Z*{KWy|6p(i9)fr9+lHfc q?edpRv5~NX!wVxSq`Z zn;wQ!rkp=w{@_1~GSEIrVZ$;=vO)Bc5mh2yPk4Mi9Ocg8-pl>td~1$ATJAFY)Y2Mj zru|O9shSsvtDJ+yYiz^`TPGcY(}(LP4M=zk0HKlMg3hU<52b`X^B Y3n+d!kjiW=@94St(%!Y7j z*;wlm#!|jR&UG$-loIIpn^nHKH|WsyZf{uD@7=fG$L*jRp4*O55}dANo-5B0pK(=b z%6e5-om`f#1j!!rtLzH4?KP`_WuE~2?u9WY$X(oSMo^o$-!757&w%@K_T>p8dFD%< zo^etmPyU9X@j$YI*QPIE0c+XN^6~<>7133NF?VEbrs|5AC#PjG!-XB-kSakI&@CFE z3ZZ4eT5V(8a=5L&7n-eOQlCU}$QrMCUX-7G7_z$GTTR@Gb`;bG{Wd#&kzq0Yrq@rl zJ9=E^c$jUb?0Px5l*`*zr1#BP8ZPzDeS-jJVPeYR7;SrEGdEW{ltmXeHzRjg8n!HhckuJaCf@4IW_P*8ih!Z=uNU(*pWxEv z4>W9FdpQ8$|NQ#_m~5}N+YjHY`j~J1@PoiMZe@4{Lr8sm+=*mL=JMf>>>C+DMnVGo zmQiy5Zw~5n?qE+(!N (om4r61fn|#|L`T2h9lTFHad)>T$bozsZw$35fs#Py7l0 z^YKa$5C#|moI{vEq(RC-o h p*{miJD(Hb4crjcb27 ziKujzGy_Z4hgt(la}4#N)1wjj420U|x6h7r41TV3#6qIOwBO!%0v){?CDH$`5IUx> zT_mg67qgO+Jt+ONxvZ5X9y_mN@kK%H4A#pgh nJ~- z!bAT%Qp;uaNa5#= UG*YQxx-jqNeK2Pb_a%)z*HM|MLP-`HC$ zt}AIJoq5$#;#k+a*N b!Wn~ z6L|d^|M!1HT2BFn|DBJWO1SeX8}fWI{b(Es-T4O7aSi`$XOe@8j3tOcjE14*=_QJE zaj&KoDli->aCn#;dEqzK>t-AVWsqnLG=mhrDIAtUeKf&+T|6J_Hb>1CW6ftjw`lFR zznpKeo^K12Zc&hK1HwIG=scn b<5y7 >4p)l^x$?9Z)e_8zUohJkZ-k)+rdKPdzc;- zMHKaCB~*i8*<4^5K51WW;x~A=;V;)09Hyk;a9=zgGdaTL8hatl?PM`*t3k)Y`1Un^ zLIYY(Y5%p%jJNs2u)nTUi*kied}j-(C|8O%uaMVSsv=GH>2qg}X!ldVOa0w~g%r=4 W^7*^E-l57|grIK9?_HVz!2beqA07e# diff --git a/rhodecode/public/fonts/RCIcons/rcicons.woff2 b/rhodecode/public/fonts/RCIcons/rcicons.woff2 index 97dda07055e26e3b6586e48633d17d788de0d9b6..56a94eb8cb28de4a5c0c95eb1aa3e403d34286bd GIT binary patch literal 8980 zc$@(gBkSCEPew8T0RR9103#Ft3jhEB07VD@03yTy0RR9100000000000000000000 z0000SR0dW6iZBZ99Mw$=egFYB0we>0cmyB?g+T{}8yj>tCF7VCuyFt^#=l-f1!vgo z|1T44V`Yc_i(qPW9B~T?J+Bhs35xm4-{a!cZxQs@837IMJ&++$w;?DL#Ttk(R;;x4 z(jzqXN$wB)+ rIxV6XgcmNEiK>;)X z;XKx)10`G9(AFTso6j4DXB>H|-e|RQRs!;Doba!JQsMBK00IDH2!>cdHQKZ+pw~>9 zGaXz32MQpt#Bolfrm}nrkYt^gID|<#!kvcLK4dlE0ni5YLguWDtB_|PM^HRA;4yIe zWGG82f%p-4`2jOIsvsXT!!C9v1U#^>a3I2sLN#|iB$kngd; dTKmhQ=uyZvTHgiMCWGS146# zvXHQdsF=8fq?ELbtem`pqLQ+Ts+zinrk1u2MA5Zi(UN5=R;^jLVbhjvJ9ZIS63A{s zEq~yEWqyi`2;@YdKm>|JphN`9M4& +FU_=DQL|{S$rbJ*y1m;9wK?IgWU_}JhL|{V%wnSh@1olMWhzJ~Owty2&1e|Ir zz?o(jIM-YNE;JW`OU)(VN^=>w)?5K@G&g`-EluD~O9k9(X#)>hI>4ir9`K}v0MA+| z@S=qQuUa_prbPhnS|sqH#Q;9FDBw$r1$=99frF0n$Hc$<524>MS_5hSgv{x9xYz}D zshC{}+uRmr*D}H`Z%dQe6Z5H?F_QT^H#o6tKD&;IwM7M^iG& kyM4`8{9g<~HuCU?CeWB{F0EZpV z8~XI3CgN#$33%w+g?F*UYHcCK+mGY^{4}Yg_=>M92tuI*Ly<^WmeoulSfJ?umkOja z5pJJefr)4+mZL^-q0YDzke?8VK!6;W1nds^iXHx}^kYc!V4hS_k`&?MXR*RH%E%#v z!r`nMfERk+rzH)oV3#`O-EI_%rkaaQCrXQN{z!@b?JJPtU;c_RQWO7OH+!$#04WOL z?dl7d7N2vCpFdzF*{6qHxYf?|qn>~*yxnh!uYZ@ne#vW-TI~Por$7DXV&Ye|)OZMf zQ-4&ws>38Txig7o-|SHnK9*B4dtPHFxd+h`Ztam{u);lWzftU<6ZC+!KHrd^i!an? zEd(_+%!`H=6{xdRSZJ+ckV7+2T4Zg21U%D X%Pmgv_UH{ob1!w+drM(*ODHvf*o|K83HNJQDi(r z`|?lvHRq}Ja8`9%DITM3asfAs1Y b zbaJQWy_9R0`d7VI?dOP9g|k2b>Eh7>x5I#0qoYuf0b(UWp_!KWTmA`nzOxkj-`77s zVRQsuo+pw&9_DW@&F2B=9|rs{tUf&=*2^$?5RHnxj@5d1>%I1qH3
jj1=JO=k&o^W}jFDWli3H925O6=3JgFw_@o?Im1x@o}R%-X$q){jLVtk(PT$lVF zy^>s*V0FGro1!0`L*XZjV_tr@@deErd^|t8lk;xgo6+W8A`i_L7yOQ7bv!@+H>{RF zP3qG_|C>IFYm>UQo1v(%3rJ_34+YmB4DSPeM|;?2w8z)vQ868k+mq2O+VvUmacPH~ z7ND5nZ1AzVFv_aQYNwRfox@@eV^%SIRRo02mU$a&dX2ZCtyijK)lZ%eaF>Sm`OSzy z?=oAS6bl*0bCv7`Tob>Yn_ONG=8vhQVZRjT8f!5emYGK`>Q*rK4eJ&{>uRBJEb0}f zm)xAEmtf@uqe@b&*L3v WOg-)`jjXX=Z4mOyU2rgQ$E zTTZ5m-%*a}RRQ%iU$jDeO2VPrNAv~ #6oN4I- zLJ>Lk4ixN0ht*eJW$8$RslWh!n(^kFzq{^hx-v-9tws11;PGMs#g(x?pZ_~KAS{vb zHEEPn2_E{` q(r?Cgv(rkBSr( zxsY~;mBbIzZqwWgd}Fi~0c?4vdwYf!;NvoCstAoKLR4eD3RY pfrl) zn1D17@Cn0d9#%63m;9mevYUCu%|2N2Z|=5#G}x{tk3wM)N{4LgUmf%Vcy)DjzLsWI z7nt_P?a5#k?TmIu(8ML&`R#r1M-f}UjWUP{rup?oZU&Q<;X0 fsX z8qTM9RjsGm7$iR;?OYq^d=sr< H+v*mq^L_JqCQ{O z{wqh6mWneVV692^`Xb;zRnHj#Un0Zp26(PL{-_Ct)Iz1 SuN<&+C zxjsE-Shi@JB>k>f9UqksY7-X-^-1nL+}U6=y(ZX)e>9FjM^{rolQz-)l9&y;hTEAI zz1ir+dA#>)CU1Zt{ ~5ZOpC?hskHb9Xa6j@ zSCa`@k`a?-juxWRIr+sEgN2EAapBc!rx3@GGsiCM11RtuG#c(7z@Y9c!b(buQrU8q zJm-Q7>gjM=xAp1g>x+OHC?`GvKlYA3Js0`eKAkaBMBY*z+ `1-5 7StKc;YI^>vPbpp#(# DBUYI*Jn=mGn=Tq13r zg3M*AX#8pGNUaa)VsXMb<#O3E(P_ {a=D8nSd&|19!t z$v>+!qh$-(`WKJpd6R$X=+58j-u&vTTIb@)U$W_O4DF54g)`M)wtjZ%?A_$pSKc^g zb{#4lQ?MQX#hin2)oaH%sZR*1d!h_ZeeN2bo-(bk7uMf7W@}XF!Y&g{xd=HS_u>en8D1_V2!5z>%& zMm?|%N(EZ;XxRVHtvfiYdeH{xh$Q+W+7NA)o^6ya0lwA8x5fVW%ckA>Lhg`dw^nuS zFv&@nOSgtE*35Se=UB1`7kz%8Y@;IPnad*)hjAWr44+LB^ x3T=ppu=-^5L4G-U}4KiNq za~I;_gdC!V#2>mK-(s2 KoFR?>>q+9q=S6&pm` zRV!`nl4yDgE_q La%C0dD#7bZTaROJow5K@b)n=9@O{&Yz0^4r(9kix( zYgtt7Si>1_Iis=(&O6&Y;N`jqAh=geK(j;$!zvbm3|!;H^Ao>^#{?5hx906X7flIX z%k5qGB~k~XT!dEI8ay)9-|KBft};6$BwLx+*VB=%bib9pJe9&l8n#fs(A%h9l-T%y z0sZxxmvEU+P*5GWZn?dVQ`gnXY3;Idt&bnuIJT}`&d?J7K^kye`dNBBKq@qwd4Vkv z7Zzw)7h1HQ`-B_E%7{dK8@+^{%Y~mI_{vI5RPJKMyt@+av9`zHs2Nl?qlfjz2%*Pw zWncZ0^2=9xPs%Y$kzT=0p+zwDDc3V6XY{@4%Sb-Pq{KXnj3+5l-IL5_+9F#XxZz^+ z?NHrBL>=lf>buh3q^mcgZ9cu=e%)mnk;bG`hkv9z>Cb)p_+67G@8|EkdoN^H<)CYw z%BE^n&4G|R`$IeF;TR|h`BD_Y9xG*03RHoK+F0l7vY0~5@(xp?;#~v<_JIOmI)2R! z0Js270N}>>0O0WfRiNToQ!%EHn2ZXsS>0Avn+Q{&rbY}!5PdCzVnjZNgoNN?@SSqn zAf=BsPN|Wj0|$PrlE 4zoIr6;wQ)YV@}dCB1@daj6DJM|3JBYxXtw?|7)I@*P*|> zU;D@dyFB;B*@PawvAqw;0)!W)EGSTh@mqMV!#qk(a)8dyU+15a!<8QrAiSE;LS=rw zvM{uUzeF*_qf}1vDe`Gw 72zLH}WZ{9!hx7YXwF=+U;m!mc@<}pCsjK!l zoj~d$Nxc JsWuW`;SRzNZ zHqH6v=WS7!i8u{?-b5z=9-)hX5$psWfQxey+;zCmQ&YbLe%Z0J(?_~ZbObtfv^p*Y zT|YKqtobpJx2y`-Ywq?F+`5rTub3fqAIoaWTp_qV5kEJ F(Q`d)x!| z`MLgcD6FS>`;h|Wp3H)KfAz)EHSWQl!S0%C4Rp0 KCuZs9WJVC8QExoN;0Jvh1nx26|564TF|N sbFYzGH<)sYh?5^3tVZ zO{1YBro1w)9oZJuRz0mPVh7fiP+c0e7Sb9u#rg%+0I!H{apSyX#dRDPxek2Nz1K;K z*~JSV+zr7R1(B-Ef0HK|(mqchXd*WBlpDLSZjRbV?K?+nDCsd`K$RXTELi$ax DUX~hZdxIx7m#6gsUi>0J8vKgtVm LwQVwn5d z=@#0jc0MRV<~z*%7T&<*G2S4)i8pR|!?iq5mi_WeeCgrC+0 qmos{H`qx_MNxx@iULlsGMXg* A&>L5XXqYXk-d=X(Hq`NUf${lKa>;dgR^O- z)BeA!sEVWN1g83Bilv|`npQzrPoQSWsuSc2nmIFtfmiCH8gG|oQRA(|3VeOMg*J8f z2cW!MPbQdO`dJGq11ZK2Srs3wrl}1tHcr)yYx>TVMKR`-24^^#h!cA*(NUJ#2f?S@ z*h<}6bwY@!eMBhzr=IC1qEob;G-K0Gv7(p{2(Ggc;7nOCn&{2ax4E=(hKZ!GK1bdZ zbSPAxz-^Y6APq}I4a1#ojtG&g$gIT+;sxsRj?SNvj`m8mz|u=>O6_1P?zdLGp5oZ5 zEiO(Po8USq!D@9d#qsca_V)CJ#4hiiLV3IQj`RiQ0c8lWC%t(Gs4Dz3UWHXse{hVV z_R6wvL*LH9A(0iMyL|U!dNNV%y_7ys_DsoAt2}M1|29j@=k@DD1b^tsSpP1?E?DA% zX5=i;yKdrze=K5eH`kaaJ*jN+O`hj;d$Fb>zPK=Mf_lo7x7(rky}_78&q_^m9W_j) z(P*JtQdL@(r5o39R5K*9;=nZ1+c(WZubpHz+U@3D$coI&He{Q*tu=EWveay`H<;$u zUcWhe (>uHQIxHNdcbBv?b$fJ+x;+nk|2T=Y-(x@2fwLI7{~`9= zjt46lG?a_ZRC67Mkx}lrVGiL&M|cB-YTm9qGQu6?0Sw}4h=tt|db*{ry`5q1(=k*u zDA3LH%k5Rqw&Pd`d-Fs0(ChNhOUo^YyPH3qA_gJSm`Ca&hI-~6>A1#uV^t?q`^qO` zm-aIe)o5wkQ8LIj^4knubw}=1+gZPoV(VVAyo@L6lWYUaL=|rkuX;3$UCNQPi*tS& z uB$A z1Uev+otE#G?V9ISYFPZY=v4MfnnAe0Al*UlnoMp)i3qQ)WVD>S&g&Q+lG8l6L+5*3 zxz#~uop(InxS(ff9fxjKF1gv-Yl+Q%J@-NJ)S(0_M|}8-ro@e+GF0lkBXvRH1|g#L zLJSpuLB#81iyMj>Z`CrE)H0W7y~8WDxVHav= z)7 *JL6xA{g-HfX`v&>$dGc-E#bw@naMSl3ox9)6+G$&^ d#mzHn2GF z2gVn<(oXTe%1M*XAt$mDL+(%I;LF1Vcw+R!__Xi{r#%F(gE9PwO+_mGK{hLEst_MR z4VMvjCe>WUNEm^0I@UY o$_Z1%mJrF@oPU4% z!{tZozpM exXr4Z^^Sil1&WCrp(HaTrBCPa5aS`T-lj*$X z rVP1`v9;2Kxo7| JUqBFG&At~0Wd5c7Hi|On(!O}ktMH5?smnM1pPL$5(I7?`u zQ*T*Qy{D&OxbKr+vX>{^&N} &=4N$BKEkqX^;% znt;j{5m7u4*f@lRun=HE3wQGa{W0UQDgA$5>0AvMjv8;G-ZsxZ{rgSOCGn_eGc;3* zd!Foulb@gSxEU2t<<4$A0$N)U5#JGfs6UfDu)=EUL%PsKDoXS=2Jt~(8YI(XT4j^wtLQ{-+U#njUlV07dGSw68!<>n9&-_l* zX+xYSP9!qrPSqvnUHex|G%BIhfE%%kLm}qg`c~>}qm#7oB0k9fbldpBhuO~BgAXe@ zsd>~+xIL8w9@icZ)HrRU6eNXUTJl#{BeelIdw|ye&R=)@k1t*1)vz<_WOuRANNIji zc=xJvm$+MMm)a1Cr?XAEL9#)*A?|>)U1B#s9N;A} %oGDC~*^S z5Wkx@Zs1Mc)}XwBm23GjJpA0k9oaQFlP%KD+r4{FNfW$4HCK-u8NENs9hf{?>e X#)g?NH;suMLqA4) jm%K?h-hb~Dg)4s)p)Z|Y#io3c^v z0Ab{Q+g2&DYqFhq9 n#6VB&z!an4}Y 8q}kn?ZPi2(zTG^S8GYi!9?<9$#~q=Lp9qpZMd$BfZj0q778NA| zPhB)AA=?;KtLNFdgOlyNLA*2%pWu%3_*@5fkKa!1=1T-Iv7%JA=Ok{}l^x$5baGje zJi+tw#-`#!`JdU`kRbEJpRPLGmMI&}leF*ruGuJ)P0E_*4rWL5t34z3&vb(OM)`Wa z(d)N#I@#$vi@>^7TIj1PWFFzb99&lEUiYcrI_jda5v}+n_}-BU(rxR|@VurB7I)kb zl R%Ee79xU5@`bN)Y-L Is8%R@E$iZ5kP_D*ibr~OPgGgCUH zkx;()WVpVsyP>n`=oWf=lkHo_{nf7<(lvSLoAs)%qjeis-f~lBtYRo$C{WR=EPby% z=w^|5psIhO(igAQHLrc|kRCjY?v%MSl%2@Lvo2@Gck%@J`Jf&be0Tx6{{a9TZ)^$r zZo&g-upa=rkme}GA~4f{Dy$ka57>-d#M}q$#IzW{>o?2?eX>npLx*9c(-;|}&jf(p zLjI6yyM|i3o}>5BWv1Hr=&M10pfTv5ZO+Jl18T7$EUjx6_6$o-wEQ*TDb|ZV8}JA_ zi~iPi9h;ASlnzcKzhbur%mYhuw09R^e`6-l;IRRA{@jsCjOe!{3N``&@F@IxVOKdm z$$VUpb7lh)pa5$#h=2p9N6@Fe00K2TR$}Eg 9 z2rx!`Fpj8Fc;F)H6anZ+UWyDSg<+nCm1F+)mf~@<@B?wO?3Tqa+XpWVV;mdfdwf>~ zbzJ;jZ!2zfES`7lqOvfx#OqmR#2@C8=NVA0dnT9p(iRp9xrCXkB#t@ezPW5Bi>IK$ zh~^}hC=an|gQ4%ib=Ii0%?wNwK)j2kHCJE|2R<-3vB0AnG1&rzieic-m7NeXnRrrx z>0OBdyJU80W2HB`u(Zo(SFlL2upFPu**bDy^bSpLfPG}a60ehnGU+PWTfv#eQo($_ z7+r+QNyQ_CR|i|L((RVZNhKw|9ir4XeGdx55fRfOp-oCgPC-dUjZBCz5u(J1lORco zG#Rqw$Wx$5i82+c)Tq;-NsBfe5DHxuSY(N1R#;_?bvD>!i*0t;WsiMfL9(fe>5Msk zEXR{x4vW!MXm4NwQmx3o&pI|>#B2a;NhaLdfZWQn29D-PaT{S>O7c=m*h1u*WQZ?^ zWxc4G -9<(O}}y`nS%VfgHmK{)sLw`etE! z(Ut<^Hh|M?UolfY%s;hfV=avBgWfVlhXvVe0H}cL;&h`lpIe#Uv%2hU u=9Fb=YsEF?F=oW(c1Z1=AHE&45f|<}yM`^WfHu %for cnt,cs in enumerate(c.pagination): - + %endfor + ${base.gravatar_with_user(cs.author, 16)} @@ -33,7 +33,19 @@ ${_('Show File')} ++ + ${_('Diff File')} + + + diff --git a/rhodecode/templates/files/file_authors_box.mako b/rhodecode/templates/files/file_authors_box.mako --- a/rhodecode/templates/files/file_authors_box.mako +++ b/rhodecode/templates/files/file_authors_box.mako @@ -10,6 +10,7 @@ % if c.file_author: - ${h.age_component(c.file_last_commit.date)} + - ${_('Load All Authors')} % elif c.file_last_commit.author_email==email: (${_('last author')}) % endif @@ -27,13 +28,7 @@ % endif+ + ${_('Show Full History')} + + +- + % endfor % endif diff --git a/rhodecode/templates/files/files.mako b/rhodecode/templates/files/files.mako --- a/rhodecode/templates/files/files.mako +++ b/rhodecode/templates/files/files.mako @@ -118,14 +118,322 @@ timeagoActivate(); }); metadataRequest.fail(function (data, textStatus, errorThrown) { - console.log(data); if (data.status != 0) { alert("Error while fetching metadata.\nError code {0} ({1}).Please consider reloading the page".format(data.status,data.statusText)); } }); }; - var callbacks = function() { + var initFileJS = function () { + var state = getState('callbacks'); + + // select code link event + $("#hlcode").mouseup(getSelectionLink); + + // file history select2 used for history of file, and switch to + var initialCommitData = { + at_ref: atRef, + id: null, + text: '${c.commit.raw_id}', + type: 'sha', + raw_id: '${c.commit.raw_id}', + idx: ${c.commit.idx}, + files_url: null, + }; + + // check if we have ref info. + var selectedRef = fileTreeRefs[atRef]; + if (selectedRef !== undefined) { + $.extend(initialCommitData, selectedRef) + } + + var loadUrl = pyroutes.url('repo_file_history', {'repo_name': templateContext.repo_name, 'commit_id': state.rev,'f_path': state.f_path}); + var cacheKey = '__SINGLE_FILE_REFS__'; + var cachedDataSource = {}; + + var loadRefsData = function (query) { + $.ajax({ + url: loadUrl, + data: {}, + dataType: 'json', + type: 'GET', + success: function (data) { + cachedDataSource[cacheKey] = data; + query.callback({results: data.results}); + } + }); + }; + + var feedRefsData = function (query, cachedData) { + var data = {results: []}; + //filter results + $.each(cachedData.results, function () { + var section = this.text; + var children = []; + $.each(this.children, function () { + if (query.term.length === 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) { + children.push(this) + } + }); + data.results.push({ + 'text': section, + 'children': children + }) + }); + + query.callback(data); + }; + + var select2FileHistorySwitcher = function (targetElement, loadUrl, initialData) { + var formatResult = function (result, container, query) { + return formatSelect2SelectionRefs(result); + }; + + var formatSelection = function (data, container) { + var commit_ref = data; + + var tmpl = ''; + if (commit_ref.type === 'sha') { + tmpl = (commit_ref.raw_id || "").substr(0,8); + } else if (commit_ref.type === 'branch') { + tmpl = tmpl.concat(' '); + tmpl = tmpl.concat(escapeHtml(commit_ref.text)); + } else if (commit_ref.type === 'tag') { + tmpl = tmpl.concat(' '); + tmpl = tmpl.concat(escapeHtml(commit_ref.text)); + } else if (commit_ref.type === 'book') { + tmpl = tmpl.concat(' '); + tmpl = tmpl.concat(escapeHtml(commit_ref.text)); + } + var idx = commit_ref.idx || 0; + tmpl = tmpl.concat('r{0}'.format(idx)); + return tmpl + }; + + $(targetElement).select2({ + dropdownAutoWidth: true, + width: "resolve", + containerCssClass: "drop-menu", + dropdownCssClass: "drop-menu-dropdown", + query: function(query) { + var cachedData = cachedDataSource[cacheKey]; + if (cachedData) { + feedRefsData(query, cachedData) + } else { + loadRefsData(query) + } + }, + initSelection: function(element, callback) { + callback(initialData); + }, + formatResult: formatResult, + formatSelection: formatSelection + }); + + }; + + select2FileHistorySwitcher('#file_refs_filter', loadUrl, initialCommitData); + + $('#file_refs_filter').on('change', function(e) { + var data = $('#file_refs_filter').select2('data'); + var commit_id = data.id; + + if ("${c.annotate}" === "True") { + var url = pyroutes.url('repo_files:annotated', + {'repo_name': templateContext.repo_name, + 'commit_id': commit_id, 'f_path': state.f_path}); + } else { + var url = pyroutes.url('repo_files', + {'repo_name': templateContext.repo_name, + 'commit_id': commit_id, 'f_path': state.f_path}); + } + window.location = url; + + }); + + // show more authors + $('#show_authors').on('click', function(e) { + e.preventDefault(); + var url = pyroutes.url('repo_file_authors', + {'repo_name': templateContext.repo_name, + 'commit_id': state.rev, 'f_path': state.f_path}); + + $.pjax({ + url: url, + data: 'annotate=${("1" if c.annotate else "0")}', + container: '#file_authors', + push: false, + timeout: 5000 + }).complete(function(){ + $('#show_authors').hide(); + $('#file_authors_title').html(_gettext('All Authors')) + }) + }); + + // load file short history + $('#file_history_overview').on('click', function(e) { + e.preventDefault(); + path = state.f_path; + if (path.indexOf("#") >= 0) { + path = path.slice(0, path.indexOf("#")); + } + var url = pyroutes.url('repo_changelog_file', + {'repo_name': templateContext.repo_name, + 'commit_id': state.rev, 'f_path': path, 'limit': 6}); + $('#file_history_container').show(); + $('#file_history_container').html('- % if c.file_author: - ${_('Show Authors')} - % endif - -{0}'.format(_gettext('Loading ...'))); + + $.pjax({ + url: url, + container: '#file_history_container', + push: false, + timeout: 5000 + }); + }); + + + }; + + var initTreeJS = function () { + var state = getState('callbacks'); + getFilesMetadata(); + + // fuzzy file filter + fileBrowserListeners(state.node_list_url, state.url_base); + + // switch to widget + var initialCommitData = { + at_ref: atRef, + id: null, + text: '${c.commit.raw_id}', + type: 'sha', + raw_id: '${c.commit.raw_id}', + idx: ${c.commit.idx}, + files_url: null, + }; + + // check if we have ref info. + var selectedRef = fileTreeRefs[atRef]; + if (selectedRef !== undefined) { + $.extend(initialCommitData, selectedRef) + } + + var loadUrl = pyroutes.url('repo_refs_data', {'repo_name': templateContext.repo_name}); + var cacheKey = '__ALL_FILE_REFS__'; + var cachedDataSource = {}; + + var loadRefsData = function (query) { + $.ajax({ + url: loadUrl, + data: {}, + dataType: 'json', + type: 'GET', + success: function (data) { + cachedDataSource[cacheKey] = data; + query.callback({results: data.results}); + } + }); + }; + + var feedRefsData = function (query, cachedData) { + var data = {results: []}; + //filter results + $.each(cachedData.results, function () { + var section = this.text; + var children = []; + $.each(this.children, function () { + if (query.term.length === 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) { + children.push(this) + } + }); + data.results.push({ + 'text': section, + 'children': children + }) + }); + + //push the typed in commit idx + if (!isNaN(query.term)) { + var files_url = pyroutes.url('repo_files', + {'repo_name': templateContext.repo_name, + 'commit_id': query.term, 'f_path': state.f_path}); + + data.results.push({ + 'text': _gettext('go to numeric commit'), + 'children': [{ + at_ref: null, + id: null, + text: 'r{0}'.format(query.term), + type: 'sha', + raw_id: query.term, + idx: query.term, + files_url: files_url, + }] + }); + } + query.callback(data); + }; + + var select2RefFileSwitcher = function (targetElement, loadUrl, initialData) { + var formatResult = function (result, container, query) { + return formatSelect2SelectionRefs(result); + }; + + var formatSelection = function (data, container) { + var commit_ref = data; + + var tmpl = ''; + if (commit_ref.type === 'sha') { + tmpl = (commit_ref.raw_id || "").substr(0,8); + } else if (commit_ref.type === 'branch') { + tmpl = tmpl.concat(' '); + tmpl = tmpl.concat(escapeHtml(commit_ref.text)); + } else if (commit_ref.type === 'tag') { + tmpl = tmpl.concat(' '); + tmpl = tmpl.concat(escapeHtml(commit_ref.text)); + } else if (commit_ref.type === 'book') { + tmpl = tmpl.concat(' '); + tmpl = tmpl.concat(escapeHtml(commit_ref.text)); + } + + var idx = commit_ref.idx || 0; + tmpl = tmpl.concat('r{0}'.format(idx)); + return tmpl + }; + + $(targetElement).select2({ + dropdownAutoWidth: true, + width: "resolve", + containerCssClass: "drop-menu", + dropdownCssClass: "drop-menu-dropdown", + query: function(query) { + + var cachedData = cachedDataSource[cacheKey]; + if (cachedData) { + feedRefsData(query, cachedData) + } else { + loadRefsData(query) + } + }, + initSelection: function(element, callback) { + callback(initialData); + }, + formatResult: formatResult, + formatSelection: formatSelection + }); + + }; + + select2RefFileSwitcher('#refs_filter', loadUrl, initialCommitData); + + $('#refs_filter').on('change', function(e) { + var data = $('#refs_filter').select2('data'); + window.location = data.files_url + }); + + }; + + $(document).ready(function() { timeagoActivate(); if ($('#trimmed_message_box').height() < 50) { @@ -137,250 +445,12 @@ $(this).hide(); }); - var state = getState('callbacks'); - - // VIEW FOR FILE SOURCE if (fileSourcePage) { - // variants for with source code, not tree view - - // select code link event - $("#hlcode").mouseup(getSelectionLink); - - // file history select2 used for history, and switch to - var initialCommitData = { - id: null, - text: '${_("Pick Commit")}', - type: 'sha', - raw_id: null, - files_url: null - }; - - select2FileHistorySwitcher('#diff1', initialCommitData, state); - - // show at, diff to actions handlers - $('#diff1').on('change', function(e) { - $('#diff_to_commit').removeClass('disabled').removeAttr("disabled"); - $('#diff_to_commit').val(_gettext('Diff to Commit ') + e.val.truncateAfter(8, '...')); - - $('#show_at_commit').removeClass('disabled').removeAttr("disabled"); - $('#show_at_commit').val(_gettext('Show at Commit ') + e.val.truncateAfter(8, '...')); - }); - - $('#diff_to_commit').on('click', function(e) { - var diff1 = $('#diff1').val(); - var diff2 = $('#diff2').val(); - - var url_data = { - repo_name: templateContext.repo_name, - source_ref: diff1, - source_ref_type: 'rev', - target_ref: diff2, - target_ref_type: 'rev', - merge: 1, - f_path: state.f_path - }; - window.location = pyroutes.url('repo_compare', url_data); - }); - - $('#show_at_commit').on('click', function(e) { - var diff1 = $('#diff1').val(); - - var annotate = $('#annotate').val(); - if (annotate === "True") { - var url = pyroutes.url('repo_files:annotated', - {'repo_name': templateContext.repo_name, - 'commit_id': diff1, 'f_path': state.f_path}); - } else { - var url = pyroutes.url('repo_files', - {'repo_name': templateContext.repo_name, - 'commit_id': diff1, 'f_path': state.f_path}); - } - window.location = url; - - }); - - // show more authors - $('#show_authors').on('click', function(e) { - e.preventDefault(); - var url = pyroutes.url('repo_file_authors', - {'repo_name': templateContext.repo_name, - 'commit_id': state.rev, 'f_path': state.f_path}); - - $.pjax({ - url: url, - data: 'annotate=${("1" if c.annotate else "0")}', - container: '#file_authors', - push: false, - timeout: 5000 - }).complete(function(){ - $('#show_authors').hide(); - $('#file_authors_title').html(_gettext('All Authors')) - }) - }); - - // load file short history - $('#file_history_overview').on('click', function(e) { - e.preventDefault(); - path = state.f_path; - if (path.indexOf("#") >= 0) { - path = path.slice(0, path.indexOf("#")); - } - var url = pyroutes.url('repo_changelog_file', - {'repo_name': templateContext.repo_name, - 'commit_id': state.rev, 'f_path': path, 'limit': 6}); - $('#file_history_container').show(); - $('#file_history_container').html('{0}'.format(_gettext('Loading ...'))); - - $.pjax({ - url: url, - container: '#file_history_container', - push: false, - timeout: 5000 - }) - }); - + initFileJS() + } else { + initTreeJS() } - // VIEW FOR FILE TREE BROWSER - else { - getFilesMetadata(); - - // fuzzy file filter - fileBrowserListeners(state.node_list_url, state.url_base); - - // switch to widget - var initialCommitData = { - at_ref: atRef, - id: null, - text: '${c.commit.raw_id}', - type: 'sha', - raw_id: '${c.commit.raw_id}', - idx: ${c.commit.idx}, - files_url: null, - }; - // check if we have ref info. - var selectedRef = fileTreeRefs[atRef]; - if (selectedRef !== undefined) { - $.extend(initialCommitData, selectedRef) - } - - var loadUrl = pyroutes.url('repo_refs_data', {'repo_name': templateContext.repo_name}); - var cacheKey = '__ALL_FILE_REFS__'; - var cachedDataSource = {}; - - var loadRefsData = function (query) { - $.ajax({ - url: loadUrl, - data: {}, - dataType: 'json', - type: 'GET', - success: function (data) { - cachedDataSource[cacheKey] = data; - query.callback({results: data.results}); - } - }); - }; - - var feedRefsData = function (query, cachedData) { - var data = {results: []}; - //filter results - $.each(cachedData.results, function () { - var section = this.text; - var children = []; - $.each(this.children, function () { - if (query.term.length === 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) { - children.push(this) - } - }); - data.results.push({ - 'text': section, - 'children': children - }) - }); - - //push the typed in commit idx - if (!isNaN(query.term)) { - var files_url = pyroutes.url('repo_files', - {'repo_name': templateContext.repo_name, - 'commit_id': query.term, 'f_path': state.f_path}); - - data.results.push({ - 'text': _gettext('go to numeric commit'), - 'children': [{ - at_ref: null, - id: null, - text: 'r{0}'.format(query.term), - type: 'sha', - raw_id: query.term, - idx: query.term, - files_url: files_url, - }] - }); - } - query.callback(data); - }; - - var select2RefFileSwitcher = function (targetElement, loadUrl, initialData) { - var formatResult = function (result, container, query) { - return formatSelect2SelectionRefs(result); - }; - - var formatSelection = function (data, container) { - var commit_ref = data; - - var tmpl = ''; - if (commit_ref.type === 'sha') { - tmpl = commit_ref.raw_id.substr(0,8); - } else if (commit_ref.type === 'branch') { - tmpl = tmpl.concat(' '); - tmpl = tmpl.concat(escapeHtml(commit_ref.text)); - } else if (commit_ref.type === 'tag') { - tmpl = tmpl.concat(' '); - tmpl = tmpl.concat(escapeHtml(commit_ref.text)); - } else if (commit_ref.type === 'book') { - tmpl = tmpl.concat(' '); - tmpl = tmpl.concat(escapeHtml(commit_ref.text)); - } - - tmpl = tmpl.concat('r{0}'.format(commit_ref.idx)); - return tmpl - }; - - $(targetElement).select2({ - dropdownAutoWidth: true, - width: "resolve", - containerCssClass: "drop-menu", - dropdownCssClass: "drop-menu-dropdown", - query: function(query) { - - var cachedData = cachedDataSource[cacheKey]; - if (cachedData) { - feedRefsData(query, cachedData) - } else { - loadRefsData(query) - } - }, - initSelection: function(element, callback) { - callback(initialData); - }, - formatResult: formatResult, - formatSelection: formatSelection - }); - - }; - - select2RefFileSwitcher('#refs_filter', loadUrl, initialCommitData); - - $('#refs_filter').on('change', function(e) { - var data = $('#refs_filter').select2('data'); - window.location = data.files_url - }); - - } - }; - - $(document).ready(function() { - callbacks(); var search_GET = "${request.GET.get('search','')}"; if (search_GET === "1") { NodeFilter.initFilter(); diff --git a/rhodecode/templates/files/files_browser.mako b/rhodecode/templates/files/files_browser.mako --- a/rhodecode/templates/files/files_browser.mako +++ b/rhodecode/templates/files/files_browser.mako @@ -17,18 +17,28 @@ % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name): -- - ${_('Add File')} + % endif % if c.enable_downloads: <% at_path = '{}'.format(request.GET.get('at') or c.commit.raw_id[:6]) %>+ ## file tree is computed from caches, and filled in- - ${_('Download ZIP @ ')}% endif @@ -45,6 +55,7 @@${at_path}
- + % if c.f_path == '/': + + ${_('Download full tree ZIP')} + + % else: + + ${_('Download this tree ZIP')} + + % endif${c.file_tree |n} diff --git a/rhodecode/templates/files/files_browser_tree.mako b/rhodecode/templates/files/files_browser_tree.mako --- a/rhodecode/templates/files/files_browser_tree.mako +++ b/rhodecode/templates/files/files_browser_tree.mako @@ -17,19 +17,13 @@ - %if c.file.parent: -- - - .. - + + - %endif + %for cnt,node in enumerate(c.file):+ + ${h.files_breadcrumbs(c.repo_name,c.commit.raw_id,c.file.path, request.GET.get('at'), limit_items=True)} + -- - - - diff --git a/rhodecode/templates/files/files_pjax.mako b/rhodecode/templates/files/files_pjax.mako --- a/rhodecode/templates/files/files_pjax.mako +++ b/rhodecode/templates/files/files_pjax.mako @@ -13,14 +13,7 @@ -% if c.file.is_submodule(): diff --git a/rhodecode/templates/files/files_source.mako b/rhodecode/templates/files/files_source.mako --- a/rhodecode/templates/files/files_source.mako +++ b/rhodecode/templates/files/files_source.mako @@ -1,16 +1,61 @@ <%namespace name="sourceblock" file="/codeblocks/source.mako"/> - +-- - -+++ +++++ + ++ ## loads the history for a file + ${h.hidden('file_refs_filter')} ++ ++ + ## Download + % if c.lf_node: + + ${_('Download largefile')} + + % else: + + ${_('Download file')} + + % endif + + %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name): + ## on branch head, can edit files + %if c.on_branch_head and c.branch_or_raw_id and not c.file.is_binary: + ## binary files are delete only + % if c.file.is_binary: + ${h.link_to(_('Edit'), '#Edit', class_="btn btn-default disabled tooltip", title=_('Editing binary files not allowed'))} + ${h.link_to(_('Delete'), h.route_path('repo_files_remove_file',repo_name=c.repo_name,commit_id=c.branch_or_raw_id,f_path=c.f_path, _anchor='edit'),class_="btn btn-danger")} + % else: + + ${_('Edit on branch: ')}+${c.branch_name}
+ + + + ${_('Delete')} + + % endif + ## not on head, forbid all + % else: + ${h.link_to(_('Edit'), '#Edit', class_="btn btn-default disabled tooltip", title=_('Editing files allowed only when on branch head commit'))} + ${h.link_to(_('Delete'), '#Delete', class_="btn btn-default btn-danger disabled tooltip", title=_('Deleting files allowed only when on branch head commit'))} + % endif + %endif + ++- - ++ ${h.files_breadcrumbs(c.repo_name,c.commit.raw_id,c.file.path, request.GET.get('at'))} +- - - - ${c.file.unicode_path_safe} - - - -+
% if c.lf_node: | ${_('LargeFile')} ${h.format_byte_size_binary(c.lf_node.size)} @@ -22,50 +67,22 @@ | ${c.file.mimetype} | ${h.get_lexer_for_filenode(c.file).__class__.__name__}%if c.file.is_binary: <% rendered_binary = h.render_binary(c.repo_name, c.file)%> diff --git a/rhodecode/templates/files/files_source_header.mako b/rhodecode/templates/files/files_source_header.mako --- a/rhodecode/templates/files/files_source_header.mako +++ b/rhodecode/templates/files/files_source_header.mako @@ -36,29 +36,6 @@-- - ---${_('Show/Diff file')}
-- ${h.hidden('diff1')} - ${h.hidden('diff2',c.commit.raw_id)} - ${h.hidden('annotate', c.annotate)} -----${_('Action')}
-- ${h.submit('diff_to_commit',_('Diff to Commit'),class_="btn disabled",disabled="true")} - ${h.submit('show_at_commit',_('Show at Commit'),class_="btn disabled",disabled="true")} --